[PATCH 1/5] statically initialize struct pid for swapper
From: Sukadev Bhattiprolu <[EMAIL PROTECTED]> Subject: [PATCH 1/5] statically initialize struct pid for swapper Statically initialize a struct pid for the swapper process (pid_t == 0) and attach it to init_task. This is needed so task_pid(), task_pgrp() and task_session() interfaces work on the swapper process also. Signed-off-by: Sukadev Bhattiprolu <[EMAIL PROTECTED]> Cc: Cedric Le Goater <[EMAIL PROTECTED]> Cc: Dave Hansen <[EMAIL PROTECTED]> Cc: Serge Hallyn <[EMAIL PROTECTED]> Cc: Eric Biederman <[EMAIL PROTECTED]> Cc: Herbert Poetzl <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Acked-by: Eric W. Biederman <[EMAIL PROTECTED]> --- include/linux/init_task.h | 27 +++ include/linux/pid.h |2 ++ kernel/pid.c |2 ++ 3 files changed, 31 insertions(+) Index: lx26-20-mm2c/include/linux/init_task.h === --- lx26-20-mm2c.orig/include/linux/init_task.h 2007-02-28 15:47:44.0 -0800 +++ lx26-20-mm2c/include/linux/init_task.h 2007-02-28 15:48:07.0 -0800 @@ -96,6 +96,28 @@ extern struct group_info init_groups; #define INIT_PREEMPT_RCU #endif +#define INIT_STRUCT_PID { \ + .count = ATOMIC_INIT(1), \ + .nr = 0,\ + /* Don't put this struct pid in pid_hash */ \ + .pid_chain = { .next = NULL, .pprev = NULL }, \ + .tasks = { \ + { .first = _task.pids[PIDTYPE_PID].node }, \ + { .first = _task.pids[PIDTYPE_PGID].node },\ + { .first = _task.pids[PIDTYPE_SID].node }, \ + }, \ + .rcu= RCU_HEAD_INIT,\ +} + +#define INIT_PID_LINK(type)\ +{ \ + .node = { \ + .next = NULL, \ + .pprev = _struct_pid.tasks[type].first,\ + }, \ + .pid = _struct_pid,\ +} + /* * INIT_TASK is used to set up the first task table, touch at * your own risk!. Base=0, limit=0x1f (=2MB) @@ -145,6 +167,11 @@ extern struct group_info init_groups; .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ .fs_excl= ATOMIC_INIT(0), \ .pi_lock= SPIN_LOCK_UNLOCKED, \ + .pids = { \ + [PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID),\ + [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ + [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID),\ + }, \ INIT_TRACE_IRQFLAGS \ INIT_LOCKDEP\ } Index: lx26-20-mm2c/include/linux/pid.h === --- lx26-20-mm2c.orig/include/linux/pid.h 2007-02-28 15:48:07.0 -0800 +++ lx26-20-mm2c/include/linux/pid.h2007-02-28 15:48:07.0 -0800 @@ -51,6 +51,8 @@ struct pid struct rcu_head rcu; }; +extern struct pid init_struct_pid; + struct pid_link { struct hlist_node node; Index: lx26-20-mm2c/kernel/pid.c === --- lx26-20-mm2c.orig/kernel/pid.c 2007-02-28 15:48:07.0 -0800 +++ lx26-20-mm2c/kernel/pid.c 2007-02-28 15:48:07.0 -0800 @@ -27,11 +27,13 @@ #include #include #include +#include #define pid_hashfn(nr) hash_long((unsigned long)nr, pidhash_shift) static struct hlist_head *pid_hash; static int pidhash_shift; static struct kmem_cache *pid_cachep; +struct pid init_struct_pid = INIT_STRUCT_PID; int pid_max = PID_MAX_DEFAULT; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 1/5] statically initialize struct pid for swapper
From: Sukadev Bhattiprolu [EMAIL PROTECTED] Subject: [PATCH 1/5] statically initialize struct pid for swapper Statically initialize a struct pid for the swapper process (pid_t == 0) and attach it to init_task. This is needed so task_pid(), task_pgrp() and task_session() interfaces work on the swapper process also. Signed-off-by: Sukadev Bhattiprolu [EMAIL PROTECTED] Cc: Cedric Le Goater [EMAIL PROTECTED] Cc: Dave Hansen [EMAIL PROTECTED] Cc: Serge Hallyn [EMAIL PROTECTED] Cc: Eric Biederman [EMAIL PROTECTED] Cc: Herbert Poetzl [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Acked-by: Eric W. Biederman [EMAIL PROTECTED] --- include/linux/init_task.h | 27 +++ include/linux/pid.h |2 ++ kernel/pid.c |2 ++ 3 files changed, 31 insertions(+) Index: lx26-20-mm2c/include/linux/init_task.h === --- lx26-20-mm2c.orig/include/linux/init_task.h 2007-02-28 15:47:44.0 -0800 +++ lx26-20-mm2c/include/linux/init_task.h 2007-02-28 15:48:07.0 -0800 @@ -96,6 +96,28 @@ extern struct group_info init_groups; #define INIT_PREEMPT_RCU #endif +#define INIT_STRUCT_PID { \ + .count = ATOMIC_INIT(1), \ + .nr = 0,\ + /* Don't put this struct pid in pid_hash */ \ + .pid_chain = { .next = NULL, .pprev = NULL }, \ + .tasks = { \ + { .first = init_task.pids[PIDTYPE_PID].node }, \ + { .first = init_task.pids[PIDTYPE_PGID].node },\ + { .first = init_task.pids[PIDTYPE_SID].node }, \ + }, \ + .rcu= RCU_HEAD_INIT,\ +} + +#define INIT_PID_LINK(type)\ +{ \ + .node = { \ + .next = NULL, \ + .pprev = init_struct_pid.tasks[type].first,\ + }, \ + .pid = init_struct_pid,\ +} + /* * INIT_TASK is used to set up the first task table, touch at * your own risk!. Base=0, limit=0x1f (=2MB) @@ -145,6 +167,11 @@ extern struct group_info init_groups; .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ .fs_excl= ATOMIC_INIT(0), \ .pi_lock= SPIN_LOCK_UNLOCKED, \ + .pids = { \ + [PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID),\ + [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ + [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID),\ + }, \ INIT_TRACE_IRQFLAGS \ INIT_LOCKDEP\ } Index: lx26-20-mm2c/include/linux/pid.h === --- lx26-20-mm2c.orig/include/linux/pid.h 2007-02-28 15:48:07.0 -0800 +++ lx26-20-mm2c/include/linux/pid.h2007-02-28 15:48:07.0 -0800 @@ -51,6 +51,8 @@ struct pid struct rcu_head rcu; }; +extern struct pid init_struct_pid; + struct pid_link { struct hlist_node node; Index: lx26-20-mm2c/kernel/pid.c === --- lx26-20-mm2c.orig/kernel/pid.c 2007-02-28 15:48:07.0 -0800 +++ lx26-20-mm2c/kernel/pid.c 2007-02-28 15:48:07.0 -0800 @@ -27,11 +27,13 @@ #include linux/bootmem.h #include linux/hash.h #include linux/pid_namespace.h +#include linux/init_task.h #define pid_hashfn(nr) hash_long((unsigned long)nr, pidhash_shift) static struct hlist_head *pid_hash; static int pidhash_shift; static struct kmem_cache *pid_cachep; +struct pid init_struct_pid = INIT_STRUCT_PID; int pid_max = PID_MAX_DEFAULT; - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/