From: Mikael Pettersson - s/perfctr_copy_thread(&p->thread)/perfctr_copy_task(p, regs)/g Needed to access to the task struct (for setting owner in new perfctr state) and for accessing regs (for checking user_mode(regs)) - Add perfctr_release_task() callback in kernel/exit.c Signed-off-by: Mikael Pettersson Signed-off-by: Andrew Morton --- 25-akpm/arch/i386/kernel/process.c | 2 +- 25-akpm/arch/ppc/kernel/process.c | 2 +- 25-akpm/arch/x86_64/kernel/process.c | 2 +- 25-akpm/kernel/exit.c | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) diff -puN arch/i386/kernel/process.c~perfctr-inheritance-2-3-kernel-updates arch/i386/kernel/process.c --- 25/arch/i386/kernel/process.c~perfctr-inheritance-2-3-kernel-updates 2004-07-26 15:51:05.617532664 -0700 +++ 25-akpm/arch/i386/kernel/process.c 2004-07-26 15:51:05.626531296 -0700 @@ -368,7 +368,7 @@ int copy_thread(int nr, unsigned long cl savesegment(fs,p->thread.fs); savesegment(gs,p->thread.gs); - perfctr_copy_thread(&p->thread); + perfctr_copy_task(p, regs); tsk = current; if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) { diff -puN arch/ppc/kernel/process.c~perfctr-inheritance-2-3-kernel-updates arch/ppc/kernel/process.c --- 25/arch/ppc/kernel/process.c~perfctr-inheritance-2-3-kernel-updates 2004-07-26 15:51:05.618532512 -0700 +++ 25-akpm/arch/ppc/kernel/process.c 2004-07-26 15:51:05.626531296 -0700 @@ -464,7 +464,7 @@ copy_thread(int nr, unsigned long clone_ p->thread.last_syscall = -1; - perfctr_copy_thread(&p->thread); + perfctr_copy_task(p, regs); return 0; } diff -puN arch/x86_64/kernel/process.c~perfctr-inheritance-2-3-kernel-updates arch/x86_64/kernel/process.c --- 25/arch/x86_64/kernel/process.c~perfctr-inheritance-2-3-kernel-updates 2004-07-26 15:51:05.620532208 -0700 +++ 25-akpm/arch/x86_64/kernel/process.c 2004-07-26 15:51:05.627531144 -0700 @@ -367,7 +367,7 @@ int copy_thread(int nr, unsigned long cl asm("movl %%es,%0" : "=m" (p->thread.es)); asm("movl %%ds,%0" : "=m" (p->thread.ds)); - perfctr_copy_thread(&p->thread); + perfctr_copy_task(p, regs); if (unlikely(me->thread.io_bitmap_ptr != NULL)) { p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL); diff -puN kernel/exit.c~perfctr-inheritance-2-3-kernel-updates kernel/exit.c --- 25/kernel/exit.c~perfctr-inheritance-2-3-kernel-updates 2004-07-26 15:51:05.621532056 -0700 +++ 25-akpm/kernel/exit.c 2004-07-26 15:51:05.628530992 -0700 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -96,6 +97,7 @@ repeat: p->parent->cmaj_flt += p->maj_flt + p->cmaj_flt; p->parent->cnvcsw += p->nvcsw + p->cnvcsw; p->parent->cnivcsw += p->nivcsw + p->cnivcsw; + perfctr_release_task(p); sched_exit(p); write_unlock_irq(&tasklist_lock); spin_unlock(&p->proc_lock); _