All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid
       [not found] ` <9B14D1490DDECA4E974F6B9FC9EBAB3140CD274367@VMBX108.ihostexchange.net>
@ 2011-10-25 11:49   ` Eial Czerwacki
  2011-10-26  6:21     ` David Rientjes
  2011-10-26  8:20     ` Andi Kleen
  0 siblings, 2 replies; 6+ messages in thread
From: Eial Czerwacki @ 2011-10-25 11:49 UTC (permalink / raw)
  To: linux-kernel; +Cc: Shai Fultheim (Shai@ScaleMP.com)

Avoid false sharing on the read mostly x86_cpu_to_apicid by moving it to
__read_mostly section.
The per-cpu area is write and read and this symbol shows up high on ipi
intensive/x86_cpu_to_apicid load.

Signed-off-by: Eial Czerwacki<eial@scalemp.com>
Signed-off-by: Shai Fultheim<shai@scalemp.com>
Author: Ravikiran Thirumalai<kiran@scalex86.org>
---

Index: b/arch/x86/include/asm/smp.h
===================================================================
--- a/arch/x86/include/asm/smp.h	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/include/asm/smp.h	2010-06-02 15:59:21.000000000 -0700
@@ -36,7 +36,8 @@ static inline struct cpumask *cpu_core_m
   	return per_cpu(cpu_core_map, cpu);
   }

-DECLARE_EARLY_PER_CPU(u16, x86_cpu_to_apicid);
+extern u16 x86_cpu_to_apicid[NR_CPUS];
+
   DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid);

   /* Static state in head.S used to set up a CPU */
@@ -142,7 +143,7 @@ void native_send_call_func_ipi(const str
   void native_send_call_func_single_ipi(int cpu);

   void smp_store_cpu_info(int id);
-#define cpu_physical_id(cpu)	per_cpu(x86_cpu_to_apicid, cpu)
+#define cpu_physical_id(cpu)	x86_cpu_to_apicid[cpu]

   /* We don't mark CPUs online until __cpu_up(), so we need another measure */
   static inline int num_booting_cpus(void)
Index: b/arch/x86/kernel/acpi/boot.c
===================================================================
--- a/arch/x86/kernel/acpi/boot.c	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/kernel/acpi/boot.c	2010-06-02 15:59:21.000000000 -0700
@@ -568,7 +568,7 @@ EXPORT_SYMBOL(acpi_map_lsapic);

   int acpi_unmap_lsapic(int cpu)
   {
-	per_cpu(x86_cpu_to_apicid, cpu) = -1;
+	x86_cpu_to_apicid[cpu] = -1;
   	set_cpu_present(cpu, false);
   	num_processors--;

Index: b/arch/x86/kernel/apic/apic.c
===================================================================
--- a/arch/x86/kernel/apic/apic.c	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/kernel/apic/apic.c	2010-06-02 15:59:21.000000000 -0700
@@ -78,9 +78,8 @@ physid_mask_t phys_cpu_present_map;
   /*
    * Map cpu index to physical APIC ID
    */
-DEFINE_EARLY_PER_CPU(u16, x86_cpu_to_apicid, BAD_APICID);
+u16 x86_cpu_to_apicid[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID };
   DEFINE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid, BAD_APICID);
-EXPORT_EARLY_PER_CPU_SYMBOL(x86_cpu_to_apicid);
   EXPORT_EARLY_PER_CPU_SYMBOL(x86_bios_cpu_apicid);

   #ifdef CONFIG_X86_32
@@ -1248,7 +1247,7 @@
   	 * proper NUMA affinity.
   	 */
   	if (apic->x86_32_numa_cpu_node)
-		set_apicid_to_node(early_per_cpu(x86_cpu_to_apicid, cpu),
+		set_apicid_to_node(x86_cpu_to_apicid[cpu],
   				   apic->x86_32_numa_cpu_node(cpu));
   #endif

@@ -1916,7 +1915,7 @@ void __cpuinit generic_processor_info(in
   		max_physical_apicid = apicid;

   #if defined(CONFIG_SMP) || defined(CONFIG_X86_64)
-	early_per_cpu(x86_cpu_to_apicid, cpu) = apicid;
+	x86_cpu_to_apicid[cpu] = apicid;
   	early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid;
   #endif

Index: b/arch/x86/kernel/apic/apic_flat_64.c
===================================================================
--- a/arch/x86/kernel/apic/apic_flat_64.c	2010-06-02 15:59:21.000000000 -0700
+++ b/arch/x86/kernel/apic/apic_flat_64.c	2010-06-02 16:49:32.000000000 -0700
@@ -294,7 +294,7 @@ static unsigned int physflat_cpu_mask_to
   	 */
   	cpu = cpumask_first(cpumask);
   	if ((unsigned)cpu<   nr_cpu_ids)
-		return per_cpu(x86_cpu_to_apicid, cpu);
+		return x86_cpu_to_apicid[cpu];
   	else
   		return BAD_APICID;
   }
@@ -314,7 +314,7 @@ c(const st
   		if (cpumask_test_cpu(cpu, cpu_online_mask))
   			break;
   	}
-	return per_cpu(x86_cpu_to_apicid, cpu);
+	return x86_cpu_to_apicid[cpu];
   }

   static int physflat_probe(void)

Index: b/arch/x86/kernel/apic/ipi.c
===================================================================
--- a/arch/x86/kernel/apic/ipi.c	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/kernel/apic/ipi.c	2010-06-02 15:59:21.000000000 -0700
@@ -31,8 +31,8 @@ void default_send_IPI_mask_sequence_phys
   	 */
   	local_irq_save(flags);
   	for_each_cpu(query_cpu, mask) {
-		__default_send_IPI_dest_field(per_cpu(x86_cpu_to_apicid,
-				query_cpu), vector, APIC_DEST_PHYSICAL);
+		__default_send_IPI_dest_field(x86_cpu_to_apicid[query_cpu],
+				vector, APIC_DEST_PHYSICAL);
   	}
   	local_irq_restore(flags);
   }
