aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86_64/ipi.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86_64/ipi.h')
-rw-r--r--include/asm-x86_64/ipi.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/include/asm-x86_64/ipi.h b/include/asm-x86_64/ipi.h
index 5e166b9d3bde..022e9d340ad7 100644
--- a/include/asm-x86_64/ipi.h
+++ b/include/asm-x86_64/ipi.h
@@ -31,9 +31,20 @@
31 31
32static inline unsigned int __prepare_ICR (unsigned int shortcut, int vector, unsigned int dest) 32static inline unsigned int __prepare_ICR (unsigned int shortcut, int vector, unsigned int dest)
33{ 33{
34 unsigned int icr = APIC_DM_FIXED | shortcut | vector | dest; 34 unsigned int icr = shortcut | dest;
35 if (vector == KDB_VECTOR) 35
36 icr = (icr & (~APIC_VECTOR_MASK)) | APIC_DM_NMI; 36 switch (vector) {
37 default:
38 icr |= APIC_DM_FIXED | vector;
39 break;
40 case NMI_VECTOR:
41 /*
42 * Setup KDB IPI to be delivered as an NMI
43 */
44 case KDB_VECTOR:
45 icr |= APIC_DM_NMI;
46 break;
47 }
37 return icr; 48 return icr;
38} 49}
39 50
@@ -66,7 +77,7 @@ static inline void __send_IPI_shortcut(unsigned int shortcut, int vector, unsign
66 /* 77 /*
67 * Send the IPI. The write to APIC_ICR fires this off. 78 * Send the IPI. The write to APIC_ICR fires this off.
68 */ 79 */
69 apic_write_around(APIC_ICR, cfg); 80 apic_write(APIC_ICR, cfg);
70} 81}
71 82
72 83
@@ -92,7 +103,7 @@ static inline void send_IPI_mask_sequence(cpumask_t mask, int vector)
92 * prepare target chip field 103 * prepare target chip field
93 */ 104 */
94 cfg = __prepare_ICR2(x86_cpu_to_apicid[query_cpu]); 105 cfg = __prepare_ICR2(x86_cpu_to_apicid[query_cpu]);
95 apic_write_around(APIC_ICR2, cfg); 106 apic_write(APIC_ICR2, cfg);
96 107
97 /* 108 /*
98 * program the ICR 109 * program the ICR
@@ -102,7 +113,7 @@ static inline void send_IPI_mask_sequence(cpumask_t mask, int vector)
102 /* 113 /*
103 * Send the IPI. The write to APIC_ICR fires this off. 114 * Send the IPI. The write to APIC_ICR fires this off.
104 */ 115 */
105 apic_write_around(APIC_ICR, cfg); 116 apic_write(APIC_ICR, cfg);
106 } 117 }
107 local_irq_restore(flags); 118 local_irq_restore(flags);
108} 119}