This includes a generic critical section implementation. This implementation also allow a user to start a critical section while interrupts are already disabled.