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 上下文将被销毁。
参数标志可以为零或以下常量的按位或组合
- 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 路径名不是当前地址中的有效字符串指针
空间。
EINVAL 路径名不是 spufs 挂载点中的目录。
ELOOP 在解析路径名时找到了太多符号链接。
EMFILE 该进程已达到其最大打开文件限制。
- ENAMETOOLONG
路径名太长。
ENFILE 系统已达到全局打开文件限制。
ENOENT 无法解析路径名的部分。
ENOMEM 内核无法分配所有必需的资源。
- ENOSPC 没有足够的 SPU 资源可用于创建新的
上下文,或者用户特定的 SPU 上下文数量限制已达到。
- ENOSYS 当前系统未提供此功能,因为
硬件不提供 SPU,或者未加载 spufs 模块。
- ENOTDIR
路径名的部分不是目录。
注释¶
spu_create 旨在用于实现更抽象的 SPU 接口的库,而不是用于常规应用程序。请参阅http://www.bsc.es/projects/deepcomputing/linuxoncell/ 了解推荐的库。
文件¶
路径名必须指向 spufs 挂载点下的位置。按照惯例,它被挂载在 /spu 中。
符合标准¶
此调用是 Linux 特有的,仅由 ppc64 架构实现。使用此系统调用的程序不具有可移植性。
错误¶
代码尚未完全实现此处列出的所有功能。
参见¶
capabilities(7), close(2), spu_run(2), spufs(7)