From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=SPF record not found (domain: zhaoxin.com, ip: 203.148.12.82, mailfrom: jerryzhou@zhaoxin.com) Received: from ZXSHCAS2.zhaoxin.com (ZXSHCAS2.zhaoxin.com [203.148.12.82]) by groups.io with SMTP; Sun, 19 May 2019 23:31:19 -0700 Received: from zxbjmbx3.zhaoxin.com (10.29.252.165) by ZXSHCAS2.zhaoxin.com (10.28.252.162) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1261.35; Mon, 20 May 2019 14:31:11 +0800 Received: from zxbjmbx3.zhaoxin.com (10.29.252.165) by zxbjmbx3.zhaoxin.com (10.29.252.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1261.35; Mon, 20 May 2019 14:31:10 +0800 Received: from zxbjmbx3.zhaoxin.com ([fe80::57b:6f00:3193:d8a6]) by zxbjmbx3.zhaoxin.com ([fe80::57b:6f00:3193:d8a6%8]) with mapi id 15.01.1261.035; Mon, 20 May 2019 14:31:10 +0800 From: "Jerry Zhou(BJ-RD)" To: "Yao, Jiewen" , "Zeng, Star" , "edk2-devel@lists.01.org" , "devel@edk2.groups.io" CC: "Ni, Ray" Subject: =?UTF-8?B?562U5aSNOiBbZWRrMl0gW1BBVENIXSBJbnRlbFNpbGljb25Qa2cgVlRkRHhlOiBhIHF1ZXN0aW9uIGFib3V0IHRoZSBzb3VyY2UgY29kZQ==?= Thread-Topic: [edk2] [PATCH] IntelSiliconPkg VTdDxe: a question about the source code Thread-Index: AdUJNci9WEC63Y3xT7KjRAFsJUkP5QARFuIgAAC+ShABT1l1wAACY4ggAARR9EA= Date: Mon, 20 May 2019 06:31:10 +0000 Message-ID: References: <0C09AFA07DD0434D9E2A0C6AEB048310402DECF5@shsmsx102.ccr.corp.intel.com> <9b07851c347d4810a691ebaa64d1fa5e@zhaoxin.com> <0C09AFA07DD0434D9E2A0C6AEB048310402E56C9@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503F65159E@shsmsx102.ccr.corp.intel.com> In-Reply-To: <74D8A39837DF1E4DA445A8C0B3885C503F65159E@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.29.8.16] MIME-Version: 1.0 Return-Path: JerryZhou@zhaoxin.com Content-Language: zh-CN Content-Type: multipart/alternative; boundary="_000_c4666120015a4f27bbe322359408bc70zhaoxincom_" --_000_c4666120015a4f27bbe322359408bc70zhaoxincom_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 T0suDQpJIGhhdmUgc3VibWl0dGVkIHRvIEJ1Z3ppbGxhLg0KQnVnIDE4MjMgLSBzb3VyY2UgY29k ZSBhYm91dCBkaXNhYmxpbmcgdGhlIERNQVIgb2YgSU9NTVUgaW4gSW50ZWxTaWxpY29uUGtnDQoN ClRoYW5rIHlvdQ0KSmVycnkgWmhvdQ0Kt6K8/sjLOiBZYW8sIEppZXdlbiBbbWFpbHRvOmppZXdl bi55YW9AaW50ZWwuY29tXQ0Kt6LLzcqxvOQ6IDIwMTnE6jXUwjIwyNUgMTQ6MDkNCsrVvP7Iyzog WmVuZywgU3RhcjsgSmVycnkgWmhvdShCSi1SRCk7IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBk ZXZlbEBlZGsyLmdyb3Vwcy5pbw0Ks63LzTogTmksIFJheTsgWWFvLCBKaWV3ZW4NCtb3zOI6IFJF OiBbZWRrMl0gW1BBVENIXSBJbnRlbFNpbGljb25Qa2cgVlRkRHhlOiBhIHF1ZXN0aW9uIGFib3V0 IHRoZSBzb3VyY2UgY29kZQ0KDQpUaGFua3MuDQpXZSBhcmUgYWxzbyByZXZpZXdpbmcgdGhlIFZU ZCBkaXNhYmxpbmcgZmxvdyBhbmQgbWF5IHVwZGF0ZSByZWNlbnRseS4NCg0KSWYgeW91IHdhbnQg dG8gZmlsZSBCdWd6aWxsYSwgcGxlYXNlIGdvIGFoZWFkLg0KDQpUaGFuayB5b3UNCllhbyBKaWV3 ZW4NCg0KRnJvbTogWmVuZywgU3Rhcg0KU2VudDogU3VuZGF5LCBNYXkgMTksIDIwMTkgODozMyBQ TQ0KVG86IEplcnJ5IFpob3UoQkotUkQpIDxKZXJyeVpob3VAemhhb3hpbi5jb20+OyBlZGsyLWRl dmVsQGxpc3RzLjAxLm9yZzsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCkNjOiBZYW8sIEppZXdlbiA8 amlld2VuLnlhb0BpbnRlbC5jb20+OyBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPjsgWmVuZywg U3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT4NClN1YmplY3Q6IFJFOiBbZWRrMl0gW1BBVENIXSBJ bnRlbFNpbGljb25Qa2cgVlRkRHhlOiBhIHF1ZXN0aW9uIGFib3V0IHRoZSBzb3VyY2UgY29kZQ0K DQpBY3R1YWxseSwgSSBhZ3JlZSB3aXRoIHlvdS4NClBlcnNvbmFsbHksIEkgdGhpbmsgbW9yZSBy aWdvcm91cyBmbG93IGNvdWxkIGJlIGxpa2UgYmVsb3cuDQoNCjEuICAgICAgQ2xlYXIgQl9HTUNE X1JFR19URSwgd2FpdCBCX0dTVFNfUkVHX1RFIHRvIGJlIGNsZWFyZWQuDQoNCjIuICAgICAgU2V0 IEJfR01DRF9SRUdfU1JUUCwgd2FpdCBCX0dTVFNfUkVHX1JUUFMgdG8gYmUgc2V0Lg0KDQozLiAg ICAgIFplcm8gUl9SVEFERFJfUkVHLg0KDQpOb3Qgc3VyZSBvcmlnaW5hbCBjb2RlIGRldmVsb3Bl ciBKaWV3ZW6hr3MgdGhvdWdodCBhYm91dCB0aGlzLg0KDQoNCllvdSBtYXkgc3VibWl0IEJ1Z3pp bGxhIGF0IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZyBpZiB5b3Ugd2FpdC4NCg0KDQpU aGFua3MsDQpTdGFyDQoNCkZyb206IEplcnJ5IFpob3UoQkotUkQpIFttYWlsdG86SmVycnlaaG91 QHpoYW94aW4uY29tXQ0KU2VudDogTW9uZGF5LCBNYXkgMTMsIDIwMTkgNzoyOCBQTQ0KVG86IFpl bmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+ PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3Jn PjsgZGV2ZWxAZWRrMi5ncm91cHMuaW88bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPg0KQ2M6 IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRl bC5jb20+PjsgTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbTxtYWlsdG86cmF5Lm5pQGludGVsLmNv bT4+DQpTdWJqZWN0OiC08Li0OiBbZWRrMl0gW1BBVENIXSBJbnRlbFNpbGljb25Qa2cgVlRkRHhl OiBhIHF1ZXN0aW9uIGFib3V0IHRoZSBzb3VyY2UgY29kZQ0KDQpHb3QgaXQhIFRoYW5rcyBmb3Ig eW91ciByZXBseS4NCkJ1dCB5b3Ugc2hvdWxkIHN0aWxsIHBvbGwgdGhlIEJfR1NUU19SRUdfVEUg Yml0LCBub3QgdGhlIEJfR1NUU19SRUdfUlRQUyBiaXQsIGluIHRoZSBqdWRnZW1lbnQgY29kZSBv ZiB3aGlsZSgpIGxvb3AuDQpBZnRlciAmIG9wZXJhdGlvbiBiZXR3ZWVuIFJlZzMyIGFuZCBCX0dT VFNfUkVHX1JUUFMsIHRoZSBzdGF0dXMgb2YgQl9HU1RTX1JFR19URSB3aWxsIGJlIGxvc3QuDQoN CkEgbW9yZSB0ZWRpb3VzIGJ1dCBtb3JlIHJlbGlhYmxlIG9wZXJhdGlvbiBzZXF1ZW5jZSBpcyBy ZWNvbW1lbmRlZCBpbiBWdC1kIHNwZWNpZmljYXRpb24gMi40IGJlbG93Og0KDQp0byB1cGRhdGUg YSBiaXQgZmllbGQgaW4gdGhpcyByZWdpc3RlciBhdCBvZmZzZXQgWCB3aXRoIHZhbHVlIG9mIFks IHNvZnR3YXJlDQptdXN0IGZvbGxvdyBiZWxvdyBzdGVwczoNCjEuIFRtcCA9IFJlYWQgR1NUU19S RUcNCjIuIFN0YXR1cyA9IChUbXAgJiA5NkZGRkZGRmgpIC8vIFJlc2V0IHRoZSBvbmUtc2hvdCBi aXRzDQozLiBDb21tYW5kID0gKFN0YXR1cyB8IChZIDw8IFgpKQ0KNC4gV3JpdGUgQ29tbWFuZCB0 byBHQ01EX1JFRw0KNS4gV2FpdCB1bnRpbCBHU1RTX1JFR1tYXSBpbmRpY2F0ZXMgY29tbWFuZCBp cyBzZXJ2aWNlZC4NCreivP7IyzogWmVuZywgU3RhciBbbWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5j b21dDQq3osvNyrG85DogMjAxOcTqNdTCMTPI1SAxODo1NA0KytW8/sjLOiBKZXJyeSBaaG91KEJK LVJEKTsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEu b3JnPg0Ks63LzTogWWFvLCBKaWV3ZW47IE5pLCBSYXk7IFplbmcsIFN0YXINCtb3zOI6IFJFOiBb ZWRrMl0gW1BBVENIXSBJbnRlbFNpbGljb25Qa2cgVlRkRHhlOiBhIHF1ZXN0aW9uIGFib3V0IHRo ZSBzb3VyY2UgY29kZQ0KDQpHb29kIHF1ZXN0aW9uLCBteSB1bmRlcnN0YW5kaW5nIGlzIHNldHRp bmcgQl9HTUNEX1JFR19TUlRQKEJJVDMwKSBPTkxZIGFsc28gbWVhbnMgY2xlYXJpbmcgQl9HTUNE X1JFR19URSAoQklUMzEpLg0KDQpUaGFua3MsDQpTdGFyDQpGcm9tOiBKZXJyeSBaaG91KEJKLVJE KSBbbWFpbHRvOkplcnJ5WmhvdUB6aGFveGluLmNvbV0NClNlbnQ6IE1vbmRheSwgTWF5IDEzLCAy MDE5IDEwOjU5IEFNDQpUbzogWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86 c3Rhci56ZW5nQGludGVsLmNvbT4+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwu Y29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBOaSwgUmF5IDxyYXkubmlAaW50ZWwu Y29tPG1haWx0bzpyYXkubmlAaW50ZWwuY29tPj4NClN1YmplY3Q6ILTwuLQ6IFtlZGsyXSBbUEFU Q0hdIEludGVsU2lsaWNvblBrZyBWVGREeGU6IGEgcXVlc3Rpb24gYWJvdXQgdGhlIHNvdXJjZSBj b2RlDQoNCg0KSGkgU3RhciwNCg0KICAgICAgICAgSSdhbSBzbyBpbnRlcmVzdGVkIGluIERNQSBw cm90ZWN0aW9uIGluIFVFRkkuIEl0J3MgYSByZWFsbHkgZ29vZCBkZXNpZ24hDQoNCiAgICAgICAg IEJ1dCBJIGhhdmUgYSBxdWVzdGlvbiBhYm91dCB0aGUgaW1wbGVtZW50aW9uIG9mIERpc2FibGVE bWFyKCkgaW4gSW50ZWxTaWxpY29uUGtnXGZlYXR1cmVcdnRkXGludGVsdnRkZHhlXFZ0ZFJlZy5j DQoNCiAgICAgICAgIElzIGl0IGEgdHlwaW5nIGVycm9yIGluIHRoZSBjb2RlIHNlZ21lbnQgYmVs b3c/DQoNCg0KDQogICAgLy8NCg0KICAgIC8vIERpc2FibGUgVlRkDQoNCiAgICAvLw0KDQogICAg TW1pb1dyaXRlMzIgKG1WdGRVbml0SW5mb3JtYXRpb25bSW5kZXhdLlZ0ZFVuaXRCYXNlQWRkcmVz cyArIFJfR0NNRF9SRUcsIEJfR01DRF9SRUdfU1JUUCk7DQoNCiAgICBkbyB7DQoNCiAgICAgIFJl ZzMyID0gTW1pb1JlYWQzMiAobVZ0ZFVuaXRJbmZvcm1hdGlvbltJbmRleF0uVnRkVW5pdEJhc2VB ZGRyZXNzICsgUl9HU1RTX1JFRyk7DQoNCn0gd2hpbGUoKFJlZzMyICYgQl9HU1RTX1JFR19SVFBT KSA9PSAwKTsNCg0KDQoNClRoZSBzb2Z0d2FyZSBzaG91bGQgcHJvZ3JhbSB0aGUgQl9HTUNEX1JF R19URSBmaWVsZCBpbiBnbG9iYWwgY29tbWFuZCByZWdpc3RlciBhbmQgdGhlbiBwb2xsIHRoZSBC X0dTVFNfUkVHX1RFIGZpZWxkIGluIGdsb2JhbCBzdGF0dXMgcmVnaXN0ZXIgaWYgdGhlIERNQVIg aXMgZXhwZWN0ZWQgdG8gYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCBhY2NvcmRpbmcgdG8gVnQtZCBz cGVjaWZpY2F0aW9uLg0KDQoNCg0KVGhhbmtzDQoNCkplcnJ5IFpob3UNCg0KRXh0Ojg5MjQxOA0K DQoNCg0KDQoNCg0KDQotLS0tLdPKvP7Urbz+LS0tLS0NCreivP7IyzogZWRrMi1kZXZlbCBbbWFp bHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmddILT6se0gU3RhciBaZW5nDQq3osvN yrG85DogMjAxOMTqMTDUwjI0yNUgMTE6MzINCsrVvP7IyzogZWRrMi1kZXZlbEBsaXN0cy4wMS5v cmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0Ks63LzTogSmlld2VuIFlhbzsgU3Rh ciBaZW5nDQrW98ziOiBbZWRrMl0gW1BBVENIXSBJbnRlbFNpbGljb25Qa2cgVlRkRHhlOiBPcHRp b24gdG8gZm9yY2Ugbm8gZWFybHkgYWNjZXNzIGF0dHIgcmVxdWVzdA0KDQoNCg0KUkVGOiBodHRw czovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzINCg0KDQoNClRv IGhhdmUgaGlnaCBjb25maWRlbmNlIGluIHVzYWdlIGZvciBwbGF0Zm9ybSwgYWRkIG9wdGlvbiAo QklUMiBvZg0KDQpQY2RWVGRQb2xpY3lQcm9wZXJ0eU1hc2spIHRvIGZvcmNlIG5vIElPTU1VIGFj Y2VzcyBhdHRyaWJ1dGUgcmVxdWVzdA0KDQpyZWNvcmRpbmcgYmVmb3JlIERNQVIgdGFibGUgaXMg aW5zdGFsbGVkLg0KDQoNCg0KQ2hlY2sgUGNkVlRkUG9saWN5UHJvcGVydHlNYXNrIEJJVDIgYmVm b3JlIFJlcXVlc3RBY2Nlc3NBdHRyaWJ1dGUoKQ0KDQphbmQgUHJvY2Vzc1JlcXVlc3RlZEFjY2Vz c0F0dHJpYnV0ZSgpLCB0aGVuIFJlcXVlc3RBY2Nlc3NBdHRyaWJ1dGUoKSwNCg0KUHJvY2Vzc1Jl cXVlc3RlZEFjY2Vzc0F0dHJpYnV0ZSgpIGFuZCBtQWNjZXNzUmVxdWVzdFhYWCB2YXJpYWJsZXMN Cg0KY291bGQgYmUgb3B0aW1pemVkIGJ5IGNvbXBpbGVyIHdoZW4gUGNkVlRkUG9saWN5UHJvcGVy dHlNYXNrIEJJVDIgPSAxLg0KDQoNCg0KVGVzdCBkb25lOg0KDQoxOiBDcmVhdGVkIGNhc2UgdGhh dCBoYXMgSU9NTVUgYWNjZXNzIGF0dHJpYnV0ZSByZXF1ZXN0IGJlZm9yZSBETUFSDQoNCiAgIHRh YmxlIGlzIGluc3RhbGxlZCwgQVNTRVJUIHdhcyB0cmlnZ2VyZWQgYWZ0ZXIgc2V0dGluZw0KDQog ICBQY2RWVGRQb2xpY3lQcm9wZXJ0eU1hc2sgQklUMiB0byAxLg0KDQoNCg0KMi4gQ29uZmlybWVk IFJlcXVlc3RBY2Nlc3NBdHRyaWJ1dGUoKSwgUHJvY2Vzc1JlcXVlc3RlZEFjY2Vzc0F0dHJpYnV0 ZSgpDQoNCiAgIGFuZCBtQWNjZXNzUmVxdWVzdFhYWCB2YXJpYWJsZXMgd2VyZSBvcHRpbWl6ZWQg YnkgY29tcGlsZXIgYWZ0ZXINCg0KICAgc2V0dGluZyBQY2RWVGRQb2xpY3lQcm9wZXJ0eU1hc2sg QklUMiB0byAxLg0KDQoNCg0KQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPG1h aWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+DQoNCkNjOiBSYW5nYXNhaSBWIENoYWdhbnR5IDxy YW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbTxtYWlsdG86cmFuZ2FzYWkudi5jaGFnYW50eUBp bnRlbC5jb20+Pg0KDQpDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBB Z3JlZW1lbnQgMS4xDQoNClNpZ25lZC1vZmYtYnk6IFN0YXIgWmVuZyA8c3Rhci56ZW5nQGludGVs LmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+DQoNCi0tLQ0KDQpJbnRlbFNpbGljb25Q a2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvRG1hUHJvdGVjdGlvbi5jIHwgOCArKysrKysrLQ0K DQpJbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREeGUvSW50ZWxWVGREeGUuYyAg IHwgNyArKysrKysrDQoNCkludGVsU2lsaWNvblBrZy9JbnRlbFNpbGljb25Qa2cuZGVjICAgICAg ICAgICAgICAgICAgICAgfCAxICsNCg0KMyBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pDQoNCg0KDQpkaWZmIC0tZ2l0IGEvSW50ZWxTaWxpY29uUGtnL0ZlYXR1 cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uYyBiL0ludGVsU2lsaWNvblBrZy9GZWF0 dXJlL1ZUZC9JbnRlbFZUZER4ZS9EbWFQcm90ZWN0aW9uLmMNCg0KaW5kZXggODZkNTBlYjZmMjg4 Li43Nzg0NTQ1NjMxYjMgMTAwNjQ0DQoNCi0tLSBhL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZU ZC9JbnRlbFZUZER4ZS9EbWFQcm90ZWN0aW9uLmMNCg0KKysrIGIvSW50ZWxTaWxpY29uUGtnL0Zl YXR1cmUvVlRkL0ludGVsVlRkRHhlL0RtYVByb3RlY3Rpb24uYw0KDQpAQCAtNTE1LDcgKzUxNSwx MyBAQCBTZXR1cFZ0ZCAoDQoNCg0KDQogICBQYXJzZURtYXJBY3BpVGFibGVSbXJyICgpOw0KDQoN Cg0KLSAgUHJvY2Vzc1JlcXVlc3RlZEFjY2Vzc0F0dHJpYnV0ZSAoKTsNCg0KKyAgaWYgKChQY2RH ZXQ4IChQY2RWVGRQb2xpY3lQcm9wZXJ0eU1hc2spICYgQklUMikgPT0gMCkgew0KDQorICAgIC8v DQoNCisgICAgLy8gU3VwcG9ydCBJT01NVSBhY2Nlc3MgYXR0cmlidXRlIHJlcXVlc3QgcmVjb3Jk aW5nIGJlZm9yZSBETUFSIHRhYmxlIGlzIGluc3RhbGxlZC4NCg0KKyAgICAvLyBIZXJlIGlzIHRv IHByb2Nlc3MgdGhlIHJlcXVlc3RzLg0KDQorICAgIC8vDQoNCisgICAgUHJvY2Vzc1JlcXVlc3Rl ZEFjY2Vzc0F0dHJpYnV0ZSAoKTsNCg0KKyAgfQ0KDQoNCg0KICAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgbVZ0ZFVuaXROdW1iZXI7IEluZGV4KyspIHsNCg0KICAgICBERUJVRyAoKERFQlVHX0lO Rk8sIlZURCBVbml0ICVkIChTZWdtZW50OiAlMDR4KVxuIiwgSW5kZXgsIG1WdGRVbml0SW5mb3Jt YXRpb25bSW5kZXhdLlNlZ21lbnQpKTsNCg0KZGlmZiAtLWdpdCBhL0ludGVsU2lsaWNvblBrZy9G ZWF0dXJlL1ZUZC9JbnRlbFZUZER4ZS9JbnRlbFZUZER4ZS5jIGIvSW50ZWxTaWxpY29uUGtnL0Zl YXR1cmUvVlRkL0ludGVsVlRkRHhlL0ludGVsVlRkRHhlLmMNCg0KaW5kZXggMjVkN2M4MGFmMWQ0 Li4wOTk0OGNlNTBlOTQgMTAwNjQ0DQoNCi0tLSBhL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZU ZC9JbnRlbFZUZER4ZS9JbnRlbFZUZER4ZS5jDQoNCisrKyBiL0ludGVsU2lsaWNvblBrZy9GZWF0 dXJlL1ZUZC9JbnRlbFZUZER4ZS9JbnRlbFZUZER4ZS5jDQoNCkBAIC0yNTQsNiArMjU0LDEzIEBA IFZUZFNldEF0dHJpYnV0ZSAoDQoNCiAgICAgLy8gUmVjb3JkIHRoZSBlbnRyeSB0byBkcml2ZXIg Z2xvYmFsIHZhcmlhYmxlLg0KDQogICAgIC8vIEFzIHN1Y2ggb25jZSBWVGQgaXMgYWN0aXZhdGVk LCB0aGUgc2V0dGluZyBjYW4gYmUgYWRvcHRlZC4NCg0KICAgICAvLw0KDQorICAgIGlmICgoUGNk R2V0OCAoUGNkVlRkUG9saWN5UHJvcGVydHlNYXNrKSAmIEJJVDIpICE9IDApIHsNCg0KKyAgICAg IC8vDQoNCisgICAgICAvLyBGb3JjZSBubyBJT01NVSBhY2Nlc3MgYXR0cmlidXRlIHJlcXVlc3Qg cmVjb3JkaW5nIGJlZm9yZSBETUFSIHRhYmxlIGlzIGluc3RhbGxlZC4NCg0KKyAgICAgIC8vDQoN CisgICAgICBBU1NFUlRfRUZJX0VSUk9SIChFRklfTk9UX1JFQURZKTsNCg0KKyAgICAgIHJldHVy biBFRklfTk9UX1JFQURZOw0KDQorICAgIH0NCg0KICAgICBTdGF0dXMgPSBSZXF1ZXN0QWNjZXNz QXR0cmlidXRlIChTZWdtZW50LCBTb3VyY2VJZCwgRGV2aWNlQWRkcmVzcywgTGVuZ3RoLCBJb01t dUFjY2Vzcyk7DQoNCiAgIH0gZWxzZSB7DQoNCiAgICAgUEVSRl9DT0RFICgNCg0KZGlmZiAtLWdp dCBhL0ludGVsU2lsaWNvblBrZy9JbnRlbFNpbGljb25Qa2cuZGVjIGIvSW50ZWxTaWxpY29uUGtn L0ludGVsU2lsaWNvblBrZy5kZWMNCg0KaW5kZXggYjk2NDZkNzczYjk1Li45MDBlOGY2M2M2NGQg MTAwNjQ0DQoNCi0tLSBhL0ludGVsU2lsaWNvblBrZy9JbnRlbFNpbGljb25Qa2cuZGVjDQoNCisr KyBiL0ludGVsU2lsaWNvblBrZy9JbnRlbFNpbGljb25Qa2cuZGVjDQoNCkBAIC02NCw2ICs2NCw3 IEBAIFtQY2RzRml4ZWRBdEJ1aWxkLCBQY2RzUGF0Y2hhYmxlSW5Nb2R1bGUsIFBjZHNEeW5hbWlj LCBQY2RzRHluYW1pY0V4XQ0KDQogICAjIyBUaGUgbWFzayBpcyB1c2VkIHRvIGNvbnRyb2wgVlRk IGJlaGF2aW9yLjxCUj48QlI+DQoNCiAgICMgIEJJVDA6IEVuYWJsZSBJT01NVSBkdXJpbmcgYm9v dCAoSWYgRE1BUiB0YWJsZSBpcyBpbnN0YWxsZWQgaW4gRFhFLiBJZiBWVERfSU5GT19QUEkgaXMg aW5zdGFsbGVkIGluIFBFSS4pDQoNCiAgICMgIEJJVDE6IEVuYWJsZSBJT01NVSB3aGVuIHRyYW5z ZmVyIGNvbnRyb2wgdG8gT1MgKEV4aXRCb290U2VydmljZSBpbiBub3JtYWwgYm9vdC4gRW5kT2ZQ RUkgaW4gUzMpDQoNCisgICMgIEJJVDI6IEZvcmNlIG5vIElPTU1VIGFjY2VzcyBhdHRyaWJ1dGUg cmVxdWVzdCByZWNvcmRpbmcgYmVmb3JlIERNQVIgdGFibGUgaXMgaW5zdGFsbGVkLg0KDQogICAj IEBQcm9tcHQgVGhlIHBvbGljeSBmb3IgVlRkIGRyaXZlciBiZWhhdmlvci4NCg0KICAgZ0ludGVs U2lsaWNvblBrZ1Rva2VuU3BhY2VHdWlkLlBjZFZUZFBvbGljeVByb3BlcnR5TWFza3wxfFVJTlQ4 fDB4MDAwMDAwMDINCg0KDQoNCi0tDQoNCjIuNy4wLndpbmRvd3MuMQ0KDQoNCg0KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KZWRrMi1kZXZlbCBtYWls aW5nIGxpc3QNCg0KZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlz dHMuMDEub3JnPg0KDQpodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazIt ZGV2ZWwNCg0KsaPD3Mn5w/ejug0Ksb7Tyrz+uqzT0LGjw9y78teo09DQxc+io6y99rmp1ri2qMrV vP7Iy8q508Oho9HPvfu21LG+08q8/rvyxuTE2sjd1/bIzrrOzrS+rcrayKi1xLLp1MShosq508Oh ori01sa78teqt6Khow0KQ09ORklERU5USUFMIE5PVEU6DQpUaGlzIGVtYWlsIGNvbnRhaW5zIGNv bmZpZGVudGlhbCBvciBsZWdhbGx5IHByaXZpbGVnZWQgaW5mb3JtYXRpb24gYW5kIGlzIGZvciB0 aGUgc29sZSB1c2Ugb2YgaXRzIGludGVuZGVkIHJlY2lwaWVudC4gQW55IHVuYXV0aG9yaXplZCBy ZXZpZXcsIHVzZSwgY29weWluZyBvciBmb3J3YXJkaW5nIG9mIHRoaXMgZW1haWwgb3IgdGhlIGNv bnRlbnQgb2YgdGhpcyBlbWFpbCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLg0KDQqxo8PcyfnD96O6 DQqxvtPKvP66rNPQsaPD3Lvy16jT0NDFz6KjrL32uanWuLaoytW8/sjLyrnTw6Gj0c+9+7bUsb7T yrz+u/LG5MTayN3X9sjOus7OtL6tytrIqLXEsunUxKGiyrnTw6GiuLTWxrvy16q3oqGjDQpDT05G SURFTlRJQUwgTk9URToNClRoaXMgZW1haWwgY29udGFpbnMgY29uZmlkZW50aWFsIG9yIGxlZ2Fs bHkgcHJpdmlsZWdlZCBpbmZvcm1hdGlvbiBhbmQgaXMgZm9yIHRoZSBzb2xlIHVzZSBvZiBpdHMg aW50ZW5kZWQgcmVjaXBpZW50LiBBbnkgdW5hdXRob3JpemVkIHJldmlldywgdXNlLCBjb3B5aW5n IG9yIGZvcndhcmRpbmcgb2YgdGhpcyBlbWFpbCBvciB0aGUgY29udGVudCBvZiB0aGlzIGVtYWls IGlzIHN0cmljdGx5IHByb2hpYml0ZWQuDQoNCg0KsaPD3Mn5w/ejug0Ksb7Tyrz+uqzT0LGjw9y7 8teo09DQxc+io6y99rmp1ri2qMrVvP7Iy8q508Oho9HPvfu21LG+08q8/rvyxuTE2sjd1/bIzrrO zrS+rcrayKi1xLLp1MShosq508Ohori01sa78teqt6Khow0KQ09ORklERU5USUFMIE5PVEU6DQpU aGlzIGVtYWlsIGNvbnRhaW5zIGNvbmZpZGVudGlhbCBvciBsZWdhbGx5IHByaXZpbGVnZWQgaW5m b3JtYXRpb24gYW5kIGlzIGZvciB0aGUgc29sZSB1c2Ugb2YgaXRzIGludGVuZGVkIHJlY2lwaWVu dC4gQW55IHVuYXV0aG9yaXplZCByZXZpZXcsIHVzZSwgY29weWluZyBvciBmb3J3YXJkaW5nIG9m IHRoaXMgZW1haWwgb3IgdGhlIGNvbnRlbnQgb2YgdGhpcyBlbWFpbCBpcyBzdHJpY3RseSBwcm9o aWJpdGVkLg0K --_000_c4666120015a4f27bbe322359408bc70zhaoxincom_ Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: quoted-printable

