From nobody Thu May 2 06:50:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 15819650739611000.8509082117891; Mon, 17 Feb 2020 10:44:33 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMl-0000eM-Aa; Mon, 17 Feb 2020 18:43:35 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMk-0000dp-8t for xen-devel@lists.xenproject.org; Mon, 17 Feb 2020 18:43:34 +0000 Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 65fc6f2c-51b5-11ea-8038-12813bfff9fa; Mon, 17 Feb 2020 18:43:33 +0000 (UTC) X-Inumbo-ID: 65fc6f2c-51b5-11ea-8038-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1581965013; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mlsmzQpsByYtImnlFzRVdve76l4HJA+N0aDn+HBAbpE=; b=Yq3K9tf431qqud8z4VBeCb2yBpN9TOfQHuYE45q1siyxJyLwmOfkFYVH oR9eBY9xu+SmKyq1BBXbCfvi+Q5bsGJ3l+m1ZYXSJuewcJQnCvJl9WiiV 5Jzutn+6/iM3gLIWjz05vfONcPgjBX1cLumYfLbJVTU6yjHJNNpWdiMTI M=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: hkN+OVyLWxW8V8PMG2PhCTr+51TDu2AIczBKp2Z1AjRaHxkFHHKvQ3ZZK3rtU0ab0DalmArr1I iYe8LhLqP0W458qZt9pXOD0dMNYqKM//eBh5bG1xV6fisNS7tvumbRxkoE2qrxEFVGJfEhmd1B 9ryrwbqEwf/fsSbKkjv2bk5T+btHzHZKwSFuxOea5eD7f3EFw+9yp0ExTzAcGaBoyupDmdrCsh QTs8kj+jjU54MR0rCDKDCY+/YWStEIEdpWNYnEZkw6Kmc+Lc/bQFs/fvM+345Hi9uASQOqWzgE sZQ= X-SBRS: 2.7 X-MesageID: 13012607 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,453,1574139600"; d="scan'208";a="13012607" From: Roger Pau Monne To: Date: Mon, 17 Feb 2020 19:43:19 +0100 Message-ID: <20200217184324.73762-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200217184324.73762-1-roger.pau@citrix.com> References: <20200217184324.73762-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 1/6] x86/smp: unify header includes in smp.h X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Wei Liu , Jan Beulich , Roger Pau Monne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Unify the two adjacent header includes that are both gated with ifndef __ASSEMBLY__. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Wei Liu Acked-by: Jan Beulich --- xen/include/asm-x86/smp.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/xen/include/asm-x86/smp.h b/xen/include/asm-x86/smp.h index 1aa55d41e1..92d69a5ea0 100644 --- a/xen/include/asm-x86/smp.h +++ b/xen/include/asm-x86/smp.h @@ -5,13 +5,10 @@ * We need the APIC definitions automatically as part of 'smp.h' */ #ifndef __ASSEMBLY__ +#include #include #include #include -#endif - -#ifndef __ASSEMBLY__ -#include #include #endif =20 --=20 2.25.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel From nobody Thu May 2 06:50:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1581965070318710.4507687932315; Mon, 17 Feb 2020 10:44:30 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMq-0000eb-Jf; Mon, 17 Feb 2020 18:43:40 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMp-0000eT-94 for xen-devel@lists.xenproject.org; Mon, 17 Feb 2020 18:43:39 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 672916a2-51b5-11ea-8038-12813bfff9fa; Mon, 17 Feb 2020 18:43:35 +0000 (UTC) X-Inumbo-ID: 672916a2-51b5-11ea-8038-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1581965016; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zvSnCknfcw7YwjGcS2Fu6izRD7hCBJjuL0aQoYB/Cq0=; b=JWbJCZkTAoYjqxnx+iCBVXM2L8NMxO8ZwzCEXr2nWn4P5++bIS4tje56 iI8tbKDSvfayrQOG1wPiV+pxJRhQAXWrbc447izXE0BnVRwIIBTBZSYHn oRK4g1/zdzgP3ArfdDVPiDRlasoNwz4yaZEqFayr5gguXRZQmUGwy44MK 8=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa3.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: yg13t0l5wLPmiFeYL3AQZb3ZEgw0q1lgLQjYqKL3aU/E5J0IoWpVEaP2ZNzYkmyewUozvcurf+ VzHTCsZf+9pFtKhgS30BcdKZxXI1kxRreChDXt1gg/AiamkC+XjPyAoDOQGtTsd5P7nkttU8nM TEvIrEWM0YM9tkvpV3wqlKDMJOWboAlLGdkeX0+38q3uYPG24NzNwlx76qIFovtftepMEa7jHV 0uTuoxVK/uxM3EtKxwbTLp+BmQP4t2rRBPLEonR+4HpjPKXmAc6oLv+B24QRHCYqVM2B/mW0G7 pXY= X-SBRS: 2.7 X-MesageID: 12569856 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,453,1574139600"; d="scan'208";a="12569856" From: Roger Pau Monne To: Date: Mon, 17 Feb 2020 19:43:20 +0100 Message-ID: <20200217184324.73762-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200217184324.73762-1-roger.pau@citrix.com> References: <20200217184324.73762-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 2/6] x86: introduce a nmi_count tracking variable X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Wei Liu , Jan Beulich , Roger Pau Monne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) This is modeled after the irq_count variable, and is used to account for all the NMIs handled by the system. This will allow to repurpose the nmi_count() helper so it can be used in a similar manner as local_irq_count(): account for the NMIs currently in service. Signed-off-by: Roger Pau Monn=C3=A9 --- xen/arch/x86/nmi.c | 11 +++++------ xen/arch/x86/traps.c | 4 +++- xen/include/asm-x86/nmi.h | 2 ++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c index a5c6bdd0ce..e286ceeb40 100644 --- a/xen/arch/x86/nmi.c +++ b/xen/arch/x86/nmi.c @@ -151,15 +151,14 @@ int nmi_active; =20 static void __init wait_for_nmis(void *p) { - unsigned int cpu =3D smp_processor_id(); - unsigned int start_count =3D nmi_count(cpu); + unsigned int start_count =3D this_cpu(nmi_count); unsigned long ticks =3D 10 * 1000 * cpu_khz / nmi_hz; unsigned long s, e; =20 s =3D rdtsc(); do { cpu_relax(); - if ( nmi_count(cpu) >=3D start_count + 2 ) + if ( this_cpu(nmi_count) >=3D start_count + 2 ) break; e =3D rdtsc(); } while( e - s < ticks ); @@ -177,7 +176,7 @@ void __init check_nmi_watchdog(void) printk("Testing NMI watchdog on all CPUs:"); =20 for_each_online_cpu ( cpu ) - prev_nmi_count[cpu] =3D nmi_count(cpu); + prev_nmi_count[cpu] =3D per_cpu(nmi_count, cpu); =20 /* * Wait at most 10 ticks for 2 watchdog NMIs on each CPU. @@ -188,7 +187,7 @@ void __init check_nmi_watchdog(void) =20 for_each_online_cpu ( cpu ) { - if ( nmi_count(cpu) - prev_nmi_count[cpu] < 2 ) + if ( per_cpu(nmi_count, cpu) - prev_nmi_count[cpu] < 2 ) { printk(" %d", cpu); ok =3D false; @@ -593,7 +592,7 @@ static void do_nmi_stats(unsigned char key) =20 printk("CPU\tNMI\n"); for_each_online_cpu ( i ) - printk("%3d\t%3d\n", i, nmi_count(i)); + printk("%3d\t%3u\n", i, per_cpu(nmi_count, i)); =20 if ( ((d =3D hardware_domain) =3D=3D NULL) || (d->vcpu =3D=3D NULL) || ((v =3D d->vcpu[0]) =3D=3D NULL) ) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 56067f85d1..3dbc66bb64 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1683,13 +1683,15 @@ static int dummy_nmi_callback(const struct cpu_user= _regs *regs, int cpu) =20 static nmi_callback_t *nmi_callback =3D dummy_nmi_callback; =20 +DEFINE_PER_CPU(unsigned int, nmi_count); + void do_nmi(const struct cpu_user_regs *regs) { unsigned int cpu =3D smp_processor_id(); unsigned char reason =3D 0; bool handle_unknown =3D false; =20 - ++nmi_count(cpu); + this_cpu(nmi_count)++; =20 if ( nmi_callback(regs, cpu) ) return; diff --git a/xen/include/asm-x86/nmi.h b/xen/include/asm-x86/nmi.h index f9dfca6afb..a288f02a50 100644 --- a/xen/include/asm-x86/nmi.h +++ b/xen/include/asm-x86/nmi.h @@ -31,5 +31,7 @@ nmi_callback_t *set_nmi_callback(nmi_callback_t *callback= ); * Remove the handler previously set. */ void unset_nmi_callback(void); + +DECLARE_PER_CPU(unsigned int, nmi_count); =20 #endif /* ASM_NMI_H */ --=20 2.25.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel From nobody Thu May 2 06:50:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1581965071444923.025322084767; Mon, 17 Feb 2020 10:44:31 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMv-0000fq-Bx; Mon, 17 Feb 2020 18:43:45 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMu-0000fV-9U for xen-devel@lists.xenproject.org; Mon, 17 Feb 2020 18:43:44 +0000 Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 687a3950-51b5-11ea-8038-12813bfff9fa; Mon, 17 Feb 2020 18:43:37 +0000 (UTC) X-Inumbo-ID: 687a3950-51b5-11ea-8038-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1581965017; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4j+WbkFE7AWIO7cVB83xA353YO0IfdxqaC8Gk9EZ4MI=; b=RDW75HEtpVLlHgRiOXocvAbsKcmUEtJgKL2BcBZHJ3IuvWWGv2gk8dg9 875q2Kiiyil42rvcZzQxH6K0XHg8n1ZQItYvxWlQ74xIDJwhbFFTbvvxl O4fHhuNi0pwV6NiUxCAFLQJxuqBwqioWqO/n85SNLbKMZxJW6Ix97VfSa 0=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: MNwiqqrV21DkOUUhpD/MkIGw3yAgagHNq3jDTOvDw6t5Ui2emxenESnbJy/4FlWAQHtoc2yZD2 00Abuy78ptN02u3a4kibQkK/4Cizs5a3NrMVOwuLevQSbfRoQcie2Xp+P2lJKsqBETxwyq+WAq Hq461wZcEBJOrxixYQebw9CXrJEpwmMS3P43kEup8jXFwUaJF6WR+2/bKTwZR53T5mMtlvUGXM HoxeX/lzer6/LQ+u43LN7e9RHjNuznWZAwQqshSs3dDD7eBoQ3azhEHG6svcDyDHxxC6792u0q grU= X-SBRS: 2.7 X-MesageID: 13202708 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,453,1574139600"; d="scan'208";a="13202708" From: Roger Pau Monne To: Date: Mon, 17 Feb 2020 19:43:21 +0100 Message-ID: <20200217184324.73762-4-roger.pau@citrix.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200217184324.73762-1-roger.pau@citrix.com> References: <20200217184324.73762-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 3/6] x86: track when in #MC context X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Stefano Stabellini , Julien Grall , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Jan Beulich , Roger Pau Monne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Add helpers to track when executing in #MC context. This is modeled after the in_irq helpers. Note that there are no users of in_mc() introduced by the change, further users will be added by followup changes. Signed-off-by: Roger Pau Monn=C3=A9 --- xen/arch/x86/cpu/mcheck/mce.c | 2 ++ xen/include/asm-x86/hardirq.h | 5 +++++ xen/include/xen/irq_cpustat.h | 1 + 3 files changed, 8 insertions(+) diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c index d61e582af3..93ed5752ac 100644 --- a/xen/arch/x86/cpu/mcheck/mce.c +++ b/xen/arch/x86/cpu/mcheck/mce.c @@ -93,7 +93,9 @@ void x86_mce_vector_register(x86_mce_vector_t hdlr) =20 void do_machine_check(const struct cpu_user_regs *regs) { + mc_enter(); _machine_check_vector(regs); + mc_exit(); } =20 /* diff --git a/xen/include/asm-x86/hardirq.h b/xen/include/asm-x86/hardirq.h index 34e1b49260..af3eab6a4d 100644 --- a/xen/include/asm-x86/hardirq.h +++ b/xen/include/asm-x86/hardirq.h @@ -8,6 +8,7 @@ typedef struct { unsigned int __softirq_pending; unsigned int __local_irq_count; unsigned int __nmi_count; + unsigned int mc_count; bool_t __mwait_wakeup; } __cacheline_aligned irq_cpustat_t; =20 @@ -18,6 +19,10 @@ typedef struct { #define irq_enter() (local_irq_count(smp_processor_id())++) #define irq_exit() (local_irq_count(smp_processor_id())--) =20 +#define in_mc() (mc_count(smp_processor_id()) !=3D 0) +#define mc_enter() (mc_count(smp_processor_id())++) +#define mc_exit() (mc_count(smp_processor_id())--) + void ack_bad_irq(unsigned int irq); =20 extern void apic_intr_init(void); diff --git a/xen/include/xen/irq_cpustat.h b/xen/include/xen/irq_cpustat.h index 73629f6ec8..12b932fc39 100644 --- a/xen/include/xen/irq_cpustat.h +++ b/xen/include/xen/irq_cpustat.h @@ -26,5 +26,6 @@ extern irq_cpustat_t irq_stat[]; #define local_irq_count(cpu) __IRQ_STAT((cpu), __local_irq_count) #define nmi_count(cpu) __IRQ_STAT((cpu), __nmi_count) #define mwait_wakeup(cpu) __IRQ_STAT((cpu), __mwait_wakeup) +#define mc_count(cpu) __IRQ_STAT((cpu), mc_count) =20 #endif /* __irq_cpustat_h */ --=20 2.25.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel From nobody Thu May 2 06:50:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1581965071719968.8021932314897; Mon, 17 Feb 2020 10:44:31 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lN1-0000iR-3l; Mon, 17 Feb 2020 18:43:51 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMz-0000hW-9q for xen-devel@lists.xenproject.org; Mon, 17 Feb 2020 18:43:49 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 6898f1bb-51b5-11ea-8038-12813bfff9fa; Mon, 17 Feb 2020 18:43:38 +0000 (UTC) X-Inumbo-ID: 6898f1bb-51b5-11ea-8038-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1581965019; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=rG8KLMeN06AJxdotn6i7hM/KmkebutaAnlDONowQjhw=; b=eAYZbMzlRNewwslS8fgsC6Ae6JgNQ0zUwLKRq5EIWtKWBInH4UyTMFVa TAEhOlxPx5JCWYyECw6JeQ6xh1p15fU3VGcMS/RNEkTqLSa11Qa9lCiJA 8JNGMdI0E4xZTpk0YI3PGT56nJtYnDYKs9Pkkb2vR3vkZQYY1btIK532i A=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa3.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: TD5CMsJuxOKjuqygVLYHDDocyC5WLDc+97MjO5N0kR0AxqqiKjzSqhmfOd7yvGwulMNaCogCHB IH+2kBIA1tsZ3O5nX9yzRROThONTMRhpCnXmhISKUsrG0Ll7BIx+lh8j1d4eoj+Li6Nz6adrX0 nNZvHlTJ7ltZPNLFSSrCitsT2jY2kERDI3+yzoEKWDycnLvEiFBJCsQ0HaCFJQ1RgyW9icuNMo YYl6AyBmxjhSyAr9AO723Cb+hVLwTGXAT9LsjYVZN3hBDGFMoZwZsThxcBhH9WA72eF0TTtX4u cNA= X-SBRS: 2.7 X-MesageID: 12569860 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,453,1574139600"; d="scan'208";a="12569860" From: Roger Pau Monne To: Date: Mon, 17 Feb 2020 19:43:22 +0100 Message-ID: <20200217184324.73762-5-roger.pau@citrix.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200217184324.73762-1-roger.pau@citrix.com> References: <20200217184324.73762-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 4/6] x86: track when in #NMI context X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Wei Liu , Jan Beulich , Roger Pau Monne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Add helpers to track when running in #MC context. This is modeled after the in_irq helpers, but does not support reentry. Note that there are no users of in_mc() introduced by the change, further users will be added by followup changes. Signed-off-by: Roger Pau Monn=C3=A9 --- xen/arch/x86/traps.c | 6 ++++++ xen/include/asm-x86/hardirq.h | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 3dbc66bb64..f4f2c13ae9 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1692,9 +1692,13 @@ void do_nmi(const struct cpu_user_regs *regs) bool handle_unknown =3D false; =20 this_cpu(nmi_count)++; + nmi_enter(); =20 if ( nmi_callback(regs, cpu) ) + { + nmi_exit(); return; + } =20 /* * Accessing port 0x61 may trap to SMM which has been actually @@ -1720,6 +1724,8 @@ void do_nmi(const struct cpu_user_regs *regs) if ( !(reason & 0xc0) && handle_unknown ) unknown_nmi_error(regs, reason); } + + nmi_exit(); } =20 nmi_callback_t *set_nmi_callback(nmi_callback_t *callback) diff --git a/xen/include/asm-x86/hardirq.h b/xen/include/asm-x86/hardirq.h index af3eab6a4d..8bcae99eac 100644 --- a/xen/include/asm-x86/hardirq.h +++ b/xen/include/asm-x86/hardirq.h @@ -2,12 +2,14 @@ #define __ASM_HARDIRQ_H =20 #include +#include +#include #include =20 typedef struct { unsigned int __softirq_pending; unsigned int __local_irq_count; - unsigned int __nmi_count; + bool in_nmi; unsigned int mc_count; bool_t __mwait_wakeup; } __cacheline_aligned irq_cpustat_t; @@ -23,6 +25,20 @@ typedef struct { #define mc_enter() (mc_count(smp_processor_id())++) #define mc_exit() (mc_count(smp_processor_id())--) =20 +#define in_nmi() __IRQ_STAT(smp_processor_id(), in_nmi) + +static inline void nmi_enter(void) +{ + ASSERT(!in_nmi()); + in_nmi() =3D true; +} + +static inline void nmi_exit(void) +{ + ASSERT(in_nmi()); + in_nmi() =3D false; +} + void ack_bad_irq(unsigned int irq); =20 extern void apic_intr_init(void); --=20 2.25.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel From nobody Thu May 2 06:50:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1581965074023343.057884543727; Mon, 17 Feb 2020 10:44:34 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMu-0000fP-1r; Mon, 17 Feb 2020 18:43:44 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMs-0000f9-KR for xen-devel@lists.xenproject.org; Mon, 17 Feb 2020 18:43:42 +0000 Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 6aef12d2-51b5-11ea-ade5-bc764e2007e4; Mon, 17 Feb 2020 18:43:41 +0000 (UTC) X-Inumbo-ID: 6aef12d2-51b5-11ea-ade5-bc764e2007e4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1581965022; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=oBt5WAqvumYQnkJto8fy3gzgctQdn1+IHvv2G/Jo9h4=; b=NlxM6hLwCayQjM3RcEwRdZjwlYmccQBGCuARAU6PCzNI9b16jTM09OFc yvzWG0cI/l3lJdoJnuEuVZBWzb1kI96qKVDRF4h9onQqZ2ngu/cd2RrmU Qy7Lz5vVbS1uPGSIkygTSZy++qBJfTaxYu/gQW7N9HHiD4iXGdzSbpWlv I=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa1.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: 3z3R78qobCSA01+Va69w/NR1hpSuuDAU+Nc9jLvmnAC9UsfSIKH49bJ3b4zvkQ7YRBsEmrE7FU 6Xf3wBz4A7G4+b52AgmHnIynp30BPGtq9ipVQhju374eF1e9QOSoQIoBk3/a/BFJRSMHrBTeZS rRPDGIA7zCa1qA2TLvCCK3Gt2NBuHMfUG2mSILaOcjJhzSzbq1SVPXSevqAGvv2bFjKsTOgV6T RuNhMjaa3uxXcLxVJ73NUIaRO00oUOs61yzsyB2q8gMtj/SXUhE4s+GOclJN9pnCFKg7v1NAz8 UdM= X-SBRS: 2.7 X-MesageID: 12753663 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,453,1574139600"; d="scan'208";a="12753663" From: Roger Pau Monne To: Date: Mon, 17 Feb 2020 19:43:23 +0100 Message-ID: <20200217184324.73762-6-roger.pau@citrix.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200217184324.73762-1-roger.pau@citrix.com> References: <20200217184324.73762-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 5/6] x86/smp: use a dedicated scratch cpumask in send_IPI_mask X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Sander Eikelenboom , Wei Liu , Jan Beulich , Roger Pau Monne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Using scratch_cpumask in send_IPI_mak is not safe because it can be called from interrupt context, and hence Xen would have to make sure all the users of the scratch cpumask disable interrupts while using it. Instead introduce a new cpumask to be used by send_IPI_mask, and disable interrupts while using. Fixes: 5500d265a2a8 ('x86/smp: use APIC ALLBUT destination shorthand when p= ossible') Reported-by: Sander Eikelenboom Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v1: - Don't use the shorthand when in #MC or #NMI context. --- xen/arch/x86/smp.c | 26 +++++++++++++++++++++++++- xen/arch/x86/smpboot.c | 9 ++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c index c7caf5bc26..0a9a9e7f02 100644 --- a/xen/arch/x86/smp.c +++ b/xen/arch/x86/smp.c @@ -59,6 +59,7 @@ static void send_IPI_shortcut(unsigned int shortcut, int = vector, apic_write(APIC_ICR, cfg); } =20 +DECLARE_PER_CPU(cpumask_var_t, send_ipi_cpumask); /* * send_IPI_mask(cpumask, vector): sends @vector IPI to CPUs in @cpumask, * excluding the local CPU. @cpumask may be empty. @@ -67,7 +68,20 @@ static void send_IPI_shortcut(unsigned int shortcut, int= vector, void send_IPI_mask(const cpumask_t *mask, int vector) { bool cpus_locked =3D false; - cpumask_t *scratch =3D this_cpu(scratch_cpumask); + cpumask_t *scratch =3D this_cpu(send_ipi_cpumask); + unsigned long flags; + + if ( in_mc() || in_nmi() ) + { + /* + * When in #MC or #MNI context Xen cannot use the per-CPU scratch = mask + * because we have no way to avoid reentry, so do not use the APIC + * shorthand. + */ + alternative_vcall(genapic.send_IPI_mask, mask, vector); + return; + } + =20 /* * This can only be safely used when no CPU hotplug or unplug operatio= ns @@ -81,7 +95,15 @@ void send_IPI_mask(const cpumask_t *mask, int vector) local_irq_is_enabled() && (cpus_locked =3D get_cpu_maps()) && (park_offline_cpus || cpumask_equal(&cpu_online_map, &cpu_present_map)) ) + { + /* + * send_IPI_mask can be called from interrupt context, and hence we + * need to disable interrupts in order to protect the per-cpu + * send_ipi_cpumask while being used. + */ + local_irq_save(flags); cpumask_or(scratch, mask, cpumask_of(smp_processor_id())); + } else { if ( cpus_locked ) @@ -89,6 +111,7 @@ void send_IPI_mask(const cpumask_t *mask, int vector) put_cpu_maps(); cpus_locked =3D false; } + local_irq_save(flags); cpumask_clear(scratch); } =20 @@ -97,6 +120,7 @@ void send_IPI_mask(const cpumask_t *mask, int vector) else alternative_vcall(genapic.send_IPI_mask, mask, vector); =20 + local_irq_restore(flags); if ( cpus_locked ) put_cpu_maps(); } diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index e83e4564a4..82e89201b3 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -57,6 +57,9 @@ DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_mask); DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, scratch_cpumask); static cpumask_t scratch_cpu0mask; =20 +DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, send_ipi_cpumask); +static cpumask_t send_ipi_cpu0mask; + cpumask_t cpu_online_map __read_mostly; EXPORT_SYMBOL(cpu_online_map); =20 @@ -930,6 +933,8 @@ static void cpu_smpboot_free(unsigned int cpu, bool rem= ove) FREE_CPUMASK_VAR(per_cpu(cpu_core_mask, cpu)); if ( per_cpu(scratch_cpumask, cpu) !=3D &scratch_cpu0mask ) FREE_CPUMASK_VAR(per_cpu(scratch_cpumask, cpu)); + if ( per_cpu(send_ipi_cpumask, cpu) !=3D &send_ipi_cpu0mask ) + FREE_CPUMASK_VAR(per_cpu(send_ipi_cpumask, cpu)); } =20 cleanup_cpu_root_pgt(cpu); @@ -1034,7 +1039,8 @@ static int cpu_smpboot_alloc(unsigned int cpu) =20 if ( !(cond_zalloc_cpumask_var(&per_cpu(cpu_sibling_mask, cpu)) && cond_zalloc_cpumask_var(&per_cpu(cpu_core_mask, cpu)) && - cond_alloc_cpumask_var(&per_cpu(scratch_cpumask, cpu))) ) + cond_alloc_cpumask_var(&per_cpu(scratch_cpumask, cpu)) && + cond_alloc_cpumask_var(&per_cpu(send_ipi_cpumask, cpu))) ) goto out; =20 rc =3D 0; @@ -1175,6 +1181,7 @@ void __init smp_prepare_boot_cpu(void) cpumask_set_cpu(cpu, &cpu_present_map); #if NR_CPUS > 2 * BITS_PER_LONG per_cpu(scratch_cpumask, cpu) =3D &scratch_cpu0mask; + per_cpu(send_ipi_cpumask, cpu) =3D &send_ipi_cpu0mask; #endif =20 get_cpu_info()->use_pv_cr3 =3D false; --=20 2.25.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel From nobody Thu May 2 06:50:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1581965073234870.8684413780688; Mon, 17 Feb 2020 10:44:33 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMy-0000gz-MP; Mon, 17 Feb 2020 18:43:48 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j3lMx-0000gf-Km for xen-devel@lists.xenproject.org; Mon, 17 Feb 2020 18:43:47 +0000 Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 6c1fec3a-51b5-11ea-ade5-bc764e2007e4; Mon, 17 Feb 2020 18:43:43 +0000 (UTC) X-Inumbo-ID: 6c1fec3a-51b5-11ea-ade5-bc764e2007e4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1581965023; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fy6cQxceuSPl5hwnWrPQgOWIlzy0cemwK+hRYbeus8Y=; b=G49tQaK4PkODxrbzmORfD3aywbgU+uIRmILI0c17hc6neY9HCp+d8+Ck iVF605rjzQ1kzNE/RGLwoL+2ggw9YwKh/KYUQwcqP/BOzTm5eMcYgoo2w zrox/hKebcjdXDKIxbFbxock7vws1p1qR8UUKRcxXNPTYwpdIjQFZ4Oof M=; Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa5.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa5.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa5.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: 8Be0QSt0IDyT+viQDOiPH1ELl9ECEU2FlooJsn5h/tRPc5WjDtg77hEwr861H44K1Jchqyz1/B RgiHsz83cSIKvN+MPY90ZsrEoLgIz1p3Wr7cyPN7RjX8MJl4x18fasgyMmQnUyK7x2Hr1oyX+V 2Oq+Skf3Xxa8pmI4tqqD6MCDyVR8Cv//HS8+8fOlRW7dYIEfwSYAEv3qoPtSiKCfzZFTeyCGMz 3Qqp1NFKL4wJsIp1dQCEiPXPfxirBrK2vzghOFd9C6NXWucW/Z9sIU78NIqfzhufG7Xn9oJ6L0 hVI= X-SBRS: 2.7 X-MesageID: 12942061 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,453,1574139600"; d="scan'208";a="12942061" From: Roger Pau Monne To: Date: Mon, 17 Feb 2020 19:43:24 +0100 Message-ID: <20200217184324.73762-7-roger.pau@citrix.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200217184324.73762-1-roger.pau@citrix.com> References: <20200217184324.73762-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 6/6] x86: add accessors for scratch cpu mask X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Wei Liu , Jan Beulich , Roger Pau Monne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Current usage of the per-CPU scratch cpumask is dangerous since there's no way to figure out if the mask is already being used except for manual code inspection of all the callers and possible call paths. This is unsafe and not reliable, so introduce a minimal get/put infrastructure to prevent nested usage of the scratch mask and usage in interrupt context. Move the declaration of scratch_cpumask to smp.c in order to place the declaration and the accessors as close as possible. Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v1: - Use __builtin_return_address(0) instead of __func__. - Move declaration of scratch_cpumask and scratch_cpumask accessor to smp.c. - Do not allow usage in #MC or #NMI context. --- xen/arch/x86/io_apic.c | 6 ++++-- xen/arch/x86/irq.c | 13 ++++++++++--- xen/arch/x86/mm.c | 30 +++++++++++++++++++++--------- xen/arch/x86/msi.c | 4 +++- xen/arch/x86/smp.c | 25 +++++++++++++++++++++++++ xen/arch/x86/smpboot.c | 1 - xen/include/asm-x86/smp.h | 10 ++++++++++ 7 files changed, 73 insertions(+), 16 deletions(-) diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c index e98e08e9c8..4ee261b632 100644 --- a/xen/arch/x86/io_apic.c +++ b/xen/arch/x86/io_apic.c @@ -2236,10 +2236,11 @@ int io_apic_set_pci_routing (int ioapic, int pin, i= nt irq, int edge_level, int a entry.vector =3D vector; =20 if (cpumask_intersects(desc->arch.cpu_mask, TARGET_CPUS)) { - cpumask_t *mask =3D this_cpu(scratch_cpumask); + cpumask_t *mask =3D get_scratch_cpumask(); =20 cpumask_and(mask, desc->arch.cpu_mask, TARGET_CPUS); SET_DEST(entry, logical, cpu_mask_to_apicid(mask)); + put_scratch_cpumask(); } else { printk(XENLOG_ERR "IRQ%d: no target CPU (%*pb vs %*pb)\n", irq, CPUMASK_PR(desc->arch.cpu_mask), CPUMASK_PR(TARGET_CPU= S)); @@ -2433,10 +2434,11 @@ int ioapic_guest_write(unsigned long physbase, unsi= gned int reg, u32 val) =20 if ( cpumask_intersects(desc->arch.cpu_mask, TARGET_CPUS) ) { - cpumask_t *mask =3D this_cpu(scratch_cpumask); + cpumask_t *mask =3D get_scratch_cpumask(); =20 cpumask_and(mask, desc->arch.cpu_mask, TARGET_CPUS); SET_DEST(rte, logical, cpu_mask_to_apicid(mask)); + put_scratch_cpumask(); } else { diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index cc2eb8e925..7ecf5376e3 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -196,7 +196,7 @@ static void _clear_irq_vector(struct irq_desc *desc) { unsigned int cpu, old_vector, irq =3D desc->irq; unsigned int vector =3D desc->arch.vector; - cpumask_t *tmp_mask =3D this_cpu(scratch_cpumask); + cpumask_t *tmp_mask =3D get_scratch_cpumask(); =20 BUG_ON(!valid_irq_vector(vector)); =20 @@ -223,7 +223,10 @@ static void _clear_irq_vector(struct irq_desc *desc) trace_irq_mask(TRC_HW_IRQ_CLEAR_VECTOR, irq, vector, tmp_mask); =20 if ( likely(!desc->arch.move_in_progress) ) + { + put_scratch_cpumask(); return; + } =20 /* If we were in motion, also clear desc->arch.old_vector */ old_vector =3D desc->arch.old_vector; @@ -236,6 +239,7 @@ static void _clear_irq_vector(struct irq_desc *desc) per_cpu(vector_irq, cpu)[old_vector] =3D ~irq; } =20 + put_scratch_cpumask(); release_old_vec(desc); =20 desc->arch.move_in_progress =3D 0; @@ -1152,10 +1156,11 @@ static void irq_guest_eoi_timer_fn(void *data) break; =20 case ACKTYPE_EOI: - cpu_eoi_map =3D this_cpu(scratch_cpumask); + cpu_eoi_map =3D get_scratch_cpumask(); cpumask_copy(cpu_eoi_map, action->cpu_eoi_map); spin_unlock_irq(&desc->lock); on_selected_cpus(cpu_eoi_map, set_eoi_ready, desc, 0); + put_scratch_cpumask(); return; } =20 @@ -2531,12 +2536,12 @@ void fixup_irqs(const cpumask_t *mask, bool verbose) unsigned int irq; static int warned; struct irq_desc *desc; + cpumask_t *affinity =3D get_scratch_cpumask(); =20 for ( irq =3D 0; irq < nr_irqs; irq++ ) { bool break_affinity =3D false, set_affinity =3D true; unsigned int vector; - cpumask_t *affinity =3D this_cpu(scratch_cpumask); =20 if ( irq =3D=3D 2 ) continue; @@ -2640,6 +2645,8 @@ void fixup_irqs(const cpumask_t *mask, bool verbose) irq, CPUMASK_PR(affinity)); } =20 + put_scratch_cpumask(); + /* That doesn't seem sufficient. Give it 1ms. */ local_irq_enable(); mdelay(1); diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index edc238e51a..75b6114c1c 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -1261,7 +1261,7 @@ void put_page_from_l1e(l1_pgentry_t l1e, struct domai= n *l1e_owner) (l1e_owner =3D=3D pg_owner) ) { struct vcpu *v; - cpumask_t *mask =3D this_cpu(scratch_cpumask); + cpumask_t *mask =3D get_scratch_cpumask(); =20 cpumask_clear(mask); =20 @@ -1278,6 +1278,7 @@ void put_page_from_l1e(l1_pgentry_t l1e, struct domai= n *l1e_owner) =20 if ( !cpumask_empty(mask) ) flush_tlb_mask(mask); + put_scratch_cpumask(); } #endif /* CONFIG_PV_LDT_PAGING */ put_page(page); @@ -2902,7 +2903,7 @@ static int _get_page_type(struct page_info *page, uns= igned long type, * vital that no other CPUs are left with mappings of a fr= ame * which is about to become writeable to the guest. */ - cpumask_t *mask =3D this_cpu(scratch_cpumask); + cpumask_t *mask =3D get_scratch_cpumask(); =20 BUG_ON(in_irq()); cpumask_copy(mask, d->dirty_cpumask); @@ -2918,6 +2919,7 @@ static int _get_page_type(struct page_info *page, uns= igned long type, perfc_incr(need_flush_tlb_flush); flush_tlb_mask(mask); } + put_scratch_cpumask(); =20 /* We lose existing type and validity. */ nx &=3D ~(PGT_type_mask | PGT_validated); @@ -3634,7 +3636,7 @@ long do_mmuext_op( case MMUEXT_TLB_FLUSH_MULTI: case MMUEXT_INVLPG_MULTI: { - cpumask_t *mask =3D this_cpu(scratch_cpumask); + cpumask_t *mask =3D get_scratch_cpumask(); =20 if ( unlikely(currd !=3D pg_owner) ) rc =3D -EPERM; @@ -3644,12 +3646,17 @@ long do_mmuext_op( mask)) ) rc =3D -EINVAL; if ( unlikely(rc) ) + { + put_scratch_cpumask(); break; + } =20 if ( op.cmd =3D=3D MMUEXT_TLB_FLUSH_MULTI ) flush_tlb_mask(mask); else if ( __addr_ok(op.arg1.linear_addr) ) flush_tlb_one_mask(mask, op.arg1.linear_addr); + put_scratch_cpumask(); + break; } =20 @@ -3682,7 +3689,7 @@ long do_mmuext_op( else if ( likely(cache_flush_permitted(currd)) ) { unsigned int cpu; - cpumask_t *mask =3D this_cpu(scratch_cpumask); + cpumask_t *mask =3D get_scratch_cpumask(); =20 cpumask_clear(mask); for_each_online_cpu(cpu) @@ -3690,6 +3697,7 @@ long do_mmuext_op( per_cpu(cpu_sibling_mask, cpu= )) ) __cpumask_set_cpu(cpu, mask); flush_mask(mask, FLUSH_CACHE); + put_scratch_cpumask(); } else rc =3D -EINVAL; @@ -4155,12 +4163,13 @@ long do_mmu_update( * Force other vCPU-s of the affected guest to pick up L4 entry * changes (if any). */ - unsigned int cpu =3D smp_processor_id(); - cpumask_t *mask =3D per_cpu(scratch_cpumask, cpu); + cpumask_t *mask =3D get_scratch_cpumask(); =20 - cpumask_andnot(mask, pt_owner->dirty_cpumask, cpumask_of(cpu)); + cpumask_andnot(mask, pt_owner->dirty_cpumask, + cpumask_of(smp_processor_id())); if ( !cpumask_empty(mask) ) flush_mask(mask, FLUSH_TLB_GLOBAL | FLUSH_ROOT_PGTBL); + put_scratch_cpumask(); } =20 perfc_add(num_page_updates, i); @@ -4352,7 +4361,7 @@ static int __do_update_va_mapping( mask =3D d->dirty_cpumask; break; default: - mask =3D this_cpu(scratch_cpumask); + mask =3D get_scratch_cpumask(); rc =3D vcpumask_to_pcpumask(d, const_guest_handle_from_ptr(bma= p_ptr, void), mask); @@ -4372,7 +4381,7 @@ static int __do_update_va_mapping( mask =3D d->dirty_cpumask; break; default: - mask =3D this_cpu(scratch_cpumask); + mask =3D get_scratch_cpumask(); rc =3D vcpumask_to_pcpumask(d, const_guest_handle_from_ptr(bma= p_ptr, void), mask); @@ -4383,6 +4392,9 @@ static int __do_update_va_mapping( break; } =20 + if ( mask && mask !=3D d->dirty_cpumask ) + put_scratch_cpumask(); + return rc; } =20 diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c index 161ee60dbe..6624ea20d0 100644 --- a/xen/arch/x86/msi.c +++ b/xen/arch/x86/msi.c @@ -159,13 +159,15 @@ void msi_compose_msg(unsigned vector, const cpumask_t= *cpu_mask, struct msi_msg =20 if ( cpu_mask ) { - cpumask_t *mask =3D this_cpu(scratch_cpumask); + cpumask_t *mask; =20 if ( !cpumask_intersects(cpu_mask, &cpu_online_map) ) return; =20 + mask =3D get_scratch_cpumask(); cpumask_and(mask, cpu_mask, &cpu_online_map); msg->dest32 =3D cpu_mask_to_apicid(mask); + put_scratch_cpumask(); } =20 msg->address_hi =3D MSI_ADDR_BASE_HI; diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c index 0a9a9e7f02..8ad2b6912f 100644 --- a/xen/arch/x86/smp.c +++ b/xen/arch/x86/smp.c @@ -25,6 +25,31 @@ #include #include =20 +DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, scratch_cpumask); + +#ifndef NDEBUG +cpumask_t *scratch_cpumask(bool use) +{ + static DEFINE_PER_CPU(void *, scratch_cpumask_use); + + /* + * Due to reentrancy scratch cpumask cannot be used in IRQ, #MC or #NMI + * context. + */ + BUG_ON(in_irq() || in_mc() || in_nmi()); + + if ( use && unlikely(this_cpu(scratch_cpumask_use)) ) + { + printk("%p: scratch CPU mask already in use by %p\n", + __builtin_return_address(0), this_cpu(scratch_cpumask_use)); + BUG(); + } + this_cpu(scratch_cpumask_use) =3D use ? __builtin_return_address(0) : = NULL; + + return use ? this_cpu(scratch_cpumask) : NULL; +} +#endif + /* Helper functions to prepare APIC register values. */ static unsigned int prepare_ICR(unsigned int shortcut, int vector) { diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index 82e89201b3..a2ac3adb38 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -54,7 +54,6 @@ DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_mas= k); /* representing HT and core siblings of each logical CPU */ DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_mask); =20 -DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, scratch_cpumask); static cpumask_t scratch_cpu0mask; =20 DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, send_ipi_cpumask); diff --git a/xen/include/asm-x86/smp.h b/xen/include/asm-x86/smp.h index 92d69a5ea0..40ab6c251d 100644 --- a/xen/include/asm-x86/smp.h +++ b/xen/include/asm-x86/smp.h @@ -23,6 +23,16 @@ DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_mask); DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask); DECLARE_PER_CPU(cpumask_var_t, scratch_cpumask); =20 +#ifndef NDEBUG +/* Not to be called directly, use {get/put}_scratch_cpumask(). */ +cpumask_t *scratch_cpumask(bool use); +#define get_scratch_cpumask() scratch_cpumask(true) +#define put_scratch_cpumask() ((void)scratch_cpumask(false)) +#else +#define get_scratch_cpumask() this_cpu(scratch_cpumask) +#define put_scratch_cpumask() +#endif + /* * Do we, for platform reasons, need to actually keep CPUs online when we * would otherwise prefer them to be off? --=20 2.25.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel