[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.