OK.

I have = submitted to Bugzilla.

Bug 182= 3 - source code about disabling the DMAR of IOMMU in IntelSiliconPkg

&n= bsp;

Thank y= ou

Jerry Z= hou

=B7=A2=BC=FE=C8=CB: Yao, Jiewen [mailto:jiewen.yao@intel.com]
=B7=A2= =CB=CD=CA=B1=BC=E4: 2019=C4=EA5=D4=C220=C8=D5 14:09
=CA=D5=BC=FE=C8=CB: Zeng, Star; Jerry Zhou(BJ-RD); edk2-devel@lists.01.org; devel@edk2.= groups.io
=B3=AD=CB=CD: Ni, Ray; Yao, Jiewen
=D6=F7=CC=E2: RE: [edk2] [PATCH] IntelSiliconPkg VTdDxe: a question about the source co= de

 

Thanks.=

We are = also reviewing the VTd disabling flow and may update recently.

&n= bsp;

If you = want to file Bugzilla, please go ahead.

&n= bsp;

Thank y= ou

Yao Jie= wen

 

From: Zeng, Sta= r
Sent: Sunday, May 19, 2019 8:33 PM
To: Jerry Zhou(BJ-RD) <JerryZhou@zhaoxin.com>; edk2-devel@list= s.01.org; devel@edk2.groups.io
Cc: Yao, Jiewen <jiewen.yao@intel.com>; Ni, Ray <ray.ni@int= el.com>; Zeng, Star <star.zeng@intel.com>
Subject: RE: [edk2] [PATCH] IntelSiliconPkg VTdDxe: a question about= the source code

 

