Are there any critical-section folks or HAL team folks in the house? I'm looking at implementing the `lock-api` traits, specifically `RawMutex`, based on the `critical-section` trait, and I'm not *certain* how to correctly handle this.

This is because critical-section is a *reentrant* lock, whereas RawMutex is a *non-reentrant* lock.

If I were to do something like this, I'm a little worried this could go wrong:

```rust
let lock_a = Mutex::<CS>::new();
let lock_b = Mutex::<CS>::new();

// This starts a critical section, and stores the RestoreState
let mut guard_a = lock_a.lock();
// We're already in a critical section, allowed, stores the RestoreState again
let mut guard_b = lock_b.lock();

// do some stuff

// We now drop guard_a **first**, e.g. in FIFO order not LIFO order!
// This restores the INITIAL restore state - e.g. unmasked primask on cortex-m
drop(guard_a);

// We now drop guard_b **second**, the restores the SECOND restore state,
// e.g. masked primask on cortex-m!
drop(guard_b);
```