public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* is TIF_NOTIFY_RESUME used?
@ 2007-05-22 12:47 Stephane Eranian
  2007-05-22 16:02 ` Andrew Morton
  0 siblings, 1 reply; 19+ messages in thread
From: Stephane Eranian @ 2007-05-22 12:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-ia64, Stephane Eranian, ak, akpm, tony.luck

Hello,

For perfmon, we need a couple of TIF bits. It seems that with 2.6.22-rc2
there is now a TIF_RESTORE_SIGMASK which uses the last remaining bit in the
first 7 bits of the thread flag. Many architectures, including IA-64, rely
on the fact that some of the TIF flags (TIF_ALL_WORKMASK or TIF_ALL_WORK)
tested on kernel exit reside in the low 8-bit or 7-bit because they use
instructions (such as add r1=imm8,r2 on IA-64) which operate on 8 or 7 bit
immediate.

On IA-64, adding that one perfmon flag (as bit 7) would cause some
restructuring in the kernel exit path but also in all the lightweight syscall
handlers.

I looked at all the low order TIF flags and found that TIF_NOTIFY_RESUME 
was never set nor used anywhere in any architecture. Is that really the case?

If so, we could get rid of it and free up one low-order TIF bit.

Thanks.

-- 
-Stephane

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: is TIF_NOTIFY_RESUME used?
  2007-05-22 12:47 is TIF_NOTIFY_RESUME used? Stephane Eranian
@ 2007-05-22 16:02 ` Andrew Morton
  2007-05-22 16:07   ` Stephane Eranian
  2007-05-22 18:20   ` [PATCH 1/2] Define new percpu interface for shared data -- version 3 Fenghua Yu
  0 siblings, 2 replies; 19+ messages in thread
From: Andrew Morton @ 2007-05-22 16:02 UTC (permalink / raw)
  To: eranian; +Cc: linux-kernel, linux-ia64, ak, tony.luck

On Tue, 22 May 2007 05:47:13 -0700
Stephane Eranian <eranian@hpl.hp.com> wrote:

> Hello,
> 
> For perfmon, we need a couple of TIF bits. It seems that with 2.6.22-rc2
> there is now a TIF_RESTORE_SIGMASK which uses the last remaining bit in the
> first 7 bits of the thread flag. Many architectures, including IA-64, rely
> on the fact that some of the TIF flags (TIF_ALL_WORKMASK or TIF_ALL_WORK)
> tested on kernel exit reside in the low 8-bit or 7-bit because they use
> instructions (such as add r1=imm8,r2 on IA-64) which operate on 8 or 7 bit
> immediate.
> 
> On IA-64, adding that one perfmon flag (as bit 7) would cause some
> restructuring in the kernel exit path but also in all the lightweight syscall
> handlers.
> 
> I looked at all the low order TIF flags and found that TIF_NOTIFY_RESUME 
> was never set nor used anywhere in any architecture. Is that really the case?
> 
> If so, we could get rid of it and free up one low-order TIF bit.
> 

My grepping argees with yours.  The only place where TIF_NOTIFY_RESUME gets
altered is in ./arch/ia64/kernel/perfmon.c.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: is TIF_NOTIFY_RESUME used?
  2007-05-22 16:02 ` Andrew Morton
@ 2007-05-22 16:07   ` Stephane Eranian
  2007-05-22 16:15     ` Andrew Morton
  2007-05-22 18:20   ` [PATCH 1/2] Define new percpu interface for shared data -- version 3 Fenghua Yu
  1 sibling, 1 reply; 19+ messages in thread
From: Stephane Eranian @ 2007-05-22 16:07 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, linux-ia64, ak, tony.luck

Andrew,

On Tue, May 22, 2007 at 09:02:10AM -0700, Andrew Morton wrote:
> On Tue, 22 May 2007 05:47:13 -0700
> Stephane Eranian <eranian@hpl.hp.com> wrote:
> 
> > Hello,
> > 
> > For perfmon, we need a couple of TIF bits. It seems that with 2.6.22-rc2
> > there is now a TIF_RESTORE_SIGMASK which uses the last remaining bit in the
> > first 7 bits of the thread flag. Many architectures, including IA-64, rely
> > on the fact that some of the TIF flags (TIF_ALL_WORKMASK or TIF_ALL_WORK)
> > tested on kernel exit reside in the low 8-bit or 7-bit because they use
> > instructions (such as add r1=imm8,r2 on IA-64) which operate on 8 or 7 bit
> > immediate.
> > 
> > On IA-64, adding that one perfmon flag (as bit 7) would cause some
> > restructuring in the kernel exit path but also in all the lightweight syscall
> > handlers.
> > 
> > I looked at all the low order TIF flags and found that TIF_NOTIFY_RESUME 
> > was never set nor used anywhere in any architecture. Is that really the case?
> > 
> > If so, we could get rid of it and free up one low-order TIF bit.
> > 
> 
> My grepping argees with yours.  The only place where TIF_NOTIFY_RESUME gets
> altered is in ./arch/ia64/kernel/perfmon.c.

Yes, and that is with the old IA-64 code. In the new one I used a dedicated
TIF flag.

Shall we just get rid of the flag, then?