Actually, I agree with you.

Personally, I think more rigorous flow could be like below.<= /o:p>

1.      Clear = B_GMCD_REG_TE, wait B_GSTS_REG_TE to be cleared.

2.      Set B_= GMCD_REG_SRTP, wait B_GSTS_REG_RTPS to be set.

3.      Zero R= _RTADDR_REG.

 

Not sure original code developer Jiewen=A1=AFs thought about this= .

 

 

You may submit Bugzilla at https://bug= zilla.tianocore.org if you wait.

 

 

Thanks,

Star

 

From: Jerry Zhou(BJ-RD) [mailto:JerryZhou@zhaoxin.com]
Sent: Monday, May 13, 2019 7:28 PM
To: Zeng, Star <
star.zeng@intel.com>; edk2-devel@lists.01.org; devel@edk2.groups.io
Cc: Yao, Jiewen <
jiewen.yao@intel.com>; Ni, R= ay <ray.ni@intel.com>
Subject:
=B4=F0=B8=B4= : [edk2] [PATCH] IntelSiliconPkg VTdDxe: a question about the source code

 

Got it!= Thanks for your reply.

But you= should still poll the B_GSTS_REG_TE bit, not the B_GSTS_REG_RTPS bit, in t= he judgement code of while() loop.

After &= amp; operation between Reg32 and B_GSTS_REG_RTPS, the status of B_GSTS_REG_= TE will be lost.

