|
|
@@ -595,7 +595,8 @@ void __irq_put_desc_unlock(struct irq_desc *desc, unsigned long flags, bool bus)
|
|
|
chip_bus_sync_unlock(desc);
|
|
|
}
|
|
|
|
|
|
-int irq_set_percpu_devid(unsigned int irq)
|
|
|
+int irq_set_percpu_devid_partition(unsigned int irq,
|
|
|
+ const struct cpumask *affinity)
|
|
|
{
|
|
|
struct irq_desc *desc = irq_to_desc(irq);
|
|
|
|
|
|
@@ -610,10 +611,33 @@ int irq_set_percpu_devid(unsigned int irq)
|
|
|
if (!desc->percpu_enabled)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
+ if (affinity)
|
|
|
+ desc->percpu_affinity = affinity;
|
|
|
+ else
|
|
|
+ desc->percpu_affinity = cpu_possible_mask;
|
|
|
+
|
|
|
irq_set_percpu_devid_flags(irq);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int irq_set_percpu_devid(unsigned int irq)
|
|
|
+{
|
|
|
+ return irq_set_percpu_devid_partition(irq, NULL);
|
|
|
+}
|
|
|
+
|
|
|
+int irq_get_percpu_devid_partition(unsigned int irq, struct cpumask *affinity)
|
|
|
+{
|
|
|
+ struct irq_desc *desc = irq_to_desc(irq);
|
|
|
+
|
|
|
+ if (!desc || !desc->percpu_enabled)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ if (affinity)
|
|
|
+ cpumask_copy(affinity, desc->percpu_affinity);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
void kstat_incr_irq_this_cpu(unsigned int irq)
|
|
|
{
|
|
|
kstat_incr_irqs_this_cpu(irq_to_desc(irq));
|