media: rainshadow-cec: avoid -Wmaybe-uninitialized warning again
authorArnd Bergmann <arnd@arndb.de>
Wed, 21 Jun 2017 22:10:32 +0000 (19:10 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Sat, 24 Jun 2017 12:37:28 +0000 (09:37 -0300)
Back in April I created a patch to address a false-positive warning:

drivers/media/usb/rainshadow-cec/rainshadow-cec.c: In function 'rain_irq_work_handler':
drivers/media/usb/rainshadow-cec/rainshadow-cec.c:171:31: error: 'data' may be used uninitialized in this function [-Werror=maybe-uninitialized]

My patch was totally wrong and introduced a real bug, and Colin Ian King thankfully
noticed it now and fixed my mistake. Unfortunately, fixing the actual uninitialized
data in this case brought back the original bogus warning.

This is a new version of the patch, which simplifies the code to the point where
gcc notices the behavior is correct.

Fixes: ca33784ba494 ("[media] rainshadow-cec: ensure exit_loop is intialized")
Fixes: ea6a69defd3311 ("[media] rainshadow-cec: avoid -Wmaybe-uninitialized warning")

Cc: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/usb/rainshadow-cec/rainshadow-cec.c

index f203699e9c1bb086dbb5924bb37625244346e3b6..65692576690f0cb732d4386e884a8a58f60ee83c 100644 (file)
@@ -116,21 +116,19 @@ static void rain_irq_work_handler(struct work_struct *work)
 
        while (true) {
                unsigned long flags;
-               bool exit_loop = false;
                char data;
 
                spin_lock_irqsave(&rain->buf_lock, flags);
-               if (rain->buf_len) {
-                       data = rain->buf[rain->buf_rd_idx];
-                       rain->buf_len--;
-                       rain->buf_rd_idx = (rain->buf_rd_idx + 1) & 0xff;
-               } else {
-                       exit_loop = true;
+               if (!rain->buf_len) {
+                       spin_unlock_irqrestore(&rain->buf_lock, flags);
+                       break;
                }
-               spin_unlock_irqrestore(&rain->buf_lock, flags);
 
-               if (exit_loop)
-                       break;
+               data = rain->buf[rain->buf_rd_idx];
+               rain->buf_len--;
+               rain->buf_rd_idx = (rain->buf_rd_idx + 1) & 0xff;
+
+               spin_unlock_irqrestore(&rain->buf_lock, flags);
 
                if (!rain->cmd_started && data != '?')
                        continue;