hpsa: set irq affinity hints to route MSI-X vectors across CPUs
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> Reviewed-by: Mike Miller <michael.miller@canonical.com> Reviewed-by: Scott Teel <scott.teel@hp.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
072b0518b0
commit
41b3cf08cd
1 changed files with 16 additions and 1 deletions
|
@ -6615,6 +6615,17 @@ static void hpsa_free_cmd_pool(struct ctlr_info *h)
|
|||
h->ioaccel_cmd_pool, h->ioaccel_cmd_pool_dhandle);
|
||||
}
|
||||
|
||||
static void hpsa_irq_affinity_hints(struct ctlr_info *h)
|
||||
{
|
||||
int i, cpu, rc;
|
||||
|
||||
cpu = cpumask_first(cpu_online_mask);
|
||||
for (i = 0; i < h->msix_vector; i++) {
|
||||
rc = irq_set_affinity_hint(h->intr[i], get_cpu_mask(cpu));
|
||||
cpu = cpumask_next(cpu, cpu_online_mask);
|
||||
}
|
||||
}
|
||||
|
||||
static int hpsa_request_irq(struct ctlr_info *h,
|
||||
irqreturn_t (*msixhandler)(int, void *),
|
||||
irqreturn_t (*intxhandler)(int, void *))
|
||||
|
@ -6634,6 +6645,7 @@ static int hpsa_request_irq(struct ctlr_info *h,
|
|||
rc = request_irq(h->intr[i], msixhandler,
|
||||
0, h->devname,
|
||||
&h->q[i]);
|
||||
hpsa_irq_affinity_hints(h);
|
||||
} else {
|
||||
/* Use single reply pool */
|
||||
if (h->msix_vector > 0 || h->msi_vector) {
|
||||
|
@ -6685,12 +6697,15 @@ static void free_irqs(struct ctlr_info *h)
|
|||
if (!h->msix_vector || h->intr_mode != PERF_MODE_INT) {
|
||||
/* Single reply queue, only one irq to free */
|
||||
i = h->intr_mode;
|
||||
irq_set_affinity_hint(h->intr[i], NULL);
|
||||
free_irq(h->intr[i], &h->q[i]);
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < h->msix_vector; i++)
|
||||
for (i = 0; i < h->msix_vector; i++) {
|
||||
irq_set_affinity_hint(h->intr[i], NULL);
|
||||
free_irq(h->intr[i], &h->q[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void hpsa_free_irqs_and_disable_msix(struct ctlr_info *h)
|
||||
|
|
Loading…
Reference in a new issue