@@ -139,6 +139,25 @@ static inline void
139
139
irq_get_pending (struct cpumask * mask , struct irq_desc * desc ) { }
140
140
#endif
141
141
142
+ int irq_do_set_affinity (struct irq_data * data , const struct cpumask * mask ,
143
+ bool force )
144
+ {
145
+ struct irq_desc * desc = irq_data_to_desc (data );
146
+ struct irq_chip * chip = irq_data_get_irq_chip (data );
147
+ int ret ;
148
+
149
+ ret = chip -> irq_set_affinity (data , mask , false);
150
+ switch (ret ) {
151
+ case IRQ_SET_MASK_OK :
152
+ cpumask_copy (data -> affinity , mask );
153
+ case IRQ_SET_MASK_OK_NOCOPY :
154
+ irq_set_thread_affinity (desc );
155
+ ret = 0 ;
156
+ }
157
+
158
+ return ret ;
159
+ }
160
+
142
161
int __irq_set_affinity_locked (struct irq_data * data , const struct cpumask * mask )
143
162
{
144
163
struct irq_chip * chip = irq_data_get_irq_chip (data );
@@ -149,14 +168,7 @@ int __irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask)
149
168
return - EINVAL ;
150
169
151
170
if (irq_can_move_pcntxt (data )) {
152
- ret = chip -> irq_set_affinity (data , mask , false);
153
- switch (ret ) {
154
- case IRQ_SET_MASK_OK :
155
- cpumask_copy (data -> affinity , mask );
156
- case IRQ_SET_MASK_OK_NOCOPY :
157
- irq_set_thread_affinity (desc );
158
- ret = 0 ;
159
- }
171
+ ret = irq_do_set_affinity (data , mask , false);
160
172
} else {
161
173
irqd_set_move_pending (data );
162
174
irq_copy_pending (desc , mask );
@@ -280,9 +292,8 @@ EXPORT_SYMBOL_GPL(irq_set_affinity_notifier);
280
292
static int
281
293
setup_affinity (unsigned int irq , struct irq_desc * desc , struct cpumask * mask )
282
294
{
283
- struct irq_chip * chip = irq_desc_get_chip (desc );
284
295
struct cpumask * set = irq_default_affinity ;
285
- int ret , node = desc -> irq_data .node ;
296
+ int node = desc -> irq_data .node ;
286
297
287
298
/* Excludes PER_CPU and NO_BALANCE interrupts */
288
299
if (!irq_can_set_affinity (irq ))
@@ -308,13 +319,7 @@ setup_affinity(unsigned int irq, struct irq_desc *desc, struct cpumask *mask)
308
319
if (cpumask_intersects (mask , nodemask ))
309
320
cpumask_and (mask , mask , nodemask );
310
321
}
311
- ret = chip -> irq_set_affinity (& desc -> irq_data , mask , false);
312
- switch (ret ) {
313
- case IRQ_SET_MASK_OK :
314
- cpumask_copy (desc -> irq_data .affinity , mask );
315
- case IRQ_SET_MASK_OK_NOCOPY :
316
- irq_set_thread_affinity (desc );
317
- }
322
+ irq_do_set_affinity (& desc -> irq_data , mask , false);
318
323
return 0 ;
319
324
}
320
325
#else
0 commit comments