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)