From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 084B3A0547; Mon, 19 Apr 2021 06:10:23 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E350A40683; Mon, 19 Apr 2021 06:10:22 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 930DC40040 for ; Mon, 19 Apr 2021 06:10:21 +0200 (CEST) IronPort-SDR: wu62YtOpgI13AJk7QP7awWlmIMbpKKmL8TqzJ1osCluu+8wTa+uUK+CfwHiyZlWKfCh/Ghh779 UhD545UAF3ag== X-IronPort-AV: E=McAfee;i="6200,9189,9958"; a="194822929" X-IronPort-AV: E=Sophos;i="5.82,233,1613462400"; d="scan'208";a="194822929" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Apr 2021 21:10:18 -0700 IronPort-SDR: W30J62WjyjaxV9OdHITepxitnfG1VHIuBRBOj3CwUl1Kvw1WxiL+UMMMxZ56YyRGKvrFKLPI/A eqM2OWBESUbA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,233,1613462400"; d="scan'208";a="523301401" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by fmsmga001.fm.intel.com with ESMTP; 18 Apr 2021 21:10:18 -0700 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) 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.2106.2; Sun, 18 Apr 2021 21:10:17 -0700 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by SHSMSX601.ccr.corp.intel.com (10.109.6.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 19 Apr 2021 12:10:15 +0800 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.2106.013; Mon, 19 Apr 2021 12:10:14 +0800 From: "Hu, Jiayu" To: Maxime Coquelin , "dev@dpdk.org" CC: "Xia, Chenbo" , "Wang, Yinan" , "Pai G, Sunil" , "Jiang, Cheng1" Thread-Topic: [PATCH v2 3/4] vhost: avoid deadlock on async register Thread-Index: AQHXJ4o3TGFQBWTUf0K5gqJ5ckYjX6qx3F2AgAFn1ECAABLyAIABfNQg///jRICAAJEZwIAA98YAgACUNCD//4z1gIAE36lQ Date: Mon, 19 Apr 2021 04:10:14 +0000 Message-ID: References: <1615985773-406787-1-git-send-email-jiayu.hu@intel.com> <1617368642-131298-1-git-send-email-jiayu.hu@intel.com> <1617368642-131298-4-git-send-email-jiayu.hu@intel.com> <0b974e3cd6534947ba6568d93d9431ab@intel.com> <9eb47884f1254cc98b9f1c60dfe9714c@intel.com> <4fc5b419864e4b829623099cd31de9aa@intel.com> <07eb8178-9523-6db3-1056-e96b48e65139@redhat.com> In-Reply-To: <07eb8178-9523-6db3-1056-e96b48e65139@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 3/4] vhost: avoid deadlock on async register X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgTWF4aW1lLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1heGlt ZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+IFNlbnQ6IEZyaWRheSwg QXByaWwgMTYsIDIwMjEgNDozNCBQTQ0KPiBUbzogSHUsIEppYXl1IDxqaWF5dS5odUBpbnRlbC5j b20+OyBkZXZAZHBkay5vcmcNCj4gQ2M6IFhpYSwgQ2hlbmJvIDxjaGVuYm8ueGlhQGludGVsLmNv bT47IFdhbmcsIFlpbmFuDQo+IDx5aW5hbi53YW5nQGludGVsLmNvbT47IFBhaSBHLCBTdW5pbCA8 c3VuaWwucGFpLmdAaW50ZWwuY29tPjsgSmlhbmcsIENoZW5nMQ0KPiA8Y2hlbmcxLmppYW5nQGlu dGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiAzLzRdIHZob3N0OiBhdm9pZCBkZWFk bG9jayBvbiBhc3luYyByZWdpc3Rlcg0KPiANCj4gDQo+IA0KPiBPbiA0LzE2LzIxIDEwOjE4IEFN LCBIdSwgSmlheXUgd3JvdGU6DQo+ID4gSGkgTWF4aW1lLA0KPiA+DQo+ID4+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IE1heGltZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVl bGluQHJlZGhhdC5jb20+DQo+ID4+IFNlbnQ6IEZyaWRheSwgQXByaWwgMTYsIDIwMjEgMjozNSBQ TQ0KPiA+PiBUbzogSHUsIEppYXl1IDxqaWF5dS5odUBpbnRlbC5jb20+OyBkZXZAZHBkay5vcmcN Cj4gPj4gQ2M6IFhpYSwgQ2hlbmJvIDxjaGVuYm8ueGlhQGludGVsLmNvbT47IFdhbmcsIFlpbmFu DQo+ID4+IDx5aW5hbi53YW5nQGludGVsLmNvbT47IFBhaSBHLCBTdW5pbCA8c3VuaWwucGFpLmdA aW50ZWwuY29tPjsgSmlhbmcsDQo+IENoZW5nMQ0KPiA+PiA8Y2hlbmcxLmppYW5nQGludGVsLmNv bT4NCj4gPj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiAzLzRdIHZob3N0OiBhdm9pZCBkZWFkbG9j ayBvbiBhc3luYyByZWdpc3Rlcg0KPiA+Pg0KPiA+PiBIaSBKaWF5dSwNCj4gPj4NCj4gPj4gT24g NC8xNi8yMSA0OjE5IEFNLCBIdSwgSmlheXUgd3JvdGU6DQo+ID4+PiBIaSBNYXhpbWUsDQo+ID4+ Pj4+PiBPbiA0LzE0LzIxIDM6NDAgQU0sIEh1LCBKaWF5dSB3cm90ZToNCj4gPj4+Pj4+PiBIaSBN YXhpbWUsDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gPj4+Pj4+Pj4gRnJvbTogTWF4aW1lIENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0 LmNvbT4NCj4gPj4+Pj4+Pj4gU2VudDogVHVlc2RheSwgQXByaWwgMTMsIDIwMjEgNzozMyBQTQ0K PiA+Pj4+Pj4+PiBUbzogSHUsIEppYXl1IDxqaWF5dS5odUBpbnRlbC5jb20+OyBkZXZAZHBkay5v cmcNCj4gPj4+Pj4+Pj4gQ2M6IFhpYSwgQ2hlbmJvIDxjaGVuYm8ueGlhQGludGVsLmNvbT47IFdh bmcsIFlpbmFuDQo+ID4+Pj4+Pj4+IDx5aW5hbi53YW5nQGludGVsLmNvbT47IFBhaSBHLCBTdW5p bCA8c3VuaWwucGFpLmdAaW50ZWwuY29tPjsNCj4gSmlhbmcsDQo+ID4+Pj4+PiBDaGVuZzENCj4g Pj4+Pj4+Pj4gPGNoZW5nMS5qaWFuZ0BpbnRlbC5jb20+DQo+ID4+Pj4+Pj4+IFN1YmplY3Q6IFJl OiBbUEFUQ0ggdjIgMy80XSB2aG9zdDogYXZvaWQgZGVhZGxvY2sgb24gYXN5bmMgcmVnaXN0ZXIN Cj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gT24gNC8yLzIx IDM6MDQgUE0sIEppYXl1IEh1IHdyb3RlOg0KPiA+Pj4+Pj4+Pj4gVXNlcnMgY2FuIHJlZ2lzdGVy IGFzeW5jIGNvcHkgZGV2aWNlIGluIHZyaW5nX3N0YXRlX2NoYW5nZWQoKSwNCj4gPj4+Pj4+Pj4+ IHdoZW4gdmhvc3QgcXVldWUgaXMgZW5hYmxlZC4gSG93ZXZlciwgYSBkZWFkbG9jayBvY2N1cnMg aW5zaWRlDQo+ID4+Pj4+Pj4+PiBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3RlcigpLCBp Zg0KPiA+Pj4+Pj4+PiBWSE9TVF9VU0VSX0ZfUFJPVE9DT0xfRkVBVFVSRVMNCj4gPj4+Pj4+Pj4+ IGlzIG5vdCBzdXBwb3J0ZWQsIGFzIHZob3N0X3VzZXJfbXNnX2hhbmRsZXIoKSB0YWtlcyB2cS0N Cj4gPj4+IGFjY2Vzc19sb2NrDQo+ID4+Pj4+Pj4+PiBiZWZvcmUgY2FsbGluZyB2aG9zdF91c2Vy X3NldF92cmluZ19raWNrKCkuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gVGhpcyBwYXRjaCBh dm9pZHMgYXN5bmMgcmVnaXN0ZXIgZGVhZGxvY2sgYnkgcmVtb3ZpbmcgY2FsbGluZw0KPiA+Pj4+ Pj4+Pj4gdnJpbmdfc3RhdGVfY2hhbmdlZCgpIGluIHZob3N0X3VzZXJfc2V0X3ZyaW5nX2tpY2so KS4gSXQncyBzYWZlDQo+ID4+Pj4+Pj4+PiBhcyB2aG9zdF91c2VyX21zZ19oYW5kbGVyKCkgd2ls bCBjYWxsIHZyaW5nX3N0YXRlX2NoYW5nZWQoKQ0KPiA+PiBhbnl3YXkuDQo+ID4+Pj4+Pj4+Pg0K PiA+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogSmlheXUgSHUgPGppYXl1Lmh1QGludGVsLmNvbT4N Cj4gPj4+Pj4+Pj4+IC0tLQ0KPiA+Pj4+Pj4+Pj4gIGxpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNl ci5jIHwgMyAtLS0NCj4gPj4+Pj4+Pj4+ICAxIGZpbGUgY2hhbmdlZCwgMyBkZWxldGlvbnMoLSkN Cj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV92aG9zdC92 aG9zdF91c2VyLmMNCj4gPj4+PiBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jDQo+ID4+ Pj4+Pj4+PiBpbmRleCA0NGMwNDUyLi44ZjBlYmE2IDEwMDY0NA0KPiA+Pj4+Pj4+Pj4gLS0tIGEv bGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmMNCj4gPj4+Pj4+Pj4+ICsrKyBiL2xpYi9saWJy dGVfdmhvc3Qvdmhvc3RfdXNlci5jDQo+ID4+Pj4+Pj4+PiBAQCAtMTkxOCw5ICsxOTE4LDYgQEAg dmhvc3RfdXNlcl9zZXRfdnJpbmdfa2ljayhzdHJ1Y3QNCj4gPj4gdmlydGlvX25ldA0KPiA+Pj4+ Pj4+PiAqKnBkZXYsIHN0cnVjdCBWaG9zdFVzZXJNc2cgKm1zZywNCj4gPj4+Pj4+Pj4+ICAJICov DQo+ID4+Pj4+Pj4+PiAgCWlmICghKGRldi0+ZmVhdHVyZXMgJiAoMVVMTCA8PA0KPiA+Pj4+Pj4+ PiBWSE9TVF9VU0VSX0ZfUFJPVE9DT0xfRkVBVFVSRVMpKSkgew0KPiA+Pj4+Pj4+Pj4gIAkJdnEt PmVuYWJsZWQgPSB0cnVlOw0KPiA+Pj4+Pj4+Pj4gLQkJaWYgKGRldi0+bm90aWZ5X29wcy0+dnJp bmdfc3RhdGVfY2hhbmdlZCkNCj4gPj4+Pj4+Pj4+IC0JCQlkZXYtPm5vdGlmeV9vcHMtPnZyaW5n X3N0YXRlX2NoYW5nZWQoDQo+ID4+Pj4+Pj4+PiAtCQkJCWRldi0+dmlkLCBmaWxlLmluZGV4LCAx KTsNCj4gPj4+Pj4+Pj4+ICAJfQ0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+ICAJaWYgKHZxLT5y ZWFkeSkgew0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gQXMgcmVwbGllZCBl YXJsaWVyIG9uIHYxLCBJIGFncmVlIHRoZSBjYWxsIHRvIHZyaW5nX3N0YXRlX2NoYW5nZWQNCj4g aGVyZQ0KPiA+Pj4+Pj4+PiBpcyBub3QgbmVlZGVkLiBCdXQgaXQgbWlnaHQgbm90IGJlIGVub3Vn aCwgdGhlcmUgYXJlIG90aGVyIGNhc2VzDQo+ID4+IHdoZXJlDQo+ID4+Pj4+Pj4+IHlvdSBjb3Vs ZCBoYXZlIGlzc3Vlcy4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IHZob3N0X3VzZXJfbm90aWZ5X3F1 ZXVlX3N0YXRlKCkgY2FuIGJlIGNhbGxlZCBpbiB0aHJlZSBjYXNlczoNCj4gPj4+Pj4+PiAxLiB3 aGVuIHZxIHJlYWR5IHN0YXR1cyBjaGFuZ2VzLCB2aG9zdF91c2VyX21zZ19oYW5kbGVyKCkgY2Fs bHMgaXQNCj4gdG8NCj4gPj4+Pj4+IG5vdGlmeQ0KPiA+Pj4+Pj4+IGJhY2tlbmQuIEJ1dCB2aG9z dF91c2VyX21zZ19oYW5kbGVyKCkgZG9lc24ndCB0YWtlIGxvY2sgYmVmb3JlDQo+ID4+IGNhbGxp bmcNCj4gPj4+PiBpdC4NCj4gPj4+Pj4+PiBTbyBpbiB0aGlzIGNhc2UsIG5vIGRlYWRsb2NrIG9j Y3VycyBpbiBhc3luYyByZWdpc3Rlci4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IDIuIGlmIHZxLT5y ZWFkeSBpcyB0cnVlLCB2aG9zdF91c2VyX3NldF92cmluZ19jYWxsKCkgY2FsbHMgaXQgdG8gbm90 aWZ5DQo+ID4+Pj4gYmFja2VuZA0KPiA+Pj4+Pj4+IHZxIGlzIG5vdCBlbmFibGVkLiBBbHRob3Vn aCB2aG9zdF91c2VyX3NldF92cmluZ19jYWxsKCkgaXMgcHJvdGVjdGVkDQo+IGJ5DQo+ID4+Pj4g bG9jaywNCj4gPj4+Pj4+PiBhc3luYyByZWdpc3RlciBpcyBjYWxsZWQgb25seSBpZiB2cSBpcyBl bmFibGVkLCBzbyBhc3luYyByZWdpc3RlciB3aWxsIG5vdA0KPiA+PiBiZQ0KPiA+Pj4+Pj4gY2Fs bGVkDQo+ID4+Pj4+Pj4gaW4gdGhpcyBjYXNlLg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gMy4gSWYg dnEtPnJlYWR5IGlzIHRydWUsIHZob3N0X3VzZXJfc2V0X3ZyaW5nX2tpY2soKSBjYWxscyBpdCB0 byBub3RpZnkNCj4gPj4+PiBiYWNrZW5kDQo+ID4+Pj4+Pj4gdnEgaXMgbm90IGVuYWJsZWQuIFNh bWUgYXMgIzIsIGFzeW5jIHJlZ2lzdGVyIGlzIGNhbGxlZCBvbmx5IHdoZW4gdnENCj4gaXMNCj4g Pj4+Pj4+IGVuYWJsZWQuDQo+ID4+Pj4+Pj4gRXZlbiBpZiB2aG9zdF91c2VyX3NldF92cmluZ19r aWNrKCkgaXMgcHJvdGVjdGVkIGJ5IGxvY2ssIHRoZXJlIGlzIG5vDQo+ID4+Pj4+PiBkZWFkbG9j ayBpbg0KPiA+Pj4+Pj4+IGFzeW5jIHJlZ2lzdGVyLCBhcyBpdCB3aWxsIG5vdCBiZSBjYWxsZWQg aW4gdGhpcyBjYXNlLg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gSW4gc3VtbWFyeSwgIEkgdGhpbmsg dGhlcmUgaXMgbm8gZGVhZGxvY2sgaXNzdWUgaW4gYXN5bmMgcmVnaXN0ZXIgaWYgd2UNCj4gPj4+ Pj4+PiBjYW4gcmVtb3ZlIGNhbGxpbmcgdnJpbmdfc3RhdGVfY2hhbmdlKCkgaW4NCj4gPj4gdmhv c3RfdXNlcl9zZXRfdnJpbmdfa2ljaygpLg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiBC dXQgdW5yZWdpc3RlciBvbmUgY291bGQgYmUgY2FsbGVkIGluIHRoZW9yeSBubz8gT3RoZXJ3aXNl IGl0IHdvdWxkDQo+ID4+IGxvb2sNCj4gPj4+Pj4+IHVuYmFsYW5jZWQuIEF0IGxlYXN0IG9uIGRp c2FibGVkIG5vdGlmaWNhdGlvbiwgdGhlIGFwcCBzaG91bGQgbWFrZQ0KPiBzdXJlDQo+ID4+Pj4+ PiB0aGUgRE1BIHRyYW5zZmVycyB0byBhbmQgZnJvbSB0aGUgdnJpbmcgYXJlIHN0b3BwZWQgYmVm b3JlIGl0DQo+IHJldHVybnMNCj4gPj4+Pj4+IGZyb20gdGhlIGNhbGxhYmNrLiBPdGhlcndpc2Ug aXQgY291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3IuDQo+ID4+Pj4+DQo+ID4+Pj4+IFJp Z2h0LCB1c2VycyBuZWVkIHRvIGNhbGwgdW5yZWdpc3RlciwgYnV0IHdlIGNhbm5vdCByZW1vdmUg Y2FsbGluZw0KPiA+Pj4+PiB2aG9zdF91c2VyX25vdGlmeV9xdWV1ZV9zdGF0ZSgpIGluIGNhc2Ug IzIgYW5kICMzLCBJTUhPLiBTbyB0bw0KPiA+Pj4+PiBhdm9pZCBkZWFkbG9jaywgd2UgcmVjb21t ZW5kZWQgdXNlcnMgdG8gY2FsbCBhc3luYyB1bnJlZ2lzdGVyIGluDQo+ID4+Pj4+IGRlc3Ryb3lf ZGV2aWNlKCksIGluc3RlYWQgb2Ygb24gdnJpbmcgZGlzYWJsZWQgbm90aWZpY2F0aW9uLiBEb2Vz IGl0DQo+ID4+Pj4+IG1ha2Ugc2Vuc2UgdG8geW91Pw0KPiA+Pj4+DQo+ID4+Pj4gQ2FsbGluZyBh c3luYyB1bnJlZ2lzdGVyIGluIGRlc3Ryb3kgZGV2aWNlIGlzIGZpbmUgYnkgbWUuIEJ1dCBJJ20g bW9yZQ0KPiA+Pj4+IGNvbmNlcm5lZCBhYm91dCBETUEgdHJhbnNhdGlvbnMgbm90IGJlaW5nIHN0 b3BwZWQgd2hlbiB0aGUgcmluZw0KPiA+PiBiZWNvbWVzDQo+ID4+Pj4gZGlzYWJsZWQuDQo+ID4+ PiBJZiByaW5nIGJlY29tZXMgZGlzYWJsZWQsIG5vIG1vcmUgbmV3IHBrdHMgZ28gaW50byBhc3lu YyBkYXRhIHBhdGgsIGFzDQo+ID4+PiB2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdCgpIHJldHVy bnMgaWYgdnEtPmVuYWJsZWQgaXMgZmFsc2UuDQo+ID4+Pg0KPiA+Pj4+DQo+ID4+Pj4gSSBjYW5u b3Qgc2F5IGlmIHlvdSBhcmUgZG9pbmcgaXQgcmlnaHQsIGJlY2F1c2UgdGhlIHZob3N0IGV4YW1w bGUgZG9lcw0KPiA+Pj4+IG5vdCBpbXBsZW1lbnQgdGhlIHZyaW5nX3N0YXRlX2NoYW5nZWQgY2Fs bGJhY2suDQo+ID4+Pj4gSXQgaXMgbm90IGEgcHJvYmxlbSB3aXRoIHRoZSBzeW5jIGRhdGFwYXRo IGFzIHdlIGhhdmUgdGhlIGxvY2sNCj4gPj4+PiBwcm90ZWN0aW9uICsgZW5hYmxlZCB2YXJpYWJs ZSB0aGF0IHByZXZlbnRzIHRvIHByb2Nlc3MgdGhlIHJpbmdzIHdoZW4gaXQNCj4gPj4+PiBnZXRz IHN0b3BwZWQuDQo+ID4+Pj4gQnV0IGZvciB0aGUgYXN5bmMgcGF0aCwgaWYgeW91IGhhdmUgcHJv Z3JhbW1lZCBETUEgdHJhbnNmZXJzLCB5b3UNCj4gbmVlZA0KPiA+Pj4+IHRvIHJlbHkgb24gdGhl IHZyaW5nX3N0YXRlX2NoYW5nZSB0byBibG9jayB0aGUgY29udHJvbCBwYXRoIHdoaWxlIHRoZQ0K PiA+Pj4+IHRyYW5zZmVycyBhcmUgY2FuY2VsbGVkIG9yIGRvbmUuDQo+ID4+Pg0KPiA+Pj4gSSBh bSBub3Qgc3VyZSBpZiBJIHVuZGVyc3RhbmQgeW91ciBjb25jZXJuIGNvcnJlY3RseSwgYnV0IGZv ciBhc3luYyBkYXRhDQo+ID4+IHBhdGgsDQo+ID4+PiBlbmFibGUgdmFyaWFibGUgY2FuIHByZXZl bnQgaXQgZnJvbSBlbnF1ZXVlIG5ldyBwa3RzIHdoZW4gcmluZyBpcw0KPiA+PiBkaXNhYmxlZCwg YXMNCj4gPj4+IHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KCkgY2hlY2sgZW5hYmxlIHZhcmlh YmxlIGJlZm9yZSBwcm9jZXNzaW5nDQo+IHJpbmc7DQo+ID4+PiBpbiBhZGRpdGlvbiwgbG9jayBw cm90ZWN0aW9uIGNhbiBzdG9wIGFzeW5jIGRhdGEgcGF0aCBhcw0KPiA+PiB2aXJ0aW9fZGV2X3J4 X2FzeW5jX3N1Ym1pdCgpDQo+ID4+PiBhY3F1aXJlcyBsb2NrIHRvby4gRm9yIGV4YW1wbGUsIGlu IHRoZSBjYXNlIHRoYXQgZnJvbnQtZW5kIHVwZGF0ZXMga2lja2ZkLA0KPiA+Pj4gc2V0X3ZyaW5n X2tpY2soKSB3aWxsIG5vdGlmeSBiYWNrZW5kIHRoYXQgdnJpbmcgaXMgc3RvcHBlZCBieSBjYWxs aW5nDQo+ID4+PiB2aG9zdF91c2VyX25vdGlmeV9xdWV1ZV9zdGF0ZSgpLiBJbiB0aGlzIGNhc2Us IHN5bmMgZGF0YSBwYXRoIHdpbGwgc3RvcCBhcw0KPiBhDQo+ID4+IHJlc3VsdCBvZg0KPiA+Pj4g bG9jayBwcm90ZWN0aW9uLCBhbmQgSSB0aGluayBpdCdzIHRoZSBzYW1lIGZvciBhc3luYyBkYXRh IHBhdGgsIGFzIGl0DQo+IGFjcXVpcmVzDQo+ID4+IGxvY2sgYmVmb3JlDQo+ID4+PiBwcm9jZXNz aW5nIHJpbmcuDQo+ID4+DQo+ID4+DQo+ID4+IFdoYXQgYWJvdXQgbWVtb3J5IGhvdHBsdWcgaGFw cGVuaW5nIHdoaWxlIHRoZSBETUEgdHJhbnNmZXJzIGFyZSBvbi0NCj4gPj4gZ29pbmcNCj4gPj4g Zm9yIGV4YW1wbGU/DQo+ID4+DQo+ID4+IEluIHRoaXMgY2FzZSwgdGhlIGxvY2sgaXMgZW5vdWdo IGZvciBzeW5jIGRhdGFwYXRoLCBidXQgaXMgbm90IGZvciBhc3luYw0KPiA+PiBvbmUuDQo+ID4+ DQo+ID4+IElmIGEgVkhPU1RfVVNFUl9TRVRfTUVNX1RBQkxFIHJlcXVlc3QgaXMgcmVjZWl2ZWQg d2hpbGUNCj4gPj4gdmlydGlvX2Rldl9yeF9hc3luY19zdWJtaXQoKSwgaXQgd2lsbCBiZSBibG9j a2VkIHVudGlsDQo+ID4+IHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KCkgcmV0dXJucyBidXQg dGhlIERNQSB0cmFuc2ZlcnMgbWF5IG5vdCBiZQ0KPiA+PiBmaW5pc2hlZCB5ZXQuDQo+ID4+IFdo ZW4gdW5ibG9ja2VkIHRoZSBjb250cm9sIHRocmVhZCB3aWxsIGNhbGwgdmhvc3RfdXNlcl9zZXRf bWVtX3RhYmxlKCksDQo+ID4+IHdoaWNoIHdpbGwgbW51bWFwIHRoZSBjdXJyZW50IG1lbW9yeSBy ZWdpb25zIGJlZm9yZSBtbWFwaW5nIHRoZSBuZXcNCj4gPj4gb25lcyB3aGlsZSBETUEgdHJhbnNm ZXJzIGFyZSBvbi1nb2luZy4NCj4gPj4NCj4gPj4gVG8gZml4IHRoaXMsIHdlIG5lZWQgdG8gY2Fs bCB0aGUgdnJpbmdfc3RhdGVfY2hhbmdlZCBjYWxsYmFjayBmb3IgYWxsDQo+ID4+IHRoZSB2aXJ0 cXVldWVzIHdpdGggZGlzYWJsZSBzdGF0ZS4gaW4geW91ciBhcHAsIHlvdSBuZWVkIHRvIHN0b3Ag RE1BDQo+ID4+IHRyYW5zZmVycyB3aGVuIGRpc2FibGVkIHN0YXRlIG5vdGlmaWNhdGlvbiBoYXBw ZW5zLCBvciBibG9jayB0aGUNCj4gPj4gY2FsbGJhY2sgd2hpbGUgdGhlIHRyYW5zZmVyIGlzIGRv bmUuDQo+ID4NCj4gPiBMZXQgbWUgc3VtbWFyaXplIHRoZSBwcm9ibGVtOg0KPiA+IHdoZW4gZnJv bnRlbmQgbWVtb3J5IGlzIGhvdC1wbHVnLCBob3N0IGFwcGxpY2F0aW9uIG5lZWRzIHRvIHN0b3AN Cj4gPiBETUEgdHJhbnNmZXIgZm9yIGFsbCB2aXJ0cXVldWVzLCB3aGljaCBpcyBkb25lIGJ5IGVt cHR5aW5nIGluLWZsaWdodA0KPiA+IERNQSBjb3BpZXMgYW5kIHVucmVnaXN0ZXIgYXN5bmMgaW5z aWRlIHZyaW5nX3N0YXRlX2NoYW5nZWQoKS4NCj4gDQo+IEkgZG9uJ3QgdGhpbmsgdW5yZWdpc3Rl cmluZyBhc3luYyBjaGFubmVscyBpcyBtYW5kYXRvcnkuDQo+IE9uIGRpc2FibGUgbm90aWZpY2F0 aW9uLCB0aGUgY2FsbGJhY2sgaGFzIHRvIGJsb2NrIHVudGlsIGFsbCBvbi1nb2luZw0KPiBETUEg dHJhbnNmZXJzIGFyZSBkb25lLiBOZXcgdHJhbnNmZXJzIHdvbid0IGJlIHNjaGVkdWxlcyBzaW5j ZQ0KPiB2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdCgpIHdpbGwgYmUgYmxvY2tlZCBieSB0aGUg bG9jayB3aGlsZSB0aGUNCj4gbWVtb3J5IHJlZ2lvbnMgdXBkYXRlIGlzIGJlaW5nIGRvbmUuDQoN ClllcywgdW5yZWdpc3RlciBpcyBub3QgYSBtdXN0LCBidXQgdGhlIHByb2JsZW0gaXMgdGhhdA0K cnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoKSB0YWtlcyBsb2NrIHRvby4NCkluIFZN IG1lbW9yeSBob3QtcGx1ZyBjYXNlLCBlbXB0eWluZyBpbi1mbGlnaHQgcGt0cyBpbg0KdnJpbmdf c3RhdGVfY2hhbmdlZCgpIG1heSBiZSBPSywgYXMgaXQgaXMgY2FsbGVkIGJ5DQp2aG9zdF91c2Vy X21zZ19oYW5kbGVyKCkgKHBsZWFzZSBjb3JyZWN0IG1lIGlmIEkgYW0gd3JvbmcpLA0Kd2hpY2gg ZG9lc24ndCB0YWtlIGxvY2suIEJ1dCBpZiBpdCBpcyBjYWxsZWQgaW5zaWRlIHNldF92cmluZ19r aWNrKCkvX2NhbGwoKSwNCmEgZGVhZGxvY2sgb2NjdXJzIGluIHJ0ZV92aG9zdF9wb2xsX2VucXVl dWVfY29tcGxldGVkKCksIGV2ZW4gaWYgdXNlcg0KYXBwIGRvZXNuJ3QgY2FsbCBhc3luYyB1bnJl Z2lzdGVyIEFQSS4NCg0KPiANCj4gPiBCdXQNCj4gPiB2aG9zdCBsaWJyYXJ5IHRha2VzIGxvY2sg YmVmb3JlIGVudGVyaW5nIHZyaW5nX3N0YXRlX2NoYW5nZWQoKSwgYW5kDQo+ID4gYXN5bmMgdW5y ZWdpc3RlciBhbmQgcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoKSBib3RoDQo+ID4g YWNxdWlyZSBsb2NrLCBzbyBkZWFkbG9jayBvY2N1cnMgaW5zaWRlIHJ0ZV92aG9zdF9wb2xsX2Vu cXVldWVfDQo+ID4gY29tcGxldGVkKCkgb3IgYXN5bmMgdW5yZWdpc3Rlci4gKHBsZWFzZSBjb3Jy ZWN0IG1lIGlmIGFtIHdyb25nKQ0KPiA+DQo+ID4gVGhlcmUgbWF5IGJlIHR3byBwb3NzaWJsZSBz b2x1dGlvbnM6DQo+ID4gMS4gcmVtb3ZlIGxvY2sgYmVmb3JlIGNhbGxpbmcgdnJpbmdfc3RhdGVf Y2hhbmdlKCkgaW4gdmhvc3QgbGlicmFyeTsNCj4gDQo+IEkgZG9uJ3QgdGhpbmsgc28uIElmIHlv dSByZWxlYXNlIHRoZSBsb2NrIGluIHZyaW5nX3N0YXRlX2NoYW5nZSgpLCBpdA0KPiB3aWxsIGVu YWJsZSB0aGUgYXBwIHRvIGVucXVldWUvZGVxdWV1ZSBkZXNjcmlwdG9ycyBpbiB0aGUgbWlkZGxl IG9mDQo+IGhhbmRsaW5nIHRoZSByZXF1ZXN0Lg0KDQpTb3JyeSwgSSBkaWRuJ3QgZXhwcmVzcyBt eSBvcGluaW9uIGNsZWFybHkuIEkgbWVhbiByZW1vdmUgdGhlIGZvbGxvd2luZyB0aGUNCmNvZGUg aW4gc2V0X3ZyaW5nX2tpY2soKSBhbmQgc2V0X3ZyaW5nX2NhbGwoKToNCi0gICAgICAgaWYgKHZx LT5yZWFkeSkgew0KLSAgICAgICAgICAgICAgIHZxLT5yZWFkeSA9IGZhbHNlOw0KLSAgICAgICAg ICAgICAgIHZob3N0X3VzZXJfbm90aWZ5X3F1ZXVlX3N0YXRlKGRldiwgZmlsZS5pbmRleCwgMCk7 DQotICAgICAgIH0NCg0KSU1ITywgaW4gdGhlIGJvdGggY2FzZXMsIHRoZSBwdXJwb3NlIG9mIGNh bGxpbmcgdmhvc3RfdXNlcl9ub3RpZnlfcXVldWVfc3RhdGUoKQ0KaXMgdG8gdGVsbCBiYWNrZW5k IHZyaW5nIGlzIG5vdCByZWFkeSB0byB1c2UgYXMgYSByZXN1bHQgb2YgY2FsbGZkL2tpY2tmZCB1 cGRhdGU7DQphZnRlciB0aGF0LCB2aG9zdF91c2VyX21zZ19oYW5kbGVyKCkgY2FsbHMgaXQgYWdh aW4gdG8gbm90aWZ5IGJhY2tlbmQgb2YgdnJpbmcNCnJlYWR5IHRvIHByb2Nlc3MuIEJ1dCB0aGVy ZSBpcyBsb2NrIHByb3RlY3Rpb24gYmVmb3JlIGVudGVyaW5nDQpzZXRfdnJpbmdfa2ljaygpL19j YWxsKCksIHNvIGRhdGEgcGF0aCB0aHJlYWRzIHdpbGwgbm90IHByb2Nlc3MgdnJpbmcgZHVyaW5n IHVwZGF0aW5nDQpjYWxsZmQva2lja2ZkIGFueXdheS4gQWZ0ZXIgdXBkYXRpbmcgY2FsbGZkL2tp Y2tmZCwgSSB0aGluayBkYXRhIHBhdGggdGhyZWFkcyBhcmUgYWxyZWFkeQ0Kc2FmZSB0byBzdGFy dCB0byBwcm9jZXNzIHZyaW5nLCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBhIHJlYWR5IG5vdGlm aWNhdGlvbiBpbg0Kdmhvc3RfdXNlcl9tc2dfaGFuZGVyKCkuDQoNCkJUVywgbG9jayBwcm90ZWN0 aW9uIGZvciB2aG9zdF91c2VyX25vdGlmeV9xdWV1ZV9zdGF0ZSgpIGlzIG9ubHkgaW4NCnNldF92 cmluZ19raWNrKCkvX2NhbGwoKSwgYnV0IG5vdCBpbiB2aG9zdF9tc2dfaGFuZGxlcigpLg0KDQpU aGFua3MsDQpKaWF5dQ0KPiANCj4gPiAyLiBwcm92aWRlIGEgbmV3IGNhbGxiYWNrIHdpdGhvdXQg YWNxdWlyaW5nIGxvY2sgZm9yIERNQSBhY2NlbGVyYXRlZA0KPiA+IGNhc2UuIFRoZSBjYWxsYmFj ayBpcyB1c2VkIHRvIG5vdGlmeSBiYWNrZW5kIHRoYXQgeW91IG5lZWQgdG8gc3RvcA0KPiA+IERN QSB0cmFuc2Zlci4NCj4gDQo+IE5vLCBpbiB5b3VyIGFwcCBqdXN0IHdhaXQgZm9yIERNQSB0cmFu c2ZlcnMgdG8gYmUgZmluaXNoZWQgYmVmb3JlDQo+IHJldHVybmluZyBmcm9tIHRoZSBjYWxsYmFj ay4NCj4gDQo+IFBsZWFzZSBpbXBsZW1lbnQgdnJpbmdfc3RhdGVfY2hhbmdlZCBjYWxsYmFjayBp biBWaG9zdCBleGFtcGxlLCBpdCBpcw0KPiBub3cgbWFuZGF0b3J5IHdpdGggYXN5bmMgZGF0YXBh dGgsIGFuZCBpdCB3aWxsIGhlbHAgdG8gaGF2ZSBhbiBleGFtcGxlDQo+IG9uIHdoYXQgcmVhbCBh cHBsaWNhdGlvbnMgc2hvdWxkIGRvLg0KPiANCj4gVGhhbmtzLA0KPiBNYXhpbWUNCj4gDQo+ID4g VGhhbmtzLA0KPiA+IEppYXl1DQo+ID4NCg0K