mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
genirq/autoprobe: Switch to lock guards
Convert all lock/unlock pairs to guards. No functional change. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/all/20250429065420.188866381@linutronix.de
This commit is contained in:
parent
5d964a9f7c
commit
e80618b27a
@ -43,18 +43,16 @@ unsigned long probe_irq_on(void)
|
|||||||
* flush such a longstanding irq before considering it as spurious.
|
* flush such a longstanding irq before considering it as spurious.
|
||||||
*/
|
*/
|
||||||
for_each_irq_desc_reverse(i, desc) {
|
for_each_irq_desc_reverse(i, desc) {
|
||||||
raw_spin_lock_irq(&desc->lock);
|
guard(raw_spinlock_irq)(&desc->lock);
|
||||||
if (!desc->action && irq_settings_can_probe(desc)) {
|
if (!desc->action && irq_settings_can_probe(desc)) {
|
||||||
/*
|
/*
|
||||||
* Some chips need to know about probing in
|
* Some chips need to know about probing in
|
||||||
* progress:
|
* progress:
|
||||||
*/
|
*/
|
||||||
if (desc->irq_data.chip->irq_set_type)
|
if (desc->irq_data.chip->irq_set_type)
|
||||||
desc->irq_data.chip->irq_set_type(&desc->irq_data,
|
desc->irq_data.chip->irq_set_type(&desc->irq_data, IRQ_TYPE_PROBE);
|
||||||
IRQ_TYPE_PROBE);
|
|
||||||
irq_activate_and_startup(desc, IRQ_NORESEND);
|
irq_activate_and_startup(desc, IRQ_NORESEND);
|
||||||
}
|
}
|
||||||
raw_spin_unlock_irq(&desc->lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wait for longstanding interrupts to trigger. */
|
/* Wait for longstanding interrupts to trigger. */
|
||||||
@ -66,13 +64,12 @@ unsigned long probe_irq_on(void)
|
|||||||
* happened in the previous stage, it may have masked itself)
|
* happened in the previous stage, it may have masked itself)
|
||||||
*/
|
*/
|
||||||
for_each_irq_desc_reverse(i, desc) {
|
for_each_irq_desc_reverse(i, desc) {
|
||||||
raw_spin_lock_irq(&desc->lock);
|
guard(raw_spinlock_irq)(&desc->lock);
|
||||||
if (!desc->action && irq_settings_can_probe(desc)) {
|
if (!desc->action && irq_settings_can_probe(desc)) {
|
||||||
desc->istate |= IRQS_AUTODETECT | IRQS_WAITING;
|
desc->istate |= IRQS_AUTODETECT | IRQS_WAITING;
|
||||||
if (irq_activate_and_startup(desc, IRQ_NORESEND))
|
if (irq_activate_and_startup(desc, IRQ_NORESEND))
|
||||||
desc->istate |= IRQS_PENDING;
|
desc->istate |= IRQS_PENDING;
|
||||||
}
|
}
|
||||||
raw_spin_unlock_irq(&desc->lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -84,18 +81,16 @@ unsigned long probe_irq_on(void)
|
|||||||
* Now filter out any obviously spurious interrupts
|
* Now filter out any obviously spurious interrupts
|
||||||
*/
|
*/
|
||||||
for_each_irq_desc(i, desc) {
|
for_each_irq_desc(i, desc) {
|
||||||
raw_spin_lock_irq(&desc->lock);
|
guard(raw_spinlock_irq)(&desc->lock);
|
||||||
|
|
||||||
if (desc->istate & IRQS_AUTODETECT) {
|
if (desc->istate & IRQS_AUTODETECT) {
|
||||||
/* It triggered already - consider it spurious. */
|
/* It triggered already - consider it spurious. */
|
||||||
if (!(desc->istate & IRQS_WAITING)) {
|
if (!(desc->istate & IRQS_WAITING)) {
|
||||||
desc->istate &= ~IRQS_AUTODETECT;
|
desc->istate &= ~IRQS_AUTODETECT;
|
||||||
irq_shutdown_and_deactivate(desc);
|
irq_shutdown_and_deactivate(desc);
|
||||||
} else
|
} else if (i < 32) {
|
||||||
if (i < 32)
|
mask |= 1 << i;
|
||||||
mask |= 1 << i;
|
}
|
||||||
}
|
}
|
||||||
raw_spin_unlock_irq(&desc->lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
@ -121,7 +116,7 @@ unsigned int probe_irq_mask(unsigned long val)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for_each_irq_desc(i, desc) {
|
for_each_irq_desc(i, desc) {
|
||||||
raw_spin_lock_irq(&desc->lock);
|
guard(raw_spinlock_irq)(&desc->lock);
|
||||||
if (desc->istate & IRQS_AUTODETECT) {
|
if (desc->istate & IRQS_AUTODETECT) {
|
||||||
if (i < 16 && !(desc->istate & IRQS_WAITING))
|
if (i < 16 && !(desc->istate & IRQS_WAITING))
|
||||||
mask |= 1 << i;
|
mask |= 1 << i;
|
||||||
@ -129,7 +124,6 @@ unsigned int probe_irq_mask(unsigned long val)
|
|||||||
desc->istate &= ~IRQS_AUTODETECT;
|
desc->istate &= ~IRQS_AUTODETECT;
|
||||||
irq_shutdown_and_deactivate(desc);
|
irq_shutdown_and_deactivate(desc);
|
||||||
}
|
}
|
||||||
raw_spin_unlock_irq(&desc->lock);
|
|
||||||
}
|
}
|
||||||
mutex_unlock(&probing_active);
|
mutex_unlock(&probing_active);
|
||||||
|
|
||||||
@ -160,8 +154,7 @@ int probe_irq_off(unsigned long val)
|
|||||||
struct irq_desc *desc;
|
struct irq_desc *desc;
|
||||||
|
|
||||||
for_each_irq_desc(i, desc) {
|
for_each_irq_desc(i, desc) {
|
||||||
raw_spin_lock_irq(&desc->lock);
|
guard(raw_spinlock_irq)(&desc->lock);
|
||||||
|
|
||||||
if (desc->istate & IRQS_AUTODETECT) {
|
if (desc->istate & IRQS_AUTODETECT) {
|
||||||
if (!(desc->istate & IRQS_WAITING)) {
|
if (!(desc->istate & IRQS_WAITING)) {
|
||||||
if (!nr_of_irqs)
|
if (!nr_of_irqs)
|
||||||
@ -171,7 +164,6 @@ int probe_irq_off(unsigned long val)
|
|||||||
desc->istate &= ~IRQS_AUTODETECT;
|
desc->istate &= ~IRQS_AUTODETECT;
|
||||||
irq_shutdown_and_deactivate(desc);
|
irq_shutdown_and_deactivate(desc);
|
||||||
}
|
}
|
||||||
raw_spin_unlock_irq(&desc->lock);
|
|
||||||
}
|
}
|
||||||
mutex_unlock(&probing_active);
|
mutex_unlock(&probing_active);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user