> >> Are you trying to use the mutex during a interrupt handler as you > >> can't you need something atomic or not able to sleep like a spinlock. > >> Nick > > > > I use mutex during FIFO burst write or burst read. I don't want other > processes to mess up the FIFO access. > > spinlock is not for long interval I understand. > > Chan > > > That's during interrupt context. What you need to do is offload the data into > main memory during interrupt context and lock with a spinlock. Afterwards > you can use a mutex around the main work function called after the interrupt. > Nick
I believe I lock_mutex and unlock_mutex are called in the process context. Both for transmission and for reception (rx is from softirq, it's ok.). It's only that the process is woken up by the interrupt routine. (ISR calls wake_up_interruptible). ISR doesn't lock or unlock any mutex. Chan 보낸 사람 : "nick" <[email protected]> 보낸 날짜 : 2015-06-05 21:40:20 ( +09:00 ) 받는 사람 : 김찬 <[email protected]>, [email protected] <[email protected]> 참조 : 제목 : Re: I want to sleep while holding a mutex On 2015-06-05 08:37 AM, 김찬 wrote: > >> Are you trying to use the mutex during a interrupt handler as you can't you >> need something atomic or not able to sleep like a spinlock. >> Nick > > I use mutex during FIFO burst write or burst read. I don't want other > processes to mess up the FIFO access. > spinlock is not for long interval I understand. > Chan > That's during interrupt context. What you need to do is offload the data into main memory during interrupt context and lock with a spinlock. Afterwards you can use a mutex around the main work function called after the interrupt. Nick > ________________________________ > 보낸 사람 : "nick" > 보낸 날짜 : 2015-06-05 21:34:25 ( +09:00 ) > 받는 사람 : 김찬 , [email protected] > 참조 : > 제목 : Re: I want to sleep while holding a mutex > > > > On 2015-06-05 08:30 AM, Chan Kim wrote: >> Hello, >> I need to write to and read from a Ethernet chip's FIFO and for that I want >> to use DMA controller. So I modified an existing driver and made the process >> to sleep using wait_event_interruptible after triggering DMA transfer and >> made it woken up by ISR using wake_up_interruptible. My problem is that the >> original driver was using spinlock to protect the FIFO access. But as all >> know, while holding spinlock, I should not sleep. So I tried replacing >> spinlock with mutex. (Because, I might sleep while acquiring the mutex, and >> after getting the mutex, I'll sleep again after DMA trigger. I get woken up >> by the ISR, and I'll release the mutex. No problem! I thought. ) But I still >> get this 'scheduling while atomic BUG'. The question is : I need to go to >> sleep until DMA completion while holding a lock (for FIFO read and write). >> Isn't it ok to sleep while holding a mutex? >> Best regards, >> Chan Kim >> _______________________________________________ >> Kernelnewbies mailing list >> [email protected] >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >> > Are you trying to use the mutex during a interrupt handler as you can't you > need something > atomic or not able to sleep like a spinlock. > Nick > _______________________________________________ Kernelnewbies mailing list [email protected] http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
