A critical section can be either atomic ornon-atomic. If it is protected by aspinlock (or if it runs in an interrupt handler, or with interrupts orpreemption disabled) then it is atomic, but if it is only protected by a mutexthen it is non-atomic.
msleep is not allowed in atomic sections, but it_is_ allowed in non-atomic sections. Even if the code is protected by a mutex