* [PATCH] 7/8 Move NUMA-Q support into subarch
@ 2002-12-23 7:00 Martin J. Bligh
0 siblings, 0 replies; only message in thread
From: Martin J. Bligh @ 2002-12-23 7:00 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel
This one fixes up the IPI code to do something more sensible.
Sorry, was just too ugly to leave it alone ... but I did keep
it seperated out ;-) Though this is not an equivalent transform
it will only affect NUMA-Q & summit - same op twice because some
twit just split it out in the last patch for both NUMA-Q & Summit.
Because clustered apic logical mode can't do arbitrary broadcasts
of addressing (it's not just a bitmap), I have to do send IPI
instructions as a sequence of unicasts. However, there's already
a loop in the generic send_IPI_mask code to do that ... there's
no need to call send_IPI_mask once for each CPU. The comment I
wrote at the time even noted that this was silly.
diff -urpN -X /home/fletch/.diff.exclude 15-numaq5/include/asm-i386/mach-numaq/mach_ipi.h 16-numaq6/include/asm-i386/mach-numaq/mach_ipi.h
--- 15-numaq5/include/asm-i386/mach-numaq/mach_ipi.h Sun Dec 22 12:11:09 2002
+++ 16-numaq6/include/asm-i386/mach-numaq/mach_ipi.h Sun Dec 22 12:11:34 2002
@@ -10,30 +10,15 @@ static inline void send_IPI_mask(int mas
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;
+ unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
- /* 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;
+ if (mask)
+ send_IPI_mask(mask, vector);
}
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);
+ send_IPI_mask(cpu_online_map, vector);
}
#endif /* __ASM_MACH_IPI_H */
diff -urpN -X /home/fletch/.diff.exclude 15-numaq5/include/asm-i386/mach-summit/mach_ipi.h 16-numaq6/include/asm-i386/mach-summit/mach_ipi.h
--- 15-numaq5/include/asm-i386/mach-summit/mach_ipi.h Sun Dec 22 12:11:09 2002
+++ 16-numaq6/include/asm-i386/mach-summit/mach_ipi.h Sun Dec 22 12:11:34 2002
@@ -10,30 +10,15 @@ static inline void send_IPI_mask(int mas
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;
+ unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
- /* 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;
+ if (mask)
+ send_IPI_mask(mask, vector);
}
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);
+ send_IPI_mask(cpu_online_map, vector);
}
#endif /* __ASM_MACH_IPI_H */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2002-12-23 6:52 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-12-23 7:00 [PATCH] 7/8 Move NUMA-Q support into subarch Martin J. Bligh
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.