提交 0a245982 编写于 作者: H H Hartley Sweeten 提交者: Greg Kroah-Hartman

staging: comedi: serial2002: factor (*poll) busy wait out of tty_read()

Factor the (*poll) busy wait code out of tty_read() so the indent
level can be reduced and tty_read() is a bit cleaner.
Signed-off-by: NH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 32ef0e3e
......@@ -102,6 +102,33 @@ static int __tty_readb(struct file *f, unsigned char *buf)
return f->f_op->read(f, p, 1, &f->f_pos);
}
static void tty_read_poll_wait(struct file *f, int timeout)
{
struct poll_wqueues table;
struct timeval start, now;
do_gettimeofday(&start);
poll_initwait(&table);
while (1) {
long elapsed;
int mask;
mask = f->f_op->poll(f, &table.pt);
if (mask & (POLLRDNORM | POLLRDBAND | POLLIN |
POLLHUP | POLLERR)) {
break;
}
do_gettimeofday(&now);
elapsed = (1000000 * (now.tv_sec - start.tv_sec) +
now.tv_usec - start.tv_usec);
if (elapsed > timeout)
break;
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(((timeout - elapsed) * HZ) / 10000);
}
poll_freewait(&table);
}
#if 0
/*
* On 2.6.26.3 this occaisonally gave me page faults, worked around by
......@@ -132,31 +159,7 @@ static int tty_read(struct file *f, int timeout)
oldfs = get_fs();
set_fs(KERNEL_DS);
if (f->f_op->poll) {
struct poll_wqueues table;
struct timeval start, now;
do_gettimeofday(&start);
poll_initwait(&table);
while (1) {
long elapsed;
int mask;
mask = f->f_op->poll(f, &table.pt);
if (mask & (POLLRDNORM | POLLRDBAND | POLLIN |
POLLHUP | POLLERR)) {
break;
}
do_gettimeofday(&now);
elapsed =
(1000000 * (now.tv_sec - start.tv_sec) +
now.tv_usec - start.tv_usec);
if (elapsed > timeout)
break;
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(((timeout -
elapsed) * HZ) / 10000);
}
poll_freewait(&table);
tty_read_poll_wait(f, timeout);
if (__tty_readb(f, &ch) == 1)
result = ch;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册