summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorMichael Brown2017-02-01 16:30:41 +0100
committerMichael Brown2017-02-01 16:30:41 +0100
commita8f80a75d25970f1e4e607e761a153a7d57b9a15 (patch)
tree09fbd5e745b8e5ccd8f3128a5ea6fe6769d60af3 /src/core
parent[settings] Add "unixtime" builtin setting to expose the current time (diff)
downloadipxe-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.c28
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 );
}