[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 10/21] xen/arm: Implement hypercall PHYSDEVOP_{, un}map_pirq
Hi Julien, > +static int physdev_map_pirq(domid_t domid, int type, int index, int *pirq_p) > +{ > + struct domain *d; > + int ret; > + int irq = index; > + int virq = 0; > + > + d = rcu_lock_domain_by_any_id(domid); > + if ( d == NULL ) > + return -ESRCH; > + > + ret = xsm_map_domain_pirq(XSM_TARGET, d); > + if ( ret ) > + goto free_domain; > + > + /* For now we only suport GSI */ > + if ( type != MAP_PIRQ_TYPE_GSI ) > + { > + ret = -EINVAL; > + dprintk(XENLOG_G_ERR, "dom%u: wrong map_pirq type 0x%x\n", > + d->domain_id, type); > + goto free_domain; > + } > + > + if ( !is_assignable_irq(irq) ) > + { > + ret = -EINVAL; > + dprintk(XENLOG_G_ERR, "IRQ%u is not routable to a guest\n", irq); > + goto free_domain; > + } > + > + ret = -EPERM; > + if ( !irq_access_permitted(current->domain, irq) ) > + goto free_domain; I have a question here. This code is executed when dom0 creates domU. current->domain points to dom0 here, in other words access to IRQ must be permitted for dom0. Right ? But in this case following call of route_irq_to_guest() fails with message: (XEN) irq.c:459: IRQ 53 is already used by domain 0 I reproduced this in the following steps: - define IRQ in device tree, which is used by dom0, as result IRQ is mapped to dom0 - after I defined it in domU configuration file, tried to launch domU and got this error What I'm doing wrong here? > + > + virq = vgic_allocate_virq(d, irq); > + ret = -EMFILE; > + if ( virq == -1 ) > + goto free_domain; > + > + ret = route_irq_to_guest(d, virq, irq, "routed IRQ"); > + This call fails for me with the message: (XEN) irq.c:440: IRQ 53 has not been configured. Locally I added the following code, which sets IRQ type: diff --git a/xen/arch/arm/physdev.c b/xen/arch/arm/physdev.c index 9333aa0..e853e80 100644 --- a/xen/arch/arm/physdev.c +++ b/xen/arch/arm/physdev.c @@ -55,6 +55,7 @@ static int physdev_map_pirq(domid_t domid, int type, int index, int *pirq_p) if ( virq == -1 ) goto free_domain; + irq_set_spi_type(irq, DT_IRQ_TYPE_LEVEL_MASK); ret = route_irq_to_guest(d, virq, irq, "routed IRQ"); if ( !ret ) Should it be added, or I need to do this in a different way - some extra options for IRQ in config file, or something else? Regards, Andrii _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |