diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2016-02-11 05:47:55 -0500 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2016-02-11 05:47:55 -0500 |
| commit | 49b245efab4498575379a36cfab9d7373df3b69a (patch) | |
| tree | 5a046e3c634ce678ac7c73e2293bc485024e8eb1 | |
| parent | 1a485f4d2e28efd77075b2952926683d6c245633 (diff) | |
| parent | 1a1ebd5fb1e203ee8cc73508cc7a38ac4b804596 (diff) | |
Merge tag 'gic-fixes-4.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/urgent
Pull GIC fixes from Marc for 4.5-rc4:
- Two fixes addressing cascaded GICv1/GICv2 (affinity setting, EOImode)
- One fix addressing possible missed interrupts on GICv3
| -rw-r--r-- | arch/arm64/include/asm/arch_gicv3.h | 1 | ||||
| -rw-r--r-- | drivers/irqchip/irq-gic.c | 13 |
2 files changed, 7 insertions, 7 deletions
diff --git a/arch/arm64/include/asm/arch_gicv3.h b/arch/arm64/include/asm/arch_gicv3.h index 2731d3b25ed2..8ec88e5b290f 100644 --- a/arch/arm64/include/asm/arch_gicv3.h +++ b/arch/arm64/include/asm/arch_gicv3.h | |||
| @@ -103,6 +103,7 @@ static inline u64 gic_read_iar_common(void) | |||
| 103 | u64 irqstat; | 103 | u64 irqstat; |
| 104 | 104 | ||
| 105 | asm volatile("mrs_s %0, " __stringify(ICC_IAR1_EL1) : "=r" (irqstat)); | 105 | asm volatile("mrs_s %0, " __stringify(ICC_IAR1_EL1) : "=r" (irqstat)); |
| 106 | dsb(sy); | ||
| 106 | return irqstat; | 107 | return irqstat; |
| 107 | } | 108 | } |
| 108 | 109 | ||
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c index 911758c056c1..8f9ebf714e2b 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c | |||
| @@ -384,9 +384,6 @@ static struct irq_chip gic_chip = { | |||
| 384 | .irq_unmask = gic_unmask_irq, | 384 | .irq_unmask = gic_unmask_irq, |
| 385 | .irq_eoi = gic_eoi_irq, | 385 | .irq_eoi = gic_eoi_irq, |
| 386 | .irq_set_type = gic_set_type, | 386 | .irq_set_type = gic_set_type, |
| 387 | #ifdef CONFIG_SMP | ||
| 388 | .irq_set_affinity = gic_set_affinity, | ||
| 389 | #endif | ||
| 390 | .irq_get_irqchip_state = gic_irq_get_irqchip_state, | 387 | .irq_get_irqchip_state = gic_irq_get_irqchip_state, |
| 391 | .irq_set_irqchip_state = gic_irq_set_irqchip_state, | 388 | .irq_set_irqchip_state = gic_irq_set_irqchip_state, |
| 392 | .flags = IRQCHIP_SET_TYPE_MASKED | | 389 | .flags = IRQCHIP_SET_TYPE_MASKED | |
| @@ -400,9 +397,6 @@ static struct irq_chip gic_eoimode1_chip = { | |||
| 400 | .irq_unmask = gic_unmask_irq, | 397 | .irq_unmask = gic_unmask_irq, |
| 401 | .irq_eoi = gic_eoimode1_eoi_irq, | 398 | .irq_eoi = gic_eoimode1_eoi_irq, |
| 402 | .irq_set_type = gic_set_type, | 399 | .irq_set_type = gic_set_type, |
| 403 | #ifdef CONFIG_SMP | ||
| 404 | .irq_set_affinity = gic_set_affinity, | ||
| 405 | #endif | ||
| 406 | .irq_get_irqchip_state = gic_irq_get_irqchip_state, | 400 | .irq_get_irqchip_state = gic_irq_get_irqchip_state, |
| 407 | .irq_set_irqchip_state = gic_irq_set_irqchip_state, | 401 | .irq_set_irqchip_state = gic_irq_set_irqchip_state, |
| 408 | .irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity, | 402 | .irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity, |
| @@ -443,7 +437,7 @@ static void gic_cpu_if_up(struct gic_chip_data *gic) | |||
| 443 | u32 bypass = 0; | 437 | u32 bypass = 0; |
| 444 | u32 mode = 0; | 438 | u32 mode = 0; |
| 445 | 439 | ||
| 446 | if (static_key_true(&supports_deactivate)) | 440 | if (gic == &gic_data[0] && static_key_true(&supports_deactivate)) |
| 447 | mode = GIC_CPU_CTRL_EOImodeNS; | 441 | mode = GIC_CPU_CTRL_EOImodeNS; |
| 448 | 442 | ||
| 449 | /* | 443 | /* |
| @@ -1039,6 +1033,11 @@ static void __init __gic_init_bases(unsigned int gic_nr, int irq_start, | |||
| 1039 | gic->chip.name = kasprintf(GFP_KERNEL, "GIC-%d", gic_nr); | 1033 | gic->chip.name = kasprintf(GFP_KERNEL, "GIC-%d", gic_nr); |
| 1040 | } | 1034 | } |
| 1041 | 1035 | ||
| 1036 | #ifdef CONFIG_SMP | ||
| 1037 | if (gic_nr == 0) | ||
| 1038 | gic->chip.irq_set_affinity = gic_set_affinity; | ||
| 1039 | #endif | ||
| 1040 | |||
| 1042 | #ifdef CONFIG_GIC_NON_BANKED | 1041 | #ifdef CONFIG_GIC_NON_BANKED |
| 1043 | if (percpu_offset) { /* Frankein-GIC without banked registers... */ | 1042 | if (percpu_offset) { /* Frankein-GIC without banked registers... */ |
| 1044 | unsigned int cpu; | 1043 | unsigned int cpu; |
