From nobody Mon Feb 9 15:08:51 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+71517+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+71517+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1612880212; cv=none; d=zohomail.com; s=zohoarc; b=PV6Y/ib6yjBSGZ8jzyAFf2bYC3QGuuPdGToKx93pAaZk4TjAkG9CZGO3nUgTV3psxxvbiBjPABvvf2OaZbNfvdCw840X3iGnh+xm1dDZy6WcT6r7tl/GkNWB/I1wzvHoyk9P66Rbxxp6dJR9IAWtFMDGm741wKPi94Tf+k4VkyM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612880212; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=5VUpw3gaHJe30pgO4HPF1PpUSghCLLG8RNr5UFmV6UQ=; b=i4u/yKQ1QlSZvp/Y4O9Pk7zUpX4js/NebeRLCzt9SfRR9WSx8sQ1+cLm+I6509xIA+Srd/IT7I73Is1FEdSCYXrpdNuTqbvhUyeEnTNO59rMpVBEmQSQZiTQ3/+vT9qXDtpclVLUtuB1VJIdgbo1u5Bhz6SB3Bhjk5SQ77/HvoE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+71517+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1612880212023913.1326016119142; Tue, 9 Feb 2021 06:16:52 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id MjVVYY1788612xuD1zjARMbT; Tue, 09 Feb 2021 06:16:41 -0800 X-Received: from mga01.intel.com (mga01.intel.com []) by mx.groups.io with SMTP id smtpd.web08.10652.1612880197811148740 for ; Tue, 09 Feb 2021 06:16:40 -0800 IronPort-SDR: VWWvyvQDHW/RoNRUE78DWkTHCOwBMCda8S7iGKqgS7UXNsteT7tTdZSIMQjnbbAb3rEjjRiT4Q ZNfb0Zb6J6iw== X-IronPort-AV: E=McAfee;i="6000,8403,9889"; a="200959141" X-IronPort-AV: E=Sophos;i="5.81,165,1610438400"; d="scan'208";a="200959141" X-Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2021 06:16:39 -0800 IronPort-SDR: opvqwhaANgg7iJYwqud2G93DVMX/nNi8e7cv5gvWbTueNndy6De6i8ZsumMM1AHnZjKElpxX+D LPaeBDed9Vzg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,165,1610438400"; d="scan'208";a="374969180" X-Received: from ray-dev.ccr.corp.intel.com ([10.239.158.87]) by orsmga002.jf.intel.com with ESMTP; 09 Feb 2021 06:16:37 -0800 From: "Ni, Ray" To: devel@edk2.groups.io Cc: Eric Dong , Laszlo Ersek , Rahul Kumar Subject: [edk2-devel] [PATCH v3 1/4] UefiCpuPkg/MpInitLib: Use XADD to avoid lock acquire/release Date: Tue, 9 Feb 2021 22:16:31 +0800 Message-Id: <20210209141634.1999-2-ray.ni@intel.com> In-Reply-To: <20210209141634.1999-1-ray.ni@intel.com> References: <20210209141634.1999-1-ray.ni@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ray.ni@intel.com X-Gm-Message-State: n6UvukQdcjiZcRekDWxRJPC2x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1612880201; bh=oEMuam+5CMNFdwtg2bid4fbRCYAw10Y1lySbe7bkTCk=; h=Cc:Date:From:Reply-To:Subject:To; b=b5JDXqLF95ix18XIPR2WfJsono995MA1QIhDGN6LOzZpzmw1ew24CbvfEEtE7C0+tfA /evyo/QvASod0zjXAvzimKyxguon5PKsB+MNyO0VaRdTBHGGtUulkQLF1HLytPjYLlHVL W3jF+jJOvzmfz7ro4YFhQAUi1TEFOmD9XXo= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" When AP firstly wakes up, MpFuncs.nasm contains below logic to assign an unique ApIndex to each AP according to who comes first: Reviewed-by" or "for the entire series:", then the R-b applies only to Reviewed-by: Eric Dong Reviewed-by: Michael D Kinney ---ASM--- TestLock: xchg [edi], eax cmp eax, NotVacantFlag jz TestLock mov ecx, esi add ecx, ApIndexLocation inc dword [ecx] mov ebx, [ecx] Releaselock: mov eax, VacantFlag xchg [edi], eax ---ASM END--- "lock inc" cannot be used to increase ApIndex because not only the global ApIndex should be increased, but also the result should be stored to a local general purpose register EBX. This patch learns from the NASM implementation of InternalSyncIncrement() to use "XADD" instruction which can increase the global ApIndex and store the original ApIndex to EBX in one instruction. With this patch, OVMF when running in a 255 threads QEMU spends about one second to wakeup all APs. Original implementation needs more than 10 seconds. Signed-off-by: Ray Ni Cc: Eric Dong Cc: Laszlo Ersek Cc: Rahul Kumar --- .../Library/MpInitLib/Ia32/MpFuncs.nasm | 20 ++++++------------- UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 18 ++++++----------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm b/UefiCpuPkg/Li= brary/MpInitLib/Ia32/MpFuncs.nasm index 7e81d24aa6..2eaddc93bc 100644 --- a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm +++ b/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm @@ -1,5 +1,5 @@ ;-------------------------------------------------------------------------= ----- ; -; Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.
+; Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.
; SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Module Name: @@ -125,19 +125,11 @@ SkipEnableExecuteDisable: add edi, LockLocation mov eax, NotVacantFlag =20 -TestLock: - xchg [edi], eax - cmp eax, NotVacantFlag - jz TestLock - - mov ecx, esi - add ecx, ApIndexLocation - inc dword [ecx] - mov ebx, [ecx] - -Releaselock: - mov eax, VacantFlag - xchg [edi], eax + mov edi, esi + add edi, ApIndexLocation + mov ebx, 1 + lock xadd dword [edi], ebx ; EBX =3D ApIndex++ + inc ebx ; EBX is CpuNumber =20 mov edi, esi add edi, StackSizeLocation diff --git a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm b/UefiCpuPkg/Lib= rary/MpInitLib/X64/MpFuncs.nasm index aecfd07bc0..5b588f2dcb 100644 --- a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm +++ b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm @@ -1,5 +1,5 @@ ;-------------------------------------------------------------------------= ----- ; -; Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.
+; Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.
; SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Module Name: @@ -161,18 +161,12 @@ LongModeStart: add edi, LockLocation mov rax, NotVacantFlag =20 -TestLock: - xchg qword [edi], rax - cmp rax, NotVacantFlag - jz TestLock - - lea ecx, [esi + ApIndexLocation] - inc dword [ecx] - mov ebx, [ecx] + mov edi, esi + add edi, ApIndexLocation + mov ebx, 1 + lock xadd dword [edi], ebx ; EBX =3D ApIndex++ + inc ebx ; EBX is CpuNumber =20 -Releaselock: - mov rax, VacantFlag - xchg qword [edi], rax ; program stack mov edi, esi add edi, StackSizeLocation --=20 2.27.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#71517): https://edk2.groups.io/g/devel/message/71517 Mute This Topic: https://groups.io/mt/80504936/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-