&n= bsp;

A more = tedious but more reliable operation sequence is recommended in Vt-d specifi= cation 2.4 below:

&n= bsp;

to update a bit field in t= his register at offset X with value of Y, software

must follow below steps:

1. Tmp =3D Read GSTS_REG

2. Status =3D (Tmp & 9= 6FFFFFFh) // Reset the one-shot bits

3. Command =3D (Status | (= Y << X))

4. Write Command to GCMD_R= EG

5. Wait until GSTS_REG[X] = indicates command is serviced.

=B7=A2=BC=FE=C8=CB: Zeng, Star [mailto:star.zeng@intel.com]
=B7=A2= =CB=CD=CA=B1=BC=E4: 2019=C4=EA5=D4=C213=C8=D5 18:54
=CA=D5=BC=FE=C8=CB: Jerry Zhou(BJ-RD);
edk2-devel@lis= ts.01.org
=B3=AD= =CB=CD: Yao, Jiewen; Ni, Ray; Zeng, St= ar
=D6=F7= =CC=E2: RE: [edk2] [PATCH] IntelSilico= nPkg VTdDxe: a question about the source code

 

Good question, my understanding is setting B_GMCD_REG_SRTP(BIT30)= ONLY also means clearing B_GMCD_REG_TE (BIT31).

 

