Busy waiting
Waiting by keeping the processor spinning in a loop that does nothing useful until a condition holds or enough time has passed.
The oldest delay in firmware is for (i = 0; i < 100000; i++);. It has two classic bugs: the optimiser deletes the loop outright unless the counter is volatile, and the delay stops being correct the moment someone changes the clock speed or the compiler flags. Linux calibrates its delay loop at boot — that number is what gets printed as BogoMIPS.
For short waits, a few microseconds inside a driver, busy waiting is often the right call: going to sleep and waking up costs more than the wait itself. For anything longer, a timer or an RTOS call that lets other tasks run is the better choice. A spinlock is just busy waiting with a lock as the condition.