From cb6d0dc7322ff4be3ae34a9ac0f42ef66eb42735 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Wed, 21 Nov 2007 14:03:37 -0500 Subject: [PATCH] --- yaml --- r: 84339 b: refs/heads/master c: 374766bc2aa784f7a0833cc7563f057241ca7815 h: refs/heads/master i: 84337: a5d9287a9054a95caa712de8427d996cda02eec6 84335: 113a4a4301e89fc9f98e3d95c3360b96a5759ad5 v: v3 --- [refs] | 2 +- trunk/drivers/input/input-polldev.c | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 38d09e732b05..1d26e18e211a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a512a8cc20bbf74700d368ecb0a61dd9d8f1df48 +refs/heads/master: 374766bc2aa784f7a0833cc7563f057241ca7815 diff --git a/trunk/drivers/input/input-polldev.c b/trunk/drivers/input/input-polldev.c index 92b359894e81..490918a5d192 100644 --- a/trunk/drivers/input/input-polldev.c +++ b/trunk/drivers/input/input-polldev.c @@ -60,17 +60,21 @@ static void input_polled_device_work(struct work_struct *work) { struct input_polled_dev *dev = container_of(work, struct input_polled_dev, work.work); + unsigned long delay; dev->poll(dev); - queue_delayed_work(polldev_wq, &dev->work, - msecs_to_jiffies(dev->poll_interval)); + + delay = msecs_to_jiffies(dev->poll_interval); + if (delay >= HZ) + delay = round_jiffies_relative(delay); + + queue_delayed_work(polldev_wq, &dev->work, delay); } static int input_open_polled_device(struct input_dev *input) { struct input_polled_dev *dev = input->private; int error; - unsigned long ticks; error = input_polldev_start_workqueue(); if (error) @@ -79,10 +83,8 @@ static int input_open_polled_device(struct input_dev *input) if (dev->flush) dev->flush(dev); - ticks = msecs_to_jiffies(dev->poll_interval); - if (ticks >= HZ) - ticks = round_jiffies(ticks); - queue_delayed_work(polldev_wq, &dev->work, ticks); + queue_delayed_work(polldev_wq, &dev->work, + msecs_to_jiffies(dev->poll_interval)); return 0; } @@ -91,7 +93,7 @@ static void input_close_polled_device(struct input_dev *input) { struct input_polled_dev *dev = input->private; - cancel_rearming_delayed_workqueue(polldev_wq, &dev->work); + cancel_delayed_work_sync(&dev->work); input_polldev_stop_workqueue(); }