{
struct scull_dev *dev = (void *)data;
+ dev->readable=1;
wake_up_interruptible(&dev->inq);
mod_timer( &dev->timer_inq, jiffies + msecs_to_jiffies(GIOVA_SLEEP) );
{
struct scull_dev *dev = (void *)data;
+ dev->writable=1;
wake_up_interruptible(&dev->outq);
mod_timer( &dev->timer_outq, jiffies + msecs_to_jiffies(GIOVA_SLEEP) );
}
struct scull_dev *dev;
dev_t key;
- if (!current->tgid) {
- printk("Process \"%s\" has no tgid\n", current->comm);
+ if (!current->pid) {
+ printk("Process \"%s\" has no pid\n", current->comm);
return -EINVAL;
}
- key = current->tgid;
+ key = current->pid;
/* look for a scullc device in the list */
spin_lock(&scull_c_lock);
{
struct scull_dev *dev = filp->private_data;
- DEFINE_WAIT(wait);
- prepare_to_wait(&dev->inq, &wait, TASK_INTERRUPTIBLE);
- schedule();
- finish_wait(&dev->inq, &wait);
+ //DEFINE_WAIT(wait);
+ //prepare_to_wait(&dev->inq, &wait, TASK_INTERRUPTIBLE);
+ //schedule();
+ //finish_wait(&dev->inq, &wait);
//memset(buf, 255, count);
+ wait_event_interruptible(dev->inq, dev->readable);
+ dev->readable=0;
return count;
}
loff_t *f_pos)
{
struct scull_dev *dev = filp->private_data;
- DEFINE_WAIT(wait);
- prepare_to_wait(&dev->outq, &wait, TASK_INTERRUPTIBLE);
- schedule();
- finish_wait(&dev->outq, &wait);
+ //DEFINE_WAIT(wait);
+ //prepare_to_wait(&dev->outq, &wait, TASK_INTERRUPTIBLE);
+ //schedule();
+ //finish_wait(&dev->outq, &wait);
+
+ wait_event_interruptible(dev->outq, dev->writable);
+ dev->writable=0;
return count;