xlate_pin 内核服务

用途

锁定虚拟缓冲区的所有页。

语法

int xlate_pin (dp, baddr, count, rw)
struct xmem *dp;
caddr_t baddr;
int count;
int rw;

描述

xlate_pin 内核服务将 巴德尔 参数指示的虚拟缓冲区的所有页面锁定为 计数 的长度,并且还会将预转换信息附加到 民主党 参数指向的交叉内存描述符。

xlate_pin 内核服务会生成短期引脚,该引脚将支持 mmap什马特 分配的内存缓冲区。

除了固定和转换每个页面之外,还会根据所需访问权 (如 参数所指定) 来验证对页面的访问许可权。 对于 读取 (_READ)设置,必须允许对该页面的写访问权。 对于 写 (_WRITE)设置,必须仅允许对该页面的读访问权。

调用者可以在调用之前 (通过对 xlate_create 内核服务的调用) 预先分配预转换数据结构并将其附加到交叉内存描述符,或者让此服务分配必要的数据结构。 如果交叉内存描述符的类型已经为 XMEM_XLATE,那么假定已分配数据结构。 如果调用者希望预转换数据结构在后续 xlate_unpin 调用中持久存在,那么他们还应该在对 xlate_create 内核服务的调用上设置 XLATE_PERSISTENT 标志。

参数

描述
dp 指向该交叉内存描述符。
巴德尔 指向该虚拟缓冲区。
COUNT 指定该虚拟缓冲区的长度。
rw 指定每个页面的访问许可权。

返回值

如果成功, xlate_pin 内核服务将返回 0。 如果不成功,那么将返回下列其中一项:
描述
EINVAL 交叉内存描述符或参数无效。
ENOMEM 无法分配内存。
ENOSPC 调页资源耗尽。
XMEM_FAIL 页面访问违例。

执行环境

xlate_pin 内核服务仅可从进程环境进行调用,并且交叉内存描述符必须有效。