Dave
Please go through my observation.
That makes the most sense at this point. This is what I was
planning for vm_init():
@@ -694,7 +708,8 @@ vm_init(void)
vt->PG_slab = 10;
else if (THIS_KERNEL_VERSION >= LINUX(2,6,0))
vt->PG_slab = 7;
- }
+ } else if (THIS_KERNEL_VERSION >= LINUX(2,6,0))
+ vt->PG_slab = 7;
}
here for the dump I was looking into vt->PG_slab needs to be set to 10
and not 7. as slab value was 1024 in dump_mem_map() function.
/*
>
>
>
> o The output is breaking as totalhigh_pages is coming out zero,
> So part of code in function dump_kmeminfo()
> pct = freehighmem_pages ?
> (freehighmem_pages * 100)/totalhigh_pages :
> 0;
> Cause Arithmetic calculation error.
>
> Still looking into the problem.
>
I can't reproduce this one. In your case though, with
about 500MB, both "freehighmem_pages" and "totalhigh_pages"
should both be zero, leading to a "pct" setting of 0.
Are you showing "freehighmem_pages" as non-zero?
Dave
I could see totalhigh_pages coming out zero which was the right thing
(As it was x86_64 machine) but freehighmem_pages came out as a non zero
quantity.
In function :dump_free_pages_zones_v2(). I could see vt->nr_zones as 4
which I feel is incorrect and hence it entered the block
if (i == ZONE_HIGHMEM) {
readmem(node_zones+
OFFSET(zone_free_pages),
KVADDR, &value,
sizeof(ulong),
"node_zones free_pages",
FAULT_ON_ERROR);
sum += value;
}
and sum was updated with a value and hence freehighmem_pages causing
Arithmetic exception
Regards
Sharyathi Nagesh