From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kani, Toshi" Subject: Re: [PATCH v3 2/3] arm64: Implement page table free interfaces Date: Mon, 19 Mar 2018 19:29:27 +0000 Message-ID: <1521487759.2693.224.camel@hpe.com> References: <1521463256-19858-1-git-send-email-cpandya@codeaurora.org> <1521463256-19858-3-git-send-email-cpandya@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1521463256-19858-3-git-send-email-cpandya@codeaurora.org> Content-Language: en-US Content-ID: <343C81ABBCE43E429C438C0119AB3BC0@NAMPRD84.PROD.OUTLOOK.COM> Sender: linux-kernel-owner@vger.kernel.org To: "cpandya@codeaurora.org" , "mark.rutland@arm.com" , "catalin.marinas@arm.com" , "will.deacon@arm.com" Cc: "linux-kernel@vger.kernel.org" , "ard.biesheuvel@linaro.org" , "tglx@linutronix.de" , "takahiro.akashi@linaro.org" , "james.morse@arm.com" , "kristina.martsenko@arm.com" , "akpm@linux-foundation.org" , "gregkh@linuxfoundation.org" , "linux-arm-kernel@lists.infradead.org" , "marc.zyngier@arm.com" , "arnd@arndb.de" , "linux-arch@vger.kernel.org" List-Id: linux-arch.vger.kernel.org T24gTW9uLCAyMDE4LTAzLTE5IGF0IDE4OjEwICswNTMwLCBDaGludGFuIFBhbmR5YSB3cm90ZToN Cj4gSW1wbGVtZW50IHB1ZF9mcmVlX3BtZF9wYWdlKCkgYW5kIHBtZF9mcmVlX3B0ZV9wYWdlKCku DQo+IA0KPiBJbXBsZW1lbnRhdGlvbiByZXF1aXJlcywNCj4gIDEpIEZyZWVpbmcgb2YgdGhlIHVu LXVzZWQgbmV4dCBsZXZlbCBwYWdlIHRhYmxlcw0KPiAgMikgQ2xlYXJpbmcgb2ZmIHRoZSBjdXJy ZW50IHB1ZC9wbWQgZW50cnkNCj4gIDMpIEludmFsaWRhdGUgVExCIHdoaWNoIGNvdWxkIGhhdmUg cHJldmlvdXNseQ0KPiAgICAgdmFsaWQgYnV0IG5vdCBzdGFsZSBlbnRyeQ0KPiANCj4gU2lnbmVk LW9mZi1ieTogQ2hpbnRhbiBQYW5keWEgPGNwYW5keWFAY29kZWF1cm9yYS5vcmc+DQo+IC0tLQ0K PiAgYXJjaC9hcm02NC9tbS9tbXUuYyB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKyst LQ0KPiAgMSBmaWxlIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQo+ IA0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11 LmMNCj4gaW5kZXggZGE5ODgyOC4uYzcwZjEzOSAxMDA2NDQNCj4gLS0tIGEvYXJjaC9hcm02NC9t bS9tbXUuYw0KPiArKysgYi9hcmNoL2FybTY0L21tL21tdS5jDQo+IEBAIC00NSw2ICs0NSw3IEBA DQo+ICAjaW5jbHVkZSA8YXNtL21lbWJsb2NrLmg+DQo+ICAjaW5jbHVkZSA8YXNtL21tdV9jb250 ZXh0Lmg+DQo+ICAjaW5jbHVkZSA8YXNtL3B0ZHVtcC5oPg0KPiArI2luY2x1ZGUgPGFzbS90bGJm bHVzaC5oPg0KPiAgDQo+ICAjZGVmaW5lIE5PX0JMT0NLX01BUFBJTkdTCUJJVCgwKQ0KPiAgI2Rl ZmluZSBOT19DT05UX01BUFBJTkdTCUJJVCgxKQ0KPiBAQCAtOTc1LDEwICs5NzYsMzUgQEAgaW50 IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKQ0KPiAgDQo+ICBpbnQgcHVkX2ZyZWVfcG1kX3Bh Z2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKQ0KPiAgew0KPiAtCXJldHVybiBwdWRf bm9uZSgqcHVkKTsNCj4gKwlwbWRfdCAqcG1kOw0KPiArCWludCBpOw0KPiArDQo+ICsJcG1kID0g X192YShwdWRfdmFsKCpwdWQpKTsNCj4gKwlpZiAocHVkX3ZhbCgqcHVkKSkgew0KPiArCQlmb3Ig KGkgPSAwOyBpIDwgUFRSU19QRVJfUE1EOyBpKyspDQo+ICsJCQlwbWRfZnJlZV9wdGVfcGFnZSgm cG1kW2ldLCBhZGRyICsgKGkgKiBQTURfU0laRSkpOw0KPiArDQo+ICsJCWZyZWVfcGFnZSgodW5z aWduZWQgbG9uZykgcG1kKTsNCg0KV2h5IGRvIHlvdSB3YW50IHRvIGZyZWUgdGhpcyBwbWQgcGFn ZSBiZWZvcmUgY2xlYXJpbmcgdGhlIHB1ZCBlbnRyeSBvbg0KdGhpcyBhcm02NCB2ZXJzaW9uIChh cyBpdCBzZWVtcyB5b3UgaW50ZW50aW9uYWxseSBjaGFuZ2VkIGl0IGZyb20gdGhlDQp4ODYgdmVy c2lvbik/ICBJdCBjYW4gYmUgcmV1c2VkIHdoaWxlIGJlaW5nIHBvaW50ZWQgYnkgdGhlIHB1ZC4g IFNhbWUNCmZvciBwbWQuDQoNCj4gKwkJcHVkX2NsZWFyKHB1ZCk7DQo+ICsJCWZsdXNoX3RsYl9r ZXJuZWxfcmFuZ2UoYWRkciwgYWRkciArIFBVRF9TSVpFKTsNCg0KU2luY2UgeW91IHB1cmdlIHRo ZSBlbnRpcmUgcHVkIHJhbmdlIGhlcmUsIGRvIHlvdSBzdGlsbCBuZWVkIHRvIGNhbGwgDQpwbWRf ZnJlZV9wdGVfcGFnZSgpIHRvIHB1cmdlIGVhY2ggcG1kIHJhbmdlPyAgVGhpcyBsb29rcyB2ZXJ5 IGV4cGVuc2l2ZS4NCllvdSBtYXkgd2FudCB0byBjb25zaWRlciBpZiBjYWxsaW5nIGludGVybmFs IF9fcG1kX2ZyZWVfcHRlX3BhZ2UoKQ0Kd2l0aG91dCB0aGUgcHVyZ2Ugb3BlcmF0aW9uIHdvcmtz Lg0KDQotVG9zaGk= From mboxrd@z Thu Jan 1 00:00:00 1970 From: toshi.kani@hpe.com (Kani, Toshi) Date: Mon, 19 Mar 2018 19:29:27 +0000 Subject: [PATCH v3 2/3] arm64: Implement page table free interfaces In-Reply-To: <1521463256-19858-3-git-send-email-cpandya@codeaurora.org> References: <1521463256-19858-1-git-send-email-cpandya@codeaurora.org> <1521463256-19858-3-git-send-email-cpandya@codeaurora.org> Message-ID: <1521487759.2693.224.camel@hpe.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Mon, 2018-03-19 at 18:10 +0530, Chintan Pandya wrote: > Implement pud_free_pmd_page() and pmd_free_pte_page(). > > Implementation requires, > 1) Freeing of the un-used next level page tables > 2) Clearing off the current pud/pmd entry > 3) Invalidate TLB which could have previously > valid but not stale entry > > Signed-off-by: Chintan Pandya > --- > arch/arm64/mm/mmu.c | 30 ++++++++++++++++++++++++++++-- > 1 file changed, 28 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index da98828..c70f139 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -45,6 +45,7 @@ > #include > #include > #include > +#include > > #define NO_BLOCK_MAPPINGS BIT(0) > #define NO_CONT_MAPPINGS BIT(1) > @@ -975,10 +976,35 @@ int pmd_clear_huge(pmd_t *pmdp) > > int pud_free_pmd_page(pud_t *pud, unsigned long addr) > { > - return pud_none(*pud); > + pmd_t *pmd; > + int i; > + > + pmd = __va(pud_val(*pud)); > + if (pud_val(*pud)) { > + for (i = 0; i < PTRS_PER_PMD; i++) > + pmd_free_pte_page(&pmd[i], addr + (i * PMD_SIZE)); > + > + free_page((unsigned long) pmd); Why do you want to free this pmd page before clearing the pud entry on this arm64 version (as it seems you intentionally changed it from the x86 version)? It can be reused while being pointed by the pud. Same for pmd. > + pud_clear(pud); > + flush_tlb_kernel_range(addr, addr + PUD_SIZE); Since you purge the entire pud range here, do you still need to call pmd_free_pte_page() to purge each pmd range? This looks very expensive. You may want to consider if calling internal __pmd_free_pte_page() without the purge operation works. -Toshi