diff options
author | Michael Brown | 2017-02-01 16:30:41 +0100 |
---|---|---|
committer | Michael Brown | 2017-02-01 16:30:41 +0100 |
commit | a8f80a75d25970f1e4e607e761a153a7d57b9a15 (patch) | |
tree | 09fbd5e745b8e5ccd8f3128a5ea6fe6769d60af3 /src/core | |
parent | [settings] Add "unixtime" builtin setting to expose the current time (diff) | |
download | ipxe-a8f80a75d25970f1e4e607e761a153a7d57b9a15.tar.gz ipxe-a8f80a75d25970f1e4e607e761a153a7d57b9a15.tar.xz ipxe-a8f80a75d25970f1e4e607e761a153a7d57b9a15.zip |
[time] Report attempts to use timers before initialisation
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/timer.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/core/timer.c b/src/core/timer.c index ed724605..791cdcdb 100644 --- a/src/core/timer.c +++ b/src/core/timer.c @@ -24,7 +24,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include <string.h> -#include <assert.h> #include <ipxe/process.h> #include <ipxe/console.h> #include <ipxe/keys.h> @@ -42,7 +41,14 @@ static struct timer *timer; */ unsigned long currticks ( void ) { - assert ( timer != NULL ); + /* Guard against use during early initialisation */ + if ( ! timer ) { + DBGC ( &timer, "TIMER currticks() called before initialisation " + "from %p\n", __builtin_return_address ( 0 ) ); + return 0; + } + + /* Use selected timer */ return timer->currticks(); } @@ -53,7 +59,14 @@ unsigned long currticks ( void ) { */ void udelay ( unsigned long usecs ) { - assert ( timer != NULL ); + /* Guard against use during early initialisation */ + if ( ! timer ) { + DBGC ( &timer, "TIMER udelay() called before initialisation " + "from %p\n", __builtin_return_address ( 0 ) ); + return; + } + + /* Use selected timer */ timer->udelay ( usecs ); } @@ -63,6 +76,15 @@ void udelay ( unsigned long usecs ) { * @v msecs Number of milliseconds for which to delay */ void mdelay ( unsigned long msecs ) { + + /* Guard against use during early initialisation */ + if ( ! timer ) { + DBGC ( &timer, "TIMER mdelay() called before initialisation " + "from %p\n", __builtin_return_address ( 0 ) ); + return; + } + + /* Delay for specified number of milliseconds */ while ( msecs-- ) udelay ( 1000 ); } |