aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/interrupt.h
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2016-09-14 10:18:48 -0400
committerThomas Gleixner <tglx@linutronix.de>2016-09-14 16:11:08 -0400
commit34c3d9819fda464be4f1bec59b63353814f76c73 (patch)
tree752917d25a7099573d698595578a334cce9d78af /include/linux/interrupt.h
parent28f4b04143c56135b1ca742fc64b664ed04de6a4 (diff)
genirq/affinity: Provide smarter irq spreading infrastructure
The current irq spreading infrastructure is just looking at a cpumask and tries to spread the interrupts over the mask. Thats suboptimal as it does not take numa nodes into account. Change the logic so the interrupts are spread across numa nodes and inside the nodes. If there are more cpus than vectors per node, then we set the affinity to several cpus. If HT siblings are available we take that into account and try to set all siblings to a single vector. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Christoph Hellwig <hch@lst.de> Cc: axboe@fb.com Cc: keith.busch@intel.com Cc: agordeev@redhat.com Cc: linux-block@vger.kernel.org Link: http://lkml.kernel.org/r/1473862739-15032-3-git-send-email-hch@lst.de
Diffstat (limited to 'include/linux/interrupt.h')
-rw-r--r--include/linux/interrupt.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index b6683f0ffc9f..4e59d122cad9 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -279,6 +279,8 @@ extern int
279irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify); 279irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify);
280 280
281struct cpumask *irq_create_affinity_mask(unsigned int *nr_vecs); 281struct cpumask *irq_create_affinity_mask(unsigned int *nr_vecs);
282struct cpumask *irq_create_affinity_masks(const struct cpumask *affinity, int nvec);
283int irq_calc_affinity_vectors(const struct cpumask *affinity, int maxvec);
282 284
283#else /* CONFIG_SMP */ 285#else /* CONFIG_SMP */
284 286
@@ -316,6 +318,19 @@ static inline struct cpumask *irq_create_affinity_mask(unsigned int *nr_vecs)
316 *nr_vecs = 1; 318 *nr_vecs = 1;
317 return NULL; 319 return NULL;
318} 320}
321
322static inline struct cpumask *
323irq_create_affinity_masks(const struct cpumask *affinity, int nvec)
324{
325 return NULL;
326}
327
328static inline int
329irq_calc_affinity_vectors(const struct cpumask *affinity, int maxvec)
330{
331 return maxvec;
332}
333
319#endif /* CONFIG_SMP */ 334#endif /* CONFIG_SMP */
320 335
321/* 336/*