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