[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 3/3] x86/vioapic: bind interrupts to PVH Dom0



On Fri, May 12, 2017 at 07:55:04AM -0600, Jan Beulich wrote:
> >>> On 19.04.17 at 17:11, <roger.pau@xxxxxxxxxx> wrote:
> > --- a/xen/arch/x86/hvm/vioapic.c
> > +++ b/xen/arch/x86/hvm/vioapic.c
> > @@ -158,6 +158,62 @@ static int vioapic_read(
> >      return X86EMUL_OKAY;
> >  }
> >  
> > +static int vioapic_dom0_map_gsi(unsigned int gsi, unsigned int trig,
> 
> Considering the conditional in the caller, please use hwdom instead
> of dom0.

Done.

> > +                                unsigned int pol)
> > +{
> > +    struct domain *d = current->domain;
> > +    xen_domctl_bind_pt_irq_t pt_irq_bind = {
> > +        .irq_type = PT_IRQ_TYPE_PCI,
> > +        .machine_irq = gsi,
> > +        .hvm_domid = DOMID_SELF,
> 
> I'm struggling with this field: Did you not notice it's entirely
> unused? We should really delete it from the interface, as
> redundant with the domain specifier in the domctl container
> structure.

Right, I've removed it.

> > +    };
> > +    int ret, pirq = gsi;
> > +
> > +    ASSERT(is_hardware_domain(d));
> > +
> > +    /* Interrupt has been unmasked, bind it now. */
> > +    ret = mp_register_gsi(gsi, trig, pol);
> > +    if ( ret && ret != -EEXIST )
> > +    {
> > +        gdprintk(XENLOG_WARNING, "vioapic: error registering GSI %u: %d\n",
> > +                 gsi, ret);
> > +        goto error;
> > +    }
> > +    else if ( ret )
> > +        /* Already in use. */
> > +        return 0;
> 
> I think this would better be
> 
>     if ( ret == -EEXIST )
>         return 0;
>     if ( ret )
>         ....

Done.

> > +    ret = allocate_and_map_gsi_pirq(d, &pirq, &pirq);
> > +    if ( ret )
> > +    {
> > +        gdprintk(XENLOG_WARNING, "vioapic: error mapping GSI %u: %d\n",
> > +                 gsi, ret);
> > +        goto error;
> > +    }
> > +
> > +    pcidevs_lock();
> > +    ret = pt_irq_create_bind(d, &pt_irq_bind);
> > +    pcidevs_unlock();
> > +    if ( ret )
> > +    {
> > +        gdprintk(XENLOG_WARNING, "vioapic: error binding GSI %u: %d\n",
> > +                 gsi, ret);
> > +        goto error_unmap;
> > +    }
> > +
> > +    return 0;
> > +
> > + error_unmap:
> 
> I can live with the "error" label below, but the one above clearly can be
> avoided quite easily by simply inverting the preceding if().

I've changed this to:

    pcidevs_lock();
    ret = pt_irq_create_bind(d, &pt_irq_bind);
    if ( ret )
    {
        gprintk(XENLOG_WARNING, "vioapic: error binding GSI %u: %d\n",
                gsi, ret);
        spin_lock(&d->event_lock);
        unmap_domain_pirq(d, pirq);
        spin_unlock(&d->event_lock);
    }
    pcidevs_unlock();

    return ret;

And got rid of both labels.

> Also, considering this is Dom0-only, I wonder whether all of the log
> messages wouldn't better use gprintk().

Done.

Thanks, Roger.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.