姓名
在分页器拥有的 VMO 上查询分页器相关统计信息。
SYNOPSIS
#include <zircon/syscalls.h>
zx_status_t zx_pager_query_vmo_stats(zx_handle_t pager,
zx_handle_t pager_vmo,
uint32_t options,
void* buffer,
size_t buffer_size);
说明
查询 pager_vmo,以获取与分页器相关的任何统计信息,例如pager_vmo 是否已修改。
pager_vmo 必须是之前由 zx_pager_create_vmo() 从 pager 创建的。
如果调用方还希望重置查询的统计信息,options 可以设为 ZX_PAGER_RESET_VMO_STATS。
如果 options 值为 0,系统不会重置任何状态,并且执行纯查询。
buffer 应该是指向 zx_pager_vmo_stats_t 结构体的指针,该结构体用于保存
查询,并且 buffer_size 应该足以容纳该结构。
typedef struct zx_pager_vmo_stats {
// Will be set to ZX_PAGER_VMO_STATS_MODIFIED if the VMO was modified, or 0 otherwise.
// Note that this can be set to 0 if a previous zx_pager_query_vmo_stats() call specified the
// ZX_PAGER_RESET_VMO_STATS option, which resets the modified state.
uint32_t modified;
} zx_pager_vmo_stats_t;
请注意,此调用可能会通过使用zx_pager_query_vmo_stats()
可查询状态(如果指定了 ZX_PAGER_RESET_VMO_STATS 选项)。例如,如果
zx_vmo_write() 后跟两个连续的 zx_pager_query_vmo_stats(),其中
ZX_PAGER_RESET_VMO_STATS 选项,只有第一个选项会看到 modified 设置为
ZX_PAGER_VMO_STATS_MODIFIED。由于在首次更新后没有进行任何其他修改,
zx_pager_query_vmo_stats(),第二个 zx_pager_query_vmo_stats() 将返回 modified 作为 0。
权限
pager 的类型必须为 ZX_OBJ_TYPE_PAGER 且包含 ZX_RIGHT_MANAGE_VMO。
pager_vmo 的类型必须为 ZX_OBJ_TYPE_VMO 且包含 ZX_RIGHT_READ。
返回值
如果成功,zx_pager_query_vmo_stats() 会返回 ZX_OK。如果失败,则系统会显示负面错误
返回的值。
错误
ZX_ERR_BAD_HANDLE pager 或 pager_vmo 不是有效的句柄。
ZX_ERR_WRONG_TYPE pager 不是分页器句柄,或 pager_vmo 不是 VMO 句柄。
ZX_ERR_ACCESS_DENIED 分页器不含 ZX_RIGHT_MANAGE_VMO 或 pager_vmo 不含
ZX_RIGHT_READ。
ZX_ERR_INVALID_ARGS pager_vmo 不是通过 pager 创建的 VMO,或者 options 既不是 0 也不是
ZX_PAGER_RESET_VMO_STATS 或 buffer 是无效的指针。
ZX_ERR_BUFFER_TOO_SMALL buffer_size 不够大,无法容纳 zx_pager_vmo_stats_t。