From: Julien Grall <julien.grall@arm.com>
To: xen-devel@lists.xen.org
Cc: sstabellini@kernel.org, steve.capper@arm.com,
Julien Grall <julien.grall@arm.com>,
shannon.zhao@linaro.org, shankerd@codeaurora.org,
wei.chen@linaro.org
Subject: [PATCH v3 2/9] xen/arm: gic: Do not configure affinity during routing
Date: Wed, 27 Jul 2016 14:58:23 +0100 [thread overview]
Message-ID: <1469627910-3902-3-git-send-email-julien.grall@arm.com> (raw)
In-Reply-To: <1469627910-3902-1-git-send-email-julien.grall@arm.com>
The affinity of a guest IRQ is set every time the guest enable it (see
vgic_enable_irqs).
It is not necessary to set the affinity when the IRQ is routed to the
guest because Xen will never receive the IRQ until it hass been enabled
by the guest.
To keep gic_route_irq_to_{xen,guest} behaving the same way (i.e just
setting up the routing), the affinity of IRQ routed to Xen is moved into
__setup_irq.
Signed-off-by: Julien grall <julien.grall@arm.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
---
Changes in v3:
- Add Stefano's reviewed-by
Changes in v2:
- Patch renamed
- Set the affinity for IRQ routed to Xen in __setup_irq
---
xen/arch/arm/gic.c | 11 +++--------
xen/arch/arm/irq.c | 4 ++--
xen/include/asm-arm/gic.h | 3 +--
3 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
index 5726a05..bc814a0 100644
--- a/xen/arch/arm/gic.c
+++ b/xen/arch/arm/gic.c
@@ -97,24 +97,19 @@ void gic_restore_state(struct vcpu *v)
}
/*
- * needs to be called with a valid cpu_mask, ie each cpu in the mask has
- * already called gic_cpu_init
* - desc.lock must be held
* - arch.type must be valid (i.e != IRQ_TYPE_INVALID)
*/
static void gic_set_irq_properties(struct irq_desc *desc,
- const cpumask_t *cpu_mask,
unsigned int priority)
{
gic_hw_ops->set_irq_properties(desc, priority);
- desc->handler->set_affinity(desc, cpu_mask);
}
/* Program the GIC to route an interrupt to the host (i.e. Xen)
* - needs to be called with desc.lock held
*/
-void gic_route_irq_to_xen(struct irq_desc *desc, const cpumask_t *cpu_mask,
- unsigned int priority)
+void gic_route_irq_to_xen(struct irq_desc *desc, unsigned int priority)
{
ASSERT(priority <= 0xff); /* Only 8 bits of priority */
ASSERT(desc->irq < gic_number_lines());/* Can't route interrupts that don't exist */
@@ -123,7 +118,7 @@ void gic_route_irq_to_xen(struct irq_desc *desc, const cpumask_t *cpu_mask,
desc->handler = gic_hw_ops->gic_host_irq_type;
- gic_set_irq_properties(desc, cpu_mask, priority);
+ gic_set_irq_properties(desc, priority);
}
/* Program the GIC to route an interrupt to a guest
@@ -155,7 +150,7 @@ int gic_route_irq_to_guest(struct domain *d, unsigned int virq,
desc->handler = gic_hw_ops->gic_guest_irq_type;
set_bit(_IRQ_GUEST, &desc->status);
- gic_set_irq_properties(desc, cpumask_of(v_target->processor), priority);
+ gic_set_irq_properties(desc, priority);
p->desc = desc;
res = 0;
diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c
index 2f8af72..3fc22f2 100644
--- a/xen/arch/arm/irq.c
+++ b/xen/arch/arm/irq.c
@@ -370,6 +370,7 @@ int setup_irq(unsigned int irq, unsigned int irqflags, struct irqaction *new)
/* First time the IRQ is setup */
if ( disabled )
{
+ gic_route_irq_to_xen(desc, GIC_PRI_IRQ);
/* It's fine to use smp_processor_id() because:
* For PPI: irq_desc is banked
* For SPI: we don't care for now which CPU will receive the
@@ -377,8 +378,7 @@ int setup_irq(unsigned int irq, unsigned int irqflags, struct irqaction *new)
* TODO: Handle case where SPI is setup on different CPU than
* the targeted CPU and the priority.
*/
- gic_route_irq_to_xen(desc, cpumask_of(smp_processor_id()),
- GIC_PRI_IRQ);
+ irq_set_affinity(desc, cpumask_of(smp_processor_id()));
desc->handler->startup(desc);
}
diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h
index 2fc6126..7ba3846 100644
--- a/xen/include/asm-arm/gic.h
+++ b/xen/include/asm-arm/gic.h
@@ -223,8 +223,7 @@ enum gic_version {
extern enum gic_version gic_hw_version(void);
/* Program the GIC to route an interrupt */
-extern void gic_route_irq_to_xen(struct irq_desc *desc, const cpumask_t *cpu_mask,
- unsigned int priority);
+extern void gic_route_irq_to_xen(struct irq_desc *desc, unsigned int priority);
extern int gic_route_irq_to_guest(struct domain *, unsigned int virq,
struct irq_desc *desc,
unsigned int priority);
--
1.9.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-07-27 13:58 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-27 13:58 [PATCH v3 0/9] xen/arm: Support SPIs routing Julien Grall
2016-07-27 13:58 ` [PATCH v3 1/9] xen/arm: gic: Consolidate the IRQ affinity set in a single place Julien Grall
2016-07-27 13:58 ` Julien Grall [this message]
2016-07-27 13:58 ` [PATCH v3 3/9] xen/arm: gic: split set_irq_properties Julien Grall
2016-07-27 13:58 ` [PATCH v3 4/9] xen/arm: gic: set_type: Pass the type in parameter rather than in desc->arch.type Julien Grall
2016-07-27 13:58 ` [PATCH v3 5/9] xen/arm: gic: Document how gic_set_irq_type should be called Julien Grall
2016-07-27 13:58 ` [PATCH v3 6/9] Revert "xen/arm: warn the user that we cannot route SPIs to Dom0 on ACPI" Julien Grall
2016-07-27 13:58 ` [PATCH v3 7/9] xen/arm: Allow DOM0 to set the IRQ type Julien Grall
2016-07-27 19:22 ` Stefano Stabellini
2016-07-27 13:58 ` [PATCH v3 8/9] xen/arm: acpi: route all unused IRQs to DOM0 Julien Grall
2016-07-27 13:58 ` [PATCH v3 9/9] xen/arm: Fix coding style and update comment in acpi_route_spis Julien Grall
2016-07-27 19:27 ` [PATCH v3 0/9] xen/arm: Support SPIs routing Stefano Stabellini
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=1469627910-3902-3-git-send-email-julien.grall@arm.com \
--to=julien.grall@arm.com \
--cc=shankerd@codeaurora.org \
--cc=shannon.zhao@linaro.org \
--cc=sstabellini@kernel.org \
--cc=steve.capper@arm.com \
--cc=wei.chen@linaro.org \
--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).