mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
genirq: Wrap the remaning IRQ_* flags
Use wrappers to keep them away from the core code. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
876dbd4cc1
commit
1ccb4e612f
5 changed files with 70 additions and 12 deletions
|
@ -45,7 +45,7 @@ unsigned long probe_irq_on(void)
|
||||||
*/
|
*/
|
||||||
for_each_irq_desc_reverse(i, desc) {
|
for_each_irq_desc_reverse(i, desc) {
|
||||||
raw_spin_lock_irq(&desc->lock);
|
raw_spin_lock_irq(&desc->lock);
|
||||||
if (!desc->action && !(desc->status & IRQ_NOPROBE)) {
|
if (!desc->action && irq_settings_can_probe(desc)) {
|
||||||
/*
|
/*
|
||||||
* An old-style architecture might still have
|
* An old-style architecture might still have
|
||||||
* the handle_bad_irq handler there:
|
* the handle_bad_irq handler there:
|
||||||
|
@ -74,7 +74,7 @@ unsigned long probe_irq_on(void)
|
||||||
*/
|
*/
|
||||||
for_each_irq_desc_reverse(i, desc) {
|
for_each_irq_desc_reverse(i, desc) {
|
||||||
raw_spin_lock_irq(&desc->lock);
|
raw_spin_lock_irq(&desc->lock);
|
||||||
if (!desc->action && !(desc->status & IRQ_NOPROBE)) {
|
if (!desc->action && irq_settings_can_probe(desc)) {
|
||||||
desc->istate |= IRQS_AUTODETECT | IRQS_WAITING;
|
desc->istate |= IRQS_AUTODETECT | IRQS_WAITING;
|
||||||
if (irq_startup(desc)) {
|
if (irq_startup(desc)) {
|
||||||
irq_compat_set_pending(desc);
|
irq_compat_set_pending(desc);
|
||||||
|
|
|
@ -674,7 +674,8 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
|
||||||
desc->name = name;
|
desc->name = name;
|
||||||
|
|
||||||
if (handle != handle_bad_irq && is_chained) {
|
if (handle != handle_bad_irq && is_chained) {
|
||||||
desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE;
|
irq_settings_set_noprobe(desc);
|
||||||
|
irq_settings_set_norequest(desc);
|
||||||
irq_startup(desc);
|
irq_startup(desc);
|
||||||
}
|
}
|
||||||
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
||||||
|
|
|
@ -103,7 +103,7 @@ void irq_set_thread_affinity(struct irq_desc *desc)
|
||||||
#ifdef CONFIG_GENERIC_PENDING_IRQ
|
#ifdef CONFIG_GENERIC_PENDING_IRQ
|
||||||
static inline bool irq_can_move_pcntxt(struct irq_desc *desc)
|
static inline bool irq_can_move_pcntxt(struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
return desc->status & IRQ_MOVE_PCNTXT;
|
return irq_settings_can_move_pcntxt(desc);
|
||||||
}
|
}
|
||||||
static inline bool irq_move_pending(struct irq_desc *desc)
|
static inline bool irq_move_pending(struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
|
@ -411,7 +411,7 @@ void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume)
|
||||||
if (desc->istate & IRQS_SUSPENDED)
|
if (desc->istate & IRQS_SUSPENDED)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
/* Prevent probing on this irq: */
|
/* Prevent probing on this irq: */
|
||||||
desc->status |= IRQ_NOPROBE;
|
irq_settings_set_noprobe(desc);
|
||||||
irq_enable(desc);
|
irq_enable(desc);
|
||||||
check_irq_resend(desc, irq);
|
check_irq_resend(desc, irq);
|
||||||
/* fall-through */
|
/* fall-through */
|
||||||
|
@ -526,7 +526,7 @@ int can_request_irq(unsigned int irq, unsigned long irqflags)
|
||||||
if (!desc)
|
if (!desc)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (desc->status & IRQ_NOREQUEST)
|
if (!irq_settings_can_request(desc))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
raw_spin_lock_irqsave(&desc->lock, flags);
|
raw_spin_lock_irqsave(&desc->lock, flags);
|
||||||
|
@ -820,7 +820,7 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
||||||
* Check whether the interrupt nests into another interrupt
|
* Check whether the interrupt nests into another interrupt
|
||||||
* thread.
|
* thread.
|
||||||
*/
|
*/
|
||||||
nested = desc->status & IRQ_NESTED_THREAD;
|
nested = irq_settings_is_nested_thread(desc);
|
||||||
if (nested) {
|
if (nested) {
|
||||||
if (!new->thread_fn)
|
if (!new->thread_fn)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -917,7 +917,7 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
||||||
if (new->flags & IRQF_ONESHOT)
|
if (new->flags & IRQF_ONESHOT)
|
||||||
desc->istate |= IRQS_ONESHOT;
|
desc->istate |= IRQS_ONESHOT;
|
||||||
|
|
||||||
if (!(desc->status & IRQ_NOAUTOEN))
|
if (irq_settings_can_autoenable(desc))
|
||||||
irq_startup(desc);
|
irq_startup(desc);
|
||||||
else
|
else
|
||||||
/* Undo nested disables: */
|
/* Undo nested disables: */
|
||||||
|
@ -1217,7 +1217,7 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler,
|
||||||
if (!desc)
|
if (!desc)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (desc->status & IRQ_NOREQUEST)
|
if (!irq_settings_can_request(desc))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!handler) {
|
if (!handler) {
|
||||||
|
@ -1292,7 +1292,7 @@ int request_any_context_irq(unsigned int irq, irq_handler_t handler,
|
||||||
if (!desc)
|
if (!desc)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (desc->status & IRQ_NESTED_THREAD) {
|
if (irq_settings_is_nested_thread(desc)) {
|
||||||
ret = request_threaded_irq(irq, NULL, handler,
|
ret = request_threaded_irq(irq, NULL, handler,
|
||||||
flags, name, dev_id);
|
flags, name, dev_id);
|
||||||
return !ret ? IRQC_IS_NESTED : ret;
|
return !ret ? IRQC_IS_NESTED : ret;
|
||||||
|
|
|
@ -6,7 +6,12 @@ enum {
|
||||||
_IRQ_DEFAULT_INIT_FLAGS = IRQ_DEFAULT_INIT_FLAGS,
|
_IRQ_DEFAULT_INIT_FLAGS = IRQ_DEFAULT_INIT_FLAGS,
|
||||||
_IRQ_PER_CPU = IRQ_PER_CPU,
|
_IRQ_PER_CPU = IRQ_PER_CPU,
|
||||||
_IRQ_LEVEL = IRQ_LEVEL,
|
_IRQ_LEVEL = IRQ_LEVEL,
|
||||||
|
_IRQ_NOPROBE = IRQ_NOPROBE,
|
||||||
|
_IRQ_NOREQUEST = IRQ_NOREQUEST,
|
||||||
|
_IRQ_NOAUTOEN = IRQ_NOAUTOEN,
|
||||||
|
_IRQ_MOVE_PCNTXT = IRQ_MOVE_PCNTXT,
|
||||||
_IRQ_NO_BALANCING = IRQ_NO_BALANCING,
|
_IRQ_NO_BALANCING = IRQ_NO_BALANCING,
|
||||||
|
_IRQ_NESTED_THREAD = IRQ_NESTED_THREAD,
|
||||||
_IRQF_MODIFY_MASK = IRQF_MODIFY_MASK,
|
_IRQF_MODIFY_MASK = IRQF_MODIFY_MASK,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -34,6 +39,14 @@ enum {
|
||||||
#define IRQ_AFFINITY_SET GOT_YOU_MORON
|
#define IRQ_AFFINITY_SET GOT_YOU_MORON
|
||||||
#undef IRQ_LEVEL
|
#undef IRQ_LEVEL
|
||||||
#define IRQ_LEVEL GOT_YOU_MORON
|
#define IRQ_LEVEL GOT_YOU_MORON
|
||||||
|
#undef IRQ_NOPROBE
|
||||||
|
#define IRQ_NOPROBE GOT_YOU_MORON
|
||||||
|
#undef IRQ_NOREQUEST
|
||||||
|
#define IRQ_NOREQUEST GOT_YOU_MORON
|
||||||
|
#undef IRQ_NOAUTOEN
|
||||||
|
#define IRQ_NOAUTOEN GOT_YOU_MORON
|
||||||
|
#undef IRQ_NESTED_THREAD
|
||||||
|
#define IRQ_NESTED_THREAD GOT_YOU_MORON
|
||||||
#undef IRQF_MODIFY_MASK
|
#undef IRQF_MODIFY_MASK
|
||||||
#define IRQF_MODIFY_MASK GOT_YOU_MORON
|
#define IRQF_MODIFY_MASK GOT_YOU_MORON
|
||||||
|
|
||||||
|
@ -90,3 +103,48 @@ static inline void irq_settings_set_level(struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
desc->status |= _IRQ_LEVEL;
|
desc->status |= _IRQ_LEVEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool irq_settings_can_request(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
return !(desc->status & _IRQ_NOREQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void irq_settings_clr_norequest(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
desc->status &= ~_IRQ_NOREQUEST;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void irq_settings_set_norequest(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
desc->status |= _IRQ_NOREQUEST;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool irq_settings_can_probe(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
return !(desc->status & _IRQ_NOPROBE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void irq_settings_clr_noprobe(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
desc->status &= ~_IRQ_NOPROBE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void irq_settings_set_noprobe(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
desc->status |= _IRQ_NOPROBE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool irq_settings_can_move_pcntxt(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
return desc->status & _IRQ_MOVE_PCNTXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool irq_settings_can_autoenable(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
return !(desc->status & _IRQ_NOAUTOEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool irq_settings_is_nested_thread(struct irq_desc *desc)
|
||||||
|
{
|
||||||
|
return desc->status & _IRQ_NESTED_THREAD;
|
||||||
|
}
|
||||||
|
|
|
@ -68,8 +68,7 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)
|
||||||
raw_spin_lock(&desc->lock);
|
raw_spin_lock(&desc->lock);
|
||||||
|
|
||||||
/* PER_CPU and nested thread interrupts are never polled */
|
/* PER_CPU and nested thread interrupts are never polled */
|
||||||
if (irq_settings_is_per_cpu(desc) ||
|
if (irq_settings_is_per_cpu(desc) || irq_settings_is_nested_thread(desc))
|
||||||
(desc->status & IRQ_NESTED_THREAD))
|
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue