Use schedule_timeout.
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Thu, 20 May 2010 22:27:09 +0000 (18:27 -0400)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Thu, 20 May 2010 22:27:09 +0000 (18:27 -0400)
hellochar.c

index c3f26dc..3830a47 100644 (file)
@@ -39,9 +39,11 @@ static int hello_open(struct inode *ino, struct file *fp)
 static ssize_t hello_read(struct file *fp, char __user *buf, size_t sz,
        loff_t *pos)
 {
-       unsigned long expire = jiffies + 5 * HZ;
-       while (time_after(expire, jiffies))
-               schedule();
+       unsigned long timeout = 5 * HZ;
+       while (timeout > 0) {
+               set_current_state(TASK_INTERRUPTIBLE);
+               timeout = schedule_timeout(timeout);
+       }
        return 0;
 }