----- 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