diff --git a/memory.c b/memory.c index 333d6e1..7a4c3ce 100755 --- a/memory.c +++ b/memory.c @@ -8306,7 +8306,13 @@ dump_kmem_cache(struct meminfo *si) si->addrlist = (ulong *)GETBUF((vt->kmem_max_c_num+1) * sizeof(ulong)); cnt = 0; - si->cache = cache_cache = symbol_value("cache_cache"); + if (si->flags & CACHE_SET) { + readmem(si->cache+OFFSET(kmem_cache_s_c_nextp), + KVADDR, &cache_cache, sizeof(ulong), + "kmem_cache next", FAULT_ON_ERROR); + } else { + si->cache = cache_cache = symbol_value("cache_cache"); + } if (si->flags & ADDRESS_SPECIFIED) { if (!(p1 = vaddr_to_kmem_cache(si->spec_addr, kbuf, VERBOSE))) { @@ -8512,7 +8518,13 @@ dump_kmem_cache_percpu_v1(struct meminfo *si) GETBUF(vt->kmem_max_limit * sizeof(ulong)); cnt = 0; - si->cache = cache_cache = symbol_value("cache_cache"); + if (si->flags & CACHE_SET) { + readmem(si->cache+OFFSET(kmem_cache_s_next), + KVADDR, &cache_cache, sizeof(ulong), + "kmem_cache_s next", FAULT_ON_ERROR); + } else { + si->cache = cache_cache = symbol_value("cache_cache"); + } if (si->flags & ADDRESS_SPECIFIED) { if (!(p1 = vaddr_to_kmem_cache(si->spec_addr, kbuf, VERBOSE))) {