The oom-killer causes lockups because it calls-
cpuset_excl_nodes_overlap() with tasklist_lock read-locked.
cpuset_excl_nodes_overlap() gets cpuset_sem (or callback_sem in
later linux versions) semaphore, which might_sleep even if the
semaphore could be down without sleeping. If processes call
exit() or fork() when the oom-killer sleeps in the down(), they
lockup because they call write_lock_irq(&tasklist_lock).
The lockup occurred on linux-2.6.14. The problem also seems to exist
in linux-2.6.15-rc5-mm3 and linux-2.6.15-rc7.
Regards,