linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] x86_32: summit_32, use BAD_APICID
@ 2009-02-24 17:38 jirislaby
  2009-02-24 17:38 ` [PATCH 2/2] x86_32: summit_32, de-inline functions jirislaby
  2009-02-24 17:55 ` [PATCH 1/2] x86_32: summit_32, use BAD_APICID Ingo Molnar
  0 siblings, 2 replies; 20+ messages in thread
From: jirislaby @ 2009-02-24 17:38 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

From: Jiri Slaby <jirislaby@gmail.com>

Use BAD_APICID instead of 0xFF constants in summit_cpu_mask_to_apicid.

Also remove bogus comments about what we actually return.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/summit_32.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kernel/summit_32.c b/arch/x86/kernel/summit_32.c
index 1e733ef..b10133a 100644
--- a/arch/x86/kernel/summit_32.c
+++ b/arch/x86/kernel/summit_32.c
@@ -309,12 +309,10 @@ static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 	int cpu;
 
 	num_bits_set = cpus_weight(*cpumask);
-	/* Return id to all */
 	if (num_bits_set >= nr_cpu_ids)
-		return 0xFF;
+		return BAD_APICID;
 	/*
-	 * The cpus in the mask must all be on the apic cluster.  If are not
-	 * on the same apicid cluster return default value of target_cpus():
+	 * The cpus in the mask must all be on the apic cluster.
 	 */
 	cpu = first_cpu(*cpumask);
 	apicid = summit_cpu_to_logical_apicid(cpu);
@@ -325,9 +323,9 @@ static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 
 			if (apicid_cluster(apicid) !=
 					apicid_cluster(new_apicid)) {
-				printk ("%s: Not a valid mask!\n", __func__);
+				printk("%s: Not a valid mask!\n", __func__);
 
-				return 0xFF;
+				return BAD_APICID;
 			}
 			apicid = apicid | new_apicid;
 			cpus_found++;
-- 
1.6.1.3


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

* [PATCH 2/2] x86_32: summit_32, de-inline functions
  2009-02-24 17:38 [PATCH 1/2] x86_32: summit_32, use BAD_APICID jirislaby
@ 2009-02-24 17:38 ` jirislaby
  2009-02-24 17:55 ` [PATCH 1/2] x86_32: summit_32, use BAD_APICID Ingo Molnar
  1 sibling, 0 replies; 20+ messages in thread
From: jirislaby @ 2009-02-24 17:38 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

From: Jiri Slaby <jirislaby@gmail.com>

The ones which go only into struct genapic are de-inlined
by compiler anyway, so remove the inline specifier from them.

Afterwards, remove summit_setup_portio_remap completely as it
is unused.

Remove inline also from summit_cpu_mask_to_apicid, since it's
not worth it (it is used in struct genapic too).

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/summit_32.c |   47 ++++++++++++++++++------------------------
 1 files changed, 20 insertions(+), 27 deletions(-)

diff --git a/arch/x86/kernel/summit_32.c b/arch/x86/kernel/summit_32.c
index b10133a..1d3fe85 100644
--- a/arch/x86/kernel/summit_32.c
+++ b/arch/x86/kernel/summit_32.c
@@ -50,7 +50,7 @@
 #include <linux/gfp.h>
 #include <linux/smp.h>
 
-static inline unsigned summit_get_apic_id(unsigned long x)
+static unsigned summit_get_apic_id(unsigned long x)
 {
 	return (x >> 24) & 0xFF;
 }
@@ -60,7 +60,7 @@ static inline void summit_send_IPI_mask(const cpumask_t *mask, int vector)
 	default_send_IPI_mask_sequence_logical(mask, vector);
 }
 
-static inline void summit_send_IPI_allbutself(int vector)
+static void summit_send_IPI_allbutself(int vector)
 {
 	cpumask_t mask = cpu_online_map;
 	cpu_clear(smp_processor_id(), mask);
@@ -69,7 +69,7 @@ static inline void summit_send_IPI_allbutself(int vector)
 		summit_send_IPI_mask(&mask, vector);
 }
 
-static inline void summit_send_IPI_all(int vector)
+static void summit_send_IPI_all(int vector)
 {
 	summit_send_IPI_mask(&cpu_online_map, vector);
 }
@@ -84,8 +84,8 @@ extern void setup_summit(void);
 #define setup_summit()	{}
 #endif
 