-- 
-Stephane

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: is TIF_NOTIFY_RESUME used?
  2007-05-22 16:07   ` Stephane Eranian
@ 2007-05-22 16:15     ` Andrew Morton
  2007-05-22 22:51       ` Stephane Eranian
  0 siblings, 1 reply; 19+ messages in thread
From: Andrew Morton @ 2007-05-22 16:15 UTC (permalink / raw)
  To: eranian; +Cc: linux-kernel, linux-ia64, ak, tony.luck

On Tue, 22 May 2007 09:07:37 -0700
Stephane Eranian <eranian@hpl.hp.com> wrote:

> Andrew,
> 
> On Tue, May 22, 2007 at 09:02:10AM -0700, Andrew Morton wrote:
> > On Tue, 22 May 2007 05:47:13 -0700
> > Stephane Eranian <eranian@hpl.hp.com> wrote:
> > 
> > > Hello,
> > > 
> > > For perfmon, we need a couple of TIF bits. It seems that with 2.6.22-rc2
> > > there is now a TIF_RESTORE_SIGMASK which uses the last remaining bit in the
> > > first 7 bits of the thread flag. Many architectures, including IA-64, rely
> > > on the fact that some of the TIF flags (TIF_ALL_WORKMASK or TIF_ALL_WORK)
> > > tested on kernel exit reside in the low 8-bit or 7-bit because they use
> > > instructions (such as add r1=imm8,r2 on IA-64) which operate on 8 or 7 bit
> > > immediate.
> > > 
> > > On IA-64, adding that one perfmon flag (as bit 7) would cause some
> > > restructuring in the kernel exit path but also in all the lightweight syscall
> > > handlers.
> > > 
> > > I looked at all the low order TIF flags and found that TIF_NOTIFY_RESUME 
> > > was never set nor used anywhere in any architecture. Is that really the case?
> > > 
> > > If so, we could get rid of it and free up one low-order TIF bit.
> > > 
> > 
> > My grepping argees with yours.  The only place where TIF_NOTIFY_RESUME gets
> > altered is in ./arch/ia64/kernel/perfmon.c.
> 
> Yes, and that is with the old IA-64 code. In the new one I used a dedicated
> TIF flag.
> 
> Shall we just get rid of the flag, then?
> 

I'd say so, yes.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-22 16:02 ` Andrew Morton
  2007-05-22 16:07   ` Stephane Eranian
@ 2007-05-22 18:20   ` Fenghua Yu
  2007-05-23 17:49     ` Andrew Morton
  1 sibling, 1 reply; 19+ messages in thread
From: Fenghua Yu @ 2007-05-22 18:20 UTC (permalink / raw)
  To: akpm, suresh.b.siddha, clameter, kiran, rmk, linux-kernel; +Cc: fenghua.yu

Changes from previous version:
Fix a compilation error for ARM

per cpu data section contains two types of data. One set which is exclusively
accessed by the local cpu and the other set which is  per cpu, but also shared
by remote cpus. In the current kernel, these two sets are not clearely
separated out. This can potentially cause the same data cacheline shared
between the two sets of data, which will result in unnecessary bouncing of the
cacheline between cpus.

One way to fix the problem is to cacheline align the remotely accessed per cpu
data, both at the beginning and at the end. Because of the padding at both ends,
this will likely cause some memory wastage and also the interface to achieve
this is not clean.

This patch:

Moves the remotely accessed per cpu data (which is currently marked
as ____cacheline_aligned_in_smp) into a different section, where all the data
elements are cacheline aligned. And as such, this differentiates the local
only data and remotely accessed data cleanly.

igned-off-by: Fenghua Yu <fenghua.yu@intel.com>
Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>

---

 arch/alpha/kernel/vmlinux.lds.S   |    5 +----
 arch/arm/kernel/vmlinux.lds.S     |    1 +
 arch/cris/arch-v32/vmlinux.lds.S  |    5 +----
 arch/frv/kernel/vmlinux.lds.S     |    5 +----
 arch/i386/kernel/vmlinux.lds.S    |    7 +------
 arch/ia64/kernel/vmlinux.lds.S    |    1 +
 arch/m32r/kernel/vmlinux.lds.S    |    5 +----
 arch/mips/kernel/vmlinux.lds.S    |    5 +----
 arch/parisc/kernel/vmlinux.lds.S  |    7 +++----
 arch/powerpc/kernel/vmlinux.lds.S |    7 +------
 arch/ppc/kernel/vmlinux.lds.S     |    5 +----
 arch/s390/kernel/vmlinux.lds.S    |    5 +----
 arch/sh/kernel/vmlinux.lds.S      |    5 +----
 arch/sh64/kernel/vmlinux.lds.S    |    5 +----
 arch/sparc/kernel/vmlinux.lds.S   |    5 +----
 arch/sparc64/kernel/vmlinux.lds.S |    5 +----
 arch/x86_64/kernel/vmlinux.lds.S  |    6 ++----
 arch/xtensa/kernel/vmlinux.lds.S  |    5 +----
 include/asm-generic/percpu.h      |    8 ++++++++
 include/asm-generic/vmlinux.lds.h |    8 ++++++++
 include/asm-i386/percpu.h         |    5 +++++
 include/asm-ia64/percpu.h         |   10 ++++++++++
 include/asm-powerpc/percpu.h      |    7 +++++++
 include/asm-s390/percpu.h         |    7 +++++++
 include/asm-sparc64/percpu.h      |    7 +++++++
 include/asm-x86_64/percpu.h       |    7 +++++++
 26 files changed, 80 insertions(+), 68 deletions(-)

diff -Nurp linux-2.6.22-rc1-mm1.0/arch/alpha/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/alpha/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/alpha/kernel/vmlinux.lds.S	2007-05-18 15:37:15.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/alpha/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -69,10 +69,7 @@ SECTIONS
   . = ALIGN(8);
   SECURITY_INIT
 
-  . = ALIGN(8192);
-  __per_cpu_start = .;
-  .data.percpu : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(8192)
 
   . = ALIGN(2*8192);
   __init_end = .;
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/arm/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/arm/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/arm/kernel/vmlinux.lds.S	2007-05-18 15:37:15.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/arm/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -66,6 +66,7 @@ SECTIONS
 		. = ALIGN(4096);
 		__per_cpu_start = .;
 			*(.data.percpu)
+			*(.data.percpu.shared_aligned)
 		__per_cpu_end = .;
 #ifndef CONFIG_XIP_KERNEL
 		__init_begin = _stext;
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/cris/arch-v32/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/cris/arch-v32/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/cris/arch-v32/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/cris/arch-v32/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -91,10 +91,7 @@ SECTIONS
 	}
 	SECURITY_INIT
 
-	. =  ALIGN (8192);
-	__per_cpu_start = .;
-	.data.percpu  : { *(.data.percpu) }
-	__per_cpu_end = .;
+	PERCPU(8192)
 
 #ifdef CONFIG_BLK_DEV_INITRD
 	.init.ramfs : {
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/frv/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/frv/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/frv/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/frv/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -57,10 +57,7 @@ SECTIONS
   __alt_instructions_end = .;
  .altinstr_replacement : { *(.altinstr_replacement) }
 
-  . = ALIGN(4096);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(4096)
 
 #ifdef CONFIG_BLK_DEV_INITRD
   . = ALIGN(4096);
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/i386/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/i386/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/i386/kernel/vmlinux.lds.S	2007-05-18 15:38:09.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/i386/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -178,12 +178,7 @@ SECTIONS
 	__initramfs_end = .;
   }
 #endif
-  . = ALIGN(4096);
-  .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
-	__per_cpu_start = .;
-	*(.data.percpu)
-	__per_cpu_end = .;
-  }
+  PERCPU(4096)
   . = ALIGN(4096);
   /* freed after init ends here */
 	
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/ia64/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/ia64/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/ia64/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/ia64/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -206,6 +206,7 @@ SECTIONS
 	{
 		__per_cpu_start = .;
 		*(.data.percpu)
+		*(.data.percpu.shared_aligned)
 		__per_cpu_end = .;
 	}
   . = __phys_per_cpu_start + PERCPU_PAGE_SIZE;	/* ensure percpu data fits
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/m32r/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/m32r/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/m32r/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/m32r/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -110,10 +110,7 @@ SECTIONS
   __initramfs_end = .;
 #endif
 
-  . = ALIGN(4096);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(4096)
   . = ALIGN(4096);
   __init_end = .;
   /* freed after init ends here */
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/mips/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/mips/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/mips/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/mips/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -119,10 +119,7 @@ SECTIONS
   .init.ramfs : { *(.init.ramfs) }
   __initramfs_end = .;
 #endif
-  . = ALIGN(_PAGE_SIZE);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(_PAGE_SIZE)
   . = ALIGN(_PAGE_SIZE);
   __init_end = .;
   /* freed after init ends here */
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/parisc/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/parisc/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/parisc/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/parisc/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -181,10 +181,9 @@ SECTIONS
   .init.ramfs : { *(.init.ramfs) }
   __initramfs_end = .;
 #endif
-  . = ALIGN(ASM_PAGE_SIZE);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+
+  PERCPU(ASM_PAGE_SIZE)
+
   . = ALIGN(ASM_PAGE_SIZE);
   __init_end = .;
   /* freed after init ends here */
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/powerpc/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/powerpc/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/powerpc/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/powerpc/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -139,12 +139,7 @@ SECTIONS
 		__initramfs_end = .;
 	}
 #endif
-	. = ALIGN(PAGE_SIZE);
-	.data.percpu : {
-		__per_cpu_start = .;
-		*(.data.percpu)
-		__per_cpu_end = .;
-	}
+	PERCPU(PAGE_SIZE)
 
 	. = ALIGN(8);
 	.machine.desc : {
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/ppc/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/ppc/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/ppc/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/ppc/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -130,10 +130,7 @@ SECTIONS
   __ftr_fixup : { *(__ftr_fixup) }
   __stop___ftr_fixup = .;
 
-  . = ALIGN(4096);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(4096)
 
 #ifdef CONFIG_BLK_DEV_INITRD
   . = ALIGN(4096);
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/s390/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/s390/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/s390/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/s390/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -107,10 +107,7 @@ SECTIONS
   . = ALIGN(2);
   __initramfs_end = .;
 #endif
-  . = ALIGN(4096);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(4096)
   . = ALIGN(4096);
   __init_end = .;
   /* freed after init ends here */
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/sh/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/sh/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/sh/kernel/vmlinux.lds.S	2007-05-18 15:38:09.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/sh/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -60,10 +60,7 @@ SECTIONS
   . = ALIGN(PAGE_SIZE);
   __nosave_end = .;
 
-  . = ALIGN(PAGE_SIZE);
-  __per_cpu_start = .;
-  .data.percpu : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(PAGE_SIZE)
   .data.cacheline_aligned : { *(.data.cacheline_aligned) }
 
   _edata = .;			/* End of data section */
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/sh64/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/sh64/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/sh64/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/sh64/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -85,10 +85,7 @@ SECTIONS
   . = ALIGN(PAGE_SIZE);
   .data.page_aligned : C_PHYS(.data.page_aligned) { *(.data.page_aligned) }
 
-  . = ALIGN(PAGE_SIZE);
-  __per_cpu_start = .;
-  .data.percpu : C_PHYS(.data.percpu) { *(.data.percpu) }
-  __per_cpu_end = . ;
+  PERCPU(PAGE_SIZE)
   .data.cacheline_aligned : C_PHYS(.data.cacheline_aligned) { *(.data.cacheline_aligned) }
 
   _edata = .;			/* End of data section */
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/sparc/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/sparc/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/sparc/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/sparc/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -65,10 +65,7 @@ SECTIONS
   __initramfs_end = .;
 #endif
 
-  . = ALIGN(4096);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(4096)
   . = ALIGN(4096);
   __init_end = .;
   . = ALIGN(32);
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/sparc64/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/sparc64/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/sparc64/kernel/vmlinux.lds.S	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/sparc64/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -89,10 +89,7 @@ SECTIONS
   __initramfs_end = .;
 #endif
 
-  . = ALIGN(8192);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(8192)
   . = ALIGN(8192);
   __init_end = .;
   __bss_start = .;
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/x86_64/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/x86_64/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/x86_64/kernel/vmlinux.lds.S	2007-05-18 15:38:09.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/x86_64/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -203,10 +203,8 @@ SECTIONS
   __initramfs_end = .;
 #endif
 
-  . = ALIGN(4096);
-  __per_cpu_start = .;
-  .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(4096)
+
   . = ALIGN(4096);
   __init_end = .;
 
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/xtensa/kernel/vmlinux.lds.S linux-2.6.22-rc1-mm1.1/arch/xtensa/kernel/vmlinux.lds.S
--- linux-2.6.22-rc1-mm1.0/arch/xtensa/kernel/vmlinux.lds.S	2007-05-18 15:37:16.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/arch/xtensa/kernel/vmlinux.lds.S	2007-05-18 15:40:08.000000000 -0700
@@ -198,10 +198,7 @@ SECTIONS
   __ftr_fixup : { *(__ftr_fixup) }
   __stop___ftr_fixup = .;
 
-  . = ALIGN(4096);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
+  PERCPU(4096)
 
 #ifdef CONFIG_BLK_DEV_INITRD
   . = ALIGN(4096);
diff -Nurp linux-2.6.22-rc1-mm1.0/include/asm-generic/percpu.h linux-2.6.22-rc1-mm1.1/include/asm-generic/percpu.h
--- linux-2.6.22-rc1-mm1.0/include/asm-generic/percpu.h	2007-05-18 15:37:19.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/include/asm-generic/percpu.h	2007-05-18 15:40:08.000000000 -0700
@@ -14,6 +14,11 @@ extern unsigned long __per_cpu_offset[NR
 #define DEFINE_PER_CPU(type, name) \
     __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
 
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)		\
+    __attribute__((__section__(".data.percpu.shared_aligned"))) \
+    __typeof__(type) per_cpu__##name				\
+    ____cacheline_aligned_in_smp
+
 /* var is in discarded region: offset to particular copy we want */
 #define per_cpu(var, cpu) (*({				\
 	extern int simple_identifier_##var(void);	\
@@ -34,6 +39,9 @@ do {								\
 #define DEFINE_PER_CPU(type, name) \
     __typeof__(type) per_cpu__##name
 
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)	\
+    DEFINE_PER_CPU(type, name)
+
 #define per_cpu(var, cpu)			(*((void)(cpu), &per_cpu__##var))
 #define __get_cpu_var(var)			per_cpu__##var
 #define __raw_get_cpu_var(var)			per_cpu__##var
diff -Nurp linux-2.6.22-rc1-mm1.0/include/asm-generic/vmlinux.lds.h linux-2.6.22-rc1-mm1.1/include/asm-generic/vmlinux.lds.h
--- linux-2.6.22-rc1-mm1.0/include/asm-generic/vmlinux.lds.h	2007-05-18 15:38:10.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/include/asm-generic/vmlinux.lds.h	2007-05-18 15:41:53.000000000 -0700
@@ -251,3 +251,11 @@
   	*(.initcall7.init)						\
   	*(.initcall7s.init)
 
+#define PERCPU(align)							\
+	. = ALIGN(align);						\
+	__per_cpu_start = .;						\
+	.data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) {		\
+		*(.data.percpu)						\
+		*(.data.percpu.shared_aligned)				\
+	}								\
+	__per_cpu_end = .;
diff -Nurp linux-2.6.22-rc1-mm1.0/include/asm-i386/percpu.h linux-2.6.22-rc1-mm1.1/include/asm-i386/percpu.h
--- linux-2.6.22-rc1-mm1.0/include/asm-i386/percpu.h	2007-05-18 15:37:19.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/include/asm-i386/percpu.h	2007-05-18 15:40:08.000000000 -0700
@@ -54,6 +54,11 @@ extern unsigned long __per_cpu_offset[];
 #define DEFINE_PER_CPU(type, name) \
     __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
 
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)		\
+    __attribute__((__section__(".data.percpu.shared_aligned"))) \
+    __typeof__(type) per_cpu__##name				\
+    ____cacheline_aligned_in_smp
+
 /* We can use this directly for local CPU (faster). */
 DECLARE_PER_CPU(unsigned long, this_cpu_off);
 
diff -Nurp linux-2.6.22-rc1-mm1.0/include/asm-ia64/percpu.h linux-2.6.22-rc1-mm1.1/include/asm-ia64/percpu.h
--- linux-2.6.22-rc1-mm1.0/include/asm-ia64/percpu.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/include/asm-ia64/percpu.h	2007-05-18 15:40:08.000000000 -0700
@@ -29,6 +29,16 @@
 	__attribute__((__section__(".data.percpu")))		\
 	__SMALL_ADDR_AREA __typeof__(type) per_cpu__##name
 
+#ifdef CONFIG_SMP
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)			\
+	__attribute__((__section__(".data.percpu.shared_aligned")))	\
+	__SMALL_ADDR_AREA __typeof__(type) per_cpu__##name		\
+	____cacheline_aligned_in_smp
+#else
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)	\
+	DEFINE_PER_CPU(type, name)
+#endif
+
 /*
  * Pretty much a literal copy of asm-generic/percpu.h, except that percpu_modcopy() is an
  * external routine, to avoid include-hell.
diff -Nurp linux-2.6.22-rc1-mm1.0/include/asm-powerpc/percpu.h linux-2.6.22-rc1-mm1.1/include/asm-powerpc/percpu.h
--- linux-2.6.22-rc1-mm1.0/include/asm-powerpc/percpu.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/include/asm-powerpc/percpu.h	2007-05-18 15:40:08.000000000 -0700
@@ -20,6 +20,11 @@
 #define DEFINE_PER_CPU(type, name) \
     __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
 
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)		\
+    __attribute__((__section__(".data.percpu.shared_aligned"))) \
+    __typeof__(type) per_cpu__##name				\
+    ____cacheline_aligned_in_smp
+
 /* var is in discarded region: offset to particular copy we want */
 #define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu)))
 #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset()))
@@ -40,6 +45,8 @@ extern void setup_per_cpu_areas(void);
 
 #define DEFINE_PER_CPU(type, name) \
     __typeof__(type) per_cpu__##name
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)	\
+    DEFINE_PER_CPU(type, name)
 
 #define per_cpu(var, cpu)			(*((void)(cpu), &per_cpu__##var))
 #define __get_cpu_var(var)			per_cpu__##var
diff -Nurp linux-2.6.22-rc1-mm1.0/include/asm-s390/percpu.h linux-2.6.22-rc1-mm1.1/include/asm-s390/percpu.h
--- linux-2.6.22-rc1-mm1.0/include/asm-s390/percpu.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/include/asm-s390/percpu.h	2007-05-18 15:40:08.000000000 -0700
@@ -41,6 +41,11 @@ extern unsigned long __per_cpu_offset[NR
     __attribute__((__section__(".data.percpu"))) \
     __typeof__(type) per_cpu__##name
 
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)		\
+    __attribute__((__section__(".data.percpu.shared_aligned"))) \
+    __typeof__(type) per_cpu__##name				\
+    ____cacheline_aligned_in_smp
+
 #define __get_cpu_var(var) __reloc_hide(var,S390_lowcore.percpu_offset)
 #define __raw_get_cpu_var(var) __reloc_hide(var,S390_lowcore.percpu_offset)
 #define per_cpu(var,cpu) __reloc_hide(var,__per_cpu_offset[cpu])
@@ -59,6 +64,8 @@ do {								\
 
 #define DEFINE_PER_CPU(type, name) \
     __typeof__(type) per_cpu__##name
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)	\
+    DEFINE_PER_CPU(type, name)
 
 #define __get_cpu_var(var) __reloc_hide(var,0)
 #define __raw_get_cpu_var(var) __reloc_hide(var,0)
diff -Nurp linux-2.6.22-rc1-mm1.0/include/asm-sparc64/percpu.h linux-2.6.22-rc1-mm1.1/include/asm-sparc64/percpu.h
--- linux-2.6.22-rc1-mm1.0/include/asm-sparc64/percpu.h	2007-05-18 15:37:25.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/include/asm-sparc64/percpu.h	2007-05-18 15:40:08.000000000 -0700
@@ -17,6 +17,11 @@ extern unsigned long __per_cpu_shift;
 #define DEFINE_PER_CPU(type, name) \
     __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
 
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)		\
+    __attribute__((__section__(".data.percpu.shared_aligned"))) \
+    __typeof__(type) per_cpu__##name				\
+    ____cacheline_aligned_in_smp
+
 register unsigned long __local_per_cpu_offset asm("g5");
 
 /* var is in discarded region: offset to particular copy we want */
@@ -36,6 +41,8 @@ do {								\
 
 #define DEFINE_PER_CPU(type, name) \
     __typeof__(type) per_cpu__##name
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)	\
+    DEFINE_PER_CPU(type, name)
 
 #define per_cpu(var, cpu)			(*((void)cpu, &per_cpu__##var))
 #define __get_cpu_var(var)			per_cpu__##var
diff -Nurp linux-2.6.22-rc1-mm1.0/include/asm-x86_64/percpu.h linux-2.6.22-rc1-mm1.1/include/asm-x86_64/percpu.h
--- linux-2.6.22-rc1-mm1.0/include/asm-x86_64/percpu.h	2007-05-18 15:37:25.000000000 -0700
+++ linux-2.6.22-rc1-mm1.1/include/asm-x86_64/percpu.h	2007-05-18 15:40:08.000000000 -0700
@@ -20,6 +20,11 @@
 #define DEFINE_PER_CPU(type, name) \
     __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
 
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)		\
+    __attribute__((__section__(".data.percpu.shared_aligned"))) \
+    __typeof__(type) per_cpu__##name				\
+    ____cacheline_internodealigned_in_smp
+
 /* var is in discarded region: offset to particular copy we want */
 #define per_cpu(var, cpu) (*({				\
 	extern int simple_identifier_##var(void);	\
@@ -46,6 +51,8 @@ extern void setup_per_cpu_areas(void);
 
 #define DEFINE_PER_CPU(type, name) \
     __typeof__(type) per_cpu__##name
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name)	\
+    DEFINE_PER_CPU(type, name)
 
 #define per_cpu(var, cpu)			(*((void)(cpu), &per_cpu__##var))
 #define __get_cpu_var(var)			per_cpu__##var

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: is TIF_NOTIFY_RESUME used?
  2007-05-22 16:15     ` Andrew Morton
