diff options
Diffstat (limited to 'include/linux/irq.h')
-rw-r--r-- | include/linux/irq.h | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h index 11bf09288ddb..3c1c96786248 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -67,11 +67,12 @@ enum irqchip_irq_state; | |||
67 | * request/setup_irq() | 67 | * request/setup_irq() |
68 | * IRQ_NO_BALANCING - Interrupt cannot be balanced (affinity set) | 68 | * IRQ_NO_BALANCING - Interrupt cannot be balanced (affinity set) |
69 | * IRQ_MOVE_PCNTXT - Interrupt can be migrated from process context | 69 | * IRQ_MOVE_PCNTXT - Interrupt can be migrated from process context |
70 | * IRQ_NESTED_TRHEAD - Interrupt nests into another thread | 70 | * IRQ_NESTED_THREAD - Interrupt nests into another thread |
71 | * IRQ_PER_CPU_DEVID - Dev_id is a per-cpu variable | 71 | * IRQ_PER_CPU_DEVID - Dev_id is a per-cpu variable |
72 | * IRQ_IS_POLLED - Always polled by another interrupt. Exclude | 72 | * IRQ_IS_POLLED - Always polled by another interrupt. Exclude |
73 | * it from the spurious interrupt detection | 73 | * it from the spurious interrupt detection |
74 | * mechanism and from core side polling. | 74 | * mechanism and from core side polling. |
75 | * IRQ_DISABLE_UNLAZY - Disable lazy irq disable | ||
75 | */ | 76 | */ |
76 | enum { | 77 | enum { |
77 | IRQ_TYPE_NONE = 0x00000000, | 78 | IRQ_TYPE_NONE = 0x00000000, |
@@ -97,13 +98,14 @@ enum { | |||
97 | IRQ_NOTHREAD = (1 << 16), | 98 | IRQ_NOTHREAD = (1 << 16), |
98 | IRQ_PER_CPU_DEVID = (1 << 17), | 99 | IRQ_PER_CPU_DEVID = (1 << 17), |
99 | IRQ_IS_POLLED = (1 << 18), | 100 | IRQ_IS_POLLED = (1 << 18), |
101 | IRQ_DISABLE_UNLAZY = (1 << 19), | ||
100 | }; | 102 | }; |
101 | 103 | ||
102 | #define IRQF_MODIFY_MASK \ | 104 | #define IRQF_MODIFY_MASK \ |
103 | (IRQ_TYPE_SENSE_MASK | IRQ_NOPROBE | IRQ_NOREQUEST | \ | 105 | (IRQ_TYPE_SENSE_MASK | IRQ_NOPROBE | IRQ_NOREQUEST | \ |
104 | IRQ_NOAUTOEN | IRQ_MOVE_PCNTXT | IRQ_LEVEL | IRQ_NO_BALANCING | \ | 106 | IRQ_NOAUTOEN | IRQ_MOVE_PCNTXT | IRQ_LEVEL | IRQ_NO_BALANCING | \ |
105 | IRQ_PER_CPU | IRQ_NESTED_THREAD | IRQ_NOTHREAD | IRQ_PER_CPU_DEVID | \ | 107 | IRQ_PER_CPU | IRQ_NESTED_THREAD | IRQ_NOTHREAD | IRQ_PER_CPU_DEVID | \ |
106 | IRQ_IS_POLLED) | 108 | IRQ_IS_POLLED | IRQ_DISABLE_UNLAZY) |
107 | 109 | ||
108 | #define IRQ_NO_BALANCING_MASK (IRQ_PER_CPU | IRQ_NO_BALANCING) | 110 | #define IRQ_NO_BALANCING_MASK (IRQ_PER_CPU | IRQ_NO_BALANCING) |
109 | 111 | ||
@@ -297,21 +299,6 @@ static inline void irqd_clr_forwarded_to_vcpu(struct irq_data *d) | |||
297 | __irqd_to_state(d) &= ~IRQD_FORWARDED_TO_VCPU; | 299 | __irqd_to_state(d) &= ~IRQD_FORWARDED_TO_VCPU; |
298 | } | 300 | } |
299 | 301 | ||
300 | /* | ||
301 | * Functions for chained handlers which can be enabled/disabled by the | ||
302 | * standard disable_irq/enable_irq calls. Must be called with | ||
303 | * irq_desc->lock held. | ||
304 | */ | ||
305 | static inline void irqd_set_chained_irq_inprogress(struct irq_data *d) | ||
306 | { | ||
307 | __irqd_to_state(d) |= IRQD_IRQ_INPROGRESS; | ||
308 | } | ||
309 | |||
310 | static inline void irqd_clr_chained_irq_inprogress(struct irq_data *d) | ||
311 | { | ||
312 | __irqd_to_state(d) &= ~IRQD_IRQ_INPROGRESS; | ||
313 | } | ||
314 | |||
315 | static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) | 302 | static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) |
316 | { | 303 | { |
317 | return d->hwirq; | 304 | return d->hwirq; |
@@ -452,6 +439,8 @@ extern int irq_set_affinity_locked(struct irq_data *data, | |||
452 | const struct cpumask *cpumask, bool force); | 439 | const struct cpumask *cpumask, bool force); |
453 | extern int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info); | 440 | extern int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info); |
454 | 441 | ||
442 | extern void irq_migrate_all_off_this_cpu(void); | ||
443 | |||
455 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_PENDING_IRQ) | 444 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_PENDING_IRQ) |
456 | void irq_move_irq(struct irq_data *data); | 445 | void irq_move_irq(struct irq_data *data); |
457 | void irq_move_masked_irq(struct irq_data *data); | 446 | void irq_move_masked_irq(struct irq_data *data); |