On Thu, Aug 9, 2012 at 1:23 AM, [off-list ref] wrote:
From: Qiang Liu <redacted>
The use of spin_lock_irqsave() is a stronger locking mechanism than is
required throughout the driver. The minimum locking required should be
used instead. Interrupts will be turned off and context will be saved,
there is needless to use irqsave.
Change all instances of spin_lock_irqsave() to spin_lock_bh().
All manipulation of protected fields is done using tasklet context or
weaker, which makes spin_lock_bh() the correct choice.
It seems you are coordinating fsl-dma copy and talitos xor operations.
It looks like fsl-dma will be called through
talitos_process_pending()->dma_run_dependencies(), which is
potentially called in hard irq context.
This all comes back to the need to fix raid offload to manage the
channels explicitly rather than the current dependency chains.
--
Dan