Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq updates from Thomas Gleixner:
"Two patches from the irq departement:

- a simple fix to make dummy_irq_chip usable for wakeup scenarios

- removal of the gic arch_extn hackery. Now that all users are
converted we really want to get rid of the interface so people wont
come up with new use cases"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip: gic: Drop support for gic_arch_extn
genirq: Set IRQCHIP_SKIP_SET_WAKE flag for dummy_irq_chip

+2 -72
+1 -70
drivers/irqchip/irq-gic.c
··· 82 82 #define NR_GIC_CPU_IF 8 83 83 static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly; 84 84 85 - /* 86 - * Supported arch specific GIC irq extension. 87 - * Default make them NULL. 88 - */ 89 - struct irq_chip gic_arch_extn = { 90 - .irq_eoi = NULL, 91 - .irq_mask = NULL, 92 - .irq_unmask = NULL, 93 - .irq_retrigger = NULL, 94 - .irq_set_type = NULL, 95 - .irq_set_wake = NULL, 96 - }; 97 - 98 85 #ifndef MAX_GIC_NR 99 86 #define MAX_GIC_NR 1 100 87 #endif ··· 154 167 155 168 static void gic_mask_irq(struct irq_data *d) 156 169 { 157 - unsigned long flags; 158 - 159 - raw_spin_lock_irqsave(&irq_controller_lock, flags); 160 170 gic_poke_irq(d, GIC_DIST_ENABLE_CLEAR); 161 - if (gic_arch_extn.irq_mask) 162 - gic_arch_extn.irq_mask(d); 163 - raw_spin_unlock_irqrestore(&irq_controller_lock, flags); 164 171 } 165 172 166 173 static void gic_unmask_irq(struct irq_data *d) 167 174 { 168 - unsigned long flags; 169 - 170 - raw_spin_lock_irqsave(&irq_controller_lock, flags); 171 - if (gic_arch_extn.irq_unmask) 172 - gic_arch_extn.irq_unmask(d); 173 175 gic_poke_irq(d, GIC_DIST_ENABLE_SET); 174 - raw_spin_unlock_irqrestore(&irq_controller_lock, flags); 175 176 } 176 177 177 178 static void gic_eoi_irq(struct irq_data *d) 178 179 { 179 - if (gic_arch_extn.irq_eoi) { 180 - raw_spin_lock(&irq_controller_lock); 181 - gic_arch_extn.irq_eoi(d); 182 - raw_spin_unlock(&irq_controller_lock); 183 - } 184 - 185 180 writel_relaxed(gic_irq(d), gic_cpu_base(d) + GIC_CPU_EOI); 186 181 } 187 182 ··· 220 251 { 221 252 void __iomem *base = gic_dist_base(d); 222 253 unsigned int gicirq = gic_irq(d); 223 - unsigned long flags; 224 - int ret; 225 254 226 255 /* Interrupt configuration for SGIs can't be changed */ 227 256 if (gicirq < 16) ··· 230 263 type != IRQ_TYPE_EDGE_RISING) 231 264 return -EINVAL; 232 265 233 - raw_spin_lock_irqsave(&irq_controller_lock, flags); 234 - 235 - if (gic_arch_extn.irq_set_type) 236 - gic_arch_extn.irq_set_type(d, type); 237 - 238 - ret = gic_configure_irq(gicirq, type, base, NULL); 239 - 240 - raw_spin_unlock_irqrestore(&irq_controller_lock, flags); 241 - 242 - return ret; 243 - } 244 - 245 - static int gic_retrigger(struct irq_data *d) 246 - { 247 - if (gic_arch_extn.irq_retrigger) 248 - return gic_arch_extn.irq_retrigger(d); 249 - 250 - /* the genirq layer expects 0 if we can't retrigger in hardware */ 251 - return 0; 266 + return gic_configure_irq(gicirq, type, base, NULL); 252 267 } 253 268 254 269 #ifdef CONFIG_SMP ··· 259 310 260 311 return IRQ_SET_MASK_OK; 261 312 } 262 - #endif 263 - 264 - #ifdef CONFIG_PM 265 - static int gic_set_wake(struct irq_data *d, unsigned int on) 266 - { 267 - int ret = -ENXIO; 268 - 269 - if (gic_arch_extn.irq_set_wake) 270 - ret = gic_arch_extn.irq_set_wake(d, on); 271 - 272 - return ret; 273 - } 274 - 275 - #else 276 - #define gic_set_wake NULL 277 313 #endif 278 314 279 315 static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) ··· 319 385 .irq_unmask = gic_unmask_irq, 320 386 .irq_eoi = gic_eoi_irq, 321 387 .irq_set_type = gic_set_type, 322 - .irq_retrigger = gic_retrigger, 323 388 #ifdef CONFIG_SMP 324 389 .irq_set_affinity = gic_set_affinity, 325 390 #endif 326 - .irq_set_wake = gic_set_wake, 327 391 .irq_get_irqchip_state = gic_irq_get_irqchip_state, 328 392 .irq_set_irqchip_state = gic_irq_set_irqchip_state, 329 393 }; ··· 987 1055 set_handle_irq(gic_handle_irq); 988 1056 } 989 1057 990 - gic_chip.flags |= gic_arch_extn.flags; 991 1058 gic_dist_init(gic); 992 1059 gic_cpu_init(gic); 993 1060 gic_pm_init(gic);
-2
include/linux/irqchip/arm-gic.h
··· 95 95 96 96 struct device_node; 97 97 98 - extern struct irq_chip gic_arch_extn; 99 - 100 98 void gic_set_irqchip_flags(unsigned long flags); 101 99 void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, 102 100 u32 offset, struct device_node *);
+1
kernel/irq/dummychip.c
··· 57 57 .irq_ack = noop, 58 58 .irq_mask = noop, 59 59 .irq_unmask = noop, 60 + .flags = IRQCHIP_SKIP_SET_WAKE, 60 61 }; 61 62 EXPORT_SYMBOL_GPL(dummy_irq_chip);