|
@@ -180,7 +180,7 @@ int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask,
|
|
struct irq_chip *chip = irq_data_get_irq_chip(data);
|
|
struct irq_chip *chip = irq_data_get_irq_chip(data);
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
- ret = chip->irq_set_affinity(data, mask, false);
|
|
|
|
|
|
+ ret = chip->irq_set_affinity(data, mask, force);
|
|
switch (ret) {
|
|
switch (ret) {
|
|
case IRQ_SET_MASK_OK:
|
|
case IRQ_SET_MASK_OK:
|
|
cpumask_copy(data->affinity, mask);
|
|
cpumask_copy(data->affinity, mask);
|
|
@@ -192,7 +192,8 @@ int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask,
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-int __irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask)
|
|
|
|
|
|
+int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask,
|
|
|
|
+ bool force)
|
|
{
|
|
{
|
|
struct irq_chip *chip = irq_data_get_irq_chip(data);
|
|
struct irq_chip *chip = irq_data_get_irq_chip(data);
|
|
struct irq_desc *desc = irq_data_to_desc(data);
|
|
struct irq_desc *desc = irq_data_to_desc(data);
|
|
@@ -202,7 +203,7 @@ int __irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
if (irq_can_move_pcntxt(data)) {
|
|
if (irq_can_move_pcntxt(data)) {
|
|
- ret = irq_do_set_affinity(data, mask, false);
|
|
|
|
|
|
+ ret = irq_do_set_affinity(data, mask, force);
|
|
} else {
|
|
} else {
|
|
irqd_set_move_pending(data);
|
|
irqd_set_move_pending(data);
|
|
irq_copy_pending(desc, mask);
|
|
irq_copy_pending(desc, mask);
|
|
@@ -217,13 +218,7 @@ int __irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask)
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * irq_set_affinity - Set the irq affinity of a given irq
|
|
|
|
- * @irq: Interrupt to set affinity
|
|
|
|
- * @mask: cpumask
|
|
|
|
- *
|
|
|
|
- */
|
|
|
|
-int irq_set_affinity(unsigned int irq, const struct cpumask *mask)
|
|
|
|
|
|
+int __irq_set_affinity(unsigned int irq, const struct cpumask *mask, bool force)
|
|
{
|
|
{
|
|
struct irq_desc *desc = irq_to_desc(irq);
|
|
struct irq_desc *desc = irq_to_desc(irq);
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
@@ -233,7 +228,7 @@ int irq_set_affinity(unsigned int irq, const struct cpumask *mask)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
raw_spin_lock_irqsave(&desc->lock, flags);
|
|
raw_spin_lock_irqsave(&desc->lock, flags);
|
|
- ret = __irq_set_affinity_locked(irq_desc_get_irq_data(desc), mask);
|
|
|
|
|
|
+ ret = irq_set_affinity_locked(irq_desc_get_irq_data(desc), mask, force);
|
|
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
|
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|