Thanks,

Star

From: Jerry Zhou(BJ-RD) [mailto:JerryZhou@zhaoxin.com]
Sent: Monday, May 13, 2019 10:59 AM
To: Zeng, Star <
star.zeng@intel.com>; edk2-devel@lists.01.org
Cc: Yao, Jiewen <jiewen.yao@intel.com>; Ni, R= ay <ray.ni@intel.com>
Subject:
=B4=F0=B8=B4= : [edk2] [PATCH] IntelSiliconPkg VTdDxe: a question about the source code

 

Hi Star,

    &nbs= p;    I'am so interested in DMA protection in UEFI. It's a r= eally good design!

    &nbs= p;    But I have a question about the implemention of DisableDmar() in IntelSiliconPkg\feature\vtd\intelvtddxe\VtdReg.c

    &nbs= p;    Is it a typing error in the code segment below?

 

    //

    // Disabl= e VTd

    //

    MmioWrite= 32 (mVtdUnitInformation[Index].VtdUnitBaseAddress + R_GCMD_REG, B_GMCD_REG_SRTP);=

    do {=

    &nbs= p; Reg32 =3D MmioRead32 (mVtdUnitInformation[Index].VtdUnitBaseAddress += ; R_GSTS_REG);

} while((Reg32 & B_GSTS_REG_RTPS) =3D=3D 0);

 