@ 2007-05-22 22:51       ` Stephane Eranian
  2007-05-22 23:02         ` Andrew Morton
  0 siblings, 1 reply; 19+ messages in thread
From: Stephane Eranian @ 2007-05-22 22:51 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, linux-ia64, ak, tony.luck

Andrew,

On Tue, May 22, 2007 at 09:15:17AM -0700, Andrew Morton wrote:
> On Tue, 22 May 2007 09:07:37 -0700
> Stephane Eranian <eranian@hpl.hp.com> wrote:
> 
> > Andrew,
> > 
> > On Tue, May 22, 2007 at 09:02:10AM -0700, Andrew Morton wrote:
> > > On Tue, 22 May 2007 05:47:13 -0700
> > > Stephane Eranian <eranian@hpl.hp.com> wrote:
> > > 
> > > > Hello,
> > > > 
> > > > For perfmon, we need a couple of TIF bits. It seems that with 2.6.22-rc2
> > > > there is now a TIF_RESTORE_SIGMASK which uses the last remaining bit in the
> > > > first 7 bits of the thread flag. Many architectures, including IA-64, rely
> > > > on the fact that some of the TIF flags (TIF_ALL_WORKMASK or TIF_ALL_WORK)
> > > > tested on kernel exit reside in the low 8-bit or 7-bit because they use
> > > > instructions (such as add r1=imm8,r2 on IA-64) which operate on 8 or 7 bit
> > > > immediate.
> > > > 
> > > > On IA-64, adding that one perfmon flag (as bit 7) would cause some
> > > > restructuring in the kernel exit path but also in all the lightweight syscall
> > > > handlers.
> > > > 
> > > > I looked at all the low order TIF flags and found that TIF_NOTIFY_RESUME 
> > > > was never set nor used anywhere in any architecture. Is that really the case?
> > > > 
> > > > If so, we could get rid of it and free up one low-order TIF bit.
> > > > 
> > > 
> > > My grepping argees with yours.  The only place where TIF_NOTIFY_RESUME gets
> > > altered is in ./arch/ia64/kernel/perfmon.c.
> > 
> > Yes, and that is with the old IA-64 code. In the new one I used a dedicated
> > TIF flag.
> > 
> > Shall we just get rid of the flag, then?
> > 
> 
> I'd say so, yes.

