bool_t hvm_domain_use_pirq(const struct domain *d, const struct pirq *pirq)
{
return is_hvm_domain(d) && pirq &&
- pirq->arch.hvm.emuirq != IRQ_UNBOUND &&
- pirq->evtchn != 0;
+ pirq->arch.hvm.emuirq != IRQ_UNBOUND;
}
if ( ret == 0 )
*pirq_p = pirq;
- if ( !ret && is_hvm_domain(d) )
- map_domain_emuirq_pirq(d, pirq, IRQ_PT);
-
done:
spin_unlock(&d->event_lock);
spin_unlock(&pcidevs_lock);
v->domain->arch.pv_domain.pirq_eoi_map )
evtchn_unmask(pirq->evtchn);
if ( !is_hvm_domain(v->domain) ||
- pirq->arch.hvm.emuirq == IRQ_PT )
+ domain_pirq_to_irq(v->domain, eoi.irq) > 0 )
pirq_guest_eoi(pirq);
spin_unlock(&v->domain->event_lock);
ret = 0;
break;
irq_status_query.flags = 0;
if ( is_hvm_domain(v->domain) &&
- domain_pirq_to_emuirq(v->domain, irq) != IRQ_PT )
+ domain_pirq_to_irq(v->domain, irq) <= 0 )
{
ret = copy_to_guest(arg, &irq_status_query, 1) ? -EFAULT : 0;
break;
bind->port = port;
+ if ( is_hvm_domain(d) && domain_pirq_to_irq(d, pirq) > 0 )
+ map_domain_emuirq_pirq(d, pirq, IRQ_PT);
+
out:
spin_unlock(&d->event_lock);
pirq->evtchn = 0;
pirq_cleanup_check(pirq, d1);
unlink_pirq_port(chn1, d1->vcpu[chn1->notify_vcpu_id]);
+ if ( is_hvm_domain(d1) && domain_pirq_to_irq(d1, pirq->pirq) > 0 )
+ unmap_domain_pirq_emuirq(d1, pirq->pirq);
break;
}