This function disables interrupts to take a spinlock. Then calls functions to free resources which will emit the warning when called with interrupts disabled.
void __sym_mfree_dma(m_pool_ident_t dev_dmat, void *m, int size, char *name)
{
unsigned long flags;
m_pool_p mp;
spin_lock_irqsave(&sym53c8xx_lock, flags);
mp = ___get_dma_pool(dev_dmat);
if (!mp) goto out; __sym_mfree(mp, m, size, name);
#ifdef SYM_MEM_FREE_UNUSED
if (!mp->nump) ___del_dma_pool(mp);
#endif
out: spin_unlock_irqrestore(&sym53c8xx_lock, flags);
}
Not sure whether the spinunlock might be simply moved up a bit. That might need some discussion with upstream and or testing. But the bug task could be moved to kernel. I guess the QEMU task can only be set to invalid.
It seems this is a problem in the symbios scsi driver which looks like being present in the same form upstream.
[ 271.732918] [<ffffffff8139a 109>] __sym_mfree_ dma+0x69/ 0x100
This function disables interrupts to take a spinlock. Then calls functions to free resources which will emit the warning when called with interrupts disabled.
void __sym_mfree_ dma(m_pool_ ident_t dev_dmat, void *m, int size, char *name)
{
unsigned long flags;
m_pool_p mp;
mp = ___get_
if (!mp)
#ifdef SYM_MEM_FREE_UNUSED
if (!mp->nump)
#endif
out:
}
Not sure whether the spinunlock might be simply moved up a bit. That might need some discussion with upstream and or testing. But the bug task could be moved to kernel. I guess the QEMU task can only be set to invalid.