* [PATCH V2 2/2] irqchip/gic: Only populate set_affinity for the root controller
2015-12-22 12:09 [PATCH V2 1/2] irqchip/gic: Remove static irq_chip definition for eoimode1 Jon Hunter
@ 2015-12-22 12:09 ` Jon Hunter
2016-01-11 10:14 ` [PATCH V2 1/2] irqchip/gic: Remove static irq_chip definition for eoimode1 Jon Hunter
2016-01-11 10:44 ` Marc Zyngier
2 siblings, 0 replies; 4+ messages in thread
From: Jon Hunter @ 2015-12-22 12:09 UTC (permalink / raw)
To: Thomas Gleixner, Jason Cooper, Marc Zyngier; +Cc: linux-kernel, Jon Hunter
Setting the affinity of an IRQ, it only applicable for the root
interrupt controller and so only populate this operator for the root
controller.
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---
V2 changes:
- Fixed compilation error with !SMP
drivers/irqchip/irq-gic.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index 94ad60c424a7..9df912db4105 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -384,9 +384,6 @@ static struct irq_chip gic_chip = {
.irq_unmask = gic_unmask_irq,
.irq_eoi = gic_eoi_irq,
.irq_set_type = gic_set_type,
-#ifdef CONFIG_SMP
- .irq_set_affinity = gic_set_affinity,
-#endif
.irq_get_irqchip_state = gic_irq_get_irqchip_state,
.irq_set_irqchip_state = gic_irq_set_irqchip_state,
.flags = IRQCHIP_SET_TYPE_MASKED |
@@ -1017,10 +1014,17 @@ static void __init __gic_init_bases(unsigned int gic_nr, int irq_start,
gic->chip.name = kasprintf(GFP_KERNEL, "GIC-%d", gic_nr);
/* Initialize irq_chip */
- if (static_key_true(&supports_deactivate) && gic_nr == 0) {
- gic->chip.irq_mask = gic_eoimode1_mask_irq;
- gic->chip.irq_eoi = gic_eoimode1_eoi_irq;
- gic->chip.irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity;
+ if (gic_nr == 0) {
+#ifdef CONFIG_SMP
+ gic->chip.irq_set_affinity = gic_set_affinity;
+#endif
+
+ if (static_key_true(&supports_deactivate)) {
+ gic->chip.irq_mask = gic_eoimode1_mask_irq;
+ gic->chip.irq_eoi = gic_eoimode1_eoi_irq;
+ gic->chip.irq_set_vcpu_affinity =
+ gic_irq_set_vcpu_affinity;
+ }
}
#ifdef CONFIG_GIC_NON_BANKED
--
2.1.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH V2 1/2] irqchip/gic: Remove static irq_chip definition for eoimode1
2015-12-22 12:09 [PATCH V2 1/2] irqchip/gic: Remove static irq_chip definition for eoimode1 Jon Hunter
2015-12-22 12:09 ` [PATCH V2 2/2] irqchip/gic: Only populate set_affinity for the root controller Jon Hunter
@ 2016-01-11 10:14 ` Jon Hunter
2016-01-11 10:44 ` Marc Zyngier
2 siblings, 0 replies; 4+ messages in thread
From: Jon Hunter @ 2016-01-11 10:14 UTC (permalink / raw)
To: Marc Zyngier; +Cc: Thomas Gleixner, Jason Cooper, linux-kernel
Hi Mark,
Any comment on these patches?
Cheers
Jon
On 22/12/15 12:09, Jon Hunter wrote:
> There are only 3 differences (not including the name) in the definitions
> of the gic_chip and gic_eoimode1_chip structures. Instead of statically
> defining the gic_eoimode1_chip structure, remove it and populate the
> eoimode1 functions dynamically for the appropriate GIC irqchips.
>
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
> drivers/irqchip/irq-gic.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
> index fcbe0b90870d..94ad60c424a7 100644
> --- a/drivers/irqchip/irq-gic.c
> +++ b/drivers/irqchip/irq-gic.c
> @@ -394,23 +394,6 @@ static struct irq_chip gic_chip = {
> IRQCHIP_MASK_ON_SUSPEND,
> };
>
> -static struct irq_chip gic_eoimode1_chip = {
> - .name = "GICv2",
> - .irq_mask = gic_eoimode1_mask_irq,
> - .irq_unmask = gic_unmask_irq,
> - .irq_eoi = gic_eoimode1_eoi_irq,
> - .irq_set_type = gic_set_type,
> -#ifdef CONFIG_SMP
> - .irq_set_affinity = gic_set_affinity,
> -#endif
> - .irq_get_irqchip_state = gic_irq_get_irqchip_state,
> - .irq_set_irqchip_state = gic_irq_set_irqchip_state,
> - .irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity,
> - .flags = IRQCHIP_SET_TYPE_MASKED |
> - IRQCHIP_SKIP_SET_WAKE |
> - IRQCHIP_MASK_ON_SUSPEND,
> -};
> -
> void __init gic_cascade_irq(unsigned int gic_nr, unsigned int irq)
> {
> BUG_ON(gic_nr >= CONFIG_ARM_GIC_MAX_NR);
> @@ -1030,13 +1013,14 @@ static void __init __gic_init_bases(unsigned int gic_nr, int irq_start,
> gic_check_cpu_features();
>
> gic = &gic_data[gic_nr];
> + gic->chip = gic_chip;
> + gic->chip.name = kasprintf(GFP_KERNEL, "GIC-%d", gic_nr);
>
> /* Initialize irq_chip */
> if (static_key_true(&supports_deactivate) && gic_nr == 0) {
> - gic->chip = gic_eoimode1_chip;
> - } else {
> - gic->chip = gic_chip;
> - gic->chip.name = kasprintf(GFP_KERNEL, "GIC-%d", gic_nr);
> + gic->chip.irq_mask = gic_eoimode1_mask_irq;
> + gic->chip.irq_eoi = gic_eoimode1_eoi_irq;
> + gic->chip.irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity;
> }
>
> #ifdef CONFIG_GIC_NON_BANKED
>
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH V2 1/2] irqchip/gic: Remove static irq_chip definition for eoimode1
2015-12-22 12:09 [PATCH V2 1/2] irqchip/gic: Remove static irq_chip definition for eoimode1 Jon Hunter
2015-12-22 12:09 ` [PATCH V2 2/2] irqchip/gic: Only populate set_affinity for the root controller Jon Hunter
2016-01-11 10:14 ` [PATCH V2 1/2] irqchip/gic: Remove static irq_chip definition for eoimode1 Jon Hunter
@ 2016-01-11 10:44 ` Marc Zyngier
2 siblings, 0 replies; 4+ messages in thread
From: Marc Zyngier @ 2016-01-11 10:44 UTC (permalink / raw)
To: Jon Hunter, Thomas Gleixner, Jason Cooper; +Cc: linux-kernel
On 22/12/15 12:09, Jon Hunter wrote:
> There are only 3 differences (not including the name) in the definitions
> of the gic_chip and gic_eoimode1_chip structures. Instead of statically
> defining the gic_eoimode1_chip structure, remove it and populate the
> eoimode1 functions dynamically for the appropriate GIC irqchips.
>
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
> drivers/irqchip/irq-gic.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
> index fcbe0b90870d..94ad60c424a7 100644
> --- a/drivers/irqchip/irq-gic.c
> +++ b/drivers/irqchip/irq-gic.c
> @@ -394,23 +394,6 @@ static struct irq_chip gic_chip = {
> IRQCHIP_MASK_ON_SUSPEND,
> };
>
> -static struct irq_chip gic_eoimode1_chip = {
> - .name = "GICv2",
> - .irq_mask = gic_eoimode1_mask_irq,
> - .irq_unmask = gic_unmask_irq,
> - .irq_eoi = gic_eoimode1_eoi_irq,
> - .irq_set_type = gic_set_type,
> -#ifdef CONFIG_SMP
> - .irq_set_affinity = gic_set_affinity,
> -#endif
> - .irq_get_irqchip_state = gic_irq_get_irqchip_state,
> - .irq_set_irqchip_state = gic_irq_set_irqchip_state,
> - .irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity,
> - .flags = IRQCHIP_SET_TYPE_MASKED |
> - IRQCHIP_SKIP_SET_WAKE |
> - IRQCHIP_MASK_ON_SUSPEND,
> -};
> -
> void __init gic_cascade_irq(unsigned int gic_nr, unsigned int irq)
> {
> BUG_ON(gic_nr >= CONFIG_ARM_GIC_MAX_NR);
> @@ -1030,13 +1013,14 @@ static void __init __gic_init_bases(unsigned int gic_nr, int irq_start,
> gic_check_cpu_features();
>
> gic = &gic_data[gic_nr];
> + gic->chip = gic_chip;
> + gic->chip.name = kasprintf(GFP_KERNEL, "GIC-%d", gic_nr);
I'd really like to keep GICv2 being displayed when the GIC is in
EOIMode==1, as it has proved to be a valuable debugging information in
the recent past.
>
> /* Initialize irq_chip */
> if (static_key_true(&supports_deactivate) && gic_nr == 0) {
> - gic->chip = gic_eoimode1_chip;
> - } else {
> - gic->chip = gic_chip;
> - gic->chip.name = kasprintf(GFP_KERNEL, "GIC-%d", gic_nr);
> + gic->chip.irq_mask = gic_eoimode1_mask_irq;
> + gic->chip.irq_eoi = gic_eoimode1_eoi_irq;
> + gic->chip.irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity;
> }
>
> #ifdef CONFIG_GIC_NON_BANKED
>
Other than that, I'm fine with that change (as well as the following one).
Thanks,
M.
--
Jazz is not dead. It just smells funny...
^ permalink raw reply [flat|nested] 4+ messages in thread