Hi Florian On Thu, Jul 14, 2022 at 03:25:12PM -0700, Florian Fainelli wrote: > It is permissible for kernel code to call virt_to_phys() against virtual > addresses that are in KSEG0 or KSEG1 and we need to be dealing with both > types. Rewrite the test condition to ensure that the kernel virtual > addresses are above PAGE_OFFSET which they must be, and below KSEG2 > where the non-linear mapping starts. > > For EVA, there is not much that we can do given the linear address range > that is offered, so just return any virtual address as being valid. > > Finally, when HIGHMEM is not enabled, all virtual addresses are assumed > to be valid as well. > > Fixes: dfad83cb7193 ("MIPS: Add support for CONFIG_DEBUG_VIRTUAL") > Signed-off-by: Florian Fainelli <f.fainelli@xxxxxxxxx> No objections now. Thanks. Reviewed-by: Serge Semin <fancer.lancer@xxxxxxxxx> -Serge(y) > --- > Changes in v2: > > - handle lack of HIGHMEM and EVA > > arch/mips/mm/physaddr.c | 14 ++++---------- > 1 file changed, 4 insertions(+), 10 deletions(-) > > diff --git a/arch/mips/mm/physaddr.c b/arch/mips/mm/physaddr.c > index a1ced5e44951..f9b8c85e9843 100644 > --- a/arch/mips/mm/physaddr.c > +++ b/arch/mips/mm/physaddr.c > @@ -5,6 +5,7 @@ > #include <linux/mmdebug.h> > #include <linux/mm.h> > > +#include <asm/addrspace.h> > #include <asm/sections.h> > #include <asm/io.h> > #include <asm/page.h> > @@ -12,15 +13,6 @@ > > static inline bool __debug_virt_addr_valid(unsigned long x) > { > - /* high_memory does not get immediately defined, and there > - * are early callers of __pa() against PAGE_OFFSET > - */ > - if (!high_memory && x >= PAGE_OFFSET) > - return true; > - > - if (high_memory && x >= PAGE_OFFSET && x < (unsigned long)high_memory) > - return true; > - > /* > * MAX_DMA_ADDRESS is a virtual address that may not correspond to an > * actual physical address. Enough code relies on > @@ -30,7 +22,9 @@ static inline bool __debug_virt_addr_valid(unsigned long x) > if (x == MAX_DMA_ADDRESS) > return true; > > - return false; > + return x >= PAGE_OFFSET && (KSEGX(x) < KSEG2 || > + IS_ENABLED(CONFIG_EVA) || > + !IS_ENABLED(CONFIG_HIGHMEM)); > } > > phys_addr_t __virt_to_phys(volatile const void *x) > -- > 2.25.1 >