aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-02-10 16:01:25 -0500
committerThomas Gleixner <tglx@linutronix.de>2011-02-19 06:58:22 -0500
commita6967caf00ebbb2d4acdebcb72a25f2e9ba43fd2 (patch)
treefbc957bb2e34d644164d3b0df874da88fa01ec3e
parente1ef824146131709d7466e37f889f2dab24ca98e (diff)
genirq: Remove desc->status when GENERIC_HARDIRQS_NO_COMPAT=y
If everything uses the right accessors, then enabling GENERIC_HARDIRQS_NO_COMPAT should just work. If not it will tell you. Don't be lazy and use the trick which I use in the core code! git grep status_use_accessors will unearth it in a split second. Offenders are tracked down and not slapped with stinking trouts. This time we use frozen shark for a better educational value. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--include/linux/irqdesc.h6
-rw-r--r--kernel/irq/internals.h4
-rw-r--r--kernel/irq/settings.h1
3 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h
index 581d9665fd38..36c95f08023d 100644
--- a/include/linux/irqdesc.h
+++ b/include/linux/irqdesc.h
@@ -64,7 +64,11 @@ struct irq_desc {
64 unsigned int __percpu *kstat_irqs; 64 unsigned int __percpu *kstat_irqs;
65 irq_flow_handler_t handle_irq; 65 irq_flow_handler_t handle_irq;
66 struct irqaction *action; /* IRQ action list */ 66 struct irqaction *action; /* IRQ action list */
67#ifdef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
68 unsigned int status_use_accessors;
69#else
67 unsigned int status; /* IRQ status */ 70 unsigned int status; /* IRQ status */
71#endif
68 unsigned int core_internal_state__do_not_mess_with_it; 72 unsigned int core_internal_state__do_not_mess_with_it;
69 unsigned int depth; /* nested irq disables */ 73 unsigned int depth; /* nested irq disables */
70 unsigned int wake_depth; /* nested wake enables */ 74 unsigned int wake_depth; /* nested wake enables */
@@ -164,6 +168,7 @@ static inline int irq_has_action(unsigned int irq)
164 return desc->action != NULL; 168 return desc->action != NULL;
165} 169}
166 170
171#ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
167static inline int irq_balancing_disabled(unsigned int irq) 172static inline int irq_balancing_disabled(unsigned int irq)
168{ 173{
169 struct irq_desc *desc; 174 struct irq_desc *desc;
@@ -171,6 +176,7 @@ static inline int irq_balancing_disabled(unsigned int irq)
171 desc = irq_to_desc(irq); 176 desc = irq_to_desc(irq);
172 return desc->status & IRQ_NO_BALANCING_MASK; 177 return desc->status & IRQ_NO_BALANCING_MASK;
173} 178}
179#endif
174 180
175/* caller has locked the irq_desc and both params are valid */ 181/* caller has locked the irq_desc and both params are valid */
176static inline void __set_irq_handler_unlocked(int irq, 182static inline void __set_irq_handler_unlocked(int irq,
diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h
index 5e2366da9f38..fd5777ab2d34 100644
--- a/kernel/irq/internals.h
+++ b/kernel/irq/internals.h
@@ -15,6 +15,10 @@
15 15
16#define istate core_internal_state__do_not_mess_with_it 16#define istate core_internal_state__do_not_mess_with_it
17 17
18#ifdef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
19# define status status_use_accessors
20#endif
21
18extern int noirqdebug; 22extern int noirqdebug;
19 23
20/* 24/*
diff --git a/kernel/irq/settings.h b/kernel/irq/settings.h
index 55ebe1e09da4..0227ad358272 100644
--- a/kernel/irq/settings.h
+++ b/kernel/irq/settings.h
@@ -134,4 +134,5 @@ static inline bool irq_settings_is_nested_thread(struct irq_desc *desc)
134} 134}
135 135
136/* Nothing should touch desc->status from now on */ 136/* Nothing should touch desc->status from now on */
137#undef status
137#define status USE_THE_PROPER_WRAPPERS_YOU_MORON 138#define status USE_THE_PROPER_WRAPPERS_YOU_MORON