Nicholas Piggin <[email protected]> writes: > create_physical_mapping expects physical addresses, but creating and > splitting these mappings after boot is supplying virtual (effective) > addresses. This can be hit by booting with limited memory then probing > new physical memory sections. > > Cc: Reza Arbab <[email protected]> > Fixes: 6cc27341b21a8 ("powerpc/mm: add radix__create_section_mapping()") > Signed-off-by: Nicholas Piggin <[email protected]>
This is not catastrophic because create_physical_mapping() just uses start/end to construct virtual addresses anyway, and __va(__va(x)) == __va(x) ? Although we do pass those through as region_start/end which then go to memblock_alloc_try_nid(). But I guess that doesn't happen after boot, which is the case you're talking about. So I think looks good, change log could use a bit more detail though :) cheers > diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c > b/arch/powerpc/mm/book3s64/radix_pgtable.c > index b4ca9e95e678..c5cc16ab1954 100644 > --- a/arch/powerpc/mm/book3s64/radix_pgtable.c > +++ b/arch/powerpc/mm/book3s64/radix_pgtable.c > @@ -902,7 +902,7 @@ int __meminit radix__create_section_mapping(unsigned long > start, unsigned long e > return -1; > } > > - return create_physical_mapping(start, end, nid); > + return create_physical_mapping(__pa(start), __pa(end), nid); > } > > int __meminit radix__remove_section_mapping(unsigned long start, unsigned > long end) > -- > 2.20.1
