From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by dpdk.space (Postfix) with ESMTP id E0E60A0471
	for <public@inbox.dpdk.org>; Tue, 18 Jun 2019 04:39:25 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id EBC6D1BEB8;
	Tue, 18 Jun 2019 04:39:24 +0200 (CEST)
Received: from mga01.intel.com (mga01.intel.com [192.55.52.88])
 by dpdk.org (Postfix) with ESMTP id 2D35C1BEB8
 for <dev@dpdk.org>; Tue, 18 Jun 2019 04:39:23 +0200 (CEST)
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga005.jf.intel.com ([10.7.209.41])
 by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 17 Jun 2019 19:39:22 -0700
X-ExtLoop1: 1
Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202])
 by orsmga005.jf.intel.com with ESMTP; 17 Jun 2019 19:39:21 -0700
Received: from fmsmsx115.amr.corp.intel.com (10.18.116.19) by
 fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS)
 id 14.3.439.0; Mon, 17 Jun 2019 19:39:21 -0700
Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by
 fmsmsx115.amr.corp.intel.com (10.18.116.19) with Microsoft SMTP Server (TLS)
 id 14.3.439.0; Mon, 17 Jun 2019 19:39:20 -0700
Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.33]) by
 SHSMSX152.ccr.corp.intel.com ([169.254.6.225]) with mapi id 14.03.0439.000;
 Tue, 18 Jun 2019 10:39:19 +0800
From: "Mo, YufengX" <yufengx.mo@intel.com>
To: "dev@dpdk.org" <dev@dpdk.org>
CC: "drc@ibm.com" <drc@ibm.com>, "pradeep@us.ibm.com" <pradeep@us.ibm.com>,
 Takeshi Yoshimura <tyos@jp.ibm.com>
Thread-Topic: [dpdk-dev] [PATCH] vfio: fix expanding DMA area in ppc64le
Thread-Index: AQHVJX61C4qC2KCbv0+gKDSJbfK/dKagsp7g
Date: Tue, 18 Jun 2019 02:39:18 +0000
Message-ID: <B8B15C44A3F2C044966E545C7B7371153E7FDFC2@shsmsx102.ccr.corp.intel.com>
References: <20190613022239.6946-1-tyos@jp.ibm.com>
In-Reply-To: <20190613022239.6946-1-tyos@jp.ibm.com>
Accept-Language: zh-CN, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [10.239.127.40]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Subject: Re: [dpdk-dev] [PATCH] vfio: fix expanding DMA area in ppc64le
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
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>

