姓名
在分页器拥有的 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
。
另请参阅
zx_pager_create_vmo()
zx_pager_detach_vmo()
zx_pager_op_range()
zx_pager_query_dirty_ranges()
zx_pager_supply_pages()