@@ -25,7 +25,7 @@ use super::{
2525} ; 
2626use  crate :: devices:: virtio:: balloon:: BalloonError ; 
2727use  crate :: devices:: virtio:: generated:: virtio_config:: VIRTIO_F_VERSION_1 ; 
28- use  crate :: devices:: virtio:: transport:: mmio :: { IrqTrigger ,   IrqType } ; 
28+ use  crate :: devices:: virtio:: transport:: { VirtioInterrupt ,   VirtioInterruptType } ; 
2929use  crate :: logger:: IncMetric ; 
3030use  crate :: utils:: u64_to_usize; 
3131use  crate :: vstate:: memory:: { Address ,  ByteValued ,  Bytes ,  GuestAddress ,  GuestMemoryMmap } ; 
@@ -339,7 +339,7 @@ impl Balloon {
339339        } 
340340
341341        if  needs_interrupt { 
342-             self . signal_used_queue ( ) ?; 
342+             self . signal_used_queue ( INFLATE_INDEX ) ?; 
343343        } 
344344
345345        Ok ( ( ) ) 
@@ -357,7 +357,7 @@ impl Balloon {
357357        } 
358358
359359        if  needs_interrupt { 
360-             self . signal_used_queue ( ) 
360+             self . signal_used_queue ( DEFLATE_INDEX ) 
361361        }  else  { 
362362            Ok ( ( ) ) 
363363        } 
@@ -401,9 +401,9 @@ impl Balloon {
401401        Ok ( ( ) ) 
402402    } 
403403
404-     pub ( crate )  fn  signal_used_queue ( & self )  -> Result < ( ) ,  BalloonError >  { 
404+     pub ( crate )  fn  signal_used_queue ( & self ,   qidx :   usize )  -> Result < ( ) ,  BalloonError >  { 
405405        self . interrupt_trigger ( ) 
406-             . trigger_irq ( IrqType :: Vring ) 
406+             . trigger ( VirtioInterruptType :: Queue ( qidx  as   u16 ) ) 
407407            . map_err ( |err| { 
408408                METRICS . event_fails . inc ( ) ; 
409409                BalloonError :: InterruptError ( err) 
@@ -428,7 +428,7 @@ impl Balloon {
428428            self . queues [ STATS_INDEX ] 
429429                . add_used ( index,  0 ) 
430430                . map_err ( BalloonError :: Queue ) ?; 
431-             self . signal_used_queue ( ) 
431+             self . signal_used_queue ( STATS_INDEX ) 
432432        }  else  { 
433433            error ! ( "Failed to update balloon stats, missing descriptor." ) ; 
434434            Ok ( ( ) ) 
@@ -440,7 +440,7 @@ impl Balloon {
440440        if  self . is_activated ( )  { 
441441            self . config_space . num_pages  = mib_to_pages ( amount_mib) ?; 
442442            self . interrupt_trigger ( ) 
443-                 . trigger_irq ( IrqType :: Config ) 
443+                 . trigger ( VirtioInterruptType :: Config ) 
444444                . map_err ( BalloonError :: InterruptError ) 
445445        }  else  { 
446446            Err ( BalloonError :: DeviceNotActive ) 
@@ -551,7 +551,7 @@ impl VirtioDevice for Balloon {
551551        & self . queue_evts 
552552    } 
553553
554-     fn  interrupt_trigger ( & self )  -> Arc < IrqTrigger >  { 
554+     fn  interrupt_trigger ( & self )  -> Arc < dyn   VirtioInterrupt >  { 
555555        self . device_state 
556556            . active_state ( ) 
557557            . expect ( "Device is not activated" ) 
@@ -585,7 +585,7 @@ impl VirtioDevice for Balloon {
585585    fn  activate ( 
586586        & mut  self , 
587587        mem :  GuestMemoryMmap , 
588-         interrupt :  Arc < IrqTrigger > , 
588+         interrupt :  Arc < dyn   VirtioInterrupt > , 
589589    )  -> Result < ( ) ,  ActivateError >  { 
590590        for  q in  self . queues . iter_mut ( )  { 
591591            q. initialize ( & mem) 
@@ -621,7 +621,7 @@ pub(crate) mod tests {
621621        check_request_completion,  invoke_handler_for_queue_event,  set_request, 
622622    } ; 
623623    use  crate :: devices:: virtio:: queue:: { VIRTQ_DESC_F_NEXT ,  VIRTQ_DESC_F_WRITE } ; 
624-     use  crate :: devices:: virtio:: test_utils:: { VirtQueue ,  default_mem} ; 
624+     use  crate :: devices:: virtio:: test_utils:: { VirtQueue ,  default_interrupt ,   default_mem} ; 
625625    use  crate :: test_utils:: single_region_mem; 
626626    use  crate :: vstate:: memory:: GuestAddress ; 
627627
@@ -798,11 +798,10 @@ pub(crate) mod tests {
798798    fn  test_invalid_request ( )  { 
799799        let  mut  balloon = Balloon :: new ( 0 ,  true ,  0 ,  false ) . unwrap ( ) ; 
800800        let  mem = default_mem ( ) ; 
801-         let  interrupt = Arc :: new ( IrqTrigger :: new ( ) . unwrap ( ) ) ; 
802801        // Only initialize the inflate queue to demonstrate invalid request handling. 
803802        let  infq = VirtQueue :: new ( GuestAddress ( 0 ) ,  & mem,  16 ) ; 
804803        balloon. set_queue ( INFLATE_INDEX ,  infq. create_queue ( ) ) ; 
805-         balloon. activate ( mem. clone ( ) ,  interrupt ) . unwrap ( ) ; 
804+         balloon. activate ( mem. clone ( ) ,  default_interrupt ( ) ) . unwrap ( ) ; 
806805
807806        // Fill the second page with non-zero bytes. 
808807        for  i in  0 ..0x1000  { 
@@ -858,10 +857,9 @@ pub(crate) mod tests {
858857    fn  test_inflate ( )  { 
859858        let  mut  balloon = Balloon :: new ( 0 ,  true ,  0 ,  false ) . unwrap ( ) ; 
860859        let  mem = default_mem ( ) ; 
861-         let  interrupt = Arc :: new ( IrqTrigger :: new ( ) . unwrap ( ) ) ; 
862860        let  infq = VirtQueue :: new ( GuestAddress ( 0 ) ,  & mem,  16 ) ; 
863861        balloon. set_queue ( INFLATE_INDEX ,  infq. create_queue ( ) ) ; 
864-         balloon. activate ( mem. clone ( ) ,  interrupt ) . unwrap ( ) ; 
862+         balloon. activate ( mem. clone ( ) ,  default_interrupt ( ) ) . unwrap ( ) ; 
865863
866864        // Fill the third page with non-zero bytes. 
867865        for  i in  0 ..0x1000  { 
@@ -929,10 +927,9 @@ pub(crate) mod tests {
929927    fn  test_deflate ( )  { 
930928        let  mut  balloon = Balloon :: new ( 0 ,  true ,  0 ,  false ) . unwrap ( ) ; 
931929        let  mem = default_mem ( ) ; 
932-         let  interrupt = Arc :: new ( IrqTrigger :: new ( ) . unwrap ( ) ) ; 
933930        let  defq = VirtQueue :: new ( GuestAddress ( 0 ) ,  & mem,  16 ) ; 
934931        balloon. set_queue ( DEFLATE_INDEX ,  defq. create_queue ( ) ) ; 
935-         balloon. activate ( mem. clone ( ) ,  interrupt ) . unwrap ( ) ; 
932+         balloon. activate ( mem. clone ( ) ,  default_interrupt ( ) ) . unwrap ( ) ; 
936933
937934        let  page_addr = 0x10 ; 
938935
@@ -978,10 +975,9 @@ pub(crate) mod tests {
978975    fn  test_stats ( )  { 
979976        let  mut  balloon = Balloon :: new ( 0 ,  true ,  1 ,  false ) . unwrap ( ) ; 
980977        let  mem = default_mem ( ) ; 
981-         let  interrupt = Arc :: new ( IrqTrigger :: new ( ) . unwrap ( ) ) ; 
982978        let  statsq = VirtQueue :: new ( GuestAddress ( 0 ) ,  & mem,  16 ) ; 
983979        balloon. set_queue ( STATS_INDEX ,  statsq. create_queue ( ) ) ; 
984-         balloon. activate ( mem. clone ( ) ,  interrupt ) . unwrap ( ) ; 
980+         balloon. activate ( mem. clone ( ) ,  default_interrupt ( ) ) . unwrap ( ) ; 
985981
986982        let  page_addr = 0x100 ; 
987983
@@ -1057,7 +1053,11 @@ pub(crate) mod tests {
10571053                assert!( balloon. stats_desc_index. is_some( ) ) ; 
10581054                balloon. process_stats_timer_event( ) . unwrap( ) ; 
10591055                assert!( balloon. stats_desc_index. is_none( ) ) ; 
1060-                 assert!( balloon. interrupt_trigger( ) . has_pending_irq( IrqType :: Vring ) ) ; 
1056+                 assert!( 
1057+                     balloon
1058+                         . interrupt_trigger( ) 
1059+                         . has_pending_interrupt( VirtioInterruptType :: Queue ( STATS_INDEX  as  u16 ) ) 
1060+                 ) ; 
10611061            } ) ; 
10621062        } 
10631063    } 
@@ -1066,23 +1066,21 @@ pub(crate) mod tests {
10661066    fn  test_process_balloon_queues ( )  { 
10671067        let  mut  balloon = Balloon :: new ( 0x10 ,  true ,  0 ,  false ) . unwrap ( ) ; 
10681068        let  mem = default_mem ( ) ; 
1069-         let  interrupt = Arc :: new ( IrqTrigger :: new ( ) . unwrap ( ) ) ; 
10701069        let  infq = VirtQueue :: new ( GuestAddress ( 0 ) ,  & mem,  16 ) ; 
10711070        let  defq = VirtQueue :: new ( GuestAddress ( 0 ) ,  & mem,  16 ) ; 
10721071
10731072        balloon. set_queue ( INFLATE_INDEX ,  infq. create_queue ( ) ) ; 
10741073        balloon. set_queue ( DEFLATE_INDEX ,  defq. create_queue ( ) ) ; 
10751074
1076-         balloon. activate ( mem,  interrupt ) . unwrap ( ) ; 
1075+         balloon. activate ( mem,  default_interrupt ( ) ) . unwrap ( ) ; 
10771076        balloon. process_virtio_queues ( ) 
10781077    } 
10791078
10801079    #[ test]  
10811080    fn  test_update_stats_interval ( )  { 
10821081        let  mut  balloon = Balloon :: new ( 0 ,  true ,  0 ,  false ) . unwrap ( ) ; 
10831082        let  mem = default_mem ( ) ; 
1084-         let  interrupt = Arc :: new ( IrqTrigger :: new ( ) . unwrap ( ) ) ; 
1085-         balloon. activate ( mem,  interrupt) . unwrap ( ) ; 
1083+         balloon. activate ( mem,  default_interrupt ( ) ) . unwrap ( ) ; 
10861084        assert_eq ! ( 
10871085            format!( "{:?}" ,  balloon. update_stats_polling_interval( 1 ) ) , 
10881086            "Err(StatisticsStateChange)" 
@@ -1091,8 +1089,7 @@ pub(crate) mod tests {
10911089
10921090        let  mut  balloon = Balloon :: new ( 0 ,  true ,  1 ,  false ) . unwrap ( ) ; 
10931091        let  mem = default_mem ( ) ; 
1094-         let  interrupt = Arc :: new ( IrqTrigger :: new ( ) . unwrap ( ) ) ; 
1095-         balloon. activate ( mem,  interrupt) . unwrap ( ) ; 
1092+         balloon. activate ( mem,  default_interrupt ( ) ) . unwrap ( ) ; 
10961093        assert_eq ! ( 
10971094            format!( "{:?}" ,  balloon. update_stats_polling_interval( 0 ) ) , 
10981095            "Err(StatisticsStateChange)" 
@@ -1113,7 +1110,7 @@ pub(crate) mod tests {
11131110        let  mut  balloon = Balloon :: new ( 0 ,  true ,  0 ,  false ) . unwrap ( ) ; 
11141111        // Switch the state to active. 
11151112        balloon. device_state  =
1116-             DeviceState :: Activated ( ( single_region_mem ( 0x1 ) ,  Arc :: new ( IrqTrigger :: new ( ) . unwrap ( ) ) ) ) ; 
1113+             DeviceState :: Activated ( ( single_region_mem ( 0x1 ) ,  default_interrupt ( ) ) ) ; 
11171114
11181115        assert_eq ! ( balloon. num_pages( ) ,  0 ) ; 
11191116        assert_eq ! ( balloon. actual_pages( ) ,  0 ) ; 
0 commit comments