The software should program the B_GMCD_REG_TE field in global command register and then poll the = B_GSTS_REG_TE field in global status register if the DMAR is expected t= o be disabled or enabled according to Vt-d specification.=

 

Thanks

Jerry Zhou=

Ext:892418=

 

 

 

-----=D3=CA=BC=FE=D4=AD=BC=FE-----
=B7=A2=BC=FE=C8=CB: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] =B4=FA=B1=ED Star Zeng
=B7=A2=CB=CD=CA=B1=BC=E4
: 2018=C4=EA10=D4=C224=C8=D5 11:32
=CA=D5=BC=FE=C8=CB: edk2-devel@lists.01.org
=B3=AD=CB=CD: Jiewen Yao; Star Zeng
=D6=F7=CC=E2: [edk2] [PATCH] IntelSiliconPkg VTdDxe: Option to force no ea= rly access attr request

 

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1272=

 

To have high confidence in u= sage for platform, add option (BIT2 of

PcdVTdPolicyPropertyMask) to= force no IOMMU access attribute request

recording before DMAR table = is installed.

 

Check PcdVTdPolicyPropertyMa= sk BIT2 before RequestAccessAttribute()

and ProcessRequestedAccessAt= tribute(), then RequestAccessAttribute(),

ProcessRequestedAccessAttrib= ute() and mAccessRequestXXX variables

