* 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