brcmfmac: reinit watchdog completion after handling watchdog
authorArend van Spriel <arend@broadcom.com>
Thu, 20 Mar 2014 09:18:01 +0000 (10:18 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 20 Mar 2014 15:55:40 +0000 (11:55 -0400)
The watchdog thread waits on completion that is set from a timer. As
the completion is count based this could mean that on a busy system
the watchdog is handled multiple times with a very short interval.
This is not the intended behaviour. After handling the watchdog it
should wait for the next timer expiry. This is accomplished by
reinitializing the completion.

Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c

index 859eddd526ef214115db4c7a5797417af761896c..47a6f3957b7f255a1300d7a4e65de8b7bfe9a03a 100644 (file)
@@ -3994,6 +3994,7 @@ brcmf_sdio_watchdog_thread(void *data)
                        brcmf_sdio_bus_watchdog(bus);
                        /* Count the tick for reference */
                        bus->sdcnt.tickcnt++;
+                       reinit_completion(&bus->watchdog_wait);
                } else
                        break;
        }