@@ -50,8 +50,8 @@ void default_send_IPI_mask_allbutself_ph
   	for_each_cpu(query_cpu, mask) {
   		if (query_cpu == this_cpu)
   			continue;
-		__default_send_IPI_dest_field(per_cpu(x86_cpu_to_apicid,
-				 query_cpu), vector, APIC_DEST_PHYSICAL);
+		__default_send_IPI_dest_field(x86_cpu_to_apicid[query_cpu],
+				 vector, APIC_DEST_PHYSICAL);
   	}
   	local_irq_restore(flags);
   }
@@ -143,7 +143,7 @@ static int convert_apicid_to_cpu(int api
   	int i;

   	for_each_possible_cpu(i) {
-		if (per_cpu(x86_cpu_to_apicid, i) == apic_id)
+		if (x86_cpu_to_apicid[i] == apic_id)
   			return i;
   	}
   	return -1;
Index: b/arch/x86/kernel/apic/x2apic_phys.c
===================================================================
--- a/arch/x86/kernel/apic/x2apic_phys.c	2010-06-02 15:59:21.000000000 -0700
+++ b/arch/x86/kernel/apic/x2apic_phys.c	2010-06-02 15:59:21.000000000 -0700
@@ -103,7 +103,7 @@ static void x2apic_send_IPI_allbutself(i
   	for_each_cpu(query_cpu) {
   		if (apic_dest == APIC_DEST_ALLBUT&&   query_cpu == this_cpu)
   			continue;
-		__x2apic_send_IPI_dest(per_cpu(x86_cpu_to_apicid, query_cpu),
+		__x2apic_send_IPI_dest(x86_cpu_to_apicid[query_cpu],
   				       vector, APIC_DEST_PHYSICAL);
   	}
   	local_irq_restore(flags);
@@ -128,7 +128,7 @@ static unsigned int x2apic_cpu_mask_to_a
   	int cpu = cpumask_first(cpumask);

   	if ((unsigned)cpu<   nr_cpu_ids)
-		return per_cpu(x86_cpu_to_apicid, cpu);
+		return x86_cpu_to_apicid[cpu];
   	else
   		return BAD_APICID;
   }
@@ -149,7 +149,7 @@ x2apic_cpu_mask_to_apicid_and(const stru
   			break;
   	}

-	return per_cpu(x86_cpu_to_apicid, cpu);
+	return x86_cpu_to_apicid[cpu];
   }

   static void init_x2apic_ldr(void)
Index: b/arch/x86/kernel/apic/x2apic_uv_x.c
===================================================================
--- a/arch/x86/kernel/apic/x2apic_uv_x.c	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c	2010-06-02 15:59:21.000000000 -0700
@@ -135,7 +135,7 @@ static void uv_send_IPI_one(int cpu, int
   	unsigned long apicid;
   	int pnode;

-	apicid = per_cpu(x86_cpu_to_apicid, cpu);
+	apicid = x86_cpu_to_apicid[cpu];
   	pnode = uv_apicid_to_pnode(apicid);
   	uv_hub_send_ipi(pnode, apicid, vector);
   }
@@ -193,7 +193,7 @@ static unsigned int uv_cpu_mask_to_apici
   	int cpu = cpumask_first(cpumask);

   	if ((unsigned)cpu<   nr_cpu_ids)
-		return per_cpu(x86_cpu_to_apicid, cpu) | uv_apicid_hibits;
+		return x86_cpu_to_apicid[cpu] | uv_apicid_hibits;
   	else
   		return BAD_APICID;
   }
