Messages in this thread Patch in this message | | | From | Yoshinori Sato <> | Subject | [PATCH 2/4] h8300: clocksource: Counter overflow fix | Date | Wed, 11 Nov 2015 23:50:14 +0900 |
| |
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp> --- drivers/clocksource/h8300_timer16.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/clocksource/h8300_timer16.c b/drivers/clocksource/h8300_timer16.c index 53daf6a..639acf3 100644 --- a/drivers/clocksource/h8300_timer16.c +++ b/drivers/clocksource/h8300_timer16.c @@ -32,8 +32,8 @@ struct timer16_priv { static unsigned long timer16_get_counter(struct timer16_priv *p) { - unsigned long v1, v2, v3; - int o1, o2; + unsigned short v1, v2, v3; + unsigned char o1, o2; o1 = ctrl_inb(p->mapcommon + TISRC) & p->ovf; @@ -47,8 +47,10 @@ static unsigned long timer16_get_counter(struct timer16_priv *p) } while (unlikely((o1 != o2) || (v1 > v2 && v1 < v3) || (v2 > v3 && v2 < v1) || (v3 > v1 && v3 < v2))); - v2 |= 0x10000; - return v2; + if (unlikely(!o1)) + return v2; + else + return v2 + 0x10000; } -- 2.6.1
| |