From: Kyle S. <ksc...@fo...> - 2008-06-05 18:28:46
|
On Thu, 2008-06-05 at 10:50 -0700, Dave Hylands wrote: > Hi Kyle, > > On Thu, Jun 5, 2008 at 7:52 AM, Kyle Schlansker > <ksc...@fo...> wrote: > > Hello fellow gumstix developers, > > > > I'm writing data to /media/ram but every time I do an 'ls' to view the > > files that are written, it hangs for 10 seconds or so and then I get the > > error: > > > > "BUG: soft lockup on CPU#0" detected > > What this really means is that no context switches have occurred for > the last 10 seconds. Interrupts are still enabled (since the timer > tick that causes this message to get printed originates from the timer > tick interrupt). Typically it means that there is a bug in a driver > somewhere, or you have a priority 99 realtime task which is consuming > 100% of the CPU. Hi Dave, Thanks for the insight. It's probably something in my driver that's taking up the time. I've pasted the interrupt handler from my driver below. Could you take a quick scan and see if there's any glaring issues? irqreturn_t _i2s_svc_rx_int(int irq, void *dev_id) { // make sure we aren't interrupted while servicing the previous int _saimr_rx_int_disable(); int i = 0; unsigned int sample; // get the number of samples in the hardware fifo unsigned int sample_count = _sasr_get_rx_level(); if(sample_count) { for(; i < sample_count; i++) { // read sample from hardware fifo and store in local buffer sample = SADR; kfifo_put(fifo, (unsigned char *)&sample, sizeof(sample)); } // wake up any callers blocking in i2s_read wake_up_interruptible(&i2s_data_q); } // turn ints back on _saimr_rx_int_enable(); return IRQ_HANDLED; } Thanks! -- kyle |