2009/9/30 Chetan Nanda <[email protected]>:
>
>
> On Wed, Sep 30, 2009 at 6:38 PM, Denis Borisevich <[email protected]>
> wrote:
>>
>> Hi!
>> I want to use poll() functionality (to properly handle select() and
>> poll() syscalls) in my char-device driver. The code for my kernel-side
>> poll() function is (a little bit simplified):
>>
>> unsigned int my_poll(struct file *filp, struct poll_table_struct *wait)
>> {
>>        unsigned int mask=0;
>>        unsigned long flags;
>>
>>        poll_wait(filp, my_wait_queue, wait);
>>
>>        if ( any_data_available > 0)
>>                mask |= POLLIN | POLLRDNORM;
>>
>>        return mask;
>> }
>>
>> Where "my_wait_queue" is of "wait_queue_head_t" type,
>> "any_data_available" if the flag which tells if any data is available
>> within internal buffer.
>>
> When you are setting 'any_data_available' variable to some positive values
> at the same place you have to wakeup process that is waiting in wait-queue.
> May be this part is missing in your current code and because of that select
> is not retuning before timeout.
Thank you for the answer. I got the point. I used this approach when I
was implementing read() function in this driver. But in that case I've
put the process to sleep manually by wait_event() call. Why do we need
this poll_wait() function if we can use wait_event()? I don't see any
conveniences which it could give. Or do I miss something?
>>
>> When I load this driver and start user-space application wich calls
>> select() with 5 seconds timeout the select() returns after waiting
>> this timeout no matter when the data comes into the port (1,2,3
>> seconds). The return value is positive when the data available and 0
>> when no data comes, as it should be. The question is why select()
>> waits for the timeout even when data is available?
>>
>> --
>> Denis
>>
> Thanks,
> Chetan Nanda

--
Denis

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [email protected]
Please read the FAQ at http://kernelnewbies.org/FAQ

Reply via email to