could be optimized by compil= er when PcdVTdPolicyPropertyMask BIT2 =3D 1.

 

Test done:=

1: Created case that has IOM= MU access attribute request before DMAR

   table is instal= led, ASSERT was triggered after setting

   PcdVTdPolicyPro= pertyMask BIT2 to 1.

 

2. Confirmed RequestAccessAt= tribute(), ProcessRequestedAccessAttribute()

   and mAccessRequ= estXXX variables were optimized by compiler after

   setting PcdVTdP= olicyPropertyMask BIT2 to 1.

 

Cc: Jiewen Yao <jiewen.yao@intel.com>

Cc: Rangasai V Chaganty <= rangasai.v.chaganty@intel.= com>

Contributed-under: TianoCore= Contribution Agreement 1.1

Signed-off-by: Star Zeng <= ;star.zeng@intel.com>

---

IntelSiliconPkg/Feature/VTd/= IntelVTdDxe/DmaProtection.c | 8 +++++++-

IntelSiliconPkg/Feature/VTd/= IntelVTdDxe/IntelVTdDxe.c   | 7 ++++++= 3;

IntelSiliconPkg/IntelSilicon= Pkg.dec           &n= bsp;         | 1 +

3 files changed, 15 insertio= ns(+), 1 deletion(-)

 

diff --git a/IntelSiliconPkg= /Feature/VTd/IntelVTdDxe/DmaProtection.c b/IntelSiliconPkg/Feature/VTd/Inte= lVTdDxe/DmaProtection.c

index 86d50eb6f288..77845456= 31b3 100644

--- a/IntelSiliconPkg/Featur= e/VTd/IntelVTdDxe/DmaProtection.c

+++ b/IntelSilic= onPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c

