I think I may have uncovered a bug in the floppy driver while getting
it to work on Xen. The problem is that vfree() may get called in
softirq context, via the following backtrace:
vfree
fd_dma_mem_free
floppy_release_irq_and_dma
set_dor
motor_off_callback
On native i386, this would normally happen only if the driver has
entered virtual dma mode; usually it uses free_pages() which is safe
from irq context. On Xen we always PIO, so this triggered rather
easily. I'd have thought it would for architectures like m68k as well
(also only does virtual dma).
For now I'll fix it by doing __get_free_pages/free_pages, but I wonder
if the grab/release calls in floppy.c should be deferred on a work
queue or something like that?
-- Keir