提交 7d4f9f09 编写于 作者: J Jiri Slaby 提交者: Linus Torvalds

Misc, phantom, fix poll

Return ERR even if there are pending data, but hw is not running.  Do not
decrement count in poll, do it in ioctl, where data are actually read.
Signed-off-by: NJiri Slaby <jirislaby@gmail.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 7e4e8e68
......@@ -169,6 +169,7 @@ static long phantom_ioctl(struct file *file, unsigned int cmd,
for (i = 0; i < m; i++)
if (rs.mask & BIT(i))
rs.values[i] = ioread32(dev->iaddr + i);
atomic_set(&dev->counter, 0);
spin_unlock_irqrestore(&dev->regs_lock, flags);
if (copy_to_user(argp, &rs, sizeof(rs)))
......@@ -254,11 +255,12 @@ static unsigned int phantom_poll(struct file *file, poll_table *wait)
pr_debug("phantom_poll: %d\n", atomic_read(&dev->counter));
poll_wait(file, &dev->wait, wait);
if (atomic_read(&dev->counter)) {
if (!(dev->status & PHB_RUNNING))
mask = POLLERR;
else if (atomic_read(&dev->counter))
mask = POLLIN | POLLRDNORM;
atomic_dec(&dev->counter);
} else if ((dev->status & PHB_RUNNING) == 0)
mask = POLLIN | POLLRDNORM | POLLERR;
pr_debug("phantom_poll end: %x/%d\n", mask, atomic_read(&dev->counter));
return mask;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册