Commit bd151412263a67b5321e9dd1d5b4bf6d96fdebf3

Authored by Thomas Gleixner
1 parent 21e2b8c62c

genirq: Provide config option to disable deprecated code

This option covers now the old chip functions and the irq_desc data
fields which are moving to struct irq_data. More stuff will follow.

Pretty handy for testing a conversion, whether something broke or not.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@elte.hu>

Showing 6 changed files with 39 additions and 6 deletions Side-by-side Diff

... ... @@ -155,6 +155,7 @@
155 155 */
156 156 struct irq_chip {
157 157 const char *name;
  158 +#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
158 159 unsigned int (*startup)(unsigned int irq);
159 160 void (*shutdown)(unsigned int irq);
160 161 void (*enable)(unsigned int irq);
... ... @@ -175,7 +176,7 @@
175 176  
176 177 void (*bus_lock)(unsigned int irq);
177 178 void (*bus_sync_unlock)(unsigned int irq);
178   -
  179 +#endif
179 180 unsigned int (*irq_startup)(struct irq_data *data);
180 181 void (*irq_shutdown)(struct irq_data *data);
181 182 void (*irq_enable)(struct irq_data *data);
... ... @@ -225,6 +226,9 @@
225 226 */
226 227 struct irq_desc {
227 228  
  229 +#ifdef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
  230 + struct irq_data irq_data;
  231 +#else
228 232 /*
229 233 * This union will go away, once we fixed the direct access to
230 234 * irq_desc all over the place. The direct fields are a 1:1
... ... @@ -247,6 +251,8 @@
247 251 #endif
248 252 };
249 253 };
  254 +#endif
  255 +
250 256 struct timer_rand_state *timer_rand_state;
251 257 unsigned int *kstat_irqs;
252 258 irq_flow_handler_t handle_irq;
... ... @@ -12,6 +12,10 @@
12 12 config GENERIC_HARDIRQS_NO__DO_IRQ
13 13 def_bool y
14 14  
  15 +# Select this to disable the deprecated stuff
  16 +config GENERIC_HARDIRQS_NO_DEPRECATED
  17 + def_bool n
  18 +
15 19 # Options selectable by the architecture code
16 20 config HAVE_SPARSE_IRQ
17 21 def_bool n
... ... @@ -324,6 +324,7 @@
324 324 desc->status |= IRQ_MASKED;
325 325 }
326 326  
  327 +#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
327 328 /* Temporary migration helpers */
328 329 static void compat_irq_mask(struct irq_data *data)
329 330 {
330 331  
... ... @@ -400,12 +401,14 @@
400 401 {
401 402 data->chip->bus_sync_unlock(data->irq);
402 403 }
  404 +#endif
403 405  
404 406 /*
405 407 * Fixup enable/disable function pointers
406 408 */
407 409 void irq_chip_set_defaults(struct irq_chip *chip)
408 410 {
  411 +#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
409 412 /*
410 413 * Compat fixup functions need to be before we set the
411 414 * defaults for enable/disable/startup/shutdown
... ... @@ -418,7 +421,7 @@
418 421 chip->irq_shutdown = compat_irq_shutdown;
419 422 if (chip->startup)
420 423 chip->irq_startup = compat_irq_startup;
421   -
  424 +#endif
422 425 /*
423 426 * The real defaults
424 427 */
... ... @@ -437,6 +440,8 @@
437 440 if (!chip->irq_shutdown)
438 441 chip->irq_shutdown = chip->irq_disable != default_disable ?
439 442 chip->irq_disable : default_shutdown;
  443 +
  444 +#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
440 445 if (!chip->end)
441 446 chip->end = dummy_irq_chip.end;
442 447  
... ... @@ -465,6 +470,7 @@
465 470 chip->irq_set_wake = compat_irq_set_wake;
466 471 if (chip->retrigger)
467 472 chip->irq_retrigger = compat_irq_retrigger;
  473 +#endif
468 474 }
469 475  
470 476 static inline void mask_ack_irq(struct irq_desc *desc)
... ... @@ -309,7 +309,12 @@
309 309 return 0;
310 310 }
311 311  
  312 +#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
312 313 static void compat_noop(unsigned int irq) { }
  314 +#define END_INIT .end = compat_noop
  315 +#else
  316 +#define END_INIT
  317 +#endif
313 318  
314 319 /*
315 320 * Generic no controller implementation
... ... @@ -321,7 +326,7 @@
321 326 .irq_enable = noop,
322 327 .irq_disable = noop,
323 328 .irq_ack = ack_bad,
324   - .end = compat_noop,
  329 + END_INIT
325 330 };
326 331  
327 332 /*
... ... @@ -337,7 +342,7 @@
337 342 .irq_ack = noop,
338 343 .irq_mask = noop,
339 344 .irq_unmask = noop,
340   - .end = compat_noop,
  345 + END_INIT
341 346 };
342 347  
343 348 /*
kernel/irq/internals.h
... ... @@ -42,6 +42,16 @@
42 42  
43 43 extern void irq_set_thread_affinity(struct irq_desc *desc);
44 44  
  45 +#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
  46 +static inline void irq_end(unsigned int irq, struct irq_desc *desc)
  47 +{
  48 + if (desc->irq_data.chip && desc->irq_data.chip->end)
  49 + desc->irq_data.chip->end(irq);
  50 +}
  51 +#else
  52 +static inline void irq_end(unsigned int irq, struct irq_desc *desc) { }
  53 +#endif
  54 +
45 55 /* Inline functions for support of irq chips on slow busses */
46 56 static inline void chip_bus_lock(struct irq_desc *desc)
47 57 {
kernel/irq/spurious.c
... ... @@ -14,6 +14,8 @@
14 14 #include <linux/moduleparam.h>
15 15 #include <linux/timer.h>
16 16  
  17 +#include "internals.h"
  18 +
17 19 static int irqfixup __read_mostly;
18 20  
19 21 #define POLL_SPURIOUS_IRQ_INTERVAL (HZ/10)
... ... @@ -78,8 +80,8 @@
78 80 * If we did actual work for the real IRQ line we must let the
79 81 * IRQ controller clean up too
80 82 */
81   - if (work && desc->irq_data.chip && desc->irq_data.chip->end)
82   - desc->irq_data.chip->end(irq);
  83 + if (work)
  84 + irq_end(irq, desc);
83 85 raw_spin_unlock(&desc->lock);
84 86  
85 87 return ok;