@@ -515,7 +515,13 @@ Set= upVtd (

 

   ParseDmarA= cpiTableRmrr ();

 

-  ProcessRequestedAcce= ssAttribute ();

+  if ((PcdGet8 (Pc= dVTdPolicyPropertyMask) & BIT2) =3D=3D 0) {

+    //

+    // S= upport IOMMU access attribute request recording before DMAR table is instal= led.

+    // H= ere is to process the requests.

+    //

+    Proc= essRequestedAccessAttribute ();

+  }

 

   for (Index= =3D 0; Index < mVtdUnitNumber; Index++) {

     DEB= UG ((DEBUG_INFO,"VTD Unit %d (Segment: %04x)\n", Index, mVtdUnitI= nformation[Index].Segment));

diff --git a/IntelSiliconPkg= /Feature/VTd/IntelVTdDxe/IntelVTdDxe.c b/IntelSiliconPkg/Feature/VTd/IntelV= TdDxe/IntelVTdDxe.c

index 25d7c80af1d4..09948ce5= 0e94 100644

--- a/IntelSiliconPkg/Featur= e/VTd/IntelVTdDxe/IntelVTdDxe.c

+++ b/IntelSilic= onPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c

@@ -254,6 +254,13 @@ VTd= SetAttribute (

     // = Record the entry to driver global variable.

     // = As such once VTd is activated, the setting can be adopted.

     //<= o:p>

+    if (= (PcdGet8 (PcdVTdPolicyPropertyMask) & BIT2) !=3D 0) {=

+    = ;  //

+    = ;  // Force no IOMMU access attribute request recording before DMAR ta= ble is installed.

+    = ;  //

+    = ;  ASSERT_EFI_ERROR (EFI_NOT_READY);

+    = ;  return EFI_NOT_READY;

+    }

     Sta= tus =3D RequestAccessAttribute (Segment, SourceId, DeviceAddress, Length, I= oMmuAccess);

   } else {

     PER= F_CODE (

diff --git a/IntelSiliconPkg= /IntelSiliconPkg.dec b/IntelSiliconPkg/IntelSiliconPkg.dec

index b9646d773b95..900e8f63= c64d 100644

--- a/IntelSiliconPkg/IntelS= iliconPkg.dec

+++ b/IntelSilic= onPkg/IntelSiliconPkg.dec

@@ -64,6 +64,7 @@ [PcdsF= ixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]<= /span>

   ## The mask is = used to control VTd behavior.<BR><BR>

   #  BIT0: E= nable IOMMU during boot (If DMAR table is installed in DXE. If VTD_INFO_PPI= is installed in PEI.)

   #  BIT1: E= nable IOMMU when transfer control to OS (ExitBootService in normal boot. En= dOfPEI in S3)

+  #  BIT2: Fo= rce no IOMMU access attribute request recording before DMAR table is instal= led.

   # @Prompt The p= olicy for VTd driver behavior.

   gIntelSiliconPk= gTokenSpaceGuid.PcdVTdPolicyPropertyMask|1|UINT8|0x00000002

 

--

2.7.0.windows.1

 

____________________________= ___________________

edk2-devel mailing list=

edk2-devel@lists.01.org

https://lists.01.org/mailman/listinfo/edk2= -devel

 

=B1=A3=C3=DC=C9=F9=C3=F7=A3=BA<= /span>

=B1=BE=D3=CA=BC=FE=BA=AC=D3=D0=B1=A3=C3=DC=BB=F2=D7=A8=D3=D0=D0=C5=CF= =A2=A3=AC=BD=F6=B9=A9=D6=B8=B6=A8=CA=D5=BC=FE=C8=CB=CA=B9=D3=C3=A1=A3=D1=CF= =BD=FB=B6=D4=B1=BE=D3=CA=BC=FE=BB=F2=C6=E4=C4=DA=C8=DD=D7=F6=C8=CE=BA=CE=CE= =B4=BE=AD=CA=DA=C8=A8=B5=C4=B2=E9=D4=C4=A1=A2=CA=B9=D3=C3=A1=A2=B8=B4=D6=C6= =BB=F2=D7=AA=B7=A2=A1=A3

CONFIDENTIAL NOTE: <= /p>

This email contains= confidential or legally privileged information and is for the sole use of its intended recipient. Any unauthorized review, use, copying = or forwarding of this email or the content of this email is strictly prohib= ited.

 

=B1=A3=C3=DC=C9=F9=C3=F7=A3=BA<= /span>

=B1=BE=D3=CA=BC=FE=BA=AC=D3=D0=B1=A3=C3=DC=BB=F2=D7=A8=D3=D0=D0=C5=CF= =A2=A3=AC=BD=F6=B9=A9=D6=B8=B6=A8=CA=D5=BC=FE=C8=CB=CA=B9=D3=C3=A1=A3=D1=CF= =BD=FB=B6=D4=B1=BE=D3=CA=BC=FE=BB=F2=C6=E4=C4=DA=C8=DD=D7=F6=C8=CE=BA=CE=CE= =B4=BE=AD=CA=DA=C8=A8=B5=C4=B2=E9=D4=C4=A1=A2=CA=B9=D3=C3=A1=A2=B8=B4=D6=C6= =BB=F2=D7=AA=B7=A2=A1=A3

CONFIDENTIAL NOTE: <= /p>

This email contains= confidential or legally privileged information and is for the sole use of its intended recipient. Any unauthorized review, use, copying = or forwarding of this email or the content of this email is strictly prohib= ited.



=B1=A3=C3=DC=C9=F9=C3=F7=A3=BA
=B1=BE=D3=CA=BC=FE=BA=AC=D3=D0=B1=A3=C3=DC=BB=F2=D7=A8=D3= =D0=D0=C5=CF=A2=A3=AC=BD=F6=B9=A9=D6=B8=B6=A8=CA=D5=BC=FE=C8=CB=CA=B9=D3=C3= =A1=A3=D1=CF=BD=FB=B6=D4=B1=BE=D3=CA=BC=FE=BB=F2=C6=E4=C4=DA=C8=DD=D7=F6=C8= =CE=BA=CE=CE=B4=BE=AD=CA=DA=C8=A8=B5=C4=B2=E9=D4=C4=A1=A2=CA=B9=D3=C3=A1=A2= =B8=B4=D6=C6=BB=F2=D7=AA=B7=A2=A1=A3
CONFIDENTIAL NOTE:
This email contains confidential or legally privileged information and i= s for the sole use of its intended recipient. Any unauthorized review, use,= copying or forwarding of this email or the content of this email is strict= ly prohibited.
--_000_c4666120015a4f27bbe322359408bc70zhaoxincom_--