svn commit: r299443 - head/sys/dev/vnic
Zbigniew Bodek
zbb at FreeBSD.org
Wed May 11 13:20:30 UTC 2016
Author: zbb
Date: Wed May 11 13:20:29 2016
New Revision: 299443
URL: https://svnweb.freebsd.org/changeset/base/299443
Log:
Bind CQ interrupts and tasks to separate CPUs in VNIC
Delegate interrupts and completion tasks on separate CPUs
for each VNIC.
Reviewed by: wma
Obtained from: Semihalf
Sponsored by: Cavium
Differential Revision: https://reviews.freebsd.org/D6229
Modified:
head/sys/dev/vnic/nicvf_main.c
head/sys/dev/vnic/nicvf_queues.h
Modified: head/sys/dev/vnic/nicvf_main.c
==============================================================================
--- head/sys/dev/vnic/nicvf_main.c Wed May 11 12:58:12 2016 (r299442)
+++ head/sys/dev/vnic/nicvf_main.c Wed May 11 13:20:29 2016 (r299443)
@@ -1296,6 +1296,7 @@ nicvf_release_net_interrupts(struct nicv
static int
nicvf_allocate_net_interrupts(struct nicvf *nic)
{
+ u_int cpuid;
int irq, rid;
int qidx;
int ret = 0;
@@ -1332,6 +1333,20 @@ nicvf_allocate_net_interrupts(struct nic
(irq - NICVF_INTR_ID_CQ), device_get_unit(nic->dev));
goto error;
}
+ cpuid = (device_get_unit(nic->dev) * CMP_QUEUE_CNT) + qidx;
+ cpuid %= mp_ncpus;
+ /*
+ * Save CPU ID for later use when system-wide RSS is enabled.
+ * It will be used to pit the CQ task to the same CPU that got
+ * interrupted.
+ */
+ nic->qs->cq[qidx].cmp_cpuid = cpuid;
+ if (bootverbose) {
+ device_printf(nic->dev, "bind CQ%d IRQ to CPU%d\n",
+ qidx, cpuid);
+ }
+ /* Bind interrupts to the given CPU */
+ bus_bind_intr(nic->dev, nic->msix_entries[irq].irq_res, cpuid);
}
/* Register RBDR interrupt */
Modified: head/sys/dev/vnic/nicvf_queues.h
==============================================================================
--- head/sys/dev/vnic/nicvf_queues.h Wed May 11 12:58:12 2016 (r299442)
+++ head/sys/dev/vnic/nicvf_queues.h Wed May 11 13:20:29 2016 (r299443)
@@ -296,6 +296,7 @@ struct cmp_queue {
struct task cmp_task;
struct taskqueue *cmp_taskq;
+ u_int cmp_cpuid; /* CPU to which bind the CQ task */
void *desc;
struct q_desc_mem dmem;
More information about the svn-src-head
mailing list