* Re: [patch] genapic: always use physical delivery mode on > 8 CPUs
[not found] ` <20061128063345.GA19523@elte.hu>
@ 2006-11-28 19:14 ` Siddha, Suresh B
2006-11-28 20:23 ` [patch] genapic: default to physical mode on hotplug CPU kernels Ingo Molnar
0 siblings, 1 reply; 6+ messages in thread
From: Siddha, Suresh B @ 2006-11-28 19:14 UTC (permalink / raw)
To: Ingo Molnar
Cc: Siddha, Suresh B, mm-commits, ak, ashok.raj, akpm, linux-kernel
On Tue, Nov 28, 2006 at 07:33:46AM +0100, Ingo Molnar wrote:
> - if (clusters <= 1 && max_cluster <= 8 && cluster_cnt[0] == max_cluster)
> + if (max_apic < 8)
Patch mostly looks good. Instead of checking for max_apic, can we use
cpus_weight(cpu_possible_map) <= 8
This will help where initially system booted with <= 8 cpus and hotplug
potentially can bringup more cpus later..
thanks,
suresh
> genapic = &apic_flat;
> else
> - genapic = &apic_cluster;
> +force_physflat:
> + genapic = &apic_physflat;
^ permalink raw reply [flat|nested] 6+ messages in thread
* [patch] genapic: default to physical mode on hotplug CPU kernels
2006-11-28 19:14 ` [patch] genapic: always use physical delivery mode on > 8 CPUs Siddha, Suresh B
@ 2006-11-28 20:23 ` Ingo Molnar
2006-11-28 22:31 ` Siddha, Suresh B
0 siblings, 1 reply; 6+ messages in thread
From: Ingo Molnar @ 2006-11-28 20:23 UTC (permalink / raw)
To: Siddha, Suresh B; +Cc: mm-commits, ak, ashok.raj, akpm, linux-kernel
* Siddha, Suresh B <suresh.b.siddha@intel.com> wrote:
> On Tue, Nov 28, 2006 at 07:33:46AM +0100, Ingo Molnar wrote:
> > - if (clusters <= 1 && max_cluster <= 8 && cluster_cnt[0] == max_cluster)
> > + if (max_apic < 8)
>
> Patch mostly looks good. Instead of checking for max_apic, can we use
> cpus_weight(cpu_possible_map) <= 8
ok - but i think it's still possible the BIOS tells us APIC IDs that are
larger than 7, even if there are fewer CPUs. So i think the patch below
should cover it. Agreed?
Ingo
-------------------->
From: Ingo Molnar <mingo@elte.hu>
Subject: [patch] genapic: default to physical mode on hotplug CPU kernels
default to physical mode on hotplug CPU kernels.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Index: linux/arch/x86_64/kernel/genapic.c
===================================================================
--- linux.orig/arch/x86_64/kernel/genapic.c
+++ linux/arch/x86_64/kernel/genapic.c
@@ -51,7 +51,7 @@ void __init clustered_apic_check(void)
max_apic = id;
}
- if (max_apic < 8)
+ if (max_apic < 8 && cpus_weight(cpu_possible_map) <= 8)
genapic = &apic_flat;
else
genapic = &apic_physflat;
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [patch] genapic: default to physical mode on hotplug CPU kernels
2006-11-28 20:23 ` [patch] genapic: default to physical mode on hotplug CPU kernels Ingo Molnar
@ 2006-11-28 22:31 ` Siddha, Suresh B
2006-11-29 7:10 ` Ingo Molnar
0 siblings, 1 reply; 6+ messages in thread
From: Siddha, Suresh B @ 2006-11-28 22:31 UTC (permalink / raw)
To: Ingo Molnar
Cc: Siddha, Suresh B, mm-commits, ak, ashok.raj, akpm, linux-kernel
On Tue, Nov 28, 2006 at 09:23:22PM +0100, Ingo Molnar wrote:
>
> * Siddha, Suresh B <suresh.b.siddha@intel.com> wrote:
>
> > On Tue, Nov 28, 2006 at 07:33:46AM +0100, Ingo Molnar wrote:
> > > - if (clusters <= 1 && max_cluster <= 8 && cluster_cnt[0] == max_cluster)
> > > + if (max_apic < 8)
> >
> > Patch mostly looks good. Instead of checking for max_apic, can we use
> > cpus_weight(cpu_possible_map) <= 8
>
> ok - but i think it's still possible the BIOS tells us APIC IDs that are
> larger than 7, even if there are fewer CPUs. So i think the patch below
> should cover it. Agreed?
>
I think it is ok to use flat mode even when APIC IDs are larger than 7, as
we rely on LDR's which are programmed using smp_processor_id().
IMO, cpus_weight check should be fine.
thanks,
suresh
> Ingo
>
> -------------------->
> From: Ingo Molnar <mingo@elte.hu>
> Subject: [patch] genapic: default to physical mode on hotplug CPU kernels
>
> default to physical mode on hotplug CPU kernels.
>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
>
> Index: linux/arch/x86_64/kernel/genapic.c
> ===================================================================
> --- linux.orig/arch/x86_64/kernel/genapic.c
> +++ linux/arch/x86_64/kernel/genapic.c
> @@ -51,7 +51,7 @@ void __init clustered_apic_check(void)
> max_apic = id;
> }
>
> - if (max_apic < 8)
> + if (max_apic < 8 && cpus_weight(cpu_possible_map) <= 8)
> genapic = &apic_flat;
> else
> genapic = &apic_physflat;
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [patch] genapic: default to physical mode on hotplug CPU kernels
2006-11-28 22:31 ` Siddha, Suresh B
@ 2006-11-29 7:10 ` Ingo Molnar
2006-11-29 8:08 ` Ingo Molnar
0 siblings, 1 reply; 6+ messages in thread
From: Ingo Molnar @ 2006-11-29 7:10 UTC (permalink / raw)
To: Siddha, Suresh B; +Cc: mm-commits, ak, ashok.raj, akpm, linux-kernel
* Siddha, Suresh B <suresh.b.siddha@intel.com> wrote:
> On Tue, Nov 28, 2006 at 09:23:22PM +0100, Ingo Molnar wrote:
> >
> > * Siddha, Suresh B <suresh.b.siddha@intel.com> wrote:
> >
> > > On Tue, Nov 28, 2006 at 07:33:46AM +0100, Ingo Molnar wrote:
> > > > - if (clusters <= 1 && max_cluster <= 8 && cluster_cnt[0] == max_cluster)
> > > > + if (max_apic < 8)
> > >
> > > Patch mostly looks good. Instead of checking for max_apic, can we use
> > > cpus_weight(cpu_possible_map) <= 8
> >
> > ok - but i think it's still possible the BIOS tells us APIC IDs that are
> > larger than 7, even if there are fewer CPUs. So i think the patch below
> > should cover it. Agreed?
> >
>
> I think it is ok to use flat mode even when APIC IDs are larger than
> 7, as we rely on LDR's which are programmed using smp_processor_id().
>
> IMO, cpus_weight check should be fine.
hm - indeed. Then we can indeed do the patch below. Nice simplification!
Ingo
-------------------->
From: Ingo Molnar <mingo@elte.hu>
Subject: [patch] genapic: default to physical mode on hotplug CPU kernels
default to physical mode on hotplug CPU kernels. Furher simplify and
clean up the APIC initialization code.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
arch/x86_64/kernel/genapic.c | 20 +++-----------------
arch/x86_64/kernel/mpparse.c | 2 +-
include/asm-x86_64/apic.h | 2 +-
3 files changed, 5 insertions(+), 19 deletions(-)
Index: linux/arch/x86_64/kernel/genapic.c
===================================================================
--- linux.orig/arch/x86_64/kernel/genapic.c
+++ linux/arch/x86_64/kernel/genapic.c
@@ -33,25 +33,11 @@ u8 x86_cpu_to_log_apicid[NR_CPUS] = { [0
struct genapic __read_mostly *genapic = &apic_flat;
/*
- * Check the APIC IDs in bios_cpu_apicid and choose the APIC mode.
+ * Choose the APIC routing mode:
*/
-void __init clustered_apic_check(void)
+void __init setup_apic_routing(void)
{
- unsigned int i, max_apic = 0;
- u8 id;
-
- /*
- * Determine the maximum APIC ID in use:
- */
- for (i = 0; i < NR_CPUS; i++) {
- id = bios_cpu_apicid[i];
- if (id == BAD_APICID)
- continue;
- if (id > max_apic)
- max_apic = id;
- }
-
- if (max_apic < 8)
+ if (cpus_weight(cpu_possible_map) <= 8)
genapic = &apic_flat;
else
genapic = &apic_physflat;
Index: linux/arch/x86_64/kernel/mpparse.c
===================================================================
--- linux.orig/arch/x86_64/kernel/mpparse.c
+++ linux/arch/x86_64/kernel/mpparse.c
@@ -302,7 +302,7 @@ static int __init smp_read_mpc(struct mp
}
}
}
- clustered_apic_check();
+ setup_apic_routing();
if (!num_processors)
printk(KERN_ERR "MPTABLE: no processors registered!\n");
return num_processors;
Index: linux/include/asm-x86_64/apic.h
===================================================================
--- linux.orig/include/asm-x86_64/apic.h
+++ linux/include/asm-x86_64/apic.h
@@ -82,7 +82,7 @@ extern void setup_secondary_APIC_clock (
extern int APIC_init_uniprocessor (void);
extern void disable_APIC_timer(void);
extern void enable_APIC_timer(void);
-extern void clustered_apic_check(void);
+extern void setup_apic_routing(void);
static inline void lapic_timer_idle_broadcast(int broadcast) { }
extern void setup_APIC_extened_lvt(unsigned char lvt_off, unsigned char vector,
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [patch] genapic: default to physical mode on hotplug CPU kernels
2006-11-29 7:10 ` Ingo Molnar
@ 2006-11-29 8:08 ` Ingo Molnar
2006-11-30 2:56 ` Siddha, Suresh B
0 siblings, 1 reply; 6+ messages in thread
From: Ingo Molnar @ 2006-11-29 8:08 UTC (permalink / raw)
To: Siddha, Suresh B; +Cc: mm-commits, ak, ashok.raj, akpm, linux-kernel
* Ingo Molnar <mingo@elte.hu> wrote:
> hm - indeed. Then we can indeed do the patch below. Nice simplification!
forgot to convert a few more places - full patch below.
Ingo
----------------->
From: Ingo Molnar <mingo@elte.hu>
Subject: [patch] genapic: default to physical mode on hotplug CPU kernels
default to physical mode on hotplug CPU kernels. Furher simplify and
clean up the APIC initialization code.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
arch/i386/kernel/acpi/boot.c | 2 +-
arch/i386/kernel/mpparse.c | 2 +-
arch/x86_64/kernel/genapic.c | 20 +++-----------------
arch/x86_64/kernel/mpparse.c | 2 +-
include/asm-i386/genapic.h | 4 ++--
include/asm-i386/mach-bigsmp/mach_apic.h | 2 +-
include/asm-i386/mach-default/mach_apic.h | 2 +-
include/asm-i386/mach-es7000/mach_apic.h | 2 +-
include/asm-i386/mach-generic/mach_apic.h | 2 +-
include/asm-i386/mach-numaq/mach_apic.h | 2 +-
include/asm-i386/mach-summit/mach_apic.h | 2 +-
include/asm-i386/mach-visws/mach_apic.h | 2 +-
include/asm-x86_64/apic.h | 2 +-
13 files changed, 16 insertions(+), 30 deletions(-)
Index: linux/arch/i386/kernel/acpi/boot.c
===================================================================
--- linux.orig/arch/i386/kernel/acpi/boot.c
+++ linux/arch/i386/kernel/acpi/boot.c
@@ -921,7 +921,7 @@ static void __init acpi_process_madt(voi
acpi_ioapic = 1;
smp_found_config = 1;
- clustered_apic_check();
+ setup_apic_routing();
}
}
if (error == -EINVAL) {
Index: linux/arch/i386/kernel/mpparse.c
===================================================================
--- linux.orig/arch/i386/kernel/mpparse.c
+++ linux/arch/i386/kernel/mpparse.c
@@ -479,7 +479,7 @@ static int __init smp_read_mpc(struct mp
}
++mpc_record;
}
- clustered_apic_check();
+ setup_apic_routing();
if (!num_processors)
printk(KERN_ERR "SMP mptable: no processors registered!\n");
return num_processors;
Index: linux/arch/x86_64/kernel/genapic.c
===================================================================
--- linux.orig/arch/x86_64/kernel/genapic.c
+++ linux/arch/x86_64/kernel/genapic.c
@@ -33,25 +33,11 @@ u8 x86_cpu_to_log_apicid[NR_CPUS] = { [0
struct genapic __read_mostly *genapic = &apic_flat;
/*
- * Check the APIC IDs in bios_cpu_apicid and choose the APIC mode.
+ * Choose the APIC routing mode:
*/
-void __init clustered_apic_check(void)
+void __init setup_apic_routing(void)
{
- unsigned int i, max_apic = 0;
- u8 id;
-
- /*
- * Determine the maximum APIC ID in use:
- */
- for (i = 0; i < NR_CPUS; i++) {
- id = bios_cpu_apicid[i];
- if (id == BAD_APICID)
- continue;
- if (id > max_apic)
- max_apic = id;
- }
-
- if (max_apic < 8)
+ if (cpus_weight(cpu_possible_map) <= 8)
genapic = &apic_flat;
else
genapic = &apic_physflat;
Index: linux/arch/x86_64/kernel/mpparse.c
===================================================================
--- linux.orig/arch/x86_64/kernel/mpparse.c
+++ linux/arch/x86_64/kernel/mpparse.c
@@ -302,7 +302,7 @@ static int __init smp_read_mpc(struct mp
}
}
}
- clustered_apic_check();
+ setup_apic_routing();
if (!num_processors)
printk(KERN_ERR "MPTABLE: no processors registered!\n");
return num_processors;
Index: linux/include/asm-i386/genapic.h
===================================================================
--- linux.orig/include/asm-i386/genapic.h
+++ linux/include/asm-i386/genapic.h
@@ -36,7 +36,7 @@ struct genapic {
void (*init_apic_ldr)(void);
physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map);
- void (*clustered_apic_check)(void);
+ void (*setup_apic_routing)(void);
int (*multi_timer_check)(int apic, int irq);
int (*apicid_to_node)(int logical_apicid);
int (*cpu_to_logical_apicid)(int cpu);
@@ -99,7 +99,7 @@ struct genapic {
APICFUNC(check_apicid_present) \
APICFUNC(init_apic_ldr) \
APICFUNC(ioapic_phys_id_map) \
- APICFUNC(clustered_apic_check) \
+ APICFUNC(setup_apic_routing) \
APICFUNC(multi_timer_check) \
APICFUNC(apicid_to_node) \
APICFUNC(cpu_to_logical_apicid) \
Index: linux/include/asm-i386/mach-bigsmp/mach_apic.h
===================================================================
--- linux.orig/include/asm-i386/mach-bigsmp/mach_apic.h
+++ linux/include/asm-i386/mach-bigsmp/mach_apic.h
@@ -71,7 +71,7 @@ static inline void init_apic_ldr(void)
apic_write_around(APIC_LDR, val);
}
-static inline void clustered_apic_check(void)
+static inline void setup_apic_routing(void)
{
printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
"Physflat", nr_ioapics);
Index: linux/include/asm-i386/mach-default/mach_apic.h
===================================================================
--- linux.orig/include/asm-i386/mach-default/mach_apic.h
+++ linux/include/asm-i386/mach-default/mach_apic.h
@@ -54,7 +54,7 @@ static inline physid_mask_t ioapic_phys_
return phys_map;
}
-static inline void clustered_apic_check(void)
+static inline void setup_apic_routing(void)
{
printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
"Flat", nr_ioapics);
Index: linux/include/asm-i386/mach-es7000/mach_apic.h
===================================================================
--- linux.orig/include/asm-i386/mach-es7000/mach_apic.h
+++ linux/include/asm-i386/mach-es7000/mach_apic.h
@@ -81,7 +81,7 @@ static inline void enable_apic_mode(void
}
extern int apic_version [MAX_APICS];
-static inline void clustered_apic_check(void)
+static inline void setup_apic_routing(void)
{
int apic = bios_cpu_apicid[smp_processor_id()];
printk("Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n",
Index: linux/include/asm-i386/mach-generic/mach_apic.h
===================================================================
--- linux.orig/include/asm-i386/mach-generic/mach_apic.h
+++ linux/include/asm-i386/mach-generic/mach_apic.h
@@ -13,7 +13,7 @@
#define apic_id_registered (genapic->apic_id_registered)
#define init_apic_ldr (genapic->init_apic_ldr)
#define ioapic_phys_id_map (genapic->ioapic_phys_id_map)
-#define clustered_apic_check (genapic->clustered_apic_check)
+#define setup_apic_routing (genapic->setup_apic_routing)
#define multi_timer_check (genapic->multi_timer_check)
#define apicid_to_node (genapic->apicid_to_node)
#define cpu_to_logical_apicid (genapic->cpu_to_logical_apicid)
Index: linux/include/asm-i386/mach-numaq/mach_apic.h
===================================================================
--- linux.orig/include/asm-i386/mach-numaq/mach_apic.h
+++ linux/include/asm-i386/mach-numaq/mach_apic.h
@@ -34,7 +34,7 @@ static inline void init_apic_ldr(void)
/* Already done in NUMA-Q firmware */
}
-static inline void clustered_apic_check(void)
+static inline void setup_apic_routing(void)
{
printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
"NUMA-Q", nr_ioapics);
Index: linux/include/asm-i386/mach-summit/mach_apic.h
===================================================================
--- linux.orig/include/asm-i386/mach-summit/mach_apic.h
+++ linux/include/asm-i386/mach-summit/mach_apic.h
@@ -80,7 +80,7 @@ static inline int apic_id_registered(voi
return 1;
}
-static inline void clustered_apic_check(void)
+static inline void setup_apic_routing(void)
{
printk("Enabling APIC mode: Summit. Using %d I/O APICs\n",
nr_ioapics);
Index: linux/include/asm-i386/mach-visws/mach_apic.h
===================================================================
--- linux.orig/include/asm-i386/mach-visws/mach_apic.h
+++ linux/include/asm-i386/mach-visws/mach_apic.h
@@ -47,7 +47,7 @@ static inline void summit_check(char *oe
{
}
-static inline void clustered_apic_check(void)
+static inline void setup_apic_routing(void)
{
}
Index: linux/include/asm-x86_64/apic.h
===================================================================
--- linux.orig/include/asm-x86_64/apic.h
+++ linux/include/asm-x86_64/apic.h
@@ -82,7 +82,7 @@ extern void setup_secondary_APIC_clock (
extern int APIC_init_uniprocessor (void);
extern void disable_APIC_timer(void);
extern void enable_APIC_timer(void);
-extern void clustered_apic_check(void);
+extern void setup_apic_routing(void);
static inline void lapic_timer_idle_broadcast(int broadcast) { }
extern void setup_APIC_extened_lvt(unsigned char lvt_off, unsigned char vector,
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [patch] genapic: default to physical mode on hotplug CPU kernels
2006-11-29 8:08 ` Ingo Molnar
@ 2006-11-30 2:56 ` Siddha, Suresh B
0 siblings, 0 replies; 6+ messages in thread
From: Siddha, Suresh B @ 2006-11-30 2:56 UTC (permalink / raw)
To: Ingo Molnar; +Cc: mm-commits, ak, ashok.raj, akpm, linux-kernel
On Wed, Nov 29, 2006 at 09:08:34AM +0100, Ingo Molnar wrote:
>
> * Ingo Molnar <mingo@elte.hu> wrote:
>
> > hm - indeed. Then we can indeed do the patch below. Nice simplification!
>
> forgot to convert a few more places - full patch below.
Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-11-30 3:21 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <200611140109.kAE19f5e014490@shell0.pdx.osdl.net>
[not found] ` <20061127141849.A9978@unix-os.sc.intel.com>
[not found] ` <20061128063345.GA19523@elte.hu>
2006-11-28 19:14 ` [patch] genapic: always use physical delivery mode on > 8 CPUs Siddha, Suresh B
2006-11-28 20:23 ` [patch] genapic: default to physical mode on hotplug CPU kernels Ingo Molnar
2006-11-28 22:31 ` Siddha, Suresh B
2006-11-29 7:10 ` Ingo Molnar
2006-11-29 8:08 ` Ingo Molnar
2006-11-30 2:56 ` Siddha, Suresh B
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox