soft lockup on omap3 (dm3730)

Russell King - ARM Linux linux at arm.linux.org.uk
Wed Mar 7 11:37:50 EST 2012


On Wed, Mar 07, 2012 at 05:16:35PM +0100, jean-philippe francois wrote:
> Is the backtrace pointing to this offset because soft_lockup can only
> detect lockups at the output of critical sections ?

Correct - soft lockups on ARM can only be detected when hardware
interrupts are enabled.  Any region which masks hard interrupts
effectively prevents the soft lockup detector firing should
execution get stuck inside such a region.

> I don't know how to progress on this problem, any hint is welcome.
> 
> int omap3isp_video_queue_streamon(struct isp_video_queue *queue)
> {
>        struct isp_video_buffer *buf;
>        unsigned long flags;
> 
>        mutex_lock(&queue->lock);
> 
>        if (queue->streaming)
>                goto done;
> 
>        queue->streaming = 1;
> 
>        spin_lock_irqsave(&queue->irqlock, flags);
>        list_for_each_entry(buf, &queue->queue, stream) {
>                printk(KERN_INFO "inside list_for_each\n");
>                queue->ops->buffer_queue(buf);
>        }
>        spin_unlock_irqrestore(&queue->irqlock, flags);  <---- soft lockup
> says this is the culprit.

My guess is something inside buffer_queue() is responsible.  If things
get stuck for quite a period of time, the only thing I can suggest is
using printk() based debugging to try and find where things get stuck.



More information about the linux-arm-kernel mailing list