Do you want a single patch or small patches broken-down by arch (and there are many...)?

-- 
-Stephane

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: is TIF_NOTIFY_RESUME used?
  2007-05-22 22:51       ` Stephane Eranian
@ 2007-05-22 23:02         ` Andrew Morton
  2007-05-23  9:57           ` [PATCH] remove unused TIF_NOTIFY_RESUME flag Stephane Eranian
  0 siblings, 1 reply; 19+ messages in thread
From: Andrew Morton @ 2007-05-22 23:02 UTC (permalink / raw)
  To: eranian; +Cc: linux-kernel, linux-ia64, ak, tony.luck

On Tue, 22 May 2007 15:51:35 -0700
Stephane Eranian <eranian@hpl.hp.com> wrote:

> Andrew,
> 
> On Tue, May 22, 2007 at 09:15:17AM -0700, Andrew Morton wrote:
> > On Tue, 22 May 2007 09:07:37 -0700
> > Stephane Eranian <eranian@hpl.hp.com> wrote:
> > 
> > > Andrew,
> > > 
> > > On Tue, May 22, 2007 at 09:02:10AM -0700, Andrew Morton wrote:
> > > > On Tue, 22 May 2007 05:47:13 -0700
> > > > Stephane Eranian <eranian@hpl.hp.com> wrote:
> > > > 
> > > > > Hello,
> > > > > 
> > > > > For perfmon, we need a couple of TIF bits. It seems that with 2.6.22-rc2
> > > > > there is now a TIF_RESTORE_SIGMASK which uses the last remaining bit in the
> > > > > first 7 bits of the thread flag. Many architectures, including IA-64, rely
> > > > > on the fact that some of the TIF flags (TIF_ALL_WORKMASK or TIF_ALL_WORK)
> > > > > tested on kernel exit reside in the low 8-bit or 7-bit because they use
> > > > > instructions (such as add r1=imm8,r2 on IA-64) which operate on 8 or 7 bit
> > > > > immediate.
> > > > > 
> > > > > On IA-64, adding that one perfmon flag (as bit 7) would cause some
> > > > > restructuring in the kernel exit path but also in all the lightweight syscall
> > > > > handlers.
> > > > > 
> > > > > I looked at all the low order TIF flags and found that TIF_NOTIFY_RESUME 
> > > > > was never set nor used anywhere in any architecture. Is that really the case?
> > > > > 
> > > > > If so, we could get rid of it and free up one low-order TIF bit.
> > > > > 
> > > > 
> > > > My grepping argees with yours.  The only place where TIF_NOTIFY_RESUME gets
> > > > altered is in ./arch/ia64/kernel/perfmon.c.
> > > 
> > > Yes, and that is with the old IA-64 code. In the new one I used a dedicated
> > > TIF flag.
> > > 
> > > Shall we just get rid of the flag, then?
> > > 
> > 
> > I'd say so, yes.
> 
> Do you want a single patch or small patches broken-down by arch (and there are many...)?

One patch is OK for this, thanks.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH] remove unused TIF_NOTIFY_RESUME flag
  2007-05-22 23:02         ` Andrew Morton
