Messages in this thread Patch in this message | | | Date | Sun, 22 Dec 2002 22:56:37 -0800 | From | "Martin J. Bligh" <> | Subject | [PATCH] 6/8 Move NUMA-Q support into subarch |
| |
Reformat the IPI stuff, specifically send_IPI_mask, send_IPI_allbutself, and send_IPI_all. Though the way they work is pretty silly for NUMA-Q, I do an equivalent transform here, and fix the code in a seperate patch (next one). Goes into mach_ipi.h
diff -urpN -X /home/fletch/.diff.exclude 14-numaq4/arch/i386/kernel/smp.c 15-numaq5/arch/i386/kernel/smp.c --- 14-numaq4/arch/i386/kernel/smp.c Sun Nov 17 20:29:22 2002 +++ 15-numaq5/arch/i386/kernel/smp.c Sun Dec 22 12:11:09 2002 @@ -24,6 +24,7 @@ #include <asm/pgalloc.h> #include <asm/tlbflush.h> #include <asm/smpboot.h> +#include <mach_ipi.h> /* * Some notes on x86 processor bugs affecting SMP operation: @@ -225,54 +226,6 @@ static inline void send_IPI_mask_sequenc } } local_irq_restore(flags); -} - -static inline void send_IPI_mask(int mask, int vector) -{ - if (clustered_apic_mode) - send_IPI_mask_sequence(mask, vector); - else - send_IPI_mask_bitmask(mask, vector); -} - -static inline void send_IPI_allbutself(int vector) -{ - /* - * if there are no other CPUs in the system then - * we get an APIC send error if we try to broadcast. - * thus we have to avoid sending IPIs in this case. - */ - if (!(num_online_cpus() > 1)) - return; - - if (clustered_apic_mode) { - // Pointless. Use send_IPI_mask to do this instead - int cpu; - - for (cpu = 0; cpu < NR_CPUS; ++cpu) { - if (cpu_online(cpu) && cpu != smp_processor_id()) - send_IPI_mask(1 << cpu, vector); - } - } else { - __send_IPI_shortcut(APIC_DEST_ALLBUT, vector); - return; - } -} - -static inline void send_IPI_all(int vector) -{ - if (clustered_apic_mode) { - // Pointless. Use send_IPI_mask to do this instead - int cpu; - - for (cpu = 0; cpu < NR_CPUS; ++cpu) { - if (!cpu_online(cpu)) - continue; - send_IPI_mask(1 << cpu, vector); - } - } else { - __send_IPI_shortcut(APIC_DEST_ALLINC, vector); - } } /* diff -urpN -X /home/fletch/.diff.exclude 14-numaq4/include/asm-i386/mach-default/mach_ipi.h 15-numaq5/include/asm-i386/mach-default/mach_ipi.h --- 14-numaq4/include/asm-i386/mach-default/mach_ipi.h Wed Dec 31 16:00:00 1969 +++ 15-numaq5/include/asm-i386/mach-default/mach_ipi.h Sun Dec 22 12:11:09 2002 @@ -0,0 +1,30 @@ +#ifndef __ASM_MACH_IPI_H +#define __ASM_MACH_IPI_H + +static inline void send_IPI_mask_bitmask(int mask, int vector); +static inline void __send_IPI_shortcut(unsigned int shortcut, int vector); + +static inline void send_IPI_mask(int mask, int vector) +{ + send_IPI_mask_bitmask(mask, vector); +} + +static inline void send_IPI_allbutself(int vector) +{ + /* + * if there are no other CPUs in the system then we get an APIC send + * error if we try to broadcast, thus avoid sending IPIs in this case. + */ + if (!(num_online_cpus() > 1)) + return; + + __send_IPI_shortcut(APIC_DEST_ALLBUT, vector); + return; +} + +static inline void send_IPI_all(int vector) +{ + __send_IPI_shortcut(APIC_DEST_ALLINC, vector); +} + +#endif /* __ASM_MACH_IPI_H */ diff -urpN -X /home/fletch/.diff.exclude 14-numaq4/include/asm-i386/mach-numaq/mach_ipi.h 15-numaq5/include/asm-i386/mach-numaq/mach_ipi.h --- 14-numaq4/include/asm-i386/mach-numaq/mach_ipi.h Wed Dec 31 16:00:00 1969 +++ 15-numaq5/include/asm-i386/mach-numaq/mach_ipi.h Sun Dec 22 12:11:09 2002 @@ -0,0 +1,39 @@ +#ifndef __ASM_MACH_IPI_H +#define __ASM_MACH_IPI_H + +static inline void send_IPI_mask_sequence(int mask, int vector); + +static inline void send_IPI_mask(int mask, int vector) +{ + send_IPI_mask_sequence(mask, vector); +} + +static inline void send_IPI_allbutself(int vector) +{ + int cpu; + /* + * if there are no other CPUs in the system then we get an APIC send + * error if we try to broadcast, thus avoid sending IPIs in this case. + */ + if (!(num_online_cpus() > 1)) + return; + + /* Pointless. Use send_IPI_mask to do this instead */ + for (cpu = 0; cpu < NR_CPUS; ++cpu) + if (cpu_online(cpu) && cpu != smp_processor_id()) + send_IPI_mask(1 << cpu, vector); + + return; +} + +static inline void send_IPI_all(int vector) +{ + int cpu; + + /* Pointless. Use send_IPI_mask to do this instead */ + for (cpu = 0; cpu < NR_CPUS; ++cpu) + if (cpu_online(cpu)) + send_IPI_mask(1 << cpu, vector); +} + +#endif /* __ASM_MACH_IPI_H */ diff -urpN -X /home/fletch/.diff.exclude 14-numaq4/include/asm-i386/mach-summit/mach_ipi.h 15-numaq5/include/asm-i386/mach-summit/mach_ipi.h --- 14-numaq4/include/asm-i386/mach-summit/mach_ipi.h Wed Dec 31 16:00:00 1969 +++ 15-numaq5/include/asm-i386/mach-summit/mach_ipi.h Sun Dec 22 12:11:09 2002 @@ -0,0 +1,39 @@ +#ifndef __ASM_MACH_IPI_H +#define __ASM_MACH_IPI_H + +static inline void send_IPI_mask_sequence(int mask, int vector); + +static inline void send_IPI_mask(int mask, int vector) +{ + send_IPI_mask_sequence(mask, vector); +} + +static inline void send_IPI_allbutself(int vector) +{ + int cpu; + /* + * if there are no other CPUs in the system then we get an APIC send + * error if we try to broadcast, thus avoid sending IPIs in this case. + */ + if (!(num_online_cpus() > 1)) + return; + + /* Pointless. Use send_IPI_mask to do this instead */ + for (cpu = 0; cpu < NR_CPUS; ++cpu) + if (cpu_online(cpu) && cpu != smp_processor_id()) + send_IPI_mask(1 << cpu, vector); + + return; +} + +static inline void send_IPI_all(int vector) +{ + int cpu; + + /* Pointless. Use send_IPI_mask to do this instead */ + for (cpu = 0; cpu < NR_CPUS; ++cpu) + if (cpu_online(cpu)) + send_IPI_mask(1 << cpu, vector); +} + +#endif /* __ASM_MACH_IPI_H */ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |