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 内核服务仅可从进程环境进行调用,并且交叉内存描述符必须有效。