@ 2007-05-23  9:57           ` Stephane Eranian
  0 siblings, 0 replies; 19+ messages in thread
From: Stephane Eranian @ 2007-05-23  9:57 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, linux-ia64, ak, tony.luck, Stephane Eranian

Hello,

As per the recent discussion, the folowing patch removes the TIF_NOTIFY_RESUME
flag from all processor architectures. The flag was not used except on IA-64
for the perfmon subsystem. For IA-64, the patch replaces the flag with a new
dedicated TIF flag. This provides an extra low-order bit for the TIF flags.
I tested the kernel compiles on i386,x86_64,mips,ia64,powerpc.

The patch is relative to 2.6.22-rc2 but applies smoothly to 2.6.22-rc2-git3.

Changelog:
	- remove unused TIF_NOTIFY_RESUME flag for all processor architectures.
	   The flag was not used excecpt on IA-64 where the patch replaces it with
	   TIF_PERFMON_WORK.

signed-off-by: stephane eranian <eranian@hpl.hp.com>


diff -urNp linux-2.6.22.orig/arch/arm/kernel/entry-common.S linux-2.6.22.base/arch/arm/kernel/entry-common.S
--- linux-2.6.22.orig/arch/arm/kernel/entry-common.S	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/arch/arm/kernel/entry-common.S	2007-05-22 13:38:39.000000000 -0700
@@ -46,7 +46,7 @@ fast_work_pending:
 work_pending:
 	tst	r1, #_TIF_NEED_RESCHED
 	bne	work_resched
-	tst	r1, #_TIF_NOTIFY_RESUME | _TIF_SIGPENDING
+	tst	r1, #_TIF_SIGPENDING
 	beq	no_work_pending
 	mov	r0, sp				@ 'regs'
 	mov	r2, why				@ 'syscall'
diff -urNp linux-2.6.22.orig/arch/arm26/kernel/entry.S linux-2.6.22.base/arch/arm26/kernel/entry.S
--- linux-2.6.22.orig/arch/arm26/kernel/entry.S	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/arch/arm26/kernel/entry.S	2007-05-22 13:39:00.000000000 -0700
@@ -194,7 +194,7 @@ fast_work_pending:
 work_pending:
 	tst	r1, #_TIF_NEED_RESCHED
 	bne	work_resched
-	tst	r1, #_TIF_NOTIFY_RESUME | _TIF_SIGPENDING
+	tst	r1, #_TIF_SIGPENDING
 	beq	no_work_pending
 	mov	r0, sp				@ 'regs'
 	mov	r2, why				@ 'syscall'
diff -urNp linux-2.6.22.orig/arch/ia64/kernel/perfmon.c linux-2.6.22.base/arch/ia64/kernel/perfmon.c
--- linux-2.6.22.orig/arch/ia64/kernel/perfmon.c	2007-05-21 01:39:04.000000000 -0700
+++ linux-2.6.22.base/arch/ia64/kernel/perfmon.c	2007-05-22 13:41:23.000000000 -0700
@@ -591,13 +591,13 @@ pfm_set_task_notify(struct task_struct *
 	struct thread_info *info;
 
 	info = (struct thread_info *) ((char *) task + IA64_TASK_SIZE);
-	set_bit(TIF_NOTIFY_RESUME, &info->flags);
+	set_bit(TIF_PERFMON_WORK, &info->flags);
 }
 
 static inline void
 pfm_clear_task_notify(void)
 {
-	clear_thread_flag(TIF_NOTIFY_RESUME);
+	clear_thread_flag(TIF_PERFMON_WORK);
 }
 
 static inline void
diff -urNp linux-2.6.22.orig/arch/powerpc/kernel/entry_64.S linux-2.6.22.base/arch/powerpc/kernel/entry_64.S
--- linux-2.6.22.orig/arch/powerpc/kernel/entry_64.S	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/arch/powerpc/kernel/entry_64.S	2007-05-22 13:39:55.000000000 -0700
@@ -546,7 +546,6 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISER
 	rfid
 	b	.	/* prevent speculative execution */
 
-/* Note: this must change if we start using the TIF_NOTIFY_RESUME bit */
 do_work:
 #ifdef CONFIG_PREEMPT
 	andi.	r0,r3,MSR_PR	/* Returning to user mode? */
diff -urNp linux-2.6.22.orig/arch/x86_64/kernel/entry.S linux-2.6.22.base/arch/x86_64/kernel/entry.S
--- linux-2.6.22.orig/arch/x86_64/kernel/entry.S	2007-05-21 01:39:05.000000000 -0700
+++ linux-2.6.22.base/arch/x86_64/kernel/entry.S	2007-05-22 13:40:14.000000000 -0700
@@ -282,7 +282,7 @@ sysret_careful:
 sysret_signal:
 	TRACE_IRQS_ON
 	sti
-	testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
+	testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP),%edx
 	jz    1f
 
 	/* Really a signal */
@@ -375,7 +375,7 @@ int_very_careful:
 	jmp int_restore_rest
 	
 int_signal:
-	testl $(_TIF_NOTIFY_RESUME|_TIF_SIGPENDING|_TIF_SINGLESTEP),%edx
+	testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP),%edx
 	jz 1f
 	movq %rsp,%rdi		# &ptregs -> arg1
 	xorl %esi,%esi		# oldset -> arg2
@@ -599,7 +599,7 @@ retint_careful:
 	jmp retint_check
 	
 retint_signal:
-	testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
+	testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP),%edx
 	jz    retint_swapgs
 	TRACE_IRQS_ON
 	sti
diff -urNp linux-2.6.22.orig/include/asm-alpha/thread_info.h linux-2.6.22.base/include/asm-alpha/thread_info.h
--- linux-2.6.22.orig/include/asm-alpha/thread_info.h	2007-05-21 01:39:09.000000000 -0700
+++ linux-2.6.22.base/include/asm-alpha/thread_info.h	2007-05-22 13:26:24.000000000 -0700
@@ -67,25 +67,22 @@ register struct thread_info *__current_t
  * TIF_SYSCALL_TRACE is known to be 0 via blbs.
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_POLLING_NRFLAG	4	/* poll_idle is polling NEED_RESCHED */
-#define TIF_DIE_IF_KERNEL	5	/* dik recursion lock */
-#define TIF_UAC_NOPRINT		6	/* see sysinfo.h */
-#define TIF_UAC_NOFIX		7
-#define TIF_UAC_SIGBUS		8
-#define TIF_MEMDIE		9
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_POLLING_NRFLAG	3	/* poll_idle is polling NEED_RESCHED */
+#define TIF_DIE_IF_KERNEL	4	/* dik recursion lock */
+#define TIF_UAC_NOPRINT		5	/* see sysinfo.h */
+#define TIF_UAC_NOFIX		6
+#define TIF_UAC_SIGBUS		7
+#define TIF_MEMDIE		8
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
 
 /* Work to do on interrupt/exception return.  */
-#define _TIF_WORK_MASK		(_TIF_NOTIFY_RESUME	\
-				 | _TIF_SIGPENDING	\
+#define _TIF_WORK_MASK		(_TIF_SIGPENDING	\
 				 | _TIF_NEED_RESCHED)
 
 /* Work to do on any return to userspace.  */
diff -urNp linux-2.6.22.orig/include/asm-arm/thread_info.h linux-2.6.22.base/include/asm-arm/thread_info.h
--- linux-2.6.22.orig/include/asm-arm/thread_info.h	2007-05-21 01:39:10.000000000 -0700
+++ linux-2.6.22.base/include/asm-arm/thread_info.h	2007-05-22 13:26:48.000000000 -0700
@@ -135,22 +135,19 @@ extern void iwmmxt_task_switch(struct th
 /*
  * thread information flags:
  *  TIF_SYSCALL_TRACE	- syscall trace active
- *  TIF_NOTIFY_RESUME	- resumption notification requested
  *  TIF_SIGPENDING	- signal pending
  *  TIF_NEED_RESCHED	- rescheduling necessary
  *  TIF_USEDFPU		- FPU was used by this task this quantum (SMP)
  *  TIF_POLLING_NRFLAG	- true if poll_idle() is polling TIF_NEED_RESCHED
  */
-#define TIF_NOTIFY_RESUME	0
-#define TIF_SIGPENDING		1
-#define TIF_NEED_RESCHED	2
+#define TIF_SIGPENDING		0
+#define TIF_NEED_RESCHED	1
 #define TIF_SYSCALL_TRACE	8
 #define TIF_POLLING_NRFLAG	16
 #define TIF_USING_IWMMXT	17
 #define TIF_MEMDIE		18
 #define TIF_FREEZE		19
 
-#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
 #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
diff -urNp linux-2.6.22.orig/include/asm-arm26/thread_info.h linux-2.6.22.base/include/asm-arm26/thread_info.h
--- linux-2.6.22.orig/include/asm-arm26/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-arm26/thread_info.h	2007-05-22 13:27:13.000000000 -0700
@@ -110,21 +110,18 @@ extern void free_thread_info(struct thre
 /*
  * thread information flags:
  *  TIF_SYSCALL_TRACE	- syscall trace active
- *  TIF_NOTIFY_RESUME	- resumption notification requested
  *  TIF_SIGPENDING	- signal pending
  *  TIF_NEED_RESCHED	- rescheduling necessary
  *  TIF_USEDFPU		- FPU was used by this task this quantum (SMP)
  *  TIF_POLLING_NRFLAG	- true if poll_idle() is polling TIF_NEED_RESCHED
  */
-#define TIF_NOTIFY_RESUME	0
-#define TIF_SIGPENDING		1
-#define TIF_NEED_RESCHED	2
+#define TIF_SIGPENDING		0
+#define TIF_NEED_RESCHED	1
 #define TIF_SYSCALL_TRACE	8
 #define TIF_USED_FPU		16
 #define TIF_POLLING_NRFLAG	17
 #define TIF_MEMDIE		18
 
-#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
 #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
diff -urNp linux-2.6.22.orig/include/asm-avr32/thread_info.h linux-2.6.22.base/include/asm-avr32/thread_info.h
--- linux-2.6.22.orig/include/asm-avr32/thread_info.h	2007-05-21 01:39:10.000000000 -0700
+++ linux-2.6.22.base/include/asm-avr32/thread_info.h	2007-05-22 13:27:49.000000000 -0700
@@ -74,20 +74,18 @@ static inline struct thread_info *curren
  * - other flags in MSW
  */
 #define TIF_SYSCALL_TRACE       0       /* syscall trace active */
-#define TIF_NOTIFY_RESUME       1       /* resumption notification requested */
-#define TIF_SIGPENDING          2       /* signal pending */
-#define TIF_NEED_RESCHED        3       /* rescheduling necessary */
-#define TIF_POLLING_NRFLAG      4       /* true if poll_idle() is polling
+#define TIF_SIGPENDING          1       /* signal pending */
+#define TIF_NEED_RESCHED        2       /* rescheduling necessary */
+#define TIF_POLLING_NRFLAG      3       /* true if poll_idle() is polling
 					   TIF_NEED_RESCHED */
-#define TIF_BREAKPOINT		5	/* true if we should break after return */
-#define TIF_SINGLE_STEP		6	/* single step after next break */
-#define TIF_MEMDIE		7
-#define TIF_RESTORE_SIGMASK	8	/* restore signal mask in do_signal */
-#define TIF_CPU_GOING_TO_SLEEP	9	/* CPU is entering sleep 0 mode */
+#define TIF_BREAKPOINT		4	/* true if we should break after return */
+#define TIF_SINGLE_STEP		5	/* single step after next break */
+#define TIF_MEMDIE		6
+#define TIF_RESTORE_SIGMASK	7	/* restore signal mask in do_signal */
+#define TIF_CPU_GOING_TO_SLEEP	8	/* CPU is entering sleep 0 mode */
 #define TIF_USERSPACE		31      /* true if FS sets userspace */
 
 #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)
diff -urNp linux-2.6.22.orig/include/asm-blackfin/thread_info.h linux-2.6.22.base/include/asm-blackfin/thread_info.h
--- linux-2.6.22.orig/include/asm-blackfin/thread_info.h	2007-05-21 01:39:10.000000000 -0700
+++ linux-2.6.22.base/include/asm-blackfin/thread_info.h	2007-05-22 13:28:25.000000000 -0700
@@ -118,18 +118,16 @@ static inline struct thread_info *curren
  * thread information flag bit numbers
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_POLLING_NRFLAG	4	/* true if poll_idle() is polling
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling
 					   TIF_NEED_RESCHED */
-#define TIF_MEMDIE              5
-#define TIF_RESTORE_SIGMASK	6	/* restore signal mask in do_signal() */
-#define TIF_FREEZE              7       /* is freezing for suspend */
+#define TIF_MEMDIE              4
+#define TIF_RESTORE_SIGMASK	5	/* restore signal mask in do_signal() */
+#define TIF_FREEZE              6       /* is freezing for suspend */
 
 /* as above, but as bit values */
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
diff -urNp linux-2.6.22.orig/include/asm-cris/thread_info.h linux-2.6.22.base/include/asm-cris/thread_info.h
--- linux-2.6.22.orig/include/asm-cris/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-cris/thread_info.h	2007-05-22 13:31:49.000000000 -0700
@@ -79,14 +79,12 @@ struct thread_info {
  * - other flags in MSW
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
 #define TIF_POLLING_NRFLAG	16	/* true if poll_idle() is polling TIF_NEED_RESCHED */
 #define TIF_MEMDIE		17
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
diff -urNp linux-2.6.22.orig/include/asm-frv/thread_info.h linux-2.6.22.base/include/asm-frv/thread_info.h
--- linux-2.6.22.orig/include/asm-frv/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-frv/thread_info.h	2007-05-22 13:33:27.000000000 -0700
@@ -108,18 +108,16 @@ register struct thread_info *__current_t
  * - other flags in MSW
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */
-#define TIF_IRET		5	/* return with iret */
-#define TIF_RESTORE_SIGMASK	6	/* restore signal mask in do_signal() */
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_SINGLESTEP		3	/* restore singlestep on return to user mode */
+#define TIF_IRET		4	/* return with iret */
+#define TIF_RESTORE_SIGMASK	5	/* restore signal mask in do_signal() */
 #define TIF_POLLING_NRFLAG	16	/* true if poll_idle() is polling TIF_NEED_RESCHED */
 #define TIF_MEMDIE		17	/* OOM killer killed process */
 #define TIF_FREEZE		18	/* freezing for suspend */
 
 #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
 #define _TIF_SINGLESTEP		(1 << TIF_SINGLESTEP)
diff -urNp linux-2.6.22.orig/include/asm-h8300/thread_info.h linux-2.6.22.base/include/asm-h8300/thread_info.h
--- linux-2.6.22.orig/include/asm-h8300/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-h8300/thread_info.h	2007-05-22 13:28:48.000000000 -0700
@@ -86,16 +86,14 @@ static inline struct thread_info *curren
  * thread information flag bit numbers
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_POLLING_NRFLAG	4	/* true if poll_idle() is polling
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling
 					   TIF_NEED_RESCHED */
-#define TIF_MEMDIE		5
+#define TIF_MEMDIE		4
 
 /* as above, but as bit values */
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
diff -urNp linux-2.6.22.orig/include/asm-i386/thread_info.h linux-2.6.22.base/include/asm-i386/thread_info.h
--- linux-2.6.22.orig/include/asm-i386/thread_info.h	2007-05-21 01:39:10.000000000 -0700
+++ linux-2.6.22.base/include/asm-i386/thread_info.h	2007-05-22 13:23:35.000000000 -0700
@@ -124,22 +124,20 @@ static inline struct thread_info *curren
  * - other flags in MSW
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */
-#define TIF_IRET		5	/* return with iret */
-#define TIF_SYSCALL_EMU		6	/* syscall emulation active */
-#define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
-#define TIF_SECCOMP		8	/* secure computing */
-#define TIF_RESTORE_SIGMASK	9	/* restore signal mask in do_signal() */
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_SINGLESTEP		3	/* restore singlestep on return to user mode */
+#define TIF_IRET		4	/* return with iret */
+#define TIF_SYSCALL_EMU		5	/* syscall emulation active */
+#define TIF_SYSCALL_AUDIT	6	/* syscall auditing active */
+#define TIF_SECCOMP		7	/* secure computing */
+#define TIF_RESTORE_SIGMASK	8	/* restore signal mask in do_signal() */
 #define TIF_MEMDIE		16
 #define TIF_DEBUG		17	/* uses debug registers */
 #define TIF_IO_BITMAP		18	/* uses I/O bitmap */
 #define TIF_FREEZE		19	/* is freezing for suspend */
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
diff -urNp linux-2.6.22.orig/include/asm-ia64/thread_info.h linux-2.6.22.base/include/asm-ia64/thread_info.h
--- linux-2.6.22.orig/include/asm-ia64/thread_info.h	2007-05-21 01:39:10.000000000 -0700
+++ linux-2.6.22.base/include/asm-ia64/thread_info.h	2007-05-23 02:00:11.000000000 -0700
@@ -79,13 +79,13 @@ struct thread_info {
  * - pending work-to-be-done flags are in least-significant 16 bits, other flags
  *   in top 16 bits
  */
-#define TIF_NOTIFY_RESUME	0	/* resumption notification requested */
-#define TIF_SIGPENDING		1	/* signal pending */
-#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
-#define TIF_SYSCALL_TRACE	3	/* syscall trace active */
-#define TIF_SYSCALL_AUDIT	4	/* syscall auditing active */
-#define TIF_SINGLESTEP		5	/* restore singlestep on return to user mode */
-#define TIF_RESTORE_SIGMASK	6	/* restore signal mask in do_signal() */
+#define TIF_SIGPENDING		0	/* signal pending */
+#define TIF_NEED_RESCHED	1	/* rescheduling necessary */
+#define TIF_SYSCALL_TRACE	2	/* syscall trace active */
+#define TIF_SYSCALL_AUDIT	3	/* syscall auditing active */
+#define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */
+#define TIF_RESTORE_SIGMASK	5	/* restore signal mask in do_signal() */
+#define TIF_PERFMON_WORK	6	/* work for pfm_handle_work() */
 #define TIF_POLLING_NRFLAG	16	/* true if poll_idle() is polling TIF_NEED_RESCHED */
 #define TIF_MEMDIE		17
 #define TIF_MCA_INIT		18	/* this task is processing MCA or INIT */
@@ -96,8 +96,8 @@ struct thread_info {
 #define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT)
 #define _TIF_SINGLESTEP		(1 << TIF_SINGLESTEP)
 #define _TIF_SYSCALL_TRACEAUDIT	(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP)
-#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
 #define _TIF_RESTORE_SIGMASK	(1 << TIF_RESTORE_SIGMASK)
+#define _TIF_PERFMON_WORK	(1 << TIF_PERFMON_WORK)
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)
@@ -106,7 +106,9 @@ struct thread_info {
 #define _TIF_FREEZE		(1 << TIF_FREEZE)
 
 /* "work to do on user-return" bits */
-#define TIF_ALLWORK_MASK	(_TIF_NOTIFY_RESUME|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_RESTORE_SIGMASK)
+#define TIF_ALLWORK_MASK	(_TIF_SIGPENDING|_TIF_PERFMON_WORK|_TIF_SYSCALL_AUDIT|\
+				 _TIF_NEED_RESCHED| _TIF_SYSCALL_TRACE|\
+				 _TIF_RESTORE_SIGMASK)
 /* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE or TIF_SYSCALL_AUDIT */
 #define TIF_WORK_MASK		(TIF_ALLWORK_MASK&~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT))
 
diff -urNp linux-2.6.22.orig/include/asm-m32r/thread_info.h linux-2.6.22.base/include/asm-m32r/thread_info.h
--- linux-2.6.22.orig/include/asm-m32r/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-m32r/thread_info.h	2007-05-22 13:35:09.000000000 -0700
@@ -146,17 +146,15 @@ static inline unsigned int get_thread_fa
  * - other flags in MSW
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */
-#define TIF_IRET		5	/* return with iret */
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_SINGLESTEP		3	/* restore singlestep on return to user mode */
+#define TIF_IRET		4	/* return with iret */
 #define TIF_POLLING_NRFLAG	16	/* true if poll_idle() is polling TIF_NEED_RESCHED */
 					/* 31..28 fault code */
 #define TIF_MEMDIE		17
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
diff -urNp linux-2.6.22.orig/include/asm-m68knommu/thread_info.h linux-2.6.22.base/include/asm-m68knommu/thread_info.h
--- linux-2.6.22.orig/include/asm-m68knommu/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-m68knommu/thread_info.h	2007-05-22 13:32:30.000000000 -0700
@@ -83,16 +83,14 @@ static inline struct thread_info *curren
  * thread information flag bit numbers
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_POLLING_NRFLAG	4	/* true if poll_idle() is polling
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling
 					   TIF_NEED_RESCHED */
-#define TIF_MEMDIE		5
+#define TIF_MEMDIE		4
 
 /* as above, but as bit values */
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
diff -urNp linux-2.6.22.orig/include/asm-mips/thread_info.h linux-2.6.22.base/include/asm-mips/thread_info.h
--- linux-2.6.22.orig/include/asm-mips/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-mips/thread_info.h	2007-05-22 13:38:13.000000000 -0700
@@ -109,11 +109,10 @@ register struct thread_info *__current_t
  * - pending work-to-be-done flags are in LSW
  * - other flags in MSW
  */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_SYSCALL_AUDIT	4	/* syscall auditing active */
-#define TIF_SECCOMP		5	/* secure computing */
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_SYSCALL_AUDIT	3	/* syscall auditing active */
+#define TIF_SECCOMP		4	/* secure computing */
 #define TIF_RESTORE_SIGMASK	9	/* restore signal mask in do_signal() */
 #define TIF_USEDFPU		16	/* FPU was used by this task this quantum (SMP) */
 #define TIF_POLLING_NRFLAG	17	/* true if poll_idle() is polling TIF_NEED_RESCHED */
@@ -122,7 +121,6 @@ register struct thread_info *__current_t
 #define TIF_SYSCALL_TRACE	31	/* syscall trace active */
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
diff -urNp linux-2.6.22.orig/include/asm-parisc/thread_info.h linux-2.6.22.base/include/asm-parisc/thread_info.h
--- linux-2.6.22.orig/include/asm-parisc/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-parisc/thread_info.h	2007-05-22 13:35:52.000000000 -0700
@@ -56,23 +56,21 @@ struct thread_info {
  * thread information flags
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_POLLING_NRFLAG	4	/* true if poll_idle() is polling TIF_NEED_RESCHED */
-#define TIF_32BIT               5       /* 32 bit binary */
-#define TIF_MEMDIE		6
-#define TIF_RESTORE_SIGMASK	7	/* restore saved signal mask */
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling TIF_NEED_RESCHED */
+#define TIF_32BIT               4       /* 32 bit binary */
+#define TIF_MEMDIE		5
+#define TIF_RESTORE_SIGMASK	6	/* restore saved signal mask */
 
 #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)
 #define _TIF_32BIT		(1 << TIF_32BIT)
 #define _TIF_RESTORE_SIGMASK	(1 << TIF_RESTORE_SIGMASK)
 
-#define _TIF_USER_WORK_MASK     (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | \
+#define _TIF_USER_WORK_MASK     (_TIF_SIGPENDING | \
                                  _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
 
 #endif /* __KERNEL__ */
diff -urNp linux-2.6.22.orig/include/asm-powerpc/thread_info.h linux-2.6.22.base/include/asm-powerpc/thread_info.h
--- linux-2.6.22.orig/include/asm-powerpc/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-powerpc/thread_info.h	2007-05-22 13:25:36.000000000 -0700
@@ -107,26 +107,24 @@ static inline struct thread_info *curren
  * thread information flag bit numbers
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_POLLING_NRFLAG	4	/* true if poll_idle() is polling
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling
 					   TIF_NEED_RESCHED */
-#define TIF_32BIT		5	/* 32 bit binary */
-#define TIF_RUNLATCH		6	/* Is the runlatch enabled? */
-#define TIF_ABI_PENDING		7	/* 32/64 bit switch needed */
-#define TIF_SYSCALL_AUDIT	8	/* syscall auditing active */
-#define TIF_SINGLESTEP		9	/* singlestepping active */
-#define TIF_MEMDIE		10
-#define TIF_SECCOMP		11	/* secure computing */
-#define TIF_RESTOREALL		12	/* Restore all regs (implies NOERROR) */
+#define TIF_32BIT		4	/* 32 bit binary */
+#define TIF_RUNLATCH		5	/* Is the runlatch enabled? */
+#define TIF_ABI_PENDING		6	/* 32/64 bit switch needed */
+#define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
+#define TIF_SINGLESTEP		8	/* singlestepping active */
+#define TIF_MEMDIE		9
+#define TIF_SECCOMP		10	/* secure computing */
+#define TIF_RESTOREALL		11	/* Restore all regs (implies NOERROR) */
 #define TIF_NOERROR		14	/* Force successful syscall return */
 #define TIF_RESTORE_SIGMASK	15	/* Restore signal mask in do_signal */
 #define TIF_FREEZE		16	/* Freezing for suspend */
 
 /* as above, but as bit values */
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
@@ -142,7 +140,7 @@ static inline struct thread_info *curren
 #define _TIF_FREEZE		(1<<TIF_FREEZE)
 #define _TIF_SYSCALL_T_OR_A	(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
 
-#define _TIF_USER_WORK_MASK	(_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | \
+#define _TIF_USER_WORK_MASK	( _TIF_SIGPENDING | \
 				 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
 #define _TIF_PERSYSCALL_MASK	(_TIF_RESTOREALL|_TIF_NOERROR)
 
diff -urNp linux-2.6.22.orig/include/asm-sh/thread_info.h linux-2.6.22.base/include/asm-sh/thread_info.h
--- linux-2.6.22.orig/include/asm-sh/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-sh/thread_info.h	2007-05-22 13:36:11.000000000 -0700
@@ -107,18 +107,16 @@ static inline struct thread_info *curren
  * - other flags in MSW
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_RESTORE_SIGMASK	4	/* restore signal mask in do_signal() */
-#define TIF_SINGLESTEP		5	/* singlestepping active */
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_RESTORE_SIGMASK	3	/* restore signal mask in do_signal() */
+#define TIF_SINGLESTEP		4	/* singlestepping active */
 #define TIF_USEDFPU		16	/* FPU was used by this task this quantum (SMP) */
 #define TIF_POLLING_NRFLAG	17	/* true if poll_idle() is polling TIF_NEED_RESCHED */
 #define TIF_MEMDIE		18
 #define TIF_FREEZE		19
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
diff -urNp linux-2.6.22.orig/include/asm-v850/thread_info.h linux-2.6.22.base/include/asm-v850/thread_info.h
--- linux-2.6.22.orig/include/asm-v850/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-v850/thread_info.h	2007-05-22 13:30:32.000000000 -0700
@@ -77,16 +77,14 @@ struct thread_info {
  * thread information flag bit numbers
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_POLLING_NRFLAG	4	/* true if poll_idle() is polling
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_POLLING_NRFLAG	3	/* true if poll_idle() is polling
 					   TIF_NEED_RESCHED */
-#define TIF_MEMDIE		5
+#define TIF_MEMDIE		4
 
 /* as above, but as bit values */
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
diff -urNp linux-2.6.22.orig/include/asm-x86_64/thread_info.h linux-2.6.22.base/include/asm-x86_64/thread_info.h
--- linux-2.6.22.orig/include/asm-x86_64/thread_info.h	2007-05-21 01:39:10.000000000 -0700
+++ linux-2.6.22.base/include/asm-x86_64/thread_info.h	2007-05-22 13:23:58.000000000 -0700
@@ -107,14 +107,13 @@ static inline struct thread_info *stack_
  * Warning: layout of LSW is hardcoded in entry.S
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_SINGLESTEP		4	/* reenable singlestep on user return*/
-#define TIF_IRET		5	/* force IRET */
-#define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
-#define TIF_SECCOMP		8	/* secure computing */
-#define TIF_RESTORE_SIGMASK	9	/* restore signal mask in do_signal */
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_SINGLESTEP		3	/* reenable singlestep on user return*/
+#define TIF_IRET		4	/* force IRET */
+#define TIF_SYSCALL_AUDIT	5	/* syscall auditing active */
+#define TIF_SECCOMP		6	/* secure computing */
+#define TIF_RESTORE_SIGMASK	7	/* restore signal mask in do_signal */
 /* 16 free */
 #define TIF_IA32		17	/* 32bit process */ 
 #define TIF_FORK		18	/* ret_from_fork */
@@ -125,7 +124,6 @@ static inline struct thread_info *stack_
 #define TIF_FREEZE		23	/* is freezing for suspend */
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
diff -urNp linux-2.6.22.orig/include/asm-xtensa/thread_info.h linux-2.6.22.base/include/asm-xtensa/thread_info.h
--- linux-2.6.22.orig/include/asm-xtensa/thread_info.h	2007-04-25 20:08:32.000000000 -0700
+++ linux-2.6.22.base/include/asm-xtensa/thread_info.h	2007-05-22 13:34:20.000000000 -0700
@@ -110,16 +110,14 @@ static inline struct thread_info *curren
  * - other flags in MSW
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-#define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
-#define TIF_SIGPENDING		2	/* signal pending */
-#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
-#define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */
-#define TIF_IRET		5	/* return with iret */
-#define TIF_MEMDIE		6
+#define TIF_SIGPENDING		1	/* signal pending */
+#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+#define TIF_SINGLESTEP		3	/* restore singlestep on return to user mode */
+#define TIF_IRET		4	/* return with iret */
+#define TIF_MEMDIE		5
 #define TIF_POLLING_NRFLAG	16	/* true if poll_idle() is polling TIF_NEED_RESCHED */
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
-#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-22 18:20   ` [PATCH 1/2] Define new percpu interface for shared data -- version 3 Fenghua Yu
@ 2007-05-23 17:49     ` Andrew Morton
  2007-05-23 18:26       ` Yu, Fenghua
  0 siblings, 1 reply; 19+ messages in thread
