On Wed, May 14, 2014 at 07:03:59AM +0100, Wang Nan wrote: > This patch makes sure the argument of __phys_to_virt is a valid physical > address when clear lowmem memory maps. > > The last few lines prepare_page_table() clear page mapping in the gap > between largest low physical memory and the upper bound of lowmem. It > uses __phys_to_virt(end) to calculate virtual address from where the > clearing start. > > However, if the platform uses private nonliner __phys_to_virt(), 'end' > may goes into another mapping region. > > This patch uses __phys_to_virt(end - 1) + 1 for insurance purposes. > > Signed-off-by: Wang Nan <wangnan0@xxxxxxxxxx> > Cc: Geng Hui <hui.geng@xxxxxxxxxx> > Cc: Will Deacon <will.deacon@xxxxxxx> > --- > arch/arm/mm/mmu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c > index b68c6b2..87340ee 100644 > --- a/arch/arm/mm/mmu.c > +++ b/arch/arm/mm/mmu.c > @@ -1217,7 +1217,7 @@ static inline void prepare_page_table(void) > * Clear out all the kernel space mappings, except for the first > * memory bank, up to the vmalloc region. > */ > - for (addr = __phys_to_virt(end); > + for (addr = __phys_to_virt(end - 1) + 1; > addr < VMALLOC_START; addr += PMD_SIZE) > pmd_clear(pmd_off_k(addr)); This looks correct to me, but I'd be interested to know which platform this is falling over on. Only realview seems to override __phys_to_virt and I don't think we want to add more of that if we can help it. Will _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/linux-arm-kernel