Patch "PCI/MSI: Ignore affinity if pre/post vector count is more than min_vecs" has been added to the 4.12-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
PCI/MSI: Ignore affinity if pre/post vector count is more than min_vecs
to the 4.12-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pci-msi-ignore-affinity-if-pre-post-vector-count-is-more-than-min_vecs.patch
and it can be found in the queue-4.12 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6f9a22bc5775d231ab8fbe2c2f3c88e45e3e7c28Mon Sep 17 00:00:00 2001
From: Michael Hernandez <[email protected]>
Date: Thu, 18 May 2017 10:47:47 -0700
Subject: PCI/MSI: Ignore affinity if pre/post vector count is more than min_vecs
From: Michael Hernandez <[email protected]>
commit 6f9a22bc5775d231ab8fbe2c2f3c88e45e3e7c28 upstream.
min_vecs is the minimum amount of vectors needed to operate in MSI-X mode which may just include the vectors that don't need affinity.
Disabling affinity settings causes the qla2xxx driver scsi_add_host() to fail when blk_mq is enabled as the blk_mq_pci_map_queues() expects affinity masks on each vector.
--- drivers/pci/msi.c | 14 ++------------ include/linux/interrupt.h | 4 ++-- kernel/irq/affinity.c | 13 ++++++++++++- 3 files changed, 16 insertions(+), 15 deletions(-)
drivers/pci/msi.c +2 -12
@@ -1058,7 +1058,7 @@ static int __pci_enable_msi_range(structfor (;;) {if (affd) { - nvec =irq_calc_affinity_vectors (nvec, affd); + nvec =irq_calc_affinity_vectors (minvec, nvec, affd);if (nvec < minvec)return -ENOSPC ; }
@@ -1097,7 +1097,7 @@ static int __pci_enable_msix_range(strucfor (;;) {if (affd) { - nvec =irq_calc_affinity_vectors (nvec, affd); + nvec =irq_calc_affinity_vectors (minvec, nvec, affd);if (nvec < minvec)return -ENOSPC ; }
@@ -1165,16 +1165,6 @@ int pci_alloc_irq_vectors_affinity(strucif (flags &PCI_IRQ_AFFINITY ) {if (!affd) affd = &msi_default_affd; - -if (affd->pre_vectors + affd->post_vectors > min_vecs) -return -EINVAL ; - -/* -* If there aren't any vectors left after applying the pre/post -* vectors don't bother with assigning affinity. -*/ -if (affd->pre_vectors + affd->post_vectors == min_vecs) - affd =NULL ; }else {if (WARN_ON (affd)) affd =NULL ;
include/linux/interrupt.h +2 -2
@@ -291,7 +291,7 @@ extern int irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify);struct cpumask *irq_create_affinity_masks (int nvec,const struct irq_affinity *affd); -int irq_calc_affinity_vectors (int maxvec,const struct irq_affinity *affd); +int irq_calc_affinity_vectors (int minvec,int maxvec,const struct irq_affinity *affd);#else /* CONFIG_SMP */
@@ -331,7 +331,7 @@ irq_create_affinity_masks(int nvec, cons }static inline int -irq_calc_affinity_vectors (int maxvec,const struct irq_affinity *affd) +irq_calc_affinity_vectors (int minvec,int maxvec,const struct irq_affinity *affd) {return maxvec; }
kernel/irq/affinity.c +12 -1
@@ -66,6 +66,13 @@ irq_create_affinity_masks(int nvecs, construct cpumask *masks;cpumask_var_t nmsk; +/* +* If there aren't any vectors left after applying the pre/post +* vectors don't bother with assigning affinity. +*/ +if (!affv) +return NULL ; +if (!zalloc_cpumask_var (&nmsk,GFP_KERNEL ))return NULL ;
@@ -140,15 +147,19 @@ out:/** * irq_calc_affinity_vectors - Calculate the optimal number of vectors +* @minvec: The minimum number of vectors available * @maxvec: The maximum number of vectors available * @affd: Description of the affinity requirements */ -int irq_calc_affinity_vectors (int maxvec,const struct irq_affinity *affd) +int irq_calc_affinity_vectors (int minvec,int maxvec,const struct irq_affinity *affd) {int resv = affd->pre_vectors + affd->post_vectors;int vecs = maxvec - resv;int cpus; +if (resv > minvec) +return 0 ; +/* Stabilize the cpumasks */ get_online_cpus (); cpus =cpumask_weight (cpu_online_mask);
Patches currently in stable-queue which might be from [email protected] are
queue-4.12/pci-msi-ignore-affinity-if-pre-post-vector-count-is-more-than-min_vecs.patch