With oops tracing in IRC, we narrowed the problem in 2.4.x down to,
serial_cs and ide_cs drivers, and other 16-bit pcmcia drivers possibly,
call their release functions from a timer when ejected. The
per-subsystem release functions then proceed to do all manner of
in-process-context type work, including calling devfs_unregister, whose
call path can eventually cause a schedule()
Suggested fix, call schedule_task() in each timer-based release
function, to queue a task in process context to do the actual work.
This is how 32-bit cardbus gets such things done...
Jeff