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 架构实现。使用此系统调用的程序不具备可移植性。

缺陷

此代码尚未完全实现此处列出的所有功能。

作者

Arnd Bergmann <arndb@de.ibm.com>

另请参见

capabilities(7), close(2), spu_run(2), spufs(7)