Commit 4bd49ec9 authored by John Stultz's avatar John Stultz Committed by Linus Torvalds

[PATCH] fix target_cpus() for summit subarch

I've been hunting down a bug affecting IBM x440/x445 systems where the
floppy driver would get spurious interrupts and would not initialize
properly.

After digging James Cleverdon and Bill Irwin pointed out that target_cpus()
is routing the interrupts to the clustered apic broadcast mask using
destFixed deliver mode.  This was causing multiple interrupts to show up,
breaking the floppy init code.

This fix simply changes the delivery mode to dest_LowestPrio and initially
routes interrupts to the first cpu to resolve this issue.
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent ff612eb3
...@@ -19,11 +19,15 @@ ...@@ -19,11 +19,15 @@
static inline cpumask_t target_cpus(void) static inline cpumask_t target_cpus(void)
{ {
return CPU_MASK_ALL; /* CPU_MASK_ALL (0xff) has undefined behaviour with
* dest_LowestPrio mode logical clustered apic interrupt routing
* Just start on cpu 0. IRQ balancing will spread load
*/
return cpumask_of_cpu(0);
} }
#define TARGET_CPUS (target_cpus()) #define TARGET_CPUS (target_cpus())
#define INT_DELIVERY_MODE (dest_Fixed) #define INT_DELIVERY_MODE (dest_LowestPrio)
#define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */ #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */
static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid) static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment