Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0955e14 authored by Jiri Slaby's avatar Jiri Slaby Committed by Linus Torvalds
Browse files

Char: genrtc, use wait_event_interruptible



genrtc, use wait_event_interruptible

Signed-off-by: default avatarJiri Slaby <jirislaby@gmail.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: Roman Zippel <zippel@linux-m68k.org>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 6804396f
Loading
Loading
Loading
Loading
+5 −17
Original line number Diff line number Diff line
@@ -173,7 +173,6 @@ static void gen_rtc_interrupt(unsigned long arg)
static ssize_t gen_rtc_read(struct file *file, char __user *buf,
			size_t count, loff_t *ppos)
{
	DECLARE_WAITQUEUE(wait, current);
	unsigned long data;
	ssize_t retval;

@@ -183,18 +182,10 @@ static ssize_t gen_rtc_read(struct file *file, char __user *buf,
	if (file->f_flags & O_NONBLOCK && !gen_rtc_irq_data)
		return -EAGAIN;

	add_wait_queue(&gen_rtc_wait, &wait);
	retval = -ERESTARTSYS;

	while (1) {
		set_current_state(TASK_INTERRUPTIBLE);
		data = xchg(&gen_rtc_irq_data, 0);
		if (data)
			break;
		if (signal_pending(current))
	retval = wait_event_interruptible(gen_rtc_wait,
			(data = xchg(&gen_rtc_irq_data, 0)));
	if (retval)
		goto out;
		schedule();
	}

	/* first test allows optimizer to nuke this case for 32-bit machines */
	if (sizeof (int) != sizeof (long) && count == sizeof (unsigned int)) {
@@ -207,9 +198,6 @@ static ssize_t gen_rtc_read(struct file *file, char __user *buf,
			sizeof(unsigned long);
	}
out:
	__set_current_state(TASK_RUNNING);
	remove_wait_queue(&gen_rtc_wait, &wait);

	return retval;
}