diff options
Diffstat (limited to 'include/asm-x86_64/ipi.h')
| -rw-r--r-- | include/asm-x86_64/ipi.h | 23 |
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 | ||
| 32 | static inline unsigned int __prepare_ICR (unsigned int shortcut, int vector, unsigned int dest) | 32 | static 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 | } |
