From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 2/9] mm: Add an apply_to_pfn_range interface Date: Fri, 12 Apr 2019 16:04:18 +0000 Message-ID: <20190412160338.64994-3-thellstrom@vmware.com> References: <20190412160338.64994-1-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190412160338.64994-1-thellstrom@vmware.com> Content-Language: en-US Content-ID: Sender: linux-kernel-owner@vger.kernel.org To: "dri-devel@lists.freedesktop.org" , Linux-graphics-maintainer , "linux-kernel@vger.kernel.org" Cc: Thomas Hellstrom , Andrew Morton , Matthew Wilcox , Will Deacon , Peter Zijlstra , Rik van Riel , Minchan Kim , Michal Hocko , Huang Ying , Souptick Joarder , =?utf-8?B?SsOpcsO0bWUgR2xpc3Nl?= , "linux-mm@kvack.org" List-Id: dri-devel@lists.freedesktop.org VGhpcyBpcyBiYXNpY2FsbHkgYXBwbHlfdG9fcGFnZV9yYW5nZSB3aXRoIGFkZGVkIGZ1bmN0aW9u YWxpdHk6DQpBbGxvY2F0aW5nIG1pc3NpbmcgcGFydHMgb2YgdGhlIHBhZ2UgdGFibGUgYmVjb21l cyBvcHRpb25hbCwgd2hpY2gNCm1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBndWFyYW50 ZWVkIG5vdCB0byBlcnJvciBpZiBhbGxvY2F0aW9uDQppcyBkaXNhYmxlZC4gQWxzbyBwYXNzaW5n IG9mIHRoZSBjbG9zdXJlIHN0cnVjdCBhbmQgY2FsbGJhY2sgZnVuY3Rpb24NCmJlY29tZXMgZGlm ZmVyZW50IGFuZCBtb3JlIGluIGxpbmUgd2l0aCBob3cgdGhpbmdzIGFyZSBkb25lIGVsc2V3aGVy ZS4NCg0KRmluYWxseSB3ZSBrZWVwIGFwcGx5X3RvX3BhZ2VfcmFuZ2UgYXMgYSB3cmFwcGVyIGFy b3VuZCBhcHBseV90b19wZm5fcmFuZ2UNCg0KVGhlIHJlYXNvbiBmb3Igbm90IHVzaW5nIHRoZSBw YWdlLXdhbGsgY29kZSBpcyB0aGF0IHdlIHdhbnQgdG8gcGVyZm9ybQ0KdGhlIHBhZ2Utd2FsayBv biB2bWFzIHBvaW50aW5nIHRvIGFuIGFkZHJlc3Mgc3BhY2Ugd2l0aG91dCByZXF1aXJpbmcgdGhl DQptbWFwX3NlbSB0byBiZSBoZWxkIHJhdGhlciB0aGFuZCBvbiB2bWFzIGJlbG9uZ2luZyB0byBh IHByb2Nlc3Mgd2l0aCB0aGUNCm1tYXBfc2VtIGhlbGQuDQoNCk5vdGFibGUgY2hhbmdlcyBzaW5j ZSBSRkM6DQpEb24ndCBleHBvcnQgYXBwbHlfdG9fcGZuIHJhbmdlLg0KDQpDYzogQW5kcmV3IE1v cnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZz4NCkNjOiBNYXR0aGV3IFdpbGNveCA8d2ls bHlAaW5mcmFkZWFkLm9yZz4NCkNjOiBXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4N CkNjOiBQZXRlciBaaWpsc3RyYSA8cGV0ZXJ6QGluZnJhZGVhZC5vcmc+DQpDYzogUmlrIHZhbiBS aWVsIDxyaWVsQHN1cnJpZWwuY29tPg0KQ2M6IE1pbmNoYW4gS2ltIDxtaW5jaGFuQGtlcm5lbC5v cmc+DQpDYzogTWljaGFsIEhvY2tvIDxtaG9ja29Ac3VzZS5jb20+DQpDYzogSHVhbmcgWWluZyA8 eWluZy5odWFuZ0BpbnRlbC5jb20+DQpDYzogU291cHRpY2sgSm9hcmRlciA8anJkci5saW51eEBn bWFpbC5jb20+DQpDYzogIkrDqXLDtG1lIEdsaXNzZSIgPGpnbGlzc2VAcmVkaGF0LmNvbT4NCkNj OiBsaW51eC1tbUBrdmFjay5vcmcNCkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQpT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0cm9tIDx0aGVsbHN0cm9tQHZtd2FyZS5jb20+DQot LS0NCiBpbmNsdWRlL2xpbnV4L21tLmggfCAgMTAgKysrKw0KIG1tL21lbW9yeS5jICAgICAgICB8 IDEzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0NCiAyIGZp bGVzIGNoYW5nZWQsIDEwOCBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkNCg0KZGlmZiAt LWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaA0KaW5kZXggODBi YjY0MDhmZTczLi5iN2RkNGRkZDZlZmIgMTAwNjQ0DQotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgN CisrKyBiL2luY2x1ZGUvbGludXgvbW0uaA0KQEAgLTI2MzIsNiArMjYzMiwxNiBAQCB0eXBlZGVm IGludCAoKnB0ZV9mbl90KShwdGVfdCAqcHRlLCBwZ3RhYmxlX3QgdG9rZW4sIHVuc2lnbmVkIGxv bmcgYWRkciwNCiBleHRlcm4gaW50IGFwcGx5X3RvX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVj dCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywNCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBz aXplLCBwdGVfZm5fdCBmbiwgdm9pZCAqZGF0YSk7DQogDQorc3RydWN0IHBmbl9yYW5nZV9hcHBs eTsNCit0eXBlZGVmIGludCAoKnB0ZXJfZm5fdCkocHRlX3QgKnB0ZSwgcGd0YWJsZV90IHRva2Vu LCB1bnNpZ25lZCBsb25nIGFkZHIsDQorCQkJIHN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkgKmNsb3N1 cmUpOw0KK3N0cnVjdCBwZm5fcmFuZ2VfYXBwbHkgew0KKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsN CisJcHRlcl9mbl90IHB0ZWZuOw0KKwl1bnNpZ25lZCBpbnQgYWxsb2M7DQorfTsNCitleHRlcm4g aW50IGFwcGx5X3RvX3Bmbl9yYW5nZShzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5ICpjbG9zdXJlLA0K KwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplKTsNCiAN CiAjaWZkZWYgQ09ORklHX1BBR0VfUE9JU09OSU5HDQogZXh0ZXJuIGJvb2wgcGFnZV9wb2lzb25p bmdfZW5hYmxlZCh2b2lkKTsNCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5j DQppbmRleCBhOTViNGEzYjFhZTIuLjYwZDY3MTU4OTY0ZiAxMDA2NDQNCi0tLSBhL21tL21lbW9y eS5jDQorKysgYi9tbS9tZW1vcnkuYw0KQEAgLTE5MzgsMTggKzE5MzgsMTcgQEAgaW50IHZtX2lv bWFwX21lbW9yeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGh5c19hZGRyX3Qgc3RhcnQs IHVuc2lnbmVkIGxvbmcNCiB9DQogRVhQT1JUX1NZTUJPTCh2bV9pb21hcF9tZW1vcnkpOw0KIA0K LXN0YXRpYyBpbnQgYXBwbHlfdG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRf dCAqcG1kLA0KLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQs DQotCQkJCSAgICAgcHRlX2ZuX3QgZm4sIHZvaWQgKmRhdGEpDQorc3RhdGljIGludCBhcHBseV90 b19wdGVfcmFuZ2Uoc3RydWN0IHBmbl9yYW5nZV9hcHBseSAqY2xvc3VyZSwgcG1kX3QgKnBtZCwN CisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQ0KIHsNCiAJ cHRlX3QgKnB0ZTsNCiAJaW50IGVycjsNCiAJcGd0YWJsZV90IHRva2VuOw0KIAlzcGlubG9ja190 ICp1bmluaXRpYWxpemVkX3ZhcihwdGwpOw0KIA0KLQlwdGUgPSAobW0gPT0gJmluaXRfbW0pID8N CisJcHRlID0gKGNsb3N1cmUtPm1tID09ICZpbml0X21tKSA/DQogCQlwdGVfYWxsb2Nfa2VybmVs KHBtZCwgYWRkcikgOg0KLQkJcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZwdGwp Ow0KKwkJcHRlX2FsbG9jX21hcF9sb2NrKGNsb3N1cmUtPm1tLCBwbWQsIGFkZHIsICZwdGwpOw0K IAlpZiAoIXB0ZSkNCiAJCXJldHVybiAtRU5PTUVNOw0KIA0KQEAgLTE5NjAsODYgKzE5NTksMTA3 IEBAIHN0YXRpYyBpbnQgYXBwbHlfdG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBw bWRfdCAqcG1kLA0KIAl0b2tlbiA9IHBtZF9wZ3RhYmxlKCpwbWQpOw0KIA0KIAlkbyB7DQotCQll cnIgPSBmbihwdGUrKywgdG9rZW4sIGFkZHIsIGRhdGEpOw0KKwkJZXJyID0gY2xvc3VyZS0+cHRl Zm4ocHRlKyssIHRva2VuLCBhZGRyLCBjbG9zdXJlKTsNCiAJCWlmIChlcnIpDQogCQkJYnJlYWs7 DQogCX0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7DQogDQogCWFyY2hf bGVhdmVfbGF6eV9tbXVfbW9kZSgpOw0KIA0KLQlpZiAobW0gIT0gJmluaXRfbW0pDQorCWlmIChj bG9zdXJlLT5tbSAhPSAmaW5pdF9tbSkNCiAJCXB0ZV91bm1hcF91bmxvY2socHRlLTEsIHB0bCk7 DQogCXJldHVybiBlcnI7DQogfQ0KIA0KLXN0YXRpYyBpbnQgYXBwbHlfdG9fcG1kX3JhbmdlKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLA0KLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcg YWRkciwgdW5zaWduZWQgbG9uZyBlbmQsDQotCQkJCSAgICAgcHRlX2ZuX3QgZm4sIHZvaWQgKmRh dGEpDQorc3RhdGljIGludCBhcHBseV90b19wbWRfcmFuZ2Uoc3RydWN0IHBmbl9yYW5nZV9hcHBs eSAqY2xvc3VyZSwgcHVkX3QgKnB1ZCwNCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVu c2lnbmVkIGxvbmcgZW5kKQ0KIHsNCiAJcG1kX3QgKnBtZDsNCiAJdW5zaWduZWQgbG9uZyBuZXh0 Ow0KLQlpbnQgZXJyOw0KKwlpbnQgZXJyID0gMDsNCiANCiAJQlVHX09OKHB1ZF9odWdlKCpwdWQp KTsNCiANCi0JcG1kID0gcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHIpOw0KKwlwbWQgPSBwbWRfYWxs b2MoY2xvc3VyZS0+bW0sIHB1ZCwgYWRkcik7DQogCWlmICghcG1kKQ0KIAkJcmV0dXJuIC1FTk9N RU07DQorDQogCWRvIHsNCiAJCW5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsNCi0JCWVy ciA9IGFwcGx5X3RvX3B0ZV9yYW5nZShtbSwgcG1kLCBhZGRyLCBuZXh0LCBmbiwgZGF0YSk7DQor CQlpZiAoIWNsb3N1cmUtPmFsbG9jICYmIHBtZF9ub25lX29yX2NsZWFyX2JhZChwbWQpKQ0KKwkJ CWNvbnRpbnVlOw0KKwkJZXJyID0gYXBwbHlfdG9fcHRlX3JhbmdlKGNsb3N1cmUsIHBtZCwgYWRk ciwgbmV4dCk7DQogCQlpZiAoZXJyKQ0KIAkJCWJyZWFrOw0KIAl9IHdoaWxlIChwbWQrKywgYWRk ciA9IG5leHQsIGFkZHIgIT0gZW5kKTsNCiAJcmV0dXJuIGVycjsNCiB9DQogDQotc3RhdGljIGlu dCBhcHBseV90b19wdWRfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHA0ZF90ICpwNGQsDQot CQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwNCi0JCQkJICAg ICBwdGVfZm5fdCBmbiwgdm9pZCAqZGF0YSkNCitzdGF0aWMgaW50IGFwcGx5X3RvX3B1ZF9yYW5n ZShzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5ICpjbG9zdXJlLCBwNGRfdCAqcDRkLA0KKwkJCSAgICAg IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpDQogew0KIAlwdWRfdCAqcHVk Ow0KIAl1bnNpZ25lZCBsb25nIG5leHQ7DQotCWludCBlcnI7DQorCWludCBlcnIgPSAwOw0KIA0K LQlwdWQgPSBwdWRfYWxsb2MobW0sIHA0ZCwgYWRkcik7DQorCXB1ZCA9IHB1ZF9hbGxvYyhjbG9z dXJlLT5tbSwgcDRkLCBhZGRyKTsNCiAJaWYgKCFwdWQpDQogCQlyZXR1cm4gLUVOT01FTTsNCisN CiAJZG8gew0KIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOw0KLQkJZXJyID0gYXBw bHlfdG9fcG1kX3JhbmdlKG1tLCBwdWQsIGFkZHIsIG5leHQsIGZuLCBkYXRhKTsNCisJCWlmICgh Y2xvc3VyZS0+YWxsb2MgJiYgcHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpDQorCQkJY29udGlu dWU7DQorCQllcnIgPSBhcHBseV90b19wbWRfcmFuZ2UoY2xvc3VyZSwgcHVkLCBhZGRyLCBuZXh0 KTsNCiAJCWlmIChlcnIpDQogCQkJYnJlYWs7DQogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4 dCwgYWRkciAhPSBlbmQpOw0KIAlyZXR1cm4gZXJyOw0KIH0NCiANCi1zdGF0aWMgaW50IGFwcGx5 X3RvX3A0ZF9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwNCi0JCQkJICAg ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLA0KLQkJCQkgICAgIHB0ZV9m bl90IGZuLCB2b2lkICpkYXRhKQ0KK3N0YXRpYyBpbnQgYXBwbHlfdG9fcDRkX3JhbmdlKHN0cnVj dCBwZm5fcmFuZ2VfYXBwbHkgKmNsb3N1cmUsIHBnZF90ICpwZ2QsDQorCQkJICAgICAgdW5zaWdu ZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkNCiB7DQogCXA0ZF90ICpwNGQ7DQogCXVu c2lnbmVkIGxvbmcgbmV4dDsNCi0JaW50IGVycjsNCisJaW50IGVyciA9IDA7DQogDQotCXA0ZCA9 IHA0ZF9hbGxvYyhtbSwgcGdkLCBhZGRyKTsNCisJcDRkID0gcDRkX2FsbG9jKGNsb3N1cmUtPm1t LCBwZ2QsIGFkZHIpOw0KIAlpZiAoIXA0ZCkNCiAJCXJldHVybiAtRU5PTUVNOw0KKw0KIAlkbyB7 DQogCQluZXh0ID0gcDRkX2FkZHJfZW5kKGFkZHIsIGVuZCk7DQotCQllcnIgPSBhcHBseV90b19w dWRfcmFuZ2UobW0sIHA0ZCwgYWRkciwgbmV4dCwgZm4sIGRhdGEpOw0KKwkJaWYgKCFjbG9zdXJl LT5hbGxvYyAmJiBwNGRfbm9uZV9vcl9jbGVhcl9iYWQocDRkKSkNCisJCQljb250aW51ZTsNCisJ CWVyciA9IGFwcGx5X3RvX3B1ZF9yYW5nZShjbG9zdXJlLCBwNGQsIGFkZHIsIG5leHQpOw0KIAkJ aWYgKGVycikNCiAJCQlicmVhazsNCiAJfSB3aGlsZSAocDRkKyssIGFkZHIgPSBuZXh0LCBhZGRy ICE9IGVuZCk7DQogCXJldHVybiBlcnI7DQogfQ0KIA0KLS8qDQotICogU2NhbiBhIHJlZ2lvbiBv ZiB2aXJ0dWFsIG1lbW9yeSwgZmlsbGluZyBpbiBwYWdlIHRhYmxlcyBhcyBuZWNlc3NhcnkNCi0g KiBhbmQgY2FsbGluZyBhIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIGVhY2ggbGVhZiBwYWdlIHRhYmxl Lg0KKy8qKg0KKyAqIGFwcGx5X3RvX3Bmbl9yYW5nZSAtIFNjYW4gYSByZWdpb24gb2YgdmlydHVh bCBtZW1vcnksIGNhbGxpbmcgYSBwcm92aWRlZA0KKyAqIGZ1bmN0aW9uIG9uIGVhY2ggbGVhZiBw YWdlIHRhYmxlIGVudHJ5DQorICogQGNsb3N1cmU6IERldGFpbHMgYWJvdXQgaG93IHRvIHNjYW4g YW5kIHdoYXQgZnVuY3Rpb24gdG8gYXBwbHkNCisgKiBAYWRkcjogU3RhcnQgdmlydHVhbCBhZGRy ZXNzDQorICogQHNpemU6IFNpemUgb2YgdGhlIHJlZ2lvbg0KKyAqDQorICogSWYgQGNsb3N1cmUt PmFsbG9jIGlzIHNldCB0byAxLCB0aGUgZnVuY3Rpb24gd2lsbCBmaWxsIGluIHRoZSBwYWdlIHRh YmxlDQorICogYXMgbmVjZXNzYXJ5LiBPdGhlcndpc2UgaXQgd2lsbCBza2lwIG5vbi1wcmVzZW50 IHBhcnRzLg0KKyAqIE5vdGU6IFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmFuZ2Ug ZG9lcyBub3QgY29udGFpbiBodWdlIHBhZ2VzLg0KKyAqIFRoZSBjYWxsZXIgbXVzdCBhbHNvIGFz c3VyZSB0aGF0IHRoZSBwcm9wZXIgbW11X25vdGlmaWVyIGZ1bmN0aW9ucyBhcmUNCisgKiBjYWxs ZWQuIEVpdGhlciBpbiB0aGUgcHRlIGxlYWYgZnVuY3Rpb24gb3IgYmVmb3JlIGFuZCBhZnRlciB0 aGUgY2FsbCB0bw0KKyAqIGFwcGx5X3RvX3Bmbl9yYW5nZS4NCisgKg0KKyAqIFJldHVybnM6IFpl cm8gb24gc3VjY2Vzcy4gSWYgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMgYSBub24temVy byBzdGF0dXMsDQorICogdGhlIHBhZ2UgdGFibGUgd2FsayB3aWxsIHRlcm1pbmF0ZSBhbmQgdGhh dCBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZC4NCisgKiBJZiBAY2xvc3VyZS0+YWxsb2MgaXMgc2V0 IHRvIDEsIHRoZW4gdGhpcyBmdW5jdGlvbiBtYXkgYWxzbyByZXR1cm4gbWVtb3J5DQorICogYWxs b2NhdGlvbiBlcnJvcnMgYXJpc2luZyBmcm9tIGFsbG9jYXRpbmcgcGFnZSB0YWJsZSBtZW1vcnku DQogICovDQotaW50IGFwcGx5X3RvX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVu c2lnbmVkIGxvbmcgYWRkciwNCi0JCQl1bnNpZ25lZCBsb25nIHNpemUsIHB0ZV9mbl90IGZuLCB2 b2lkICpkYXRhKQ0KK2ludCBhcHBseV90b19wZm5fcmFuZ2Uoc3RydWN0IHBmbl9yYW5nZV9hcHBs eSAqY2xvc3VyZSwNCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcg c2l6ZSkNCiB7DQogCXBnZF90ICpwZ2Q7DQogCXVuc2lnbmVkIGxvbmcgbmV4dDsNCkBAIC0yMDQ5 LDE2ICsyMDY5LDYyIEBAIGludCBhcHBseV90b19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tLCB1bnNpZ25lZCBsb25nIGFkZHIsDQogCWlmIChXQVJOX09OKGFkZHIgPj0gZW5kKSkNCiAJ CXJldHVybiAtRUlOVkFMOw0KIA0KLQlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsNCisJcGdk ID0gcGdkX29mZnNldChjbG9zdXJlLT5tbSwgYWRkcik7DQogCWRvIHsNCiAJCW5leHQgPSBwZ2Rf YWRkcl9lbmQoYWRkciwgZW5kKTsNCi0JCWVyciA9IGFwcGx5X3RvX3A0ZF9yYW5nZShtbSwgcGdk LCBhZGRyLCBuZXh0LCBmbiwgZGF0YSk7DQorCQlpZiAoIWNsb3N1cmUtPmFsbG9jICYmIHBnZF9u b25lX29yX2NsZWFyX2JhZChwZ2QpKQ0KKwkJCWNvbnRpbnVlOw0KKwkJZXJyID0gYXBwbHlfdG9f cDRkX3JhbmdlKGNsb3N1cmUsIHBnZCwgYWRkciwgbmV4dCk7DQogCQlpZiAoZXJyKQ0KIAkJCWJy ZWFrOw0KIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsNCiANCiAJ cmV0dXJuIGVycjsNCiB9DQorDQorLyoqDQorICogc3RydWN0IHBhZ2VfcmFuZ2VfYXBwbHkgLSBD bG9zdXJlIHN0cnVjdHVyZSBmb3IgYXBwbHlfdG9fcGFnZV9yYW5nZSgpDQorICogQHB0ZXI6IFRo ZSBiYXNlIGNsb3N1cmUgc3RydWN0dXJlIHdlIGRlcml2ZSBmcm9tDQorICogQGZuOiBUaGUgbGVh ZiBwdGUgZnVuY3Rpb24gdG8gY2FsbA0KKyAqIEBkYXRhOiBUaGUgbGVhZiBwdGUgZnVuY3Rpb24g Y2xvc3VyZQ0KKyAqLw0KK3N0cnVjdCBwYWdlX3JhbmdlX2FwcGx5IHsNCisJc3RydWN0IHBmbl9y YW5nZV9hcHBseSBwdGVyOw0KKwlwdGVfZm5fdCBmbjsNCisJdm9pZCAqZGF0YTsNCit9Ow0KKw0K Ky8qDQorICogQ2FsbGJhY2sgd3JhcHBlciB0byBlbmFibGUgdXNlIG9mIGFwcGx5X3RvX3Bmbl9y YW5nZSBmb3INCisgKiB0aGUgYXBwbHlfdG9fcGFnZV9yYW5nZSBpbnRlcmZhY2UNCisgKi8NCitz dGF0aWMgaW50IGFwcGx5X3RvX3BhZ2VfcmFuZ2Vfd3JhcHBlcihwdGVfdCAqcHRlLCBwZ3RhYmxl X3QgdG9rZW4sDQorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsDQorCQkJCSAgICAgICBz dHJ1Y3QgcGZuX3JhbmdlX2FwcGx5ICpwdGVyKQ0KK3sNCisJc3RydWN0IHBhZ2VfcmFuZ2VfYXBw bHkgKnByYSA9DQorCQljb250YWluZXJfb2YocHRlciwgdHlwZW9mKCpwcmEpLCBwdGVyKTsNCisN CisJcmV0dXJuIHByYS0+Zm4ocHRlLCB0b2tlbiwgYWRkciwgcHJhLT5kYXRhKTsNCit9DQorDQor LyoNCisgKiBTY2FuIGEgcmVnaW9uIG9mIHZpcnR1YWwgbWVtb3J5LCBmaWxsaW5nIGluIHBhZ2Ug dGFibGVzIGFzIG5lY2Vzc2FyeQ0KKyAqIGFuZCBjYWxsaW5nIGEgcHJvdmlkZWQgZnVuY3Rpb24g b24gZWFjaCBsZWFmIHBhZ2UgdGFibGUuDQorICovDQoraW50IGFwcGx5X3RvX3BhZ2VfcmFuZ2Uo c3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwNCisJCQl1bnNpZ25lZCBs b25nIHNpemUsIHB0ZV9mbl90IGZuLCB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IHBhZ2VfcmFu Z2VfYXBwbHkgcHJhID0gew0KKwkJLnB0ZXIgPSB7Lm1tID0gbW0sDQorCQkJIC5hbGxvYyA9IDEs DQorCQkJIC5wdGVmbiA9IGFwcGx5X3RvX3BhZ2VfcmFuZ2Vfd3JhcHBlciB9LA0KKwkJLmZuID0g Zm4sDQorCQkuZGF0YSA9IGRhdGENCisJfTsNCisNCisJcmV0dXJuIGFwcGx5X3RvX3Bmbl9yYW5n ZSgmcHJhLnB0ZXIsIGFkZHIsIHNpemUpOw0KK30NCiBFWFBPUlRfU1lNQk9MX0dQTChhcHBseV90 b19wYWdlX3JhbmdlKTsNCiANCiAvKg0KLS0gDQoyLjIwLjENCg0K