You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
[CELL] spufs: extension of spu_create to support affinity definition
This patch adds support for additional flags at spu_create, which relate to the establishment of affinity between contexts and contexts to memory. A fourth, optional, parameter is supported. This parameter represent a affinity neighbor of the context being created, and is used when defining SPU-SPU affinity. Affinity is represented as a doubly linked list of spu_contexts. Signed-off-by: Andre Detsch <adetsch@br.ibm.com> Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
This commit is contained in:
committed by
Arnd Bergmann
parent
3ad216cae8
commit
8e68e2f248
@@ -34,14 +34,27 @@ struct spufs_calls spufs_calls = {
|
||||
* this file is not used and the syscalls directly enter the fs code */
|
||||
|
||||
asmlinkage long sys_spu_create(const char __user *name,
|
||||
unsigned int flags, mode_t mode)
|
||||
unsigned int flags, mode_t mode, int neighbor_fd)
|
||||
{
|
||||
long ret;
|
||||
struct module *owner = spufs_calls.owner;
|
||||
struct file *neighbor;
|
||||
int fput_needed;
|
||||
|
||||
ret = -ENOSYS;
|
||||
if (owner && try_module_get(owner)) {
|
||||
ret = spufs_calls.create_thread(name, flags, mode);
|
||||
if (flags & SPU_CREATE_AFFINITY_SPU) {
|
||||
neighbor = fget_light(neighbor_fd, &fput_needed);
|
||||
if (neighbor) {
|
||||
ret = spufs_calls.create_thread(name, flags,
|
||||
mode, neighbor);
|
||||
fput_light(neighbor, fput_needed);
|
||||
}
|
||||
}
|
||||
else {
|
||||
ret = spufs_calls.create_thread(name, flags,
|
||||
mode, NULL);
|
||||
}
|
||||
module_put(owner);
|
||||
}
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user