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 1FFF2A0C48; Thu, 8 Jul 2021 15:46:37 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CA51340696; Thu, 8 Jul 2021 15:46:36 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id B8E2B4014F for ; Thu, 8 Jul 2021 15:46:34 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10038"; a="189186053" X-IronPort-AV: E=Sophos;i="5.84,222,1620716400"; d="scan'208";a="189186053" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 06:46:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,222,1620716400"; d="scan'208";a="428364840" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by orsmga002.jf.intel.com with ESMTP; 08 Jul 2021 06:46:33 -0700 Received: from shsmsx605.ccr.corp.intel.com (10.109.6.215) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Thu, 8 Jul 2021 06:46:32 -0700 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by SHSMSX605.ccr.corp.intel.com (10.109.6.215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Thu, 8 Jul 2021 21:46:25 +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.2242.010; Thu, 8 Jul 2021 21:46:24 +0800 From: "Hu, Jiayu" To: Maxime Coquelin , "Jiang, Cheng1" , "Xia, Chenbo" CC: "dev@dpdk.org" , "Yang, YvonneX" Thread-Topic: [PATCH v2 1/3] vhost: add unsafe API to drain pkts in async vhost Thread-Index: AQHXYfMiCeOy8iJDCU2PvAY8h8d1Eas1ltIAgAOezvA= Date: Thu, 8 Jul 2021 13:46:24 +0000 Message-ID: <81cfa424422245e388e7fef7b04b7e21@intel.com> References: <20210602042802.31943-1-cheng1.jiang@intel.com> <20210615141513.16163-1-cheng1.jiang@intel.com> <20210615141513.16163-2-cheng1.jiang@intel.com> <7a71639e-b9a3-8362-cc1e-8f86179d4c0e@redhat.com> In-Reply-To: <7a71639e-b9a3-8362-cc1e-8f86179d4c0e@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 1/3] vhost: add unsafe API to drain pkts in async vhost 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+IFNlbnQ6IFR1ZXNkYXks IEp1bHkgNiwgMjAyMSAxMDowOSBQTQ0KPiBUbzogSmlhbmcsIENoZW5nMSA8Y2hlbmcxLmppYW5n QGludGVsLmNvbT47IFhpYSwgQ2hlbmJvDQo+IDxjaGVuYm8ueGlhQGludGVsLmNvbT4NCj4gQ2M6 IGRldkBkcGRrLm9yZzsgSHUsIEppYXl1IDxqaWF5dS5odUBpbnRlbC5jb20+OyBZYW5nLCBZdm9u bmVYDQo+IDx5dm9ubmV4LnlhbmdAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYy IDEvM10gdmhvc3Q6IGFkZCB1bnNhZmUgQVBJIHRvIGRyYWluIHBrdHMgaW4gYXN5bmMgdmhvc3QN Cj4gDQo+IA0KPiANCj4gT24gNi8xNS8yMSA0OjE1IFBNLCBDaGVuZyBKaWFuZyB3cm90ZToNCj4g PiBBcHBsaWNhdGlvbnMgbmVlZCB0byBzdG9wIERNQSB0cmFuc2ZlcnMgYW5kIGZpbmlzaCBhbGwg dGhlIGluLWZsaWdodA0KPiA+IHBrdHMgd2hlbiBpbiBWTSBtZW1vcnkgaG90LXBsdWcgY2FzZSBh bmQgYXN5bmMgdmhvc3QgaXMgdXNlZC4gVGhpcw0KPiA+IHBhdGNoIGlzIHRvIHByb3ZpZGUgYW4g dW5zYWZlIEFQSSB0byBkcmFpbiBpbi1mbGlnaHQgcGt0cyB3aGljaCBhcmUNCj4gPiBzdWJtaXR0 ZWQgdG8gRE1BIGVuZ2luZSBpbiB2aG9zdCBhc3luYyBkYXRhIHBhdGguDQo+ID4NCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBDaGVuZyBKaWFuZyA8Y2hlbmcxLmppYW5nQGludGVsLmNvbT4NCj4gPiAtLS0N Cj4gPiAgbGliL3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oIHwgMjIgKysrKysrKysrDQo+ID4gIGxp Yi92aG9zdC92ZXJzaW9uLm1hcCAgICAgICB8ICAzICsrDQo+ID4gIGxpYi92aG9zdC92aXJ0aW9f bmV0LmMgICAgICB8IDkwICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0NCj4g PiAgMyBmaWxlcyBjaGFuZ2VkLCA5MiBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkNCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmggYi9saWIvdmhv c3QvcnRlX3Zob3N0X2FzeW5jLmgNCj4gPiBpbmRleCA2ZmFhMzFmNWFkLi4wNDFmNDBjZjA0IDEw MDY0NA0KPiA+IC0tLSBhL2xpYi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiA+ICsrKyBiL2xp Yi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiA+IEBAIC0xOTMsNCArMTkzLDI2IEBAIF9fcnRl X2V4cGVyaW1lbnRhbCAgdWludDE2X3QNCj4gPiBydGVfdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBs ZXRlZChpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAgCQlzdHJ1Y3QgcnRlX21idWYg Kipwa3RzLCB1aW50MTZfdCBjb3VudCk7DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAqIFRoaXMgZnVu Y3Rpb24gY2hlY2tzIGFzeW5jIGNvbXBsZXRpb24gc3RhdHVzIGFuZCBlbXB0eSBhbGwgcGFrY2V0 cw0KPiA+ICsgKiBmb3IgYSBzcGVjaWZpYyB2aG9zdCBkZXZpY2UgcXVldWUuIFBhY2tldHMgd2hp Y2ggYXJlIGluZmxpZ2h0IHdpbGwNCj4gPiArICogYmUgcmV0dXJuZWQgaW4gYW4gYXJyYXkuDQo+ ID4gKyAqDQo+ID4gKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBhbnkg bG9ja2luZw0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gdmlkDQo+ID4gKyAqICBpZCBvZiB2aG9z dCBkZXZpY2UgdG8gZW5xdWV1ZSBkYXRhDQo+ID4gKyAqIEBwYXJhbSBxdWV1ZV9pZA0KPiA+ICsg KiAgcXVldWUgaWQgdG8gZW5xdWV1ZSBkYXRhDQo+ID4gKyAqIEBwYXJhbSBwa3RzDQo+ID4gKyAq ICBibGFuayBhcnJheSB0byBnZXQgcmV0dXJuIHBhY2tldCBwb2ludGVyDQo+ID4gKyAqIEBwYXJh bSBjb3VudA0KPiA+ICsgKiAgc2l6ZSBvZiB0aGUgcGFja2V0IGFycmF5DQo+ID4gKyAqIEByZXR1 cm4NCj4gPiArICogIG51bSBvZiBwYWNrZXRzIHJldHVybmVkDQo+ID4gKyAqLw0KPiA+ICtfX3J0 ZV9leHBlcmltZW50YWwNCj4gPiArdWludDE2X3QgcnRlX3Zob3N0X2RyYWluX3F1ZXVlX3RocmVh ZF91bnNhZmUoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQsDQo+ID4gKwkJc3RydWN0IHJ0 ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291bnQpOw0KPiA+ICsNCj4gPiAgI2VuZGlmIC8qIF9S VEVfVkhPU1RfQVNZTkNfSF8gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3ZlcnNpb24u bWFwIGIvbGliL3Zob3N0L3ZlcnNpb24ubWFwIGluZGV4DQo+ID4gOTEwM2EyM2NkNC4uZjQ4MGYx ODhhZiAxMDA2NDQNCj4gPiAtLS0gYS9saWIvdmhvc3QvdmVyc2lvbi5tYXANCj4gPiArKysgYi9s aWIvdmhvc3QvdmVyc2lvbi5tYXANCj4gPiBAQCAtNzksNCArNzksNyBAQCBFWFBFUklNRU5UQUwg ew0KPiA+DQo+ID4gIAkjIGFkZGVkIGluIDIxLjA1DQo+ID4gIAlydGVfdmhvc3RfZ2V0X25lZ290 aWF0ZWRfcHJvdG9jb2xfZmVhdHVyZXM7DQo+ID4gKw0KPiA+ICsJIyBhZGRlZCBpbiAyMS4wOA0K PiA+ICsJcnRlX3Zob3N0X2RyYWluX3F1ZXVlX3RocmVhZF91bnNhZmU7DQo+ID4gIH07DQo+ID4g ZGlmZiAtLWdpdCBhL2xpYi92aG9zdC92aXJ0aW9fbmV0LmMgYi9saWIvdmhvc3QvdmlydGlvX25l dC5jIGluZGV4DQo+ID4gOGRhOGE4NmExMC4uNzkzNTEwOTc0YSAxMDA2NDQNCj4gPiAtLS0gYS9s aWIvdmhvc3QvdmlydGlvX25ldC5jDQo+ID4gKysrIGIvbGliL3Zob3N0L3ZpcnRpb19uZXQuYw0K PiA+IEBAIC0yMDgyLDM2ICsyMDgyLDE4IEBAIHdyaXRlX2JhY2tfY29tcGxldGVkX2Rlc2NzX3Bh Y2tlZChzdHJ1Y3QNCj4gdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gPiAgCX0gd2hpbGUgKG5yX2xl ZnQgPiAwKTsNCj4gPiAgfQ0KPiA+DQo+ID4gLXVpbnQxNl90IHJ0ZV92aG9zdF9wb2xsX2VucXVl dWVfY29tcGxldGVkKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICtzdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB1aW50MTZfdA0KPiA+ICt2aG9zdF9wb2xsX2VucXVldWVfY29tcGxl dGVkKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHVpbnQxNl90DQo+ID4gK3F1ZXVlX2lkLA0KPiA+ ICAJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50KSAgew0KPiA+IC0Jc3Ry dWN0IHZpcnRpb19uZXQgKmRldiA9IGdldF9kZXZpY2UodmlkKTsNCj4gPiAgCXN0cnVjdCB2aG9z dF92aXJ0cXVldWUgKnZxOw0KPiA+ICAJdWludDE2X3Qgbl9wa3RzX2NwbCA9IDAsIG5fcGt0c19w dXQgPSAwLCBuX2Rlc2NzID0gMCwgbl9idWZmZXJzID0gMDsNCj4gPiAgCXVpbnQxNl90IHN0YXJ0 X2lkeCwgcGt0c19pZHgsIHZxX3NpemU7DQo+ID4gIAlzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5m byAqcGt0c19pbmZvOw0KPiA+ICAJdWludDE2X3QgZnJvbSwgaTsNCj4gPg0KPiA+IC0JaWYgKCFk ZXYpDQo+ID4gLQkJcmV0dXJuIDA7DQo+ID4gLQ0KPiA+IC0JVkhPU1RfTE9HX0RBVEEoREVCVUcs ICIoJWQpICVzXG4iLCBkZXYtPnZpZCwgX19mdW5jX18pOw0KPiA+IC0JaWYgKHVubGlrZWx5KCFp c192YWxpZF92aXJ0X3F1ZXVlX2lkeChxdWV1ZV9pZCwgMCwgZGV2LT5ucl92cmluZykpKSB7DQo+ ID4gLQkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiKCVkKSAlczogaW52YWxpZCB2aXJ0cXVldWUNCj4g aWR4ICVkLlxuIiwNCj4gPiAtCQkJZGV2LT52aWQsIF9fZnVuY19fLCBxdWV1ZV9pZCk7DQo+ID4g LQkJcmV0dXJuIDA7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+ICAJdnEgPSBkZXYtPnZpcnRxdWV1ZVtx dWV1ZV9pZF07DQo+ID4NCj4gPiAtCWlmICh1bmxpa2VseSghdnEtPmFzeW5jX3JlZ2lzdGVyZWQp KSB7DQo+ID4gLQkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiKCVkKSAlczogYXN5bmMgbm90IHJlZ2lz dGVyZWQgZm9yDQo+IHF1ZXVlIGlkICVkLlxuIiwNCj4gPiAtCQkJZGV2LT52aWQsIF9fZnVuY19f LCBxdWV1ZV9pZCk7DQo+ID4gLQkJcmV0dXJuIDA7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JcnRl X3NwaW5sb2NrX2xvY2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+ID4gLQ0KPiA+ICAJcGt0c19pZHgg PSB2cS0+YXN5bmNfcGt0c19pZHggJSB2cS0+c2l6ZTsNCj4gPiAgCXBrdHNfaW5mbyA9IHZxLT5h c3luY19wa3RzX2luZm87DQo+ID4gIAl2cV9zaXplID0gdnEtPnNpemU7DQo+ID4gQEAgLTIxMTks MTQgKzIxMDEsMTQgQEAgdWludDE2X3QNCj4gcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0 ZWQoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gIAkJdnFfc2l6ZSwgdnEtPmFzeW5j X3BrdHNfaW5mbGlnaHRfbik7DQo+ID4NCj4gPiAgCWlmIChjb3VudCA+IHZxLT5hc3luY19sYXN0 X3BrdHNfbikNCj4gPiAtCQluX3BrdHNfY3BsID0gdnEtPmFzeW5jX29wcy5jaGVja19jb21wbGV0 ZWRfY29waWVzKHZpZCwNCj4gPiArCQluX3BrdHNfY3BsID0gdnEtPmFzeW5jX29wcy5jaGVja19j b21wbGV0ZWRfY29waWVzKGRldi0NCj4gPnZpZCwNCj4gPiAgCQkJcXVldWVfaWQsIDAsIGNvdW50 IC0gdnEtPmFzeW5jX2xhc3RfcGt0c19uKTsNCj4gPiAgCW5fcGt0c19jcGwgKz0gdnEtPmFzeW5j X2xhc3RfcGt0c19uOw0KPiA+DQo+ID4gIAluX3BrdHNfcHV0ID0gUlRFX01JTihjb3VudCwgbl9w a3RzX2NwbCk7DQo+ID4gIAlpZiAodW5saWtlbHkobl9wa3RzX3B1dCA9PSAwKSkgew0KPiA+ICAJ CXZxLT5hc3luY19sYXN0X3BrdHNfbiA9IG5fcGt0c19jcGw7DQo+ID4gLQkJZ290byBkb25lOw0K PiA+ICsJCXJldHVybiAwOw0KPiA+ICAJfQ0KPiA+DQo+ID4gIAlpZiAodnFfaXNfcGFja2VkKGRl dikpIHsNCj4gPiBAQCAtMjE2NSwxMiArMjE0Nyw3NCBAQCB1aW50MTZfdA0KPiBydGVfdmhvc3Rf cG9sbF9lbnF1ZXVlX2NvbXBsZXRlZChpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAg CQkJdnEtPmxhc3RfYXN5bmNfZGVzY19pZHhfc3BsaXQgKz0gbl9kZXNjczsNCj4gPiAgCX0NCj4g Pg0KPiA+IC1kb25lOg0KPiA+ICsJcmV0dXJuIG5fcGt0c19wdXQ7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3VpbnQxNl90IHJ0ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGludCB2aWQsIHVp bnQxNl90IHF1ZXVlX2lkLA0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90 IGNvdW50KSB7DQo+ID4gKwlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQp Ow0KPiA+ICsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7DQo+ID4gKwl1aW50MTZfdCBuX3Br dHNfcHV0ID0gMDsNCj4gPiArDQo+ID4gKwlpZiAoIWRldikNCj4gPiArCQlyZXR1cm4gMDsNCj4g PiArDQo+ID4gKwlWSE9TVF9MT0dfREFUQShERUJVRywgIiglZCkgJXNcbiIsIGRldi0+dmlkLCBf X2Z1bmNfXyk7DQo+ID4gKwlpZiAodW5saWtlbHkoIWlzX3ZhbGlkX3ZpcnRfcXVldWVfaWR4KHF1 ZXVlX2lkLCAwLCBkZXYtPm5yX3ZyaW5nKSkpIHsNCj4gPiArCQlWSE9TVF9MT0dfREFUQShFUlIs ICIoJWQpICVzOiBpbnZhbGlkIHZpcnRxdWV1ZQ0KPiBpZHggJWQuXG4iLA0KPiA+ICsJCQlkZXYt PnZpZCwgX19mdW5jX18sIHF1ZXVlX2lkKTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwl2cSA9IGRldi0+dmlydHF1ZXVlW3F1ZXVlX2lkXTsNCj4gPiArDQo+ID4gKwlp ZiAodW5saWtlbHkoIXZxLT5hc3luY19yZWdpc3RlcmVkKSkgew0KPiA+ICsJCVZIT1NUX0xPR19E QVRBKEVSUiwgIiglZCkgJXM6IGFzeW5jIG5vdCByZWdpc3RlcmVkIGZvcg0KPiBxdWV1ZSBpZCAl ZC5cbiIsDQo+ID4gKwkJCWRldi0+dmlkLCBfX2Z1bmNfXywgcXVldWVfaWQpOw0KPiA+ICsJCXJl dHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJ0ZV9zcGlubG9ja19sb2NrKCZ2cS0+YWNj ZXNzX2xvY2spOw0KPiA+ICsNCj4gPiArCW5fcGt0c19wdXQgPSB2aG9zdF9wb2xsX2VucXVldWVf Y29tcGxldGVkKGRldiwgcXVldWVfaWQsIHBrdHMsDQo+ID4gK2NvdW50KTsNCj4gPiArDQo+ID4g IAlydGVfc3BpbmxvY2tfdW5sb2NrKCZ2cS0+YWNjZXNzX2xvY2spOw0KPiA+DQo+ID4gIAlyZXR1 cm4gbl9wa3RzX3B1dDsNCj4gPiAgfQ0KPiA+DQo+ID4gK3VpbnQxNl90IHJ0ZV92aG9zdF9kcmFp bl9xdWV1ZV90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkLA0KPiA+ ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50KSB7DQo+ID4gKwlzdHJ1 Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiA+ICsJc3RydWN0IHZob3N0 X3ZpcnRxdWV1ZSAqdnE7DQo+ID4gKwl1aW50MTZfdCBuX3BrdHMgPSBjb3VudDsNCj4gPiArDQo+ ID4gKwlpZiAoIWRldikNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlWSE9TVF9MT0df REFUQShERUJVRywgIiglZCkgJXNcbiIsIGRldi0+dmlkLCBfX2Z1bmNfXyk7DQo+ID4gKwlpZiAo dW5saWtlbHkoIWlzX3ZhbGlkX3ZpcnRfcXVldWVfaWR4KHF1ZXVlX2lkLCAwLCBkZXYtPm5yX3Zy aW5nKSkpIHsNCj4gPiArCQlWSE9TVF9MT0dfREFUQShFUlIsICIoJWQpICVzOiBpbnZhbGlkIHZp cnRxdWV1ZQ0KPiBpZHggJWQuXG4iLA0KPiA+ICsJCQlkZXYtPnZpZCwgX19mdW5jX18sIHF1ZXVl X2lkKTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl2cSA9IGRldi0+ dmlydHF1ZXVlW3F1ZXVlX2lkXTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHkoIXZxLT5hc3lu Y19yZWdpc3RlcmVkKSkgew0KPiA+ICsJCVZIT1NUX0xPR19EQVRBKEVSUiwgIiglZCkgJXM6IGFz eW5jIG5vdCByZWdpc3RlcmVkIGZvcg0KPiBxdWV1ZSBpZCAlZC5cbiIsDQo+ID4gKwkJCWRldi0+ dmlkLCBfX2Z1bmNfXywgcXVldWVfaWQpOw0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXdoaWxlIChjb3VudCkNCj4gPiArCQljb3VudCAtPSB2aG9zdF9wb2xsX2VucXVl dWVfY29tcGxldGVkKGRldiwgcXVldWVfaWQsIHBrdHMsDQo+IGNvdW50KTsNCj4gDQo+IEkgdGhp bmsgd2UgbWF5IHdhbnQgdG8gaW1wcm92ZSB0aGUgc3luY19vcHMgc28gdGhhdA0KPiAuY2hlY2tf Y29tcGxldGVkX2NvcGllcygpIHJldHVybnMgYW4gaW50LiBJZiBmb3Igc29tZSByZWFzb24gdGhl IERNQSBkcml2ZXINCj4gY2FsbGJhY2sgZmFpbHMsIHdlIHdvdWxkIHBvbGwgZm9yZXZlci4NCg0K QWdyZWUsIGl0IG1ha2VzIHNlbnNlIHRvIGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgb2YgLmNoZWNr X2NvbXBsZXRlZF9jb3BpZXMoKSB0byBpbnQNCnRvIHJlcG9ydCBjYWxsYmFjayBmYWlsdXJlIGNh c2UuDQoNCj4gDQo+IExvb2tpbmcgbW9yZSBpbnRvIHRoZSBjb2RlLCBJIHNlZSB0aGF0IGlvYXRf Y2hlY2tfY29tcGxldGVkX2NvcGllc19jYigpIGFuDQo+IHJldHVybiAtMSAod2hlcmVhcyBpdCBz aG91bGQgcmV0dXJuIGFuIHVuaW50MzJfdCkuIEl0IHdvdWxkIGxlYWQgdG8gdW5kZWZpbmVkDQo+ IGJlaGF2aW91ciBpZiB0aGUgZmFpbHVyZSB3b3VsZCBoYXBwZW4uIFRoZSBJT0FUIGRyaXZlciBu ZWVkcyB0byBiZSBmaXhlZCwNCj4gYW5kIGFsc28gdGhlIGNhbGxiYWNrIHByb3RvdHlwZSBhbmQg aXRzIGhhbmRsaW5nLg0KDQpDdXJyZW50IGFzeW5jIGRlc2lnbiBvbmx5IGhhbmRsZXMgLnRyYW5z ZmVyX2RhdGEoKSBmYWlsdXJlLCBidXQgcmVxdWlyZXMNCi5jaGVja19jb21wbGV0ZWRfY29waWVz KCkgdG8gaGFuZGxlIERNQSBjb3B5IGZhaWx1cmUuIFRoYXQgaXMsDQouY2hlY2tfY29tcGxldGVk X2NvcGllcygpIGFsd2F5cyByZXBvcnRzIGFsbCBjb3B5IHN1Y2Nlc3MgdG8gdmhvc3QsDQpldmVu IGlmIGEgRE1BIGNvcHkgZmFpbHMuIEFuZCBpdCBjYW4gZmFsbCBiYWNrIHRvIFNXIGNvcHkgZm9y IHRoZSBmYWlsZWQNCkRNQSBjb3BpZXMuDQoNClRoZSBhbm90aGVyIGNob2ljZSBpcyB0byBtYWtl IHZob3N0IGhhbmRsZSBETUEgY29weSBmYWlsdXJlLiBBbHRob3VnaCBJT0FUDQpkcml2ZXIgYWxy ZWFkeSBzdXBwb3J0cyB0byByZXBvcnQgZmFpbGVkIGNvcGllcywgZG1hZGV2IGlzIHVuZGVyIGRp c2N1c3Npb24uDQpJIGFtIG5vdCBzdXJlIGlmIHRoZSBpbnRlcmZhY2Ugd2lsbCBjaGFuZ2UgYWZ0 ZXIgd2UgaGF2ZSBkbWFkZXYuIFNvIG1heWJlDQppdCdzIGJldHRlciB0byBsZWF2ZSBpdCBvcGVu IHVudGlsIHdlIGhhdmUgZG1hZGV2LiBIb3cgZG8geW91IHRoaW5rPw0KDQpUaGFua3MsDQpKaWF5 dQ0KDQo+IA0KPiA+ICsNCj4gPiArCXJldHVybiBuX3BrdHM7DQo+ID4gK30NCj4gPiArDQo+ID4g IHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVpbnQzMl90DQo+ID4gIHZpcnRpb19kZXZfcnhf YXN5bmNfc3VibWl0KHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHVpbnQxNl90IHF1ZXVlX2lkLA0K PiA+ICAJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMyX3QgY291bnQsDQo+ID4NCg0K