Well I fixed it. Somehow kswapd_wait gets a bad entry in its task_list and it's always 0xffffffff8. So, putting a hack in __wake_up_common to look for that address and break out (since that always seems to be at the end of the list) fixed the problem. How odd. Of course I really should find out why that bad value gets in there, but I'm so lazy. Steve