From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
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 <dev@dpdk.org>; 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" <jiayu.hu@intel.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>, "Jiang, Cheng1"
 <cheng1.jiang@intel.com>, "Xia, Chenbo" <chenbo.xia@intel.com>
CC: "dev@dpdk.org" <dev@dpdk.org>, "Yang, YvonneX" <yvonnex.yang@intel.com>
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 <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

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