From: Thomas Gleixner Date: Thu, 13 Mar 2025 16:00:39 +0000 (+0100) Subject: genirq/manage: Rework irq_set_vcpu_affinity() X-Git-Tag: v6.16-rc1~189^2~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=55ac0ad22fec0c5c5a76112725804957a62f5af7;p=thirdparty%2Fkernel%2Flinux.git 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 Acked-by: Peter Zijlstra (Intel) Link: https://lore.kernel.org/all/87ikmlq0fk.ffs@tglx --- diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 4d08a09929a4b..c18440d414800 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);