wait_event_interruptible & spinlock
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- Subject: wait_event_interruptible & spinlock
- From: nidhi mittal <nidhimittal19@xxxxxxxxx>
- Date: Tue, 28 Apr 2009 15:29:27 +0530
hi all
i am stuck here confused how to get out of this
i have this code kind of producer consumer code where consumer waits on wait queue
if some particular list of elements is empty
1.while(count=count_request < = 0)
2.{
3.
4.wait_event_interruptible(wq,count>0)
5.
6.}
there is a function
7. count_request()
8. {
9 take spinlock on list of elements
10. count elements
11. return count
12 . release spinlock
13 }
14. another producer function is
15. {
16 take spinlock
17 produce elements
18 wake_up_interruptible(wq)
19 release spinlock
20 }
now what happens is on line number 3 if count has come == 0
then my code shd sleep but before that
code transfers to producer
and code from line 14 to 20 is executed
and wake up at line 18 is lost
then code comes to consumer line 4 it sleeps and no one is there to wake it up ....
i thought that
there shd be some way that before consumer
leave spin lock to producer as it gets to know count == 0
it should sleep ...
but if it does that
take spin lock
count == 0
sleep till count >0
release spin lock
then how will spin lock be released??
and if
but if i do otherwise
take spin lock
count == 0
*release spin lock
*sleep
but here producer interrupts in between starred lines...
what to do pl help
--
Thanks & Regards
Nidhi
[Index of Archives]
[Newbies FAQ]
[Linux Kernel Mentors]
[Linux Kernel Development]
[IETF Annouce]
[Git]
[Networking]
[Security]
[Bugtraq]
[Yosemite]
[MIPS Linux]
[ARM Linux]
[Linux RAID]
[Linux SCSI]
[Linux ACPI]