瀏覽代碼

cris: sync_serial: remove interruptible_sleep_on

sleep_on and its variants are racy and going away. This replaces
the two uses in the cris sync_serial drivers with the equivalent
but race-free wait_event_interruptible.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Mikael Starvik <starvik@axis.com>
Cc: linux-cris-kernel@axis.com
Signed-off-by: Jesper Nilsson <jespern@axis.com>
Arnd Bergmann 11 年之前
父節點
當前提交
329fddd7b6
共有 2 個文件被更改,包括 6 次插入2 次删除
  1. 3 1
      arch/cris/arch-v10/drivers/sync_serial.c
  2. 3 1
      arch/cris/arch-v32/drivers/sync_serial.c

+ 3 - 1
arch/cris/arch-v10/drivers/sync_serial.c

@@ -22,6 +22,7 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/mutex.h>
 #include <linux/mutex.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
+#include <linux/wait.h>
 #include <asm/irq.h>
 #include <asm/irq.h>
 #include <asm/dma.h>
 #include <asm/dma.h>
 #include <asm/io.h>
 #include <asm/io.h>
@@ -1136,7 +1137,8 @@ static ssize_t sync_serial_read(struct file *file, char *buf,
 		if (file->f_flags & O_NONBLOCK)
 		if (file->f_flags & O_NONBLOCK)
 			return -EAGAIN;
 			return -EAGAIN;
 
 
-		interruptible_sleep_on(&port->in_wait_q);
+		wait_event_interruptible(port->in_wait_q,
+					 !(start == end && !port->full));
 		if (signal_pending(current))
 		if (signal_pending(current))
 			return -EINTR;
 			return -EINTR;
 
 

+ 3 - 1
arch/cris/arch-v32/drivers/sync_serial.c

@@ -19,6 +19,7 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/spinlock.h>
 #include <linux/spinlock.h>
+#include <linux/wait.h>
 
 
 #include <asm/io.h>
 #include <asm/io.h>
 #include <dma.h>
 #include <dma.h>
@@ -1144,7 +1145,8 @@ static ssize_t sync_serial_read(struct file * file, char * buf,
 		if (file->f_flags & O_NONBLOCK)
 		if (file->f_flags & O_NONBLOCK)
 			return -EAGAIN;
 			return -EAGAIN;
 
 
-		interruptible_sleep_on(&port->in_wait_q);
+		wait_event_interruptible(port->in_wait_q,
+					 !(start == end && !port->full));
 		if (signal_pending(current))
 		if (signal_pending(current))
 			return -EINTR;
 			return -EINTR;