From: Julien Grall <julien.grall@linaro.org>
To: Oleksandr Tyshchenko <oleksandr.tyshchenko@globallogic.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Ian Campbell <ian.campbell@citrix.com>,
xen-devel@lists.xen.org
Subject: Re: [PATCH v1 0/2] xen/arm: maintenance_interrupt SMP fix
Date: Wed, 29 Jan 2014 13:07:14 +0000 [thread overview]
Message-ID: <52E8FD02.2060601@linaro.org> (raw)
In-Reply-To: <CAJEb2DGdOArRF5qeEABc8+V77TPvQ2FWe=WfmFCm3Z+KpnK8fw@mail.gmail.com>
On 29/01/14 10:56, Oleksandr Tyshchenko wrote:
> Hello all,
>
> I just recollected about one hack which we created
> as we needed to route HW IRQ in domU.
>
> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> index 9d793ba..d0227b9 100644
> --- a/tools/libxl/libxl_create.c
> +++ b/tools/libxl/libxl_create.c
> @@ -989,8 +989,6 @@ static void domcreate_launch_dm(libxl__egc *egc,
> libxl__multidev *multidev,
>
> LOG(DEBUG, "dom%d irq %d", domid, irq);
>
> - ret = irq >= 0 ? xc_physdev_map_pirq(CTX->xch, domid, irq, &irq)
> - : -EOVERFLOW;
> if (!ret)
> ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1);
> if (ret < 0) {
> diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
> index 2e4b11f..b54c08e 100644
> --- a/xen/arch/arm/vgic.c
> +++ b/xen/arch/arm/vgic.c
> @@ -85,7 +85,7 @@ int domain_vgic_init(struct domain *d)
> if ( d->domain_id == 0 )
> d->arch.vgic.nr_lines = gic_number_lines() - 32;
> else
> - d->arch.vgic.nr_lines = 0; /* We don't need SPIs for the guest */
> + d->arch.vgic.nr_lines = gic_number_lines() - 32; /* We do
> need SPIs for the guest */
>
> d->arch.vgic.shared_irqs =
> xzalloc_array(struct vgic_irq_rank, DOMAIN_NR_RANKS(d));
> diff --git a/xen/common/domctl.c b/xen/common/domctl.c
> index 75e2df3..ba88901 100644
> --- a/xen/common/domctl.c
> +++ b/xen/common/domctl.c
> @@ -29,6 +29,7 @@
> #include <asm/page.h>
> #include <public/domctl.h>
> #include <xsm/xsm.h>
> +#include <asm/gic.h>
>
> static DEFINE_SPINLOCK(domctl_lock);
> DEFINE_SPINLOCK(vcpu_alloc_lock);
> @@ -782,8 +783,11 @@ long
> do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
> ret = -EINVAL;
> else if ( xsm_irq_permission(XSM_HOOK, d, pirq, allow) )
> ret = -EPERM;
> - else if ( allow )
> - ret = pirq_permit_access(d, pirq);
> + else if ( allow ) {
> + struct dt_irq irq = {pirq + NR_LOCAL_IRQS,0};
> + ret = pirq_permit_access(d, irq.irq);
> + gic_route_irq_to_guest(d, &irq, "");
> + }
> else
> ret = pirq_deny_access(d, pirq);
> }
> (END)
>
> It seems, the following patch can violate the logic about routing
> physical IRQs only to CPU0.
I forgot the smp_processor_id() in gic_route_irq_to_guest(). As this
function is only called (for upstream) when dom0 is building, only CPU0
is used.
> In gic_route_irq_to_guest() we need to call gic_set_irq_properties()
> where the one of the parameters is cpumask_of(smp_processor_id()).
> But in this part of code this function can be executed on CPU1. And as
> result this can cause to the fact that the wrong value would set to
> target CPU mask.
> Please, confirm my assumption.
> If I am right we have to add a basic HW IRQ routing to DomU in a right way.
With this current implementation, IRQ will be routed to CPU which has
done the hypercall. This CPU could be different than the CPU where the
domU (assuming we have only 1 VCPU) is running.
I think for both dom0 and domU, in case of the VCPU is pinned, we should
say use the cpumask of this VCPU.
--
Julien Grall
next prev parent reply other threads:[~2014-01-29 13:07 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-27 17:33 [PATCH v1 0/2] xen/arm: maintenance_interrupt SMP fix Oleksandr Tyshchenko
2014-01-27 17:33 ` [PATCH v1 1/2] xen/arm: Add return value to smp_call_function_interrupt function Oleksandr Tyshchenko
2014-01-27 18:28 ` Stefano Stabellini
2014-01-27 17:33 ` [PATCH v1 2/2] xen/arm: Fix deadlock in on_selected_cpus function Oleksandr Tyshchenko
2014-01-27 19:00 ` Stefano Stabellini
2014-01-28 10:03 ` Ian Campbell
2014-01-28 14:00 ` Stefano Stabellini
2014-01-28 15:05 ` Ian Campbell
2014-01-28 16:02 ` Stefano Stabellini
2014-01-28 16:12 ` Ian Campbell
2014-01-28 16:23 ` Stefano Stabellini
2014-01-28 13:58 ` Stefano Stabellini
2014-01-30 11:58 ` Oleksandr Tyshchenko
2014-01-27 17:40 ` [PATCH v1 0/2] xen/arm: maintenance_interrupt SMP fix Ian Campbell
2014-01-27 17:51 ` Julien Grall
2014-01-28 19:25 ` Oleksandr Tyshchenko
2014-01-29 10:56 ` Oleksandr Tyshchenko
2014-01-29 11:42 ` Stefano Stabellini
2014-01-29 11:46 ` Stefano Stabellini
2014-01-29 13:15 ` Julien Grall
2014-02-04 15:32 ` Julien Grall
2014-02-04 16:20 ` [PATCH] xen/arm: route irqs to cpu0 Stefano Stabellini
2014-02-04 16:32 ` Julien Grall
2014-02-04 16:56 ` Oleksandr Tyshchenko
2014-02-19 13:43 ` Julien Grall
2014-02-19 13:53 ` Ian Campbell
2014-02-19 14:15 ` George Dunlap
2014-02-20 14:52 ` Stefano Stabellini
2014-02-21 11:12 ` George Dunlap
2014-02-21 11:59 ` Julien Grall
2014-02-21 12:07 ` George Dunlap
2014-01-29 13:07 ` Julien Grall [this message]
2014-01-29 13:22 ` [PATCH v1 0/2] xen/arm: maintenance_interrupt SMP fix Stefano Stabellini
2014-01-29 18:40 ` Oleksandr Tyshchenko
2014-01-29 18:43 ` Oleksandr Tyshchenko
2014-01-29 18:49 ` Julien Grall
2014-01-29 19:54 ` Oleksandr Tyshchenko
2014-01-30 0:42 ` Julien Grall
2014-01-30 13:24 ` Stefano Stabellini
2014-01-30 15:06 ` Oleksandr Tyshchenko
2014-01-30 15:35 ` Stefano Stabellini
2014-01-30 16:10 ` Oleksandr Tyshchenko
2014-01-30 17:18 ` Stefano Stabellini
2014-01-30 19:54 ` Oleksandr Tyshchenko
2014-01-30 21:47 ` Julien Grall
2014-01-31 1:57 ` Oleksandr Tyshchenko
2014-01-29 13:12 ` Julien Grall
2014-01-29 18:55 ` Oleksandr Tyshchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52E8FD02.2060601@linaro.org \
--to=julien.grall@linaro.org \
--cc=ian.campbell@citrix.com \
--cc=oleksandr.tyshchenko@globallogic.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).