Merge tag 's390-5.11-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
[sfrench/cifs-2.6.git] / arch / s390 / lib / delay.c
index 8c0c68e7770ea1d74a3680cc948b41d6b7709205..68d61f2835df91945c208206743d33acc8bb83e0 100644 (file)
 #include <linux/export.h>
 #include <linux/irqflags.h>
 #include <linux/interrupt.h>
+#include <linux/jump_label.h>
 #include <linux/irq.h>
 #include <asm/vtimer.h>
 #include <asm/div64.h>
 #include <asm/idle.h>
 
+static DEFINE_STATIC_KEY_FALSE(udelay_ready);
+
+void __init udelay_enable(void)
+{
+       static_branch_enable(&udelay_ready);
+}
+
 void __delay(unsigned long loops)
 {
         /*
@@ -76,6 +84,11 @@ void __udelay(unsigned long long usecs)
 {
        unsigned long flags;
 
+       if (!static_branch_likely(&udelay_ready)) {
+               udelay_simple(usecs);
+               return;
+       }
+
        preempt_disable();
        local_irq_save(flags);
        if (in_irq()) {