From 192f7479f21ef63dad8d8acbbda93cce0971fe66 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roger=20Pau=20Monn=C3=A9?= Date: Tue, 20 Apr 2021 11:35:29 +0200 Subject: [PATCH] x86/vpic: don't trigger unmask event until end of init MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Wait until the end of the init sequence to trigger the unmask event. Note that it will be unconditionally triggered, but that's harmless if not unmask actually happened. While there change the variable type to bool. Suggested-by: Jan Beulich Signed-off-by: Roger Pau Monné Acked-by: Jan Beulich --- xen/arch/x86/hvm/vpic.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/vpic.c b/xen/arch/x86/hvm/vpic.c index 9195155ff0..795a76768d 100644 --- a/xen/arch/x86/hvm/vpic.c +++ b/xen/arch/x86/hvm/vpic.c @@ -188,7 +188,8 @@ static void vpic_ioport_write( struct hvm_hw_vpic *vpic, uint32_t addr, uint32_t val) { int priority, cmd; - uint8_t mask, unmasked = 0; + uint8_t mask; + bool unmasked = false; vpic_lock(vpic); @@ -200,7 +201,6 @@ static void vpic_ioport_write( /* Clear edge-sensing logic. */ vpic->irr &= vpic->elcr; - unmasked = vpic->imr; /* No interrupts masked or in service. */ vpic->imr = vpic->isr = 0; @@ -294,13 +294,17 @@ static void vpic_ioport_write( /* ICW3 */ vpic->init_state++; if ( !(vpic->init_state & 4) ) + { vpic->init_state = 0; /* No ICW4: init done */ + unmasked = true; + } break; case 3: /* ICW4 */ vpic->special_fully_nested_mode = (val >> 4) & 1; vpic->auto_eoi = (val >> 1) & 1; vpic->init_state = 0; + unmasked = true; break; } } -- 2.30.2