@@ -397,6 +397,7 @@ impl NetEpollHandler {
397
397
// trigger a process_rx() which checks if there are any new frames to be sent, starting
398
398
// with the MMDS network stack.
399
399
let mut process_rx_for_mmds = false ;
400
+ let mut raise_irq = false ;
400
401
401
402
while let Some ( head) = self . tx . queue . pop ( & self . mem ) {
402
403
// If limiter.consume() fails it means there is no more TokenType::Ops
@@ -474,6 +475,11 @@ impl NetEpollHandler {
474
475
}
475
476
476
477
self . tx . queue . add_used ( & self . mem , head_index, 0 ) ;
478
+ raise_irq = true ;
479
+ }
480
+
481
+ if raise_irq {
482
+ self . signal_used_queue ( ) ?;
477
483
}
478
484
479
485
// An incoming frame for the MMDS may trigger the transmission of a new message.
@@ -1599,7 +1605,7 @@ mod tests {
1599
1605
h. interrupt_evt . write ( 1 ) . unwrap ( ) ;
1600
1606
h. handle_event ( RX_TAP_EVENT , EPOLLIN ) . unwrap ( ) ;
1601
1607
assert ! ( h. rx. deferred_frame) ;
1602
- assert_eq ! ( h. interrupt_evt. read( ) . unwrap( ) , 2 ) ;
1608
+ assert_eq ! ( h. interrupt_evt. read( ) . unwrap( ) , 3 ) ;
1603
1609
// The #cfg(test) enabled version of read_tap always returns 1234 bytes (or the len of
1604
1610
// the buffer, whichever is smaller).
1605
1611
assert_eq ! ( rxq. used. ring[ 0 ] . get( ) . len, 1234 ) ;
@@ -1750,7 +1756,7 @@ mod tests {
1750
1756
assert ! ( h. get_rx_rate_limiter( ) . is_blocked( ) ) ;
1751
1757
assert ! ( h. rx. deferred_frame) ;
1752
1758
// assert that no operation actually completed (limiter blocked it)
1753
- assert_eq ! ( h. interrupt_evt. read( ) . unwrap( ) , 1 ) ;
1759
+ assert_eq ! ( h. interrupt_evt. read( ) . unwrap( ) , 2 ) ;
1754
1760
// make sure the data is still queued for processing
1755
1761
assert_eq ! ( rxq. used. idx. get( ) , 0 ) ;
1756
1762
}
@@ -1853,7 +1859,7 @@ mod tests {
1853
1859
assert ! ( h. get_rx_rate_limiter( ) . is_blocked( ) ) ;
1854
1860
assert ! ( h. rx. deferred_frame) ;
1855
1861
// assert that no operation actually completed (limiter blocked it)
1856
- assert_eq ! ( h. interrupt_evt. read( ) . unwrap( ) , 1 ) ;
1862
+ assert_eq ! ( h. interrupt_evt. read( ) . unwrap( ) , 2 ) ;
1857
1863
// make sure the data is still queued for processing
1858
1864
assert_eq ! ( rxq. used. idx. get( ) , 0 ) ;
1859
1865
0 commit comments