RE: [PATCH] KVM: x86: Add lowest-priority support for vt-d posted-interrupts

From: Wu, Feng
Date: Wed Dec 09 2015 - 20:53:29 EST




> -----Original Message-----
> From: Radim KrÄmÃÅ [mailto:rkrcmar@xxxxxxxxxx]
> Sent: Wednesday, December 9, 2015 10:54 PM
> To: Wu, Feng <feng.wu@xxxxxxxxx>
> Cc: pbonzini@xxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH] KVM: x86: Add lowest-priority support for vt-d posted-
> interrupts
>
> 2015-12-09 08:19+0000, Wu, Feng:
> >> -----Original Message-----
> >> From: Radim KrÄmÃÅ [mailto:rkrcmar@xxxxxxxxxx]
> >> Sent: Tuesday, November 17, 2015 3:03 AM
> >> To: Wu, Feng <feng.wu@xxxxxxxxx>
> >> Cc: pbonzini@xxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx
> >> Subject: Re: [PATCH] KVM: x86: Add lowest-priority support for vt-d posted-
> >> interrupts
> >>
> >> 2015-11-09 10:46+0800, Feng Wu:
> >> > +struct kvm_vcpu *kvm_intr_vector_hashing_dest(struct kvm *kvm,
> >> > + struct kvm_lapic_irq *irq)
> >> > +
> >> > +{
> >> > + unsigned long dest_vcpu_bitmap[BITS_TO_LONGS(KVM_MAX_VCPUS)];
> >> > + unsigned int dest_vcpus = 0;
> >> > + struct kvm_vcpu *vcpu;
> >> > + unsigned int i, mod, idx = 0;
> >> > +
> >> > + vcpu = kvm_intr_vector_hashing_dest_fast(kvm, irq);
> >> > + if (vcpu)
> >> > + return vcpu;
> >>
> >> I think the rest of this function shouldn't be implemented:
> >> - Shorthands are only for IPIs and hence don't need to be handled,
> >> - Lowest priority physical broadcast is not supported,
> >> - Lowest priority cluster logical broadcast is not supported,
> >> - No point in optimizing mixed xAPIC and x2APIC mode,
> >
> > I read your comments again, and don't quite understand why we
> > don't need PI optimization for mixed xAPIC and x2APIC mode.
>
> There shouldn't be a non-hobbyist operating system that uses mixed mode,
> so the optimization would practically be dead code as all other cases
> are handled by kvm_intr_vector_hashing_dest_fast().

Thanks a lot for your elaboration!

>
> I think that having extra code would bring problems in the future -- we
> need to take care of it when refactoring KVM's APIC and we should also
> write a unit-test for this otherwise dead path. I don't think that the
> benefit for guests would ever balance those efforts.
>
> (Physical xAPIC+x2APIC mode is still somewhat reasonable and xAPIC CPUs
> start with LDR=0, which means that operating system doesn't need to
> utilize mixed mode, as defined by KVM, when switching to x2APIC.)

I think you mean Physical xAPIC+Physical x2APIC mode, right? For physical
mode, we don't use LDR in any case, do we? So in physical mode, we only
use the APIC ID, that is why they can be mixed, is my understanding correct?
Thanks a lot!

>
> > BTW, can we have mixed flat and cluster mode?
>
> Yes, KVM recognizes that mixed mode, but luckily, there are severe
> limitations.
>
> Notes below SDM section 10.6.2.2:
> All processors that have their APIC software enabled (using the
> spurious vector enable/disable bit) must have their DFRs (Destination
> Format Registers) programmed identically.

Thanks for pointing this out, good to know it!

>
> I hope there isn't a human that would use it in good faith.
>
> (Only NMI/SMI/INIT/SIPI are delivered in software disabled mode and if
> the system uses cluster xAPIC, OS should set DFR before LDR, which
> doesn't trigger mixed mode either.)

Just curious, if the APIC is software disabled and it is in xAPIC mode. OS sets
different value for DFR for different APICs, then when OS sets LDR, KVM can
trigger mixed flat and cluster mode, right?

Thanks,
Feng