On 1/8/19 10:16 PM, Don.Brace@xxxxxxxxxxxxx wrote:
On 12/3/18 11:35 PM, Don Brace wrote:
The PCI_IRQ_AFFINITY flag prevents customers from changing the
smp_affinity and smp_affinity_list entries.
- add a module parameter to allow this flag to be turned
off.
- to turn off PCI_IRQ_AFFINITY:
flag hpsa_disable_irq_affinity=1
Reviewed-by: David Carroll <david.carroll@xxxxxxxxxxxxx>
Reviewed-by: Scott Teel <scott.teel@xxxxxxxxxxxxx>
Signed-off-by: Don Brace <don.brace@xxxxxxxxxxxxx>
---
drivers/scsi/hpsa.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index
c9cccf35e9d7..0aa5aa66151f 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -87,6 +87,10 @@ static int hpsa_simple_mode;
module_param(hpsa_simple_mode, int, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(hpsa_simple_mode,
"Use 'simple mode' rather than 'performant mode'");
+static bool hpsa_disable_irq_affinity;
+module_param(hpsa_disable_irq_affinity, bool, S_IRUGO|S_IWUSR);
+MODULE_PARM_DESC(hpsa_disable_irq_affinity,
+ "Turn off managed irq affinity. Allows smp_affinity to be
+changed.");
/* define the PCI info for the cards we can control */
static const struct pci_device_id hpsa_pci_device_id[] = { @@
-7389,7 +7393,7 @@ static void hpsa_setup_reply_map(struct ctlr_info *h)
*/
static int hpsa_interrupt_mode(struct ctlr_info *h)
{
- unsigned int flags = PCI_IRQ_LEGACY;
+ unsigned int flags;
int ret;
/* Some boards advertise MSI but don't really support it */ @@
-7400,17 +7404,20 @@ static int hpsa_interrupt_mode(struct ctlr_info *h)
case 0x40830E11:
break;
default:
+ flags = PCI_IRQ_MSIX;
+ if (!hpsa_disable_irq_affinity)
+ flags |= PCI_IRQ_AFFINITY;
ret = pci_alloc_irq_vectors(h->pdev, 1, MAX_REPLY_QUEUES,
- PCI_IRQ_MSIX | PCI_IRQ_AFFINITY);
+ flags);
if (ret > 0) {
h->msix_vectors = ret;
return 0;
}
- flags |= PCI_IRQ_MSI;
break;
}
+ flags = PCI_IRQ_LEGACY | PCI_IRQ_MSI;
ret = pci_alloc_irq_vectors(h->pdev, 1, 1, flags);
if (ret < 0)
return ret;
That completely breaks multiqueue.
You sure about this?
What is the intention here?
Any more thoughts on these comments?
This patch is a result of some customers complaining that they cannot alter the smp_affinity* entries
for hpsa because the vectors are managed.
The message is: write error: Input/output error
I added the module parameter to allow them to turn off the affinity flag so they can set the mask to
whatever they want, but leaves the default behavior in-place.
Is there a better method?
Shouldn't we rather figure out what is triggering the I/O error?
Have you checked that we're not running into the issue discussed in the
thread 'scsi: hpsa: fix selection of reply queue' ?
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare@xxxxxxx +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)