add separate tx waker

This commit is contained in:
Rogan Morrow 2025-02-28 12:30:23 +11:00
parent 3b37c79331
commit 065071b467

View File

@ -85,6 +85,7 @@ unsafe fn on_interrupt(r: Regs, s: &'static State) {
compiler_fence(Ordering::SeqCst);
s.rx_waker.wake();
s.tx_waker.wake();
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
@ -592,7 +593,7 @@ async fn flush(info: &Info, state: &State) -> Result<(), Error> {
// future which completes when Transmission complete is detected
let abort = poll_fn(move |cx| {
state.rx_waker.register(cx.waker());
state.tx_waker.register(cx.waker());
let sr = sr(r).read();
if sr.tc() {
@ -2019,6 +2020,7 @@ enum Kind {
struct State {
rx_waker: AtomicWaker,
tx_waker: AtomicWaker,
tx_rx_refcount: AtomicU8,
}
@ -2026,6 +2028,7 @@ impl State {
const fn new() -> Self {
Self {
rx_waker: AtomicWaker::new(),
tx_waker: AtomicWaker::new(),
tx_rx_refcount: AtomicU8::new(0),
}
}