HID: pidff - fix unnecessary loop iterations on reset
authorAnssi Hannula <anssi.hannula@iki.fi>
Tue, 3 Nov 2009 22:57:35 +0000 (00:57 +0200)
committerJiri Kosina <jkosina@suse.cz>
Wed, 4 Nov 2009 09:04:08 +0000 (10:04 +0100)
When encountering a strange value in the pool report, pidff_reset
will always refetch the report 20 times, even if one of the retries
results in a sane value. This is because a temporary variable being
used to store the value is not being updated inside the loop.

Fix it by using the value directly in the loop.

Reported-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/usbhid/hid-pidff.c

index 484e3ee..e565dbe 100644 (file)
@@ -1181,12 +1181,11 @@ static void pidff_reset(struct pidff_device *pidff)
        usbhid_wait_io(hid);
 
        if (pidff->pool[PID_SIMULTANEOUS_MAX].value) {
-               int sim_effects = pidff->pool[PID_SIMULTANEOUS_MAX].value[0];
-               while (sim_effects < 2) {
+               while (pidff->pool[PID_SIMULTANEOUS_MAX].value[0] < 2) {
                        if (i++ > 20) {
                                printk(KERN_WARNING "hid-pidff: device reports "
                                       "%d simultaneous effects\n",
-                                      sim_effects);
+                                      pidff->pool[PID_SIMULTANEOUS_MAX].value[0]);
                                break;
                        }
                        debug("pid_pool requested again");