Ok, here's try number 4. This one fixes the race condition that Dipankar pointed out, and modifies the release_nmi() call to block until the rcu finishes. I have noticed that the rcu callback can be delayed a long time, sometimes up to 3 seconds. That seems odd. I have verified that the delay happens there. Also, does the __wait_for_event() code in release_nmi() need any memory barriers? Also, the code in traps.c is pretty generic. Perhaps it could be moved to a common place? Or is that worth it? Thanks again, -Corey