]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[time] Report attempts to use timers before initialisation
authorMichael Brown <mcb30@ipxe.org>
Wed, 1 Feb 2017 15:30:41 +0000 (15:30 +0000)
committerMichael Brown <mcb30@ipxe.org>
Wed, 1 Feb 2017 15:30:41 +0000 (15:30 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/timer.c

index ed7246059512d0968ab6472f4add62dd9cca78b1..791cdcdbb1674438a91ff077f9a1b3e3d0a7b2b0 100644 (file)
@@ -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 );
 }