xmattach 内核服务

用途

连接到用户缓冲区以执行跨内存操作。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/xmem.h>
int xmattach (addr, count, dp, segflag)
char * addr;
int count;
struct xmem * dp;
int segflag;

参数

描述
addr 指定在跨内存操作中要访问的用户缓冲区的地址。
COUNT 指示在跨内存操作中要访问的用户缓冲区的大小。
dp 指定一个跨内存描述符。 必须将 民主党-> aspace_id 变量的值设置为 XMEM_INVAL
分段标志 指定段标志。 此标志用于确定跨内存描述符所应用于的内存的地址空间,以及用于其他用途。 此标志的有效值可以在 /usr/include/xmem.h 文件中找到。

描述

克马塔赫 内核服务准备用户缓冲区,以便设备驱动程序可以在请求 I/O 操作的进程下访问该缓冲区而不执行。 设备上半部分例程会调用 克马塔赫 内核服务。 克马塔赫 内核服务允许内核进程或设备的下半部分例程使用 克梅明xmemout 内核服务来访问用户缓冲区。 设备驱动程序必须使用 xmdetach 内核服务来通知内核已完成访问用户缓冲区的情况。

内核会记住为跨内存操作连接哪些段。 在拆离所有跨内存描述符之前,无法释放与这些段相关联的资源。 "跨内存内核服务" in Memory Kernel Services in 内核扩展和设备支持编程概念 描述跨内存内核服务如何使用跨内存描述符。

注:克马塔赫 内核服务重新映射包含跨内存缓冲区的用户内存时,效果是依赖于机器的。 此外,跨内存描述符不会由子进程继承。

可以在跨内存描述符所描述的内存区域上强制实施存储密钥保护。 强制实施是在跨内存服务 (例如 克斯门德马 内核服务) 执行的正常访问检查期间执行的。 内核密钥集可以包含在交叉内存描述符中以限制内存可访问性。 当密钥集与跨内存描述符相关联时,对内存区域的访问受到该密钥集的限制。 键集是必需的,因为跨内存描述符可以描述一个虚拟内存区域,并将多个键分配给它所包含的页面。 通常,密钥集描述对其启动连接的上下文的可访问性。 例如,连接到用户空间的跨内存包含用户方式辅助功能选项 (keyset) 的描述。 将密钥集添加到内核跨内存描述符也可以增强系统 RAS ,因为它们限制了跨内存描述符的内核访问。 通常,它仅限于 克马塔赫 调用者或特定密钥,以捕获交叉内存描述符被误用的情况。

用户方式存储密钥始终与使用 USER_SPACE用户空间 segflag 连接的描述符相关联。 始终需要这些标志来连接到用户地址空间,因此不需要显式更新就可以在用户内存连接上启用存储密钥保护。 一旦连接,需要跨内存描述符的现有内核服务在执行内存访问或检查用户可访问性时强制实施在连接时保存的用户密钥集。

对于内核内存,不使用密钥集来限制与 SYS_ADSPACE连接的区域。 通过 SYS_ADSPACE_ASSIGN_KEYSET 连接区域会将调用者的密钥集与跨内存区域关联。

执行环境

仅可从 流程环境 调用 克马塔赫 内核服务。

返回值

描述
XMEM_SUCC 指示操作成功。
XMEM_FAIL 指示下列其中一个错误:
  • 计数 参数所指示的缓冲区大小小于 0 等于 0。
  • 跨内存描述符正在使用中 (民主党-> aspace_id! = XMEM_INVAL)。
  • 未定义由 地址计数 参数指示的内存区域。