Skip to content

Commit 151ad17

Browse files
Andrew BanmanKAGA-KOKO
authored andcommitted
x86/platform/uv/BAU: Add APIC idt entry
BAU uses the old alloc_initr_gate90 method to setup its interrupt. This fails silently as the BAU vector is in the range of APIC vectors that are registered to the spurious interrupt handler. As a consequence BAU broadcasts are not handled, and the broadcast source CPU hangs. Update BAU to use new idt structure. Fixes: dc20b2d ("x86/idt: Move interrupt gate initialization to IDT code") Signed-off-by: Andrew Banman <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Acked-by: Mike Travis <[email protected]> Cc: Dimitri Sivanich <[email protected]> Cc: Russ Anderson <[email protected]> Cc: [email protected] Cc: "H. Peter Anvin" <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent e847f6a commit 151ad17

File tree

3 files changed

+4
-2
lines changed

3 files changed

+4
-2
lines changed

arch/x86/include/asm/hw_irq.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ extern asmlinkage void kvm_posted_intr_wakeup_ipi(void);
3636
extern asmlinkage void kvm_posted_intr_nested_ipi(void);
3737
extern asmlinkage void error_interrupt(void);
3838
extern asmlinkage void irq_work_interrupt(void);
39+
extern asmlinkage void uv_bau_message_intr1(void);
3940

4041
extern asmlinkage void spurious_interrupt(void);
4142
extern asmlinkage void thermal_interrupt(void);

arch/x86/kernel/idt.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ static const __initconst struct idt_data apic_idts[] = {
140140
# ifdef CONFIG_IRQ_WORK
141141
INTG(IRQ_WORK_VECTOR, irq_work_interrupt),
142142
# endif
143+
#ifdef CONFIG_X86_UV
144+
INTG(UV_BAU_MESSAGE, uv_bau_message_intr1),
145+
#endif
143146
INTG(SPURIOUS_APIC_VECTOR, spurious_interrupt),
144147
INTG(ERROR_APIC_VECTOR, error_interrupt),
145148
#endif

arch/x86/platform/uv/tlb_uv.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2255,8 +2255,6 @@ static int __init uv_bau_init(void)
22552255
init_uvhub(uvhub, vector, uv_base_pnode);
22562256
}
22572257

2258-
alloc_intr_gate(vector, uv_bau_message_intr1);
2259-
22602258
for_each_possible_blade(uvhub) {
22612259
if (uv_blade_nr_possible_cpus(uvhub)) {
22622260
unsigned long val;

0 commit comments

Comments
 (0)