···1414#ifndef _S390_DELAY_H1515#define _S390_DELAY_H16161717-extern void __udelay(unsigned long long usecs);1818-extern void udelay_simple(unsigned long long usecs);1919-extern void __delay(unsigned long loops);1717+void __ndelay(unsigned long long nsecs);1818+void __udelay(unsigned long long usecs);1919+void udelay_simple(unsigned long long usecs);2020+void __delay(unsigned long loops);20212222+#define ndelay(n) __ndelay((unsigned long long) (n))2123#define udelay(n) __udelay((unsigned long long) (n))2224#define mdelay(n) __udelay((unsigned long long) (n) * 1000)2325
+15
arch/s390/lib/delay.c
···1212#include <linux/module.h>1313#include <linux/irqflags.h>1414#include <linux/interrupt.h>1515+#include <asm/div64.h>15161617void __delay(unsigned long loops)1718{···117116 while (get_clock() < end)118117 cpu_relax();119118}119119+120120+void __ndelay(unsigned long long nsecs)121121+{122122+ u64 end;123123+124124+ nsecs <<= 9;125125+ do_div(nsecs, 125);126126+ end = get_clock() + nsecs;127127+ if (nsecs & ~0xfffUL)128128+ __udelay(nsecs >> 12);129129+ while (get_clock() < end)130130+ barrier();131131+}132132+EXPORT_SYMBOL(__ndelay);