Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3dae93ec authored by Mike Frysinger's avatar Mike Frysinger Committed by Wim Van Sebroeck
Browse files

[WATCHDOG] bfin: fix max timeout calculation



Relying on overflow/wrap around isn't exact because if you wrap far
enough, you get back to "valid" values.

Reported-by: default avatarThorsten Pohlmann <pohlmann@tetronik.com>
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
Signed-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
Cc: stable <stable@kernel.org>
parent aea187c4
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
/*
 * Blackfin On-Chip Watchdog Driver
 *  Supports BF53[123]/BF53[467]/BF54[2489]/BF561
 *
 * Originally based on softdog.c
 * Copyright 2006-2007 Analog Devices Inc.
 * Copyright 2006-2010 Analog Devices Inc.
 * Copyright 2006-2007 Michele d'Amico
 * Copyright 1996 Alan Cox <alan@lxorguk.ukuu.org.uk>
 *
@@ -137,13 +136,15 @@ static int bfin_wdt_running(void)
 */
static int bfin_wdt_set_timeout(unsigned long t)
{
	u32 cnt;
	u32 cnt, max_t, sclk;
	unsigned long flags;

	stampit();
	sclk = get_sclk();
	max_t = -1 / sclk;
	cnt = t * sclk;
	stamp("maxtimeout=%us newtimeout=%lus (cnt=%#x)", max_t, t, cnt);

	cnt = t * get_sclk();
	if (cnt < get_sclk()) {
	if (t > max_t) {
		printk(KERN_WARNING PFX "timeout value is too large\n");
		return -EINVAL;
	}