@@ -1007,65 +1007,67 @@ mod tests {
1007
1007
assert_eq ! ( backend. max_queue_size( ) , 64 ) ;
1008
1008
assert_ne ! ( backend. features( ) , 0 ) ;
1009
1009
assert ! ( !backend. protocol_features( ) . is_empty( ) ) ;
1010
- backend. set_event_idx ( false ) ;
1010
+ for event_idx in [ true , false ] {
1011
+ backend. set_event_idx ( event_idx) ;
1011
1012
1012
- // Mock memory
1013
- let mem = GuestMemoryAtomic :: new (
1014
- GuestMemoryMmap :: < ( ) > :: from_ranges ( & [ ( GuestAddress ( 0 ) , 0x10000 ) ] ) . unwrap ( ) ,
1015
- ) ;
1016
-
1017
- // Mock Vring for queues
1018
- let vrings = [
1019
- VringRwLock :: new ( mem. clone ( ) , 0x1000 ) . unwrap ( ) ,
1020
- VringRwLock :: new ( mem. clone ( ) , 0x1000 ) . unwrap ( ) ,
1021
- VringRwLock :: new ( mem. clone ( ) , 0x1000 ) . unwrap ( ) ,
1022
- VringRwLock :: new ( mem. clone ( ) , 0x1000 ) . unwrap ( ) ,
1023
- ] ;
1024
- vrings[ CONTROL_QUEUE_IDX as usize ]
1025
- . set_queue_info ( 0x100 , 0x200 , 0x300 )
1026
- . unwrap ( ) ;
1027
- vrings[ CONTROL_QUEUE_IDX as usize ] . set_queue_ready ( true ) ;
1028
- vrings[ EVENT_QUEUE_IDX as usize ]
1029
- . set_queue_info ( 0x100 , 0x200 , 0x300 )
1030
- . unwrap ( ) ;
1031
- vrings[ EVENT_QUEUE_IDX as usize ] . set_queue_ready ( true ) ;
1032
- vrings[ TX_QUEUE_IDX as usize ]
1033
- . set_queue_info ( 0x1100 , 0x1200 , 0x1300 )
1034
- . unwrap ( ) ;
1035
- vrings[ TX_QUEUE_IDX as usize ] . set_queue_ready ( true ) ;
1036
- vrings[ RX_QUEUE_IDX as usize ]
1037
- . set_queue_info ( 0x100 , 0x200 , 0x300 )
1038
- . unwrap ( ) ;
1039
- vrings[ RX_QUEUE_IDX as usize ] . set_queue_ready ( true ) ;
1040
-
1041
- backend. update_memory ( mem) . unwrap ( ) ;
1042
-
1043
- let queues_per_thread = backend. queues_per_thread ( ) ;
1044
- assert_eq ! ( queues_per_thread. len( ) , 1 ) ;
1045
- assert_eq ! ( queues_per_thread[ 0 ] , 0xf ) ;
1046
-
1047
- let config = backend. get_config ( 0 , 8 ) ;
1048
- assert_eq ! ( config. len( ) , 8 ) ;
1049
-
1050
- let exit = backend. exit_event ( 0 ) ;
1051
- assert ! ( exit. is_some( ) ) ;
1052
- exit. unwrap ( ) . write ( 1 ) . unwrap ( ) ;
1013
+ // Mock memory
1014
+ let mem = GuestMemoryAtomic :: new (
1015
+ GuestMemoryMmap :: < ( ) > :: from_ranges ( & [ ( GuestAddress ( 0 ) , 0x10000 ) ] ) . unwrap ( ) ,
1016
+ ) ;
1053
1017
1054
- backend
1055
- . handle_event ( CONTROL_QUEUE_IDX , EventSet :: IN , & vrings, 0 )
1056
- . unwrap ( ) ;
1057
- backend
1058
- . handle_event ( EVENT_QUEUE_IDX , EventSet :: IN , & vrings, 0 )
1059
- . unwrap ( ) ;
1060
- backend
1061
- . handle_event ( TX_QUEUE_IDX , EventSet :: IN , & vrings, 0 )
1062
- . unwrap ( ) ;
1063
- backend
1064
- . handle_event ( RX_QUEUE_IDX , EventSet :: IN , & vrings, 0 )
1065
- . unwrap ( ) ;
1066
- backend
1067
- . handle_event ( RX_QUEUE_IDX * 2 , EventSet :: IN , & vrings, 0 )
1068
- . unwrap_err ( ) ;
1018
+ // Mock Vring for queues
1019
+ let vrings = [
1020
+ VringRwLock :: new ( mem. clone ( ) , 0x1000 ) . unwrap ( ) ,
1021
+ VringRwLock :: new ( mem. clone ( ) , 0x1000 ) . unwrap ( ) ,
1022
+ VringRwLock :: new ( mem. clone ( ) , 0x1000 ) . unwrap ( ) ,
1023
+ VringRwLock :: new ( mem. clone ( ) , 0x1000 ) . unwrap ( ) ,
1024
+ ] ;
1025
+ vrings[ CONTROL_QUEUE_IDX as usize ]
1026
+ . set_queue_info ( 0x100 , 0x200 , 0x300 )
1027
+ . unwrap ( ) ;
1028
+ vrings[ CONTROL_QUEUE_IDX as usize ] . set_queue_ready ( true ) ;
1029
+ vrings[ EVENT_QUEUE_IDX as usize ]
1030
+ . set_queue_info ( 0x100 , 0x200 , 0x300 )
1031
+ . unwrap ( ) ;
1032
+ vrings[ EVENT_QUEUE_IDX as usize ] . set_queue_ready ( true ) ;
1033
+ vrings[ TX_QUEUE_IDX as usize ]
1034
+ . set_queue_info ( 0x1100 , 0x1200 , 0x1300 )
1035
+ . unwrap ( ) ;
1036
+ vrings[ TX_QUEUE_IDX as usize ] . set_queue_ready ( true ) ;
1037
+ vrings[ RX_QUEUE_IDX as usize ]
1038
+ . set_queue_info ( 0x100 , 0x200 , 0x300 )
1039
+ . unwrap ( ) ;
1040
+ vrings[ RX_QUEUE_IDX as usize ] . set_queue_ready ( true ) ;
1041
+
1042
+ backend. update_memory ( mem) . unwrap ( ) ;
1043
+
1044
+ let queues_per_thread = backend. queues_per_thread ( ) ;
1045
+ assert_eq ! ( queues_per_thread. len( ) , 1 ) ;
1046
+ assert_eq ! ( queues_per_thread[ 0 ] , 0xf ) ;
1047
+
1048
+ let config = backend. get_config ( 0 , 8 ) ;
1049
+ assert_eq ! ( config. len( ) , 8 ) ;
1050
+
1051
+ let exit = backend. exit_event ( 0 ) ;
1052
+ assert ! ( exit. is_some( ) ) ;
1053
+ exit. unwrap ( ) . write ( 1 ) . unwrap ( ) ;
1054
+
1055
+ backend
1056
+ . handle_event ( CONTROL_QUEUE_IDX , EventSet :: IN , & vrings, 0 )
1057
+ . unwrap ( ) ;
1058
+ backend
1059
+ . handle_event ( EVENT_QUEUE_IDX , EventSet :: IN , & vrings, 0 )
1060
+ . unwrap ( ) ;
1061
+ backend
1062
+ . handle_event ( TX_QUEUE_IDX , EventSet :: IN , & vrings, 0 )
1063
+ . unwrap ( ) ;
1064
+ backend
1065
+ . handle_event ( RX_QUEUE_IDX , EventSet :: IN , & vrings, 0 )
1066
+ . unwrap ( ) ;
1067
+ backend
1068
+ . handle_event ( RX_QUEUE_IDX * 2 , EventSet :: IN , & vrings, 0 )
1069
+ . unwrap_err ( ) ;
1070
+ }
1069
1071
1070
1072
test_dir. close ( ) . unwrap ( ) ;
1071
1073
}
0 commit comments