zx_vmar_map_iob

摘要

映射附加到 IOBuffer 的内存区域。此调用具有与 zx_vmar_map 类似的语义,但不支持映射区域的子集。

声明

#include <zircon/syscalls.h>

zx_status_t zx_vmar_map_iob(zx_handle_t handle,
                             zx_vm_option_t options,
                             size_t vmar_offset,
                             zx_handle_t iob_ep,
                             uint32_t region_index,
                             size_t region_len,
                             zx_vaddr_t* addr_out);

说明

将给定的 IOBuffer 区域映射到给定的虚拟内存地址区域。映射区域会保留对映射区域的引用,这意味着关闭映射该区域的端点不会移除此函数添加的映射。

options 等同于 zx_vmar_mapoptions 参数

vmar_offset 等同于 zx_vmar_mapvmar_offset 参数。

ep 是包含要映射的区域的端点,如 zx_iob_create 中创建的那样。

region_index 是要映射的内存区域的索引。

region_offset 等同于 zx_vmar_mapvmo_offset 参数。

region_len 等同于 len 参数的 zx_vmar_map。它 必须为非零值且按页对齐

返回值

成功后,zx_vmar_map_iob() 会返回 ZX_OK 和 映射的绝对基地址(通过 addr_out)。基地址将按页对齐且为非零值。 如果失败,则返回负错误值。

错误

ZX_ERR_BAD_HANDLE handleiob_ep 不是有效的句柄。

ZX_ERR_WRONG_TYPE handleiob_ep 分别不是 VMAR 或 IOB 句柄。

ZX_ERR_BAD_STATE handle 是指已销毁的 VMAR。

对于以下任一情况,ZX_ERR_INVALID_ARGS

  • mapped_addroptions 无效。
  • vmar_offset 未指定 ZX_VM_SPECIFICZX_VM_SPECIFIC_OVERWRITEZX_VM_OFFSET_IS_UPPER_LIMIT 中的任何一个时,为非零值。
  • 同时指定了 ZX_VM_SPECIFIC_OVERWRITEZX_VM_MAP_RANGE
  • 同时指定了 ZX_VM_OFFSET_IS_UPPER_LIMITZX_VM_SPECIFICZX_VM_SPECIFIC_OVERWRITE
  • 指定了 ZX_VM_FAULT_BEYOND_STREAM_SIZE
  • vmar_offsetlen 描述的分配因超出区域边界而无法满足。
  • vmar_offsetregion_offset 未按页对齐。
  • region_len 为 0 或未按页对齐。

ZX_ERR_ALREADY_EXISTS ZX_VM_SPECIFIC 已指定,但未指定 ZX_VM_SPECIFIC_OVERWRITE,且请求的范围与另一个映射重叠。

ZX_ERR_NO_RESOURCES 如果在 VMAR 中找不到用于创建映射的位置。

ZX_ERR_ACCESS_DENIED 权限不足,无法进行请求的映射。

ZX_ERR_NOT_SUPPORTED 如果区域可调整大小、可舍弃或由分页器提供支持,但未设置 ZX_VM_ALLOW_FAULTS

ZX_ERR_BUFFER_TOO_SMALL 区域不可调整大小,且映射超出区域末尾,但未设置 ZX_VM_ALLOW_FAULTS

ZX_ERR_NO_MEMORY 因内存不足而失败。 用户空间没有很好的方法来处理此(不太可能发生的)错误。 在未来的 build 中,此错误将不再发生。

对于以下任一情况,ZX_ERR_OUT_OF_RANGE

  • region_offset + ROUNDUP(len, PAGE_SIZE) 溢出。
  • region_index 对于提供的 IOB 无效

备注

VMAR 操作

映射的区域通常支持 VMAR 操作,例如 zx_vmar_protectzx_vmar_op_rangezx_vmar_destroy。区域的访问规则可能会修改或限制这些操作,如规则规范中所述。

另请参阅