From nobody Mon May 6 06:55:33 2024 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+72582+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+72582+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1615280968; cv=none; d=zohomail.com; s=zohoarc; b=eHZc8lXKo2yEBtztTKjIaJ8BAZ0twENa67oyWpZtqs3BuD1b7+jnZLvpzwgs9VBXXRonBXKMGlFX7D4rMp1wjHxdWd5LNZmrFsyJM3iNvCk8WfgqqBIyomNoJuBA8LS9rMpfoxsiSIisejSX9Nso0M/oc/CErCb6f6fIyd74t44= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615280968; h=Content-Transfer-Encoding:Cc:Date:From:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To; bh=3uB0aW9AshD8UBb8XhA8Sl818Y6yTU05we000LaWbIk=; b=T4v+QPpmaa4Q5L7qQavXzHrHV2t4AnCi9uVRVXN1AH/gv7RBwJ8hUTtxF+OGGLiwS6PQ+gwDmP0ZDYJ04CHlc/T/THbzofkLE0w6t1hQWXG94ZlHE5jsuCWzLE57z3cZeW87a7M7P1CGF4HN0JUfI3LPdrpIXiuFwwt+pZBl4is= 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+72582+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 1615280968688129.45279755994363; Tue, 9 Mar 2021 01:09:28 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id hmjuYY1788612x0fiHAv9RgJ; Tue, 09 Mar 2021 01:09:28 -0800 X-Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web08.6155.1615280967805096422 for ; Tue, 09 Mar 2021 01:09:27 -0800 IronPort-SDR: Ow3mn8W38PoAw95en0oOvjJgBdHSAOcrSh0p78+ePucLB3LxG7lUU8p9MHzympT60J6MUWL/4H 2CCKmYPKu7WA== X-IronPort-AV: E=McAfee;i="6000,8403,9917"; a="185810827" X-IronPort-AV: E=Sophos;i="5.81,234,1610438400"; d="scan'208";a="185810827" X-Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Mar 2021 01:09:25 -0800 IronPort-SDR: /6fUEZcS/StJIpqsBYwgTM1GHlbWfp9OBJuqQRiiG/LD/prPPnGMKZrUbJmPNLPsKuHKs11DH6 KcZ+/JVt2nVA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,234,1610438400"; d="scan'208";a="599240063" X-Received: from ray-dev.ccr.corp.intel.com ([10.239.158.87]) by fmsmga006.fm.intel.com with ESMTP; 09 Mar 2021 01:09:24 -0800 From: "Ni, Ray" To: devel@edk2.groups.io Cc: Eric Dong , Laszlo Ersek , Rahul Kumar Subject: [edk2-devel] [PATCH v3] UefiCpuPkg/PiSmmCpu: Don't allocate Token for SmmStartupThisAp Date: Tue, 9 Mar 2021 17:09:16 +0800 Message-Id: <20210309090916.1815-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: ItPLK5BLMMA5rcgFMoaTssYLx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1615280968; bh=wcXfyTziWWdrL26uAx8q2bbxvoZtr8WOFToU0Gk80i4=; h=Cc:Date:From:Reply-To:Subject:To; b=j3C+N6ajWvHyvH8+KKCyBZV2RTvdq66EWvhGV8JNko2cN2Ddhb8EyNjVcWvPMARoGDY f1mPdpx3f4PpsX40Jim4UJ7hwZj9mgcWWSF/tdk94Ibb8BN9Z1MCEcG1tD3ifhwfiH3JV 7J59bp7pg11vVxkQW+EGbipx/B1DK1nPdrg= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3199 When Token points to mSmmStartupThisApToken, this routine is called from SmmStartupThisAp() in non-blocking mode due to PcdCpuSmmBlockStartupThisAp =3D=3D FALSE. In this case, caller wants to startup AP procedure in non-blocking mode and cannot get the completion status from the Token because there is no way to return the Token to caller from SmmStartupThisAp(). Caller needs to use its specific way to query the completion status. There is no need to allocate a token for such case so the 3 overheads can be avoided: 1. Call AllocateTokenBuffer() when there is no free token. 2. Get a free token from the token buffer. 3. Call ReleaseToken() in APHandler(). Signed-off-by: Ray Ni Cc: Eric Dong Reviewed-by: Laszlo Ersek Cc: Rahul Kumar Reviewed-by: Eric Dong --- UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 30 ++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxe= Smm/MpService.c index 6227b2428a..4f3c5f60a1 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c @@ -1,7 +1,7 @@ /** @file SMM MP service implementation =20 -Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.
Copyright (c) 2017, AMD Incorporated. All rights reserved.
=20 SPDX-License-Identifier: BSD-2-Clause-Patent @@ -22,6 +22,7 @@ UINTN mSemaphoreSiz= e; SPIN_LOCK *mPFLock =3D NULL; SMM_CPU_SYNC_MODE mCpuSmmSyncMode; BOOLEAN mMachineCheckSupported =3D FAL= SE; +MM_COMPLETION mSmmStartupThisApToken; =20 extern UINTN mSmmShadowStackSize; =20 @@ -1240,9 +1241,26 @@ InternalSmmStartupThisAp ( mSmmMpSyncData->CpuData[CpuIndex].Procedure =3D Procedure; mSmmMpSyncData->CpuData[CpuIndex].Parameter =3D ProcArguments; if (Token !=3D NULL) { - ProcToken=3D GetFreeToken (1); - mSmmMpSyncData->CpuData[CpuIndex].Token =3D ProcToken; - *Token =3D (MM_COMPLETION)ProcToken->SpinLock; + if (Token !=3D &mSmmStartupThisApToken) { + // + // When Token points to mSmmStartupThisApToken, this routine is call= ed + // from SmmStartupThisAp() in non-blocking mode (PcdCpuSmmBlockStart= upThisAp =3D=3D FALSE). + // + // In this case, caller wants to startup AP procedure in non-blocking + // mode and cannot get the completion status from the Token because = there + // is no way to return the Token to caller from SmmStartupThisAp(). + // Caller needs to use its implementation specific way to query the = completion status. + // + // There is no need to allocate a token for such case so the 3 overh= eads + // can be avoided: + // 1. Call AllocateTokenBuffer() when there is no free token. + // 2. Get a free token from the token buffer. + // 3. Call ReleaseToken() in APHandler(). + // + ProcToken=3D GetFreeToken (1); + mSmmMpSyncData->CpuData[CpuIndex].Token =3D ProcToken; + *Token =3D (MM_COMPLETION)ProcToken->SpinLock; + } } mSmmMpSyncData->CpuData[CpuIndex].Status =3D CpuStatus; if (mSmmMpSyncData->CpuData[CpuIndex].Status !=3D NULL) { @@ -1474,8 +1492,6 @@ SmmStartupThisAp ( IN OUT VOID *ProcArguments OPTIONAL ) { - MM_COMPLETION Token; - gSmmCpuPrivate->ApWrapperFunc[CpuIndex].Procedure =3D Procedure; gSmmCpuPrivate->ApWrapperFunc[CpuIndex].ProcedureArgument =3D ProcArgume= nts; =20 @@ -1486,7 +1502,7 @@ SmmStartupThisAp ( ProcedureWrapper, CpuIndex, &gSmmCpuPrivate->ApWrapperFunc[CpuIndex], - FeaturePcdGet (PcdCpuSmmBlockStartupThisAp) ? NULL : &Token, + FeaturePcdGet (PcdCpuSmmBlockStartupThisAp) ? NULL : &mSmmStartupThisA= pToken, 0, NULL ); --=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 (#72582): https://edk2.groups.io/g/devel/message/72582 Mute This Topic: https://groups.io/mt/81197100/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-