]> err.no Git - linux-2.6/commitdiff
[POWERPC] spufs: Add tid file
authorChristoph Hellwig <hch@lst.de>
Fri, 29 Jun 2007 00:58:01 +0000 (10:58 +1000)
committerPaul Mackerras <paulus@samba.org>
Tue, 3 Jul 2007 05:24:45 +0000 (15:24 +1000)
The new tid file contains the ID of the thread currently running the
context, if any.  This is used so that the new spu-top and spu-ps
tools can find the thread in /proc.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/cell/spufs/file.c
arch/powerpc/platforms/cell/spufs/sched.c
arch/powerpc/platforms/cell/spufs/spufs.h

index 2e84ed5ae67b5e17fa339eb55d6a2b155d3e3ec1..2bb51ca51a6c18a5da8d6bf75614e29dacff0f0c 100644 (file)
@@ -2039,6 +2039,26 @@ static const struct file_operations spufs_proxydma_info_fops = {
        .read = spufs_proxydma_info_read,
 };
 
+static int spufs_show_tid(struct seq_file *s, void *private)
+{
+       struct spu_context *ctx = s->private;
+
+       seq_printf(s, "%d\n", ctx->tid);
+       return 0;
+}
+
+static int spufs_tid_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, spufs_show_tid, SPUFS_I(inode)->i_ctx);
+}
+
+static const struct file_operations spufs_tid_fops = {
+       .open           = spufs_tid_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
 struct tree_descr spufs_dir_contents[] = {
        { "capabilities", &spufs_caps_fops, 0444, },
        { "mem",  &spufs_mem_fops,  0666, },
@@ -2072,6 +2092,7 @@ struct tree_descr spufs_dir_contents[] = {
        { "wbox_info", &spufs_wbox_info_fops, 0444, },
        { "dma_info", &spufs_dma_info_fops, 0444, },
        { "proxydma_info", &spufs_proxydma_info_fops, 0444, },
+       { "tid", &spufs_tid_fops, 0444, },
        {},
 };
 
@@ -2095,6 +2116,7 @@ struct tree_descr spufs_dir_nosched_contents[] = {
        { "psmap", &spufs_psmap_fops, 0666, },
        { "phys-id", &spufs_id_ops, 0666, },
        { "object-id", &spufs_object_id_ops, 0666, },
+       { "tid", &spufs_tid_fops, 0444, },
        {},
 };
 
index 4381dd00d2317935cfdb90c9431bde4ee6590ee7..540067550e88fcdad5880dea870037c3c8e77b85 100644 (file)
@@ -101,6 +101,13 @@ void spu_set_timeslice(struct spu_context *ctx)
  */
 void __spu_update_sched_info(struct spu_context *ctx)
 {
+       /*
+        * 32-Bit assignment are atomic on powerpc, and we don't care about
+        * memory ordering here because retriving the controlling thread is
+        * per defintion racy.
+        */
+       ctx->tid = current->pid;
+
        /*
         * We do our own priority calculations, so we normally want
         * ->static_prio to start with. Unfortunately thies field
index dab8858b6995924cf10d9c598ce987934cfef120..8ff16b4b6bd73ed9fd756a574a40291935da3685 100644 (file)
@@ -77,6 +77,9 @@ struct spu_context {
        struct list_head gang_list;
        struct spu_gang *gang;
 
+       /* owner thread */
+       pid_t tid;
+
        /* scheduler fields */
        struct list_head rq;
        unsigned int time_slice;