From: Andrew Morton @ 2007-05-23 17:49 UTC (permalink / raw)
  To: Fenghua Yu; +Cc: suresh.b.siddha, clameter, kiran, rmk, linux-kernel

On Tue, 22 May 2007 11:20:03 -0700 Fenghua Yu <fenghua.yu@intel.com> wrote:

> per cpu data section contains two types of data. One set which is exclusively
> accessed by the local cpu and the other set which is  per cpu, but also shared
> by remote cpus. In the current kernel, these two sets are not clearely
> separated out. This can potentially cause the same data cacheline shared
> between the two sets of data, which will result in unnecessary bouncing of the
> cacheline between cpus.
> 
> One way to fix the problem is to cacheline align the remotely accessed per cpu
> data, both at the beginning and at the end. Because of the padding at both ends,
> this will likely cause some memory wastage and also the interface to achieve
> this is not clean.
> 
> This patch:
> 
> Moves the remotely accessed per cpu data (which is currently marked
> as ____cacheline_aligned_in_smp) into a different section, where all the data
> elements are cacheline aligned. And as such, this differentiates the local
> only data and remotely accessed data cleanly.

OK, but could we please have a concise description of the impact
of these changes on kernel memory footprint?  Increase or decrease?
And by approximately how much?

Thanks.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-23 17:49     ` Andrew Morton
@ 2007-05-23 18:26       ` Yu, Fenghua
  2007-05-23 18:57         ` Ravikiran G Thirumalai
  0 siblings, 1 reply; 19+ messages in thread
From: Yu, Fenghua @ 2007-05-23 18:26 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Siddha, Suresh B, clameter, kiran, rmk, linux-kernel

> elements are cacheline aligned. And as such, this differentiates the
local
> only data and remotely accessed data cleanly.

>OK, but could we please have a concise description of the impact
>of these changes on kernel memory footprint?  Increase or decrease?
>And by approximately how much?

Depending on how linker places percpu data, the patches could
increase or decrease percpu section size. Data from 2.6.21-rc7-mm2:

On x86 SMP, the section size is increased from 0x7768 to 0x790c.
1.3% increase.

On X86-64 SMP, the size is decreased from 0x72d0 to 0x6540.
11.8% decrease.

On X86-64 VSMP, the size is increased from 0x72d0 to 0x8340.
14.3% increase.

On IA64 SMP, the size is decreased from 0x8370 to 0x7fc0.
2.8% decrease.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-23 18:26       ` Yu, Fenghua
@ 2007-05-23 18:57         ` Ravikiran G Thirumalai
  2007-05-23 19:09           ` Yu, Fenghua
  2007-05-24  9:03           ` Martin Schwidefsky
  0 siblings, 2 replies; 19+ messages in thread
From: Ravikiran G Thirumalai @ 2007-05-23 18:57 UTC (permalink / raw)
  To: Yu, Fenghua
  Cc: Andrew Morton, Siddha, Suresh B, clameter, rmk, linux-kernel,
	schwidefsky, heiko.carstens

On Wed, May 23, 2007 at 11:26:53AM -0700, Yu, Fenghua wrote:
> > elements are cacheline aligned. And as such, this differentiates the
> local
> > only data and remotely accessed data cleanly.
> 
> >OK, but could we please have a concise description of the impact
> >of these changes on kernel memory footprint?  Increase or decrease?
> >And by approximately how much?
> 
> Depending on how linker places percpu data, the patches could
> increase or decrease percpu section size. Data from 2.6.21-rc7-mm2:
> 
> On x86 SMP, the section size is increased from 0x7768 to 0x790c.
> 1.3% increase.
> 
> On X86-64 SMP, the size is decreased from 0x72d0 to 0x6540.
> 11.8% decrease.
> 
> On X86-64 VSMP, the size is increased from 0x72d0 to 0x8340.
> 14.3% increase.
> 
> On IA64 SMP, the size is decreased from 0x8370 to 0x7fc0.
> 2.8% decrease.

Has there been any measurable benefit yet due to tail padding?
It would also be interesting to check the wastage/savings on another large
cache architecture like S390 (which has a 256 byte cache line)

Thanks,
Kiran

^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-23 18:57         ` Ravikiran G Thirumalai
@ 2007-05-23 19:09           ` Yu, Fenghua
  2007-05-23 19:20             ` Ravikiran G Thirumalai
  2007-05-24  9:03           ` Martin Schwidefsky
  1 sibling, 1 reply; 19+ messages in thread
From: Yu, Fenghua @ 2007-05-23 19:09 UTC (permalink / raw)
  To: Ravikiran G Thirumalai
  Cc: Andrew Morton, Siddha, Suresh B, clameter, rmk, linux-kernel,
	schwidefsky, heiko.carstens


>Has there been any measurable benefit yet due to tail padding?

We don't have data that tail padding actually helps. It all
depends on what data the linker lays out in the cachelines.

As of now we just want to create the infrastructure (so that
more and more people who need it, can use it).

>It would also be interesting to check the wastage/savings on another
large
>cache architecture like S390 (which has a 256 byte cache line)

S390 folks or others might help get the data. I don't have other
machines
on hand.

Thanks.

-Fenghua

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-23 19:09           ` Yu, Fenghua
@ 2007-05-23 19:20             ` Ravikiran G Thirumalai
  2007-05-23 19:31               ` Andrew Morton
  0 siblings, 1 reply; 19+ messages in thread
