@@ -395,59 +395,47 @@ int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask,
395
395
* an interrupt which is already started or which has already been configured
396
396
* as managed will also fail, as these mean invalid init state or double init.
397
397
*/
398
- int irq_update_affinity_desc (unsigned int irq ,
399
- struct irq_affinity_desc * affinity )
398
+ int irq_update_affinity_desc (unsigned int irq , struct irq_affinity_desc * affinity )
400
399
{
401
- struct irq_desc * desc ;
402
- unsigned long flags ;
403
- bool activated ;
404
- int ret = 0 ;
405
-
406
400
/*
407
401
* Supporting this with the reservation scheme used by x86 needs
408
402
* some more thought. Fail it for now.
409
403
*/
410
404
if (IS_ENABLED (CONFIG_GENERIC_IRQ_RESERVATION_MODE ))
411
405
return - EOPNOTSUPP ;
412
406
413
- desc = irq_get_desc_buslock (irq , & flags , 0 );
414
- if (! desc )
415
- return - EINVAL ;
407
+ scoped_irqdesc_get_and_buslock (irq , 0 ) {
408
+ struct irq_desc * desc = scoped_irqdesc ;
409
+ bool activated ;
416
410
417
- /* Requires the interrupt to be shut down */
418
- if (irqd_is_started (& desc -> irq_data )) {
419
- ret = - EBUSY ;
420
- goto out_unlock ;
421
- }
422
-
423
- /* Interrupts which are already managed cannot be modified */
424
- if (irqd_affinity_is_managed (& desc -> irq_data )) {
425
- ret = - EBUSY ;
426
- goto out_unlock ;
427
- }
411
+ /* Requires the interrupt to be shut down */
412
+ if (irqd_is_started (& desc -> irq_data ))
413
+ return - EBUSY ;
428
414
429
- /*
430
- * Deactivate the interrupt. That's required to undo
431
- * anything an earlier activation has established.
432
- */
433
- activated = irqd_is_activated (& desc -> irq_data );
434
- if (activated )
435
- irq_domain_deactivate_irq (& desc -> irq_data );
436
-
437
- if (affinity -> is_managed ) {
438
- irqd_set (& desc -> irq_data , IRQD_AFFINITY_MANAGED );
439
- irqd_set (& desc -> irq_data , IRQD_MANAGED_SHUTDOWN );
440
- }
415
+ /* Interrupts which are already managed cannot be modified */
416
+ if (irqd_affinity_is_managed (& desc -> irq_data ))
417
+ return - EBUSY ;
418
+ /*
419
+ * Deactivate the interrupt. That's required to undo
420
+ * anything an earlier activation has established.
421
+ */
422
+ activated = irqd_is_activated (& desc -> irq_data );
423
+ if (activated )
424
+ irq_domain_deactivate_irq (& desc -> irq_data );
441
425
442
- cpumask_copy (desc -> irq_common_data .affinity , & affinity -> mask );
426
+ if (affinity -> is_managed ) {
427
+ irqd_set (& desc -> irq_data , IRQD_AFFINITY_MANAGED );
428
+ irqd_set (& desc -> irq_data , IRQD_MANAGED_SHUTDOWN );
429
+ }
443
430
444
- /* Restore the activation state */
445
- if (activated )
446
- irq_domain_activate_irq (& desc -> irq_data , false);
431
+ cpumask_copy (desc -> irq_common_data .affinity , & affinity -> mask );
447
432
448
- out_unlock :
449
- irq_put_desc_busunlock (desc , flags );
450
- return ret ;
433
+ /* Restore the activation state */
434
+ if (activated )
435
+ irq_domain_activate_irq (& desc -> irq_data , false);
436
+ return 0 ;
437
+ }
438
+ return - EINVAL ;
451
439
}
452
440
453
441
static int __irq_set_affinity (unsigned int irq , const struct cpumask * mask ,
0 commit comments