From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web08.403.1645107899046251818 for ; Thu, 17 Feb 2022 06:24:59 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=WpSPSno/; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: zhihao.li@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645107899; x=1676643899; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=xHNLXns4NO9osKT8qgOCNABn+bI8rO7rMNjL0rZD7Kg=; b=WpSPSno/mm+E34rWnHympzduPDn9Cv1D+ER4JyatO8kpXS801MkcLyad cl6eQXfd0qS6f3XhFqb27INpBjIeDaTQC39zMMVvIkuHw2BFlP08hWrJI vOPEVKc3EJJu7PApPof7gm2gcl5TSFraWssXuRsaWENM0auM5GSNLgf5d gpmZAqvNR3h5c8U6kIpjJ5TooYeHwsAJHJ0KedLuDogO7fegaM4SD9SF5 +Uq1td4ZoikbmYAsq6hc13zyv/shIYyOc/e0djD1wPtQURgQ8kZkNQMTA pJqslWi+Bkps2sS0UrocYRFwyPhwfM9BmjCGGund4WZKl2MjFie2Qca9c Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10260"; a="314149813" X-IronPort-AV: E=Sophos;i="5.88,376,1635231600"; d="scan'208";a="314149813" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Feb 2022 06:24:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,376,1635231600"; d="scan'208";a="637150615" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga004.jf.intel.com with ESMTP; 17 Feb 2022 06:24:58 -0800 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Thu, 17 Feb 2022 06:24:57 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Thu, 17 Feb 2022 06:24:57 -0800 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.173) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Thu, 17 Feb 2022 06:24:57 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IzDeQVGgZVl612YPsakpPq0ubXq3JpddsaelnL3xkWjh9ShNbQFdG/Qy6Lc6T1QqldPGxM0vWmZQq1YOnMXzaJ28IBEgRVyS9+gqr2IGIVvzIpAdUfmxMKFKx+1qo6CdOvIty8diFQW6rTv6oeeaV1OEWHvxz8W6vwD6tPrlSWFMoQCXUwUi8xjmlBAx+4xOUY91MXqdqt5zFdu8WP7R/+FUjy7XwJ2AJsH+efpTHiX+ZHB6nTjKoq9+eNN8wdJ63WLh15QWdacL4IGT/2jEx9or6IAyS8/x4WTvWxC7Y6tT9qgtlABHgrPFzSxRb7TRhXeNh6vq/meImX/V4wEqHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OHBgQZJWzM+fz8O/WyPQBxtd7+ZpV6Sdm6pDssoLCXs=; b=iAAUMdrczhzd+vND35oyYJktBxEPXPm2Lsk9px/fESxvD70yzrqYQ4cezEudI/khT7B9hyyr1tQsOacg9ypz5TStYSA917Z1UjLPBERjvECWZ7ChBVZuqTK8UuLGs7SYa4FD3crlBqPfc1eemjoD2QmgruWgUAYTryZtXP+1Orm0p4oXJAJUYVcpPzkEMeU8KIlp2xAV1iarQX/Z+/7luNpXD9pqzW08XAf/xIzPecq3OQB2yxrdwAgGeNNIQ6kt3c+M+TXtrON12VrhmagWRUcB+4eL8yJ4aFqalkSHnreyJZwd9UAHrx4/L33KXP/nkMhlRQOUg1RE4J7ZvwLDRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM6PR11MB4738.namprd11.prod.outlook.com (2603:10b6:5:2a3::18) by BL0PR11MB2948.namprd11.prod.outlook.com (2603:10b6:208:75::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4995.16; Thu, 17 Feb 2022 14:24:55 +0000 Received: from DM6PR11MB4738.namprd11.prod.outlook.com ([fe80::1527:223f:8a2d:4f5e]) by DM6PR11MB4738.namprd11.prod.outlook.com ([fe80::1527:223f:8a2d:4f5e%5]) with mapi id 15.20.4995.016; Thu, 17 Feb 2022 14:24:55 +0000 From: "Li, Zhihao" To: "Fu, Siyuan" , "devel@edk2.groups.io" , "Kinney, Michael D" , "Ni, Ray" CC: "Dong, Eric" , "Kumar, Rahul1" Subject: Re: [edk2-devel] [PATCH v1 1/2] UefiCpuPkg: Extend SMM CPU Service with rendezvous support. Thread-Topic: [edk2-devel] [PATCH v1 1/2] UefiCpuPkg: Extend SMM CPU Service with rendezvous support. Thread-Index: AQHYHK3dg5FJeHwND064Rca6uCXyZayJ1d9wgAKeZ4CAC0EjcA== Date: Thu, 17 Feb 2022 14:24:55 +0000 Message-ID: References: <20220208053556.844-1-zhihao.li@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 827f8428-4240-4c5b-d328-08d9f2214513 x-ms-traffictypediagnostic: BL0PR11MB2948:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qrC2V2vVI3E1Wh6zcu8HLRbX5OqVG5uVy/rW5ci8P2jpQr28SY7ENDyQVw67IUTlibmI0+w5BhsMcB9VXg0jfZ14DqbBGTQMRrDow+f6wKa33PnWD9ra9jQ+lRuyVyUxyE1smi3bAV09uGlJfZkQjaZoJxWGCW0Vs1YrCDLzyM8Pc6mZfbVsacKMXcs4y4dSwnRRGFLHpkjL+x+CoE4+JLlPd4tBJBdmXs4MLN44jNxq/zvemKwMsN7l3ot1eOMIm7/25hQMxXYfNTf0jsXcU/NVCAYdJPM5XPltmPzPOkXetM/slz88M7vyJoRjmcptAq9o5yZHBYazirdRo1rWdDn1Bzy/rua5kPN/CuiCqjRfRhTi9NZ6rHG7fPECIjSWnggAVi1V+wo1/p6UpMcGu9lMikAHLGE8M8ixzerAUEqTuhCnKSVgQdfcuGJS8ebinZ3NE6huZzYGsBzCWC1uN+s/lnvtbrZ+TKoXBWVgi6I92TVc4so61+hKd2YnTabY/tijjyTzvpx399YuZNSOG7wfJ3EpzAdVo8Qv9iPcD9u1us6RNYfs4CXem6qc5C6zuTfVbk+8ErG9u3YUYMhy3WOym5WuDX1/ERQt+7evKYRyEMmBrpuDm87qblKEKlbM+rYgaVxrmDFFwIYMtWyYbZokhj/A1rYRfABYZMGlqYyHkeV9ucliYrWXMbZNgXqlsKJivMouGKpUU63fOt1SavhNk+iKK4asdnaiiebvUXgSWQvYLV5/X1pP6wf570CyNtHQxDJGMKAQrnugw8NzwlAPp4MCVJhdCyMmfN6D2CNlD3OFv9+TZrHJqrxeg1kOMnLnn//ErexkaCoijtmQ6w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB4738.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(5660300002)(53546011)(83380400001)(52536014)(33656002)(110136005)(54906003)(8936002)(30864003)(9686003)(26005)(186003)(2906002)(107886003)(122000001)(82960400001)(38070700005)(86362001)(38100700002)(55016003)(966005)(66446008)(66946007)(64756008)(71200400001)(66476007)(66556008)(4326008)(508600001)(76116006)(8676002)(6506007)(6636002)(7696005)(316002)(19627235002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-2022-jp?B?UWRRV0dWSU1TQmUrSXpzeGp2aEErbVBNMTVWeTlRUHlVbUhFU0E5S3or?= =?iso-2022-jp?B?Z29VK1lTWFhaNUlXblNVdVV6RVVKQStIbUtVQzFLanc5Tkt5NDRPSWVK?= =?iso-2022-jp?B?aHhKS2FUN1o2MzhqNGJ3V1o3MnNqYTNsVWY0RG1CS2cxcklyVml2eG1x?= =?iso-2022-jp?B?V1dUOWxqaS9wNmM5RGpVVkx4THNOdndkcVNUanRTc25UM3FCcVpxQlVO?= =?iso-2022-jp?B?S0M1YjhFbUt5YW1EZS9yb1dMSzZzaU0yeGZEZStuZlI0MGl0UVBIQThI?= =?iso-2022-jp?B?Q2trZTJyUVlxTmVUVm1iNjgxNmlrUmp0Z09mVjh2Uy82ZytOVXV1Nlk3?= =?iso-2022-jp?B?MXdtcXYzejlRNGdHV0JLQXI3eXJ5VkFsVTJWUmNwZlNIWk5pa2RlTTEz?= =?iso-2022-jp?B?Y1ZUL3NYRHdqc0xRMUluMFlqZnp6MFo0NjM5Q25SWFZ2clVudlFhUkZH?= =?iso-2022-jp?B?djJ1Y2w4aVRCZlF0WHhCTzJhTllTc05nZkw2MlBZSmg4QVI0UXhUOStE?= =?iso-2022-jp?B?VzRPUjJlSUNEeExiVFBIYUZld1hhcUQyaGw2eGhWeUVQT0w1RFdjV3NP?= =?iso-2022-jp?B?Uld3S0JaaUhIckhCOFMrc3NrdHl5bGUxcmgzdUgxUTJMWmFrd25aVFRZ?= =?iso-2022-jp?B?ZFJQcUVmUHNsR25GckdrQSttNmdsZEwzdnMrUW9wckhVWWwzYWxmWE02?= =?iso-2022-jp?B?ZFQycmt6bGF2dWswK2VXT0NtbWEwZ3dlbHpVbXM5bURkaDdvVmFUTk1p?= =?iso-2022-jp?B?Ry9tTTAveGFzSmY4YnRocEJuQ0w2dTd2NDFpMi9MQVVwemxzbDh0OUdi?= =?iso-2022-jp?B?UDdsMlUxR01UenpNdXVZZjZGa290WFU2QUU0OUU5NnBTcnVJQkJGWGhC?= =?iso-2022-jp?B?bkRyWWNZdzBUMW5ZVmR3VWdYWXNEdkYxUnBRd2hZcDNtbXRnUFBjM25r?= =?iso-2022-jp?B?TDc2a2F2MWZvK3pHM1FNNVBRbzdaTnozSHRwSDVVOEVnekhXOElHS0pw?= =?iso-2022-jp?B?MEdYeUhEVkxnKzl0dHhXcm00OHlKS212SEdRcXVSamtuUFlneENjdEpR?= =?iso-2022-jp?B?S2NwTG8yc0VnMW51Zk5ablZlNUhkOGlUbEhuZUFZSkJoZ0FOelpCTTFL?= =?iso-2022-jp?B?Qkl5T0x0MUorYW43Qk9ueFdSMlczZGpLQzg1MVd2MVJnWDg2Qi9MNkRN?= =?iso-2022-jp?B?cWQzdEd6WTBmbWJpTy8zekpDZDFVMmJadGYxNzY5VHJ5VTdITnV3cDVa?= =?iso-2022-jp?B?Rm1VN1hQTUZ5cXU1MmdYUjRXbDZERGFUODFnR3VPd3YwZ1hQTXlwNTB2?= =?iso-2022-jp?B?M0xSV0hRODVpdE9DT1pHeGtyNTh4NEtoWldYR3lCbklvekZIbGVJV3Vi?= =?iso-2022-jp?B?RjNpYlFHUXByekZrYTJtVEFKYzJCZVNiaUZ4Z2FkYzRJK09EZXBDRWhh?= =?iso-2022-jp?B?bVQzbklSdXM4NGhMK1pKQUdKRDQ0YlpGQmpoaEVkVHJnYkxMVHY3Sit5?= =?iso-2022-jp?B?OUVSaHloOXd4WW1CQllJL2VYbndlWVY3VGpYTGk2dG5rZHFRM0wwR3U4?= =?iso-2022-jp?B?NVY1QzJ0RDg4SUU1SDN4YTB2dG1Vb2JSMS9ybEp4a3dPME1JR1k3MWhG?= =?iso-2022-jp?B?ZC83TWd5R2lJNHRFdXJJZVRUcHZhMmszUUYwOTd4c3FIcUpqZEZxY2xm?= =?iso-2022-jp?B?UzN2ZEp3RWdwUjk3N2IzZWFLdHZuYm96UG95QUh1amZEbHJtd2ppeWtR?= =?iso-2022-jp?B?NG1kWm9rbXNTUUdkTjdlNGxLcEJOengvTW03MnVTR29NeVFTSk4vQnc4?= =?iso-2022-jp?B?UUY0cUZBTU15NUhUMkk5YldrTVlSTm8xMUNjN29iNzZNbm42OVRmdXN1?= =?iso-2022-jp?B?dlA2WWw2aWRMdHViRll4YWZwMHVteVhna0NBUlBSeEhRQ1podFIxTHpJ?= =?iso-2022-jp?B?bjAvdHRMeFdDazFjWVczdFMvOGhXYjlLRWN3UEdtN01ZWGUzMVd4V3NM?= =?iso-2022-jp?B?RldEMmdoVENNSkhGd28vL2sweFB3Y1VnK29rcW1SWnkweTlDSE9OeDJP?= =?iso-2022-jp?B?SmQ5TkdXZU5ndGtJbUZuV2lOREsyRFVjTFBrZkIzNCtNYWNCNDVkMjM3?= =?iso-2022-jp?B?TSt1VUZRelNzeTIyVHRmKy85L29Sanp3TzNoTkxnWWFWWnJwbFZxYUtt?= =?iso-2022-jp?B?elowVzIwUU5GSG9IUVN6TmRWbE1vOThvTVZud2l4M3pVYW8yS2gxRlVL?= =?iso-2022-jp?B?OXdvRzZQcEJSTy9BU1A1RUlKUjhpZDFxTlZXdmdWeGxiVTQwemFSUW9H?= =?iso-2022-jp?B?aklWN2dBRE9mSVBCaFdCTktwajZ2R1dOL2c9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB4738.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 827f8428-4240-4c5b-d328-08d9f2214513 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Feb 2022 14:24:55.5311 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ZQC0ub9SKaNw5oPIXLBbGWuysKj8U06rq99ewWHHtUOW7bFs1grZV+aBe0ShLqAqCLhX/cbRGGuu75eQ13SmUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR11MB2948 Return-Path: zhihao.li@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: quoted-printable Hi, Michael With your comment: 1. Decide to define a new Protocol with just the new services(gEdkiiSmmCpuR= edezvousProtocolGuid) 2. Modified it to 0x00. 3. keep v1 4. keep v1 Other modification: 1. SmmCpuRendezvousLib.inf: add MM_STANDALONE support 2. SmmCpuRendezvousLib.c: remove *constructor function, move its action into SmmWaitForAllProcessor function. > -----Original Message----- > From: Fu, Siyuan > Sent: Thursday, February 10, 2022 4:19 PM > To: devel@edk2.groups.io; Kinney, Michael D ; > Li, Zhihao ; Ni, Ray > Cc: Dong, Eric ; Kumar, Rahul1 > > Subject: RE: [edk2-devel] [PATCH v1 1/2] UefiCpuPkg: Extend SMM CPU > Service with rendezvous support. >=20 > Hi, Mike >=20 > > -----Original Message----- > > From: devel@edk2.groups.io On Behalf Of > Michael > > D Kinney > > Sent: 2022=1B$BG/=1B(B2=1B$B7n=1B(B9=1B$BF|=1B(B 0:31 > > To: devel@edk2.groups.io; Li, Zhihao ; Kinney, > > Michael D > > Cc: Dong, Eric ; Ni, Ray ; > > Kumar, > > Rahul1 > > Subject: Re: [edk2-devel] [PATCH v1 1/2] UefiCpuPkg: Extend SMM CPU > > Service with rendezvous support. > > > > Hi Zhihao, > > > > gEfiSmmCpuServiceProtocolGuid is defined in the UefiCpuPkg and is > > already an EDK II specific feature protocol. Adding an Edkii names > > version of the protocol does not make it clear that there is a > > relationship between the two versions of this protocol. You have > > added one new service to the existing protocol. The existing protocol > > does not have a Revision field so we do have to create a new Protocol > > Name/Protocol GUID. Based on previous use cases, we have a few options= : > > > > 1) If Revision field is present, add to end and increase Revision > > value > > 2) If Revision field not present > > a) Define an _2 or _Ex version of the protocol with new service(s) ad= ded > > to end of structure and implement original version of the protocol= on > > top of the _2 version of the protocol. > > b) Define a new Protocol with just the new services. (e.g. > > gEdkiiSmmCpuRedezvousProtocolGuid) > We previously discussed with Ray when deciding the protocol name and > choose the edk2 prefix. > @Ni, Ray > Any opinion on using an _Ex version protocol name or a separate protocol? Decide to define a new Protocol with just the new services(gEdkiiSmmCpuRede= zvousProtocolGuid) >=20 > > > > The patch also changes the DEC default value of > > gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode > > from 0x00 to 0x01. Changing the default value of a PCD in a DEC file > > is a non backwards compatible change. This should not be done. > > Instead, platforms that need the different sync mode should set that > > PCD in their DSC file. Modified it to 0x00. > > > > Is a new lib class really required at this time. The reason to add a > > new lib class is if there are multiple consumers. > There are lots of consumers but no in edk2 repo, mostly inside platform c= ode > like edk2platforms. > Technically the SMI handler which require all processors in SMM mode to > complete its task (either due to security consideration or hardware/silic= on > restriction) will need to consume this library interface to complete the > rendezvous in relax AP mode. >=20 > > > > I see the lib instance uses a RegisterProtocolNotify in its > > constructor. Is it possible to use a Depex instead and eliminate the > > additional complexity of a constructor and RegisterProtocolNotify? > We can't use Depex since this is an optional protocol. It's not required = to > those platforms which only have traditional sync mode support. >=20 > Thanks, > Siyuan >=20 > > > > Best regards, > > > > Mike > > > > > -----Original Message----- > > > From: devel@edk2.groups.io On Behalf Of Li, > > > Zhihao > > > Sent: Monday, February 7, 2022 9:36 PM > > > To: devel@edk2.groups.io > > > Cc: Dong, Eric ; Ni, Ray ; > > > Kumar, > > Rahul1 > > > Subject: [edk2-devel] [PATCH v1 1/2] UefiCpuPkg: Extend SMM CPU > > > Service > > with rendezvous support. > > > > > > From: Zhihao Li > > > > > > REF=1B$B!'=1B(B https://bugzilla.tianocore.org/show_bug.cgi?id=3D3815 > > > > > > This patch extends the SMM CPU Service protocol with new interface > > > SmmWaitForAllProcessor(), which can be used by SMI handler to > > > optionally wait for other APs to complete SMM rendezvous in relaxed A= P > mode. > > > > > > A new library SmmCpuRendezvousLib is provided to abstract the > > > service into library API to simple SMI handler code. > > > > > > Cc: Eric Dong > > > Cc: Ray Ni > > > Cc: Rahul Kumar > > > > > > Signed-off-by: Zhihao Li > > > --- > > > UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c > | 109 > > ++++++++++++++++++++ > > > UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c | 65 > > ++++++++++++ > > > UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 14= ++- > > > UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c | 2= +- > > > UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h | 27 > +++++ > > > UefiCpuPkg/Include/Protocol/SmmCpuService.h | 40= +++++++ > > > UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf > | > > > 32 > > ++++++ > > > UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h | 28 > +++++ > > > UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf | 3= +- > > > UefiCpuPkg/UefiCpuPkg.dec | 5= +- > > > 10 files changed, 318 insertions(+), 7 deletions(-) > > > > > > diff --git > > a/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c > > > > b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c > > > new file mode 100644 > > > index 0000000000..3c5cd51d0c > > > --- /dev/null > > > +++ > b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c > > > @@ -0,0 +1,109 @@ > > > +/** @file > > > > > > +SMM CPU Rendezvous library header file. > > > > > > + > > > > > > +Copyright (c) 2021, Intel Corporation. All rights reserved.
> > > > > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > > > > > + > > > > > > +**/ > > > > > > + > > > > > > + > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > + > > > > > > +STATIC EDKII_SMM_CPU_SERVICE_PROTOCOL *mSmmCpuService =3D > NULL; > > > > > > + > > > > > > +/** > > > > > > + This routine wait for all AP processors to arrive in SMM. > > > > > > + > > > > > > + @param BlockingMode Blocking mode or non-blocking mode. > > > > > > + > > > > > > + @retval TRUE All processors checked in to SMM > > > > > > + @retval FALSE Some processor not checked in to SMM > > > > > > + > > > > > > +**/ > > > > > > +EFI_STATUS > > > > > > +EFIAPI > > > > > > +SmmWaitForAllProcessor ( > > > > > > + IN BOOLEAN BlockingMode > > > > > > + ) > > > > > > +{ > > > > > > + EFI_STATUS Status; > > > > > > + > > > > > > + if (mSmmCpuService =3D=3D NULL) { > > > > > > + return TRUE; > > > > > > + } > > > > > > + > > > > > > + Status =3D mSmmCpuService->WaitForAllProcessor ( > > > > > > + mSmmCpuService, > > > > > > + BlockingMode > > > > > > + ); > > > > > > + return EFI_ERROR(Status) ? FALSE : TRUE; > > > > > > +} > > > > > > + > > > > > > +/** > > > > > > + Register status code callback function only when Report Status > > > + Code > > protocol > > > > > > + is installed. > > > > > > + > > > > > > + @param Protocol Points to the protocol's unique identifier. > > > > > > + @param Interface Points to the interface instance. > > > > > > + @param Handle The handle on which the interface was instal= led. > > > > > > + > > > > > > + @retval EFI_SUCCESS Notification runs successfully. > > > > > > + > > > > > > +**/ > > > > > > +EFI_STATUS > > > > > > +EFIAPI > > > > > > +SmmCpuServiceProtocolNotify ( > > > > > > + IN CONST EFI_GUID *Protocol, > > > > > > + IN VOID *Interface, > > > > > > + IN EFI_HANDLE Handle > > > > > > + ) > > > > > > +{ > > > > > > + EFI_STATUS Status; > > > > > > + > > > > > > + Status =3D gSmst->SmmLocateProtocol ( > > > > > > + &gEdkiiSmmCpuServiceProtocolGuid, > > > > > > + NULL, > > > > > > + (VOID **) &mSmmCpuService > > > > > > + ); > > > > > > + ASSERT_EFI_ERROR (Status); > > > > > > + > > > > > > + return EFI_SUCCESS; > > > > > > +} > > > > > > + > > > > > > +/** > > > > > > + The constructor function > > > > > > + > > > > > > + @param[in] ImageHandle The firmware allocated handle for the EFI > image. > > > > > > + @param[in] SystemTable A pointer to the EFI System Table. > > > > > > + > > > > > > + @retval EFI_SUCCESS The constructor always returns EFI_SUCCES= S. > > > > > > + > > > > > > +**/ > > > > > > +EFI_STATUS > > > > > > +EFIAPI > > > > > > +SmmCpuRendezvousLibConstructor ( > > > > > > + IN EFI_HANDLE ImageHandle, > > > > > > + IN EFI_SYSTEM_TABLE *SystemTable > > > > > > + ) > > > > > > +{ > > > > > > + EFI_STATUS Status; > > > > > > + VOID *Registration; > > > > > > + > > > > > > + Status =3D gSmst->SmmLocateProtocol > > > + (&gEdkiiSmmCpuServiceProtocolGuid, > > NULL, (VOID **) &mSmmCpuService); > > > > > > + if (EFI_ERROR (Status)) { > > > > > > + Status =3D gSmst->SmmRegisterProtocolNotify ( > > > > > > + &gEdkiiSmmCpuServiceProtocolGuid, > > > > > > + SmmCpuServiceProtocolNotify, > > > > > > + &Registration > > > > > > + ); > > > > > > + ASSERT_EFI_ERROR (Status); > > > > > > + } > > > > > > + return EFI_SUCCESS; > > > > > > +} > > > \ No newline at end of file > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c > > b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c > > > index 5d624f8e9e..34019c24ff 100644 > > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c > > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c > > > @@ -20,6 +20,19 @@ EFI_SMM_CPU_SERVICE_PROTOCOL > > mSmmCpuService =3D { > > > SmmRegisterExceptionHandler > > > > > > }; > > > > > > > > > > > > +// > > > > > > +// EDKII SMM CPU Service Protocol instance > > > > > > +// > > > > > > +EDKII_SMM_CPU_SERVICE_PROTOCOL mEdkiiSmmCpuService =3D { > > > > > > + SmmGetProcessorInfo, > > > > > > + SmmSwitchBsp, > > > > > > + SmmAddProcessor, > > > > > > + SmmRemoveProcessor, > > > > > > + SmmWhoAmI, > > > > > > + SmmRegisterExceptionHandler, > > > > > > + SmmWaitForAllProcessor > > > > > > +}; > > > > > > + > > > > > > /** > > > > > > Gets processor information on the requested processor at the > > > instant this > > call is made. > > > > > > > > > > > > @@ -365,5 +378,57 @@ InitializeSmmCpuServices ( > > > &mSmmCpuService > > > > > > ); > > > > > > ASSERT_EFI_ERROR (Status); > > > > > > + > > > > > > + Status =3D gSmst->SmmInstallProtocolInterface ( > > > > > > + &Handle, > > > > > > + &gEdkiiSmmCpuServiceProtocolGuid, > > > > > > + EFI_NATIVE_INTERFACE, > > > > > > + &mEdkiiSmmCpuService > > > > > > + ); > > > > > > + ASSERT_EFI_ERROR (Status); > > > > > > + return Status; > > > > > > +} > > > > > > + > > > > > > +/** > > > > > > + Wait for all processors enterring SMM until all CPUs are already > > synchronized or not. > > > > > > + > > > > > > + @param This A pointer to the > > EDKII_SMM_CPU_SERVICE_PROTOCOL instance. > > > > > > + @param BlockingMode Blocking mode or non-blocking mode. > > > > > > + > > > > > > + @retval EFI_SUCCESS All avaiable APs arrived. > > > > > > + @retval EFI_TIMEOUT Wait for all APs until timeout. > > > > > > +**/ > > > > > > +EFI_STATUS > > > > > > +EFIAPI > > > > > > +SmmWaitForAllProcessor ( > > > > > > + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This, > > > > > > + IN BOOLEAN BlockingMode > > > > > > + ) > > > > > > +{ > > > > > > + EFI_STATUS Status; > > > > > > + > > > > > > + // > > > > > > + // Return success immediately if all CPUs are already synchronized= . > > > > > > + // > > > > > > + if (mSmmMpSyncData->AllApArrivedWithException) { > > > > > > + Status =3D EFI_SUCCESS; > > > > > > + goto ON_EXIT; > > > > > > + } > > > > > > + > > > > > > + if (!BlockingMode) { > > > > > > + Status =3D EFI_TIMEOUT; > > > > > > + goto ON_EXIT; > > > > > > + } > > > > > > + > > > > > > + // > > > > > > + // There are some APs outside SMM, Wait for all avaiable APs to ar= rive. > > > > > > + // > > > > > > + SmmWaitForApArrival (BlockingMode); > > > > > > + Status =3D mSmmMpSyncData->AllApArrivedWithException ? > EFI_SUCCESS : > > EFI_TIMEOUT; > > > > > > + > > > > > > +ON_EXIT: > > > > > > + if (!mSmmMpSyncData->AllApArrivedWithException){ > > > > > > + DEBUG ((EFI_D_INFO, "EdkiiSmmWaitForAllApArrival: Timeout to > > > + wait all > > APs arrival\n")); > > > > > > + } > > > > > > return Status; > > > > > > } > > > > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c > > b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c > > > index 882dee4fe2..9c7b16728a 100644 > > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c > > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c > > > @@ -261,7 +261,7 @@ IsLmceSignaled ( **/ > > > > > > VOID > > > > > > SmmWaitForApArrival ( > > > > > > - VOID > > > > > > + IN BOOLEAN BlockingMode > > > > > > ) > > > > > > { > > > > > > UINT64 Timer; > > > > > > @@ -270,7 +270,14 @@ SmmWaitForApArrival ( > > > BOOLEAN LmceSignal; > > > > > > > > > > > > ASSERT (*mSmmMpSyncData->Counter <=3D mNumberOfCpus); > > > > > > - > > > > > > + > > > > > > + // > > > > > > + // if block is False, do not wait and return immediately. > > > > > > + // > > > > > > + if (!BlockingMode){ > > > > > > + return; > > > > > > + } > > > > > > + > > > > > > LmceEn =3D FALSE; > > > > > > LmceSignal =3D FALSE; > > > > > > if (mMachineCheckSupported) { > > > > > > @@ -511,7 +518,7 @@ BSPHandler ( > > > // > > > > > > // Wait for APs to arrive > > > > > > // > > > > > > - SmmWaitForApArrival (); > > > > > > + SmmWaitForApArrival(TRUE); > > > > > > > > > > > > // > > > > > > // Lock the counter down and retrieve the number of APs > > > > > > @@ -1886,6 +1893,7 @@ InitializeMpSyncData ( > > > *mSmmMpSyncData->Counter =3D 0; > > > > > > *mSmmMpSyncData->InsideSmm =3D FALSE; > > > > > > *mSmmMpSyncData->AllCpusInSync =3D FALSE; > > > > > > + mSmmMpSyncData->AllApArrivedWithException =3D FALSE; > > > > > > > > > > > > for (CpuIndex =3D 0; CpuIndex < gSmmCpuPrivate- > > >SmmCoreEntryContext.NumberOfCpus; CpuIndex++) { > > > > > > mSmmMpSyncData->CpuData[CpuIndex].Busy =3D > > > > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c > > b/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c > > > index 0c070c5736..844263f889 100644 > > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c > > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c > > > @@ -8,7 +8,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > > > > > > > > > #include "PiSmmCpuDxeSmm.h" > > > > > > > > > > > > -UINT64 mTimeoutTicker =3D 0; > > > > > > +UINT64 mTimeoutTicker =3D 0; > > > > > > // > > > > > > // Number of counts in a roll-over cycle of the performance counter= . > > > > > > // > > > > > > diff --git a/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h > > b/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h > > > new file mode 100644 > > > index 0000000000..f245c3a1c9 > > > --- /dev/null > > > +++ b/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h > > > @@ -0,0 +1,27 @@ > > > +/** @file > > > > > > +SMM CPU Rendezvous library header file. > > > > > > + > > > > > > +Copyright (c) 2021, Intel Corporation. All rights reserved.
> > > > > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > > > > > + > > > > > > +**/ > > > > > > + > > > > > > +#ifndef _SMM_CPU_RENDEZVOUS_H_ > > > > > > +#define _SMM_CPU_RENDEZVOUS_H_ > > > > > > + > > > > > > +/** > > > > > > + This routine wait for all AP processors to arrive in SMM. > > > > > > + > > > > > > + @param BlockingMode Blocking mode or non-blocking mode. > > > > > > + > > > > > > + @retval TRUE All processors checked in to SMM > > > > > > + @retval FALSE Some processor not checked in to SMM > > > > > > + > > > > > > +**/ > > > > > > +EFI_STATUS > > > > > > +EFIAPI > > > > > > +SmmWaitForAllProcessor ( > > > > > > + IN BOOLEAN BlockingMode > > > > > > + ); > > > > > > + > > > > > > +#endif > > > > > > diff --git a/UefiCpuPkg/Include/Protocol/SmmCpuService.h > > b/UefiCpuPkg/Include/Protocol/SmmCpuService.h > > > index 952767afce..0ace5356a9 100644 > > > --- a/UefiCpuPkg/Include/Protocol/SmmCpuService.h > > > +++ b/UefiCpuPkg/Include/Protocol/SmmCpuService.h > > > @@ -200,4 +200,44 @@ struct _EFI_SMM_CPU_SERVICE_PROTOCOL { > > > > > > > > > extern EFI_GUID gEfiSmmCpuServiceProtocolGuid; > > > > > > > > > > > > +// > > > > > > +// EDKII_SMM_CPU_SERVICE_PROTOCOL extends the > > EFI_SMM_CPU_SERVICE_PROTOCOL > > > > > > +// with rendezvous service support. > > > > > > +// > > > > > > +#define EDKII_SMM_CPU_SERVICE_PROTOCOL_GUID \ > > > > > > + { \ > > > > > > + 0xaa00d50b, 0x4911, 0x428f, {0xb9, 0x1a, 0xa5, 0x9d, 0xdb, > > > + 0x13, 0xe2, > > 0x4c} \ > > > > > > + } > > > > > > + > > > > > > +typedef struct _EDKII_SMM_CPU_SERVICE_PROTOCOL > > EDKII_SMM_CPU_SERVICE_PROTOCOL; > > > > > > + > > > > > > +/** > > > > > > + Wait for all APs to arrive SMM mode in given timeout constraint. > > > > > > + > > > > > > + @param This A pointer to the > SMM_CPU_SERVICE_PROTOCOL > > instance. > > > > > > + @param BlockingMode Block or non-block mode. > > > > > > + > > > > > > + @retval EFI_SUCCESS All APs have arrived SMM mode except= SMI > > disabled APs. > > > > > > + @retval EFI_TIMEOUT There are APs not in SMM mode in giv= en > > timeout constraint. > > > > > > + > > > > > > +**/ > > > > > > +typedef > > > > > > +EFI_STATUS > > > > > > +(EFIAPI *EDKII_WAIT_FOR_ALL_PROCESSOR) ( > > > > > > + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This, > > > > > > + IN BOOLEAN BlockingMode > > > > > > + ); > > > > > > + > > > > > > +struct _EDKII_SMM_CPU_SERVICE_PROTOCOL { > > > > > > + EFI_SMM_GET_PROCESSOR_INFO GetProcessorInfo; > > > > > > + EFI_SMM_SWITCH_BSP SwitchBsp; > > > > > > + EFI_SMM_ADD_PROCESSOR AddProcessor; > > > > > > + EFI_SMM_REMOVE_PROCESSOR RemoveProcessor; > > > > > > + EFI_SMM_WHOAMI WhoAmI; > > > > > > + EFI_SMM_REGISTER_EXCEPTION_HANDLER RegisterExceptionHandler; > > > > > > + EDKII_WAIT_FOR_ALL_PROCESSOR WaitForAllProcessor; > > > > > > +}; > > > > > > + > > > > > > +extern EFI_GUID gEdkiiSmmCpuServiceProtocolGuid; > > > > > > + > > > > > > #endif > > > > > > diff --git > > a/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf > > > > b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf > > > new file mode 100644 > > > index 0000000000..aff77c5a18 > > > --- /dev/null > > > +++ > b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf > > > @@ -0,0 +1,32 @@ > > > +## @file > > > > > > +# Component description file for CPU SMM Rendezvous check library > > > > > > +## > > > > > > + > > > > > > +[Defines] > > > > > > + INF_VERSION =3D 0x00010005 > > > > > > + BASE_NAME =3D SmmCpuRendezvousLib > > > > > > + FILE_GUID =3D 1509Bb36-9Ba4-438B-B195-Ac5914D= b14E2 > > > > > > + MODULE_TYPE =3D DXE_SMM_DRIVER > > > > > > + VERSION_STRING =3D 1.0 > > > > > > + LIBRARY_CLASS =3D SmmCpuRendezvousLib > > > > > > + CONSTRUCTOR =3D SmmCpuRendezvousLibConstructor > > > > > > + > > > > > > +[Sources] > > > > > > + SmmCpuRendezvousLib.c > > > > > > + > > > > > > +[Packages] > > > > > > + MdePkg/MdePkg.dec > > > > > > + UefiCpuPkg/UefiCpuPkg.dec > > > > > > + > > > > > > +[LibraryClasses] > > > > > > + BaseLib > > > > > > + DebugLib > > > > > > + PcdLib > > > > > > + SmmServicesTableLib > > > > > > + > > > > > > +[Pcd] > > > > > > + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout #= # > > CONSUMES > > > > > > + > > > > > > +[Protocols] > > > > > > + gEdkiiSmmCpuServiceProtocolGuid > > > > > > + > > > > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h > > b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h > > > index 26d07c5b5e..c6f31ace77 100644 > > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h > > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h > > > @@ -428,6 +428,7 @@ typedef struct { > > > volatile SMM_CPU_SYNC_MODE EffectiveSyncMode; > > > > > > volatile BOOLEAN SwitchBsp; > > > > > > volatile BOOLEAN *CandidateBsp; > > > > > > + volatile BOOLEAN AllApArrivedWithException; > > > > > > EFI_AP_PROCEDURE StartupProcedure; > > > > > > VOID *StartupProcArgs; > > > > > > } SMM_DISPATCHER_MP_SYNC_DATA; > > > > > > @@ -1488,4 +1489,31 @@ IsRestrictedMemoryAccess ( > > > VOID > > > > > > ); > > > > > > > > > > > > +/** > > > > > > + Choose blocking or non-blocking mode to Wait for all APs > > > > > > + > > > > > > + @param This A pointer to the > SMM_CPU_SERVICE_PROTOCOL > > instance. > > > > > > + @param BlockingMode Blocking or non-blocking mode > > > > > > + > > > > > > + @retval EFI_SUCCESS All APs have arrived SMM mode except= SMI > > disabled APs. > > > > > > + @retval EFI_TIMEOUT There are APs not in SMM mode in giv= en > > timeout constraint. > > > > > > + > > > > > > +**/ > > > > > > +EFI_STATUS > > > > > > +EFIAPI > > > > > > +SmmWaitForAllProcessor ( > > > > > > + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This, > > > > > > + IN BOOLEAN BlockingMode > > > > > > + ); > > > > > > + > > > > > > +/** > > > > > > + Choose blocking or non-blocking mode to wait for all APs. True > > > + for Blocking > > and false for not. > > > > > > + Insure when this function returns, no AP will execute normal mode > > > + code > > before entering SMM, except SMI disabled APs. > > > > > > + > > > > > > +**/ > > > > > > +VOID > > > > > > +SmmWaitForApArrival ( > > > > > > + IN BOOLEAN BlockingMode > > > > > > + ); > > > > > > + > > > > > > #endif > > > > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf > > b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf > > > index 0e88071c70..1af7280d18 100644 > > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf > > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf > > > @@ -107,7 +107,8 @@ > > > gEfiSmmReadyToLockProtocolGuid ## NOTIFY > > > > > > gEfiSmmCpuServiceProtocolGuid ## PRODUCES > > > > > > gEdkiiSmmMemoryAttributeProtocolGuid ## PRODUCES > > > > > > - gEfiMmMpProtocolGuid ## PRODUCES > > > > > > + gEfiMmMpProtocolGuid ## PRODUCES > > > > > > + gEdkiiSmmCpuServiceProtocolGuid ## PRODUCES > > > > > > > > > > > > [Guids] > > > > > > gEfiAcpiVariableGuid ## SOMETIMES_CONSUMES ## = HOB # it > is > > used for S3 boot. > > > > > > diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec > > > index 7de66fde67..c170e7d75d 100644 > > > --- a/UefiCpuPkg/UefiCpuPkg.dec > > > +++ b/UefiCpuPkg/UefiCpuPkg.dec > > > @@ -77,7 +77,8 @@ > > > > > > > > > [Protocols] > > > > > > ## Include/Protocol/SmmCpuService.h > > > > > > - gEfiSmmCpuServiceProtocolGuid =3D { 0x1d202cab, 0xc8ab, 0x4d5c, { > > > 0x94, > > 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }} > > > > > > + gEfiSmmCpuServiceProtocolGuid =3D { 0x1d202cab, 0xc8ab, 0x4d5c, > { 0x94, > > 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }} > > > > > > + gEdkiiSmmCpuServiceProtocolGuid =3D { 0xaa00d50b, 0x4911, 0x428f, = { > > > + 0xb9, > > 0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2, 0x4c }} > > > > > > > > > > > > ## Include/Protocol/SmMonitorInit.h > > > > > > gEfiSmMonitorInitProtocolGuid =3D { 0x228f344d, 0xb3de, 0x43bb, { > > > 0xa4, > > 0xd7, 0xea, 0x20, 0xb, 0x1b, 0x14, 0x82 }} > > > > > > @@ -304,7 +305,7 @@ > > > # 0x00 - Traditional CPU synchronization method.
> > > > > > # 0x01 - Relaxed CPU synchronization method.
> > > > > > # @Prompt SMM CPU Synchronization Method. > > > > > > - > > > gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x00|UINT8|0x60000 > 014 > > > > > > + > > > gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01|UINT8|0x60000 > 014 > > > > > > > > > > > > ## Specifies the On-demand clock modulation duty cycle when ACPI > > > feature > > is enabled. > > > > > > # @Prompt The encoded values for target duty cycle modulation. > > > > > > -- > > > 2.26.2.windows.1 > > > > > > > > > > > > > > > > > > > > > > >=20 > >