From: Ravikiran G Thirumalai @ 2007-05-23 19:20 UTC (permalink / raw)
  To: Yu, Fenghua
  Cc: Andrew Morton, Siddha, Suresh B, clameter, rmk, linux-kernel,
	schwidefsky, heiko.carstens

On Wed, May 23, 2007 at 12:09:56PM -0700, Yu, Fenghua wrote:
> 
> >Has there been any measurable benefit yet due to tail padding?
> 
> We don't have data that tail padding actually helps. It all
> depends on what data the linker lays out in the cachelines.
> 
> As of now we just want to create the infrastructure (so that
> more and more people who need it, can use it).

So what we have now is space wastage on some architectures, space savings on
some, but with no measurable performance benefit due to the infrastructure
itself.  Why not push the infrastructure when we really need it, as against
pushing it now when we are not sure if it benefits?

Thanks,
Kiran 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-23 19:20             ` Ravikiran G Thirumalai
@ 2007-05-23 19:31               ` Andrew Morton
  2007-05-23 21:13                 ` Yu, Fenghua
  0 siblings, 1 reply; 19+ messages in thread
From: Andrew Morton @ 2007-05-23 19:31 UTC (permalink / raw)
  To: Ravikiran G Thirumalai
  Cc: Yu, Fenghua, Siddha, Suresh B, clameter, rmk, linux-kernel,
	schwidefsky, heiko.carstens

On Wed, 23 May 2007 12:20:05 -0700 Ravikiran G Thirumalai <kiran@scalex86.org> wrote:

> On Wed, May 23, 2007 at 12:09:56PM -0700, Yu, Fenghua wrote:
> > 
> > >Has there been any measurable benefit yet due to tail padding?
> > 
> > We don't have data that tail padding actually helps. It all
> > depends on what data the linker lays out in the cachelines.
> > 
> > As of now we just want to create the infrastructure (so that
> > more and more people who need it, can use it).
> 
> So what we have now is space wastage on some architectures, space savings on
> some, but with no measurable performance benefit due to the infrastructure
> itself.  Why not push the infrastructure when we really need it, as against
> pushing it now when we are not sure if it benefits?
> 

It makes sense from a theoretical POV and is pretty much a no-op in terms
of resource consumption.

The problem with the wait-until-it-hurts approach is that by the time
someone hurts from this and we find out about it, they may well be using
some year-old enterprise kernel and it's too late to fix it for them.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-23 19:31               ` Andrew Morton
@ 2007-05-23 21:13                 ` Yu, Fenghua
  2007-05-25  9:43                   ` Russell King
  0 siblings, 1 reply; 19+ messages in thread
