The new setup.c The role of setup.c, now, is just calling them, in order for (f = __initcall_begin; f < __initcall_end; f++) { errors += (*f)(); And, obviously, we panic if any fails As a side effect, we alway link in usleep and its init code Panic calls usleep How could we solve the problem? If the target CPU is very small, we want to avoid panic() ... while keeping the same code structure overall