From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Bader Subject: Re: Question about apic ipi interface Date: Wed, 08 May 2013 18:26:40 +0200 Message-ID: <518A7CC0.6030504@canonical.com> References: <51765D56.1000906@canonical.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3689348374036713428==" Return-path: In-Reply-To: <51765D56.1000906@canonical.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: "xen-devel@lists.xensource.com" , Ben Guthro Cc: Lin Ming , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --===============3689348374036713428== Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="------------enig8F06CF80284F94CC8AEC7A55" This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig8F06CF80284F94CC8AEC7A55 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On 23.04.2013 12:07, Stefan Bader wrote: > I was looking at some older patch and there is one thing I do not under= stand. >=20 > commit f447d56d36af18c5104ff29dcb1327c0c0ac3634 > xen: implement apic ipi interface >=20 > Specifically there the implementation of xen_send_IPI_mask_allbutself()= =2E >=20 > void xen_send_IPI_mask_allbutself(const struct cpumask *mask, > int vector) > { > unsigned cpu; > unsigned int this_cpu =3D smp_processor_id(); >=20 > if (!(num_online_cpus() > 1)) > return; >=20 > for_each_cpu_and(cpu, mask, cpu_online_mask) { > if (this_cpu =3D=3D cpu) > continue; >=20 > xen_smp_send_call_function_single_ipi(cpu); > } > } >=20 > Why is this using xen_smp_send_call_function_single_ipi()? This dumps t= he > supplied vector and always uses XEN_CALL_FUNCTION_SINGLE_VECTOR. In con= trast the > xen_send_IPI_all() and xen_send_IPI_self() keep the (mapped) vector. >=20 > Mildly wondering about whether call function would need special casing = (just > because xen_smp_send_call_function_ipi() is special). But I don't have = the big > picture there. >=20 This never got really answered, so lets try this: Does the following patc= h seem to make sense? I know, it has not caused any obvious regressions but at l= east this would look more in agreement with the other code. It has not blown u= p on a normal boot either. Ben, is there a simple way that I would trigger the problem you had? -Stefan =46rom e13703426f367c618f2984d376289b197a8c0402 Mon Sep 17 00:00:00 2001 From: Stefan Bader Date: Wed, 8 May 2013 16:37:35 +0200 Subject: [PATCH] xen: Clean up apic ipi interface Commit f447d56d36af18c5104ff29dcb1327c0c0ac3634 introduced the implementation of the PV apic ipi interface. But there were some odd things (it seems none of which cause really any issue but maybe they should be cleaned up anyway): - xen_send_IPI_mask_allbutself (and by that xen_send_IPI_allbutself) ignore the passed in vector and only use the CALL_FUNCTION_SINGLE vector. While xen_send_IPI_all and xen_send_IPI_mask use the vector. - physflat_send_IPI_allbutself is declared unnecessarily. It is never used. This patch tries to clean up those things. Signed-off-by: Stefan Bader --- arch/x86/xen/smp.c | 10 ++++------ arch/x86/xen/smp.h | 1 - 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 8ff3799..fb44426 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c @@ -576,24 +576,22 @@ void xen_send_IPI_mask_allbutself(const struct cpum= ask *mask, { unsigned cpu; unsigned int this_cpu =3D smp_processor_id(); + int xen_vector =3D xen_map_vector(vector); - if (!(num_online_cpus() > 1)) + if (!(num_online_cpus() > 1) || (xen_vector < 0)) return; for_each_cpu_and(cpu, mask, cpu_online_mask) { if (this_cpu =3D=3D cpu) continue; - xen_smp_send_call_function_single_ipi(cpu); + xen_send_IPI_one(cpu, xen_vector); } } void xen_send_IPI_allbutself(int vector) { - int xen_vector =3D xen_map_vector(vector); - - if (xen_vector >=3D 0) - xen_send_IPI_mask_allbutself(cpu_online_mask, xen_vector)= ; + xen_send_IPI_mask_allbutself(cpu_online_mask, vector); } static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id) diff --git a/arch/x86/xen/smp.h b/arch/x86/xen/smp.h index 8981a76..c7c2d89 100644 --- a/arch/x86/xen/smp.h +++ b/arch/x86/xen/smp.h @@ -5,7 +5,6 @@ extern void xen_send_IPI_mask(const struct cpumask *mask,= extern void xen_send_IPI_mask_allbutself(const struct cpumask *mask, int vector); extern void xen_send_IPI_allbutself(int vector); -extern void physflat_send_IPI_allbutself(int vector); extern void xen_send_IPI_all(int vector); extern void xen_send_IPI_self(int vector); --=20 1.7.9.5 --------------enig8F06CF80284F94CC8AEC7A55 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with undefined - http://www.enigmail.net/ iQIcBAEBCgAGBQJRinzBAAoJEOhnXe7L7s6jjoEP/2rZPiE/G1sSsxcJRd0x5BPv uqc+gK3KAnqRXhpBHCYUec9FpOA3TJTo8qMIQKoK0Qk3w0y+y+kCALCiDu1z1jon YyT9hmkVURkRGegfdUVFE+tBVr5uA33KjIJcIgG1AY9VxGxSjIXxwpm61jDeigM5 T4dtEc1JxHjJyjN0TFNBOxa3z8FZuAw2gU7ph1HgTPWTvfoq7db0n0AGr6yFitkT OkGUo1VpgVRIYVgbylQ3HRz7agjqB8IvHNolsg9oewOVizCYqj3Z6EC00UGYrE89 Y0Kj/c4GGDR81n+jJcIT9X7kzjXz/1ub7utIzfTdYgdMCYygv3625alEmbA/JoBF 7gxKQKiHD8PipAsx7h92bljZDOx6X38a1dJeikCnJ9pJSnlt2yrH+Ewt60dj7El3 9AOzb4X7uZnV1EuwB9J+kKr4T67CSLhdR8GixHH8cDG8a07YFjV5LAv/Sa4oZ9hw /oiIYASiDlzWRAZ6Xbavc7NjGNPqHaJ4rT5APsfuwho0uagr86Dz0QMzio3p3Mtf PzIAgB4dK7gIyXSGx690Te+jLKS5Y/wLPelVW1mx1QbuiJUE5nFlH3ACzajzVpYt vN667SQlmELLI+dWmxh+m+sEmpqw0uNjIn7ZumN1fVM4q/PBPNwjcwzatfquXZWn 7ofnozoKoOMMr+A3ZjF3 =3ydS -----END PGP SIGNATURE----- --------------enig8F06CF80284F94CC8AEC7A55-- --===============3689348374036713428== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============3689348374036713428==--