@@ -213,6 +213,6 @@ uv_cpu_mask_to_apicid_and(const struct c
   		if (cpumask_test_cpu(cpu, cpu_online_mask))
   			break;
   	}
-	return per_cpu(x86_cpu_to_apicid, cpu) | uv_apicid_hibits;
+	return return x86_cpu_to_apicid[cpu] | uv_apicid_hibits;
   }

@@ -608,7 +608,7 @@ void __init uv_system_init(void)
   	uv_rtc_init();

   	for_each_present_cpu(cpu) {
-		int apicid = per_cpu(x86_cpu_to_apicid, cpu);
+		int apicid = x86_cpu_to_apicid[cpu];

   		nid = cpu_to_node(cpu);
   		/*

Index: b/arch/x86/kernel/setup_percpu.c
===================================================================
--- a/arch/x86/kernel/setup_percpu.c	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/kernel/setup_percpu.c	2010-06-02 15:59:21.000000000 -0700
@@ -225,8 +225,6 @@ void __init setup_per_cpu_areas(void)
   		 * gone.
   		 */
   #ifdef CONFIG_X86_LOCAL_APIC
-		per_cpu(x86_cpu_to_apicid, cpu) =
-			early_per_cpu_map(x86_cpu_to_apicid, cpu);
   		per_cpu(x86_bios_cpu_apicid, cpu) =
   			early_per_cpu_map(x86_bios_cpu_apicid, cpu);
   #endif
@@ -249,7 +247,6 @@ void __init setup_per_cpu_areas(void)

   	/* indicate the early static arrays will soon be gone */
   #ifdef CONFIG_X86_LOCAL_APIC
-	early_per_cpu_ptr(x86_cpu_to_apicid) = NULL;
   	early_per_cpu_ptr(x86_bios_cpu_apicid) = NULL;
   #endif
   #if defined(CONFIG_X86_64)&&   defined(CONFIG_NUMA)
Index: b/arch/x86/kernel/smpboot.c
===================================================================
--- a/arch/x86/kernel/smpboot.c	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/kernel/smpboot.c	2010-06-02 15:59:21.000000000 -0700
@@ -818,7 +818,7 @@ do_rest:
   		cpumask_clear_cpu(cpu, cpu_initialized_mask);

   		set_cpu_present(cpu, false);
-		per_cpu(x86_cpu_to_apicid, cpu) = BAD_APICID;
+		x86_cpu_to_apicid[cpu] = BAD_APICID;
   	}

   	/* mark "stuck" area as not stuck */
Index: b/arch/x86/platform/uv/tlb_uv.c
===================================================================
--- a/arch/x86/platform/uv/tlb_uv.c	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/platform/uv/tlb_uv.c	2010-06-02 15:59:21.000000000 -0700
@@ -55,7 +55,7 @@ static int __init blade_to_first_uvhub(

   	for_each_present_cpu(cpu)
   		if (uvhub == uv_cpu_to_blade_id(cpu))
-			return per_cpu(x86_cpu_to_apicid, cpu);
+			return x86_cpu_to_apicid[cpu];
   	return -1;
   }

