locking: ipipe: add hard lock alternative to regular spinlocks
Hard spinlocks manipulate the CPU interrupt mask, without affecting the kernel preemption state in locking/unlocking operations. This type of spinlock is useful for implementing a critical section to serialize concurrent accesses from both in-band and out-of-band contexts, i.e. from root and head stages. Hard spinlocks exclusively depend on the pre-existing arch-specific bits which implement regular spinlocks. They can be seen as basic spinlocks still affecting the CPU's interrupt state when all other spinlock types only deal with the virtual interrupt flag managed by the pipeline core - i.e. only disable interrupts for the regular in-band kernel activity.