From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id DE0C821E0818A for ; Fri, 30 Mar 2018 21:13:09 -0700 (PDT) Subject: [PATCH v8 12/18] memremap: split devm_memremap_pages() and memremap() infrastructure From: Dan Williams Date: Fri, 30 Mar 2018 21:03:13 -0700 Message-ID: <152246899351.36038.10189819181989485512.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <152246892890.36038.18436540150980653229.stgit@dwillia2-desk3.amr.corp.intel.com> References: <152246892890.36038.18436540150980653229.stgit@dwillia2-desk3.amr.corp.intel.com> MIME-Version: 1.0 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: linux-nvdimm@lists.01.org Cc: jack@suse.cz, snitzer@redhat.com, david@fromorbit.com, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, =?utf-8?b?SsOpcsO0bWU=?= Glisse , linux-fsdevel@vger.kernel.org, Christoph Hellwig List-ID: Q3VycmVudGx5LCBrZXJuZWwvbWVtcmVtYXAuYyBjb250YWlucyBnZW5lcmljIGNvZGUgZm9yIHN1 cHBvcnRpbmcKbWVtcmVtYXAoKSAoQ09ORklHX0hBU19JT01FTSkgYW5kIGRldm1fbWVtcmVtYXBf cGFnZXMoKQooQ09ORklHX1pPTkVfREVWSUNFKS4gVGhpcyBjYXVzZXMgb25nb2luZyBidWlsZCBt YWludGVuYW5jZSBwcm9ibGVtcyBhcwphZGRpdGlvbnMgdG8gbWVtcmVtYXAuYywgZXNwZWNpYWxs eSBmb3IgdGhlIFpPTkVfREVWSUNFIGNhc2UsIG5lZWQgdG8gYmUKY2FyZWZ1bCBhYm91dCBiZWlu ZyBwbGFjZWQgaW4gaWZkZWYgZ3VhcmRzLiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoZXNlCmlmZGVm IGd1YXJkcyBieSBtb3ZpbmcgdGhlIFpPTkVfREVWSUNFIHN1cHBvcnQgZnVuY3Rpb25zIHRvIHRo ZWlyIG93bgpjb21waWxhdGlvbiB1bml0LgoKQ2M6IEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+CkNj OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KQ2M6ICJKw6lyw7RtZSBHbGlzc2UiIDxq Z2xpc3NlQHJlZGhhdC5jb20+CkNjOiBSb3NzIFp3aXNsZXIgPHJvc3Muendpc2xlckBsaW51eC5p bnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50 ZWwuY29tPgotLS0KIGtlcm5lbC9NYWtlZmlsZSAgIHwgICAgMyArCiBrZXJuZWwvaW9tZW0uYyAg ICB8ICAxNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIGtlcm5lbC9tZW1yZW1hcC5jIHwgIDE3OCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxNzEgaW5zZXJ0aW9u cygrKSwgMTc3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGtlcm5lbC9pb21lbS5j CgpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IGY4 NWFlNWRmYTQ3NC4uOWI5MjQxMzYxMzExIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysr IGIva2VybmVsL01ha2VmaWxlCkBAIC0xMTIsNyArMTEyLDggQEAgb2JqLSQoQ09ORklHX0pVTVBf TEFCRUwpICs9IGp1bXBfbGFiZWwubwogb2JqLSQoQ09ORklHX0NPTlRFWFRfVFJBQ0tJTkcpICs9 IGNvbnRleHRfdHJhY2tpbmcubwogb2JqLSQoQ09ORklHX1RPUlRVUkVfVEVTVCkgKz0gdG9ydHVy ZS5vCiAKLW9iai0kKENPTkZJR19IQVNfSU9NRU0pICs9IG1lbXJlbWFwLm8KK29iai0kKENPTkZJ R19IQVNfSU9NRU0pICs9IGlvbWVtLm8KK29iai0kKENPTkZJR19aT05FX0RFVklDRSkgKz0gbWVt cmVtYXAubwogCiAkKG9iaikvY29uZmlncy5vOiAkKG9iaikvY29uZmlnX2RhdGEuaAogCmRpZmYg LS1naXQgYS9rZXJuZWwvaW9tZW0uYyBiL2tlcm5lbC9pb21lbS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjc1MjVlMTRlYmM2Ci0tLSAvZGV2L251bGwKKysrIGIv a2VybmVsL2lvbWVtLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+ CisKKyNpZm5kZWYgaW9yZW1hcF9jYWNoZQorLyogdGVtcG9yYXJ5IHdoaWxlIHdlIGNvbnZlcnQg ZXhpc3RpbmcgaW9yZW1hcF9jYWNoZSB1c2VycyB0byBtZW1yZW1hcCAqLworX193ZWFrIHZvaWQg X19pb21lbSAqaW9yZW1hcF9jYWNoZShyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBs b25nIHNpemUpCit7CisJcmV0dXJuIGlvcmVtYXAob2Zmc2V0LCBzaXplKTsKK30KKyNlbmRpZgor CisjaWZuZGVmIGFyY2hfbWVtcmVtYXBfd2IKK3N0YXRpYyB2b2lkICphcmNoX21lbXJlbWFwX3di KHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4g KF9fZm9yY2Ugdm9pZCAqKWlvcmVtYXBfY2FjaGUob2Zmc2V0LCBzaXplKTsKK30KKyNlbmRpZgor CisjaWZuZGVmIGFyY2hfbWVtcmVtYXBfY2FuX3JhbV9yZW1hcAorc3RhdGljIGJvb2wgYXJjaF9t ZW1yZW1hcF9jYW5fcmFtX3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHNpemVfdCBzaXpl LAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiB0cnVlOworfQorI2VuZGlm CisKK3N0YXRpYyB2b2lkICp0cnlfcmFtX3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHNp emVfdCBzaXplLAorCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25n IHBmbiA9IFBIWVNfUEZOKG9mZnNldCk7CisKKwkvKiBJbiB0aGUgc2ltcGxlIGNhc2UganVzdCBy ZXR1cm4gdGhlIGV4aXN0aW5nIGxpbmVhciBhZGRyZXNzICovCisJaWYgKHBmbl92YWxpZChwZm4p ICYmICFQYWdlSGlnaE1lbShwZm5fdG9fcGFnZShwZm4pKSAmJgorCSAgICBhcmNoX21lbXJlbWFw X2Nhbl9yYW1fcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykpCisJCXJldHVybiBfX3ZhKG9mZnNl dCk7CisKKwlyZXR1cm4gTlVMTDsgLyogZmFsbGJhY2sgdG8gYXJjaF9tZW1yZW1hcF93YiAqLwor fQorCisvKioKKyAqIG1lbXJlbWFwKCkgLSByZW1hcCBhbiBpb21lbV9yZXNvdXJjZSBhcyBjYWNo ZWFibGUgbWVtb3J5CisgKiBAb2Zmc2V0OiBpb21lbSByZXNvdXJjZSBzdGFydCBhZGRyZXNzCisg KiBAc2l6ZTogc2l6ZSBvZiByZW1hcAorICogQGZsYWdzOiBhbnkgb2YgTUVNUkVNQVBfV0IsIE1F TVJFTUFQX1dULCBNRU1SRU1BUF9XQywKKyAqCQkgIE1FTVJFTUFQX0VOQywgTUVNUkVNQVBfREVD CisgKgorICogbWVtcmVtYXAoKSBpcyAiaW9yZW1hcCIgZm9yIGNhc2VzIHdoZXJlIGl0IGlzIGtu b3duIHRoYXQgdGhlIHJlc291cmNlCisgKiBiZWluZyBtYXBwZWQgZG9lcyBub3QgaGF2ZSBpL28g c2lkZSBlZmZlY3RzIGFuZCB0aGUgX19pb21lbQorICogYW5ub3RhdGlvbiBpcyBub3QgYXBwbGlj YWJsZS4gSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgZmxhZ3MsIHRoZSBkaWZmZXJlbnQKKyAqIG1h cHBpbmcgdHlwZXMgd2lsbCBiZSBhdHRlbXB0ZWQgaW4gdGhlIG9yZGVyIGxpc3RlZCBiZWxvdyB1 bnRpbCBvbmUgb2YKKyAqIHRoZW0gc3VjY2VlZHMuCisgKgorICogTUVNUkVNQVBfV0IgLSBtYXRj aGVzIHRoZSBkZWZhdWx0IG1hcHBpbmcgZm9yIFN5c3RlbSBSQU0gb24KKyAqIHRoZSBhcmNoaXRl Y3R1cmUuICBUaGlzIGlzIHVzdWFsbHkgYSByZWFkLWFsbG9jYXRlIHdyaXRlLWJhY2sgY2FjaGUu CisgKiBNb3JldmVyLCBpZiBNRU1SRU1BUF9XQiBpcyBzcGVjaWZpZWQgYW5kIHRoZSByZXF1ZXN0 ZWQgcmVtYXAgcmVnaW9uIGlzIFJBTQorICogbWVtcmVtYXAoKSB3aWxsIGJ5cGFzcyBlc3RhYmxp c2hpbmcgYSBuZXcgbWFwcGluZyBhbmQgaW5zdGVhZCByZXR1cm4KKyAqIGEgcG9pbnRlciBpbnRv IHRoZSBkaXJlY3QgbWFwLgorICoKKyAqIE1FTVJFTUFQX1dUIC0gZXN0YWJsaXNoIGEgbWFwcGlu ZyB3aGVyZWJ5IHdyaXRlcyBlaXRoZXIgYnlwYXNzIHRoZQorICogY2FjaGUgb3IgYXJlIHdyaXR0 ZW4gdGhyb3VnaCB0byBtZW1vcnkgYW5kIG5ldmVyIGV4aXN0IGluIGEKKyAqIGNhY2hlLWRpcnR5 IHN0YXRlIHdpdGggcmVzcGVjdCB0byBwcm9ncmFtIHZpc2liaWxpdHkuICBBdHRlbXB0cyB0bwor ICogbWFwIFN5c3RlbSBSQU0gd2l0aCB0aGlzIG1hcHBpbmcgdHlwZSB3aWxsIGZhaWwuCisgKgor ICogTUVNUkVNQVBfV0MgLSBlc3RhYmxpc2ggYSB3cml0ZWNvbWJpbmUgbWFwcGluZywgd2hlcmVi eSB3cml0ZXMgbWF5CisgKiBiZSBjb2FsZXNjZWQgdG9nZXRoZXIgKGUuZy4gaW4gdGhlIENQVSdz IHdyaXRlIGJ1ZmZlcnMpLCBidXQgaXMgb3RoZXJ3aXNlCisgKiB1bmNhY2hlZC4gQXR0ZW1wdHMg dG8gbWFwIFN5c3RlbSBSQU0gd2l0aCB0aGlzIG1hcHBpbmcgdHlwZSB3aWxsIGZhaWwuCisgKi8K K3ZvaWQgKm1lbXJlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCB1bnNp Z25lZCBsb25nIGZsYWdzKQoreworCWludCBpc19yYW0gPSByZWdpb25faW50ZXJzZWN0cyhvZmZz ZXQsIHNpemUsCisJCQkJICAgICAgIElPUkVTT1VSQ0VfU1lTVEVNX1JBTSwgSU9SRVNfREVTQ19O T05FKTsKKwl2b2lkICphZGRyID0gTlVMTDsKKworCWlmICghZmxhZ3MpCisJCXJldHVybiBOVUxM OworCisJaWYgKGlzX3JhbSA9PSBSRUdJT05fTUlYRUQpIHsKKwkJV0FSTl9PTkNFKDEsICJtZW1y ZW1hcCBhdHRlbXB0ZWQgb24gbWl4ZWQgcmFuZ2UgJXBhIHNpemU6ICUjbHhcbiIsCisJCQkJJm9m ZnNldCwgKHVuc2lnbmVkIGxvbmcpIHNpemUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBU cnkgYWxsIG1hcHBpbmcgdHlwZXMgcmVxdWVzdGVkIHVudGlsIG9uZSByZXR1cm5zIG5vbi1OVUxM ICovCisJaWYgKGZsYWdzICYgTUVNUkVNQVBfV0IpIHsKKwkJLyoKKwkJICogTUVNUkVNQVBfV0Ig aXMgc3BlY2lhbCBpbiB0aGF0IGl0IGNhbiBiZSBzYXRpc2lmZWQKKwkJICogZnJvbSB0aGUgZGly ZWN0IG1hcC4gIFNvbWUgYXJjaHMgZGVwZW5kIG9uIHRoZQorCQkgKiBjYXBhYmlsaXR5IG9mIG1l bXJlbWFwKCkgdG8gYXV0b2RldGVjdCBjYXNlcyB3aGVyZQorCQkgKiB0aGUgcmVxdWVzdGVkIHJh bmdlIGlzIHBvdGVudGlhbGx5IGluIFN5c3RlbSBSQU0uCisJCSAqLworCQlpZiAoaXNfcmFtID09 IFJFR0lPTl9JTlRFUlNFQ1RTKQorCQkJYWRkciA9IHRyeV9yYW1fcmVtYXAob2Zmc2V0LCBzaXpl LCBmbGFncyk7CisJCWlmICghYWRkcikKKwkJCWFkZHIgPSBhcmNoX21lbXJlbWFwX3diKG9mZnNl dCwgc2l6ZSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgbWFwcGluZyB5ZXQg YW5kIG90aGVyIHJlcXVlc3QgZmxhZ3MgYXJlCisJICogcHJlc2VudCB0aGVuIHdlIHdpbGwgYmUg YXR0ZW1wdGluZyB0byBlc3RhYmxpc2ggYSBuZXcgdmlydHVhbAorCSAqIGFkZHJlc3MgbWFwcGlu Zy4gIEVuZm9yY2UgdGhhdCB0aGlzIG1hcHBpbmcgaXMgbm90IGFsaWFzaW5nCisJICogU3lzdGVt IFJBTS4KKwkgKi8KKwlpZiAoIWFkZHIgJiYgaXNfcmFtID09IFJFR0lPTl9JTlRFUlNFQ1RTICYm IGZsYWdzICE9IE1FTVJFTUFQX1dCKSB7CisJCVdBUk5fT05DRSgxLCAibWVtcmVtYXAgYXR0ZW1w dGVkIG9uIHJhbSAlcGEgc2l6ZTogJSNseFxuIiwKKwkJCQkmb2Zmc2V0LCAodW5zaWduZWQgbG9u Zykgc2l6ZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICghYWRkciAmJiAoZmxhZ3MgJiBN RU1SRU1BUF9XVCkpCisJCWFkZHIgPSBpb3JlbWFwX3d0KG9mZnNldCwgc2l6ZSk7CisKKwlpZiAo IWFkZHIgJiYgKGZsYWdzICYgTUVNUkVNQVBfV0MpKQorCQlhZGRyID0gaW9yZW1hcF93YyhvZmZz ZXQsIHNpemUpOworCisJcmV0dXJuIGFkZHI7Cit9CitFWFBPUlRfU1lNQk9MKG1lbXJlbWFwKTsK Kwordm9pZCBtZW11bm1hcCh2b2lkICphZGRyKQoreworCWlmIChpc192bWFsbG9jX2FkZHIoYWRk cikpCisJCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKSBhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0wo bWVtdW5tYXApOworCitzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3JlbGVhc2Uoc3RydWN0IGRl dmljZSAqZGV2LCB2b2lkICpyZXMpCit7CisJbWVtdW5tYXAoKih2b2lkICoqKXJlcyk7Cit9CisK K3N0YXRpYyBpbnQgZGV2bV9tZW1yZW1hcF9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQg KnJlcywgdm9pZCAqbWF0Y2hfZGF0YSkKK3sKKwlyZXR1cm4gKih2b2lkICoqKXJlcyA9PSBtYXRj aF9kYXRhOworfQorCit2b2lkICpkZXZtX21lbXJlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVz b3VyY2Vfc2l6ZV90IG9mZnNldCwKKwkJc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3Mp Cit7CisJdm9pZCAqKnB0ciwgKmFkZHI7CisKKwlwdHIgPSBkZXZyZXNfYWxsb2Nfbm9kZShkZXZt X21lbXJlbWFwX3JlbGVhc2UsIHNpemVvZigqcHRyKSwgR0ZQX0tFUk5FTCwKKwkJCWRldl90b19u b2RlKGRldikpOworCWlmICghcHRyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWFk ZHIgPSBtZW1yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKTsKKwlpZiAoYWRkcikgeworCQkqcHRy ID0gYWRkcjsKKwkJZGV2cmVzX2FkZChkZXYsIHB0cik7CisJfSBlbHNlIHsKKwkJZGV2cmVzX2Zy ZWUocHRyKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKKwl9CisKKwlyZXR1cm4gYWRkcjsK K30KK0VYUE9SVF9TWU1CT0woZGV2bV9tZW1yZW1hcCk7CisKK3ZvaWQgZGV2bV9tZW11bm1hcChz dHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJV0FSTl9PTihkZXZyZXNfcmVsZWFz ZShkZXYsIGRldm1fbWVtcmVtYXBfcmVsZWFzZSwKKwkJCQlkZXZtX21lbXJlbWFwX21hdGNoLCBh ZGRyKSk7Cit9CitFWFBPUlRfU1lNQk9MKGRldm1fbWVtdW5tYXApOwpkaWZmIC0tZ2l0IGEva2Vy bmVsL21lbXJlbWFwLmMgYi9rZXJuZWwvbWVtcmVtYXAuYwppbmRleCA0ZGQ0Mjc0Y2FiZTIuLjUy YTI3NDJmNTI3ZiAxMDA2NDQKLS0tIGEva2VybmVsL21lbXJlbWFwLmMKKysrIGIva2VybmVsL21l bXJlbWFwLmMKQEAgLTEsMTUgKzEsNSBAQAotLyoKLSAqIENvcHlyaWdodChjKSAyMDE1IEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLworLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgKi8KKy8qIENvcHlyaWdodChjKSAyMDE1IEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLwogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4K ICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAt MjAsMTY5ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4 L3N3YXBvcHMuaD4KIAotI2lmbmRlZiBpb3JlbWFwX2NhY2hlCi0vKiB0ZW1wb3Jhcnkgd2hpbGUg d2UgY29udmVydCBleGlzdGluZyBpb3JlbWFwX2NhY2hlIHVzZXJzIHRvIG1lbXJlbWFwICovCi1f X3dlYWsgdm9pZCBfX2lvbWVtICppb3JlbWFwX2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQs IHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlyZXR1cm4gaW9yZW1hcChvZmZzZXQsIHNpemUpOwot fQotI2VuZGlmCi0KLSNpZm5kZWYgYXJjaF9tZW1yZW1hcF93Ygotc3RhdGljIHZvaWQgKmFyY2hf bWVtcmVtYXBfd2IocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQot ewotCXJldHVybiAoX19mb3JjZSB2b2lkICopaW9yZW1hcF9jYWNoZShvZmZzZXQsIHNpemUpOwot fQotI2VuZGlmCi0KLSNpZm5kZWYgYXJjaF9tZW1yZW1hcF9jYW5fcmFtX3JlbWFwCi1zdGF0aWMg Ym9vbCBhcmNoX21lbXJlbWFwX2Nhbl9yYW1fcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwg c2l6ZV90IHNpemUsCi0JCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JcmV0dXJuIHRydWU7 Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgKnRyeV9yYW1fcmVtYXAocmVzb3VyY2Vfc2l6ZV90 IG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVu c2lnbmVkIGxvbmcgcGZuID0gUEhZU19QRk4ob2Zmc2V0KTsKLQotCS8qIEluIHRoZSBzaW1wbGUg Y2FzZSBqdXN0IHJldHVybiB0aGUgZXhpc3RpbmcgbGluZWFyIGFkZHJlc3MgKi8KLQlpZiAocGZu X3ZhbGlkKHBmbikgJiYgIVBhZ2VIaWdoTWVtKHBmbl90b19wYWdlKHBmbikpICYmCi0JICAgIGFy Y2hfbWVtcmVtYXBfY2FuX3JhbV9yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKSkKLQkJcmV0dXJu IF9fdmEob2Zmc2V0KTsKLQotCXJldHVybiBOVUxMOyAvKiBmYWxsYmFjayB0byBhcmNoX21lbXJl bWFwX3diICovCi19Ci0KLS8qKgotICogbWVtcmVtYXAoKSAtIHJlbWFwIGFuIGlvbWVtX3Jlc291 cmNlIGFzIGNhY2hlYWJsZSBtZW1vcnkKLSAqIEBvZmZzZXQ6IGlvbWVtIHJlc291cmNlIHN0YXJ0 IGFkZHJlc3MKLSAqIEBzaXplOiBzaXplIG9mIHJlbWFwCi0gKiBAZmxhZ3M6IGFueSBvZiBNRU1S RU1BUF9XQiwgTUVNUkVNQVBfV1QsIE1FTVJFTUFQX1dDLAotICoJCSAgTUVNUkVNQVBfRU5DLCBN RU1SRU1BUF9ERUMKLSAqCi0gKiBtZW1yZW1hcCgpIGlzICJpb3JlbWFwIiBmb3IgY2FzZXMgd2hl cmUgaXQgaXMga25vd24gdGhhdCB0aGUgcmVzb3VyY2UKLSAqIGJlaW5nIG1hcHBlZCBkb2VzIG5v dCBoYXZlIGkvbyBzaWRlIGVmZmVjdHMgYW5kIHRoZSBfX2lvbWVtCi0gKiBhbm5vdGF0aW9uIGlz IG5vdCBhcHBsaWNhYmxlLiBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBmbGFncywgdGhlIGRpZmZl cmVudAotICogbWFwcGluZyB0eXBlcyB3aWxsIGJlIGF0dGVtcHRlZCBpbiB0aGUgb3JkZXIgbGlz dGVkIGJlbG93IHVudGlsIG9uZSBvZgotICogdGhlbSBzdWNjZWVkcy4KLSAqCi0gKiBNRU1SRU1B UF9XQiAtIG1hdGNoZXMgdGhlIGRlZmF1bHQgbWFwcGluZyBmb3IgU3lzdGVtIFJBTSBvbgotICog dGhlIGFyY2hpdGVjdHVyZS4gIFRoaXMgaXMgdXN1YWxseSBhIHJlYWQtYWxsb2NhdGUgd3JpdGUt YmFjayBjYWNoZS4KLSAqIE1vcmV2ZXIsIGlmIE1FTVJFTUFQX1dCIGlzIHNwZWNpZmllZCBhbmQg dGhlIHJlcXVlc3RlZCByZW1hcCByZWdpb24gaXMgUkFNCi0gKiBtZW1yZW1hcCgpIHdpbGwgYnlw YXNzIGVzdGFibGlzaGluZyBhIG5ldyBtYXBwaW5nIGFuZCBpbnN0ZWFkIHJldHVybgotICogYSBw b2ludGVyIGludG8gdGhlIGRpcmVjdCBtYXAuCi0gKgotICogTUVNUkVNQVBfV1QgLSBlc3RhYmxp c2ggYSBtYXBwaW5nIHdoZXJlYnkgd3JpdGVzIGVpdGhlciBieXBhc3MgdGhlCi0gKiBjYWNoZSBv ciBhcmUgd3JpdHRlbiB0aHJvdWdoIHRvIG1lbW9yeSBhbmQgbmV2ZXIgZXhpc3QgaW4gYQotICog Y2FjaGUtZGlydHkgc3RhdGUgd2l0aCByZXNwZWN0IHRvIHByb2dyYW0gdmlzaWJpbGl0eS4gIEF0 dGVtcHRzIHRvCi0gKiBtYXAgU3lzdGVtIFJBTSB3aXRoIHRoaXMgbWFwcGluZyB0eXBlIHdpbGwg ZmFpbC4KLSAqCi0gKiBNRU1SRU1BUF9XQyAtIGVzdGFibGlzaCBhIHdyaXRlY29tYmluZSBtYXBw aW5nLCB3aGVyZWJ5IHdyaXRlcyBtYXkKLSAqIGJlIGNvYWxlc2NlZCB0b2dldGhlciAoZS5nLiBp biB0aGUgQ1BVJ3Mgd3JpdGUgYnVmZmVycyksIGJ1dCBpcyBvdGhlcndpc2UKLSAqIHVuY2FjaGVk LiBBdHRlbXB0cyB0byBtYXAgU3lzdGVtIFJBTSB3aXRoIHRoaXMgbWFwcGluZyB0eXBlIHdpbGwg ZmFpbC4KLSAqLwotdm9pZCAqbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90 IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JaW50IGlzX3JhbSA9IHJlZ2lvbl9pbnRl cnNlY3RzKG9mZnNldCwgc2l6ZSwKLQkJCQkgICAgICAgSU9SRVNPVVJDRV9TWVNURU1fUkFNLCBJ T1JFU19ERVNDX05PTkUpOwotCXZvaWQgKmFkZHIgPSBOVUxMOwotCi0JaWYgKCFmbGFncykKLQkJ cmV0dXJuIE5VTEw7Ci0KLQlpZiAoaXNfcmFtID09IFJFR0lPTl9NSVhFRCkgewotCQlXQVJOX09O Q0UoMSwgIm1lbXJlbWFwIGF0dGVtcHRlZCBvbiBtaXhlZCByYW5nZSAlcGEgc2l6ZTogJSNseFxu IiwKLQkJCQkmb2Zmc2V0LCAodW5zaWduZWQgbG9uZykgc2l6ZSk7Ci0JCXJldHVybiBOVUxMOwot CX0KLQotCS8qIFRyeSBhbGwgbWFwcGluZyB0eXBlcyByZXF1ZXN0ZWQgdW50aWwgb25lIHJldHVy bnMgbm9uLU5VTEwgKi8KLQlpZiAoZmxhZ3MgJiBNRU1SRU1BUF9XQikgewotCQkvKgotCQkgKiBN RU1SRU1BUF9XQiBpcyBzcGVjaWFsIGluIHRoYXQgaXQgY2FuIGJlIHNhdGlzaWZlZAotCQkgKiBm cm9tIHRoZSBkaXJlY3QgbWFwLiAgU29tZSBhcmNocyBkZXBlbmQgb24gdGhlCi0JCSAqIGNhcGFi aWxpdHkgb2YgbWVtcmVtYXAoKSB0byBhdXRvZGV0ZWN0IGNhc2VzIHdoZXJlCi0JCSAqIHRoZSBy ZXF1ZXN0ZWQgcmFuZ2UgaXMgcG90ZW50aWFsbHkgaW4gU3lzdGVtIFJBTS4KLQkJICovCi0JCWlm IChpc19yYW0gPT0gUkVHSU9OX0lOVEVSU0VDVFMpCi0JCQlhZGRyID0gdHJ5X3JhbV9yZW1hcChv ZmZzZXQsIHNpemUsIGZsYWdzKTsKLQkJaWYgKCFhZGRyKQotCQkJYWRkciA9IGFyY2hfbWVtcmVt YXBfd2Iob2Zmc2V0LCBzaXplKTsKLQl9Ci0KLQkvKgotCSAqIElmIHdlIGRvbid0IGhhdmUgYSBt YXBwaW5nIHlldCBhbmQgb3RoZXIgcmVxdWVzdCBmbGFncyBhcmUKLQkgKiBwcmVzZW50IHRoZW4g d2Ugd2lsbCBiZSBhdHRlbXB0aW5nIHRvIGVzdGFibGlzaCBhIG5ldyB2aXJ0dWFsCi0JICogYWRk cmVzcyBtYXBwaW5nLiAgRW5mb3JjZSB0aGF0IHRoaXMgbWFwcGluZyBpcyBub3QgYWxpYXNpbmcK LQkgKiBTeXN0ZW0gUkFNLgotCSAqLwotCWlmICghYWRkciAmJiBpc19yYW0gPT0gUkVHSU9OX0lO VEVSU0VDVFMgJiYgZmxhZ3MgIT0gTUVNUkVNQVBfV0IpIHsKLQkJV0FSTl9PTkNFKDEsICJtZW1y ZW1hcCBhdHRlbXB0ZWQgb24gcmFtICVwYSBzaXplOiAlI2x4XG4iLAotCQkJCSZvZmZzZXQsICh1 bnNpZ25lZCBsb25nKSBzaXplKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKCFhZGRyICYm IChmbGFncyAmIE1FTVJFTUFQX1dUKSkKLQkJYWRkciA9IGlvcmVtYXBfd3Qob2Zmc2V0LCBzaXpl KTsKLQotCWlmICghYWRkciAmJiAoZmxhZ3MgJiBNRU1SRU1BUF9XQykpCi0JCWFkZHIgPSBpb3Jl bWFwX3djKG9mZnNldCwgc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLUVYUE9SVF9TWU1CT0wo bWVtcmVtYXApOwotCi12b2lkIG1lbXVubWFwKHZvaWQgKmFkZHIpCi17Ci0JaWYgKGlzX3ZtYWxs b2NfYWRkcihhZGRyKSkKLQkJaW91bm1hcCgodm9pZCBfX2lvbWVtICopIGFkZHIpOwotfQotRVhQ T1JUX1NZTUJPTChtZW11bm1hcCk7Ci0KLXN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcmVsZWFz ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykKLXsKLQltZW11bm1hcCgqKHZvaWQgKiop cmVzKTsKLX0KLQotc3RhdGljIGludCBkZXZtX21lbXJlbWFwX21hdGNoKHN0cnVjdCBkZXZpY2Ug KmRldiwgdm9pZCAqcmVzLCB2b2lkICptYXRjaF9kYXRhKQotewotCXJldHVybiAqKHZvaWQgKiop cmVzID09IG1hdGNoX2RhdGE7Ci19Ci0KLXZvaWQgKmRldm1fbWVtcmVtYXAoc3RydWN0IGRldmlj ZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAotCQlzaXplX3Qgc2l6ZSwgdW5zaWduZWQg bG9uZyBmbGFncykKLXsKLQl2b2lkICoqcHRyLCAqYWRkcjsKLQotCXB0ciA9IGRldnJlc19hbGxv Y19ub2RlKGRldm1fbWVtcmVtYXBfcmVsZWFzZSwgc2l6ZW9mKCpwdHIpLCBHRlBfS0VSTkVMLAot CQkJZGV2X3RvX25vZGUoZGV2KSk7Ci0JaWYgKCFwdHIpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOwotCi0JYWRkciA9IG1lbXJlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpOwotCWlmIChhZGRy KSB7Ci0JCSpwdHIgPSBhZGRyOwotCQlkZXZyZXNfYWRkKGRldiwgcHRyKTsKLQl9IGVsc2Ugewot CQlkZXZyZXNfZnJlZShwdHIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOwotCX0KLQotCXJl dHVybiBhZGRyOwotfQotRVhQT1JUX1NZTUJPTChkZXZtX21lbXJlbWFwKTsKLQotdm9pZCBkZXZt X21lbXVubWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKLXsKLQlXQVJOX09OKGRl dnJlc19yZWxlYXNlKGRldiwgZGV2bV9tZW1yZW1hcF9yZWxlYXNlLAotCQkJCWRldm1fbWVtcmVt YXBfbWF0Y2gsIGFkZHIpKTsKLX0KLUVYUE9SVF9TWU1CT0woZGV2bV9tZW11bm1hcCk7Ci0KLSNp ZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0UKIHN0YXRpYyBERUZJTkVfTVVURVgocGdtYXBfbG9jayk7 CiBzdGF0aWMgUkFESVhfVFJFRShwZ21hcF9yYWRpeCwgR0ZQX0tFUk5FTCk7CiAjZGVmaW5lIFNF Q1RJT05fTUFTSyB+KCgxVUwgPDwgUEFfU0VDVElPTl9TSElGVCkgLSAxKQpAQCAtNDc0LDcgKzMw MSw2IEBAIHN0cnVjdCBkZXZfcGFnZW1hcCAqZ2V0X2Rldl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcg cGZuLAogCiAJcmV0dXJuIHBnbWFwOwogfQotI2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSAq LwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIHx8ICBJU19FTkFCTEVE KENPTkZJR19ERVZJQ0VfUFVCTElDKQogdm9pZCBwdXRfem9uZV9kZXZpY2VfcHJpdmF0ZV9vcl9w dWJsaWNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52ZGltbSBtYWlsaW5nIGxpc3QKTGludXgtbnZk aW1tQGxpc3RzLjAxLm9yZwpodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LW52ZGltbQo=