[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: about sleeping again!!
Hi Jan,
It is possible that since I haven't done this wake up from user space,
I have this problem. I want to know as to how you wake up the internal
thread ? Is it thru a ioctl designed for the job ?
Advance thanks,
Pradeep
On Sat, 9 Feb 2002, Jan Hudec wrote:
> Hello,
>
> > I'd like to put to sleep or what ever a kernel module's function until a
> > user space app generate an event in another function in the module. I'd
> > like this function that have to sleep or what ever you say be reentrant.
> > I've been trying to do this a whole month, so.... I need help or I'll
> > lose my job :-D
>
> In what context this function runs? If in process, then it may never be
> reentered with the same current (ie. in the same task - different pthread
> thread has different current too). And it's the current that's inserted into
> waitqueue. If it should run... well, you can only wait in process context
> (kernel thread is a process context too).
>
> There can be any number of processes sleeping on one wait queue. One (global)
> waitqueue for given type of events should suffice. All the tasks waiting for
> it will wake up, one of them handles it, the others go back to sleep.
>
> To put a function to sleep, create a global wait queue head (via
> DECLARE_WAIT_QUEUE_HEAD macro). Then the function that sleeps will simply use
> the macro wait_event with &<this global wq head> as first arg and an expression
> that yields true when the function should wake up as second argument.
> Use wait_event_interruptible instead if you want to wake up on signal arrival
> too.
>
> In function, where events are recieved, you record the relevant data somewhere
> so the waiters can test them and simply wake_up(&<the global wq head>).
> That will wake them up all, those concernced (you must solve relevant SMP races
> et. al.) will handle it, the others will return to sleep.
>
> So far I can't see any problem. Maybe I missed your point.
>
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
IRC Channel: irc.openprojects.net / #kernelnewbies
Web Page: http://www.kernelnewbies.org/