提交 41b3cf08 编写于 作者: S Stephen M. Cameron 提交者: Christoph Hellwig

hpsa: set irq affinity hints to route MSI-X vectors across CPUs

Signed-off-by: NStephen M. Cameron <scameron@beardog.cce.hp.com>
Reviewed-by: NMike Miller <michael.miller@canonical.com>
Reviewed-by: NScott Teel <scott.teel@hp.com>
Signed-off-by: NChristoph Hellwig <hch@lst.de>
上级 072b0518
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册