]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
[PATCH] alpha: Fix getxpid on alpha so it works for threads
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 1 Feb 2006 11:06:12 +0000 (03:06 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 1 Feb 2006 16:53:21 +0000 (08:53 -0800)
While looking in the code I discovered that alpha has fallen behind because
it doesn't use sys_getppid.  The problem is that it doesn't follow the task
struct to the task_group_leader.

Acked-by: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/alpha/kernel/asm-offsets.c
arch/alpha/kernel/entry.S

index 8f2e5c718b50fc6a2e081876581f0788f1d25d6c..6c56c754a0b53c2947f662c0e3adde986ebdc513 100644 (file)
@@ -28,6 +28,7 @@ void foo(void)
         DEFINE(TASK_GID, offsetof(struct task_struct, gid));
         DEFINE(TASK_EGID, offsetof(struct task_struct, egid));
         DEFINE(TASK_REAL_PARENT, offsetof(struct task_struct, real_parent));
+        DEFINE(TASK_GROUP_LEADER, offsetof(struct task_struct, group_leader));
         DEFINE(TASK_TGID, offsetof(struct task_struct, tgid));
         BLANK();
 
index e38671c922bc673016771d1ec94e18edf34b8b9f..7af15bf7e5ab64e9e4ad5e0abc2d1ef4be962f34 100644 (file)
@@ -879,17 +879,19 @@ sys_getxpid:
 
        /* See linux/kernel/timer.c sys_getppid for discussion
           about this loop.  */
-       ldq     $3, TASK_REAL_PARENT($2)
-1:     ldl     $1, TASK_TGID($3)
+       ldq     $3, TASK_GROUP_LEADER($2)
+       ldq     $4, TASK_REAL_PARENT($3)
+       ldl     $0, TASK_TGID($2)
+1:     ldl     $1, TASK_TGID($4)
 #ifdef CONFIG_SMP
-       mov     $3, $4
+       mov     $4, $5
        mb
-       ldq     $3, TASK_REAL_PARENT($2)
-       cmpeq   $3, $4, $4
-       beq     $4, 1b
+       ldq     $3, TASK_GROUP_LEADER($2)
+       ldq     $4, TASK_REAL_PARENT($3)
+       cmpeq   $4, $5, $5
+       beq     $5, 1b
 #endif
        stq     $1, 80($sp)
-       ldl     $0, TASK_TGID($2)
        ret
 .end sys_getxpid