diff options
author | Ashok Raj <ashok.raj@intel.com> | 2005-11-09 00:42:33 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-11-10 19:09:18 -0500 |
commit | b4033c1715cb5aa1dcb1a25bdaf71fea908bb3f1 (patch) | |
tree | cf9ba9ae7999573a507df301faf34170ab08e2c3 /include | |
parent | 48b19148733b4826eeedfd8be9f19b61c8d010b1 (diff) |
[PATCH] PCI: Change MSI to use physical delivery mode always
MSI hardcoded delivery mode to use logical delivery mode. Recently
x86_64 moved to use physical mode addressing to support physflat mode.
With this mode enabled noticed that my eth with MSI werent working.
msi_address_init() was hardcoded to use logical mode for i386 and x86_64.
So when we switch to use physical mode, things stopped working.
Since anyway we dont use lowest priority delivery with MSI, its always
directed to just a single CPU. Its safe and simpler to use
physical mode always, even when we use logical delivery mode for IPI's
or other ioapic RTE's.
Signed-off-by: Ashok Raj <ashok.raj@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-i386/msi.h | 9 | ||||
-rw-r--r-- | include/asm-i386/smp.h | 6 | ||||
-rw-r--r-- | include/asm-ia64/msi.h | 3 | ||||
-rw-r--r-- | include/asm-x86_64/msi.h | 4 | ||||
-rw-r--r-- | include/asm-x86_64/smp.h | 6 |
5 files changed, 14 insertions, 14 deletions
diff --git a/include/asm-i386/msi.h b/include/asm-i386/msi.h index b85393094c83..f041d4495faf 100644 --- a/include/asm-i386/msi.h +++ b/include/asm-i386/msi.h | |||
@@ -10,13 +10,6 @@ | |||
10 | #include <mach_apic.h> | 10 | #include <mach_apic.h> |
11 | 11 | ||
12 | #define LAST_DEVICE_VECTOR 232 | 12 | #define LAST_DEVICE_VECTOR 232 |
13 | #define MSI_DEST_MODE MSI_LOGICAL_MODE | 13 | #define MSI_TARGET_CPU_SHIFT 12 |
14 | #define MSI_TARGET_CPU_SHIFT 12 | ||
15 | |||
16 | #ifdef CONFIG_SMP | ||
17 | #define MSI_TARGET_CPU logical_smp_processor_id() | ||
18 | #else | ||
19 | #define MSI_TARGET_CPU cpu_to_logical_apicid(first_cpu(cpu_online_map)) | ||
20 | #endif | ||
21 | 14 | ||
22 | #endif /* ASM_MSI_H */ | 15 | #endif /* ASM_MSI_H */ |
diff --git a/include/asm-i386/smp.h b/include/asm-i386/smp.h index 13250199976d..61d3ab9db70c 100644 --- a/include/asm-i386/smp.h +++ b/include/asm-i386/smp.h | |||
@@ -45,6 +45,8 @@ extern void unlock_ipi_call_lock(void); | |||
45 | #define MAX_APICID 256 | 45 | #define MAX_APICID 256 |
46 | extern u8 x86_cpu_to_apicid[]; | 46 | extern u8 x86_cpu_to_apicid[]; |
47 | 47 | ||
48 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] | ||
49 | |||
48 | #ifdef CONFIG_HOTPLUG_CPU | 50 | #ifdef CONFIG_HOTPLUG_CPU |
49 | extern void cpu_exit_clear(void); | 51 | extern void cpu_exit_clear(void); |
50 | extern void cpu_uninit(void); | 52 | extern void cpu_uninit(void); |
@@ -92,6 +94,10 @@ extern int __cpu_disable(void); | |||
92 | extern void __cpu_die(unsigned int cpu); | 94 | extern void __cpu_die(unsigned int cpu); |
93 | #endif /* !__ASSEMBLY__ */ | 95 | #endif /* !__ASSEMBLY__ */ |
94 | 96 | ||
97 | #else /* CONFIG_SMP */ | ||
98 | |||
99 | #define cpu_physical_id(cpu) boot_cpu_physical_apicid | ||
100 | |||
95 | #define NO_PROC_ID 0xFF /* No processor magic marker */ | 101 | #define NO_PROC_ID 0xFF /* No processor magic marker */ |
96 | 102 | ||
97 | #endif | 103 | #endif |
diff --git a/include/asm-ia64/msi.h b/include/asm-ia64/msi.h index 60f2137f9278..97890f7762b3 100644 --- a/include/asm-ia64/msi.h +++ b/include/asm-ia64/msi.h | |||
@@ -12,9 +12,6 @@ | |||
12 | static inline void set_intr_gate (int nr, void *func) {} | 12 | static inline void set_intr_gate (int nr, void *func) {} |
13 | #define IO_APIC_VECTOR(irq) (irq) | 13 | #define IO_APIC_VECTOR(irq) (irq) |
14 | #define ack_APIC_irq ia64_eoi | 14 | #define ack_APIC_irq ia64_eoi |
15 | #define cpu_mask_to_apicid(mask) cpu_physical_id(first_cpu(mask)) | ||
16 | #define MSI_DEST_MODE MSI_PHYSICAL_MODE | ||
17 | #define MSI_TARGET_CPU ((ia64_getreg(_IA64_REG_CR_LID) >> 16) & 0xffff) | ||
18 | #define MSI_TARGET_CPU_SHIFT 4 | 15 | #define MSI_TARGET_CPU_SHIFT 4 |
19 | 16 | ||
20 | #endif /* ASM_MSI_H */ | 17 | #endif /* ASM_MSI_H */ |
diff --git a/include/asm-x86_64/msi.h b/include/asm-x86_64/msi.h index 85c427e472bf..356e0e82f50b 100644 --- a/include/asm-x86_64/msi.h +++ b/include/asm-x86_64/msi.h | |||
@@ -11,8 +11,6 @@ | |||
11 | #include <asm/smp.h> | 11 | #include <asm/smp.h> |
12 | 12 | ||
13 | #define LAST_DEVICE_VECTOR 232 | 13 | #define LAST_DEVICE_VECTOR 232 |
14 | #define MSI_DEST_MODE MSI_LOGICAL_MODE | 14 | #define MSI_TARGET_CPU_SHIFT 12 |
15 | #define MSI_TARGET_CPU_SHIFT 12 | ||
16 | #define MSI_TARGET_CPU logical_smp_processor_id() | ||
17 | 15 | ||
18 | #endif /* ASM_MSI_H */ | 16 | #endif /* ASM_MSI_H */ |
diff --git a/include/asm-x86_64/smp.h b/include/asm-x86_64/smp.h index c57ce4071342..b9fb2173ef99 100644 --- a/include/asm-x86_64/smp.h +++ b/include/asm-x86_64/smp.h | |||
@@ -135,5 +135,11 @@ static __inline int logical_smp_processor_id(void) | |||
135 | } | 135 | } |
136 | #endif | 136 | #endif |
137 | 137 | ||
138 | #ifdef CONFIG_SMP | ||
139 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] | ||
140 | #else | ||
141 | #define cpu_physical_id(cpu) boot_cpu_id | ||
142 | #endif | ||
143 | |||
138 | #endif | 144 | #endif |
139 | 145 | ||