-static inline int
-summit_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid)
+static int summit_mps_oem_check(struct mpc_table *mpc, char *oem,
+		char *productid)
 {
 	if (!strncmp(oem, "IBM ENSW", 8) &&
 			(!strncmp(productid, "VIGIL SMP", 9)
@@ -100,7 +100,7 @@ summit_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid)
 }
 
 /* Hook from generic ACPI tables.c */
-static inline int summit_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+static int summit_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
 {
 	if (!strncmp(oem_id, "IBM", 3) &&
 	    (!strncmp(oem_table_id, "SERVIGIL", 8)
@@ -188,7 +188,7 @@ static inline int is_WPEG(struct rio_detail *rio){
 
 #define SUMMIT_APIC_DFR_VALUE	(APIC_DFR_CLUSTER)
 
-static inline const cpumask_t *summit_target_cpus(void)
+static const cpumask_t *summit_target_cpus(void)
 {
 	/* CPU_MASK_ALL (0xff) has undefined behaviour with
 	 * dest_LowestPrio mode logical clustered apic interrupt routing
@@ -197,14 +197,13 @@ static inline const cpumask_t *summit_target_cpus(void)
 	return &cpumask_of_cpu(0);
 }
 
-static inline unsigned long
-summit_check_apicid_used(physid_mask_t bitmap, int apicid)
+static unsigned long summit_check_apicid_used(physid_mask_t bitmap, int apicid)
 {
 	return 0;
 }
 
 /* we don't use the phys_cpu_present_map to indicate apicid presence */
-static inline unsigned long summit_check_apicid_present(int bit)
+static unsigned long summit_check_apicid_present(int bit)
 {
 	return 1;
 }
@@ -213,7 +212,7 @@ static inline unsigned long summit_check_apicid_present(int bit)
 
 extern u8 cpu_2_logical_apicid[];
 
-static inline void summit_init_apic_ldr(void)
+static void summit_init_apic_ldr(void)
 {
 	unsigned long val, id;
 	int count = 0;
@@ -240,18 +239,18 @@ static inline void summit_init_apic_ldr(void)
 	apic_write(APIC_LDR, val);
 }
 
-static inline int summit_apic_id_registered(void)
+static int summit_apic_id_registered(void)
 {
 	return 1;
 }
 
-static inline void summit_setup_apic_routing(void)
+static void summit_setup_apic_routing(void)
 {
 	printk("Enabling APIC mode:  Summit.  Using %d I/O APICs\n",
 						nr_ioapics);
 }
 
-static inline int summit_apicid_to_node(int logical_apicid)
+static int summit_apicid_to_node(int logical_apicid)
 {
 #ifdef CONFIG_SMP
 	return apicid_2_node[hard_smp_processor_id()];
@@ -272,7 +271,7 @@ static inline int summit_cpu_to_logical_apicid(int cpu)
 #endif
 }
 
-static inline int summit_cpu_present_to_apicid(int mps_cpu)
+static int summit_cpu_present_to_apicid(int mps_cpu)
 {
 	if (mps_cpu < nr_cpu_ids)
 		return (int)per_cpu(x86_bios_cpu_apicid, mps_cpu);
@@ -280,28 +279,23 @@ static inline int summit_cpu_present_to_apicid(int mps_cpu)
 		return BAD_APICID;
 }
 
-static inline physid_mask_t
-summit_ioapic_phys_id_map(physid_mask_t phys_id_map)
+static physid_mask_t summit_ioapic_phys_id_map(physid_mask_t phys_id_map)
 {
 	/* For clustered we don't have a good way to do this yet - hack */
 	return physids_promote(0x0F);
 }
 
-static inline physid_mask_t summit_apicid_to_cpu_present(int apicid)
+static physid_mask_t summit_apicid_to_cpu_present(int apicid)
 {
 	return physid_mask_of_physid(0);
 }
 
-static inline void summit_setup_portio_remap(void)
-{
-}
-
-static inline int summit_check_phys_apicid_present(int boot_cpu_physical_apicid)
+static int summit_check_phys_apicid_present(int boot_cpu_physical_apicid)
 {
 	return 1;
 }
 
-static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
+static unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
 	int cpus_found = 0;
 	int num_bits_set;
@@ -335,8 +329,7 @@ static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 	return apicid;
 }
 
-static inline unsigned int
-summit_cpu_mask_to_apicid_and(const struct cpumask *inmask,
+static unsigned int summit_cpu_mask_to_apicid_and(const struct cpumask *inmask,
 			      const struct cpumask *andmask)
 {
 	int apicid = summit_cpu_to_logical_apicid(0);
@@ -361,7 +354,7 @@ summit_cpu_mask_to_apicid_and(const struct cpumask *inmask,
  *
  * See Intel's IA-32 SW Dev's Manual Vol2 under CPUID.
  */
-static inline int summit_phys_pkg_id(int cpuid_apic, int index_msb)
+static int summit_phys_pkg_id(int cpuid_apic, int index_msb)
 {
 	return hard_smp_processor_id() >> index_msb;
 }
-- 
1.6.1.3


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

* Re: [PATCH 1/2] x86_32: summit_32, use BAD_APICID
  2009-02-24 17:38 [PATCH 1/2] x86_32: summit_32, use BAD_APICID jirislaby
  2009-02-24 17:38 ` [PATCH 2/2] x86_32: summit_32, de-inline functions jirislaby
@ 2009-02-24 17:55 ` Ingo Molnar
  2009-02-24 20:41   ` [PATCH v2 " Jiri Slaby
  1 sibling, 1 reply; 20+ messages in thread
From: Ingo Molnar @ 2009-02-24 17:55 UTC (permalink / raw)
  To: jirislaby; +Cc: mingo, x86, linux-kernel, Thomas Gleixner, H. Peter Anvin


* jirislaby@gmail.com <jirislaby@gmail.com> wrote:

> From: Jiri Slaby <jirislaby@gmail.com>
> 
> Use BAD_APICID instead of 0xFF constants in summit_cpu_mask_to_apicid.
> 
> Also remove bogus comments about what we actually return.

Hm, please send x86 patches against the latest x86 tree:

  http://people.redhat.com/mingo/tip.git/README

the Summit code moved to another position in the tree so your 
patches dont apply anymore.

	Ingo

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

* [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID
  2009-02-24 17:55 ` [PATCH 1/2] x86_32: summit_32, use BAD_APICID Ingo Molnar
@ 2009-02-24 20:41   ` Jiri Slaby
  2009-02-24 20:41     ` [PATCH v2 2/2] x86_32: summit_32, de-inline functions Jiri Slaby
  2009-02-25 11:00     ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
  0 siblings, 2 replies; 20+ messages in thread
From: Jiri Slaby @ 2009-02-24 20:41 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

Use BAD_APICID instead of 0xFF constants in summit_cpu_mask_to_apicid.

Also remove bogus comments about what we actually return.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/summit_32.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kernel/apic/summit_32.c b/arch/x86/kernel/apic/summit_32.c
index cfe7b09..d02f438 100644
--- a/arch/x86/kernel/apic/summit_32.c
+++ b/arch/x86/kernel/apic/summit_32.c
@@ -303,12 +303,10 @@ static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 	int cpu;
 
 	num_bits_set = cpus_weight(*cpumask);
-	/* Return id to all */
 	if (num_bits_set >= nr_cpu_ids)
-		return 0xFF;
+		return BAD_APICID;
 	/*
-	 * The cpus in the mask must all be on the apic cluster.  If are not
-	 * on the same apicid cluster return default value of target_cpus():
+	 * The cpus in the mask must all be on the apic cluster.
 	 */
 	cpu = first_cpu(*cpumask);
 	apicid = summit_cpu_to_logical_apicid(cpu);
@@ -318,9 +316,9 @@ static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 			int new_apicid = summit_cpu_to_logical_apicid(cpu);
 
 			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				printk ("%s: Not a valid mask!\n", __func__);
+				printk("%s: Not a valid mask!\n", __func__);
 
-				return 0xFF;
+				return BAD_APICID;
 			}
 			apicid = apicid | new_apicid;
 			cpus_found++;
-- 
1.6.1.3


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

* [PATCH v2 2/2] x86_32: summit_32, de-inline functions
  2009-02-24 20:41   ` [PATCH v2 " Jiri Slaby
@ 2009-02-24 20:41     ` Jiri Slaby
  2009-02-25 11:00     ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
  1 sibling, 0 replies; 20+ messages in thread
From: Jiri Slaby @ 2009-02-24 20:41 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

The ones which go only into struct genapic are de-inlined
by compiler anyway, so remove the inline specifier from them.

Afterwards, remove summit_setup_portio_remap completely as it
is unused.

Remove inline also from summit_cpu_mask_to_apicid, since it's
not worth it (it is used in struct genapic too).

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/summit_32.c |   47 ++++++++++++++++---------------------
 1 files changed, 20 insertions(+), 27 deletions(-)

diff --git a/arch/x86/kernel/apic/summit_32.c b/arch/x86/kernel/apic/summit_32.c
index d02f438..32838b5 100644
--- a/arch/x86/kernel/apic/summit_32.c
+++ b/arch/x86/kernel/apic/summit_32.c
@@ -48,7 +48,7 @@
 #include <linux/gfp.h>
 #include <linux/smp.h>
 
-static inline unsigned summit_get_apic_id(unsigned long x)
+static unsigned summit_get_apic_id(unsigned long x)
 {
 	return (x >> 24) & 0xFF;
 }
@@ -58,7 +58,7 @@ static inline void summit_send_IPI_mask(const cpumask_t *mask, int vector)
 	default_send_IPI_mask_sequence_logical(mask, vector);
 }
 
-static inline void summit_send_IPI_allbutself(int vector)
+static void summit_send_IPI_allbutself(int vector)
 {
 	cpumask_t mask = cpu_online_map;
 	cpu_clear(smp_processor_id(), mask);
@@ -67,7 +67,7 @@ static inline void summit_send_IPI_allbutself(int vector)
 		summit_send_IPI_mask(&mask, vector);
 }
 
-static inline void summit_send_IPI_all(int vector)
+static void summit_send_IPI_all(int vector)
 {
 	summit_send_IPI_mask(&cpu_online_map, vector);
 }
@@ -82,8 +82,8 @@ extern void setup_summit(void);
 #define setup_summit()	{}
 #endif
 
-static inline int
-summit_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid)
+static int summit_mps_oem_check(struct mpc_table *mpc, char *oem,
+		char *productid)
 {
 	if (!strncmp(oem, "IBM ENSW", 8) &&
 			(!strncmp(productid, "VIGIL SMP", 9)
@@ -98,7 +98,7 @@ summit_mps_oem_check(struct mpc_table *mpc, char *oem, char *productid)
 }
 
 /* Hook from generic ACPI tables.c */
-static inline int summit_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+static int summit_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
 {
 	if (!strncmp(oem_id, "IBM", 3) &&
 	    (!strncmp(oem_table_id, "SERVIGIL", 8)
@@ -186,7 +186,7 @@ static inline int is_WPEG(struct rio_detail *rio){
 
 #define SUMMIT_APIC_DFR_VALUE	(APIC_DFR_CLUSTER)
 
-static inline const cpumask_t *summit_target_cpus(void)
+static const cpumask_t *summit_target_cpus(void)
 {
 	/* CPU_MASK_ALL (0xff) has undefined behaviour with
 	 * dest_LowestPrio mode logical clustered apic interrupt routing
@@ -195,19 +195,18 @@ static inline const cpumask_t *summit_target_cpus(void)
 	return &cpumask_of_cpu(0);
 }
 
-static inline unsigned long
-summit_check_apicid_used(physid_mask_t bitmap, int apicid)
+static unsigned long summit_check_apicid_used(physid_mask_t bitmap, int apicid)
 {
 	return 0;
 }
 
 /* we don't use the phys_cpu_present_map to indicate apicid presence */
-static inline unsigned long summit_check_apicid_present(int bit)
+static unsigned long summit_check_apicid_present(int bit)
 {
 	return 1;
 }
 
-static inline void summit_init_apic_ldr(void)
+static void summit_init_apic_ldr(void)
 {
 	unsigned long val, id;
 	int count = 0;
@@ -234,18 +233,18 @@ static inline void summit_init_apic_ldr(void)
 	apic_write(APIC_LDR, val);
 }
 
-static inline int summit_apic_id_registered(void)
+static int summit_apic_id_registered(void)
 {
 	return 1;
 }
 
-static inline void summit_setup_apic_routing(void)
+static void summit_setup_apic_routing(void)
 {
 	printk("Enabling APIC mode:  Summit.  Using %d I/O APICs\n",
 						nr_ioapics);
 }
 
-static inline int summit_apicid_to_node(int logical_apicid)
+static int summit_apicid_to_node(int logical_apicid)
 {
 #ifdef CONFIG_SMP
 	return apicid_2_node[hard_smp_processor_id()];
@@ -266,7 +265,7 @@ static inline int summit_cpu_to_logical_apicid(int cpu)
 #endif
 }
 
-static inline int summit_cpu_present_to_apicid(int mps_cpu)
+static int summit_cpu_present_to_apicid(int mps_cpu)
 {
 	if (mps_cpu < nr_cpu_ids)
 		return (int)per_cpu(x86_bios_cpu_apicid, mps_cpu);
@@ -274,28 +273,23 @@ static inline int summit_cpu_present_to_apicid(int mps_cpu)
 		return BAD_APICID;
 }
 
-static inline physid_mask_t
-summit_ioapic_phys_id_map(physid_mask_t phys_id_map)
+static physid_mask_t summit_ioapic_phys_id_map(physid_mask_t phys_id_map)
 {
 	/* For clustered we don't have a good way to do this yet - hack */
 	return physids_promote(0x0F);
 }
 
-static inline physid_mask_t summit_apicid_to_cpu_present(int apicid)
+static physid_mask_t summit_apicid_to_cpu_present(int apicid)
 {
 	return physid_mask_of_physid(0);
 }
 
-static inline void summit_setup_portio_remap(void)
-{
-}
-
-static inline int summit_check_phys_apicid_present(int boot_cpu_physical_apicid)
+static int summit_check_phys_apicid_present(int boot_cpu_physical_apicid)
 {
 	return 1;
 }
 
-static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
+static unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
 	int cpus_found = 0;
 	int num_bits_set;
@@ -328,8 +322,7 @@ static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 	return apicid;
 }
 
-static inline unsigned int
-summit_cpu_mask_to_apicid_and(const struct cpumask *inmask,
+static unsigned int summit_cpu_mask_to_apicid_and(const struct cpumask *inmask,
 			      const struct cpumask *andmask)
 {
 	int apicid = summit_cpu_to_logical_apicid(0);
@@ -354,7 +347,7 @@ summit_cpu_mask_to_apicid_and(const struct cpumask *inmask,
  *
  * See Intel's IA-32 SW Dev's Manual Vol2 under CPUID.
  */
-static inline int summit_phys_pkg_id(int cpuid_apic, int index_msb)
+static int summit_phys_pkg_id(int cpuid_apic, int index_msb)
 {
 	return hard_smp_processor_id() >> index_msb;
 }
-- 
1.6.1.3


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

* Re: [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID
  2009-02-24 20:41   ` [PATCH v2 " Jiri Slaby
  2009-02-24 20:41     ` [PATCH v2 2/2] x86_32: summit_32, de-inline functions Jiri Slaby
@ 2009-02-25 11:00     ` Jiri Slaby
  2009-02-25 11:10       ` Ingo Molnar
  1 sibling, 1 reply; 20+ messages in thread
From: Jiri Slaby @ 2009-02-25 11:00 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Thomas Gleixner, H. Peter Anvin

On 24.2.2009 21:41, Jiri Slaby wrote:
> --- a/arch/x86/kernel/apic/summit_32.c
> +++ b/arch/x86/kernel/apic/summit_32.c
> @@ -303,12 +303,10 @@ static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
>   	int cpu;
>
>   	num_bits_set = cpus_weight(*cpumask);
> -	/* Return id to all */
>   	if (num_bits_set>= nr_cpu_ids)
> -		return 0xFF;
> +		return BAD_APICID;

Actually, wasn't this intended to return all available rather than BAD 
(to which would correspond the comment), but performed in a wrong 
manner? This is old code, any ideas who would know this?

In my opinion the check should be removed completely to allow the code 
go through same-cluster check.

In that case, the callers code is buggy, since it passes online_cpu 
masks even on machines, where apics are not on the same clusters.

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

* Re: [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID
  2009-02-25 11:00     ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
@ 2009-02-25 11:10       ` Ingo Molnar
  2009-02-26 21:45         ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
  2009-02-26 22:00         ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
  0 siblings, 2 replies; 20+ messages in thread
From: Ingo Molnar @ 2009-02-25 11:10 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: mingo, x86, linux-kernel, Thomas Gleixner, H. Peter Anvin


* Jiri Slaby <jirislaby@gmail.com> wrote:

> On 24.2.2009 21:41, Jiri Slaby wrote:
>> --- a/arch/x86/kernel/apic/summit_32.c
>> +++ b/arch/x86/kernel/apic/summit_32.c
>> @@ -303,12 +303,10 @@ static inline unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
>>   	int cpu;
>>
>>   	num_bits_set = cpus_weight(*cpumask);
>> -	/* Return id to all */
>>   	if (num_bits_set>= nr_cpu_ids)
>> -		return 0xFF;
>> +		return BAD_APICID;
>
> Actually, wasn't this intended to return all available rather 
> than BAD (to which would correspond the comment), but 
> performed in a wrong manner? This is old code, any ideas who 
> would know this?
>
> In my opinion the check should be removed completely to allow 
> the code go through same-cluster check.
>
> In that case, the callers code is buggy, since it passes 
> online_cpu masks even on machines, where apics are not on the 
> same clusters.

It's most likely confusion in the old code. This used to be 
copy&paste-ed versions of different snapshots of the 
mach-default-code, hacked to make work on weird platforms. 
Mainline fixes/updates werent merged in consistently.

So could you please send a patch that fixes this?

	Ingo

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

* [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions
  2009-02-25 11:10       ` Ingo Molnar
@ 2009-02-26 21:45         ` Jiri Slaby
  2009-02-26 21:45           ` [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup Jiri Slaby
  2009-02-26 22:00         ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
  1 sibling, 1 reply; 20+ messages in thread
From: Jiri Slaby @ 2009-02-26 21:45 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

The ones which go only into struct apic are de-inlined
by compiler anyway, so remove the inline specifier from them.

Afterwards, remove bigsmp_setup_portio_remap completely as it
is unused.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/bigsmp_32.c |   40 ++++++++++++++++---------------------
 1 files changed, 17 insertions(+), 23 deletions(-)

diff --git a/arch/x86/kernel/apic/bigsmp_32.c b/arch/x86/kernel/apic/bigsmp_32.c
index 0b10933..d14e635 100644
--- a/arch/x86/kernel/apic/bigsmp_32.c
+++ b/arch/x86/kernel/apic/bigsmp_32.c
@@ -16,17 +16,17 @@
 #include <asm/apic.h>
 #include <asm/ipi.h>
 
-static inline unsigned bigsmp_get_apic_id(unsigned long x)
+static unsigned bigsmp_get_apic_id(unsigned long x)
 {
 	return (x >> 24) & 0xFF;
 }
 
-static inline int bigsmp_apic_id_registered(void)
+static int bigsmp_apic_id_registered(void)
 {
 	return 1;
 }
 
-static inline const cpumask_t *bigsmp_target_cpus(void)
+static const cpumask_t *bigsmp_target_cpus(void)
 {
 #ifdef CONFIG_SMP
 	return &cpu_online_map;
@@ -35,13 +35,12 @@ static inline const cpumask_t *bigsmp_target_cpus(void)
 #endif
 }
 
-static inline unsigned long
-bigsmp_check_apicid_used(physid_mask_t bitmap, int apicid)
+static unsigned long bigsmp_check_apicid_used(physid_mask_t bitmap, int apicid)
 {
 	return 0;
 }
 
-static inline unsigned long bigsmp_check_apicid_present(int bit)
+static unsigned long bigsmp_check_apicid_present(int bit)
 {
 	return 1;
 }
@@ -64,7 +63,7 @@ static inline unsigned long calculate_ldr(int cpu)
  * an APIC.  See e.g. "AP-388 82489DX User's Manual" (Intel
  * document number 292116).  So here it goes...
  */
-static inline void bigsmp_init_apic_ldr(void)
+static void bigsmp_init_apic_ldr(void)
 {
 	unsigned long val;
 	int cpu = smp_processor_id();
@@ -74,19 +73,19 @@ static inline void bigsmp_init_apic_ldr(void)
 	apic_write(APIC_LDR, val);
 }
 
-static inline void bigsmp_setup_apic_routing(void)
+static void bigsmp_setup_apic_routing(void)
 {
 	printk(KERN_INFO
 		"Enabling APIC mode:  Physflat.  Using %d I/O APICs\n",
 		nr_ioapics);
 }
 
-static inline int bigsmp_apicid_to_node(int logical_apicid)
+static int bigsmp_apicid_to_node(int logical_apicid)
 {
 	return apicid_2_node[hard_smp_processor_id()];
 }
 
-static inline int bigsmp_cpu_present_to_apicid(int mps_cpu)
+static int bigsmp_cpu_present_to_apicid(int mps_cpu)
 {
 	if (mps_cpu < nr_cpu_ids)
 		return (int) per_cpu(x86_bios_cpu_apicid, mps_cpu);
@@ -94,7 +93,7 @@ static inline int bigsmp_cpu_present_to_apicid(int mps_cpu)
 	return BAD_APICID;
 }
 
-static inline physid_mask_t bigsmp_apicid_to_cpu_present(int phys_apicid)
+static physid_mask_t bigsmp_apicid_to_cpu_present(int phys_apicid)
 {
 	return physid_mask_of_physid(phys_apicid);
 }
@@ -107,29 +106,24 @@ static inline int bigsmp_cpu_to_logical_apicid(int cpu)
 	return cpu_physical_id(cpu);
 }
 
-static inline physid_mask_t bigsmp_ioapic_phys_id_map(physid_mask_t phys_map)
+static physid_mask_t bigsmp_ioapic_phys_id_map(physid_mask_t phys_map)
 {
 	/* For clustered we don't have a good way to do this yet - hack */
 	return physids_promote(0xFFL);
 }
 
-static inline void bigsmp_setup_portio_remap(void)
-{
-}
-
-static inline int bigsmp_check_phys_apicid_present(int boot_cpu_physical_apicid)
+static int bigsmp_check_phys_apicid_present(int boot_cpu_physical_apicid)
 {
 	return 1;
 }
 
 /* As we are using single CPU as destination, pick only one CPU here */
-static inline unsigned int bigsmp_cpu_mask_to_apicid(const cpumask_t *cpumask)
+static unsigned int bigsmp_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
 	return bigsmp_cpu_to_logical_apicid(first_cpu(*cpumask));
 }
 
-static inline unsigned int
-bigsmp_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
+static unsigned int bigsmp_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
 			      const struct cpumask *andmask)
 {
 	int cpu;
@@ -148,7 +142,7 @@ bigsmp_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
 	return BAD_APICID;
 }
 
-static inline int bigsmp_phys_pkg_id(int cpuid_apic, int index_msb)
+static int bigsmp_phys_pkg_id(int cpuid_apic, int index_msb)
 {
 	return cpuid_apic >> index_msb;
 }
@@ -158,12 +152,12 @@ static inline void bigsmp_send_IPI_mask(const struct cpumask *mask, int vector)
 	default_send_IPI_mask_sequence_phys(mask, vector);
 }
 
-static inline void bigsmp_send_IPI_allbutself(int vector)
+static void bigsmp_send_IPI_allbutself(int vector)
 {
 	default_send_IPI_mask_allbutself_phys(cpu_online_mask, vector);
 }
 
-static inline void bigsmp_send_IPI_all(int vector)
+static void bigsmp_send_IPI_all(int vector)
 {
 	bigsmp_send_IPI_mask(cpu_online_mask, vector);
 }
-- 
1.6.1.3


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

* [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup
  2009-02-26 21:45         ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
@ 2009-02-26 21:45           ` Jiri Slaby
  2009-02-26 21:45             ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
  0 siblings, 1 reply; 20+ messages in thread
From: Jiri Slaby @ 2009-02-26 21:45 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

Remove es7000_cpu_mask_to_apicid_cluster completely, because it's
almost the same as es7000_cpu_mask_to_apicid except 2 code paths.
One of them is about to be removed soon, the another should be
BAD_APICID (it's a fail path).

The _cluster one was not invoked on apic->cpu_mask_to_apicid_and
anyway, since there was no _cluster_and variant.

Also use newer cpumask functions.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/es7000_32.c |   46 ++-----------------------------------
 1 files changed, 3 insertions(+), 43 deletions(-)

diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c
index 320f2d2..6c15126 100644
--- a/arch/x86/kernel/apic/es7000_32.c
+++ b/arch/x86/kernel/apic/es7000_32.c
@@ -565,25 +565,21 @@ static int es7000_check_phys_apicid_present(int cpu_physical_apicid)
 	return 1;
 }
 
-static unsigned int
-es7000_cpu_mask_to_apicid_cluster(const struct cpumask *cpumask)
+static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
-	int cpus_found = 0;
-	int num_bits_set;
+	unsigned int cpu, num_bits_set, cpus_found = 0;
 	int apicid;
-	int cpu;
 
 	num_bits_set = cpumask_weight(cpumask);
 	/* Return id to all */
 	if (num_bits_set == nr_cpu_ids)
-		return 0xFF;
+		return es7000_cpu_to_logical_apicid(0);
 	/*
 	 * The cpus in the mask must all be on the apic cluster.  If are not
 	 * on the same apicid cluster return default value of target_cpus():
 	 */
 	cpu = cpumask_first(cpumask);
 	apicid = es7000_cpu_to_logical_apicid(cpu);
-
 	while (cpus_found < num_bits_set) {
 		if (cpumask_test_cpu(cpu, cpumask)) {
 			int new_apicid = es7000_cpu_to_logical_apicid(cpu);
@@ -591,40 +587,6 @@ es7000_cpu_mask_to_apicid_cluster(const struct cpumask *cpumask)
 			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
 				WARN(1, "Not a valid mask!");
 
-				return 0xFF;
-			}
-			apicid = new_apicid;
-			cpus_found++;
-		}
-		cpu++;
-	}
-	return apicid;
-}
-
-static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
-{
-	int cpus_found = 0;
-	int num_bits_set;
-	int apicid;
-	int cpu;
-
-	num_bits_set = cpus_weight(*cpumask);
-	/* Return id to all */
-	if (num_bits_set == nr_cpu_ids)
-		return es7000_cpu_to_logical_apicid(0);
-	/*
-	 * The cpus in the mask must all be on the apic cluster.  If are not
-	 * on the same apicid cluster return default value of target_cpus():
-	 */
-	cpu = first_cpu(*cpumask);
-	apicid = es7000_cpu_to_logical_apicid(cpu);
-	while (cpus_found < num_bits_set) {
-		if (cpu_isset(cpu, *cpumask)) {
-			int new_apicid = es7000_cpu_to_logical_apicid(cpu);
-
-			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				printk("%s: Not a valid mask!\n", __func__);
-
 				return es7000_cpu_to_logical_apicid(0);
 			}
 			apicid = new_apicid;
@@ -667,8 +629,6 @@ void __init es7000_update_apic_to_cluster(void)
 	apic->irq_dest_mode = 1;
 
 	apic->init_apic_ldr = es7000_init_apic_ldr_cluster;
-
-	apic->cpu_mask_to_apicid = es7000_cpu_mask_to_apicid_cluster;
 }
 
 static int probe_es7000(void)
-- 
1.6.1.3


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

* [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid
  2009-02-26 21:45           ` [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup Jiri Slaby
@ 2009-02-26 21:45             ` Jiri Slaby
  2009-02-26 21:45               ` [PATCH 4/4] x86_32: apic/summit_32, " Jiri Slaby
  2009-02-26 21:50               ` [PATCH v2 3/4] x86_32: apic/es7000_32, " Jiri Slaby
  0 siblings, 2 replies; 20+ messages in thread
From: Jiri Slaby @ 2009-02-26 21:45 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

Perform same-cluster checking even for masks with all (nr_cpu_ids)
bits set and report BAD_APICID on failure.

While at it, convert it to for_each_cpu.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/es7000_32.c |   31 +++++++++++--------------------
 1 files changed, 11 insertions(+), 20 deletions(-)

diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c
index 6c15126..bbf85b6 100644
--- a/arch/x86/kernel/apic/es7000_32.c
+++ b/arch/x86/kernel/apic/es7000_32.c
@@ -567,32 +567,23 @@ static int es7000_check_phys_apicid_present(int cpu_physical_apicid)
 
 static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
-	unsigned int cpu, num_bits_set, cpus_found = 0;
-	int apicid;
+	unsigned int round = 0;
+	int cpu, apicid;
 
-	num_bits_set = cpumask_weight(cpumask);
-	/* Return id to all */
-	if (num_bits_set == nr_cpu_ids)
-		return es7000_cpu_to_logical_apicid(0);
 	/*
-	 * The cpus in the mask must all be on the apic cluster.  If are not
-	 * on the same apicid cluster return default value of target_cpus():
+	 * The cpus in the mask must all be on the apic cluster.
 	 */
-	cpu = cpumask_first(cpumask);
-	apicid = es7000_cpu_to_logical_apicid(cpu);
-	while (cpus_found < num_bits_set) {
-		if (cpumask_test_cpu(cpu, cpumask)) {
-			int new_apicid = es7000_cpu_to_logical_apicid(cpu);
+	apicid = es7000_cpu_to_logical_apicid(cpumask_first(cpumask));
+	for_each_cpu(cpu, cpumask) {
+		int new_apicid = es7000_cpu_to_logical_apicid(cpu);
 
-			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				WARN(1, "Not a valid mask!");
+		if (round && APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
+			WARN(1, "Not a valid mask!");
 
-				return es7000_cpu_to_logical_apicid(0);
-			}
-			apicid = new_apicid;
-			cpus_found++;
+			return BAD_APICID;
 		}
-		cpu++;
+		apicid = new_apicid;
+		round++;
 	}
 	return apicid;
 }
-- 
1.6.1.3


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

* [PATCH 4/4] x86_32: apic/summit_32, fix cpu_mask_to_apicid
  2009-02-26 21:45             ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
@ 2009-02-26 21:45               ` Jiri Slaby
  2009-02-26 21:50               ` [PATCH v2 3/4] x86_32: apic/es7000_32, " Jiri Slaby
  1 sibling, 0 replies; 20+ messages in thread
From: Jiri Slaby @ 2009-02-26 21:45 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

Perform same-cluster checking even for masks with all (nr_cpu_ids)
bits set and report correct apicid on success instead.

While at it, convert it to for_each_cpu and newer cpumask api.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/summit_32.c |   30 +++++++++---------------------
 1 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/arch/x86/kernel/apic/summit_32.c b/arch/x86/kernel/apic/summit_32.c
index 32838b5..95916dc 100644
--- a/arch/x86/kernel/apic/summit_32.c
+++ b/arch/x86/kernel/apic/summit_32.c
@@ -291,33 +291,21 @@ static int summit_check_phys_apicid_present(int boot_cpu_physical_apicid)
 
 static unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
-	int cpus_found = 0;
-	int num_bits_set;
-	int apicid;
-	int cpu;
+	unsigned int round = 0;
+	int cpu, apicid = 0;
 
-	num_bits_set = cpus_weight(*cpumask);
-	if (num_bits_set >= nr_cpu_ids)
-		return BAD_APICID;
 	/*
 	 * The cpus in the mask must all be on the apic cluster.
 	 */
-	cpu = first_cpu(*cpumask);
-	apicid = summit_cpu_to_logical_apicid(cpu);
-
-	while (cpus_found < num_bits_set) {
-		if (cpu_isset(cpu, *cpumask)) {
-			int new_apicid = summit_cpu_to_logical_apicid(cpu);
+	for_each_cpu(cpu, cpumask) {
+		int new_apicid = summit_cpu_to_logical_apicid(cpu);
 
-			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				printk("%s: Not a valid mask!\n", __func__);
-
-				return BAD_APICID;
-			}
-			apicid = apicid | new_apicid;
-			cpus_found++;
+		if (round && APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
+			printk("%s: Not a valid mask!\n", __func__);
+			return BAD_APICID;
 		}
-		cpu++;
+		apicid |= new_apicid;
+		round++;
 	}
 	return apicid;
 }
-- 
1.6.1.3


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

* [PATCH v2 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid
  2009-02-26 21:45             ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
  2009-02-26 21:45               ` [PATCH 4/4] x86_32: apic/summit_32, " Jiri Slaby
@ 2009-02-26 21:50               ` Jiri Slaby
  1 sibling, 0 replies; 20+ messages in thread
From: Jiri Slaby @ 2009-02-26 21:50 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

Perform same-cluster checking even for masks with all (nr_cpu_ids)
bits set and report BAD_APICID on failure.

While at it, convert it to for_each_cpu.

[v2]
- remove omitted apicid initial assignment

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/es7000_32.c |   30 ++++++++++--------------------
 1 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c
index 6c15126..d2ab096 100644
--- a/arch/x86/kernel/apic/es7000_32.c
+++ b/arch/x86/kernel/apic/es7000_32.c
@@ -567,32 +567,22 @@ static int es7000_check_phys_apicid_present(int cpu_physical_apicid)
 
 static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
-	unsigned int cpu, num_bits_set, cpus_found = 0;
-	int apicid;
+	unsigned int round = 0;
+	int cpu, uninitialized_var(apicid);
 
-	num_bits_set = cpumask_weight(cpumask);
-	/* Return id to all */
-	if (num_bits_set == nr_cpu_ids)
-		return es7000_cpu_to_logical_apicid(0);
 	/*
-	 * The cpus in the mask must all be on the apic cluster.  If are not
-	 * on the same apicid cluster return default value of target_cpus():
+	 * The cpus in the mask must all be on the apic cluster.
 	 */
-	cpu = cpumask_first(cpumask);
-	apicid = es7000_cpu_to_logical_apicid(cpu);
-	while (cpus_found < num_bits_set) {
-		if (cpumask_test_cpu(cpu, cpumask)) {
-			int new_apicid = es7000_cpu_to_logical_apicid(cpu);
+	for_each_cpu(cpu, cpumask) {
+		int new_apicid = es7000_cpu_to_logical_apicid(cpu);
 
-			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				WARN(1, "Not a valid mask!");
+		if (round && APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
+			WARN(1, "Not a valid mask!");
 
-				return es7000_cpu_to_logical_apicid(0);
-			}
-			apicid = new_apicid;
-			cpus_found++;
+			return BAD_APICID;
 		}
-		cpu++;
+		apicid = new_apicid;
+		round++;
 	}
 	return apicid;
 }
-- 
1.6.1.3


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

* Re: [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID
  2009-02-25 11:10       ` Ingo Molnar
  2009-02-26 21:45         ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
@ 2009-02-26 22:00         ` Jiri Slaby
  2009-02-28  8:21           ` Ingo Molnar
  1 sibling, 1 reply; 20+ messages in thread
From: Jiri Slaby @ 2009-02-26 22:00 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: x86, linux-kernel, Thomas Gleixner, H. Peter Anvin

On 25.2.2009 12:10, Ingo Molnar wrote:
> * Jiri Slaby<jirislaby@gmail.com>  wrote:
>> In that case, the callers code is buggy, since it passes
>> online_cpu masks even on machines, where apics are not on the
>> same clusters.
>
> It's most likely confusion in the old code. This used to be
> copy&paste-ed versions of different snapshots of the
> mach-default-code, hacked to make work on weird platforms.
> Mainline fixes/updates werent merged in consistently.
>
> So could you please send a patch that fixes this?

I've sent 4 more patches, but there are still issues:
* es7000 + summit: I haven't solved calling with all bits set (only all 
online is sufficient to trigger this). Some of the processors needn't be 
on the same apic cluster. It will scream now (again -- it did before 
adding the "optimisation"). Actually I don't know how to solve this. How 
the caller would know the correct mask, ANDing with a apic->target_cpus 
retval?

* es7000: target_cpus_cluster returns CPU_MASK_ALL and hence it will 
choke itself, because es7000_cpu_mask_to_apicid doesn't count with that. 
Invoked by setup_timer_IRQ0_pin this way.

* set_desc_affinity doesn't expect apic->cpu_mask_to_apicid_and to 
return BAD_APICID and silently sets desc->affinity. Again, I see no 
straightforward solution (rollback of assign_irq_vector and 
set_extra_move_desc needed).

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

* Re: [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID
  2009-02-26 22:00         ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
@ 2009-02-28  8:21           ` Ingo Molnar
  2009-03-02  9:53             ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
  2009-03-08 17:00             ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
  0 siblings, 2 replies; 20+ messages in thread
From: Ingo Molnar @ 2009-02-28  8:21 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: x86, linux-kernel, Thomas Gleixner, H. Peter Anvin


* Jiri Slaby <jirislaby@gmail.com> wrote:

> On 25.2.2009 12:10, Ingo Molnar wrote:
>> * Jiri Slaby<jirislaby@gmail.com>  wrote:
>>> In that case, the callers code is buggy, since it passes
>>> online_cpu masks even on machines, where apics are not on the
>>> same clusters.
>>
>> It's most likely confusion in the old code. This used to be
>> copy&paste-ed versions of different snapshots of the
>> mach-default-code, hacked to make work on weird platforms.
>> Mainline fixes/updates werent merged in consistently.
>>
>> So could you please send a patch that fixes this?
>
> I've sent 4 more patches, but there are still issues:
> * es7000 + summit: I haven't solved calling with all bits set (only all  
> online is sufficient to trigger this). Some of the processors needn't be  
> on the same apic cluster. It will scream now (again -- it did before  
> adding the "optimisation"). Actually I don't know how to solve this. How  
> the caller would know the correct mask, ANDing with a apic->target_cpus  
> retval?
>
> * es7000: target_cpus_cluster returns CPU_MASK_ALL and hence it will  
> choke itself, because es7000_cpu_mask_to_apicid doesn't count with that.  
> Invoked by setup_timer_IRQ0_pin this way.
>
> * set_desc_affinity doesn't expect apic->cpu_mask_to_apicid_and to  
> return BAD_APICID and silently sets desc->affinity. Again, I see no  
> straightforward solution (rollback of assign_irq_vector and  
> set_extra_move_desc needed).

Ok, they look good. I got a conflict in 2/4, due to an 
interacting cleanup from Yinghai - mind resending them against 
latest tip:master?

Thanks,

	Ingo

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

* [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions
  2009-02-28  8:21           ` Ingo Molnar
@ 2009-03-02  9:53             ` Jiri Slaby
  2009-03-02  9:53               ` [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup Jiri Slaby
  2009-03-08 17:00             ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
  1 sibling, 1 reply; 20+ messages in thread
From: Jiri Slaby @ 2009-03-02  9:53 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

The ones which go only into struct apic are de-inlined
by compiler anyway, so remove the inline specifier from them.

Afterwards, remove bigsmp_setup_portio_remap completely as it
is unused.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/bigsmp_32.c |   40 ++++++++++++++++---------------------
 1 files changed, 17 insertions(+), 23 deletions(-)

diff --git a/arch/x86/kernel/apic/bigsmp_32.c b/arch/x86/kernel/apic/bigsmp_32.c
index 69c512e..d806eca 100644
--- a/arch/x86/kernel/apic/bigsmp_32.c
+++ b/arch/x86/kernel/apic/bigsmp_32.c
@@ -16,17 +16,17 @@
 #include <asm/apic.h>
 #include <asm/ipi.h>
 
-static inline unsigned bigsmp_get_apic_id(unsigned long x)
+static unsigned bigsmp_get_apic_id(unsigned long x)
 {
 	return (x >> 24) & 0xFF;
 }
 
-static inline int bigsmp_apic_id_registered(void)
+static int bigsmp_apic_id_registered(void)
 {
 	return 1;
 }
 
-static inline const cpumask_t *bigsmp_target_cpus(void)
+static const cpumask_t *bigsmp_target_cpus(void)
 {
 #ifdef CONFIG_SMP
 	return &cpu_online_map;
@@ -35,13 +35,12 @@ static inline const cpumask_t *bigsmp_target_cpus(void)
 #endif
 }
 
-static inline unsigned long
-bigsmp_check_apicid_used(physid_mask_t bitmap, int apicid)
+static unsigned long bigsmp_check_apicid_used(physid_mask_t bitmap, int apicid)
 {
 	return 0;
 }
 
-static inline unsigned long bigsmp_check_apicid_present(int bit)
+static unsigned long bigsmp_check_apicid_present(int bit)
 {
 	return 1;
 }
@@ -64,7 +63,7 @@ static inline unsigned long calculate_ldr(int cpu)
  * an APIC.  See e.g. "AP-388 82489DX User's Manual" (Intel
  * document number 292116).  So here it goes...
  */
-static inline void bigsmp_init_apic_ldr(void)
+static void bigsmp_init_apic_ldr(void)
 {
 	unsigned long val;
 	int cpu = smp_processor_id();
@@ -74,19 +73,19 @@ static inline void bigsmp_init_apic_ldr(void)
 	apic_write(APIC_LDR, val);
 }
 
-static inline void bigsmp_setup_apic_routing(void)
+static void bigsmp_setup_apic_routing(void)
 {
 	printk(KERN_INFO
 		"Enabling APIC mode:  Physflat.  Using %d I/O APICs\n",
 		nr_ioapics);
 }
 
-static inline int bigsmp_apicid_to_node(int logical_apicid)
+static int bigsmp_apicid_to_node(int logical_apicid)
 {
 	return apicid_2_node[hard_smp_processor_id()];
 }
 
-static inline int bigsmp_cpu_present_to_apicid(int mps_cpu)
+static int bigsmp_cpu_present_to_apicid(int mps_cpu)
 {
 	if (mps_cpu < nr_cpu_ids)
 		return (int) per_cpu(x86_bios_cpu_apicid, mps_cpu);
@@ -94,7 +93,7 @@ static inline int bigsmp_cpu_present_to_apicid(int mps_cpu)
 	return BAD_APICID;
 }
 
-static inline physid_mask_t bigsmp_apicid_to_cpu_present(int phys_apicid)
+static physid_mask_t bigsmp_apicid_to_cpu_present(int phys_apicid)
 {
 	return physid_mask_of_physid(phys_apicid);
 }
@@ -107,29 +106,24 @@ static inline int bigsmp_cpu_to_logical_apicid(int cpu)
 	return cpu_physical_id(cpu);
 }
 
-static inline physid_mask_t bigsmp_ioapic_phys_id_map(physid_mask_t phys_map)
+static physid_mask_t bigsmp_ioapic_phys_id_map(physid_mask_t phys_map)
 {
 	/* For clustered we don't have a good way to do this yet - hack */
 	return physids_promote(0xFFL);
 }
 
-static inline void bigsmp_setup_portio_remap(void)
-{
-}
-
-static inline int bigsmp_check_phys_apicid_present(int boot_cpu_physical_apicid)
+static int bigsmp_check_phys_apicid_present(int boot_cpu_physical_apicid)
 {
 	return 1;
 }
 
 /* As we are using single CPU as destination, pick only one CPU here */
-static inline unsigned int bigsmp_cpu_mask_to_apicid(const cpumask_t *cpumask)
+static unsigned int bigsmp_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
 	return bigsmp_cpu_to_logical_apicid(first_cpu(*cpumask));
 }
 
-static inline unsigned int
-bigsmp_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
+static unsigned int bigsmp_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
 			      const struct cpumask *andmask)
 {
 	int cpu;
@@ -148,7 +142,7 @@ bigsmp_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
 	return BAD_APICID;
 }
 
-static inline int bigsmp_phys_pkg_id(int cpuid_apic, int index_msb)
+static int bigsmp_phys_pkg_id(int cpuid_apic, int index_msb)
 {
 	return cpuid_apic >> index_msb;
 }
@@ -158,12 +152,12 @@ static inline void bigsmp_send_IPI_mask(const struct cpumask *mask, int vector)
 	default_send_IPI_mask_sequence_phys(mask, vector);
 }
 
-static inline void bigsmp_send_IPI_allbutself(int vector)
+static void bigsmp_send_IPI_allbutself(int vector)
 {
 	default_send_IPI_mask_allbutself_phys(cpu_online_mask, vector);
 }
 
-static inline void bigsmp_send_IPI_all(int vector)
+static void bigsmp_send_IPI_all(int vector)
 {
 	bigsmp_send_IPI_mask(cpu_online_mask, vector);
 }
-- 
1.6.1.3


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

* [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup
  2009-03-02  9:53             ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
@ 2009-03-02  9:53               ` Jiri Slaby
  2009-03-02  9:53                 ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
  0 siblings, 1 reply; 20+ messages in thread
From: Jiri Slaby @ 2009-03-02  9:53 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

Remove es7000_cpu_mask_to_apicid_cluster completely, because it's
almost the same as es7000_cpu_mask_to_apicid except 2 code paths.
One of them is about to be removed soon, the another should be
BAD_APICID (it's a fail path).

The _cluster one was not invoked on apic->cpu_mask_to_apicid_and
anyway, since there was no _cluster_and variant.

Also use newer cpumask functions.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/es7000_32.c |   46 +++----------------------------------
 1 files changed, 4 insertions(+), 42 deletions(-)

diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c
index da37e2c..9b9e86f 100644
--- a/arch/x86/kernel/apic/es7000_32.c
+++ b/arch/x86/kernel/apic/es7000_32.c
@@ -575,25 +575,21 @@ static int es7000_check_phys_apicid_present(int cpu_physical_apicid)
 	return 1;
 }
 
-static unsigned int
-es7000_cpu_mask_to_apicid_cluster(const struct cpumask *cpumask)
+static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
-	int cpus_found = 0;
-	int num_bits_set;
+	unsigned int cpu, num_bits_set, cpus_found = 0;
 	int apicid;
-	int cpu;
 
 	num_bits_set = cpumask_weight(cpumask);
 	/* Return id to all */
 	if (num_bits_set == nr_cpu_ids)
-		return 0xFF;
+		return es7000_cpu_to_logical_apicid(0);
 	/*
 	 * The cpus in the mask must all be on the apic cluster.  If are not
 	 * on the same apicid cluster return default value of target_cpus():
 	 */
 	cpu = cpumask_first(cpumask);
 	apicid = es7000_cpu_to_logical_apicid(cpu);
-
 	while (cpus_found < num_bits_set) {
 		if (cpumask_test_cpu(cpu, cpumask)) {
 			int new_apicid = es7000_cpu_to_logical_apicid(cpu);
@@ -601,40 +597,6 @@ es7000_cpu_mask_to_apicid_cluster(const struct cpumask *cpumask)
 			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
 				WARN(1, "Not a valid mask!");
 
-				return 0xFF;
-			}
-			apicid = new_apicid;
-			cpus_found++;
-		}
-		cpu++;
-	}
-	return apicid;
-}
-
-static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
-{
-	int cpus_found = 0;
-	int num_bits_set;
-	int apicid;
-	int cpu;
-
-	num_bits_set = cpus_weight(*cpumask);
-	/* Return id to all */
-	if (num_bits_set == nr_cpu_ids)
-		return es7000_cpu_to_logical_apicid(0);
-	/*
-	 * The cpus in the mask must all be on the apic cluster.  If are not
-	 * on the same apicid cluster return default value of target_cpus():
-	 */
-	cpu = first_cpu(*cpumask);
-	apicid = es7000_cpu_to_logical_apicid(cpu);
-	while (cpus_found < num_bits_set) {
-		if (cpu_isset(cpu, *cpumask)) {
-			int new_apicid = es7000_cpu_to_logical_apicid(cpu);
-
-			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				printk("%s: Not a valid mask!\n", __func__);
-
 				return es7000_cpu_to_logical_apicid(0);
 			}
 			apicid = new_apicid;
@@ -739,7 +701,7 @@ struct apic apic_es7000_cluster = {
 	.set_apic_id			= NULL,
 	.apic_id_mask			= 0xFF << 24,
 
-	.cpu_mask_to_apicid		= es7000_cpu_mask_to_apicid_cluster,
+	.cpu_mask_to_apicid		= es7000_cpu_mask_to_apicid,
 	.cpu_mask_to_apicid_and		= es7000_cpu_mask_to_apicid_and,
 
 	.send_IPI_mask			= es7000_send_IPI_mask,
-- 
1.6.1.3


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

* [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid
  2009-03-02  9:53               ` [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup Jiri Slaby
@ 2009-03-02  9:53                 ` Jiri Slaby
  2009-03-02  9:53                   ` [PATCH 4/4] x86_32: apic/summit_32, " Jiri Slaby
  0 siblings, 1 reply; 20+ messages in thread
From: Jiri Slaby @ 2009-03-02  9:53 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

Perform same-cluster checking even for masks with all (nr_cpu_ids)
bits set and report BAD_APICID on failure.

While at it, convert it to for_each_cpu.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/es7000_32.c |   30 ++++++++++--------------------
 1 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c
index 9b9e86f..4d8830f 100644
--- a/arch/x86/kernel/apic/es7000_32.c
+++ b/arch/x86/kernel/apic/es7000_32.c
@@ -577,32 +577,22 @@ static int es7000_check_phys_apicid_present(int cpu_physical_apicid)
 
 static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
-	unsigned int cpu, num_bits_set, cpus_found = 0;
-	int apicid;
+	unsigned int round = 0;
+	int cpu, uninitialized_var(apicid);
 
-	num_bits_set = cpumask_weight(cpumask);
-	/* Return id to all */
-	if (num_bits_set == nr_cpu_ids)
-		return es7000_cpu_to_logical_apicid(0);
 	/*
-	 * The cpus in the mask must all be on the apic cluster.  If are not
-	 * on the same apicid cluster return default value of target_cpus():
+	 * The cpus in the mask must all be on the apic cluster.
 	 */
-	cpu = cpumask_first(cpumask);
-	apicid = es7000_cpu_to_logical_apicid(cpu);
-	while (cpus_found < num_bits_set) {
-		if (cpumask_test_cpu(cpu, cpumask)) {
-			int new_apicid = es7000_cpu_to_logical_apicid(cpu);
+	for_each_cpu(cpu, cpumask) {
+		int new_apicid = es7000_cpu_to_logical_apicid(cpu);
 
-			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				WARN(1, "Not a valid mask!");
+		if (round && APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
+			WARN(1, "Not a valid mask!");
 
-				return es7000_cpu_to_logical_apicid(0);
-			}
-			apicid = new_apicid;
-			cpus_found++;
+			return BAD_APICID;
 		}
-		cpu++;
+		apicid = new_apicid;
+		round++;
 	}
 	return apicid;
 }
-- 
1.6.1.3


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

* [PATCH 4/4] x86_32: apic/summit_32, fix cpu_mask_to_apicid
  2009-03-02  9:53                 ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
@ 2009-03-02  9:53                   ` Jiri Slaby
  0 siblings, 0 replies; 20+ messages in thread
From: Jiri Slaby @ 2009-03-02  9:53 UTC (permalink / raw)
  To: mingo; +Cc: x86, linux-kernel, Jiri Slaby, Thomas Gleixner, H. Peter Anvin

Perform same-cluster checking even for masks with all (nr_cpu_ids)
bits set and report correct apicid on success instead.

While at it, convert it to for_each_cpu and newer cpumask api.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/kernel/apic/summit_32.c |   30 +++++++++---------------------
 1 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/arch/x86/kernel/apic/summit_32.c b/arch/x86/kernel/apic/summit_32.c
index 0a1135c..beda620 100644
--- a/arch/x86/kernel/apic/summit_32.c
+++ b/arch/x86/kernel/apic/summit_32.c
@@ -291,33 +291,21 @@ static int summit_check_phys_apicid_present(int boot_cpu_physical_apicid)
 
 static unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
-	int cpus_found = 0;
-	int num_bits_set;
-	int apicid;
-	int cpu;
+	unsigned int round = 0;
+	int cpu, apicid = 0;
 
-	num_bits_set = cpus_weight(*cpumask);
-	if (num_bits_set >= nr_cpu_ids)
-		return BAD_APICID;
 	/*
 	 * The cpus in the mask must all be on the apic cluster.
 	 */
-	cpu = first_cpu(*cpumask);
-	apicid = summit_cpu_to_logical_apicid(cpu);
-
-	while (cpus_found < num_bits_set) {
-		if (cpu_isset(cpu, *cpumask)) {
-			int new_apicid = summit_cpu_to_logical_apicid(cpu);
+	for_each_cpu(cpu, cpumask) {
+		int new_apicid = summit_cpu_to_logical_apicid(cpu);
 
-			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				printk("%s: Not a valid mask!\n", __func__);
-
-				return BAD_APICID;
-			}
-			apicid = apicid | new_apicid;
-			cpus_found++;
+		if (round && APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
+			printk("%s: Not a valid mask!\n", __func__);
+			return BAD_APICID;
 		}
-		cpu++;
+		apicid |= new_apicid;
+		round++;
 	}
 	return apicid;
 }
-- 
1.6.1.3


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

* Re: [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID
  2009-02-28  8:21           ` Ingo Molnar
  2009-03-02  9:53             ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
@ 2009-03-08 17:00             ` Jiri Slaby
  2009-03-11  8:45               ` cpu_mask_to_apicid: Not a valid mask! [was: x86_32: summit_32, use BAD_APICID] Jiri Slaby
  1 sibling, 1 reply; 20+ messages in thread
From: Jiri Slaby @ 2009-03-08 17:00 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: x86, linux-kernel, Thomas Gleixner, H. Peter Anvin

On 28.2.2009 09:21, Ingo Molnar wrote:
>> I've sent 4 more patches, but there are still issues:
>> * es7000 + summit: I haven't solved calling with all bits set (only all
>> online is sufficient to trigger this). Some of the processors needn't be
>> on the same apic cluster. It will scream now (again -- it did before
>> adding the "optimisation"). Actually I don't know how to solve this. How
>> the caller would know the correct mask, ANDing with a apic->target_cpus
>> retval?

Anybody, please? This is not a theoretical issue, this is a real problem 
we hit...


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

* cpu_mask_to_apicid: Not a valid mask! [was: x86_32: summit_32, use BAD_APICID]
  2009-03-08 17:00             ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
@ 2009-03-11  8:45               ` Jiri Slaby
  0 siblings, 0 replies; 20+ messages in thread
From: Jiri Slaby @ 2009-03-11  8:45 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: x86, linux-kernel, Thomas Gleixner, H. Peter Anvin, yinghai, andi

Adding Yinghai and Andi to CCs, maybe they can help? And changing subject.

On 8.3.2009 18:00, Jiri Slaby wrote:
> On 28.2.2009 09:21, Ingo Molnar wrote:
>>> I've sent 4 more patches, but there are still issues:
>>> * es7000 + summit: I haven't solved calling with all bits set (only all
>>> online is sufficient to trigger this). Some of the processors needn't be
>>> on the same apic cluster. It will scream now (again -- it did before
>>> adding the "optimisation"). Actually I don't know how to solve this. How
>>> the caller would know the correct mask, ANDing with a apic->target_cpus
>>> retval?
>
> Anybody, please? This is not a theoretical issue, this is a real problem
> we hit...

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

end of thread, other threads:[~2009-03-11  8:46 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-24 17:38 [PATCH 1/2] x86_32: summit_32, use BAD_APICID jirislaby
2009-02-24 17:38 ` [PATCH 2/2] x86_32: summit_32, de-inline functions jirislaby
2009-02-24 17:55 ` [PATCH 1/2] x86_32: summit_32, use BAD_APICID Ingo Molnar
2009-02-24 20:41   ` [PATCH v2 " Jiri Slaby
2009-02-24 20:41     ` [PATCH v2 2/2] x86_32: summit_32, de-inline functions Jiri Slaby
2009-02-25 11:00     ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
2009-02-25 11:10       ` Ingo Molnar
2009-02-26 21:45         ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
2009-02-26 21:45           ` [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup Jiri Slaby
2009-02-26 21:45             ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
2009-02-26 21:45               ` [PATCH 4/4] x86_32: apic/summit_32, " Jiri Slaby
2009-02-26 21:50               ` [PATCH v2 3/4] x86_32: apic/es7000_32, " Jiri Slaby
2009-02-26 22:00         ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
2009-02-28  8:21           ` Ingo Molnar
2009-03-02  9:53             ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
2009-03-02  9:53               ` [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup Jiri Slaby
2009-03-02  9:53                 ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
2009-03-02  9:53                   ` [PATCH 4/4] x86_32: apic/summit_32, " Jiri Slaby
2009-03-08 17:00             ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
2009-03-11  8:45               ` cpu_mask_to_apicid: Not a valid mask! [was: x86_32: summit_32, use BAD_APICID] Jiri Slaby

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).