From: Yu, Fenghua @ 2007-05-23 21:13 UTC (permalink / raw)
  To: Andrew Morton, Ravikiran G Thirumalai
  Cc: Siddha, Suresh B, clameter, rmk, linux-kernel, schwidefsky,
	heiko.carstens


>> So what we have now is space wastage on some architectures, space
savings on
>> some, but with no measurable performance benefit due to the
infrastructure
>> itself.  Why not push the infrastructure when we really need it, as
against
>> pushing it now when we are not sure if it benefits?
> 

>It makes sense from a theoretical POV and is pretty much a no-op in
terms
>of resource consumption.

>The problem with the wait-until-it-hurts approach is that by the time
>someone hurts from this and we find out about it, they may well be
using
>some year-old enterprise kernel and it's too late to fix it for them.

Yes, in theory, sharing shared percpu data with local percpu data in one
cache line can cause cache line contention between remote and local
access.
And this undesirable sharing does happen in current git.

On x86, without the patch, runqueue shares cacheline with cpu_domains.
c0633e80 d per_cpu__runqueues
c06347e0 d per_cpu__cpu_domains

Other architectures also have this undesired sharing. IA64 is an
example.

In future, this undesired sharing could happen with other data if we do 
not have a methodology to prevent it.

I just do not have data to show the performance hit for this sharing
now.

Thanks.

-Fenghua

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-23 18:57         ` Ravikiran G Thirumalai
  2007-05-23 19:09           ` Yu, Fenghua
@ 2007-05-24  9:03           ` Martin Schwidefsky
  2007-05-24 10:16             ` Ravikiran G Thirumalai
  1 sibling, 1 reply; 19+ messages in thread
From: Martin Schwidefsky @ 2007-05-24  9:03 UTC (permalink / raw)
  To: Ravikiran G Thirumalai
  Cc: Yu, Fenghua, Andrew Morton, Siddha, Suresh B, clameter, rmk,
	linux-kernel, heiko.carstens

On Wed, 2007-05-23 at 11:57 -0700, Ravikiran G Thirumalai wrote:
> > >OK, but could we please have a concise description of the impact
> > >of these changes on kernel memory footprint?  Increase or decrease?
> > >And by approximately how much?
> > 
> > Depending on how linker places percpu data, the patches could
> > increase or decrease percpu section size. Data from 2.6.21-rc7-mm2:
> > 
> > On x86 SMP, the section size is increased from 0x7768 to 0x790c.
> > 1.3% increase.
> > 
> > On X86-64 SMP, the size is decreased from 0x72d0 to 0x6540.
> > 11.8% decrease.
> > 
> > On X86-64 VSMP, the size is increased from 0x72d0 to 0x8340.
> > 14.3% increase.
> > 
> > On IA64 SMP, the size is decreased from 0x8370 to 0x7fc0.
> > 2.8% decrease.
> 
> Has there been any measurable benefit yet due to tail padding?
> It would also be interesting to check the wastage/savings on another
> large
> cache architecture like S390 (which has a 256 byte cache line)

Current git with the patches applied and the default configuration for
s390 decreases the section size fof .data.percpu from 0x3e50 to 0x3e00.
0.5% decrease.

-- 
blue skies,
  Martin.

"Reality continues to ruin my life." - Calvin.



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-24  9:03           ` Martin Schwidefsky
@ 2007-05-24 10:16             ` Ravikiran G Thirumalai
  0 siblings, 0 replies; 19+ messages in thread
From: Ravikiran G Thirumalai @ 2007-05-24 10:16 UTC (permalink / raw)
  To: Martin Schwidefsky
  Cc: Yu, Fenghua, Andrew Morton, Siddha, Suresh B, clameter, rmk,
	linux-kernel, heiko.carstens

On Thu, May 24, 2007 at 11:03:56AM +0200, Martin Schwidefsky wrote:
> On Wed, 2007-05-23 at 11:57 -0700, Ravikiran G Thirumalai wrote:
> 
> Current git with the patches applied and the default configuration for
> s390 decreases the section size fof .data.percpu from 0x3e50 to 0x3e00.
> 0.5% decrease.
> 

Thanks!!
Fenghua, you could use my 'Acked by' if needed
Acked-by: Ravikiran Thirumalai <kiran@scalex86.org>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-23 21:13                 ` Yu, Fenghua
@ 2007-05-25  9:43                   ` Russell King
  2007-05-25 15:24                     ` Yu, Fenghua
  0 siblings, 1 reply; 19+ messages in thread
From: Russell King @ 2007-05-25  9:43 UTC (permalink / raw)
  To: Yu, Fenghua
  Cc: Andrew Morton, Ravikiran G Thirumalai, Siddha, Suresh B, clameter,
	linux-kernel, schwidefsky, heiko.carstens

On Wed, May 23, 2007 at 02:13:24PM -0700, Yu, Fenghua wrote:
> Yes, in theory, sharing shared percpu data with local percpu data in one
> cache line can cause cache line contention between remote and local
> access.

What's "shared percpu data" ?  It sounds to me like a contradiction in
terms.  Isn't percpu data supposed to only be accessed by the CPU which
owns it to prevent cache line bouncing?  In which case, what's the point
of sharing that data with other CPUs?  Surely "shared percpu data" is
just the same as normal data?

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:

^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: [PATCH 1/2] Define new percpu interface for shared data -- version 3
  2007-05-25  9:43                   ` Russell King
@ 2007-05-25 15:24                     ` Yu, Fenghua
  0 siblings, 0 replies; 19+ messages in thread
From: Yu, Fenghua @ 2007-05-25 15:24 UTC (permalink / raw)
  To: Russell King
  Cc: Andrew Morton, Ravikiran G Thirumalai, Siddha, Suresh B, clameter,
	linux-kernel, schwidefsky, heiko.carstens

>What's "shared percpu data" ?  It sounds to me like a contradiction in
>terms.  Isn't percpu data supposed to only be accessed by the CPU which
>owns it to prevent cache line bouncing?  In which case, what's the
point
>of sharing that data with other CPUs?  Surely "shared percpu data" is
>just the same as normal data?

Like said in the patch description:
"per cpu data section contains two types of data. One set which is
exclusively accessed by the local cpu and the other set which is  per
cpu,
but also shared by remote cpus."

The patches separate shared and aligned per cpu data from others to
eliminate cache pouncing between remote and local access.

The patches do not separate shared but non-aligned percpu data, e.g.
cpu_idle_state, flush_state in x86-64. We can do that later if needed.

I think the shared percpu data are "mainly" accessed by local cpu. We
need
to concentrate on their local cpu access i.e. define in percpu. If we
treat them as "normal" data, we may lose percpu benefits e.g. numa
allocation.

Thanks.

-Fenghua

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2007-05-25 15:24 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-22 12:47 is TIF_NOTIFY_RESUME used? Stephane Eranian
2007-05-22 16:02 ` Andrew Morton
2007-05-22 16:07   ` Stephane Eranian
2007-05-22 16:15     ` Andrew Morton
2007-05-22 22:51       ` Stephane Eranian
2007-05-22 23:02         ` Andrew Morton
2007-05-23  9:57           ` [PATCH] remove unused TIF_NOTIFY_RESUME flag Stephane Eranian
2007-05-22 18:20   ` [PATCH 1/2] Define new percpu interface for shared data -- version 3 Fenghua Yu
2007-05-23 17:49     ` Andrew Morton
2007-05-23 18:26       ` Yu, Fenghua
2007-05-23 18:57         ` Ravikiran G Thirumalai
2007-05-23 19:09           ` Yu, Fenghua
2007-05-23 19:20             ` Ravikiran G Thirumalai
2007-05-23 19:31               ` Andrew Morton
2007-05-23 21:13                 ` Yu, Fenghua
2007-05-25  9:43                   ` Russell King
2007-05-25 15:24                     ` Yu, Fenghua
2007-05-24  9:03           ` Martin Schwidefsky
2007-05-24 10:16             ` Ravikiran G Thirumalai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox