|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH for-4.14 3/8] x86/hvm: fix ISA IRQ 0 handling when set as lowest priority mode in IO APIC
On Thu, Jun 18, 2020 at 04:26:08PM +0200, Jan Beulich wrote:
> On 12.06.2020 17:56, Roger Pau Monne wrote:
> > --- a/xen/arch/x86/hvm/vioapic.c
> > +++ b/xen/arch/x86/hvm/vioapic.c
> > @@ -422,12 +422,13 @@ static void vioapic_deliver(struct hvm_vioapic
> > *vioapic, unsigned int pin)
> > case dest_LowestPrio:
> > {
> > #ifdef IRQ0_SPECIAL_ROUTING
> > - /* Force round-robin to pick VCPU 0 */
> > - if ( (irq == hvm_isa_irq_to_gsi(0)) && pit_channel0_enabled() )
> > - {
> > - v = d->vcpu ? d->vcpu[0] : NULL;
> > - target = v ? vcpu_vlapic(v) : NULL;
> > - }
> > + struct vlapic *lapic0 = vcpu_vlapic(d->vcpu[0]);
> > +
> > + /* Force to pick vCPU 0 if part of the destination list */
> > + if ( (irq == hvm_isa_irq_to_gsi(0)) && pit_channel0_enabled() &&
> > + vlapic_match_dest(lapic0, NULL, 0, dest, dest_mode) &&
> > + vlapic_enabled(lapic0) )
>
> The vlapic_enabled() part needs justification in the commit message
> (if it is to stay), the more that the other path that patch 2 touched
> doesn't have / gain it. I'm unconvinced this is a helpful check here
> (or anywhere when it's not current's LAPIC that gets probed), as its
> result may be stale right after probing.
This is modeled after what vlapic_lowest_prio does, which includes the
vlapic_enabled check. I assumed this was done to prevent injecting to
disabled lapics if possible.
I agree it's stale by the point it gets acted upon, but anyone playing
with enabling/disabling a lapic part of a destination list shouldn't
expect anything sensible to happen IMO.
> Having thought about this (including patch 2) some more, I also wonder
> whether, if no destination match was found, the IRQ0_SPECIAL_ROUTING
> hack should become to nevertheless deliver to CPU0.
Hm, that wouldn't match what real hardware would do, but would indeed
match what old Xen would do for IRQ 0. TBH I would be more comfortable
with attempting to remove this behaviour, and hence don't inject to
any vCPU if none match the list.
Thanks, Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |