Wanpeng Li <kernellwp@xxxxxxxxx> writes: > From: Wanpeng Li <wanpengli@xxxxxxxxxxx> > > Except destination shorthand, a destination value 0xffffffff is used to > broadcast interrupts, let's also filter this for single target IPI fastpath. > > Signed-off-by: Wanpeng Li <wanpengli@xxxxxxxxxxx> > --- > arch/x86/kvm/lapic.c | 3 --- > arch/x86/kvm/lapic.h | 3 +++ > arch/x86/kvm/x86.c | 3 ++- > 3 files changed, 5 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > index a38f1a8..88929b1 100644 > --- a/arch/x86/kvm/lapic.c > +++ b/arch/x86/kvm/lapic.c > @@ -59,9 +59,6 @@ > #define MAX_APIC_VECTOR 256 > #define APIC_VECTORS_PER_REG 32 > > -#define APIC_BROADCAST 0xFF > -#define X2APIC_BROADCAST 0xFFFFFFFFul > - > static bool lapic_timer_advance_dynamic __read_mostly; > #define LAPIC_TIMER_ADVANCE_ADJUST_MIN 100 /* clock cycles */ > #define LAPIC_TIMER_ADVANCE_ADJUST_MAX 10000 /* clock cycles */ > diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h > index bc76860..25b77a6 100644 > --- a/arch/x86/kvm/lapic.h > +++ b/arch/x86/kvm/lapic.h > @@ -17,6 +17,9 @@ > #define APIC_BUS_CYCLE_NS 1 > #define APIC_BUS_FREQUENCY (1000000000ULL / APIC_BUS_CYCLE_NS) > > +#define APIC_BROADCAST 0xFF > +#define X2APIC_BROADCAST 0xFFFFFFFFul > + > enum lapic_mode { > LAPIC_MODE_DISABLED = 0, > LAPIC_MODE_INVALID = X2APIC_ENABLE, > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index c4bb7d8..495709f 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -1559,7 +1559,8 @@ static int handle_fastpath_set_x2apic_icr_irqoff(struct kvm_vcpu *vcpu, u64 data > > if (((data & APIC_SHORT_MASK) == APIC_DEST_NOSHORT) && > ((data & APIC_DEST_MASK) == APIC_DEST_PHYSICAL) && > - ((data & APIC_MODE_MASK) == APIC_DM_FIXED)) { > + ((data & APIC_MODE_MASK) == APIC_DM_FIXED) && > + ((u32)(data >> 32) != X2APIC_BROADCAST)) { > > data &= ~(1 << 12); > kvm_apic_send_ipi(vcpu->arch.apic, (u32)data, (u32)(data >> 32)); Reviewed-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> -- Vitaly