Fix for Linux 5.4-rc1 and later kernels that contain commit

688fcbfc06e4fdfbb7e1d5a942a1460fe6379d2d, titled "mm/vmalloc:
modify struct vmap_area to reduce its size".  Without the
patch "kmem -v" will display nothing; other architectures
that utilize the vmap_area_list to determine the base of
mapped/vmalloc address space will fail.
(anderson@redhat.com)
This commit is contained in:
Dave Anderson 2019-10-10 14:07:22 -04:00
parent da9fb637e3
commit 105a3e1316

View File

@ -401,9 +401,10 @@ vm_init(void)
STRUCT_SIZE_INIT(vmap_area, "vmap_area");
if (VALID_MEMBER(vmap_area_va_start) &&
VALID_MEMBER(vmap_area_va_end) &&
VALID_MEMBER(vmap_area_flags) &&
VALID_MEMBER(vmap_area_list) &&
VALID_MEMBER(vmap_area_vm) &&
(VALID_MEMBER(vmap_area_flags) ||
(OFFSET(vmap_area_vm) == MEMBER_OFFSET("vmap_area", "purge_list"))) &&
kernel_symbol_exists("vmap_area_list"))
vt->flags |= USE_VMAP_AREA;
@ -8742,7 +8743,7 @@ static void
dump_vmap_area(struct meminfo *vi)
{
int i, cnt;
ulong start, end, vm_struct, flags;
ulong start, end, vm_struct, flags, vm;
struct list_data list_data, *ld;
char *vmap_area_buf;
ulong size, pcheck, count, verified;
@ -8790,9 +8791,15 @@ dump_vmap_area(struct meminfo *vi)
readmem(ld->list_ptr[i], KVADDR, vmap_area_buf,
SIZE(vmap_area), "vmap_area struct", FAULT_ON_ERROR);
flags = ULONG(vmap_area_buf + OFFSET(vmap_area_flags));
if (flags != VM_VM_AREA)
continue;
if (VALID_MEMBER(vmap_area_flags)) {
flags = ULONG(vmap_area_buf + OFFSET(vmap_area_flags));
if (flags != VM_VM_AREA)
continue;
} else {
vm = ULONG(vmap_area_buf + OFFSET(vmap_area_vm));
if (!vm)
continue;
}
start = ULONG(vmap_area_buf + OFFSET(vmap_area_va_start));
end = ULONG(vmap_area_buf + OFFSET(vmap_area_va_end));
vm_struct = ULONG(vmap_area_buf + OFFSET(vmap_area_vm));