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

错误

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

作者

Arnd Bergmann <arndb@de.ibm.com>

参见

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