[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, On Fri, Aug 29, 2014 at 10:08 PM, Julien Grall <julien.grall@xxxxxxxxxx> wrote: > > > On 29/08/14 08:34, Andrii Tseglytskyi wrote: >> >> Hi Julien, > > > Hi Andrii, > > >>> +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? > > > PHYSDEVOP_map_pirq can assign an IRQ to a domain if it's free. > > My series is assuming that the device is not used by anyone (status = > "disabled" property in the device tree node). > > In general, a device should not be shared between domains. If you need to > use it at boot in DOM0, for now, you will have to disable the drivers and > unmap every IRQ (see PHYSDEVOP_unmap_irq). > Do you mean, that status=disabled in device tree will be enough to pass irq_access_permitted(current->domain, irq) check ? I don't need to share devices between domains and I don't need to have these IRQs in dom0. I'm just trying to figure out how to pass irq_access_permitted() check. Because I took a look inside it and see that it checks rangeset, which may be added only by irq_permit_access(). And I suppose that this call provides exclusive access to IRQ for selected domain. > >>> + >>> + 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? > > > At boot Xen is browsing the device tree to configure every IRQ. Does you IRQ > describe in the device tree? > This is related to previous comment. If I describe IRQ in device tree - it is assigned exclusively to dom0. If I don't describe it - I need to set it type here. > Regards, > > -- > Julien Grall -- Andrii Tseglytskyi | Embedded Dev GlobalLogic www.globallogic.com _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |