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 A68E0211E82F7 for ; Fri, 22 Mar 2019 10:11:15 -0700 (PDT) Subject: [PATCH v5 08/10] mm/devm_memremap_pages: Enable sub-section remap From: Dan Williams Date: Fri, 22 Mar 2019 09:58:36 -0700 Message-ID: <155327391603.225273.924677730380586912.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <155327387405.225273.9325594075351253804.stgit@dwillia2-desk3.amr.corp.intel.com> References: <155327387405.225273.9325594075351253804.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: akpm@linux-foundation.org Cc: Michal Hocko , linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, =?utf-8?b?SsOpcsO0bWU=?= Glisse List-ID: VGVhY2ggZGV2bV9tZW1yZW1hcF9wYWdlcygpIGFib3V0IHRoZSBuZXcgc3ViLXNlY3Rpb24gY2Fw YWJpbGl0aWVzIG9mCmFyY2hfe2FkZCxyZW1vdmV9X21lbW9yeSgpLiBFZmZlY3RpdmVseSwganVz dCByZXBsYWNlIGFsbCB1c2FnZSBvZgphbGlnbl9zdGFydCwgYWxpZ25fZW5kLCBhbmQgYWxpZ25f c2l6ZSB3aXRoIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCBhbmQKcmVzb3VyY2Vfc2l6ZShyZXMpLiBU aGUgZXhpc3Rpbmcgc2FuaXR5IGNoZWNrIHdpbGwgc3RpbGwgbWFrZSBzdXJlIHRoYXQKdGhlIHR3 byBzZXBhcmF0ZSByZW1hcCBhdHRlbXB0cyBkbyBub3QgY29sbGlkZSB3aXRoaW4gYSBzdWItc2Vj dGlvbiAoMk1CCm9uIHg4NikuCgpDYzogTWljaGFsIEhvY2tvIDxtaG9ja29Ac3VzZS5jb20+CkNj OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwZS5jb20+CkNjOiBKw6lyw7RtZSBHbGlzc2UgPGpn bGlzc2VAcmVkaGF0LmNvbT4KQ2M6IExvZ2FuIEd1bnRob3JwZSA8bG9nYW5nQGRlbHRhdGVlLmNv bT4KU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+ Ci0tLQoga2VybmVsL21lbXJlbWFwLmMgfCAgIDU1ICsrKysrKysrKysrKysrKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjIgaW5zZXJ0aW9u cygrKSwgMzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEva2VybmVsL21lbXJlbWFwLmMgYi9r ZXJuZWwvbWVtcmVtYXAuYwppbmRleCBkZGExMzY3YjM4NWQuLjA4MzQ0ODY5ZTcxNyAxMDA2NDQK LS0tIGEva2VybmVsL21lbXJlbWFwLmMKKysrIGIva2VybmVsL21lbXJlbWFwLmMKQEAgLTU5LDcg KzU5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcGZuX2ZpcnN0KHN0cnVjdCBkZXZfcGFnZW1h cCAqcGdtYXApCiAJc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSAmcGdtYXAtPmFsdG1hcDsK IAl1bnNpZ25lZCBsb25nIHBmbjsKIAotCXBmbiA9IHJlcy0+c3RhcnQgPj4gUEFHRV9TSElGVDsK KwlwZm4gPSBQSFlTX1BGTihyZXMtPnN0YXJ0KTsKIAlpZiAocGdtYXAtPmFsdG1hcF92YWxpZCkK IAkJcGZuICs9IHZtZW1fYWx0bWFwX29mZnNldChhbHRtYXApOwogCXJldHVybiBwZm47CkBAIC04 Nyw3ICs4Nyw2IEBAIHN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lk ICpkYXRhKQogCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAgPSBkYXRhOwogCXN0cnVjdCBkZXZp Y2UgKmRldiA9IHBnbWFwLT5kZXY7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSAmcGdtYXAtPnJl czsKLQlyZXNvdXJjZV9zaXplX3QgYWxpZ25fc3RhcnQsIGFsaWduX3NpemU7CiAJdW5zaWduZWQg bG9uZyBwZm47CiAJaW50IG5pZDsKIApAQCAtOTYsMjUgKzk1LDIxIEBAIHN0YXRpYyB2b2lkIGRl dm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKQogCQlwdXRfcGFnZShwZm5fdG9f cGFnZShwZm4pKTsKIAogCS8qIHBhZ2VzIGFyZSBkZWFkIGFuZCB1bnVzZWQsIHVuZG8gdGhlIGFy Y2ggbWFwcGluZyAqLwotCWFsaWduX3N0YXJ0ID0gcmVzLT5zdGFydCAmIH4oUEFfU0VDVElPTl9T SVpFIC0gMSk7Ci0JYWxpZ25fc2l6ZSA9IEFMSUdOKHJlcy0+c3RhcnQgKyByZXNvdXJjZV9zaXpl KHJlcyksIFBBX1NFQ1RJT05fU0laRSkKLQkJLSBhbGlnbl9zdGFydDsKLQotCW5pZCA9IHBhZ2Vf dG9fbmlkKHBmbl90b19wYWdlKGFsaWduX3N0YXJ0ID4+IFBBR0VfU0hJRlQpKTsKKwluaWQgPSBw YWdlX3RvX25pZChwZm5fdG9fcGFnZShQSFlTX1BGTihyZXMtPnN0YXJ0KSkpOwogCiAJbWVtX2hv dHBsdWdfYmVnaW4oKTsKIAlpZiAocGdtYXAtPnR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRF KSB7Ci0JCXBmbiA9IGFsaWduX3N0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJCXBmbiA9IFBIWVNfUEZO KHJlcy0+c3RhcnQpOwogCQlfX3JlbW92ZV9wYWdlcyhwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZu KSksIHBmbiwKLQkJCQlhbGlnbl9zaXplID4+IFBBR0VfU0hJRlQsIE5VTEwpOworCQkJCVBIWVNf UEZOKHJlc291cmNlX3NpemUocmVzKSksIE5VTEwpOwogCX0gZWxzZSB7Ci0JCWFyY2hfcmVtb3Zl X21lbW9yeShuaWQsIGFsaWduX3N0YXJ0LCBhbGlnbl9zaXplLAorCQlhcmNoX3JlbW92ZV9tZW1v cnkobmlkLCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCiAJCQkJcGdtYXAtPmFsdG1h cF92YWxpZCA/ICZwZ21hcC0+YWx0bWFwIDogTlVMTCk7Ci0JCWthc2FuX3JlbW92ZV96ZXJvX3No YWRvdyhfX3ZhKGFsaWduX3N0YXJ0KSwgYWxpZ25fc2l6ZSk7CisJCWthc2FuX3JlbW92ZV96ZXJv X3NoYWRvdyhfX3ZhKHJlcy0+c3RhcnQpLCByZXNvdXJjZV9zaXplKHJlcykpOwogCX0KIAltZW1f aG90cGx1Z19kb25lKCk7CiAKLQl1bnRyYWNrX3BmbihOVUxMLCBQSFlTX1BGTihhbGlnbl9zdGFy dCksIGFsaWduX3NpemUpOworCXVudHJhY2tfcGZuKE5VTEwsIFBIWVNfUEZOKHJlcy0+c3RhcnQp LCByZXNvdXJjZV9zaXplKHJlcykpOwogCXBnbWFwX2FycmF5X2RlbGV0ZShyZXMpOwogCWRldl9X QVJOX09OQ0UoZGV2LCBwZ21hcC0+YWx0bWFwLmFsbG9jLAogCQkgICAgICAiJXM6IGZhaWxlZCB0 byBmcmVlIGFsbCByZXNlcnZlZCBwYWdlc1xuIiwgX19mdW5jX18pOwpAQCAtMTQxLDcgKzEzNiw2 IEBAIHN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKQog ICovCiB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRldl9wYWdlbWFwICpwZ21hcCkKIHsKLQlyZXNvdXJjZV9zaXplX3QgYWxpZ25fc3RhcnQsIGFs aWduX3NpemUsIGFsaWduX2VuZDsKIAlzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCA9IHBnbWFw LT5hbHRtYXBfdmFsaWQgPwogCQkJJnBnbWFwLT5hbHRtYXAgOiBOVUxMOwogCXN0cnVjdCByZXNv dXJjZSAqcmVzID0gJnBnbWFwLT5yZXM7CkBAIC0xNTIsMjYgKzE0NiwyMSBAQCB2b2lkICpkZXZt X21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpw Z21hcCkKIAlpZiAoIXBnbWFwLT5yZWYgfHwgIXBnbWFwLT5raWxsKQogCQlyZXR1cm4gRVJSX1BU UigtRUlOVkFMKTsKIAotCWFsaWduX3N0YXJ0ID0gcmVzLT5zdGFydCAmIH4oUEFfU0VDVElPTl9T SVpFIC0gMSk7Ci0JYWxpZ25fc2l6ZSA9IEFMSUdOKHJlcy0+c3RhcnQgKyByZXNvdXJjZV9zaXpl KHJlcyksIFBBX1NFQ1RJT05fU0laRSkKLQkJLSBhbGlnbl9zdGFydDsKLQlhbGlnbl9lbmQgPSBh bGlnbl9zdGFydCArIGFsaWduX3NpemUgLSAxOwotCi0JY29uZmxpY3RfcGdtYXAgPSBnZXRfZGV2 X3BhZ2VtYXAoUEhZU19QRk4oYWxpZ25fc3RhcnQpLCBOVUxMKTsKKwljb25mbGljdF9wZ21hcCA9 IGdldF9kZXZfcGFnZW1hcChQSFlTX1BGTihyZXMtPnN0YXJ0KSwgTlVMTCk7CiAJaWYgKGNvbmZs aWN0X3BnbWFwKSB7CiAJCWRldl9XQVJOKGRldiwgIkNvbmZsaWN0aW5nIG1hcHBpbmcgaW4gc2Ft ZSBzZWN0aW9uXG4iKTsKIAkJcHV0X2Rldl9wYWdlbWFwKGNvbmZsaWN0X3BnbWFwKTsKIAkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCi0JY29uZmxpY3RfcGdtYXAgPSBnZXRfZGV2X3Bh Z2VtYXAoUEhZU19QRk4oYWxpZ25fZW5kKSwgTlVMTCk7CisJY29uZmxpY3RfcGdtYXAgPSBnZXRf ZGV2X3BhZ2VtYXAoUEhZU19QRk4ocmVzLT5lbmQpLCBOVUxMKTsKIAlpZiAoY29uZmxpY3RfcGdt YXApIHsKIAkJZGV2X1dBUk4oZGV2LCAiQ29uZmxpY3RpbmcgbWFwcGluZyBpbiBzYW1lIHNlY3Rp b25cbiIpOwogCQlwdXRfZGV2X3BhZ2VtYXAoY29uZmxpY3RfcGdtYXApOwogCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKIAl9CiAKLQlpc19yYW0gPSByZWdpb25faW50ZXJzZWN0cyhhbGlnbl9z dGFydCwgYWxpZ25fc2l6ZSwKKwlpc19yYW0gPSByZWdpb25faW50ZXJzZWN0cyhyZXMtPnN0YXJ0 LCByZXNvdXJjZV9zaXplKHJlcyksCiAJCUlPUkVTT1VSQ0VfU1lTVEVNX1JBTSwgSU9SRVNfREVT Q19OT05FKTsKIAogCWlmIChpc19yYW0gIT0gUkVHSU9OX0RJU0pPSU5UKSB7CkBAIC0xOTIsOCAr MTgxLDggQEAgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiAJaWYgKG5pZCA8IDApCiAJCW5pZCA9IG51bWFfbWVt X2lkKCk7CiAKLQllcnJvciA9IHRyYWNrX3Bmbl9yZW1hcChOVUxMLCAmcGdwcm90LCBQSFlTX1BG TihhbGlnbl9zdGFydCksIDAsCi0JCQlhbGlnbl9zaXplKTsKKwllcnJvciA9IHRyYWNrX3Bmbl9y ZW1hcChOVUxMLCAmcGdwcm90LCBQSFlTX1BGTihyZXMtPnN0YXJ0KSwgMCwKKwkJCXJlc291cmNl X3NpemUocmVzKSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycl9wZm5fcmVtYXA7CiAKQEAgLTIx MSwxNiArMjAwLDE2IEBAIHZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQogCSAqIGFyY2hfYWRkX21lbW9yeSgpLgog CSAqLwogCWlmIChwZ21hcC0+dHlwZSA9PSBNRU1PUllfREVWSUNFX1BSSVZBVEUpIHsKLQkJZXJy b3IgPSBhZGRfcGFnZXMobmlkLCBhbGlnbl9zdGFydCA+PiBQQUdFX1NISUZULAotCQkJCWFsaWdu X3NpemUgPj4gUEFHRV9TSElGVCwgTlVMTCwgZmFsc2UpOworCQllcnJvciA9IGFkZF9wYWdlcyhu aWQsIFBIWVNfUEZOKHJlcy0+c3RhcnQpLAorCQkJCVBIWVNfUEZOKHJlc291cmNlX3NpemUocmVz KSksIE5VTEwsIGZhbHNlKTsKIAl9IGVsc2UgewotCQllcnJvciA9IGthc2FuX2FkZF96ZXJvX3No YWRvdyhfX3ZhKGFsaWduX3N0YXJ0KSwgYWxpZ25fc2l6ZSk7CisJCWVycm9yID0ga2FzYW5fYWRk X3plcm9fc2hhZG93KF9fdmEocmVzLT5zdGFydCksIHJlc291cmNlX3NpemUocmVzKSk7CiAJCWlm IChlcnJvcikgewogCQkJbWVtX2hvdHBsdWdfZG9uZSgpOwogCQkJZ290byBlcnJfa2FzYW47CiAJ CX0KIAotCQllcnJvciA9IGFyY2hfYWRkX21lbW9yeShuaWQsIGFsaWduX3N0YXJ0LCBhbGlnbl9z aXplLCBhbHRtYXAsCisJCWVycm9yID0gYXJjaF9hZGRfbWVtb3J5KG5pZCwgcmVzLT5zdGFydCwg cmVzb3VyY2Vfc2l6ZShyZXMpLCBhbHRtYXAsCiAJCQkJZmFsc2UpOwogCX0KIApAQCAtMjI4LDgg KzIxNyw4IEBAIHZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQogCQlzdHJ1Y3Qgem9uZSAqem9uZTsKIAogCQl6b25l ID0gJk5PREVfREFUQShuaWQpLT5ub2RlX3pvbmVzW1pPTkVfREVWSUNFXTsKLQkJbW92ZV9wZm5f cmFuZ2VfdG9fem9uZSh6b25lLCBhbGlnbl9zdGFydCA+PiBQQUdFX1NISUZULAotCQkJCWFsaWdu X3NpemUgPj4gUEFHRV9TSElGVCwgYWx0bWFwKTsKKwkJbW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6 b25lLCBQSFlTX1BGTihyZXMtPnN0YXJ0KSwKKwkJCQlQSFlTX1BGTihyZXNvdXJjZV9zaXplKHJl cykpLCBhbHRtYXApOwogCX0KIAogCW1lbV9ob3RwbHVnX2RvbmUoKTsKQEAgLTI0MSw4ICsyMzAs OCBAQCB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRldl9wYWdlbWFwICpwZ21hcCkKIAkgKiB0byBhbGxvdyB1cyB0byBkbyB0aGUgd29yayB3aGls ZSBub3QgaG9sZGluZyB0aGUgaG90cGx1ZyBsb2NrLgogCSAqLwogCW1lbW1hcF9pbml0X3pvbmVf ZGV2aWNlKCZOT0RFX0RBVEEobmlkKS0+bm9kZV96b25lc1taT05FX0RFVklDRV0sCi0JCQkJYWxp Z25fc3RhcnQgPj4gUEFHRV9TSElGVCwKLQkJCQlhbGlnbl9zaXplID4+IFBBR0VfU0hJRlQsIHBn bWFwKTsKKwkJCQlQSFlTX1BGTihyZXMtPnN0YXJ0KSwKKwkJCQlQSFlTX1BGTihyZXNvdXJjZV9z aXplKHJlcykpLCBwZ21hcCk7CiAJcGVyY3B1X3JlZl9nZXRfbWFueShwZ21hcC0+cmVmLCBwZm5f ZW5kKHBnbWFwKSAtIHBmbl9maXJzdChwZ21hcCkpOwogCiAJZXJyb3IgPSBkZXZtX2FkZF9hY3Rp b25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsCkBAIC0yNTMsOSAr MjQyLDkgQEAgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiAJcmV0dXJuIF9fdmEocmVzLT5zdGFydCk7CiAKICBl cnJfYWRkX21lbW9yeToKLQlrYXNhbl9yZW1vdmVfemVyb19zaGFkb3coX192YShhbGlnbl9zdGFy dCksIGFsaWduX3NpemUpOworCWthc2FuX3JlbW92ZV96ZXJvX3NoYWRvdyhfX3ZhKHJlcy0+c3Rh cnQpLCByZXNvdXJjZV9zaXplKHJlcykpOwogIGVycl9rYXNhbjoKLQl1bnRyYWNrX3BmbihOVUxM LCBQSFlTX1BGTihhbGlnbl9zdGFydCksIGFsaWduX3NpemUpOworCXVudHJhY2tfcGZuKE5VTEws IFBIWVNfUEZOKHJlcy0+c3RhcnQpLCByZXNvdXJjZV9zaXplKHJlcykpOwogIGVycl9wZm5fcmVt YXA6CiAJcGdtYXBfYXJyYXlfZGVsZXRlKHJlcyk7CiAgZXJyX2FycmF5OgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZkaW1tIG1haWxpbmcg bGlzdApMaW51eC1udmRpbW1AbGlzdHMuMDEub3JnCmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtbnZkaW1tCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8B31BC10F03 for ; Fri, 22 Mar 2019 17:11:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 596F421925 for ; Fri, 22 Mar 2019 17:11:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729122AbfCVRLR (ORCPT ); Fri, 22 Mar 2019 13:11:17 -0400 Received: from mga17.intel.com ([192.55.52.151]:16325 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727783AbfCVRLP (ORCPT ); Fri, 22 Mar 2019 13:11:15 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Mar 2019 10:11:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,256,1549958400"; d="scan'208";a="136552998" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.16]) by fmsmga007.fm.intel.com with ESMTP; 22 Mar 2019 10:11:14 -0700 Subject: [PATCH v5 08/10] mm/devm_memremap_pages: Enable sub-section remap From: Dan Williams To: akpm@linux-foundation.org Cc: Michal Hocko , Toshi Kani , =?utf-8?b?SsOpcsO0bWU=?= Glisse , Logan Gunthorpe , linux-mm@kvack.org, linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org Date: Fri, 22 Mar 2019 09:58:36 -0700 Message-ID: <155327391603.225273.924677730380586912.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <155327387405.225273.9325594075351253804.stgit@dwillia2-desk3.amr.corp.intel.com> References: <155327387405.225273.9325594075351253804.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.18-2-gc94f MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Teach devm_memremap_pages() about the new sub-section capabilities of arch_{add,remove}_memory(). Effectively, just replace all usage of align_start, align_end, and align_size with res->start, res->end, and resource_size(res). The existing sanity check will still make sure that the two separate remap attempts do not collide within a sub-section (2MB on x86). Cc: Michal Hocko Cc: Toshi Kani Cc: Jérôme Glisse Cc: Logan Gunthorpe Signed-off-by: Dan Williams --- kernel/memremap.c | 55 +++++++++++++++++++++-------------------------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/kernel/memremap.c b/kernel/memremap.c index dda1367b385d..08344869e717 100644 --- a/kernel/memremap.c +++ b/kernel/memremap.c @@ -59,7 +59,7 @@ static unsigned long pfn_first(struct dev_pagemap *pgmap) struct vmem_altmap *altmap = &pgmap->altmap; unsigned long pfn; - pfn = res->start >> PAGE_SHIFT; + pfn = PHYS_PFN(res->start); if (pgmap->altmap_valid) pfn += vmem_altmap_offset(altmap); return pfn; @@ -87,7 +87,6 @@ static void devm_memremap_pages_release(void *data) struct dev_pagemap *pgmap = data; struct device *dev = pgmap->dev; struct resource *res = &pgmap->res; - resource_size_t align_start, align_size; unsigned long pfn; int nid; @@ -96,25 +95,21 @@ static void devm_memremap_pages_release(void *data) put_page(pfn_to_page(pfn)); /* pages are dead and unused, undo the arch mapping */ - align_start = res->start & ~(PA_SECTION_SIZE - 1); - align_size = ALIGN(res->start + resource_size(res), PA_SECTION_SIZE) - - align_start; - - nid = page_to_nid(pfn_to_page(align_start >> PAGE_SHIFT)); + nid = page_to_nid(pfn_to_page(PHYS_PFN(res->start))); mem_hotplug_begin(); if (pgmap->type == MEMORY_DEVICE_PRIVATE) { - pfn = align_start >> PAGE_SHIFT; + pfn = PHYS_PFN(res->start); __remove_pages(page_zone(pfn_to_page(pfn)), pfn, - align_size >> PAGE_SHIFT, NULL); + PHYS_PFN(resource_size(res)), NULL); } else { - arch_remove_memory(nid, align_start, align_size, + arch_remove_memory(nid, res->start, resource_size(res), pgmap->altmap_valid ? &pgmap->altmap : NULL); - kasan_remove_zero_shadow(__va(align_start), align_size); + kasan_remove_zero_shadow(__va(res->start), resource_size(res)); } mem_hotplug_done(); - untrack_pfn(NULL, PHYS_PFN(align_start), align_size); + untrack_pfn(NULL, PHYS_PFN(res->start), resource_size(res)); pgmap_array_delete(res); dev_WARN_ONCE(dev, pgmap->altmap.alloc, "%s: failed to free all reserved pages\n", __func__); @@ -141,7 +136,6 @@ static void devm_memremap_pages_release(void *data) */ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) { - resource_size_t align_start, align_size, align_end; struct vmem_altmap *altmap = pgmap->altmap_valid ? &pgmap->altmap : NULL; struct resource *res = &pgmap->res; @@ -152,26 +146,21 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) if (!pgmap->ref || !pgmap->kill) return ERR_PTR(-EINVAL); - align_start = res->start & ~(PA_SECTION_SIZE - 1); - align_size = ALIGN(res->start + resource_size(res), PA_SECTION_SIZE) - - align_start; - align_end = align_start + align_size - 1; - - conflict_pgmap = get_dev_pagemap(PHYS_PFN(align_start), NULL); + conflict_pgmap = get_dev_pagemap(PHYS_PFN(res->start), NULL); if (conflict_pgmap) { dev_WARN(dev, "Conflicting mapping in same section\n"); put_dev_pagemap(conflict_pgmap); return ERR_PTR(-ENOMEM); } - conflict_pgmap = get_dev_pagemap(PHYS_PFN(align_end), NULL); + conflict_pgmap = get_dev_pagemap(PHYS_PFN(res->end), NULL); if (conflict_pgmap) { dev_WARN(dev, "Conflicting mapping in same section\n"); put_dev_pagemap(conflict_pgmap); return ERR_PTR(-ENOMEM); } - is_ram = region_intersects(align_start, align_size, + is_ram = region_intersects(res->start, resource_size(res), IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE); if (is_ram != REGION_DISJOINT) { @@ -192,8 +181,8 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) if (nid < 0) nid = numa_mem_id(); - error = track_pfn_remap(NULL, &pgprot, PHYS_PFN(align_start), 0, - align_size); + error = track_pfn_remap(NULL, &pgprot, PHYS_PFN(res->start), 0, + resource_size(res)); if (error) goto err_pfn_remap; @@ -211,16 +200,16 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) * arch_add_memory(). */ if (pgmap->type == MEMORY_DEVICE_PRIVATE) { - error = add_pages(nid, align_start >> PAGE_SHIFT, - align_size >> PAGE_SHIFT, NULL, false); + error = add_pages(nid, PHYS_PFN(res->start), + PHYS_PFN(resource_size(res)), NULL, false); } else { - error = kasan_add_zero_shadow(__va(align_start), align_size); + error = kasan_add_zero_shadow(__va(res->start), resource_size(res)); if (error) { mem_hotplug_done(); goto err_kasan; } - error = arch_add_memory(nid, align_start, align_size, altmap, + error = arch_add_memory(nid, res->start, resource_size(res), altmap, false); } @@ -228,8 +217,8 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) struct zone *zone; zone = &NODE_DATA(nid)->node_zones[ZONE_DEVICE]; - move_pfn_range_to_zone(zone, align_start >> PAGE_SHIFT, - align_size >> PAGE_SHIFT, altmap); + move_pfn_range_to_zone(zone, PHYS_PFN(res->start), + PHYS_PFN(resource_size(res)), altmap); } mem_hotplug_done(); @@ -241,8 +230,8 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) * to allow us to do the work while not holding the hotplug lock. */ memmap_init_zone_device(&NODE_DATA(nid)->node_zones[ZONE_DEVICE], - align_start >> PAGE_SHIFT, - align_size >> PAGE_SHIFT, pgmap); + PHYS_PFN(res->start), + PHYS_PFN(resource_size(res)), pgmap); percpu_ref_get_many(pgmap->ref, pfn_end(pgmap) - pfn_first(pgmap)); error = devm_add_action_or_reset(dev, devm_memremap_pages_release, @@ -253,9 +242,9 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) return __va(res->start); err_add_memory: - kasan_remove_zero_shadow(__va(align_start), align_size); + kasan_remove_zero_shadow(__va(res->start), resource_size(res)); err_kasan: - untrack_pfn(NULL, PHYS_PFN(align_start), align_size); + untrack_pfn(NULL, PHYS_PFN(res->start), resource_size(res)); err_pfn_remap: pgmap_array_delete(res); err_array: