mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-10-21 11:02:23 +00:00
67207b9664
This is the current version of the spu file system, used for driving SPEs on the Cell Broadband Engine. This release is almost identical to the version for the 2.6.14 kernel posted earlier, which is available as part of the Cell BE Linux distribution from http://www.bsc.es/projects/deepcomputing/linuxoncell/. The first patch provides all the interfaces for running spu application, but does not have any support for debugging SPU tasks or for scheduling. Both these functionalities are added in the subsequent patches. See Documentation/filesystems/spufs.txt on how to use spufs. Signed-off-by: Arnd Bergmann <arndb@de.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
67 lines
1.6 KiB
C
67 lines
1.6 KiB
C
/*
|
|
* SPU file system -- SPU context management
|
|
*
|
|
* (C) Copyright IBM Deutschland Entwicklung GmbH 2005
|
|
*
|
|
* Author: Arnd Bergmann <arndb@de.ibm.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#include <linux/slab.h>
|
|
#include <asm/spu.h>
|
|
#include "spufs.h"
|
|
|
|
struct spu_context *alloc_spu_context(void)
|
|
{
|
|
struct spu_context *ctx;
|
|
ctx = kmalloc(sizeof *ctx, GFP_KERNEL);
|
|
if (!ctx)
|
|
goto out;
|
|
ctx->spu = spu_alloc();
|
|
if (!ctx->spu)
|
|
goto out_free;
|
|
init_rwsem(&ctx->backing_sema);
|
|
spin_lock_init(&ctx->mmio_lock);
|
|
kref_init(&ctx->kref);
|
|
goto out;
|
|
out_free:
|
|
kfree(ctx);
|
|
ctx = NULL;
|
|
out:
|
|
return ctx;
|
|
}
|
|
|
|
void destroy_spu_context(struct kref *kref)
|
|
{
|
|
struct spu_context *ctx;
|
|
ctx = container_of(kref, struct spu_context, kref);
|
|
if (ctx->spu)
|
|
spu_free(ctx->spu);
|
|
kfree(ctx);
|
|
}
|
|
|
|
struct spu_context * get_spu_context(struct spu_context *ctx)
|
|
{
|
|
kref_get(&ctx->kref);
|
|
return ctx;
|
|
}
|
|
|
|
int put_spu_context(struct spu_context *ctx)
|
|
{
|
|
return kref_put(&ctx->kref, &destroy_spu_context);
|
|
}
|
|
|
|
|