Warning: sym53c8xx calls dma_free_coherent() with irqs disabled
When unloading, sym53c8xx calls dma_free_coherent() while holding a spinlock (sym53c8xx_lock) with irqs disabled, which produces the following warning with 2.6.24:
modprobe sym53c8xx
modprobe -r sym53c8xx
sym0: detaching ...
sym0: resetting chip
WARNING: at arch/x86/kernel/pci-dma_32.c:66 dma_free_coherent() Pid: 682, comm: rmmod Not tainted 2.6.24-rc8-git5 #1 [<c0107a05>] dma_free_coherent+0x95/0xa0 [<d0942066>] ___free_dma_mem_cluster+0x46/0x70 [sym53c8xx] [<d0941f0d>] __sym_mfree+0x6d/0xc0 [sym53c8xx] [<c010ec6c>] smp_call_function+0x1c/0x20 [<c01209c8>] on_each_cpu+0x28/0x40 [<d094232e>] __sym_mfree_dma+0x5e/0xb0 [sym53c8xx] [<d093d510>] sym_hcb_free+0x70/0x170 [sym53c8xx] [<d09389dc>] sym_free_resources+0x3c/0x70 [sym53c8xx] [<d093a06c>] sym_detach+0x8c/0xb0 [sym53c8xx] [<d093a0b9>] sym2_remove+0x29/0x50 [sym53c8xx] [<c01d5316>] pci_device_remove+0x16/0x40 [<c0223498>] __device_release_driver+0x68/0xb0 [<c02239a4>] driver_detach+0xa4/0xb0 [<c0222f83>] bus_remove_driver+0x73/0xa0 [<c01d549e>] pci_unregister_driver+0xe/0x70 [<d0942dd0>] sym2_exit+0x0/0x7d [sym53c8xx] [<d0942dda>] sym2_exit+0xa/0x7d [sym53c8xx] [<c013e51b>] sys_delete_module+0x11b/0x1b0 [<c0112dd9>] do_page_fault+0xe9/0x640 [<c0154207>] do_munmap+0x197/0x1f0 [<c0102a7e>] sysenter_past_esp+0x5f/0x85 [<c02f0000>] __lro_proc_segment+0x130/0x300 =======================
However, everything does work OK at least on i386; the warning is for portability to other archs (ARM and MIPS). This warning was added in 2.6.24-rc1, so the message does not appear in 2.6.23, although it is not really a regression. This appears non-trivial to fix, since the spinlock protects access to higher-level data structures.
Tony Battersby
Cybernetics
Quoted 3 lines · Tony Battersby
When unloading, sym53c8xx calls
dma_free_coherent()while holding a spinlock (sym53c8xx_lock) with irqs disabled, which produces the following warning with 2.6.24:
Ugh. I'm slightly torn. On the one hand, it's probably possible to fix sym_malloc. On the other hand, it's really long past time that sym2 dropped its custom allocator and started using dma pools.
I'll take a look at converting to dma pools once I've got half a dozen other projects that're higher priority out of the way ;-(
In any case thanks for the report.
Signature · 4 lines
Intel are signing my paycheques ... these opinions are still mine "Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step."