unsigned long flags;

spin_lock_irqsave(&foo_lock, flags);

// critical jobs

spin_unlock_irqrestore(&foo_lock, flags);