#include /// Relax the spinlock using AMD64 pause instruction void spin_lock_relax(void) { __asm__ volatile("pause" ::: "memory"); } void spin_lock_save_flags(uint64_t* flags) { __asm__ volatile("pushfq; cli; popq %0" : "=rm"(*flags)::"memory"); } void spin_lock_restore_flags(uint64_t flags) { __asm__ volatile("pushq %0; popfq" ::"rm"(flags) : "memory", "cc"); }