In my view, udelay becomes a src/lib/ function, i.e. generic, and it calls timer_us to know when it's done. u32 udelay(int us){ now = timer_us(); end = now + us; while (timer_us() < end) ; return timer_us(); // might as well, we know the time. }