From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 3/9] mm: Add write-protect and clean utilities for address space ranges v3 Date: Sat, 27 Apr 2019 15:01:01 +0000 Message-ID: <20190427150023.52756-1-thellstrom@vmware.com> References: <20190424115918.3380-4-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-eopbgr780082.outbound.protection.outlook.com [40.107.78.82]) by gabe.freedesktop.org (Postfix) with ESMTPS id 91A07890C2 for ; Sat, 27 Apr 2019 15:01:15 +0000 (UTC) In-Reply-To: <20190424115918.3380-4-thellstrom@vmware.com> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Linux-graphics-maintainer , "dri-devel@lists.freedesktop.org" Cc: Thomas Hellstrom , Michal Hocko , Rik van Riel , Pv-drivers , Minchan Kim , Will Deacon , "linux-kernel@vger.kernel.org" , Matthew Wilcox , "linux-mm@kvack.org" , Peter Zijlstra , =?utf-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Souptick Joarder , Huang Ying , Andrew Morton , Ralph Campbell List-Id: dri-devel@lists.freedesktop.org QWRkIHR3byB1dGlsaXRpZXMgdG8gYSkgd3JpdGUtcHJvdGVjdCBhbmQgYikgY2xlYW4gYWxsIHB0 ZXMgcG9pbnRpbmcgaW50bw0KYSByYW5nZSBvZiBhbiBhZGRyZXNzIHNwYWNlLg0KVGhlIHV0aWxp dGllcyBhcmUgaW50ZW5kZWQgdG8gYWlkIGluIHRyYWNraW5nIGRpcnR5IHBhZ2VzIChlaXRoZXIN CmRyaXZlci1hbGxvY2F0ZWQgc3lzdGVtIG1lbW9yeSBvciBwY2kgZGV2aWNlIG1lbW9yeSkuDQpU aGUgd3JpdGUtcHJvdGVjdCB1dGlsaXR5IHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdp dGgNCnBhZ2VfbWt3cml0ZSgpIGFuZCBwZm5fbWt3cml0ZSgpIHRvIHRyaWdnZXIgd3JpdGUgcGFn ZS1mYXVsdHMgb24gcGFnZQ0KYWNjZXNzZXMuIFR5cGljYWxseSBvbmUgd291bGQgd2FudCB0byB1 c2UgdGhpcyBvbiBzcGFyc2UgYWNjZXNzZXMgaW50bw0KbGFyZ2UgbWVtb3J5IHJlZ2lvbnMuIFRo ZSBjbGVhbiB1dGlsaXR5IHNob3VsZCBiZSB1c2VkIHRvIHV0aWxpemUNCmhhcmR3YXJlIGRpcnR5 aW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBwYWdlLWZhdWx0cywN CnR5cGljYWxseSBvbiBsYXJnZSBhY2Nlc3NlcyBpbnRvIHNtYWxsIG1lbW9yeSByZWdpb25zLg0K DQpUaGUgYWRkZWQgZmlsZSAiYXNfZGlydHlfaGVscGVycy5jIiBpcyBpbml0aWFsbHkgbGlzdGVk IGFzIG1haW50YWluZWQgYnkNClZNd2FyZSB1bmRlciBvdXIgRFJNIGRyaXZlci4gSWYgc29tZWJv ZHkgd291bGQgbGlrZSBpdCBlbHNld2hlcmUsDQp0aGF0J3Mgb2YgY291cnNlIG5vIHByb2JsZW0u DQoNCk5vdGFibGUgY2hhbmdlcyBzaW5jZSBSRkM6DQotIEFkZGVkIGNvbW1lbnRzIHRvIGhlbHAg YXZvaWQgdGhlIHVzYWdlIG9mIHRoZXNlIGZ1bmN0aW9uIGZvciBWTUFzDQogIGl0J3Mgbm90IGlu dGVuZGVkIGZvci4gV2UgYWxzbyBkbyBhZHZpc29yeSBjaGVja3Mgb24gdGhlIHZtX2ZsYWdzIGFu ZA0KICB3YXJuIG9uIGlsbGVnYWwgdXNhZ2UuDQotIFBlcmZvcm0gdGhlIHB0ZSBtb2RpZmljYXRp b25zIHRoZSBzYW1lIHdheSBzb2Z0ZGlydHkgZG9lcy4NCi0gQWRkIG1tdV9ub3RpZmllciByYW5n ZSBpbnZhbGlkYXRpb24gY2FsbHMuDQotIEFkZCBhIGNvbmZpZyBvcHRpb24gc28gdGhhdCB0aGlz IGNvZGUgaXMgbm90IHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZC4NCi0gVGVsbCB0aGUgbW11X2dh dGhlciBjb2RlIGFib3V0IHBlbmRpbmcgdGxiIGZsdXNoZXMuDQoNCkNjOiBBbmRyZXcgTW9ydG9u IDxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPg0KQ2M6IE1hdHRoZXcgV2lsY294IDx3aWxseUBp bmZyYWRlYWQub3JnPg0KQ2M6IFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPg0KQ2M6 IFBldGVyIFppamxzdHJhIDxwZXRlcnpAaW5mcmFkZWFkLm9yZz4NCkNjOiBSaWsgdmFuIFJpZWwg PHJpZWxAc3VycmllbC5jb20+DQpDYzogTWluY2hhbiBLaW0gPG1pbmNoYW5Aa2VybmVsLm9yZz4N CkNjOiBNaWNoYWwgSG9ja28gPG1ob2Nrb0BzdXNlLmNvbT4NCkNjOiBIdWFuZyBZaW5nIDx5aW5n Lmh1YW5nQGludGVsLmNvbT4NCkNjOiBTb3VwdGljayBKb2FyZGVyIDxqcmRyLmxpbnV4QGdtYWls LmNvbT4NCkNjOiAiSsOpcsO0bWUgR2xpc3NlIiA8amdsaXNzZUByZWRoYXQuY29tPg0KQ2M6IGxp bnV4LW1tQGt2YWNrLm9yZw0KQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcNCg0KU2ln bmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPg0KUmV2 aWV3ZWQtYnk6IFJhbHBoIENhbXBiZWxsIDxyY2FtcGJlbGxAbnZpZGlhLmNvbT4gI3YxDQotLS0N CnYyOiBGaXggZm9ybWF0dGluZyBhbmQgdHlwb3MuDQogICAgQ2hhbmdlIGZpbGUtbmFtZSBvZiB0 aGUgYWRkZWQgZmlsZSwgYW5kIGRvbid0IGNvbXBpbGUgaXQgdW5sZXNzDQogICAgY29uZmlndXJl ZCB0byBkbyBzby4NCnYzOiBBZGFwdCB0byBuZXcgYXJndW1lbnRzIHRvIHB0ZXBfbW9kaWZ5X3By b3RfW3N0YXJ0fGNvbW1pdF0NCi0tLQ0KIE1BSU5UQUlORVJTICAgICAgICAgICB8ICAgMSArDQog aW5jbHVkZS9saW51eC9tbS5oICAgIHwgICA5ICstDQogbW0vS2NvbmZpZyAgICAgICAgICAgIHwg ICAzICsNCiBtbS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKw0KIG1tL2FzX2RpcnR5X2hlbHBl cnMuYyB8IDI5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiA1 IGZpbGVzIGNoYW5nZWQsIDMxMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQogY3JlYXRl IG1vZGUgMTAwNjQ0IG1tL2FzX2RpcnR5X2hlbHBlcnMuYw0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRB SU5FUlMgYi9NQUlOVEFJTkVSUw0KaW5kZXggZTIzM2IzYzQ4NTQ2Li5kZDY0N2E2ODU4MGYgMTAw NjQ0DQotLS0gYS9NQUlOVEFJTkVSUw0KKysrIGIvTUFJTlRBSU5FUlMNCkBAIC01MTAwLDYgKzUx MDAsNyBAQCBUOglnaXQgZ2l0Oi8vcGVvcGxlLmZyZWVkZXNrdG9wLm9yZy9+dGhvbWFzaC9saW51 eA0KIFM6CVN1cHBvcnRlZA0KIEY6CWRyaXZlcnMvZ3B1L2RybS92bXdnZngvDQogRjoJaW5jbHVk ZS91YXBpL2RybS92bXdnZnhfZHJtLmgNCitGOgltbS9hc19kaXJ0eV9oZWxwZXJzLmMNCiANCiBE Uk0gRFJJVkVSUw0KIE06CURhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4NCmRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgNCmluZGV4IDM0MzM4 ZWU3MDMxNy4uZTQ0NmFmOTczMmY2IDEwMDY0NA0KLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oDQor KysgYi9pbmNsdWRlL2xpbnV4L21tLmgNCkBAIC0yNjEwLDcgKzI2MTAsMTQgQEAgc3RydWN0IHBm bl9yYW5nZV9hcHBseSB7DQogfTsNCiBleHRlcm4gaW50IGFwcGx5X3RvX3Bmbl9yYW5nZShzdHJ1 Y3QgcGZuX3JhbmdlX2FwcGx5ICpjbG9zdXJlLA0KIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRk cmVzcywgdW5zaWduZWQgbG9uZyBzaXplKTsNCi0NCit1bnNpZ25lZCBsb25nIGFwcGx5X2FzX3dy cHJvdGVjdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywNCisJCQkJIHBnb2ZmX3QgZmly c3RfaW5kZXgsIHBnb2ZmX3QgbnIpOw0KK3Vuc2lnbmVkIGxvbmcgYXBwbHlfYXNfY2xlYW4oc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsDQorCQkJICAgICBwZ29mZl90IGZpcnN0X2luZGV4 LCBwZ29mZl90IG5yLA0KKwkJCSAgICAgcGdvZmZfdCBiaXRtYXBfcGdvZmYsDQorCQkJICAgICB1 bnNpZ25lZCBsb25nICpiaXRtYXAsDQorCQkJICAgICBwZ29mZl90ICpzdGFydCwNCisJCQkgICAg IHBnb2ZmX3QgKmVuZCk7DQogI2lmZGVmIENPTkZJR19QQUdFX1BPSVNPTklORw0KIGV4dGVybiBi b29sIHBhZ2VfcG9pc29uaW5nX2VuYWJsZWQodm9pZCk7DQogZXh0ZXJuIHZvaWQga2VybmVsX3Bv aXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsN CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZw0KaW5kZXggMjVjNzFlYjhhN2Ri Li44MGU0MWNkYmI0YWUgMTAwNjQ0DQotLS0gYS9tbS9LY29uZmlnDQorKysgYi9tbS9LY29uZmln DQpAQCAtNzU4LDQgKzc1OCw3IEBAIGNvbmZpZyBHVVBfQkVOQ0hNQVJLDQogY29uZmlnIEFSQ0hf SEFTX1BURV9TUEVDSUFMDQogCWJvb2wNCiANCitjb25maWcgQVNfRElSVFlfSEVMUEVSUw0KKyAg ICAgICAgYm9vbA0KKw0KIGVuZG1lbnUNCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01h a2VmaWxlDQppbmRleCBkMjEwY2M5ZDZmODAuLjRiZjM5NmJhM2EwMCAxMDA2NDQNCi0tLSBhL21t L01ha2VmaWxlDQorKysgYi9tbS9NYWtlZmlsZQ0KQEAgLTk5LDMgKzk5LDQgQEAgb2JqLSQoQ09O RklHX0hBUkRFTkVEX1VTRVJDT1BZKSArPSB1c2VyY29weS5vDQogb2JqLSQoQ09ORklHX1BFUkNQ VV9TVEFUUykgKz0gcGVyY3B1LXN0YXRzLm8NCiBvYmotJChDT05GSUdfSE1NKSArPSBobW0ubw0K IG9iai0kKENPTkZJR19NRU1GRF9DUkVBVEUpICs9IG1lbWZkLm8NCitvYmotJChDT05GSUdfQVNf RElSVFlfSEVMUEVSUykgKz0gYXNfZGlydHlfaGVscGVycy5vDQpkaWZmIC0tZ2l0IGEvbW0vYXNf ZGlydHlfaGVscGVycy5jIGIvbW0vYXNfZGlydHlfaGVscGVycy5jDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi44OGExYWMwZDVkYTkNCi0tLSAvZGV2L251bGwNCisr KyBiL21tL2FzX2RpcnR5X2hlbHBlcnMuYw0KQEAgLTAsMCArMSwyOTggQEANCisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKyNpbmNsdWRlIDxsaW51eC9tbS5oPg0KKyNpbmNs dWRlIDxsaW51eC9tbV90eXBlcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4N CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4NCisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+ DQorDQorLyoqDQorICogc3RydWN0IGFwcGx5X2FzIC0gQ2xvc3VyZSBzdHJ1Y3R1cmUgZm9yIGFw cGx5X2FzX3JhbmdlDQorICogQGJhc2U6IHN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkgd2UgZGVyaXZl IGZyb20NCisgKiBAc3RhcnQ6IEFkZHJlc3Mgb2YgZmlyc3QgbW9kaWZpZWQgcHRlDQorICogQGVu ZDogQWRkcmVzcyBvZiBsYXN0IG1vZGlmaWVkIHB0ZSArIDENCisgKiBAdG90YWw6IFRvdGFsIG51 bWJlciBvZiBtb2RpZmllZCBwdGVzDQorICogQHZtYTogUG9pbnRlciB0byB0aGUgc3RydWN0IHZt X2FyZWFfc3RydWN0IHdlJ3JlIGN1cnJlbnRseSBvcGVyYXRpbmcgb24NCisgKi8NCitzdHJ1Y3Qg YXBwbHlfYXMgew0KKwlzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5IGJhc2U7DQorCXVuc2lnbmVkIGxv bmcgc3RhcnQ7DQorCXVuc2lnbmVkIGxvbmcgZW5kOw0KKwl1bnNpZ25lZCBsb25nIHRvdGFsOw0K KwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsNCit9Ow0KKw0KKy8qKg0KKyAqIGFwcGx5X3B0 X3dycHJvdGVjdCAtIExlYWYgcHRlIGNhbGxiYWNrIHRvIHdyaXRlLXByb3RlY3QgYSBwdGUNCisg KiBAcHRlOiBQb2ludGVyIHRvIHRoZSBwdGUNCisgKiBAdG9rZW46IFBhZ2UgdGFibGUgdG9rZW4s IHNlZSBhcHBseV90b19wZm5fcmFuZ2UoKQ0KKyAqIEBhZGRyOiBUaGUgdmlydHVhbCBwYWdlIGFk ZHJlc3MNCisgKiBAY2xvc3VyZTogUG9pbnRlciB0byBhIHN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkg ZW1iZWRkZWQgaW4gYQ0KKyAqIHN0cnVjdCBhcHBseV9hcw0KKyAqDQorICogVGhlIGZ1bmN0aW9u IHdyaXRlLXByb3RlY3RzIGEgcHRlIGFuZCByZWNvcmRzIHRoZSByYW5nZSBpbg0KKyAqIHZpcnR1 YWwgYWRkcmVzcyBzcGFjZSBvZiB0b3VjaGVkIHB0ZXMgZm9yIGVmZmljaWVudCByYW5nZSBUTEIg Zmx1c2hlcy4NCisgKg0KKyAqIFJldHVybjogQWx3YXlzIHplcm8uDQorICovDQorc3RhdGljIGlu dCBhcHBseV9wdF93cnByb3RlY3QocHRlX3QgKnB0ZSwgcGd0YWJsZV90IHRva2VuLA0KKwkJCSAg ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwNCisJCQkgICAgICBzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5 ICpjbG9zdXJlKQ0KK3sNCisJc3RydWN0IGFwcGx5X2FzICphYXMgPSBjb250YWluZXJfb2YoY2xv c3VyZSwgdHlwZW9mKCphYXMpLCBiYXNlKTsNCisJcHRlX3QgcHRlbnQgPSAqcHRlOw0KKw0KKwlp ZiAocHRlX3dyaXRlKHB0ZW50KSkgew0KKwkJcHRlX3Qgb2xkX3B0ZSA9IHB0ZXBfbW9kaWZ5X3By b3Rfc3RhcnQoYWFzLT52bWEsIGFkZHIsIHB0ZSk7DQorDQorCQlwdGVudCA9IHB0ZV93cnByb3Rl Y3Qob2xkX3B0ZSk7DQorCQlwdGVwX21vZGlmeV9wcm90X2NvbW1pdChhYXMtPnZtYSwgYWRkciwg cHRlLCBvbGRfcHRlLCBwdGVudCk7DQorCQlhYXMtPnRvdGFsKys7DQorCQlhYXMtPnN0YXJ0ID0g bWluKGFhcy0+c3RhcnQsIGFkZHIpOw0KKwkJYWFzLT5lbmQgPSBtYXgoYWFzLT5lbmQsIGFkZHIg KyBQQUdFX1NJWkUpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBzdHJ1 Y3QgYXBwbHlfYXNfY2xlYW4gLSBDbG9zdXJlIHN0cnVjdHVyZSBmb3IgYXBwbHlfYXNfY2xlYW4N CisgKiBAYmFzZTogc3RydWN0IGFwcGx5X2FzIHdlIGRlcml2ZSBmcm9tDQorICogQGJpdG1hcF9w Z29mZjogQWRkcmVzc19zcGFjZSBQYWdlIG9mZnNldCBvZiB0aGUgZmlyc3QgYml0IGluIEBiaXRt YXANCisgKiBAYml0bWFwOiBCaXRtYXAgd2l0aCBvbmUgYml0IGZvciBlYWNoIHBhZ2Ugb2Zmc2V0 IGluIHRoZSBhZGRyZXNzX3NwYWNlIHJhbmdlDQorICogY292ZXJlZC4NCisgKiBAc3RhcnQ6IEFk ZHJlc3Nfc3BhY2UgcGFnZSBvZmZzZXQgb2YgZmlyc3QgbW9kaWZpZWQgcHRlIHJlbGF0aXZlDQor ICogdG8gQGJpdG1hcF9wZ29mZg0KKyAqIEBlbmQ6IEFkZHJlc3Nfc3BhY2UgcGFnZSBvZmZzZXQg b2YgbGFzdCBtb2RpZmllZCBwdGUgcmVsYXRpdmUNCisgKiB0byBAYml0bWFwX3Bnb2ZmDQorICov DQorc3RydWN0IGFwcGx5X2FzX2NsZWFuIHsNCisJc3RydWN0IGFwcGx5X2FzIGJhc2U7DQorCXBn b2ZmX3QgYml0bWFwX3Bnb2ZmOw0KKwl1bnNpZ25lZCBsb25nICpiaXRtYXA7DQorCXBnb2ZmX3Qg c3RhcnQ7DQorCXBnb2ZmX3QgZW5kOw0KK307DQorDQorLyoqDQorICogYXBwbHlfcHRfY2xlYW4g LSBMZWFmIHB0ZSBjYWxsYmFjayB0byBjbGVhbiBhIHB0ZQ0KKyAqIEBwdGU6IFBvaW50ZXIgdG8g dGhlIHB0ZQ0KKyAqIEB0b2tlbjogUGFnZSB0YWJsZSB0b2tlbiwgc2VlIGFwcGx5X3RvX3Bmbl9y YW5nZSgpDQorICogQGFkZHI6IFRoZSB2aXJ0dWFsIHBhZ2UgYWRkcmVzcw0KKyAqIEBjbG9zdXJl OiBQb2ludGVyIHRvIGEgc3RydWN0IHBmbl9yYW5nZV9hcHBseSBlbWJlZGRlZCBpbiBhDQorICog c3RydWN0IGFwcGx5X2FzX2NsZWFuDQorICoNCisgKiBUaGUgZnVuY3Rpb24gY2xlYW5zIGEgcHRl IGFuZCByZWNvcmRzIHRoZSByYW5nZSBpbg0KKyAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB0 b3VjaGVkIHB0ZXMgZm9yIGVmZmljaWVudCBUTEIgZmx1c2hlcy4NCisgKiBJdCBhbHNvIHJlY29y ZHMgZGlydHkgcHRlcyBpbiBhIGJpdG1hcCByZXByZXNlbnRpbmcgcGFnZSBvZmZzZXRzDQorICog aW4gdGhlIGFkZHJlc3Nfc3BhY2UsIGFzIHdlbGwgYXMgdGhlIGZpcnN0IGFuZCBsYXN0IG9mIHRo ZSBiaXRzDQorICogdG91Y2hlZC4NCisgKg0KKyAqIFJldHVybjogQWx3YXlzIHplcm8uDQorICov DQorc3RhdGljIGludCBhcHBseV9wdF9jbGVhbihwdGVfdCAqcHRlLCBwZ3RhYmxlX3QgdG9rZW4s DQorCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsDQorCQkJICBzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5 ICpjbG9zdXJlKQ0KK3sNCisJc3RydWN0IGFwcGx5X2FzICphYXMgPSBjb250YWluZXJfb2YoY2xv c3VyZSwgdHlwZW9mKCphYXMpLCBiYXNlKTsNCisJc3RydWN0IGFwcGx5X2FzX2NsZWFuICpjbGVh biA9IGNvbnRhaW5lcl9vZihhYXMsIHR5cGVvZigqY2xlYW4pLCBiYXNlKTsNCisJcHRlX3QgcHRl bnQgPSAqcHRlOw0KKw0KKwlpZiAocHRlX2RpcnR5KHB0ZW50KSkgew0KKwkJcGdvZmZfdCBwZ29m ZiA9ICgoYWRkciAtIGFhcy0+dm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCkgKw0KKwkJCWFh cy0+dm1hLT52bV9wZ29mZiAtIGNsZWFuLT5iaXRtYXBfcGdvZmY7DQorCQlwdGVfdCBvbGRfcHRl ID0gcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhYXMtPnZtYSwgYWRkciwgcHRlKTsNCisNCisJCXB0 ZW50ID0gcHRlX21rY2xlYW4ob2xkX3B0ZSk7DQorCQlwdGVwX21vZGlmeV9wcm90X2NvbW1pdChh YXMtPnZtYSwgYWRkciwgcHRlLCBvbGRfcHRlLCBwdGVudCk7DQorDQorCQlhYXMtPnRvdGFsKys7 DQorCQlhYXMtPnN0YXJ0ID0gbWluKGFhcy0+c3RhcnQsIGFkZHIpOw0KKwkJYWFzLT5lbmQgPSBt YXgoYWFzLT5lbmQsIGFkZHIgKyBQQUdFX1NJWkUpOw0KKw0KKwkJX19zZXRfYml0KHBnb2ZmLCBj bGVhbi0+Yml0bWFwKTsNCisJCWNsZWFuLT5zdGFydCA9IG1pbihjbGVhbi0+c3RhcnQsIHBnb2Zm KTsNCisJCWNsZWFuLT5lbmQgPSBtYXgoY2xlYW4tPmVuZCwgcGdvZmYgKyAxKTsNCisJfQ0KKw0K KwlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogYXBwbHlfYXNfcmFuZ2UgLSBBcHBseSBhIHB0 ZSBjYWxsYmFjayB0byBhbGwgUFRFcyBwb2ludGluZyBpbnRvIGEgcmFuZ2UNCisgKiBvZiBhbiBh ZGRyZXNzX3NwYWNlLg0KKyAqIEBtYXBwaW5nOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgYWRkcmVz c19zcGFjZQ0KKyAqIEBhYXM6IENsb3N1cmUgc3RydWN0dXJlDQorICogQGZpcnN0X2luZGV4OiBG aXJzdCBwYWdlIG9mZnNldCBpbiB0aGUgYWRkcmVzc19zcGFjZQ0KKyAqIEBucjogTnVtYmVyIG9m IGluY3JlbWVudGFsIHBhZ2Ugb2Zmc2V0cyB0byBjb3Zlcg0KKyAqDQorICogUmV0dXJuOiBOdW1i ZXIgb2YgcHRlcyB0b3VjaGVkLiBOb3RlIHRoYXQgdGhpcyBudW1iZXIgbWlnaHQgYmUgbGFyZ2Vy DQorICogdGhhbiBAbnIgaWYgdGhlcmUgYXJlIG92ZXJsYXBwaW5nIHZtYXMNCisgKi8NCitzdGF0 aWMgdW5zaWduZWQgbG9uZyBhcHBseV9hc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFw cGluZywNCisJCQkJICAgIHN0cnVjdCBhcHBseV9hcyAqYWFzLA0KKwkJCQkgICAgcGdvZmZfdCBm aXJzdF9pbmRleCwgcGdvZmZfdCBucikNCit7DQorCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h Ow0KKwlwZ29mZl90IHZiYSwgdmVhLCBjYmEsIGNlYTsNCisJdW5zaWduZWQgbG9uZyBzdGFydF9h ZGRyLCBlbmRfYWRkcjsNCisJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsNCisNCisJ aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsNCisJdm1hX2ludGVydmFsX3RyZWVfZm9yZWFjaCh2 bWEsICZtYXBwaW5nLT5pX21tYXAsIGZpcnN0X2luZGV4LA0KKwkJCQkgIGZpcnN0X2luZGV4ICsg bnIgLSAxKSB7DQorCQl1bnNpZ25lZCBsb25nIHZtX2ZsYWdzID0gUkVBRF9PTkNFKHZtYS0+dm1f ZmxhZ3MpOw0KKw0KKwkJLyoNCisJCSAqIFdlIGNhbiBvbmx5IGRvIGFkdmlzb3J5IGZsYWcgdGVz dHMgYmVsb3csIHNpbmNlIHdlIGNhbid0DQorCQkgKiByZXF1aXJlIHRoZSB2bSdzIG1tYXBfc2Vt IHRvIGJlIGhlbGQgdG8gcHJvdGVjdCB0aGUgZmxhZ3MuDQorCQkgKiBUaGVyZWZvcmUsIGNhbGxl cnMgdGhhdCBzdHJpY3RseSBkZXBlbmQgb24gc3BlY2lmaWMgbW1hcA0KKwkJICogZmxhZ3MgdG8g cmVtYWluIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIG9wZXJhdGlvbiBtdXN0DQorCQkgKiBlaXRo ZXIgZW5zdXJlIHRob3NlIGZsYWdzIGFyZSBpbW11dGFibGUgZm9yIGFsbCByZWxldmFudA0KKwkJ ICogdm1hcyBvciBjYW4ndCB1c2UgdGhpcyBmdW5jdGlvbi4gRml4aW5nIHRoaXMgcHJvcGVybHkg d291bGQNCisJCSAqIHJlcXVpcmUgdGhlIHZtYTo6dm1fZmxhZ3MgdG8gYmUgcHJvdGVjdGVkIGJ5 IGEgc2VwYXJhdGUNCisJCSAqIGxvY2sgdGFrZW4gYWZ0ZXIgdGhlIGlfbW1hcF9sb2NrDQorCQkg Ki8NCisNCisJCS8qIFNraXAgbm9uLWFwcGxpY2FibGUgVk1BcyAqLw0KKwkJaWYgKCh2bV9mbGFn cyAmIChWTV9TSEFSRUQgfCBWTV9XUklURSkpICE9DQorCQkgICAgKFZNX1NIQVJFRCB8IFZNX1dS SVRFKSkNCisJCQljb250aW51ZTsNCisNCisJCS8qIFdhcm4gb24gYW5kIHNraXAgVk1BcyB3aG9z ZSBmbGFncyBpbmRpY2F0ZSBpbGxlZ2FsIHVzYWdlICovDQorCQlpZiAoV0FSTl9PTigodm1fZmxh Z3MgJiAoVk1fSFVHRVRMQiB8IFZNX0lPKSkgIT0gVk1fSU8pKQ0KKwkJCWNvbnRpbnVlOw0KKw0K KwkJLyogQ2xpcCB0byB0aGUgdm1hICovDQorCQl2YmEgPSB2bWEtPnZtX3Bnb2ZmOw0KKwkJdmVh ID0gdmJhICsgdm1hX3BhZ2VzKHZtYSk7DQorCQljYmEgPSBmaXJzdF9pbmRleDsNCisJCWNiYSA9 IG1heChjYmEsIHZiYSk7DQorCQljZWEgPSBmaXJzdF9pbmRleCArIG5yOw0KKwkJY2VhID0gbWlu KGNlYSwgdmVhKTsNCisNCisJCS8qIFRyYW5zbGF0ZSB0byB2aXJ0dWFsIGFkZHJlc3MgKi8NCisJ CXN0YXJ0X2FkZHIgPSAoKGNiYSAtIHZiYSkgPDwgUEFHRV9TSElGVCkgKyB2bWEtPnZtX3N0YXJ0 Ow0KKwkJZW5kX2FkZHIgPSAoKGNlYSAtIHZiYSkgPDwgUEFHRV9TSElGVCkgKyB2bWEtPnZtX3N0 YXJ0Ow0KKwkJaWYgKHN0YXJ0X2FkZHIgPj0gZW5kX2FkZHIpDQorCQkJY29udGludWU7DQorDQor CQlhYXMtPmJhc2UubW0gPSB2bWEtPnZtX21tOw0KKwkJYWFzLT52bWEgPSB2bWE7DQorCQlhYXMt PnN0YXJ0ID0gZW5kX2FkZHI7DQorCQlhYXMtPmVuZCA9IHN0YXJ0X2FkZHI7DQorDQorCQltbXVf bm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIHZtYS0+dm1fbW0sDQorCQkJCQlzdGFydF9hZGRy LCBlbmRfYWRkcik7DQorCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmcmFu Z2UpOw0KKw0KKwkJLyogTmVlZGVkIHdoZW4gd2Ugb25seSBjaGFuZ2UgcHJvdGVjdGlvbj8gKi8N CisJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOw0KKw0KKwkJ LyoNCisJCSAqIFdlJ3JlIG5vdCB1c2luZyB0bGJfZ2F0aGVyX21tdSgpIHNpbmNlIHR5cGljYWxs eQ0KKwkJICogb25seSBhIHNtYWxsIHN1YnJhbmdlIG9mIFBURXMgYXJlIGFmZmVjdGVkLg0KKwkJ ICovDQorCQlpbmNfdGxiX2ZsdXNoX3BlbmRpbmcodm1hLT52bV9tbSk7DQorDQorCQkvKiBTaG91 bGQgbm90IGVycm9yIHNpbmNlIGFhcy0+YmFzZS5hbGxvYyA9PSAwICovDQorCQlXQVJOX09OKGFw cGx5X3RvX3Bmbl9yYW5nZSgmYWFzLT5iYXNlLCBzdGFydF9hZGRyLA0KKwkJCQkJICAgZW5kX2Fk ZHIgLSBzdGFydF9hZGRyKSk7DQorCQlpZiAoYWFzLT5lbmQgPiBhYXMtPnN0YXJ0KQ0KKwkJCWZs dXNoX3RsYl9yYW5nZSh2bWEsIGFhcy0+c3RhcnQsIGFhcy0+ZW5kKTsNCisNCisJCW1tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgmcmFuZ2UpOw0KKwkJZGVjX3RsYl9mbHVzaF9wZW5k aW5nKHZtYS0+dm1fbW0pOw0KKwl9DQorCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsNCisN CisJcmV0dXJuIGFhcy0+dG90YWw7DQorfQ0KKw0KKy8qKg0KKyAqIGFwcGx5X2FzX3dycHJvdGVj dCAtIFdyaXRlLXByb3RlY3QgYWxsIHB0ZXMgaW4gYW4gYWRkcmVzc19zcGFjZSByYW5nZQ0KKyAq IEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZSB3ZSB3YW50IHRvIHdyaXRlIHByb3RlY3QNCisg KiBAZmlyc3RfaW5kZXg6IFRoZSBmaXJzdCBwYWdlIG9mZnNldCBpbiB0aGUgcmFuZ2UNCisgKiBA bnI6IE51bWJlciBvZiBpbmNyZW1lbnRhbCBwYWdlIG9mZnNldHMgdG8gY292ZXINCisgKg0KKyAq IFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgYWRkcmVzcyBz cGFjZXMgdGhhdA0KKyAqIGNvbXBsZXRlbHkgb3duIHRoZSBwYWdlcyAvIG1lbW9yeSB0aGUgcGFn ZSB0YWJsZSBwb2ludHMgdG8uIFR5cGljYWxseSBhDQorICogZGV2aWNlIGZpbGUuDQorICoNCisg KiBSZXR1cm46IFRoZSBudW1iZXIgb2YgcHRlcyBhY3R1YWxseSB3cml0ZS1wcm90ZWN0ZWQuIE5v dGUgdGhhdA0KKyAqIGFscmVhZHkgd3JpdGUtcHJvdGVjdGVkIHB0ZXMgYXJlIG5vdCBjb3VudGVk Lg0KKyAqLw0KK3Vuc2lnbmVkIGxvbmcgYXBwbHlfYXNfd3Jwcm90ZWN0KHN0cnVjdCBhZGRyZXNz X3NwYWNlICptYXBwaW5nLA0KKwkJCQkgcGdvZmZfdCBmaXJzdF9pbmRleCwgcGdvZmZfdCBucikN Cit7DQorCXN0cnVjdCBhcHBseV9hcyBhYXMgPSB7DQorCQkuYmFzZSA9IHsNCisJCQkuYWxsb2Mg PSAwLA0KKwkJCS5wdGVmbiA9IGFwcGx5X3B0X3dycHJvdGVjdCwNCisJCX0sDQorCQkudG90YWwg PSAwLA0KKwl9Ow0KKw0KKwlyZXR1cm4gYXBwbHlfYXNfcmFuZ2UobWFwcGluZywgJmFhcywgZmly c3RfaW5kZXgsIG5yKTsNCit9DQorRVhQT1JUX1NZTUJPTChhcHBseV9hc193cnByb3RlY3QpOw0K Kw0KKy8qKg0KKyAqIGFwcGx5X2FzX2NsZWFuIC0gQ2xlYW4gYWxsIHB0ZXMgaW4gYW4gYWRkcmVz c19zcGFjZSByYW5nZQ0KKyAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZSB3ZSB3YW50IHRv IGNsZWFuDQorICogQGZpcnN0X2luZGV4OiBUaGUgZmlyc3QgcGFnZSBvZmZzZXQgaW4gdGhlIHJh bmdlDQorICogQG5yOiBOdW1iZXIgb2YgaW5jcmVtZW50YWwgcGFnZSBvZmZzZXRzIHRvIGNvdmVy DQorICogQGJpdG1hcF9wZ29mZjogVGhlIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBmaXJzdCBiaXQgaW4g QGJpdG1hcA0KKyAqIEBiaXRtYXA6IFBvaW50ZXIgdG8gYSBiaXRtYXAgb2YgYXQgbGVhc3QgQG5y IGJpdHMuIFRoZSBiaXRtYXAgbmVlZHMgdG8NCisgKiBjb3ZlciB0aGUgd2hvbGUgcmFuZ2UgQGZp cnN0X2luZGV4Li5AZmlyc3RfaW5kZXggKyBAbnIuDQorICogQHN0YXJ0OiBQb2ludGVyIHRvIG51 bWJlciBvZiB0aGUgZmlyc3Qgc2V0IGJpdCBpbiBAYml0bWFwLg0KKyAqIGlzIG1vZGlmaWVkIGFz IG5ldyBiaXRzIGFyZSBzZXQgYnkgdGhlIGZ1bmN0aW9uLg0KKyAqIEBlbmQ6IFBvaW50ZXIgdG8g dGhlIG51bWJlciBvZiB0aGUgbGFzdCBzZXQgYml0IGluIEBiaXRtYXAuDQorICogbm9uZSBzZXQu IFRoZSB2YWx1ZSBpcyBtb2RpZmllZCBhcyBuZXcgYml0cyBhcmUgc2V0IGJ5IHRoZSBmdW5jdGlv bi4NCisgKg0KKyAqIE5vdGU6IFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZXJlIGlzIG5v IGd1YXJhbnRlZSB0aGF0IGEgQ1BVIGhhcw0KKyAqIG5vdCBhbHJlYWR5IGRpcnRpZWQgbmV3IHB0 ZXMuIEhvd2V2ZXIgaXQgd2lsbCBub3QgY2xlYW4gYW55IHB0ZXMgbm90DQorICogcmVwb3J0ZWQg aW4gdGhlIGJpdG1hcC4NCisgKg0KKyAqIElmIGEgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBh bGwgZGlydHkgcHRlcyBhcmUgcGlja2VkIHVwIGFuZCBub25lDQorICogYWRkaXRpb25hbCBhcmUg YWRkZWQsIGl0IGZpcnN0IG5lZWRzIHRvIHdyaXRlLXByb3RlY3QgdGhlIGFkZHJlc3Mtc3BhY2UN CisgKiByYW5nZSBhbmQgbWFrZSBzdXJlIG5ldyB3cml0ZXJzIGFyZSBibG9ja2VkIGluIHBhZ2Vf bWt3cml0ZSgpIG9yDQorICogcGZuX21rd3JpdGUoKS4gQW5kIHRoZW4gYWZ0ZXIgYSBUTEIgZmx1 c2ggZm9sbG93aW5nIHRoZSB3cml0ZS1wcm90ZWN0aW9uDQorICogcGljayB1cCBhbGwgZGlydHkg Yml0cy4NCisgKg0KKyAqIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNl ZCBmb3IgYWRkcmVzcyBzcGFjZXMgdGhhdA0KKyAqIGNvbXBsZXRlbHkgb3duIHRoZSBwYWdlcyAv IG1lbW9yeSB0aGUgcGFnZSB0YWJsZSBwb2ludHMgdG8uIFR5cGljYWxseSBhDQorICogZGV2aWNl IGZpbGUuDQorICoNCisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgZGlydHkgcHRlcyBhY3R1YWxs eSBjbGVhbmVkLg0KKyAqLw0KK3Vuc2lnbmVkIGxvbmcgYXBwbHlfYXNfY2xlYW4oc3RydWN0IGFk ZHJlc3Nfc3BhY2UgKm1hcHBpbmcsDQorCQkJICAgICBwZ29mZl90IGZpcnN0X2luZGV4LCBwZ29m Zl90IG5yLA0KKwkJCSAgICAgcGdvZmZfdCBiaXRtYXBfcGdvZmYsDQorCQkJICAgICB1bnNpZ25l ZCBsb25nICpiaXRtYXAsDQorCQkJICAgICBwZ29mZl90ICpzdGFydCwNCisJCQkgICAgIHBnb2Zm X3QgKmVuZCkNCit7DQorCWJvb2wgbm9uZV9zZXQgPSAoKnN0YXJ0ID49ICplbmQpOw0KKwlzdHJ1 Y3QgYXBwbHlfYXNfY2xlYW4gY2xlYW4gPSB7DQorCQkuYmFzZSA9IHsNCisJCQkuYmFzZSA9IHsN CisJCQkJLmFsbG9jID0gMCwNCisJCQkJLnB0ZWZuID0gYXBwbHlfcHRfY2xlYW4sDQorCQkJfSwN CisJCQkudG90YWwgPSAwLA0KKwkJfSwNCisJCS5iaXRtYXBfcGdvZmYgPSBiaXRtYXBfcGdvZmYs DQorCQkuYml0bWFwID0gYml0bWFwLA0KKwkJLnN0YXJ0ID0gbm9uZV9zZXQgPyBuciA6ICpzdGFy dCwNCisJCS5lbmQgPSBub25lX3NldCA/IDAgOiAqZW5kLA0KKwl9Ow0KKwl1bnNpZ25lZCBsb25n IHJldCA9IGFwcGx5X2FzX3JhbmdlKG1hcHBpbmcsICZjbGVhbi5iYXNlLCBmaXJzdF9pbmRleCwN CisJCQkJCSAgIG5yKTsNCisNCisJKnN0YXJ0ID0gY2xlYW4uc3RhcnQ7DQorCSplbmQgPSBjbGVh bi5lbmQ7DQorCXJldHVybiByZXQ7DQorfQ0KK0VYUE9SVF9TWU1CT0woYXBwbHlfYXNfY2xlYW4p Ow0KLS0gDQoyLjIwLjENCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVs