2009/9/30 Daniel Baluta <daniel.baluta@xxxxxxxxx>: > On Wed, Sep 30, 2009 at 7:24 PM, Chetan Nanda <chetannanda@xxxxxxxxx> wrote: >> >> >> On Wed, Sep 30, 2009 at 6:38 PM, Denis Borisevich <dennisfen@xxxxxxxxx> >> 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. > > This is not true. You only have to set "data_available" in mask and > return it. An upper > layer will take care about waking up the process that is waiting in wait-queue. > >> >> >>> >>> 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? > What about select without a timeout? Does the call ever return? With timeout set to NULL the call never returns. > Daniel. > -- Denis -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