wait_event_interruptible & spinlock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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]
  Powered by Linux