spu_create¶
名称¶
spu_create - 创建一个新的 SPU 上下文
概要¶
#include <sys/types.h> #include <sys/spu.h> int spu_create(const char *pathname, int flags, mode_t mode);
描述¶
spu_create 系统调用用于实现 Cell 宽带引擎架构的 PowerPC 机器,以访问协同处理器单元 (SPU)。它在路径名中为 SPU 创建一个新的逻辑上下文,并返回与其关联的句柄。路径名必须指向 SPU 文件系统 (spufs) 挂载点中不存在的目录。如果 spu_create 成功,将在路径名处创建一个目录并填充文件。
返回的文件句柄只能传递给 spu_run(2) 或关闭,其上未定义其他操作。当它关闭时,spufs 中所有关联的目录项都将被移除。当指向上下文目录内部或此文件描述符的最后一个文件句柄关闭时,逻辑 SPU 上下文将被销毁。
参数 flags 可以为零或以下常量的任意位或组合
- SPU_RAWIO
允许将 SPU 的一些硬件寄存器映射到用户空间。此标志需要 CAP_SYS_RAWIO 能力,请参见 capabilities(7)。
mode 参数指定在 spufs 中创建新目录所用的权限。mode 通过用户的 umask(2) 值修改,然后用于目录及其包含的文件。文件权限会屏蔽掉 mode 的一些其他位,因为它们通常只支持读写访问。有关可能的 mode 值的完整列表,请参见 stat(2)。
返回值¶
spu_create 返回一个新的文件描述符。它可能返回 -1 表示错误条件,并设置 errno 为以下错误代码之一。
错误¶
- EACCES
当前用户对 spufs 挂载点没有写权限。
EEXIST 给定路径名处已存在 SPU 上下文。
- EFAULT 路径名在当前地址空间中不是有效的字符串指针。
space.
EINVAL 路径名不是 spufs 挂载点中的目录。
ELOOP 解析路径名时发现太多符号链接。
EMFILE 进程已达到其最大打开文件限制。
- ENAMETOOLONG
路径名过长。
ENFILE 系统已达到全局打开文件限制。
ENOENT 路径名的一部分无法解析。
ENOMEM 内核无法分配所有所需的资源。
- ENOSPC 没有足够的 SPU 资源来创建一个新的上下文,或者已达到用户特定的 SPU 上下文数量限制。
context or the user specific limit for the number of SPU con- texts has been reached.
- ENOSYS 当前系统未提供该功能,因为硬件不提供 SPU 或者 spufs 模块未加载。
either the hardware does not provide SPUs or the spufs module is not loaded.
- ENOTDIR
路径名的一部分不是目录。
注意事项¶
spu_create 旨在由实现更抽象 SPU 接口的库使用,而不是由常规应用程序使用。有关推荐的库,请参见 http://www.bsc.es/projects/deepcomputing/linuxoncell/。
文件¶
路径名必须指向 spufs 挂载点下的位置。按照惯例,它被挂载在 /spu。
遵循¶
此调用是 Linux 特有的,仅由 ppc64 架构实现。使用此系统调用的程序不具备可移植性。
缺陷¶
此代码尚未完全实现此处列出的所有功能。
另请参见¶
capabilities(7), close(2), spu_run(2), spufs(7)