[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] map_domain_emuirq_pirq() imbalance with unmap_domain_pirq_emuirq()?
>>> On 13.12.11 at 18:16, Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> >>> wrote: > --- a/xen/arch/x86/physdev.c > +++ b/xen/arch/x86/physdev.c > @@ -216,14 +216,16 @@ int physdev_unmap_pirq(domid_t domid, int pirq) > if ( ret ) > return ret; > > - if ( is_hvm_domain(d) ) > + if ( is_hvm_domain(d) && domain_pirq_to_emuirq(d, pirq) != IRQ_UNBOUND) > { > spin_lock(&d->event_lock); > ret = unmap_domain_pirq_emuirq(d, pirq); > spin_unlock(&d->event_lock); > - if ( domid == DOMID_SELF || ret ) > + if ( ret ) > goto free_domain; > } > + if ( domid == DOMID_SELF ) > + goto free_domain; > > ret = -EPERM; > if ( !IS_PRIV_FOR(current->domain, d) ) I think this is the correct change (untested so far): @@ -228,7 +228,8 @@ static int physdev_unmap_pirq(struct phy if ( is_hvm_domain(d) ) { spin_lock(&d->event_lock); - ret = unmap_domain_pirq_emuirq(d, pirq); + if ( domain_pirq_to_emuirq(d, pirq) != IRQ_UNBOUND ) + ret = unmap_domain_pirq_emuirq(d, pirq); spin_unlock(&d->event_lock); if ( unmap->domid == DOMID_SELF || ret ) goto free_domain; i.e. do the lookup with the lock held (and taking advantage of 'ret' being zero when reaching the enclosing if()). Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |