Hi, On Fri, Feb 03, 2017 at 03:13:18PM +0900, AKASHI Takahiro wrote: > On Thu, Feb 02, 2017 at 11:55:54PM +0900, AKASHI Takahiro wrote: > > On Thu, Feb 02, 2017 at 02:35:35PM +0000, Mark Rutland wrote: > > > I think that if we only allow ourselves to make PTEs invalid, we don't > > > have to handle that case. If we use page_mappings_only, we should only > > > check pgattr_change_is_safe() for the pte level, and the {pmd,pud,pgd} > > > entries shouldn't change. > > > > > > Is the below sufficient to allow that, or have I missed something? > > > > I think it will be OK, but will double-check tomorrow. > > However, is is acceptable that create_pgd_mapping( __prot(0) ) can > > only handle the cases of page-mapping-only? > > That would be fine to kdump, but in general? Given we're only going to use this for page mappings, I think it's fine (and preferable) to restrict it to page mappings for now. Until we need to do this for the pmd/pud/pgd levels, those won't see any testing, and it will be very easy for us to accidentally break this. > My proposed code is attached below. > I think that the changes are quite trivial and it works even if > there is a section mapping as far as we refrain from reclaiming > unsed p[ug]d tables. > > (Of course, we can't merely unmap a subset of a section mapping here.) Sure. We have a similar restriction when changing permissions, so I think that's fine. > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 17243e43184e..7f96eabc99d7 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -140,7 +140,11 @@ static void alloc_init_pte(pmd_t *pmd, unsigned long addr, > __prot = prot; > } > > - set_pte(pte, pfn_pte(pfn, __prot)); > + if (pgprot_val(prot) & PTE_VALID) > + set_pte(pte, pfn_pte(pfn, __prot)); > + else > + pte_clear(null, null, pte); It took me a moment to figure out how this line could compile. ;) I'm happy to take this approach in alloc_init_pte(), but as above I'd prefer that we only handled it there, and left the pmd/pud/pgd code as-is for now. We can/should add a comment to make that clear. Thanks, Mark.