Messages in this thread | | | Subject | Re: [PATCH] arm: Extend the check for RAM in /dev/mem | From | Anshuman Khandual <> | Date | Fri, 12 Jul 2019 08:06:43 +0530 |
| |
On 07/12/2019 03:51 AM, KarimAllah Ahmed wrote: > Some valid RAM can live outside kernel control (e.g. using mem= kernel > command-line). For these regions, pfn_valid would return "false" causing > system RAM to be mapped as uncached. Use memblock instead to identify RAM.
Once the remaining memory is outside of the kernel (as the admin would have intended with mem= command line) what is the particular concern regarding the way those get mapped (cached or not) ? It is not to be used any way.
> > Cc: Russell King <linux@armlinux.org.uk> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will@kernel.org> > Cc: Mike Rapoport <rppt@linux.ibm.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Anders Roxell <anders.roxell@linaro.org> > Cc: Enrico Weigelt <info@metux.net> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: KarimAllah Ahmed <karahmed@amazon.de> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: James Morse <james.morse@arm.com> > Cc: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Jun Yao <yaojun8558363@gmail.com> > Cc: Yu Zhao <yuzhao@google.com> > Cc: Robin Murphy <robin.murphy@arm.com> > Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de> > --- > arch/arm/mm/mmu.c | 2 +- > arch/arm64/mm/mmu.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c > index 1aa2586..492774b 100644 > --- a/arch/arm/mm/mmu.c > +++ b/arch/arm/mm/mmu.c > @@ -705,7 +705,7 @@ static void __init build_mem_type_table(void) > pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, > unsigned long size, pgprot_t vma_prot) > { > - if (!pfn_valid(pfn)) > + if (!memblock_is_memory(__pfn_to_phys(pfn))) > return pgprot_noncached(vma_prot); > else if (file->f_flags & O_SYNC) > return pgprot_writecombine(vma_prot); > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 3645f29..cdc3e8e 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -78,7 +78,7 @@ void set_swapper_pgd(pgd_t *pgdp, pgd_t pgd) > pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, > unsigned long size, pgprot_t vma_prot) > { > - if (!pfn_valid(pfn)) > + if (!memblock_is_memory(__pfn_to_phys(pfn)))
pfn_valid() on arm64 checks if the memblock region is mapped i.e does it have a linear mapping or not. If a segment of RAM is outside linear mapping due to mem= directive and lacks a linear mapping then why should it be mapped similarly like system RAM on this path ?
| |