|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/5] x86/vioapic: bind interrupts to PVH Dom0
On Tue, Apr 18, 2017 at 06:35:57AM -0600, Jan Beulich wrote:
> >>> On 27.03.17 at 12:44, <roger.pau@xxxxxxxxxx> wrote:
> > --- a/xen/arch/x86/hvm/vioapic.c
> > +++ b/xen/arch/x86/hvm/vioapic.c
> > @@ -199,6 +199,34 @@ static void vioapic_write_redirent(
> > unmasked = unmasked && !ent.fields.mask;
> > }
> >
> > + if ( is_hardware_domain(d) && unmasked )
> > + {
> > + xen_domctl_bind_pt_irq_t pt_irq_bind = {
> > + .irq_type = PT_IRQ_TYPE_GSI,
> > + .machine_irq = gsi,
> > + .u.gsi.gsi = gsi,
> > + .hvm_domid = DOMID_SELF,
> > + };
> > + int ret, pirq = gsi;
> > +
> > + /* Interrupt has been unmasked, bind it now. */
> > + ret = mp_register_gsi(gsi, ent.fields.trig_mode,
> > ent.fields.polarity);
> > + if ( ret && ret != -EEXIST )
> > + {
> > + gdprintk(XENLOG_WARNING,
> > + "%s: error registering GSI %u: %d\n", __func__, gsi,
> > ret);
> > + }
> > + if ( !ret )
> > + {
> > + ret = physdev_map_pirq(DOMID_SELF, MAP_PIRQ_TYPE_GSI, &pirq,
> > &pirq,
> > + NULL);
>
> With this call you basically admit that PVH can't really do without
> physdev ops, just that you hide it behind IO-APIC RTE writes.
Yes, I just want to get rid of the physdev hypercalls for PVH Dom0, not the
physdev ops inside of Xen.
> Along the lines of the comment on the previous patch I wonder
> though whether you really need to use this function, i.e.
> whether you can't instead get away with little more than the
> call to map_domain_pirq() which that function does.
Well, I could certainly open-code part of physdev_map_pirq here, AFAICT I just
need to make sure the GSI is not used, and bind it to Dom0, but that's just
duplicating the code inside of physdev_map_pirq.
For MSI/MSI-X I certainly need to use physdev_map_pirq, because the logic in
that case is more complex, so I will have to end up making physdev_map_pirq
available to external callers in any case.
>
> > + BUG_ON(ret);
>
> You absolutely don't want to bring down the entire system if a
> failure occurs here or ...
>
> > + ret = pt_irq_create_bind(d, &pt_irq_bind);
> > + BUG_ON(ret);
>
> ... here. Probably the best you can do besides issuing a log
> message is to mask the RTE.
Right, those are leftovers from when I was still debugging this.
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |