Update s390x_vr_IS_VMALLOC_ADDR() to include a non-zero vmalloc_start
check, making it consistent with s390x_generic_IS_VMALLOC_ADDR().
Fixes: d0164e7e480a ("s390x: uncouple physical and virtual memory spaces")
Signed-off-by: Mikhail Zaslonko <zaslonko(a)linux.ibm.com>
---
 s390x.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/s390x.c b/s390x.c
index 0e8e2b3..1117bf0 100644
--- a/s390x.c
+++ b/s390x.c
@@ -724,13 +724,13 @@ static ulong s390x_vr_PTOV(ulong paddr)
 {
 	return paddr + machdep->identity_map_base;
 }
 
 static int s390x_vr_IS_VMALLOC_ADDR(ulong vaddr)
 {
-	return (vaddr >= vt->vmalloc_start && vaddr < machdep->kvbase);
+	return (vt->vmalloc_start && vaddr >= vt->vmalloc_start &&
vaddr < machdep->kvbase);
 }
 
 ulong s390x_VTOP(ulong vaddr)
 {
 	return machdep->machspec->virt_to_phys(vaddr);
 }
-- 
2.49.0
    
    
    
 
                    
                    
                        
                        Show replies by date
                        
                    
                    
                    
                        
                            
                
                
                    
                    
                    
     
    
Since s390x IS_VMALLOC_ADDR() callback functions include non-zero
vmalloc_start check we can drop it from s390x_kvtop().
Signed-off-by: Mikhail Zaslonko <zaslonko(a)linux.ibm.com>
---
 s390x.c | 5 -----
 1 file changed, 5 deletions(-)
diff --git a/s390x.c b/s390x.c
index 1117bf0..25dca5e 100644
--- a/s390x.c
+++ b/s390x.c
@@ -943,17 +943,12 @@ s390x_kvtop(struct task_context *tc, ulong vaddr, physaddr_t *paddr,
int verbose
 
 	if (!IS_KVADDR(vaddr)){
 		*paddr = 0;
 		return FALSE;
 	}
 
-	if (!vt->vmalloc_start) {
-	       *paddr = VTOP(vaddr);
-	       return TRUE;
-	}
-
 	if (!IS_VMALLOC_ADDR(vaddr)) {
 	       *paddr = VTOP(vaddr);
 	       return TRUE;
 	}
 
 	pgd_base = (unsigned long)vt->kernel_pgd[0];
-- 
2.49.0
    
    
    
 
                    
                 
                
                
                    
                    
                    
     
    
In s390x_kvtop() early return may take place despite the verbose
flag. Thus we can miss page-table walk information in the vtop output
for kernel virtual addresses.
Make sure that s390x_vtop() is always called for kernel virtual addresses
when the verbose flag is passed to s390x_kvtop() by do_vtop().
Suggested-by: Heiko Carstens <hca(a)linux.ibm.com>
Signed-off-by: Mikhail Zaslonko <zaslonko(a)linux.ibm.com>
---
 s390x.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/s390x.c b/s390x.c
index 25dca5e..77d9082 100644
--- a/s390x.c
+++ b/s390x.c
@@ -943,15 +943,15 @@ s390x_kvtop(struct task_context *tc, ulong vaddr, physaddr_t *paddr,
int verbose
 
 	if (!IS_KVADDR(vaddr)){
 		*paddr = 0;
 		return FALSE;
 	}
 
-	if (!IS_VMALLOC_ADDR(vaddr)) {
-	       *paddr = VTOP(vaddr);
-	       return TRUE;
+	if (!verbose && !IS_VMALLOC_ADDR(vaddr)) {
+		*paddr = VTOP(vaddr);
+		return TRUE;
 	}
 
 	pgd_base = (unsigned long)vt->kernel_pgd[0];
 	return s390x_vtop(pgd_base, vaddr, paddr, verbose);	
 }
 
-- 
2.49.0