Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Dec 2014 13:25:22 +0000 (UTC)
From:      Roger Pau Monné <royger@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r275679 - head/sys/x86/xen
Message-ID:  <201412101325.sBADPMgZ081973@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: royger
Date: Wed Dec 10 13:25:21 2014
New Revision: 275679
URL: https://svnweb.freebsd.org/changeset/base/275679

Log:
  xen/intr: balance dynamic interrupts across available vCPUs
  
  By default Xen binds all event channels to vCPU#0, and FreeBSD only shuffles
  the interrupt sources once, at the end of the boot process. Since new event
  channels might be created after this point (because new devices or backends
  are added), try to automatically shuffle them at creation time.
  
  This does not affect VIRQ or IPI event channels, that are already bound to a
  specific vCPU as requested by the caller.
  
  Sponsored by: Citrix Systems R&D

Modified:
  head/sys/x86/xen/xen_intr.c

Modified: head/sys/x86/xen/xen_intr.c
==============================================================================
--- head/sys/x86/xen/xen_intr.c	Wed Dec 10 11:42:02 2014	(r275678)
+++ head/sys/x86/xen/xen_intr.c	Wed Dec 10 13:25:21 2014	(r275679)
@@ -425,6 +425,17 @@ xen_intr_bind_isrc(struct xenisrc **isrc
 	/* Assign the opaque handler (the event channel port) */
 	*port_handlep = &isrc->xi_port;
 
+#ifdef SMP
+	if (type == EVTCHN_TYPE_PORT) {
+		/*
+		 * By default all interrupts are assigned to vCPU#0
+		 * unless specified otherwise, so shuffle them to balance
+		 * the interrupt load.
+		 */
+		xen_intr_assign_cpu(&isrc->xi_intsrc, intr_next_cpu());
+	}
+#endif
+
 	if (filter == NULL && handler == NULL) {
 		/*
 		 * No filter/handler provided, leave the event channel



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201412101325.sBADPMgZ081973>