@@ -70,7 +70,8 @@ static inline void desc_smp_init(struct irq_desc *desc, int node) { }
7070static inline int desc_node (struct irq_desc * desc ) { return 0 ; }
7171#endif
7272
73- static void desc_set_defaults (unsigned int irq , struct irq_desc * desc , int node )
73+ static void desc_set_defaults (unsigned int irq , struct irq_desc * desc , int node ,
74+ struct module * owner )
7475{
7576 int cpu ;
7677
@@ -86,6 +87,7 @@ static void desc_set_defaults(unsigned int irq, struct irq_desc *desc, int node)
8687 desc -> irq_count = 0 ;
8788 desc -> irqs_unhandled = 0 ;
8889 desc -> name = NULL ;
90+ desc -> owner = owner ;
8991 for_each_possible_cpu (cpu )
9092 * per_cpu_ptr (desc -> kstat_irqs , cpu ) = 0 ;
9193 desc_smp_init (desc , node );
@@ -128,7 +130,7 @@ static void free_masks(struct irq_desc *desc)
128130static inline void free_masks (struct irq_desc * desc ) { }
129131#endif
130132
131- static struct irq_desc * alloc_desc (int irq , int node )
133+ static struct irq_desc * alloc_desc (int irq , int node , struct module * owner )
132134{
133135 struct irq_desc * desc ;
134136 gfp_t gfp = GFP_KERNEL ;
@@ -147,7 +149,7 @@ static struct irq_desc *alloc_desc(int irq, int node)
147149 raw_spin_lock_init (& desc -> lock );
148150 lockdep_set_class (& desc -> lock , & irq_desc_lock_class );
149151
150- desc_set_defaults (irq , desc , node );
152+ desc_set_defaults (irq , desc , node , owner );
151153
152154 return desc ;
153155
@@ -173,13 +175,14 @@ static void free_desc(unsigned int irq)
173175 kfree (desc );
174176}
175177
176- static int alloc_descs (unsigned int start , unsigned int cnt , int node )
178+ static int alloc_descs (unsigned int start , unsigned int cnt , int node ,
179+ struct module * owner )
177180{
178181 struct irq_desc * desc ;
179182 int i ;
180183
181184 for (i = 0 ; i < cnt ; i ++ ) {
182- desc = alloc_desc (start + i , node );
185+ desc = alloc_desc (start + i , node , owner );
183186 if (!desc )
184187 goto err ;
185188 mutex_lock (& sparse_irq_lock );
@@ -227,7 +230,7 @@ int __init early_irq_init(void)
227230 nr_irqs = initcnt ;
228231
229232 for (i = 0 ; i < initcnt ; i ++ ) {
230- desc = alloc_desc (i , node );
233+ desc = alloc_desc (i , node , NULL );
231234 set_bit (i , allocated_irqs );
232235 irq_insert_desc (i , desc );
233236 }
@@ -261,7 +264,7 @@ int __init early_irq_init(void)
261264 alloc_masks (& desc [i ], GFP_KERNEL , node );
262265 raw_spin_lock_init (& desc [i ].lock );
263266 lockdep_set_class (& desc [i ].lock , & irq_desc_lock_class );
264- desc_set_defaults (i , & desc [i ], node );
267+ desc_set_defaults (i , & desc [i ], node , NULL );
265268 }
266269 return arch_early_irq_init ();
267270}
@@ -276,8 +279,16 @@ static void free_desc(unsigned int irq)
276279 dynamic_irq_cleanup (irq );
277280}
278281
279- static inline int alloc_descs (unsigned int start , unsigned int cnt , int node )
282+ static inline int alloc_descs (unsigned int start , unsigned int cnt , int node ,
283+ struct module * owner )
280284{
285+ u32 i ;
286+
287+ for (i = 0 ; i < cnt ; i ++ ) {
288+ struct irq_desc * desc = irq_to_desc (start + i );
289+
290+ desc -> owner = owner ;
291+ }
281292 return start ;
282293}
283294
@@ -337,7 +348,8 @@ EXPORT_SYMBOL_GPL(irq_free_descs);
337348 * Returns the first irq number or error code
338349 */
339350int __ref
340- irq_alloc_descs (int irq , unsigned int from , unsigned int cnt , int node )
351+ __irq_alloc_descs (int irq , unsigned int from , unsigned int cnt , int node ,
352+ struct module * owner )
341353{
342354 int start , ret ;
343355
@@ -366,13 +378,13 @@ irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node)
366378
367379 bitmap_set (allocated_irqs , start , cnt );
368380 mutex_unlock (& sparse_irq_lock );
369- return alloc_descs (start , cnt , node );
381+ return alloc_descs (start , cnt , node , owner );
370382
371383err :
372384 mutex_unlock (& sparse_irq_lock );
373385 return ret ;
374386}
375- EXPORT_SYMBOL_GPL (irq_alloc_descs );
387+ EXPORT_SYMBOL_GPL (__irq_alloc_descs );
376388
377389/**
378390 * irq_reserve_irqs - mark irqs allocated
@@ -440,7 +452,7 @@ void dynamic_irq_cleanup(unsigned int irq)
440452 unsigned long flags ;
441453
442454 raw_spin_lock_irqsave (& desc -> lock , flags );
443- desc_set_defaults (irq , desc , desc_node (desc ));
455+ desc_set_defaults (irq , desc , desc_node (desc ), NULL );
444456 raw_spin_unlock_irqrestore (& desc -> lock , flags );
445457}
446458
0 commit comments