Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Dec 2014 13:17:28 -0700
From:      "Justin T. Gibbs" <gibbs@scsiguy.com>
To:        Roger Pau MonnXX <royger@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r275679 - head/sys/x86/xen
Message-ID:  <BC85A0F1-E83F-4CB3-B026-7C15203C7AB1@scsiguy.com>
In-Reply-To: <201412101325.sBADPMgZ081973@svn.freebsd.org>
References:  <201412101325.sBADPMgZ081973@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Dec 10, 2014, at 6:25 AM, Roger Pau MonnXX <royger@FreeBSD.org> =
wrote:
>=20
> Author: royger
> Date: Wed Dec 10 13:25:21 2014
> New Revision: 275679
> URL: https://svnweb.freebsd.org/changeset/base/275679
>=20
> Log:
>  xen/intr: balance dynamic interrupts across available vCPUs
>=20
>  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.=20
>=20
>  This does not affect VIRQ or IPI event channels, that are already =
bound to a
>  specific vCPU as requested by the caller.
>=20
>  Sponsored by: Citrix Systems R&D
>=20
> Modified:
>  head/sys/x86/xen/xen_intr.c
>=20
> Modified: head/sys/x86/xen/xen_intr.c
> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
> --- 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 =3D &isrc->xi_port;
>=20
> +#ifdef SMP
> +	if (type =3D=3D 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
> +

Shouldn't this only happen for new interrupt source objects, not those =
that are being reclaimed/reused?

=E2=80=94
Justin=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BC85A0F1-E83F-4CB3-B026-7C15203C7AB1>