Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/arch/arm/samsung/mct.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/arch/arm/samsung/mct.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.2.2.2 retrieving revision 1.3 diff -u -p -r1.2.2.2 -r1.3 --- src/sys/arch/arm/samsung/mct.c 2014/05/18 17:44:59 1.2.2.2 +++ src/sys/arch/arm/samsung/mct.c 2014/08/08 14:43:14 1.3 @@ -1,4 +1,4 @@ -/* $NetBSD: mct.c,v 1.2.2.2 2014/05/18 17:44:59 rmind Exp $ */ +/* $NetBSD: mct.c,v 1.3 2014/08/08 14:43:14 reinoud Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(1, "$NetBSD: mct.c,v 1.2.2.2 2014/05/18 17:44:59 rmind Exp $"); +__KERNEL_RCSID(1, "$NetBSD: mct.c,v 1.3 2014/08/08 14:43:14 reinoud Exp $"); #include #include @@ -230,21 +230,24 @@ clockhandler(void *arg) struct clockframe * const cf = arg; struct mct_softc * const sc = &mct_sc; const uint64_t now = mct_gettime(sc); - uint64_t delta = now - sc->sc_lastintr; - uint64_t missed = delta / sc->sc_autoinc; + int64_t delta = now - sc->sc_lastintr; + int64_t periods = delta / sc->sc_autoinc; + + KASSERT(delta >= 0); + KASSERT(periods >= 0); /* ack the interrupt */ mct_write_global(sc, MCT_G_INT_CSTAT, G_INT_CSTAT_CLEAR); - /* check if we missed clock interrupts */ - if (delta > sc->sc_autoinc) - sc->sc_ev_missing_ticks.ev_count += missed; + /* check if we periods clock interrupts */ + if (periods > 1) + sc->sc_ev_missing_ticks.ev_count += periods - 1; sc->sc_lastintr = now; hardclock(cf); if (sc->sc_has_blink_led) { - sc->sc_led_timer = sc->sc_led_timer - 1 - missed; + sc->sc_led_timer = sc->sc_led_timer - periods - 1; if (sc->sc_led_timer <= 0) { sc->sc_led_state = !sc->sc_led_state; exynos_gpio_pindata_write(&sc->sc_gpio_led,