[POWERPC] spufs: add a phys-id attribute to each SPU context
authorarnd@arndb.de <arnd@arndb.de>
Mon, 19 Jun 2006 18:33:24 +0000 (20:33 +0200)
committerPaul Mackerras <paulus@samba.org>
Wed, 21 Jun 2006 05:01:30 +0000 (15:01 +1000)
For performance analysis, it is often interesting to know
which physical SPE a thread is currently running on, and,
more importantly, if it is running at all.

This patch adds a simple attribute to each SPU directory
with that information.
The attribute is read-only and called 'phys-id'. It contains
an ascii string with the number of the physical SPU (e.g.
"0x5"), or alternatively the string "0xffffffff" (32 bit -1)
when it is not running at all at the time that the file
is read.

Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/cell/spufs/file.c

index 3bc0091..80c0266 100644 (file)
@@ -1328,6 +1328,22 @@ static u64 spufs_srr0_get(void *data)
 DEFINE_SIMPLE_ATTRIBUTE(spufs_srr0_ops, spufs_srr0_get, spufs_srr0_set,
                        "%llx\n")
 
+static u64 spufs_id_get(void *data)
+{
+       struct spu_context *ctx = data;
+       u64 num;
+
+       spu_acquire(ctx);
+       if (ctx->state == SPU_STATE_RUNNABLE)
+               num = ctx->spu->number;
+       else
+               num = (unsigned int)-1;
+       spu_release(ctx);
+
+       return num;
+}
+DEFINE_SIMPLE_ATTRIBUTE(spufs_id_ops, spufs_id_get, 0, "0x%llx\n")
+
 struct tree_descr spufs_dir_contents[] = {
        { "mem",  &spufs_mem_fops,  0666, },
        { "regs", &spufs_regs_fops,  0666, },
@@ -1351,5 +1367,6 @@ struct tree_descr spufs_dir_contents[] = {
        { "spu_tag_mask", &spufs_spu_tag_mask_ops, 0666, },
        { "event_mask", &spufs_event_mask_ops, 0666, },
        { "srr0", &spufs_srr0_ops, 0666, },
+       { "phys-id", &spufs_id_ops, 0666, },
        {},
 };