Re: wait_event_interruptible & spinlock

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

 



El Tue, Apr 28, 2009 at 03:29:27PM +0530 nidhi mittal ha dit:

>    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.}

one problem is that count is a variable and will never have a
value > 0 once you entered the loop. in consequence the wakup
condition will never be fullfilled, even if count_request() would
return a value > 0

i don't know your real code, but it looks to me that the while loop
isn't what you really want. i suppose you just mean:

wait_event_interruptible(wq, count_request() > 0)

the main difference to your version is that the element count is
reevaluated by calling count_request() when the process wakes up.

>    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 }

i hope in the real code you release the spinlock before returning from
the function

-- 
Matthias Kaehlcke
Embedded Linux Engineer
Barcelona

             You must have a plan. If you don't have a plan,
               you'll become part of somebody else's plan
                                                                 .''`.
    using free software / Debian GNU/Linux | http://debian.org  : :'  :
                                                                `. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4                  `-

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[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