Skip to content

Commit 818b0f3

Browse files
jiangliuKAGA-KOKO
authored andcommitted
genirq: Introduce irq_do_set_affinity() to reduce duplicated code
All invocations of chip->irq_set_affinity() are doing the same return value checks. Let them all use a common function. [ tglx: removed the silly likely while at it ] Signed-off-by: Jiang Liu <[email protected]> Cc: Jiang Liu <[email protected]> Cc: Keping Chen <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Thomas Gleixner <[email protected]>
1 parent 23812b9 commit 818b0f3

File tree

3 files changed

+27
-28
lines changed

3 files changed

+27
-28
lines changed

kernel/irq/internals.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ extern int irq_select_affinity_usr(unsigned int irq, struct cpumask *mask);
101101

102102
extern void irq_set_thread_affinity(struct irq_desc *desc);
103103

104+
extern int irq_do_set_affinity(struct irq_data *data,
105+
const struct cpumask *dest, bool force);
106+
104107
/* Inline functions for support of irq chips on slow busses */
105108
static inline void chip_bus_lock(struct irq_desc *desc)
106109
{

kernel/irq/manage.c

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,25 @@ static inline void
139139
irq_get_pending(struct cpumask *mask, struct irq_desc *desc) { }
140140
#endif
141141

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+
142161
int __irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask)
143162
{
144163
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)
149168
return -EINVAL;
150169

151170
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);
160172
} else {
161173
irqd_set_move_pending(data);
162174
irq_copy_pending(desc, mask);
@@ -280,9 +292,8 @@ EXPORT_SYMBOL_GPL(irq_set_affinity_notifier);
280292
static int
281293
setup_affinity(unsigned int irq, struct irq_desc *desc, struct cpumask *mask)
282294
{
283-
struct irq_chip *chip = irq_desc_get_chip(desc);
284295
struct cpumask *set = irq_default_affinity;
285-
int ret, node = desc->irq_data.node;
296+
int node = desc->irq_data.node;
286297

287298
/* Excludes PER_CPU and NO_BALANCE interrupts */
288299
if (!irq_can_set_affinity(irq))
@@ -308,13 +319,7 @@ setup_affinity(unsigned int irq, struct irq_desc *desc, struct cpumask *mask)
308319
if (cpumask_intersects(mask, nodemask))
309320
cpumask_and(mask, mask, nodemask);
310321
}
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);
318323
return 0;
319324
}
320325
#else

kernel/irq/migration.c

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,8 @@ void irq_move_masked_irq(struct irq_data *idata)
4242
* For correct operation this depends on the caller
4343
* masking the irqs.
4444
*/
45-
if (likely(cpumask_any_and(desc->pending_mask, cpu_online_mask)
46-
< nr_cpu_ids)) {
47-
int ret = chip->irq_set_affinity(&desc->irq_data,
48-
desc->pending_mask, false);
49-
switch (ret) {
50-
case IRQ_SET_MASK_OK:
51-
cpumask_copy(desc->irq_data.affinity, desc->pending_mask);
52-
case IRQ_SET_MASK_OK_NOCOPY:
53-
irq_set_thread_affinity(desc);
54-
}
55-
}
45+
if (cpumask_any_and(desc->pending_mask, cpu_online_mask) < nr_cpu_ids)
46+
irq_do_set_affinity(&desc->irq_data, desc->pending_mask, false);
5647

5748
cpumask_clear(desc->pending_mask);
5849
}

0 commit comments

Comments
 (0)