I've got the wrstuden-revivesa branch to where kernels boot and almost work. A test program is running into an error that is "letting" me debug error handling. I'm running into a LOCKDEBUG error that makes no sense: printf("About to destroy sa_mutex %p\n", &sa->sa_mutex); mutex_destroy(&sa->sa_mutex); printf("Did destroy sa_mutex %p\n", &sa->sa_mutex); pool_put(&sadata_pool, sa); is triggering a lockdebug error that "sa" contains a still-active lock. I'm attaching a screen shot of the problem seen running in VM Fusion. The deal is that the lock that's causing the problem, 0xcbbe6f78, is the very lock that was passed to mutex_destroy(). I have printfs before and after the destroy showing that it sure looks like it was zapped. I further tweaked lockdebug_free() as follows: lockdebug_lock_cpus(); rb_tree_remove_node(&ld_rb_tree, __UNVOLATILE(&ld->ld_rb_node)); lockdebug_unlock_cpus(); if (lockdebug_moredebug) printf("freeing lock info for lock %p, node %p\n", lock, __UNVOLATILE(&ld->ld_rb_node)); ld->ld_lock = NULL; and I had sa_release set lockdebug_moredebug to 1. You can see that the printf triggers in the screenshot when we were cleaning up the mutex in the savp structure a few lines above. Here's the green-text output hand-transcribed for the ASCII readers amoung us (including myself): freeing lock info for lock 0xcbbe7f80, node 0xcbc05ba4 About to destroy sa_mutex 0xcbbe6f78 Did destroy sa_mutex 0xcbbe6f78 Mutex error: pool_did_put: allocation contains active lock lock address : 0x00000000cbbe6f78 type : spin initialized : 0x00000000c045327b shared holds : 0 exclusive: 0 shared wanted: 0 exclusive: 0 current cpu : 1 last held: 0 current lwp : 0x00000000cbb57360 last held: 0000000000000000 last locked : 000000000000000000 unlocked : 0000000000000000 owner field : 0x00000000fffffff0 wait/spin: 0/0 Thoughts? From looking at the lockdebug output, it sure looks like we destroyed the lock. I don't see how we destroyed it w/o calling lockdebug_free(), and I don't see how it didn't complain about a problem. My test machine is VMFusion with two CPUs configured running on a Core Duo Macbook Pro. Take care, Bill
Attachment:
revSAPanic.png
Description: PNG image
Attachment:
pgpYJdh9UIAuj.pgp
Description: PGP signature