U29ycnksIG1pc3NlZCBzZW5kIHRoaXMgbWFpbC4gSWdub3JlIGl0IHBscy4NCg0KDQo+IC0tLS0t
T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1vLCBZdWZlbmdYDQo+IFNlbnQ6IFR1ZXNk
YXksIEp1bmUgMTgsIDIwMTkgMTA6MzggQU0NCj4gVG86IE1vLCBZdWZlbmdYIDx5dWZlbmd4Lm1v
QGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzogZHJjQGlibS5jb207IHByYWRlZXBAdXMu
aWJtLmNvbTsgVGFrZXNoaSBZb3NoaW11cmEgPHR5b3NAanAuaWJtLmNvbT4NCj4gU3ViamVjdDog
W2RwZGstZGV2XSBbUEFUQ0hdIHZmaW86IGZpeCBleHBhbmRpbmcgRE1BIGFyZWEgaW4gcHBjNjRs
ZQ0KPiANCj4gRnJvbTogVGFrZXNoaSBZb3NoaW11cmEgPHR5b3NAanAuaWJtLmNvbT4NCj4gDQo+
IEluIHBwYzY0bGUsIGV4cGFuZGluZyBETUEgYXJlYXMgYWx3YXlzIGZhaWwgYmVjYXVzZSB3ZSBj
YW5ub3QgcmVtb3ZlDQo+IGEgRE1BIHdpbmRvdy4gQXMgYSByZXN1bHQsIHdlIGNhbm5vdCBhbGxv
Y2F0ZSBtb3JlIHRoYW4gb25lIG1lbXNlZyBpbg0KPiBwcGM2NGxlLiBUaGlzIGlzIGJlY2F1c2Ug
dmZpb19zcGFwcl9kbWFfbWVtX21hcCgpIGRvZXNuJ3QgdW5tYXAgYWxsDQo+IHRoZSBtYXBwZWQg
RE1BIGJlZm9yZSByZW1vdmluZyB0aGUgd2luZG93LiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMNCj4g
aW5jb3JyZWN0IGJlaGF2aW9yLg0KPiANCj4gSSBhZGRlZCBhIGdsb2JhbCB2YXJpYWJsZSB0byB0
cmFjayBjdXJyZW50IHdpbmRvdyBzaXplIHNpbmNlIHdlIGRvDQo+IG5vdCBoYXZlIGJldHRlciB3
YXlzIHRvIGdldCBleGFjdCBzaXplIG9mIGl0IHRoYW4gZG9pbmcgc28uIHNQQVBSDQo+IElPTU1V
IHNlZW1zIG5vdCB0byBwcm92aWRlIGFueSB3YXlzIHRvIGdldCB3aW5kb3cgc2l6ZSB3aXRoIGlv
Y3RsDQo+IGludGVyZmFjZXMuIHJ0ZV9tZW1zZWdfd2FsayooKSBpcyBjdXJyZW50bHkgdXNlZCB0
byBjYWxjdWxhdGUgd2luZG93DQo+IHNpemUsIGJ1dCBpdCB3YWxrcyBtZW1zZWdzIHRoYXQgYXJl
IG1hcmtlZCBhcyB1c2VkLCBub3QgbWFwcGVkLiBTbywNCj4gd2UgbmVlZCB0byBkZXRlcm1pbmUg
aWYgYSBnaXZlbiBtZW1zZWcgaXMgbWFwcGVkIG9yIG5vdCwgb3RoZXJ3aXNlDQo+IHRoZSBpb2N0
bCByZXBvcnRzIGVycm9ycyBkdWUgdG8gYXR0ZW1wdGluZyB0byB1bnJlZ2lzdGVyIG1lbW9yeQ0K
PiBhZGRyZXNzZXMgdGhhdCBhcmUgbm90IHJlZ2lzdGVyZWQuIFRoZSBnbG9iYWwgdmFyaWFibGUg
aXMgZXhjbHVkZWQNCj4gaW4gbm9uLXBwYzY0bGUgYmluYXJpZXMuDQo+IA0KPiBTaW1pbGFyIHBy
b2JsZW1zIGhhcHBlbiBpbiB1c2VyIG1hcHMuIFdlIG5lZWQgdG8gYXZvaWQgYXR0ZW1wdGluZyB0
bw0KPiB1bm1hcCB0aGUgYWRkcmVzcyB0aGF0IGlzIGdpdmVuIGFzIHRoZSBmdW5jdGlvbidzIHBh
cmFtZXRlci4gVGhlDQo+IGNvbXBhY3Rpb24gb2YgdXNlciBtYXBzIHByZXZlbnRzIHVzIGZyb20g
cGFzc2luZyBjb3JyZWN0IGxlbmd0aCBmb3INCj4gdW5tYXBwaW5nIERNQSBhdCB0aGUgd2luZG93
IHJlY3JlYXRpb24uIFNvLCBJIHJlbW92ZWQgaXQgaW4gcHBjNjRsZS4NCj4gDQo+IEkgYWxzbyBm
aXhlZCB0aGUgb3JkZXIgb2YgaW9jdGwgZm9yIHVucmVnaXN0ZXIgYW5kIHVubWFwLiBUaGUgaW9j
dGwNCj4gZm9yIHVucmVnaXN0ZXIgc29tZXRpbWVzIHJlcG9ydCBkZXZpY2UgYnVzeSBlcnJvcnMg
ZHVlIHRvIHRoZQ0KPiBleGlzdGVuY2Ugb2YgbWFwcGVkIGFyZWEuDQo+IA0KPiBTaWduZWQtb2Zm
LWJ5OiBUYWtlc2hpIFlvc2hpbXVyYSA8dHlvc0BqcC5pYm0uY29tPg0KPiAtLS0NCj4gIGxpYi9s
aWJydGVfZWFsL2xpbnV4L2VhbC9lYWxfdmZpby5jIHwgMTU0ICsrKysrKysrKysrKysrKysrKyst
LS0tLS0tLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCAxMDMgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRp
b25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9lYWwvbGludXgvZWFsL2VhbF92
ZmlvLmMgYi9saWIvbGlicnRlX2VhbC9saW51eC9lYWwvZWFsX3ZmaW8uYw0KPiBpbmRleCBmMTZj
NWMzYzAuLmMxYjI3NWI1NiAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9lYWwvbGludXgvZWFs
L2VhbF92ZmlvLmMNCj4gKysrIGIvbGliL2xpYnJ0ZV9lYWwvbGludXgvZWFsL2VhbF92ZmlvLmMN
Cj4gQEAgLTkzLDYgKzkzLDcgQEAgaXNfbnVsbF9tYXAoY29uc3Qgc3RydWN0IHVzZXJfbWVtX21h
cCAqbWFwKQ0KPiAgCXJldHVybiBtYXAtPmFkZHIgPT0gMCAmJiBtYXAtPmlvdmEgPT0gMCAmJiBt
YXAtPmxlbiA9PSAwOw0KPiAgfQ0KPiANCj4gKyNpZm5kZWYgUlRFX0FSQ0hfUFBDXzY0DQo+ICAv
KiB3ZSBtYXkgbmVlZCB0byBtZXJnZSB1c2VyIG1lbSBtYXBzIHRvZ2V0aGVyIGluIGNhc2Ugb2Yg
dXNlciBtYXBwaW5nL3VubWFwcGluZw0KPiAgICogY2h1bmtzIG9mIG1lbW9yeSwgc28gd2UnbGwg
bmVlZCBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gc29ydCBzZWdtZW50cy4NCj4gICAqLw0KPiBA
QCAtMTI2LDYgKzEyNyw3IEBAIHVzZXJfbWVtX21hcF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qg
dm9pZCAqYikNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+ICsjZW5kaWYNCj4gDQo+ICAvKiBh
ZGp1c3QgdXNlciBtYXAgZW50cnkuIHRoaXMgbWF5IHJlc3VsdCBpbiBzaG9ydGVuaW5nIG9mIGV4
aXN0aW5nIG1hcCwgb3IgaW4NCj4gICAqIHNwbGl0dGluZyBleGlzdGluZyBtYXAgaW4gdHdvIHBp
ZWNlcy4NCj4gQEAgLTE2Miw2ICsxNjQsNyBAQCBhZGp1c3RfbWFwKHN0cnVjdCB1c2VyX21lbV9t
YXAgKnNyYywgc3RydWN0IHVzZXJfbWVtX21hcCAqZW5kLA0KPiAgCX0NCj4gIH0NCj4gDQo+ICsj
aWZuZGVmIFJURV9BUkNIX1BQQ182NA0KPiAgLyogdHJ5IG1lcmdpbmcgdHdvIG1hcHMgaW50byBv
bmUsIHJldHVybiAxIGlmIHN1Y2NlZWRlZCAqLw0KPiAgc3RhdGljIGludA0KPiAgbWVyZ2VfbWFw
KHN0cnVjdCB1c2VyX21lbV9tYXAgKmxlZnQsIHN0cnVjdCB1c2VyX21lbV9tYXAgKnJpZ2h0KQ0K
PiBAQCAtMTc3LDYgKzE4MCw3IEBAIG1lcmdlX21hcChzdHJ1Y3QgdXNlcl9tZW1fbWFwICpsZWZ0
LCBzdHJ1Y3QgdXNlcl9tZW1fbWFwICpyaWdodCkNCj4gDQo+ICAJcmV0dXJuIDE7DQo+ICB9DQo+
ICsjZW5kaWYNCj4gDQo+ICBzdGF0aWMgc3RydWN0IHVzZXJfbWVtX21hcCAqDQo+ICBmaW5kX3Vz
ZXJfbWVtX21hcChzdHJ1Y3QgdXNlcl9tZW1fbWFwcyAqdXNlcl9tZW1fbWFwcywgdWludDY0X3Qg
YWRkciwNCj4gQEAgLTIxMSw2ICsyMTUsMTYgQEAgZmluZF91c2VyX21lbV9tYXAoc3RydWN0IHVz
ZXJfbWVtX21hcHMgKnVzZXJfbWVtX21hcHMsIHVpbnQ2NF90IGFkZHIsDQo+ICAJcmV0dXJuIE5V
TEw7DQo+ICB9DQo+IA0KPiArI2lmZGVmIFJURV9BUkNIX1BQQ182NA0KPiArLyogUmVjcmVhdGlv
biBvZiBETUEgd2luZG93IHJlcXVpcmVzIHVucmVnaXN0ZXJpbmcgRE1BIG1lbW9yeS4NCj4gKyAq
IENvbXBhY3Rpb24gY29uZnVzZXMgdGhlIGxvZ2ljIGFuZCBjYXVzZXMgZmFsc2UgcmVwb3J0cyBp
biB0aGUgcmVjcmVhdGlvbi4NCj4gKyAqIEZvciBub3csIHdlIGRvIG5vdCBjb21wYWN0IHVzZXIg
bWFwcyBpbiBwcGM2NGxlLg0KPiArICovDQo+ICtzdGF0aWMgdm9pZA0KPiArY29tcGFjdF91c2Vy
X21hcHMoX19ydGVfdW51c2VkIHN0cnVjdCB1c2VyX21lbV9tYXBzICp1c2VyX21lbV9tYXBzKQ0K
PiArew0KPiArfQ0KPiArI2Vsc2UNCj4gIC8qIHRoaXMgd2lsbCBzb3J0IGFsbCB1c2VyIG1hcHMs
IGFuZCBtZXJnZS9jb21wYWN0IGFueSBhZGphY2VudCBtYXBzICovDQo+ICBzdGF0aWMgdm9pZA0K
PiAgY29tcGFjdF91c2VyX21hcHMoc3RydWN0IHVzZXJfbWVtX21hcHMgKnVzZXJfbWVtX21hcHMp
DQo+IEBAIC0yNTYsNiArMjcwLDcgQEAgY29tcGFjdF91c2VyX21hcHMoc3RydWN0IHVzZXJfbWVt
X21hcHMgKnVzZXJfbWVtX21hcHMpDQo+ICAJCXVzZXJfbWVtX21hcHMtPm5fbWFwcyA9IGN1cl9p
ZHg7DQo+ICAJfQ0KPiAgfQ0KPiArI2VuZGlmDQo+IA0KPiAgc3RhdGljIGludA0KPiAgdmZpb19v
cGVuX2dyb3VwX2ZkKGludCBpb21tdV9ncm91cF9udW0pDQo+IEBAIC0xMzA2LDYgKzEzMjEsNyBA
QCB2ZmlvX3R5cGUxX2RtYV9tYXAoaW50IHZmaW9fY29udGFpbmVyX2ZkKQ0KPiAgCXJldHVybiBy
dGVfbWVtc2VnX3dhbGsodHlwZTFfbWFwLCAmdmZpb19jb250YWluZXJfZmQpOw0KPiAgfQ0KPiAN
Cj4gKyNpZmRlZiBSVEVfQVJDSF9QUENfNjQNCj4gIHN0YXRpYyBpbnQNCj4gIHZmaW9fc3BhcHJf
ZG1hX2RvX21hcChpbnQgdmZpb19jb250YWluZXJfZmQsIHVpbnQ2NF90IHZhZGRyLCB1aW50NjRf
dCBpb3ZhLA0KPiAgCQl1aW50NjRfdCBsZW4sIGludCBkb19tYXApDQo+IEBAIC0xMzU3LDE0ICsx
MzczLDYgQEAgdmZpb19zcGFwcl9kbWFfZG9fbWFwKGludCB2ZmlvX2NvbnRhaW5lcl9mZCwgdWlu
dDY0X3QgdmFkZHIsIHVpbnQ2NF90IGlvdmEsDQo+ICAJCX0NCj4gDQo+ICAJfSBlbHNlIHsNCj4g
LQkJcmV0ID0gaW9jdGwodmZpb19jb250YWluZXJfZmQsDQo+IC0JCQkJVkZJT19JT01NVV9TUEFQ
Ul9VTlJFR0lTVEVSX01FTU9SWSwgJnJlZyk7DQo+IC0JCWlmIChyZXQpIHsNCj4gLQkJCVJURV9M
T0coRVJSLCBFQUwsICIgIGNhbm5vdCB1bnJlZ2lzdGVyIHZhZGRyIGZvciBJT01NVSwgZXJyb3Ig
JWkgKCVzKVxuIiwNCj4gLQkJCQkJZXJybm8sIHN0cmVycm9yKGVycm5vKSk7DQo+IC0JCQlyZXR1
cm4gLTE7DQo+IC0JCX0NCj4gLQ0KPiAgCQltZW1zZXQoJmRtYV91bm1hcCwgMCwgc2l6ZW9mKGRt
YV91bm1hcCkpOw0KPiAgCQlkbWFfdW5tYXAuYXJnc3ogPSBzaXplb2Yoc3RydWN0IHZmaW9faW9t
bXVfdHlwZTFfZG1hX3VubWFwKTsNCj4gIAkJZG1hX3VubWFwLnNpemUgPSBsZW47DQo+IEBAIC0x
Mzc3LDI0ICsxMzg1LDUwIEBAIHZmaW9fc3BhcHJfZG1hX2RvX21hcChpbnQgdmZpb19jb250YWlu
ZXJfZmQsIHVpbnQ2NF90IHZhZGRyLCB1aW50NjRfdCBpb3ZhLA0KPiAgCQkJCQllcnJubywgc3Ry
ZXJyb3IoZXJybm8pKTsNCj4gIAkJCXJldHVybiAtMTsNCj4gIAkJfQ0KPiArDQo+ICsJCXJldCA9
IGlvY3RsKHZmaW9fY29udGFpbmVyX2ZkLA0KPiArCQkJCVZGSU9fSU9NTVVfU1BBUFJfVU5SRUdJ
U1RFUl9NRU1PUlksICZyZWcpOw0KPiArCQlpZiAocmV0KSB7DQo+ICsJCQlSVEVfTE9HKEVSUiwg
RUFMLCAiICBjYW5ub3QgdW5yZWdpc3RlciB2YWRkciBmb3IgSU9NTVUsIGVycm9yICVpICglcylc
biIsDQo+ICsJCQkJCWVycm5vLCBzdHJlcnJvcihlcnJubykpOw0KPiArCQkJcmV0dXJuIC0xOw0K
PiArCQl9DQo+ICAJfQ0KPiANCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+ICtzdHJ1Y3Qgc3Bh
cHJfcmVtYXBfd2Fsa19wYXJhbSB7DQo+ICsJaW50IHZmaW9fY29udGFpbmVyX2ZkOw0KPiArCXVp
bnQ2NF90IHdpbmRvd19zaXplOw0KPiArfTsNCj4gKw0KPiAgc3RhdGljIGludA0KPiAgdmZpb19z
cGFwcl9tYXBfd2Fsayhjb25zdCBzdHJ1Y3QgcnRlX21lbXNlZ19saXN0ICptc2wsDQo+ICAJCWNv
bnN0IHN0cnVjdCBydGVfbWVtc2VnICptcywgdm9pZCAqYXJnKQ0KPiAgew0KPiAtCWludCAqdmZp
b19jb250YWluZXJfZmQgPSBhcmc7DQo+ICsJc3RydWN0IHNwYXByX3JlbWFwX3dhbGtfcGFyYW0g
KnAgPSBhcmc7DQo+IA0KPiAtCWlmIChtc2wtPmV4dGVybmFsKQ0KPiArCWlmIChtc2wtPmV4dGVy
bmFsIHx8IG1zLT5pb3ZhID49IHAtPndpbmRvd19zaXplKQ0KPiAgCQlyZXR1cm4gMDsNCj4gDQo+
IC0JcmV0dXJuIHZmaW9fc3BhcHJfZG1hX2RvX21hcCgqdmZpb19jb250YWluZXJfZmQsIG1zLT5h
ZGRyXzY0LCBtcy0+aW92YSwNCj4gKwlyZXR1cm4gdmZpb19zcGFwcl9kbWFfZG9fbWFwKHAtPnZm
aW9fY29udGFpbmVyX2ZkLCBtcy0+YWRkcl82NCwgbXMtPmlvdmEsDQo+ICAJCQltcy0+bGVuLCAx
KTsNCj4gIH0NCj4gDQo+ICtzdGF0aWMgaW50DQo+ICt2ZmlvX3NwYXByX3VubWFwX3dhbGsoY29u
c3Qgc3RydWN0IHJ0ZV9tZW1zZWdfbGlzdCAqbXNsLA0KPiArCQljb25zdCBzdHJ1Y3QgcnRlX21l
bXNlZyAqbXMsIHZvaWQgKmFyZykNCj4gK3sNCj4gKwlzdHJ1Y3Qgc3BhcHJfcmVtYXBfd2Fsa19w
YXJhbSAqcCA9IGFyZzsNCj4gKw0KPiArCWlmIChtc2wtPmV4dGVybmFsIHx8IG1zLT5pb3ZhID49
IHAtPndpbmRvd19zaXplKQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCXJldHVybiB2ZmlvX3Nw
YXByX2RtYV9kb19tYXAocC0+dmZpb19jb250YWluZXJfZmQsIG1zLT5hZGRyXzY0LCBtcy0+aW92
YSwNCj4gKwkJCW1zLT5sZW4sIDApOw0KPiArfQ0KPiArDQo+ICBzdHJ1Y3Qgc3BhcHJfd2Fsa19w
YXJhbSB7DQo+ICAJdWludDY0X3Qgd2luZG93X3NpemU7DQo+ICAJdWludDY0X3QgaHVnZXBhZ2Vf
c3o7DQo+IEBAIC0xNDgxLDE0ICsxNTE1LDEzIEBAIHZmaW9fc3BhcHJfY3JlYXRlX25ld19kbWFf
d2luZG93KGludCB2ZmlvX2NvbnRhaW5lcl9mZCwNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+
ICtzdGF0aWMgc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2NyZWF0ZSBwcmV2X2NyZWF0ZTsN
Cj4gKw0KPiAgc3RhdGljIGludA0KPiAgdmZpb19zcGFwcl9kbWFfbWVtX21hcChpbnQgdmZpb19j
b250YWluZXJfZmQsIHVpbnQ2NF90IHZhZGRyLCB1aW50NjRfdCBpb3ZhLA0KPiAgCQl1aW50NjRf
dCBsZW4sIGludCBkb19tYXApDQo+ICB7DQo+IC0Jc3RydWN0IHNwYXByX3dhbGtfcGFyYW0gcGFy
YW07DQo+IC0Jc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2NyZWF0ZSBjcmVhdGUgPSB7DQo+
IC0JCS5hcmdzeiA9IHNpemVvZihjcmVhdGUpLA0KPiAtCX07DQo+ICsJc3RydWN0IHZmaW9faW9t
bXVfc3BhcHJfdGNlX2NyZWF0ZSBjcmVhdGU7DQo+ICAJc3RydWN0IHZmaW9fY29uZmlnICp2Zmlv
X2NmZzsNCj4gIAlzdHJ1Y3QgdXNlcl9tZW1fbWFwcyAqdXNlcl9tZW1fbWFwczsNCj4gIAlpbnQg
aSwgcmV0ID0gMDsNCj4gQEAgLTE1MDIsNDMgKzE1MzUsNTkgQEAgdmZpb19zcGFwcl9kbWFfbWVt
X21hcChpbnQgdmZpb19jb250YWluZXJfZmQsIHVpbnQ2NF90IHZhZGRyLCB1aW50NjRfdCBpb3Zh
LA0KPiAgCXVzZXJfbWVtX21hcHMgPSAmdmZpb19jZmctPm1lbV9tYXBzOw0KPiAgCXJ0ZV9zcGlu
bG9ja19yZWN1cnNpdmVfbG9jaygmdXNlcl9tZW1fbWFwcy0+bG9jayk7DQo+IA0KPiAtCS8qIGNo
ZWNrIGlmIHdpbmRvdyBzaXplIG5lZWRzIHRvIGJlIGFkanVzdGVkICovDQo+IC0JbWVtc2V0KCZw
YXJhbSwgMCwgc2l6ZW9mKHBhcmFtKSk7DQo+IC0NCj4gLQkvKiB3ZSdyZSBpbnNpZGUgYSBjYWxs
YmFjayBzbyB1c2UgdGhyZWFkLXVuc2FmZSB2ZXJzaW9uICovDQo+IC0JaWYgKHJ0ZV9tZW1zZWdf
d2Fsa190aHJlYWRfdW5zYWZlKHZmaW9fc3BhcHJfd2luZG93X3NpemVfd2FsaywNCj4gLQkJCQkm
cGFyYW0pIDwgMCkgew0KPiAtCQlSVEVfTE9HKEVSUiwgRUFMLCAiQ291bGQgbm90IGdldCB3aW5k
b3cgc2l6ZVxuIik7DQo+IC0JCXJldCA9IC0xOw0KPiAtCQlnb3RvIG91dDsNCj4gLQl9DQo+ICsJ
bWVtY3B5KCZjcmVhdGUsICZwcmV2X2NyZWF0ZSwgc2l6ZW9mKGNyZWF0ZSkpOw0KPiANCj4gIAkv
KiBhbHNvIGNoZWNrIHVzZXIgbWFwcyAqLw0KPiAgCWZvciAoaSA9IDA7IGkgPCB1c2VyX21lbV9t
YXBzLT5uX21hcHM7IGkrKykgew0KPiAtCQl1aW50NjRfdCBtYXggPSB1c2VyX21lbV9tYXBzLT5t
YXBzW2ldLmlvdmEgKw0KPiAtCQkJCXVzZXJfbWVtX21hcHMtPm1hcHNbaV0ubGVuOw0KPiAtCQlj
cmVhdGUud2luZG93X3NpemUgPSBSVEVfTUFYKGNyZWF0ZS53aW5kb3dfc2l6ZSwgbWF4KTsNCj4g
KwkJc3RydWN0IHVzZXJfbWVtX21hcCAqbWFwID0gJnVzZXJfbWVtX21hcHMtPm1hcHNbaV07DQo+
ICsNCj4gKwkJaWYgKHZhZGRyID09IG1hcC0+YWRkciAmJiBsZW4gPT0gbWFwLT5sZW4pDQo+ICsJ
CQljb250aW51ZTsNCj4gKwkJY3JlYXRlLndpbmRvd19zaXplID0gUlRFX01BWChjcmVhdGUud2lu
ZG93X3NpemUsIG1hcC0+aW92YSArIG1hcC0+bGVuKTsNCj4gIAl9DQo+IA0KPiAgCS8qIHNQQVBS
IHJlcXVpcmVzIHdpbmRvdyBzaXplIHRvIGJlIGEgcG93ZXIgb2YgMiAqLw0KPiAtCWNyZWF0ZS53
aW5kb3dfc2l6ZSA9IHJ0ZV9hbGlnbjY0cG93MihwYXJhbS53aW5kb3dfc2l6ZSk7DQo+IC0JY3Jl
YXRlLnBhZ2Vfc2hpZnQgPSBfX2J1aWx0aW5fY3R6bGwocGFyYW0uaHVnZXBhZ2Vfc3opOw0KPiAt
CWNyZWF0ZS5sZXZlbHMgPSAxOw0KPiArCWNyZWF0ZS53aW5kb3dfc2l6ZSA9IHJ0ZV9hbGlnbjY0
cG93MihjcmVhdGUud2luZG93X3NpemUpOw0KPiANCj4gIAlpZiAoZG9fbWFwKSB7DQo+IC0JCXZv
aWQgKmFkZHI7DQo+ICAJCS8qIHJlLWNyZWF0ZSB3aW5kb3cgYW5kIHJlbWFwIHRoZSBlbnRpcmUg
bWVtb3J5ICovDQo+IC0JCWlmIChpb3ZhID4gY3JlYXRlLndpbmRvd19zaXplKSB7DQo+ICsJCWlm
IChpb3ZhICsgbGVuID4gY3JlYXRlLndpbmRvd19zaXplKSB7DQo+ICsJCQlzdHJ1Y3Qgc3BhcHJf
cmVtYXBfd2Fsa19wYXJhbSBwYXJhbSA9IHsNCj4gKwkJCQkudmZpb19jb250YWluZXJfZmQgPSB2
ZmlvX2NvbnRhaW5lcl9mZCwNCj4gKwkJCSAgICAud2luZG93X3NpemUgPSBjcmVhdGUud2luZG93
X3NpemUsDQo+ICsJCQl9Ow0KPiArDQo+ICsJCQkvKiB3ZSdyZSBpbnNpZGUgYSBjYWxsYmFjaywg
c28gdXNlIHRocmVhZC11bnNhZmUgdmVyc2lvbg0KPiArCQkJICovDQo+ICsJCQlydGVfbWVtc2Vn
X3dhbGtfdGhyZWFkX3Vuc2FmZSh2ZmlvX3NwYXByX3VubWFwX3dhbGssDQo+ICsJCQkJCSZwYXJh
bSk7DQo+ICsJCQkvKiBkZXN0cnVjdCBhbGwgdXNlciBtYXBzICovDQo+ICsJCQlmb3IgKGkgPSAw
OyBpIDwgdXNlcl9tZW1fbWFwcy0+bl9tYXBzOyBpKyspIHsNCj4gKwkJCQlzdHJ1Y3QgdXNlcl9t
ZW1fbWFwICptYXAgPQ0KPiArCQkJCQkJJnVzZXJfbWVtX21hcHMtPm1hcHNbaV07DQo+ICsJCQkJ
aWYgKHZhZGRyID09IG1hcC0+YWRkciAmJiBsZW4gPT0gbWFwLT5sZW4pDQo+ICsJCQkJCWNvbnRp
bnVlOw0KPiArCQkJCWlmICh2ZmlvX3NwYXByX2RtYV9kb19tYXAodmZpb19jb250YWluZXJfZmQs
DQo+ICsJCQkJCQltYXAtPmFkZHIsIG1hcC0+aW92YSwgbWFwLT5sZW4sDQo+ICsJCQkJCQkwKSkg
ew0KPiArCQkJCQlSVEVfTE9HKEVSUiwgRUFMLCAiQ291bGQgbm90IGRlc3RydWN0IHVzZXIgRE1B
IG1hcHNcbiIpOw0KPiArCQkJCQlyZXQgPSAtMTsNCj4gKwkJCQkJZ290byBvdXQ7DQo+ICsJCQkJ
fQ0KPiArCQkJfQ0KPiArDQo+ICsJCQljcmVhdGUud2luZG93X3NpemUgPSBydGVfYWxpZ242NHBv
dzIoaW92YSArIGxlbik7DQo+ICAJCQlpZiAodmZpb19zcGFwcl9jcmVhdGVfbmV3X2RtYV93aW5k
b3codmZpb19jb250YWluZXJfZmQsDQo+ICAJCQkJCSZjcmVhdGUpIDwgMCkgew0KPiAgCQkJCVJU
RV9MT0coRVJSLCBFQUwsICJDb3VsZCBub3QgY3JlYXRlIG5ldyBETUEgd2luZG93XG4iKTsNCj4g
IAkJCQlyZXQgPSAtMTsNCj4gIAkJCQlnb3RvIG91dDsNCj4gIAkJCX0NCj4gKwkJCW1lbWNweSgm
cHJldl9jcmVhdGUsICZjcmVhdGUsIHNpemVvZihjcmVhdGUpKTsNCj4gIAkJCS8qIHdlJ3JlIGlu
c2lkZSBhIGNhbGxiYWNrLCBzbyB1c2UgdGhyZWFkLXVuc2FmZSB2ZXJzaW9uDQo+ICAJCQkgKi8N
Cj4gIAkJCWlmIChydGVfbWVtc2VnX3dhbGtfdGhyZWFkX3Vuc2FmZSh2ZmlvX3NwYXByX21hcF93
YWxrLA0KPiAtCQkJCQkmdmZpb19jb250YWluZXJfZmQpIDwgMCkgew0KPiArCQkJCQkmcGFyYW0p
IDwgMCkgew0KPiAgCQkJCVJURV9MT0coRVJSLCBFQUwsICJDb3VsZCBub3QgcmVjcmVhdGUgRE1B
IG1hcHNcbiIpOw0KPiAgCQkJCXJldCA9IC0xOw0KPiAgCQkJCWdvdG8gb3V0Ow0KPiBAQCAtMTU0
Nyw2ICsxNTk2LDggQEAgdmZpb19zcGFwcl9kbWFfbWVtX21hcChpbnQgdmZpb19jb250YWluZXJf
ZmQsIHVpbnQ2NF90IHZhZGRyLCB1aW50NjRfdCBpb3ZhLA0KPiAgCQkJZm9yIChpID0gMDsgaSA8
IHVzZXJfbWVtX21hcHMtPm5fbWFwczsgaSsrKSB7DQo+ICAJCQkJc3RydWN0IHVzZXJfbWVtX21h
cCAqbWFwID0NCj4gIAkJCQkJCSZ1c2VyX21lbV9tYXBzLT5tYXBzW2ldOw0KPiArCQkJCWlmICh2
YWRkciA9PSBtYXAtPmFkZHIgJiYgbGVuID09IG1hcC0+bGVuKQ0KPiArCQkJCQljb250aW51ZTsN
Cj4gIAkJCQlpZiAodmZpb19zcGFwcl9kbWFfZG9fbWFwKHZmaW9fY29udGFpbmVyX2ZkLA0KPiAg
CQkJCQkJbWFwLT5hZGRyLCBtYXAtPmlvdmEsIG1hcC0+bGVuLA0KPiAgCQkJCQkJMSkpIHsNCj4g
QEAgLTE1NTYsMjMgKzE2MDcsOCBAQCB2ZmlvX3NwYXByX2RtYV9tZW1fbWFwKGludCB2ZmlvX2Nv
bnRhaW5lcl9mZCwgdWludDY0X3QgdmFkZHIsIHVpbnQ2NF90IGlvdmEsDQo+ICAJCQkJfQ0KPiAg
CQkJfQ0KPiAgCQl9DQo+IC0NCj4gLQkJLyogbm93IHRoYXQgd2UndmUgcmVtYXBwZWQgYWxsIG9m
IHRoZSBtZW1vcnkgdGhhdCB3YXMgcHJlc2VudA0KPiAtCQkgKiBiZWZvcmUsIG1hcCB0aGUgc2Vn
bWVudCB0aGF0IHdlIHdlcmUgcmVxdWVzdGVkIHRvIG1hcC4NCj4gLQkJICoNCj4gLQkJICogaG93
ZXZlciwgaWYgd2Ugd2VyZSBjYWxsZWQgYnkgdGhlIGNhbGxiYWNrLCB0aGUgbWVtb3J5IHdlDQo+
IC0JCSAqIHdlcmUgY2FsbGVkIHdpdGggd2FzIGFscmVhZHkgaW4gdGhlIG1lbXNlZyBsaXN0LCBz
byBwcmV2aW91cw0KPiAtCQkgKiBtYXBwaW5nIHNob3VsZCd2ZSBtYXBwZWQgdGhhdCBzZWdtZW50
IGFscmVhZHkuDQo+IC0JCSAqDQo+IC0JCSAqIHZpcnQybWVtc2VnX2xpc3QgaXMgYSByZWxhdGl2
ZWx5IGNoZWFwIGNoZWNrLCBzbyB1c2UgdGhhdC4gaWYNCj4gLQkJICogbWVtb3J5IGlzIHdpdGhp
biBhbnkgbWVtc2VnIGxpc3QsIGl0J3MgYSBtZW1zZWcsIHNvIGl0J3MNCj4gLQkJICogYWxyZWFk
eSBtYXBwZWQuDQo+IC0JCSAqLw0KPiAtCQlhZGRyID0gKHZvaWQgKikodWludHB0cl90KXZhZGRy
Ow0KPiAtCQlpZiAocnRlX21lbV92aXJ0Mm1lbXNlZ19saXN0KGFkZHIpID09IE5VTEwgJiYNCj4g
LQkJCQl2ZmlvX3NwYXByX2RtYV9kb19tYXAodmZpb19jb250YWluZXJfZmQsDQo+IC0JCQkJCXZh
ZGRyLCBpb3ZhLCBsZW4sIDEpIDwgMCkgew0KPiAtCQkJUlRFX0xPRyhFUlIsIEVBTCwgIkNvdWxk
IG5vdCBtYXAgc2VnbWVudFxuIik7DQo+ICsJCWlmICh2ZmlvX3NwYXByX2RtYV9kb19tYXAodmZp
b19jb250YWluZXJfZmQsIHZhZGRyLCBpb3ZhLCBsZW4sIDEpKSB7DQo+ICsJCQlSVEVfTE9HKEVS
UiwgRUFMLCAiRmFpbGVkIHRvIG1hcCBETUFcbiIpOw0KPiAgCQkJcmV0ID0gLTE7DQo+ICAJCQln
b3RvIG91dDsNCj4gIAkJfQ0KPiBAQCAtMTYxMyw2ICsxNjQ5LDcgQEAgdmZpb19zcGFwcl9kbWFf
bWFwKGludCB2ZmlvX2NvbnRhaW5lcl9mZCkNCj4gIAkJUlRFX0xPRyhFUlIsIEVBTCwgIkNvdWxk
IG5vdCBjcmVhdGUgbmV3IERNQSB3aW5kb3dcbiIpOw0KPiAgCQlyZXR1cm4gLTE7DQo+ICAJfQ0K
PiArCW1lbWNweSgmcHJldl9jcmVhdGUsICZjcmVhdGUsIHNpemVvZihjcmVhdGUpKTsNCj4gDQo+
ICAJLyogbWFwIGFsbCBEUERLIHNlZ21lbnRzIGZvciBETUEuIHVzZSAxOjEgUEEgdG8gSU9WQSBt
YXBwaW5nICovDQo+ICAJaWYgKHJ0ZV9tZW1zZWdfd2Fsayh2ZmlvX3NwYXByX21hcF93YWxrLCAm
dmZpb19jb250YWluZXJfZmQpIDwgMCkNCj4gQEAgLTE2MjAsNiArMTY1NywyMSBAQCB2ZmlvX3Nw
YXByX2RtYV9tYXAoaW50IHZmaW9fY29udGFpbmVyX2ZkKQ0KPiANCj4gIAlyZXR1cm4gMDsNCj4g
IH0NCj4gKyNlbHNlDQo+ICtzdGF0aWMgaW50DQo+ICt2ZmlvX3NwYXByX2RtYV9tZW1fbWFwKGlu
dCBfX3J0ZV91bnVzZWQgdmZpb19jb250YWluZXJfZmQsDQo+ICsJCQl1aW50NjRfdCBfX3J0ZV91
bnVzZWQgdmFkZHIsDQo+ICsJCQl1aW50NjRfdCBfX3J0ZV91bnVzZWQgaW92YSwgdWludDY0X3Qg
X19ydGVfdW51c2VkIGxlbiwNCj4gKwkJCWludCBfX3J0ZV91bnVzZWQgZG9fbWFwKQ0KPiArew0K
PiArCXJldHVybiAwOw0KPiArfQ0KPiArc3RhdGljIGludA0KPiArdmZpb19zcGFwcl9kbWFfbWFw
KGludCBfX3J0ZV91bnVzZWQgdmZpb19jb250YWluZXJfZmQpDQo+ICt7DQo+ICsJcmV0dXJuIDA7
DQo+ICt9DQo+ICsjZW5kaWYNCj4gDQo+ICBzdGF0aWMgaW50DQo+ICB2ZmlvX25vaW9tbXVfZG1h
X21hcChpbnQgX19ydGVfdW51c2VkIHZmaW9fY29udGFpbmVyX2ZkKQ0K