[Crash-utility] ramdump support for va_bits_actual

Dave Anderson anderson at redhat.com
Fri Apr 17 16:32:45 UTC 2020



----- Original Message -----
> Hi Dave,
> 
> Noticed that raw ramdumps of 5.4 kernel aren't working with crash tip.
> With the patches attached, I could get it working. Please take a look.
> 
> Thanks,
> Vinayak
> 

Hi Vinayak,

A couple quick questions come to mind...  

First, I haven't checked all possible READMEM plugins, but for example, if this 
function is run on a live system, the -1 file descriptor would cause the READMEM()
call to fail:

 static void
+arm64_calc_physvirt_offset(void)
+{
+       struct machine_specific *ms = machdep->machspec;
+       ulong physvirt_offset;
+       struct syment *sp;
+
+       ms->physvirt_offset = ms->phys_offset - ms->page_offset;
+
+       if ((sp = kernel_symbol_search("physvirt_offset")) &&
+                       machdep->machspec->kimage_voffset) {
+               if (READMEM(-1, &physvirt_offset, sizeof(physvirt_offset),
+                       sp->value, sp->value -
+                       machdep->machspec->kimage_voffset) > 0) {
+                               ms->physvirt_offset = physvirt_offset;
+               }
+       }
+
+       if (CRASHDEBUG(1))
+               fprintf(fp, "using %lx as physvirt_offset\n", ms->physvirt_offset);
+}

And here -- are you missing some brackets?  (run "make warn")

But regardless of that, why are you setting it back to 48 if it's greater than 48? 

diff --git a/arm64.c b/arm64.c
index 31d6e90..04efc13 100644
--- a/arm64.c
+++ b/arm64.c
@@ -4011,6 +4011,7 @@ arm64_calc_virtual_memory_ranges(void)
 	struct machine_specific *ms = machdep->machspec;
 	ulong value, vmemmap_start, vmemmap_end, vmemmap_size, vmalloc_end;
 	char *string;
+	int ret;
 	ulong PUD_SIZE = UNINITIALIZED;
 
 	if (!machdep->machspec->CONFIG_ARM64_VA_BITS) {
@@ -4018,6 +4019,12 @@ arm64_calc_virtual_memory_ranges(void)
 			value = atol(string);
 			free(string);
 			machdep->machspec->CONFIG_ARM64_VA_BITS = value;
+		} else if (kt->ikconfig_flags & IKCONFIG_AVAIL) {
+			if ((ret = get_kernel_config("CONFIG_ARM64_VA_BITS",
+					&string)) == IKCONFIG_STR)
+				machdep->machspec->CONFIG_ARM64_VA_BITS = atol(string);
+				if (machdep->machspec->CONFIG_ARM64_VA_BITS > 48)
+					machdep->machspec->CONFIG_ARM64_VA_BITS = 48;
 		}
 	}
 
Thanks,
  Dave 




More information about the Crash-utility mailing list