diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2025-03-13 17:00:39 +0100 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2025-05-07 09:08:15 +0200 |
commit | 55ac0ad22fec0c5c5a76112725804957a62f5af7 (patch) | |
tree | f69f14fb13ea6c40052f452dd0f05d1461a167db /kernel/irq/manage.c | |
parent | 7e04e5c6f6158d5528f0591cc6b3fc1a2b771a90 (diff) |
genirq/manage: Rework irq_set_vcpu_affinity()
Use the new guards to get and lock the interrupt descriptor and tidy up the
code.
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/87ikmlq0fk.ffs@tglx
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r-- | kernel/irq/manage.c | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 4d08a09929a4..c18440d41480 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -629,32 +629,25 @@ int irq_setup_affinity(struct irq_desc *desc) */ int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info) { - unsigned long flags; - struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0); - struct irq_data *data; - struct irq_chip *chip; - int ret = -ENOSYS; - - if (!desc) - return -EINVAL; + scoped_irqdesc_get_and_lock(irq, 0) { + struct irq_desc *desc = scoped_irqdesc; + struct irq_data *data; + struct irq_chip *chip; - data = irq_desc_get_irq_data(desc); - do { - chip = irq_data_get_irq_chip(data); - if (chip && chip->irq_set_vcpu_affinity) - break; -#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY - data = data->parent_data; -#else - data = NULL; -#endif - } while (data); + data = irq_desc_get_irq_data(desc); + do { + chip = irq_data_get_irq_chip(data); + if (chip && chip->irq_set_vcpu_affinity) + break; - if (data) - ret = chip->irq_set_vcpu_affinity(data, vcpu_info); - irq_put_desc_unlock(desc, flags); + data = irqd_get_parent_data(data); + } while (data); - return ret; + if (!data) + return -ENOSYS; + return chip->irq_set_vcpu_affinity(data, vcpu_info); + } + return -EINVAL; } EXPORT_SYMBOL_GPL(irq_set_vcpu_affinity); |