Hi all,

I am working on driver locking schemes provided in Linux.
I am doing that with no device just to a handle memory buffer i.e.
just like scull device.

I am not able to get one way of sleeping to work. I am trying out as
said in LLD3.
Please find the code snippets of read/write method implementation of
char driver to demostate a sleep and wakeup:
The write method is:

static DECLARE_WAIT_QUEUE_HEAD(muk_wait);
static DECLARE_WAIT_QUEUE_HEAD(muk_wr_wait);
wait_queue_t my_wait; /* init_wait(&my_wait) in mod init */

ssize_t muk_write(struct file *filp, char const *buff, size_t count,
                        loff_t *f_pos)
{
   prepare_to_wait(&muk_wr_wait, &my_wait, TASK_INTERRUPTIBLE);
   schedule();
   finish_wait(&muk_wr_wait, &my_wait);
}

and the read method is as follows:
ssize_t muk_read(struct file *filp, char *buff, size_t count, loff_t *f_pos)
{
   write =FULL;
   wake_up_interruptible(&muk_wr_wait);
   return 0;
}

Whats heppens is:
when I call my write first, it blocks up expected at schedule as it
gives the processor way to CPU.
But when I try to get the control back with a wakeup call from read,
it is not able to wake the slepping Write process up. where am I
missing?

Regards,
Bhanu J

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