Index: b/arch/x86/mm/numa.c
===================================================================
--- a/arch/x86/mm/numa.c	2010-06-01 09:56:03.000000000 -0700
+++ b/arch/x86/mm/numa.c	2010-06-02 16:19:04.000000000 -0700
@@ -62,7 +62,7 @@ s16 __apicid_to_node[MAX_LOCAL_APIC] __c

   int __cpuinit numa_cpu_node(int cpu)
   {
-	int apicid = early_per_cpu(x86_cpu_to_apicid, cpu);
+	int apicid = x86_cpu_to_apicid[cpu];

   	if (apicid != BAD_APICID)
   		return __apicid_to_node[apicid];
@@ -694,9 +694,6 @@ static __init int find_near_online_node(
   void __init init_cpu_to_node(void)
   {
   	int cpu;
-	u16 *cpu_to_apicid = early_per_cpu_ptr(x86_cpu_to_apicid);
-
-	BUG_ON(cpu_to_apicid == NULL);

   	for_each_possible_cpu(cpu) {
   		int node = numa_cpu_node(cpu);




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

* Re: [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid
  2011-10-25 11:49   ` [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid Eial Czerwacki
@ 2011-10-26  6:21     ` David Rientjes
  2011-10-26  6:41       ` Eial Czerwacki
  2011-10-26  8:20     ` Andi Kleen
  1 sibling, 1 reply; 6+ messages in thread
From: David Rientjes @ 2011-10-26  6:21 UTC (permalink / raw)
  To: Eial Czerwacki; +Cc: linux-kernel, Shai Fultheim (Shai@ScaleMP.com)

On Tue, 25 Oct 2011, Eial Czerwacki wrote:

> Avoid false sharing on the read mostly x86_cpu_to_apicid by moving it to
> __read_mostly section.

x86_cpu_to_apicid used to be in .init.data and now it's never freed after 
boot?

> The per-cpu area is write and read and this symbol shows up high on ipi
> intensive/x86_cpu_to_apicid load.
> 
> Signed-off-by: Eial Czerwacki<eial@scalemp.com>
> Signed-off-by: Shai Fultheim<shai@scalemp.com>
> Author: Ravikiran Thirumalai<kiran@scalex86.org>

If the author isn't you, then the patch should start with a single line 
that says "From: name <email>" of the author followed by a blank line.  
It's also strange that the author doesn't have a sign-off line.

Your email client also has corrupted the inline patch, please see 
Documentation/email-clients.txt.

And, finally, please send this to the x86 maintainers once fixed.  See 
./scripts/get_maintainers.pl <your patch>.

> Index: b/arch/x86/include/asm/smp.h
> ===================================================================
> --- a/arch/x86/include/asm/smp.h	2010-06-01 09:56:03.000000000 -0700
> +++ b/arch/x86/include/asm/smp.h	2010-06-02 15:59:21.000000000 -0700
> @@ -36,7 +36,8 @@ static inline struct cpumask *cpu_core_m
>   	return per_cpu(cpu_core_map, cpu);
>   }
> 
> -DECLARE_EARLY_PER_CPU(u16, x86_cpu_to_apicid);
> +extern u16 x86_cpu_to_apicid[NR_CPUS];
> +
>   DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid);
> 
>   /* Static state in head.S used to set up a CPU */
> @@ -142,7 +143,7 @@ void native_send_call_func_ipi(const str
>   void native_send_call_func_single_ipi(int cpu);
> 
>   void smp_store_cpu_info(int id);
> -#define cpu_physical_id(cpu)	per_cpu(x86_cpu_to_apicid, cpu)
> +#define cpu_physical_id(cpu)	x86_cpu_to_apicid[cpu]
> 
>   /* We don't mark CPUs online until __cpu_up(), so we need another measure */
>   static inline int num_booting_cpus(void)
> Index: b/arch/x86/kernel/acpi/boot.c
> ===================================================================
> --- a/arch/x86/kernel/acpi/boot.c	2010-06-01 09:56:03.000000000 -0700
> +++ b/arch/x86/kernel/acpi/boot.c	2010-06-02 15:59:21.000000000 -0700
> @@ -568,7 +568,7 @@ EXPORT_SYMBOL(acpi_map_lsapic);
> 
>   int acpi_unmap_lsapic(int cpu)
>   {
> -	per_cpu(x86_cpu_to_apicid, cpu) = -1;
> +	x86_cpu_to_apicid[cpu] = -1;
>   	set_cpu_present(cpu, false);
>   	num_processors--;
> 

Shouldn't this be BAD_APICID?  Not sure where we check for -1.

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

* Re: [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid
  2011-10-26  6:21     ` David Rientjes
@ 2011-10-26  6:41       ` Eial Czerwacki
  2011-10-26  6:47         ` David Rientjes
  0 siblings, 1 reply; 6+ messages in thread
From: Eial Czerwacki @ 2011-10-26  6:41 UTC (permalink / raw)
  To: David Rientjes; +Cc: linux-kernel, Shai Fultheim (Shai@ScaleMP.com)

On 10/26/2011 08:21 AM, David Rientjes wrote:

> On Tue, 25 Oct 2011, Eial Czerwacki wrote:
> 
>> Avoid false sharing on the read mostly x86_cpu_to_apicid by moving it to
>> __read_mostly section.
> 
> x86_cpu_to_apicid used to be in .init.data and now it's never freed after 
> boot?
> 
>> The per-cpu area is write and read and this symbol shows up high on ipi
>> intensive/x86_cpu_to_apicid load.
>>
>> Signed-off-by: Eial Czerwacki<eial@scalemp.com>
>> Signed-off-by: Shai Fultheim<shai@scalemp.com>
>> Author: Ravikiran Thirumalai<kiran@scalex86.org>
> 
> If the author isn't you, then the patch should start with a single line 
> that says "From: name <email>" of the author followed by a blank line.  
> It's also strange that the author doesn't have a sign-off line.
> 


the author is mentioned after the last sign-off.

> Your email client also has corrupted the inline patch, please see 
> Documentation/email-clients.txt.
> 


thanks for the tips, I hope it is ok now.

> And, finally, please send this to the x86 maintainers once fixed.  See 
> ./scripts/get_maintainers.pl <your patch>.
> 


sure.

>> Index: b/arch/x86/include/asm/smp.h
>> ===================================================================
>> --- a/arch/x86/include/asm/smp.h	2010-06-01 09:56:03.000000000 -0700
>> +++ b/arch/x86/include/asm/smp.h	2010-06-02 15:59:21.000000000 -0700
>> @@ -36,7 +36,8 @@ static inline struct cpumask *cpu_core_m
>>   	return per_cpu(cpu_core_map, cpu);
>>   }
>>
>> -DECLARE_EARLY_PER_CPU(u16, x86_cpu_to_apicid);
>> +extern u16 x86_cpu_to_apicid[NR_CPUS];
>> +
>>   DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid);
>>
>>   /* Static state in head.S used to set up a CPU */
>> @@ -142,7 +143,7 @@ void native_send_call_func_ipi(const str
>>   void native_send_call_func_single_ipi(int cpu);
>>
>>   void smp_store_cpu_info(int id);
>> -#define cpu_physical_id(cpu)	per_cpu(x86_cpu_to_apicid, cpu)
>> +#define cpu_physical_id(cpu)	x86_cpu_to_apicid[cpu]
>>
>>   /* We don't mark CPUs online until __cpu_up(), so we need another measure */
>>   static inline int num_booting_cpus(void)
>> Index: b/arch/x86/kernel/acpi/boot.c
>> ===================================================================
>> --- a/arch/x86/kernel/acpi/boot.c	2010-06-01 09:56:03.000000000 -0700
>> +++ b/arch/x86/kernel/acpi/boot.c	2010-06-02 15:59:21.000000000 -0700
>> @@ -568,7 +568,7 @@ EXPORT_SYMBOL(acpi_map_lsapic);
>>
>>   int acpi_unmap_lsapic(int cpu)
>>   {
>> -	per_cpu(x86_cpu_to_apicid, cpu) = -1;
>> +	x86_cpu_to_apicid[cpu] = -1;
>>   	set_cpu_present(cpu, false);
>>   	num_processors--;
>>
> 
> Shouldn't this be BAD_APICID?  Not sure where we check for -1.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 


I'll check the rest of your comments.

Thanks,

Eial.

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

* Re: [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid
  2011-10-26  6:41       ` Eial Czerwacki
@ 2011-10-26  6:47         ` David Rientjes
  2011-10-26  7:01           ` Eial Czerwacki
  0 siblings, 1 reply; 6+ messages in thread
From: David Rientjes @ 2011-10-26  6:47 UTC (permalink / raw)
  To: Eial Czerwacki; +Cc: linux-kernel, Shai Fultheim (Shai@ScaleMP.com)

On Wed, 26 Oct 2011, Eial Czerwacki wrote:

> >> Signed-off-by: Eial Czerwacki<eial@scalemp.com>
> >> Signed-off-by: Shai Fultheim<shai@scalemp.com>
> >> Author: Ravikiran Thirumalai<kiran@scalex86.org>
> > 
> > If the author isn't you, then the patch should start with a single line 
> > that says "From: name <email>" of the author followed by a blank line.  
> > It's also strange that the author doesn't have a sign-off line.
> > 
> 
> 
> the author is mentioned after the last sign-off.
> 

That's not the way it's done, as I said, the patch needs to start with a 
single line like this:

From: Ravikiran Thirumalai <kiran@scalex86.org>

...

and if that person signed it off, then it needs to appear as

Signed-off-by: ...

as the first one in the chain.  Please see part 15 of section 1 of 
Documentation/SubmittingPatches.

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

* Re: [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid
  2011-10-26  6:47         ` David Rientjes
@ 2011-10-26  7:01           ` Eial Czerwacki
  0 siblings, 0 replies; 6+ messages in thread
From: Eial Czerwacki @ 2011-10-26  7:01 UTC (permalink / raw)
  To: David Rientjes; +Cc: linux-kernel, Shai Fultheim (Shai@ScaleMP.com)

On 10/26/2011 08:47 AM, David Rientjes wrote:

> On Wed, 26 Oct 2011, Eial Czerwacki wrote:
> 
>>>> Signed-off-by: Eial Czerwacki<eial@scalemp.com>
>>>> Signed-off-by: Shai Fultheim<shai@scalemp.com>
>>>> Author: Ravikiran Thirumalai<kiran@scalex86.org>
>>>
>>> If the author isn't you, then the patch should start with a single line 
>>> that says "From: name <email>" of the author followed by a blank line.  
>>> It's also strange that the author doesn't have a sign-off line.
>>>
>>
>>
>> the author is mentioned after the last sign-off.
>>
> 
> That's not the way it's done, as I said, the patch needs to start with a 
> single line like this:
> 
> From: Ravikiran Thirumalai <kiran@scalex86.org>
> 
> ...
> 
> and if that person signed it off, then it needs to appear as
> 
> Signed-off-by: ...
> 
> as the first one in the chain.  Please see part 15 of section 1 of 
> Documentation/SubmittingPatches.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 


sure, thanks got the info


Eial.

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

* Re: [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid
  2011-10-25 11:49   ` [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid Eial Czerwacki
  2011-10-26  6:21     ` David Rientjes
@ 2011-10-26  8:20     ` Andi Kleen
  1 sibling, 0 replies; 6+ messages in thread
From: Andi Kleen @ 2011-10-26  8:20 UTC (permalink / raw)
  To: Eial Czerwacki; +Cc: linux-kernel, Shai Fultheim (Shai@ScaleMP.com)

Eial Czerwacki <eial@scalemp.com> writes:

> ===================================================================
> --- a/arch/x86/include/asm/smp.h	2010-06-01 09:56:03.000000000 -0700
> +++ b/arch/x86/include/asm/smp.h	2010-06-02 15:59:21.000000000 -0700
> @@ -36,7 +36,8 @@ static inline struct cpumask *cpu_core_m
>   	return per_cpu(cpu_core_map, cpu);
>   }
>
> -DECLARE_EARLY_PER_CPU(u16, x86_cpu_to_apicid);
> +extern u16 x86_cpu_to_apicid[NR_CPUS];

That's a big waste of memory. On a CONFIG_MAX_SMP kernel compiled for
4096 CPUs you're wasting 8k now on smaller systems. The per cpu
data only allocates what is needed.

NR_CPUS is usually a bad idea and it 

Perhaps need a __read_mostly cache line padded per CPU section instead
for cases like this.

-Andi

-- 
ak@linux.intel.com -- Speaking for myself only

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

end of thread, other threads:[~2011-10-26  8:20 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <4EA66960.7050907@scalemp.com>
     [not found] ` <9B14D1490DDECA4E974F6B9FC9EBAB3140CD274367@VMBX108.ihostexchange.net>
2011-10-25 11:49   ` [PATCH] APICID: Avoid false sharing on the read mostly x86_cpu_to_apicid Eial Czerwacki
2011-10-26  6:21     ` David Rientjes
2011-10-26  6:41       ` Eial Czerwacki
2011-10-26  6:47         ` David Rientjes
2011-10-26  7:01           ` Eial Czerwacki
2011-10-26  8:20     ` Andi Kleen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.