The privileged domain should make these calls for the guest.
The non-privileged domain should make these calls via the pcifront
interface (patches that augment these two functions to do so
will follow).
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
drivers/xen/events.c | 30 ++++++++++++++++--------------
1 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index 40bcbde..fd55b5b 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -606,14 +606,15 @@ int xen_destroy_irq(int irq)
if (!desc)
goto out;
- unmap_irq.pirq = info->u.pirq.nr;
- unmap_irq.domid = info->u.pirq.domid;
- rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap_irq);
- if (rc) {
- printk(KERN_WARNING "unmap irq failed %d\n", rc);
- goto out;
+ if (xen_initial_domain()) {
+ unmap_irq.pirq = info->u.pirq.nr;
+ unmap_irq.domid = info->u.pirq.domid;
+ rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap_irq);
+ if (rc) {
+ printk(KERN_WARNING "unmap irq failed %d\n", rc);
+ goto out;
+ }
}
-
irq_info[irq] = mk_unbound_info();
dynamic_irq_cleanup(irq);
@@ -701,17 +702,18 @@ int xen_create_msi_irq(struct pci_dev *dev, struct
msi_desc *msidesc, int type)
if (irq == -1)
goto out;
- rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
- if (rc) {
+ if (xen_initial_domain()) {
+ rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
+ if (rc) {
- printk(KERN_WARNING "xen map irq failed %d\n", rc);
+ printk(KERN_WARNING "xen map irq failed %d\n", rc);
- dynamic_irq_cleanup(irq);
+ dynamic_irq_cleanup(irq);
- irq = -1;
- goto out;
+ irq = -1;
+ goto out;
+ }
}
-
irq_info[irq] = mk_pirq_info(0, map_irq.pirq, map_irq.index);
if (domid)
irq_info[irq].u.pirq.domid = domid;
--
1.6.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|