@@ -246,8 +246,7 @@ static struct kobject *irq_kobj_base;
246246#define IRQ_ATTR_RO (_name ) \
247247static struct kobj_attribute _name##_attr = __ATTR_RO(_name)
248248
249- static ssize_t per_cpu_count_show (struct kobject * kobj ,
250- struct kobj_attribute * attr , char * buf )
249+ static ssize_t per_cpu_count_show (struct kobject * kobj , struct kobj_attribute * attr , char * buf )
251250{
252251 struct irq_desc * desc = container_of (kobj , struct irq_desc , kobj );
253252 ssize_t ret = 0 ;
@@ -266,99 +265,75 @@ static ssize_t per_cpu_count_show(struct kobject *kobj,
266265}
267266IRQ_ATTR_RO (per_cpu_count );
268267
269- static ssize_t chip_name_show (struct kobject * kobj ,
270- struct kobj_attribute * attr , char * buf )
268+ static ssize_t chip_name_show (struct kobject * kobj , struct kobj_attribute * attr , char * buf )
271269{
272270 struct irq_desc * desc = container_of (kobj , struct irq_desc , kobj );
273- ssize_t ret = 0 ;
274271
275- raw_spin_lock_irq (& desc -> lock );
272+ guard ( raw_spinlock_irq ) (& desc -> lock );
276273 if (desc -> irq_data .chip && desc -> irq_data .chip -> name )
277- ret = sysfs_emit (buf , "%s\n" , desc -> irq_data .chip -> name );
278- raw_spin_unlock_irq (& desc -> lock );
279-
280- return ret ;
274+ return sysfs_emit (buf , "%s\n" , desc -> irq_data .chip -> name );
275+ return 0 ;
281276}
282277IRQ_ATTR_RO (chip_name );
283278
284- static ssize_t hwirq_show (struct kobject * kobj ,
285- struct kobj_attribute * attr , char * buf )
279+ static ssize_t hwirq_show (struct kobject * kobj , struct kobj_attribute * attr , char * buf )
286280{
287281 struct irq_desc * desc = container_of (kobj , struct irq_desc , kobj );
288- ssize_t ret = 0 ;
289282
283+ guard (raw_spinlock_irq )(& desc -> lock );
290284 raw_spin_lock_irq (& desc -> lock );
291285 if (desc -> irq_data .domain )
292- ret = sysfs_emit (buf , "%lu\n" , desc -> irq_data .hwirq );
293- raw_spin_unlock_irq (& desc -> lock );
294-
295- return ret ;
286+ return sysfs_emit (buf , "%lu\n" , desc -> irq_data .hwirq );
287+ return 0 ;
296288}
297289IRQ_ATTR_RO (hwirq );
298290
299- static ssize_t type_show (struct kobject * kobj ,
300- struct kobj_attribute * attr , char * buf )
291+ static ssize_t type_show (struct kobject * kobj , struct kobj_attribute * attr , char * buf )
301292{
302293 struct irq_desc * desc = container_of (kobj , struct irq_desc , kobj );
303- ssize_t ret = 0 ;
304-
305- raw_spin_lock_irq (& desc -> lock );
306- ret = sysfs_emit (buf , "%s\n" , irqd_is_level_type (& desc -> irq_data ) ? "level" : "edge" );
307- raw_spin_unlock_irq (& desc -> lock );
308294
309- return ret ;
295+ guard (raw_spinlock_irq )(& desc -> lock );
296+ return sysfs_emit (buf , "%s\n" , irqd_is_level_type (& desc -> irq_data ) ? "level" : "edge" );
310297
311298}
312299IRQ_ATTR_RO (type );
313300
314- static ssize_t wakeup_show (struct kobject * kobj ,
315- struct kobj_attribute * attr , char * buf )
301+ static ssize_t wakeup_show (struct kobject * kobj , struct kobj_attribute * attr , char * buf )
316302{
317303 struct irq_desc * desc = container_of (kobj , struct irq_desc , kobj );
318- ssize_t ret = 0 ;
319-
320- raw_spin_lock_irq (& desc -> lock );
321- ret = sysfs_emit (buf , "%s\n" , str_enabled_disabled (irqd_is_wakeup_set (& desc -> irq_data )));
322- raw_spin_unlock_irq (& desc -> lock );
323-
324- return ret ;
325304
305+ guard (raw_spinlock_irq )(& desc -> lock );
306+ return sysfs_emit (buf , "%s\n" , str_enabled_disabled (irqd_is_wakeup_set (& desc -> irq_data )));
326307}
327308IRQ_ATTR_RO (wakeup );
328309
329- static ssize_t name_show (struct kobject * kobj ,
330- struct kobj_attribute * attr , char * buf )
310+ static ssize_t name_show (struct kobject * kobj , struct kobj_attribute * attr , char * buf )
331311{
332312 struct irq_desc * desc = container_of (kobj , struct irq_desc , kobj );
333- ssize_t ret = 0 ;
334313
335- raw_spin_lock_irq (& desc -> lock );
314+ guard ( raw_spinlock_irq ) (& desc -> lock );
336315 if (desc -> name )
337- ret = sysfs_emit (buf , "%s\n" , desc -> name );
338- raw_spin_unlock_irq (& desc -> lock );
339-
340- return ret ;
316+ return sysfs_emit (buf , "%s\n" , desc -> name );
317+ return 0 ;
341318}
342319IRQ_ATTR_RO (name );
343320
344- static ssize_t actions_show (struct kobject * kobj ,
345- struct kobj_attribute * attr , char * buf )
321+ static ssize_t actions_show (struct kobject * kobj , struct kobj_attribute * attr , char * buf )
346322{
347323 struct irq_desc * desc = container_of (kobj , struct irq_desc , kobj );
348324 struct irqaction * action ;
349325 ssize_t ret = 0 ;
350326 char * p = "" ;
351327
352- raw_spin_lock_irq (& desc -> lock );
353- for_each_action_of_desc (desc , action ) {
354- ret += sysfs_emit_at (buf , ret , "%s%s" , p , action -> name );
355- p = "," ;
328+ scoped_guard (raw_spinlock_irq , & desc -> lock ) {
329+ for_each_action_of_desc (desc , action ) {
330+ ret += sysfs_emit_at (buf , ret , "%s%s" , p , action -> name );
331+ p = "," ;
332+ }
356333 }
357- raw_spin_unlock_irq (& desc -> lock );
358334
359335 if (ret )
360336 ret += sysfs_emit_at (buf , ret , "\n" );
361-
362337 return ret ;
363338}
364339IRQ_ATTR_RO (actions );
@@ -414,19 +389,14 @@ static int __init irq_sysfs_init(void)
414389 int irq ;
415390
416391 /* Prevent concurrent irq alloc/free */
417- irq_lock_sparse ();
418-
392+ guard (mutex )(& sparse_irq_lock );
419393 irq_kobj_base = kobject_create_and_add ("irq" , kernel_kobj );
420- if (!irq_kobj_base ) {
421- irq_unlock_sparse ();
394+ if (!irq_kobj_base )
422395 return - ENOMEM ;
423- }
424396
425397 /* Add the already allocated interrupts */
426398 for_each_irq_desc (irq , desc )
427399 irq_sysfs_add (irq , desc );
428- irq_unlock_sparse ();
429-
430400 return 0 ;
431401}
432402postcore_initcall (irq_sysfs_init );
@@ -569,12 +539,12 @@ static int alloc_descs(unsigned int start, unsigned int cnt, int node,
569539 return - ENOMEM ;
570540}
571541
572- static int irq_expand_nr_irqs (unsigned int nr )
542+ static bool irq_expand_nr_irqs (unsigned int nr )
573543{
574544 if (nr > MAX_SPARSE_IRQS )
575- return - ENOMEM ;
545+ return false ;
576546 nr_irqs = nr ;
577- return 0 ;
547+ return true ;
578548}
579549
580550int __init early_irq_init (void )
@@ -652,11 +622,9 @@ EXPORT_SYMBOL(irq_to_desc);
652622static void free_desc (unsigned int irq )
653623{
654624 struct irq_desc * desc = irq_to_desc (irq );
655- unsigned long flags ;
656625
657- raw_spin_lock_irqsave (& desc -> lock , flags );
658- desc_set_defaults (irq , desc , irq_desc_get_node (desc ), NULL , NULL );
659- raw_spin_unlock_irqrestore (& desc -> lock , flags );
626+ scoped_guard (raw_spinlock_irqsave , & desc -> lock )
627+ desc_set_defaults (irq , desc , irq_desc_get_node (desc ), NULL , NULL );
660628 delete_irq_desc (irq );
661629}
662630
@@ -675,16 +643,15 @@ static inline int alloc_descs(unsigned int start, unsigned int cnt, int node,
675643 return start ;
676644}
677645
678- static int irq_expand_nr_irqs (unsigned int nr )
646+ static inline bool irq_expand_nr_irqs (unsigned int nr )
679647{
680- return - ENOMEM ;
648+ return false ;
681649}
682650
683651void irq_mark_irq (unsigned int irq )
684652{
685- mutex_lock (& sparse_irq_lock );
653+ guard ( mutex ) (& sparse_irq_lock );
686654 irq_insert_desc (irq , irq_desc + irq );
687- mutex_unlock (& sparse_irq_lock );
688655}
689656
690657#ifdef CONFIG_GENERIC_IRQ_LEGACY
@@ -823,11 +790,9 @@ void irq_free_descs(unsigned int from, unsigned int cnt)
823790 if (from >= nr_irqs || (from + cnt ) > nr_irqs )
824791 return ;
825792
826- mutex_lock (& sparse_irq_lock );
793+ guard ( mutex ) (& sparse_irq_lock );
827794 for (i = 0 ; i < cnt ; i ++ )
828795 free_desc (from + i );
829-
830- mutex_unlock (& sparse_irq_lock );
831796}
832797EXPORT_SYMBOL_GPL (irq_free_descs );
833798
@@ -844,11 +809,10 @@ EXPORT_SYMBOL_GPL(irq_free_descs);
844809 *
845810 * Returns the first irq number or error code
846811 */
847- int __ref
848- __irq_alloc_descs (int irq , unsigned int from , unsigned int cnt , int node ,
849- struct module * owner , const struct irq_affinity_desc * affinity )
812+ int __ref __irq_alloc_descs (int irq , unsigned int from , unsigned int cnt , int node ,
813+ struct module * owner , const struct irq_affinity_desc * affinity )
850814{
851- int start , ret ;
815+ int start ;
852816
853817 if (!cnt )
854818 return - EINVAL ;
@@ -866,22 +830,17 @@ __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
866830 from = arch_dynirq_lower_bound (from );
867831 }
868832
869- mutex_lock (& sparse_irq_lock );
833+ guard ( mutex ) (& sparse_irq_lock );
870834
871835 start = irq_find_free_area (from , cnt );
872- ret = - EEXIST ;
873836 if (irq >=0 && start != irq )
874- goto unlock ;
837+ return - EEXIST ;
875838
876839 if (start + cnt > nr_irqs ) {
877- ret = irq_expand_nr_irqs (start + cnt );
878- if (ret )
879- goto unlock ;
840+ if (!irq_expand_nr_irqs (start + cnt ))
841+ return - ENOMEM ;
880842 }
881- ret = alloc_descs (start , cnt , node , affinity , owner );
882- unlock :
883- mutex_unlock (& sparse_irq_lock );
884- return ret ;
843+ return alloc_descs (start , cnt , node , affinity , owner );
885844}
886845EXPORT_SYMBOL_GPL (__irq_alloc_descs );
887846
0 commit comments