Skip to contentSkip to conversation

Use the new percpu interface for shared data -- version 3

PATCH In review Fenghua Yu 2 participants 3 messages May 22, 2007 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

Fenghua Yu

author
#1 lore raw

PATCH 2/2 Use the new percpu interface for shared data -- version 3

Currently most of the per cpu data, which is accessed by different cpus, has a ____cacheline_aligned_in_smp attribute. Move all this data to the new per cpu shared data section: .data.percpu.shared_aligned.

This will seperate the percpu data which is referenced frequently by other cpus from the local only percpu data.

---

 arch/i386/kernel/init_task.c   |    2 +-
 arch/i386/kernel/irq.c         |    2 +-
 arch/ia64/kernel/smp.c         |    2 +-
 arch/x86_64/kernel/init_task.c |    2 +-
 kernel/sched.c                 |    2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)
arch/i386/kernel/init_task.c +1 -1
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/i386/kernel/init_task.c linux-2.6.22-rc1-mm1.1/arch/i386/kernel/init_task.c
@@ -42,5 +42,5 @@ EXPORT_SYMBOL(init_task);
  * per-CPU TSS segments. Threads are completely 'soft' on Linux,
  * no more per-task TSS's.
  */ 
-DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_internodealigned_in_smp = INIT_TSS;
+DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) = INIT_TSS;
 
arch/i386/kernel/irq.c +1 -1
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/i386/kernel/irq.c linux-2.6.22-rc1-mm1.1/arch/i386/kernel/irq.c
@@ -21,7 +21,7 @@
 #include <asm/apic.h>
 #include <asm/uaccess.h>
 
-DEFINE_PER_CPU(irq_cpustat_t, irq_stat) ____cacheline_internodealigned_in_smp;
+DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
 EXPORT_PER_CPU_SYMBOL(irq_stat);
 
 DEFINE_PER_CPU(struct pt_regs *, irq_regs);
arch/ia64/kernel/smp.c +1 -1
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/ia64/kernel/smp.c linux-2.6.22-rc1-mm1.1/arch/ia64/kernel/smp.c
@@ -82,7 +82,7 @@ static volatile struct call_data_struct 
 #define IPI_KDUMP_CPU_STOP	3
 
 /* This needs to be cacheline aligned because it is written to by *other* CPUs.  */
-static DEFINE_PER_CPU(u64, ipi_operation) ____cacheline_aligned;
+static DEFINE_PER_CPU_SHARED_ALIGNED(u64, ipi_operation);
 
 extern void cpu_halt (void);
 
arch/x86_64/kernel/init_task.c +1 -1
diff -Nurp linux-2.6.22-rc1-mm1.0/arch/x86_64/kernel/init_task.c linux-2.6.22-rc1-mm1.1/arch/x86_64/kernel/init_task.c
@@ -44,7 +44,7 @@ EXPORT_SYMBOL(init_task);
  * section. Since TSS's are completely CPU-local, we want them
  * on exact cacheline boundaries, to eliminate cacheline ping-pong.
  */ 
-DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_internodealigned_in_smp = INIT_TSS;
+DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) = INIT_TSS;
 
 /* Copies of the original ist values from the tss are only accessed during
  * debugging, no special alignment required.
kernel/sched.c +1 -1
diff -Nurp linux-2.6.22-rc1-mm1.0/kernel/sched.c linux-2.6.22-rc1-mm1.1/kernel/sched.c
@@ -305,7 +305,7 @@ struct rq {
 	struct lock_class_key rq_lock_key;
 };
 
-static DEFINE_PER_CPU(struct rq, runqueues) ____cacheline_aligned_in_smp;
+static DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
 static DEFINE_MUTEX(sched_hotcpu_mutex);
 
 static inline int cpu_of(struct rq *rq)
#2 lore raw

Review

Quoted 2 lines · Fenghua Yu
(quoted diff) +1 -1
-DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_internodealigned_in_smp = INIT_TSS;
+DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) = INIT_TSS;

Good work but could we call this something shorter?

Like

DEFINE_CPU_SHARED(...)

#3 lore raw
Quoted 3 lines
Quoted 3 lines

-DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_internodealigned_in_smp = INIT_TSS; +DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) =

INIT_TSS;

Quoted 5 lines

Good work but could we call this something shorter?

Like

DEFINE_CPU_SHARED(...)

The PER_CPU_SHARED_ALIGNED is corresponding to .data.per_cpu.shared_aligned section which has all shared and aligned percpu data.

In future, another section .data.per_cpu.shared and its macro DEFINE_PER_CPU_SHARED might be added for shared but not aligned.

BTW, DEFINE_PER_CPU_SHARED_ALIGNED is already getting shorter than pervious version.

Thanks.

-Fenghua