----- Original Message ----- > > So I don't understand how you got into a loop unless the kmem_cache list > walk-through is the real problem. If you were to print out the "cache" > address each time through the do-while loop, does the list start repeating > itself? > > And if that's true, perhaps the kmem_cache_init() should use the > hq_open()/hq_enter()/hq_close() facility on each cache address to > catch a duplicate (false) entry. > > Dave As a side issue, you have pinpointed a potential problem area if the first readmem() does fail, because in that case it should "continue" instead of using the invalid "shared" value in the second readmem(): if (readmem(start_address[i] + OFFSET(kmem_list3_shared), KVADDR, &shared, sizeof(void *), "kmem_list3 shared", RETURN_ON_ERROR|QUIET)) { if (!shared) break; } if (readmem(shared + OFFSET(array_cache_limit), KVADDR, &limit, sizeof(int), "shared array_cache limit", RETURN_ON_ERROR|QUIET)) { if (limit > max_limit) max_limit = limit; break; } But again, I don't see that having anything to do with your problem. And in all practical circumstances, that first readmem() should never fail, even though it is allowable. I'll fix that... Dave -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility