[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] x86/apic: fix disabling LVT0 in disconnect_bsp_APIC
The Intel SDM states: "When an illegal vector value (0 to 15) is written to a LVT entry and the delivery mode is Fixed (bits 8-11 equal 0), the APIC may signal an illegal vector error, without regard to whether the mask bit is set or whether an interrupt is actually seen on the input." And that's exactly what's currently done in disconnect_bsp_APIC when virt_wire_setup is true and LVT LINT0 is being masked. By writing only APIC_LVT_MASKED Xen is actually setting the vector to 0 and the delivery mode to Fixed (0), and hence it triggers an APIC error even when the LVT entry is masked. This would usually manifest when Xen is being shut down, as that's where disconnect_bsp_APIC is called: (XEN) APIC error on CPU0: 40(00) Fix this by reusing the current LVT LINT0 value and just adding the mask bit to it. Reported-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- xen/arch/x86/apic.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/apic.c b/xen/arch/x86/apic.c index a6a7754d77..e4363639bd 100644 --- a/xen/arch/x86/apic.c +++ b/xen/arch/x86/apic.c @@ -281,7 +281,8 @@ void disconnect_bsp_APIC(int virt_wire_setup) } else { /* Disable LVT0 */ - apic_write(APIC_LVT0, APIC_LVT_MASKED); + value = apic_read(APIC_LVT0); + apic_write(APIC_LVT0, value | APIC_LVT_MASKED); } /* For LVT1 make it edge triggered, active high, nmi and enabled */ -- 2.25.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |