From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.242]) by mx.groups.io with SMTP id smtpd.web11.60860.1640838863475616378 for ; Wed, 29 Dec 2021 20:34:25 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=permanent DNS error (domain: byosoft.com.cn, ip: 58.240.74.242, mailfrom: fanjianfeng@byosoft.com.cn) Received: from DESKTOP-M5NI163 ([58.246.60.130]) (envelope-sender ) by 192.168.6.13 with ESMTP for ; Thu, 30 Dec 2021 12:34:03 +0800 X-WM-Sender: fanjianfeng@byosoft.com.cn X-Originating-IP: 58.246.60.130 X-WM-AuthFlag: YES X-WM-AuthUser: fanjianfeng@byosoft.com.cn Date: Thu, 30 Dec 2021 12:34:16 +0800 From: "Jeff Fan" To: "devel@edk2.groups.io" , "Rebecca Cran" , "Ard Biesheuvel" , "Gerd Hoffmann" , "Samer El-Haj-Mahmoud" , "Leif Lindholm" , =?UTF-8?B?V2FuZywgSmlhbiBK?= , 'gaoliming' , nd , "Sami Mujawar" Subject: Re: [edk2-devel] [PATCH v4 1/1] MdeModulePkg: Add MpServicesTest application to exercise MP Services References: <20211212180846.6563-1-rebecca@nuviainc.com>, <20211212180846.6563-2-rebecca@nuviainc.com>, <2021123011214518968235@byosoft.com.cn>, <30857b66-c173-fa45-8c64-dd20ae71e318@nuviainc.com> X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.20.269[cn] Mime-Version: 1.0 Message-ID: <2021123012341629745638@byosoft.com.cn> Content-Type: multipart/alternative; boundary="----=_001_NextPart232136874514_=----" ------=_001_NextPart232136874514_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 SWYgc28sDQoNCmdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpTXBTZXJ2aWNlUHJvdG9jb2xHdWlk LCBOVUxMLCAoVk9JRCAqKikgJk1wKSAgaXMgZW5vdWdoIHRvIGxvY2F0ZSBNUCBQcm90b2NvbCwN Cg0KaW5zdGVhZCBvZg0KDQorICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQor ICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCisgICAgICAgICAgICAgICAgICAmZ0VmaU1w U2VydmljZVByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICBOVUxMLA0KKyAgICAgICAg ICAgICAgICAgICZIYW5kbGVDb3VudCwNCisgICAgICAgICAgICAgICAgICAmcEhhbmRsZQ0KKyAg ICAgICAgICAgICAgICAgICk7DQorDQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAg IFByaW50IChMIkZhaWxlZCB0byBsb2NhdGUgRUZJX01QX1NFUlZJQ0VTX1BST1RPQ09MICglciku IE5vdCBpbnN0YWxsZWQgb24gcGxhdGZvcm0/XG4iLCBTdGF0dXMpOw0KKyAgICByZXR1cm4gRUZJ X05PVF9GT1VORDsNCisgIH0NCisNCisgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNv dW50OyBJbmRleCsrKSB7DQorICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCisgICAg ICAgICAgICAgICAgICAgICpwSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgJmdFZmlNcFNl cnZpY2VQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmTXAsDQor ICAgICAgICAgICAgICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAgICAgICAgZ0ltYWdlSGFu ZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09M DQorICAgICAgICAgICAgICAgICAgICApOw0KKw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKw0KKyAgICBwSGFuZGxlKys7DQor ICB9DQoNClRoYW5rcyENCkplZmYNCg0KDQpmYW5qaWFuZmVuZ0BieW9zb2Z0LmNvbS5jbg0KIA0K RnJvbTogUmViZWNjYSBDcmFuDQpEYXRlOiAyMDIxLTEyLTMwIDEyOjEwDQpUbzogZGV2ZWw7IGZh bmppYW5mZW5nOyBBcmQgQmllc2hldXZlbDsgR2VyZCBIb2ZmbWFubjsgU2FtZXIgRWwtSGFqLU1h aG1vdWQ7IExlaWYgTGluZGhvbG07IFdhbmcsIEppYW4gSjsgJ2dhb2xpbWluZyc7IG5kOyBTYW1p IE11amF3YXINClN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIIHY0IDEvMV0gTWRlTW9k dWxlUGtnOiBBZGQgTXBTZXJ2aWNlc1Rlc3QgYXBwbGljYXRpb24gdG8gZXhlcmNpc2UgTVAgU2Vy dmljZXMNCk5vLCBJIGV4cGVjdCB0aGVyZSB0byBvbmx5IGV2ZXIgYmUgYSBzaW5nbGUgTVAgc2Vy dmljZXMgaW5zdGFuY2UuDQpJIGFncmVlIHRoYXQgdGhlIEFQIGZ1bmN0aW9uIHNob3VsZCBkbyBz b21ldGhpbmcsIGJ1dCBJJ20gaG9waW5nIHRvIGdldCB0aGlzIGluaXRpYWwgaW1wbGVtZW50YXRp b24gY29tbWl0dGVkIGZpcnN0Lg0KDQotLSANClJlYmVjY2EgQ3Jhbg0KDQpPbiAxMi8yOS8yMSAy MDoyMSwgSmVmZiBGYW4gd3JvdGU6DQpIae+8jFJlYmVjY2ENCg0KSSdkIGxpa2UgdG8gZ2l2ZSB0 d28gY29tbWVudHMgb24gdGhpcyBwYXRjaC4NCg0KMSwgIEkgZG9uJ3QgdGhpbmsgdGhlcmUgYXJl IG1vcmUgdGhhbiBvbmUgTVAgc2VydmljZXMgaW5zdGFuY2VzIGluc3RhbGxlZCByZXVpcmVtZW50 IG9uIG9uZSBzeXN0ZW0uICBYODYgcGxhdGZvcm0gaW5zdGFsbGVkIG9uZSBNUCBzZXJ2aWNlIGlu c3RhbmNlIGV2ZW4gb24gbXV0aXBsZS1zb2NrZXRzIHN5c3RlbS4gDQogICAgRm9yIEFSTSBwbGF0 Zm9ybSwgaXMgdGhlcmUgYW55IHJlcXVpcmVtZW50IHRvIGhhbmRsZSBtdWx0cGxlIE1QIHNlcnZp Y2VzIGluc3RhbmNlPw0KDQoyLCAgQVAgZnVuY3Rpb24gaXMgTlVMTCBpbXBsZW1lbnRhdGlvbiB0 aGF0IGNvdWxkIG5vdCBtYWtlIHN1cmUgQlNQIHJlY29uZ2l6ZWQgaWYgQVBzIHJ1biBpbmRlZWQu ICBZb3UgY291bGQgc2ltcGx5IHVwZGF0ZSBBUCBmdW5jdGlvbiB0byB1c2Ugb25lIGdsb2JhbCB2 YXJpYWJsZSBzZWFtcGhvZXJlIHdyYXBwZWQgYnkgbG9jayBwcm90ZWN0aW9ucy4NCiAgICBJIHRo aW5rIHRoaXMgcGF0Y2ggaXMgdmVyeSBnb29kIHN0YXJ0IHRvIGFkZCBNUCB0ZXN0IGFwcCBpbiBv cGVuIHNvdXJjZSB3b3JsZC4gIFRoaXMgY29tbWVudCBpcyBvbmx5IHN1Z2VzdGlvbiBmb3IgeW91 ciBuZXh0IHBsYW4uIDotKQ0KDQpCZXN0IFJlZ2FyZHMsDQpKZWZmDQogDQpGcm9tOiBSZWJlY2Nh IENyYW4NCkRhdGU6IDIwMjEtMTItMTMgMDI6MDgNClRvOiBkZXZlbDsgQXJkIEJpZXNoZXV2ZWw7 IEdlcmQgSG9mZm1hbm47IFNhbWVyIEVsLUhhai1NYWhtb3VkOyBMZWlmIExpbmRob2xtOyBKaWFu IEogV2FuZzsgTGltaW5nIEdhbzsgbmQ7IFNhbWkgTXVqYXdhcg0KQ0M6IFJlYmVjY2EgQ3Jhbg0K U3ViamVjdDogW2VkazItZGV2ZWxdIFtQQVRDSCB2NCAxLzFdIE1kZU1vZHVsZVBrZzogQWRkIE1w U2VydmljZXNUZXN0IGFwcGxpY2F0aW9uIHRvIGV4ZXJjaXNlIE1QIFNlcnZpY2VzDQpBZGQgYSBu ZXcgTXBTZXJ2aWNlc1Rlc3QgYXBwbGljYXRpb24gdW5kZXIgTWRlTW9kdWxlUGtnL0FwcGxpY2F0 aW9uIHRoYXQNCmV4ZXJjaXNlcyB0aGUgRUZJX01QX1NFUlZJQ0VTX1BST1RPQ09MLg0KIA0KU2ln bmVkLW9mZi1ieTogUmViZWNjYSBDcmFuIDxyZWJlY2NhQG51dmlhaW5jLmNvbT4NClJldmlld2Vk LWJ5OiBTYW1pIE11amF3YXIgPHNhbWkubXVqYXdhckBhcm0uY29tPg0KLS0tDQpNZGVNb2R1bGVQ a2cvQXBwbGljYXRpb24vTXBTZXJ2aWNlc1Rlc3QvTXBTZXJ2aWNlc1Rlc3QuYyAgIHwgNDIyICsr KysrKysrKysrKysrKysrKysrDQpNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vTXBTZXJ2aWNlc1Rl c3QvTXBTZXJ2aWNlc1Rlc3QuaW5mIHwgIDM4ICsrDQpNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtn LmRzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsNCjMgZmlsZXMgY2hhbmdl ZCwgNDYyIGluc2VydGlvbnMoKykNCiANCmRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQXBwbGlj YXRpb24vTXBTZXJ2aWNlc1Rlc3QvTXBTZXJ2aWNlc1Rlc3QuYyBiL01kZU1vZHVsZVBrZy9BcHBs aWNhdGlvbi9NcFNlcnZpY2VzVGVzdC9NcFNlcnZpY2VzVGVzdC5jDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi45MzM4MTNlMTllMDUNCi0tLSAvZGV2L251bGwNCisr KyBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9NcFNlcnZpY2VzVGVzdC9NcFNlcnZpY2VzVGVz dC5jDQpAQCAtMCwwICsxLDQyMiBAQA0KKy8qKiBAZmlsZQ0KKw0KKyAgICBDb3B5cmlnaHQgKGMp IDIwMjEsIE5VVklBIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorICAgIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2luY2x1ZGUg PFVlZmkuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJy YXJ5L1JuZ0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxp Yi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVkZSA8UGkvUGlNdWx0 aVBoYXNlLmg+DQorI2luY2x1ZGUgPFByb3RvY29sL01wU2VydmljZS5oPg0KKw0KKyNkZWZpbmUg TUFYX1JBTkRPTV9QUk9DRVNTT1JfUkVUUklFUyAgMTANCisNCisjZGVmaW5lIEFQX1NUQVJUVVBf VEVTVF9USU1FT1VUX1VTICA1MDAwMA0KKyNkZWZpbmUgSU5GSU5JVEVfVElNRU9VVCAgICAgICAg ICAgIDANCisNCisvKiogVGhlIHByb2NlZHVyZSB0byBydW4gd2l0aCB0aGUgTVAgU2VydmljZXMg aW50ZXJmYWNlLg0KKw0KKyAgQHBhcmFtIEJ1ZmZlciBUaGUgcHJvY2VkdXJlIGFyZ3VtZW50Lg0K Kw0KKyoqLw0KK1NUQVRJQw0KK1ZPSUQNCitFRklBUEkNCitBcEZ1bmN0aW9uICgNCisgIElOIE9V VCBWT0lEICAqQnVmZmVyDQorICApDQorew0KK30NCisNCisvKiogRGlzcGxheXMgaW5mb3JtYXRp b24gcmV0dXJuZWQgZnJvbSBNUCBTZXJ2aWNlcyBQcm90b2NvbC4NCisNCisgIEBwYXJhbSBNcCAg VGhlIE1QIFNlcnZpY2VzIFByb3RvY29sDQorDQorICBAcmV0dXJuIFRoZSBudW1iZXIgb2YgQ1BV cyBpbiB0aGUgc3lzdGVtLg0KKw0KKyoqLw0KK1NUQVRJQw0KK1VJTlRODQorUHJpbnRQcm9jZXNz b3JJbmZvcm1hdGlvbiAoDQorICBJTiBFRklfTVBfU0VSVklDRVNfUFJPVE9DT0wgICpNcA0KKyAg KQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9QUk9D RVNTT1JfSU5GT1JNQVRJT04gIENwdUluZm87DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgIE51bUNwdTsNCisgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgIE51bUVuYWJsZWRDcHU7DQorDQorICBTdGF0dXMgPSBNcC0+ R2V0TnVtYmVyT2ZQcm9jZXNzb3JzIChNcCwgJk51bUNwdSwgJk51bUVuYWJsZWRDcHUpOw0KKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBQcmludCAoTCJHZXROdW1iZXJPZlByb2Nl c3NvcnMgZmFpbGVkOiAlclxuIiwgU3RhdHVzKTsNCisgIH0gZWxzZSB7DQorICAgIFByaW50IChM Ik51bWJlciBvZiBDUFVzOiAlbGQsIEVuYWJsZWQ6ICVkXG4iLCBOdW1DcHUsIE51bUVuYWJsZWRD cHUpOw0KKyAgfQ0KKw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtQ3B1OyBJbmRleCsr KSB7DQorICAgIFN0YXR1cyA9IE1wLT5HZXRQcm9jZXNzb3JJbmZvIChNcCwgQ1BVX1YyX0VYVEVO REVEX1RPUE9MT0dZIHwgSW5kZXgsICZDcHVJbmZvKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KKyAgICAgIFByaW50IChMIkdldFByb2Nlc3NvckluZm8gZm9yIFByb2Nlc3NvciAl ZCBmYWlsZWQ6ICVyXG4iLCBJbmRleCwgU3RhdHVzKTsNCisgICAgfSBlbHNlIHsNCisgICAgICBQ cmludCAoDQorICAgICAgICBMIlByb2Nlc3NvciAlZDpcbiINCisgICAgICAgIEwiXHRJRDogJTAx Nmx4XG4iDQorICAgICAgICBMIlx0U3RhdHVzOiAlcyB8ICIsDQorICAgICAgICBJbmRleCwNCisg ICAgICAgIENwdUluZm8uUHJvY2Vzc29ySWQsDQorICAgICAgICAoQ3B1SW5mby5TdGF0dXNGbGFn ICYgUFJPQ0VTU09SX0FTX0JTUF9CSVQpID8gTCJCU1AiIDogTCJBUCINCisgICAgICAgICk7DQor DQorICAgICAgUHJpbnQgKEwiJXMgfCAiLCAoQ3B1SW5mby5TdGF0dXNGbGFnICYgUFJPQ0VTU09S X0VOQUJMRURfQklUKSA/IEwiRW5hYmxlZCIgOiBMIkRpc2FibGVkIik7DQorICAgICAgUHJpbnQg KEwiJXNcbiIsIChDcHVJbmZvLlN0YXR1c0ZsYWcgJiBQUk9DRVNTT1JfSEVBTFRIX1NUQVRVU19C SVQpID8gTCJIZWFsdGh5IiA6IEwiRmF1bHRlZCIpOw0KKw0KKyAgICAgIFByaW50ICgNCisgICAg ICAgIEwiXHRMb2NhdGlvbjogUGFja2FnZSAlZCwgQ29yZSAlZCwgVGhyZWFkICVkXG4iDQorICAg ICAgICBMIlx0RXh0ZW5kZWQgSW5mb3JtYXRpb246IFBhY2thZ2UgJWQsIE1vZHVsZSAlZCwgVGls ZSAlZCwgRGllICVkLCBDb3JlICVkLCBUaHJlYWQgJWRcblxuIiwNCisgICAgICAgIENwdUluZm8u TG9jYXRpb24uUGFja2FnZSwNCisgICAgICAgIENwdUluZm8uTG9jYXRpb24uQ29yZSwNCisgICAg ICAgIENwdUluZm8uTG9jYXRpb24uVGhyZWFkLA0KKyAgICAgICAgQ3B1SW5mby5FeHRlbmRlZElu Zm9ybWF0aW9uLkxvY2F0aW9uMi5QYWNrYWdlLA0KKyAgICAgICAgQ3B1SW5mby5FeHRlbmRlZElu Zm9ybWF0aW9uLkxvY2F0aW9uMi5Nb2R1bGUsDQorICAgICAgICBDcHVJbmZvLkV4dGVuZGVkSW5m b3JtYXRpb24uTG9jYXRpb24yLlRpbGUsDQorICAgICAgICBDcHVJbmZvLkV4dGVuZGVkSW5mb3Jt YXRpb24uTG9jYXRpb24yLkRpZSwNCisgICAgICAgIENwdUluZm8uRXh0ZW5kZWRJbmZvcm1hdGlv bi5Mb2NhdGlvbjIuQ29yZSwNCisgICAgICAgIENwdUluZm8uRXh0ZW5kZWRJbmZvcm1hdGlvbi5M b2NhdGlvbjIuVGhyZWFkDQorICAgICAgICApOw0KKyAgICB9DQorICB9DQorDQorICByZXR1cm4g TnVtQ3B1Ow0KK30NCisNCisvKiogUmV0dXJucyB0aGUgaW5kZXggb2YgYW4gZW5hYmxlZCBBUCBz ZWxlY3RlZCBhdCByYW5kb20uDQorDQorICBAcGFyYW0gTXAgICAgICAgICAgICAgVGhlIE1QIFNl cnZpY2VzIFByb3RvY29sLg0KKyAgQHBhcmFtIFByb2Nlc3NvckluZGV4IFRoZSBpbmRleCBvZiBh IHJhbmRvbSBlbmFibGVkIEFQLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIEFuIGVuYWJs ZWQgcHJvY2Vzc29yIHdhcyBmb3VuZCBhbmQgcmV0dXJuZWQuDQorICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgQSBwcm9jZXNzb3Igd2FzIHVuYWJsZSB0byBiZSBzZWxlY3RlZC4NCisNCisqKi8NCitT VEFUSUMNCitFRklfU1RBVFVTDQorR2V0UmFuZG9tRW5hYmxlZFByb2Nlc3NvckluZGV4ICgNCisg IElOIEVGSV9NUF9TRVJWSUNFU19QUk9UT0NPTCAgKk1wLA0KKyAgT1VUIFVJTlROICAgICAgICAg ICAgICAgICAgICAqUHJvY2Vzc29ySW5kZXgNCisgICkNCit7DQorICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICBJbmRleDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgIEluZGV4T2ZF bmFibGVkQ3B1Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgTnVtQ3B1czsNCisgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgIE51bUVuYWJsZWRDcHVzOw0KKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgSW5kZXhPZkVuYWJsZWRDcHVUb1VzZTsNCisgIFVJTlQxNiAgICAgICAg ICAgICAgICAgICAgIFJhbmRvbU51bWJlcjsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg IFN1Y2Nlc3M7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklf UFJPQ0VTU09SX0lORk9STUFUSU9OICBDcHVJbmZvOw0KKw0KKyAgSW5kZXhPZkVuYWJsZWRDcHUg PSAwOw0KKw0KKyAgU3VjY2VzcyA9IEdldFJhbmRvbU51bWJlcjE2ICgmUmFuZG9tTnVtYmVyKTsN CisgIEFTU0VSVCAoU3VjY2VzcyA9PSBUUlVFKTsNCisNCisgIFN0YXR1cyA9IE1wLT5HZXROdW1i ZXJPZlByb2Nlc3NvcnMgKE1wLCAmTnVtQ3B1cywgJk51bUVuYWJsZWRDcHVzKTsNCisgIEFTU0VS VF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQorICBpZiAoTnVtRW5hYmxlZENwdXMgPT0gMSkgew0K KyAgICBQcmludCAoTCJBbGwgQVBzIGFyZSBkaXNhYmxlZFxuIik7DQorICAgIHJldHVybiBFRklf Tk9UX0ZPVU5EOw0KKyAgfQ0KKw0KKyAgSW5kZXhPZkVuYWJsZWRDcHVUb1VzZSA9IFJhbmRvbU51 bWJlciAlIE51bUVuYWJsZWRDcHVzOw0KKw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVt Q3B1czsgSW5kZXgrKykgew0KKyAgICBTdGF0dXMgPSBNcC0+R2V0UHJvY2Vzc29ySW5mbyAoTXAs IEluZGV4LCAmQ3B1SW5mbyk7DQorICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorICAg IGlmICgoQ3B1SW5mby5TdGF0dXNGbGFnICYgUFJPQ0VTU09SX0VOQUJMRURfQklUKSAmJg0KKyAg ICAgICAgIShDcHVJbmZvLlN0YXR1c0ZsYWcgJiBQUk9DRVNTT1JfQVNfQlNQX0JJVCkpDQorICAg IHsNCisgICAgICBpZiAoSW5kZXhPZkVuYWJsZWRDcHVUb1VzZSA9PSBJbmRleE9mRW5hYmxlZENw dSkgew0KKyAgICAgICAgKlByb2Nlc3NvckluZGV4ID0gSW5kZXg7DQorICAgICAgICBTdGF0dXMg ICAgICAgICAgPSBFRklfU1VDQ0VTUzsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisNCisg ICAgICBJbmRleE9mRW5hYmxlZENwdSsrOw0KKyAgICB9DQorICB9DQorDQorICBpZiAoSW5kZXgg PT0gTnVtQ3B1cykgew0KKyAgICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KKyAgfQ0KKw0KKyAg cmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqIFRlc3RzIGZvciB0aGUgU3RhcnR1cFRoaXNBUCBm dW5jdGlvbi4NCisNCisgIEBwYXJhbSBNcCBUaGUgTVAgU2VydmljZXMgUHJvdG9jb2wuDQorDQor KiovDQorU1RBVElDDQorVk9JRA0KK1N0YXJ0dXBUaGlzQXBUZXN0cyAoDQorICBJTiBFRklfTVBf U0VSVklDRVNfUFJPVE9DT0wgICpNcA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgIFN0YXR1czsN CisgIFVJTlROICAgICAgIFByb2Nlc3NvckluZGV4Ow0KKyAgVUlOVDMyICAgICAgUmV0cmllczsN CisNCisgIFJldHJpZXMgPSAwOw0KKw0KKyAgZG8gew0KKyAgICBTdGF0dXMgPSBHZXRSYW5kb21F bmFibGVkUHJvY2Vzc29ySW5kZXggKE1wLCAmUHJvY2Vzc29ySW5kZXgpOw0KKyAgfSB3aGlsZSAo RUZJX0VSUk9SIChTdGF0dXMpICYmIFJldHJpZXMrKyA8IE1BWF9SQU5ET01fUFJPQ0VTU09SX1JF VFJJRVMpOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm47DQor ICB9DQorDQorICBQcmludCAoDQorICAgIEwiU3RhcnR1cFRoaXNBUCBvbiBQcm9jZXNzb3IgJWQg d2l0aCAwIChpbmZpbml0ZSkgdGltZW91dC4uLiIsDQorICAgIFByb2Nlc3NvckluZGV4DQorICAg ICk7DQorDQorICBTdGF0dXMgPSBNcC0+U3RhcnR1cFRoaXNBUCAoDQorICAgICAgICAgICAgICAg ICBNcCwNCisgICAgICAgICAgICAgICAgIEFwRnVuY3Rpb24sDQorICAgICAgICAgICAgICAgICBQ cm9jZXNzb3JJbmRleCwNCisgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAg ICBJTkZJTklURV9USU1FT1VULA0KKyAgICAgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAg ICAgICAgIE5VTEwNCisgICAgICAgICAgICAgICAgICk7DQorDQorICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQorICAgIFByaW50IChMImZhaWxlZDogJXJcbiIsIFN0YXR1cyk7DQorICAgIHJl dHVybjsNCisgIH0gZWxzZSB7DQorICAgIFByaW50IChMImRvbmUuXG4iKTsNCisgIH0NCisNCisg IFJldHJpZXMgPSAwOw0KKw0KKyAgZG8gew0KKyAgICBTdGF0dXMgPSBHZXRSYW5kb21FbmFibGVk UHJvY2Vzc29ySW5kZXggKE1wLCAmUHJvY2Vzc29ySW5kZXgpOw0KKyAgfSB3aGlsZSAoRUZJX0VS Uk9SIChTdGF0dXMpICYmIFJldHJpZXMrKyA8IE1BWF9SQU5ET01fUFJPQ0VTU09SX1JFVFJJRVMp Ow0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm47DQorICB9DQor DQorICBQcmludCAoDQorICAgIEwiU3RhcnR1cFRoaXNBUCBvbiBQcm9jZXNzb3IgJWQgd2l0aCAl ZG1zIHRpbWVvdXQuLi4iLA0KKyAgICBQcm9jZXNzb3JJbmRleCwNCisgICAgQVBfU1RBUlRVUF9U RVNUX1RJTUVPVVRfVVMgLyAxMDAwDQorICAgICk7DQorICBTdGF0dXMgPSBNcC0+U3RhcnR1cFRo aXNBUCAoDQorICAgICAgICAgICAgICAgICBNcCwNCisgICAgICAgICAgICAgICAgIEFwRnVuY3Rp b24sDQorICAgICAgICAgICAgICAgICBQcm9jZXNzb3JJbmRleCwNCisgICAgICAgICAgICAgICAg IE5VTEwsDQorICAgICAgICAgICAgICAgICBBUF9TVEFSVFVQX1RFU1RfVElNRU9VVF9VUywNCisg ICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICBOVUxMDQorICAgICAgICAg ICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBQcmludCAoTCJm YWlsZWQ6ICVyXG4iLCBTdGF0dXMpOw0KKyAgICByZXR1cm47DQorICB9IGVsc2Ugew0KKyAgICBQ cmludCAoTCJkb25lLlxuIik7DQorICB9DQorfQ0KKw0KKy8qKiBUZXN0cyBmb3IgdGhlIFN0YXJ0 dXBBbGxBUHMgZnVuY3Rpb24uDQorDQorICBAcGFyYW0gTXAgICAgICBUaGUgTVAgU2VydmljZXMg UHJvdG9jb2wuDQorICBAcGFyYW0gTnVtQ3B1cyBUaGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5 c3RlbS4NCisNCisqKi8NCitTVEFUSUMNCitWT0lEDQorU3RhcnR1cEFsbEFQc1Rlc3RzICgNCisg IElOIEVGSV9NUF9TRVJWSUNFU19QUk9UT0NPTCAgKk1wLA0KKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgICBOdW1DcHVzDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KKyAg VUlOVE4gICAgICAgVGltZW91dDsNCisNCisgIFByaW50IChMIlJ1bm5pbmcgd2l0aCBTaW5nbGVU aHJlYWQgRkFMU0UsIDAgKGluZmluaXRlKSB0aW1lb3V0Li4uIik7DQorICBTdGF0dXMgPSBNcC0+ U3RhcnR1cEFsbEFQcyAoTXAsIEFwRnVuY3Rpb24sIEZBTFNFLCBOVUxMLCBJTkZJTklURV9USU1F T1VULCBOVUxMLCBOVUxMKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgUHJp bnQgKEwiZmFpbGVkOiAlclxuIiwgU3RhdHVzKTsNCisgICAgcmV0dXJuOw0KKyAgfSBlbHNlIHsN CisgICAgUHJpbnQgKEwiZG9uZS5cbiIpOw0KKyAgfQ0KKw0KKyAgVGltZW91dCA9IE51bUNwdXMg KiBBUF9TVEFSVFVQX1RFU1RfVElNRU9VVF9VUzsNCisNCisgIFByaW50IChMIlJ1bm5pbmcgd2l0 aCBTaW5nbGVUaHJlYWQgVFJVRSwgJWRtcyB0aW1lb3V0Li4uIiwgVGltZW91dCAvIDEwMDApOw0K KyAgU3RhdHVzID0gTXAtPlN0YXJ0dXBBbGxBUHMgKA0KKyAgICAgICAgICAgICAgICAgTXAsDQor ICAgICAgICAgICAgICAgICBBcEZ1bmN0aW9uLA0KKyAgICAgICAgICAgICAgICAgVFJVRSwNCisg ICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICBUaW1lb3V0LA0KKyAgICAg ICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAgICAgICAgIE5VTEwNCisgICAgICAgICAgICAg ICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIFByaW50IChMImZhaWxl ZDogJXJcbiIsIFN0YXR1cyk7DQorICAgIHJldHVybjsNCisgIH0gZWxzZSB7DQorICAgIFByaW50 IChMImRvbmUuXG4iKTsNCisgIH0NCit9DQorDQorLyoqIFRlc3RzIGZvciB0aGUgRW5hYmxlRGlz YWJsZUFQIGZ1bmN0aW9uLg0KKw0KKyAgQHBhcmFtIE1wICAgICAgVGhlIE1QIFNlcnZpY2VzIFBy b3RvY29sLg0KKyAgQHBhcmFtIE51bUNwdXMgVGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0 ZW0uDQorDQorKiovDQorU1RBVElDDQorVk9JRA0KK0VuYWJsZURpc2FibGVBUFRlc3RzICgNCisg IElOIEVGSV9NUF9TRVJWSUNFU19QUk9UT0NPTCAgKk1wLA0KKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgICBOdW1DcHVzDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KKyAg VUlOVE4gICAgICAgSW5kZXg7DQorICBVSU5UMzIgICAgICBIZWFsdGhGbGFnOw0KKw0KKyAgSGVh bHRoRmxhZyA9IDA7DQorDQorICBmb3IgKEluZGV4ID0gMTsgSW5kZXggPCBOdW1DcHVzOyBJbmRl eCsrKSB7DQorICAgIFByaW50IChMIkRpc2FibGluZyBQcm9jZXNzb3IgJWQgd2l0aCBIZWFsdGhG bGFnIGZhdWx0ZWQuLi4iLCBJbmRleCk7DQorICAgIFN0YXR1cyA9IE1wLT5FbmFibGVEaXNhYmxl QVAgKE1wLCBJbmRleCwgRkFMU0UsICZIZWFsdGhGbGFnKTsNCisgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KKyAgICAgIFByaW50IChMImZhaWxlZDogJXJcbiIsIFN0YXR1cyk7DQorICAg ICAgcmV0dXJuOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIFByaW50IChMImRvbmUuXG4iKTsNCisg ICAgfQ0KKyAgfQ0KKw0KKyAgSGVhbHRoRmxhZyA9IFBST0NFU1NPUl9IRUFMVEhfU1RBVFVTX0JJ VDsNCisNCisgIGZvciAoSW5kZXggPSAxOyBJbmRleCA8IE51bUNwdXM7IEluZGV4KyspIHsNCisg ICAgUHJpbnQgKEwiRW5hYmxpbmcgUHJvY2Vzc29yICVkIHdpdGggSGVhbHRoRmxhZyBoZWFsdGh5 Li4uIiwgSW5kZXgpOw0KKyAgICBTdGF0dXMgPSBNcC0+RW5hYmxlRGlzYWJsZUFQIChNcCwgSW5k ZXgsIFRSVUUsICZIZWFsdGhGbGFnKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K KyAgICAgIFByaW50IChMImZhaWxlZDogJXJcbiIsIFN0YXR1cyk7DQorICAgICAgcmV0dXJuOw0K KyAgICB9IGVsc2Ugew0KKyAgICAgIFByaW50IChMImRvbmUuXG4iKTsNCisgICAgfQ0KKyAgfQ0K K30NCisNCisvKioNCisgIFRoZSB1c2VyIEVudHJ5IFBvaW50IGZvciBBcHBsaWNhdGlvbi4gVGhl IHVzZXIgY29kZSBzdGFydHMgd2l0aCB0aGlzIGZ1bmN0aW9uDQorICBhcyB0aGUgcmVhbCBlbnRy eSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uLg0KKw0KKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRs ZSAgICBUaGUgZmlybXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBmb3IgdGhlIEVGSSBpbWFnZS4NCisg IEBwYXJhbVtpbl0gU3lzdGVtVGFibGUgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRh YmxlLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgZW50cnkgcG9pbnQgaXMg ZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICBTb21l IGVycm9yIG9jY3VycyB3aGVuIGV4ZWN1dGluZyB0aGlzIGVudHJ5IHBvaW50Lg0KKw0KKyoqLw0K K0VGSV9TVEFUVVMNCitFRklBUEkNCitVZWZpTWFpbiAoDQorICBJTiBFRklfSEFORExFICAgICAg ICBJbWFnZUhhbmRsZSwNCisgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KKyAg KQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX01QX1NF UlZJQ0VTX1BST1RPQ09MICAqTXA7DQorICBFRklfSEFORExFICAgICAgICAgICAgICAgICpwSGFu ZGxlOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCisgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgQnNwSWQ7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAg IE51bUNwdXM7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KKw0KKyAgcEhh bmRsZSAgICAgPSBOVUxMOw0KKyAgSGFuZGxlQ291bnQgPSAwOw0KKyAgQnNwSWQgICAgICAgPSAw Ow0KKw0KKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KKyAgICAgICAgICAg ICAgICAgIEJ5UHJvdG9jb2wsDQorICAgICAgICAgICAgICAgICAgJmdFZmlNcFNlcnZpY2VQcm90 b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAgICAgICAgICAm SGFuZGxlQ291bnQsDQorICAgICAgICAgICAgICAgICAgJnBIYW5kbGUNCisgICAgICAgICAgICAg ICAgICApOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBQcmludCAoTCJG YWlsZWQgdG8gbG9jYXRlIEVGSV9NUF9TRVJWSUNFU19QUk9UT0NPTCAoJXIpLiBOb3QgaW5zdGFs bGVkIG9uIHBsYXRmb3JtP1xuIiwgU3RhdHVzKTsNCisgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQorICB9DQorDQorICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgr Kykgew0KKyAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQorICAgICAgICAgICAgICAg ICAgICAqcEhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAgICZnRWZpTXBTZXJ2aWNlUHJvdG9j b2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJk1wLA0KKyAgICAgICAgICAg ICAgICAgICAgTlVMTCwNCisgICAgICAgICAgICAgICAgICAgIGdJbWFnZUhhbmRsZSwNCisgICAg ICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KKyAgICAgICAg ICAgICAgICAgICAgKTsNCisNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAg IHJldHVybiBTdGF0dXM7DQorICAgIH0NCisNCisgICAgcEhhbmRsZSsrOw0KKyAgfQ0KKw0KKyAg UHJpbnQgKEwiRXhlcmNpc2luZyBXaG9BbUlcblxuIik7DQorICBTdGF0dXMgPSBNcC0+V2hvQW1J IChNcCwgJkJzcElkKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgUHJpbnQg KEwiV2hvQW1JIGZhaWxlZDogJXJcbiIsIFN0YXR1cyk7DQorICAgIHJldHVybiBTdGF0dXM7DQor ICB9IGVsc2Ugew0KKyAgICBQcmludCAoTCJXaG9BbUk6ICUwMTZseFxuIiwgQnNwSWQpOw0KKyAg fQ0KKw0KKyAgUHJpbnQgKEwiXG4iKTsNCisgIFByaW50ICgNCisgICAgTCJFeGVyY2lzaW5nIEdl dE51bWJlck9mUHJvY2Vzc29ycyBhbmQgR2V0UHJvY2Vzc29ySW5mb3JtYXRpb24gd2l0aCAiDQor ICAgIEwiQ1BVX1YyX0VYVEVOREVEX1RPUE9MT0dZXG5cbiINCisgICAgKTsNCisgIE51bUNwdXMg PSBQcmludFByb2Nlc3NvckluZm9ybWF0aW9uIChNcCk7DQorICBpZiAoTnVtQ3B1cyA8IDIpIHsN CisgICAgUHJpbnQgKEwiVVAgc3lzdGVtIGZvdW5kLiBOb3QgcnVubmluZyBmdXJ0aGVyIHRlc3Rz LlxuIik7DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBQ cmludCAoTCJcbiIpOw0KKyAgUHJpbnQgKEwiRXhlcmNpc2luZyBTdGFydHVwVGhpc0FQOlxuXG4i KTsNCisgIFN0YXJ0dXBUaGlzQXBUZXN0cyAoTXApOw0KKw0KKyAgUHJpbnQgKEwiXG4iKTsNCisg IFByaW50IChMIkV4ZXJjaXNpbmcgU3RhcnR1cEFsbEFQczpcblxuIik7DQorICBTdGFydHVwQWxs QVBzVGVzdHMgKE1wLCBOdW1DcHVzKTsNCisNCisgIFByaW50IChMIlxuIik7DQorICBQcmludCAo TCJFeGVyY2lzaW5nIEVuYWJsZURpc2FibGVBUDpcblxuIik7DQorICBFbmFibGVEaXNhYmxlQVBU ZXN0cyAoTXAsIE51bUNwdXMpOw0KKw0KKyAgZ0JTLT5DbG9zZVByb3RvY29sIChwSGFuZGxlLCAm Z0VmaU1wU2VydmljZVByb3RvY29sR3VpZCwgZ0ltYWdlSGFuZGxlLCBOVUxMKTsNCisgIHJldHVy biBFRklfU1VDQ0VTUzsNCit9DQpkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9u L01wU2VydmljZXNUZXN0L01wU2VydmljZXNUZXN0LmluZiBiL01kZU1vZHVsZVBrZy9BcHBsaWNh dGlvbi9NcFNlcnZpY2VzVGVzdC9NcFNlcnZpY2VzVGVzdC5pbmYNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjhhMjFjYTcwZDhmYQ0KLS0tIC9kZXYvbnVsbA0KKysr IGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL01wU2VydmljZXNUZXN0L01wU2VydmljZXNUZXN0 LmluZg0KQEAgLTAsMCArMSwzOCBAQA0KKyMjIEBmaWxlDQorIyAgVUVGSSBBcHBsaWNhdGlvbiB0 byBleGVyY2lzZSBFRklfTVBfU0VSVklDRVNfUFJPVE9DT0wuDQorIw0KKyMgIENvcHlyaWdodCAo YykgMjAyMSwgTlVWSUEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisjDQorIyAgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMNCisNCitb RGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDEuMjkNCisgIEJB U0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IE1wU2VydmljZXNUZXN0DQorICBGSUxFX0dV SUQgICAgICAgICAgICAgICAgICAgICAgPSA0M2U5ZGVmYS03MjA5LTRiMGQtYjEzNi1jYzRjYTAy Y2I0NjkNCisgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFVFRklfQVBQTElDQVRJ T04NCisgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDAuMQ0KKyAgRU5UUllfUE9J TlQgICAgICAgICAgICAgICAgICAgID0gVWVmaU1haW4NCisNCisjDQorIyBUaGUgZm9sbG93aW5n IGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRo ZSBidWlsZCB0b29scy4NCisjDQorIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJ QTMyIFg2NCBBQVJDSDY0DQorIw0KKw0KK1tTb3VyY2VzXQ0KKyAgTXBTZXJ2aWNlc1Rlc3QuYw0K Kw0KK1tQYWNrYWdlc10NCisgIE1kZVBrZy9NZGVQa2cuZGVjDQorDQorW0xpYnJhcnlDbGFzc2Vz XQ0KKyAgQmFzZUxpYg0KKyAgUm5nTGliDQorICBVZWZpQXBwbGljYXRpb25FbnRyeVBvaW50DQor ICBVZWZpTGliDQorDQorW1Byb3RvY29sc10NCisgIGdFZmlNcFNlcnZpY2VQcm90b2NvbEd1aWQg ICAgIyMgQ09OU1VNRVMNCisNCmRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtn LmRzYyBiL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZHNjDQppbmRleCBiMWQ4MzQ2MTg2NWUu LjFjZjVjY2QzMGQ0MCAxMDA2NDQNCi0tLSBhL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZHNj DQorKysgYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRzYw0KQEAgLTE2NCw2ICsxNjQsNyBA QA0KICAgTWVtb3J5QWxsb2NhdGlvbkxpYnxNZGVQa2cvTGlicmFyeS9VZWZpTWVtb3J5QWxsb2Nh dGlvbkxpYi9VZWZpTWVtb3J5QWxsb2NhdGlvbkxpYi5pbmYNCiAgIERlYnVnTGlifE1kZVBrZy9M aWJyYXJ5L1VlZmlEZWJ1Z0xpYlN0ZEVyci9VZWZpRGVidWdMaWJTdGRFcnIuaW5mDQogICBGaWxl SGFuZGxlTGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlGaWxlSGFuZGxlTGliL1VlZmlGaWxlSGFuZGxl TGliLmluZg0KKyAgUm5nTGlifE1kZVBrZy9MaWJyYXJ5L0R4ZVJuZ0xpYi9EeGVSbmdMaWIuaW5m DQpbTGlicmFyeUNsYXNzZXMuY29tbW9uLk1NX1NUQU5EQUxPTkVdDQogICBIb2JMaWJ8TWRlTW9k dWxlUGtnL0xpYnJhcnkvQmFzZUhvYkxpYk51bGwvQmFzZUhvYkxpYk51bGwuaW5mDQpAQCAtMjE1 LDYgKzIxNiw3IEBADQogICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vSGVsbG9Xb3JsZC9IZWxs b1dvcmxkLmluZg0KICAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0R1bXBEeW5QY2QvRHVtcER5 blBjZC5pbmYNCiAgIE1kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9NZW1vcnlQcm9maWxlSW5mby9N ZW1vcnlQcm9maWxlSW5mby5pbmYNCisgIE1kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9NcFNlcnZp Y2VzVGVzdC9NcFNlcnZpY2VzVGVzdC5pbmYNCiAgIE1kZU1vZHVsZVBrZy9MaWJyYXJ5L1VlZmlT b3J0TGliL1VlZmlTb3J0TGliLmluZg0KICAgTWRlTW9kdWxlUGtnL0xvZ28vTG9nby5pbmYNCi0t IA0KMi4zMS4xDQogDQogDQogDQogDQogDQogDQoNCg== ------=_001_NextPart232136874514_=---- Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable =20 =20
If so,

gBS->LocateProtocol (&gEfiMpServiceProtocolGui= d, NULL, (VOID **) &Mp)  is enough to locate MP P= rotocol,
instead = of

+  S= tatus =3D gBS->LocateHandleBuffer (
+    &= nbsp;           &nbs= p; ByProtocol,
+        &= nbsp;         &gEfiMpServicePro= tocolGuid,
+         = ;         NULL,
+ &n= bsp;            = ;    &HandleCount,
+    &n= bsp;            = ; &pHandle
+        &= nbsp;         );
+
<= div>+  if (EFI_ERROR (Status)) {
+    Print (= L"Failed to locate EFI_MP_SERVICES_PROTOCOL (%r). Not installed on platform= ?\n", Status);
+    return EFI_NOT_FOUND;
+  }
+
+  for (Index =3D 0; Index < Hand= leCount; Index++) {
+    Status =3D gBS->OpenPr= otocol (
+         &= nbsp;          *pHandle,
=
+           &nb= sp;        &gEfiMpServiceProtocolGui= d,
+          &= nbsp;         (VOID **)&Mp,
+           &= nbsp;        NULL,
+ &nbs= p;            &= nbsp;     gImageHandle,
+   &n= bsp;            = ;    EFI_OPEN_PROTOCOL_GET_PROTOCOL
+  &= nbsp;           &nbs= p;     );
+
+    if = (EFI_ERROR (Status)) {
+      return Sta= tus;
+    }
+
+  &nb= sp; pHandle++;
+  }

Thanks!
Jeff

fanjianfeng@byosoft.com.cn
 
Fr= om: Rebecca Cran
=
Date: 2021-12-30 12:10
Subject: Re: [edk2-devel] [PATCH v4 1/1] MdeModulePkg: Add MpServicesTest app= lication to exercise MP Services
=20 =20 =20 =20

No, I expect there to only ever be a single MP services instance.

I agree that the AP function should do something, but I'm hoping to get this initial implementation committed first.


--
Rebecca Cran


On 12/29/21 20:21, Jeff Fan wrote:
=20 =20
Hi=EF=BC=8CRebecca

I'd like to give two comments on this patch.

1,  I d= on't think there are more than one MP services instances installed reuirement on one system.  X86 platform installed one MP service instance even on mutiple-sockets system. 
    For= ARM platform, is there any requirement to handle multple MP services instance?

2,  AP funct= ion is NUL= L implementation that could not make sure BSP recongized if APs run indeed.  You could simply update AP function t= o use one global variable seamphoere wrapp= ed by lock protections.
    I= think this patc= h is very good start to add MP test app in open source world.  This comment is only sugestion for your next plan. :-)

Best Regards,
Jeff
 
Date: 2021-12-13 02:08
Subject: [edk2-devel] [PATCH v4 1/1] MdeModulePkg: Add MpServicesTest application to exercise MP Services
Add a new MpServicesTest application under MdeModulePkg/Application that
exercises the EFI_MP_SERVICES_PROTOCOL.
 
Signed-off-by: Rebecca Cran <rebecca@nuviainc.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
---
MdeModulePkg/Application/MpServicesTest/MpServicesTest.c &= nbsp; | 422 ++++++++++++++++++++
MdeModulePkg/Application/MpServicesTest/MpServicesTest.inf |  38 ++
MdeModulePkg/MdeModulePkg.dsc     &nbs= p;            &= nbsp;           |   2 +
3 files changed, 462 insertions(+)
 
diff --git a/MdeModulePkg/Application/MpServicesTest/MpServicesTest.c b/MdeModulePkg/Application/MpServicesTest/MpServicesTest.c
new file mode 100644
index 000000000000..933813e19e05
--- /dev/null
+++ b/MdeModulePkg/Application/MpServicesTest/MpServicesTest.c
@@ -0,0 +1,422 @@
+/** @file
+
+    Copyright (c) 2021, NUVIA Inc. All right= s reserved.<BR>
+    SPDX-License-Identifier: BSD-2-Clause-Pa= tent
+**/
+
+#include <Uefi.h>
+#include <Library/DebugLib.h>
+#include <Library/RngLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiLib.h>
+#include <Pi/PiMultiPhase.h>
+#include <Protocol/MpService.h>
+
+#define MAX_RANDOM_PROCESSOR_RETRIES  10
+
+#define AP_STARTUP_TEST_TIMEOUT_US  50000
+#define INFINITE_TIMEOUT      = ;      0
+
+/** The procedure to run with the MP Services interface.
+
+  @param Buffer The procedure argument.
+
+**/
+STATIC
+VOID
+EFIAPI
+ApFunction (
+  IN OUT VOID  *Buffer
+  )
+{
+}
+
+/** Displays information returned from MP Services Protocol.
+
+  @param Mp  The MP Services Protocol
+
+  @return The number of CPUs in the system.
+
+**/
+STATIC
+UINTN
+PrintProcessorInformation (
+  IN EFI_MP_SERVICES_PROTOCOL  *Mp
+  )
+{
+  EFI_STATUS       =           Status;
+  EFI_PROCESSOR_INFORMATION  CpuInfo;
+  UINTN        = ;            &n= bsp; Index;
+  UINTN        = ;            &n= bsp; NumCpu;
+  UINTN        = ;            &n= bsp; NumEnabledCpu;
+
+  Status =3D Mp->GetNumberOfProcessors (Mp, &NumCpu, &NumEnabledCpu);
+  if (EFI_ERROR (Status)) {
+    Print (L"GetNumberOfProcessors failed: %= r\n", Status);
+  } else {
+    Print (L"Number of CPUs: %ld, Enabled: %= d\n", NumCpu, NumEnabledCpu);
+  }
+
+  for (Index =3D 0; Index < NumCpu; Index++) {
+    Status =3D Mp->GetProcessorInfo (Mp, CPU_V2_EXTENDED_TOPOLOGY | Index, &CpuInfo);
+    if (EFI_ERROR (Status)) {
+      Print (L"GetProcessorInfo fo= r Processor %d failed: %r\n", Index, Status);
+    } else {
+      Print (
+        L"Processor %d:\= n"
+        L"\tID: %016lx\n= "
+        L"\tStatus: %s |= ",
+        Index,
+        CpuInfo.Processo= rId,
+        (CpuInfo.StatusF= lag & PROCESSOR_AS_BSP_BIT) ? L"BSP" : L"AP"
+        );
+
+      Print (L"%s | ", (CpuInfo.St= atusFlag & PROCESSOR_ENABLED_BIT) ? L"Enabled" : L"Disabled");
+      Print (L"%s\n", (CpuInfo.Sta= tusFlag & PROCESSOR_HEALTH_STATUS_BIT) ? L"Healthy" : L"Faulted");
+
+      Print (
+        L"\tLocation: Pa= ckage %d, Core %d, Thread %d\n"
+        L"\tExtended Inf= ormation: Package %d, Module %d, Tile %d, Die %d, Core %d, Thread %d\n\n",
+        CpuInfo.Location= .Package,
+        CpuInfo.Location= .Core,
+        CpuInfo.Location= .Thread,
+        CpuInfo.Extended= Information.Location2.Package,
+        CpuInfo.Extended= Information.Location2.Module,
+        CpuInfo.Extended= Information.Location2.Tile,
+        CpuInfo.Extended= Information.Location2.Die,
+        CpuInfo.Extended= Information.Location2.Core,
+        CpuInfo.Extended= Information.Location2.Thread
+        );
+    }
+  }
+
+  return NumCpu;
+}
+
+/** Returns the index of an enabled AP selected at random.
+
+  @param Mp       &= nbsp;     The MP Services Protocol.
+  @param ProcessorIndex The index of a random enabled AP.
+
+  @retval EFI_SUCCESS   An enabled processor= was found and returned.
+  @retval EFI_NOT_FOUND A processor was unable to be selected.
+
+**/
+STATIC
+EFI_STATUS
+GetRandomEnabledProcessorIndex (
+  IN EFI_MP_SERVICES_PROTOCOL  *Mp,
+  OUT UINTN       &= nbsp;            *Pr= ocessorIndex
+  )
+{
+  UINTN        = ;            &n= bsp; Index;
+  UINTN        = ;            &n= bsp; IndexOfEnabledCpu;
+  UINTN        = ;            &n= bsp; NumCpus;
+  UINTN        = ;            &n= bsp; NumEnabledCpus;
+  UINTN        = ;            &n= bsp; IndexOfEnabledCpuToUse;
+  UINT16       &nbs= p;             = RandomNumber;
+  BOOLEAN       &nb= sp;            Succe= ss;
+  EFI_STATUS       =           Status;
+  EFI_PROCESSOR_INFORMATION  CpuInfo;
+
+  IndexOfEnabledCpu =3D 0;
+
+  Success =3D GetRandomNumber16 (&RandomNumber);
+  ASSERT (Success =3D=3D TRUE);
+
+  Status =3D Mp->GetNumberOfProcessors (Mp, &NumCpus, &NumEnabledCpus);
+  ASSERT_EFI_ERROR (Status);
+
+  if (NumEnabledCpus =3D=3D 1) {
+    Print (L"All APs are disabled\n");
+    return EFI_NOT_FOUND;
+  }
+
+  IndexOfEnabledCpuToUse =3D RandomNumber % NumEnabledCpus;
+
+  for (Index =3D 0; Index < NumCpus; Index++) {
+    Status =3D Mp->GetProcessorInfo (Mp, = Index, &CpuInfo);
+    ASSERT_EFI_ERROR (Status);
+    if ((CpuInfo.StatusFlag & PROCESSOR_= ENABLED_BIT) &&
+        !(CpuInfo.Status= Flag & PROCESSOR_AS_BSP_BIT))
+    {
+      if (IndexOfEnabledCpuToUse = =3D=3D IndexOfEnabledCpu) {
+        *ProcessorIndex = =3D Index;
+        Status &nbs= p;        =3D EFI_SUCCESS;
+        break;
+      }
+
+      IndexOfEnabledCpu++;
+    }
+  }
+
+  if (Index =3D=3D NumCpus) {
+    Status =3D EFI_NOT_FOUND;
+  }
+
+  return Status;
+}
+
+/** Tests for the StartupThisAP function.
+
+  @param Mp The MP Services Protocol.
+
+**/
+STATIC
+VOID
+StartupThisApTests (
+  IN EFI_MP_SERVICES_PROTOCOL  *Mp
+  )
+{
+  EFI_STATUS  Status;
+  UINTN       ProcessorI= ndex;
+  UINT32      Retries;
+
+  Retries =3D 0;
+
+  do {
+    Status =3D GetRandomEnabledProcessorInde= x (Mp, &ProcessorIndex);
+  } while (EFI_ERROR (Status) && Retries++ <= ; MAX_RANDOM_PROCESSOR_RETRIES);
+
+  if (EFI_ERROR (Status)) {
+    return;
+  }
+
+  Print (
+    L"StartupThisAP on Processor %d with 0 (= infinite) timeout...",
+    ProcessorIndex
+    );
+
+  Status =3D Mp->StartupThisAP (
+          = ;       Mp,
+          = ;       ApFunction,
+          = ;       ProcessorIndex,
+          = ;       NULL,
+          = ;       INFINITE_TIMEOUT,
+          = ;       NULL,
+          = ;       NULL
+          = ;       );
+
+  if (EFI_ERROR (Status)) {
+    Print (L"failed: %r\n", Status);
+    return;
+  } else {
+    Print (L"done.\n");
+  }
+
+  Retries =3D 0;
+
+  do {
+    Status =3D GetRandomEnabledProcessorInde= x (Mp, &ProcessorIndex);
+  } while (EFI_ERROR (Status) && Retries++ <= ; MAX_RANDOM_PROCESSOR_RETRIES);
+
+  if (EFI_ERROR (Status)) {
+    return;
+  }
+
+  Print (
+    L"StartupThisAP on Processor %d with %dm= s timeout...",
+    ProcessorIndex,
+    AP_STARTUP_TEST_TIMEOUT_US / 1000
+    );
+  Status =3D Mp->StartupThisAP (
+          = ;       Mp,
+          = ;       ApFunction,
+          = ;       ProcessorIndex,
+          = ;       NULL,
+          = ;       AP_STARTUP_TEST_TIMEOUT_US,
+          = ;       NULL,
+          = ;       NULL
+          = ;       );
+  if (EFI_ERROR (Status)) {
+    Print (L"failed: %r\n", Status);
+    return;
+  } else {
+    Print (L"done.\n");
+  }
+}
+
+/** Tests for the StartupAllAPs function.
+
+  @param Mp      The MP Servi= ces Protocol.
+  @param NumCpus The number of CPUs in the system.
+
+**/
+STATIC
+VOID
+StartupAllAPsTests (
+  IN EFI_MP_SERVICES_PROTOCOL  *Mp,
+  IN UINTN       &n= bsp;            = ; NumCpus
+  )
+{
+  EFI_STATUS  Status;
+  UINTN       Timeout;
+
+  Print (L"Running with SingleThread FALSE, 0 (infinit= e) timeout...");
+  Status =3D Mp->StartupAllAPs (Mp, ApFunction, FAL= SE, NULL, INFINITE_TIMEOUT, NULL, NULL);
+  if (EFI_ERROR (Status)) {
+    Print (L"failed: %r\n", Status);
+    return;
+  } else {
+    Print (L"done.\n");
+  }
+
+  Timeout =3D NumCpus * AP_STARTUP_TEST_TIMEOUT_US;
+
+  Print (L"Running with SingleThread TRUE, %dms timeout...", Timeout / 1000);
+  Status =3D Mp->StartupAllAPs (
+          = ;       Mp,
+          = ;       ApFunction,
+          = ;       TRUE,
+          = ;       NULL,
+          = ;       Timeout,
+          = ;       NULL,
+          = ;       NULL
+          = ;       );
+  if (EFI_ERROR (Status)) {
+    Print (L"failed: %r\n", Status);
+    return;
+  } else {
+    Print (L"done.\n");
+  }
+}
+
+/** Tests for the EnableDisableAP function.
+
+  @param Mp      The MP Servi= ces Protocol.
+  @param NumCpus The number of CPUs in the system.
+
+**/
+STATIC
+VOID
+EnableDisableAPTests (
+  IN EFI_MP_SERVICES_PROTOCOL  *Mp,
+  IN UINTN       &n= bsp;            = ; NumCpus
+  )
+{
+  EFI_STATUS  Status;
+  UINTN       Index;
+  UINT32      HealthFlag;
+
+  HealthFlag =3D 0;
+
+  for (Index =3D 1; Index < NumCpus; Index++) {
+    Print (L"Disabling Processor %d with Hea= lthFlag faulted...", Index);
+    Status =3D Mp->EnableDisableAP (Mp, I= ndex, FALSE, &HealthFlag);
+    if (EFI_ERROR (Status)) {
+      Print (L"failed: %r\n", Stat= us);
+      return;
+    } else {
+      Print (L"done.\n");
+    }
+  }
+
+  HealthFlag =3D PROCESSOR_HEALTH_STATUS_BIT;
+
+  for (Index =3D 1; Index < NumCpus; Index++) {
+    Print (L"Enabling Processor %d with Heal= thFlag healthy...", Index);
+    Status =3D Mp->EnableDisableAP (Mp, I= ndex, TRUE, &HealthFlag);
+    if (EFI_ERROR (Status)) {
+      Print (L"failed: %r\n", Stat= us);
+      return;
+    } else {
+      Print (L"done.\n");
+    }
+  }
+}
+
+/**
+  The user Entry Point for Application. The user code starts with this function
+  as the real entry point for the application.
+
+  @param[in] ImageHandle    The firmwar= e allocated handle for the EFI image.
+  @param[in] SystemTable    A pointer t= o the EFI System Table.
+
+  @retval EFI_SUCCESS     &nb= sp; The entry point is executed successfully.
+  @retval other      &nb= sp;      Some error occurs when executing this entry point.
+
+**/
+EFI_STATUS
+EFIAPI
+UefiMain (
+  IN EFI_HANDLE      &nb= sp; ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  EFI_STATUS       =          Status;
+  EFI_MP_SERVICES_PROTOCOL  *Mp;
+  EFI_HANDLE       =          *pHandle;
+  UINTN        = ;             H= andleCount;
+  UINTN        = ;             B= spId;
+  UINTN        = ;             N= umCpus;
+  UINTN        = ;             I= ndex;
+
+  pHandle     =3D NULL;
+  HandleCount =3D 0;
+  BspId       =3D 0;
+
+  Status =3D gBS->LocateHandleBuffer (
+          = ;        ByProtocol,
+          = ;        &gEfiMpServiceProtocolGuid,=
+          = ;        NULL,
+          = ;        &HandleCount,
+          = ;        &pHandle
+          = ;        );
+
+  if (EFI_ERROR (Status)) {
+    Print (L"Failed to locate EFI_MP_SERVICE= S_PROTOCOL (%r). Not installed on platform?\n", Status);
+    return EFI_NOT_FOUND;
+  }
+
+  for (Index =3D 0; Index < HandleCount; Index++) {=
+    Status =3D gBS->OpenProtocol (
+          = ;          *pHandle,
+          = ;          &gEfiMpServiceP= rotocolGuid,
+          = ;          (VOID **)&Mp,
+          = ;          NULL,
+          = ;          gImageHandle,
+          = ;          EFI_OPEN_PROTOCOL_G= ET_PROTOCOL
+          = ;          );
+
+    if (EFI_ERROR (Status)) {
+      return Status;
+    }
+
+    pHandle++;
+  }
+
+  Print (L"Exercising WhoAmI\n\n");
+  Status =3D Mp->WhoAmI (Mp, &BspId);
+  if (EFI_ERROR (Status)) {
+    Print (L"WhoAmI failed: %r\n", Status);<= /div>
+    return Status;
+  } else {
+    Print (L"WhoAmI: %016lx\n", BspId);
+  }
+
+  Print (L"\n");
+  Print (
+    L"Exercising GetNumberOfProcessors and GetProcessorInformation with "
+    L"CPU_V2_EXTENDED_TOPOLOGY\n\n"
+    );
+  NumCpus =3D PrintProcessorInformation (Mp);
+  if (NumCpus < 2) {
+    Print (L"UP system found. Not running fu= rther tests.\n");
+    return EFI_INVALID_PARAMETER;
+  }
+
+  Print (L"\n");
+  Print (L"Exercising StartupThisAP:\n\n");
+  StartupThisApTests (Mp);
+
+  Print (L"\n");
+  Print (L"Exercising StartupAllAPs:\n\n");
+  StartupAllAPsTests (Mp, NumCpus);
+
+  Print (L"\n");
+  Print (L"Exercising EnableDisableAP:\n\n");
+  EnableDisableAPTests (Mp, NumCpus);
+
+  gBS->CloseProtocol (pHandle, &gEfiMpServiceProtocolGuid, gImageHandle, NULL);
+  return EFI_SUCCESS;
+}
diff --git a/MdeModulePkg/Application/MpServicesTest/MpServicesTest.inf b/MdeModulePkg/Application/MpServicesTest/MpServicesTest.inf
new file mode 100644
index 000000000000..8a21ca70d8fa
--- /dev/null
+++ b/MdeModulePkg/Application/MpServicesTest/MpServicesTest.inf
@@ -0,0 +1,38 @@
+## @file
+#  UEFI Application to exercise EFI_MP_SERVICES_PROTOCOL.
+#
+#  Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION       = ;             = =3D 1.29
+  BASE_NAME       &= nbsp;           &nbs= p;  =3D MpServicesTest
+  FILE_GUID       &= nbsp;           &nbs= p;  =3D 43e9defa-7209-4b0d-b136-cc4ca02cb469
+  MODULE_TYPE       = ;             = =3D UEFI_APPLICATION
+  VERSION_STRING      &n= bsp;          =3D 0.1
+  ENTRY_POINT       = ;             = =3D UefiMain
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES     &n= bsp;     =3D IA32 X64 AARCH64
+#
+
+[Sources]
+  MpServicesTest.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  BaseLib
+  RngLib
+  UefiApplicationEntryPoint
+  UefiLib
+
+[Protocols]
+  gEfiMpServiceProtocolGuid    ## CONSU= MES
+
diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc
index b1d83461865e..1cf5ccd30d40 100644
--- a/MdeModulePkg/MdeModulePkg.dsc
+++ b/MdeModulePkg/MdeModulePkg.dsc
@@ -164,6 +164,7 @@
   MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAlloca= tionLib.inf
   DebugLib|MdePkg/Library/UefiDebugLibStdErr/UefiDebugLibStdErr.i= nf
   FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLi= b.inf
+  RngLib|MdePkg/Library/DxeRngLib/DxeRngLib.inf
[LibraryClasses.common.MM_STANDALONE]
   HobLib|MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf
@@ -215,6 +216,7 @@
   MdeModulePkg/Application/HelloWorld/HelloWorld.= inf
   MdeModulePkg/Application/DumpDynPcd/DumpDynPcd.= inf
   MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.in= f
+  MdeModulePkg/Application/MpServicesTest/MpServicesTest.inf
   MdeModulePkg/Library/UefiSortLib/UefiSortLib.in= f
   MdeModulePkg/Logo/Logo.inf
--
2.31.1
 
 
 
 
 
 
=20
=20 =20
------=_001_NextPart232136874514_=------