@@ -22,7 +22,6 @@ use std::sync::atomic::{AtomicI32, Ordering};
22
22
use std:: sync:: LazyLock ;
23
23
use std:: sync:: Mutex ;
24
24
25
- #[ cfg( any( target_os = "macos" , feature = "tee" ) ) ]
26
25
use crossbeam_channel:: unbounded;
27
26
#[ cfg( feature = "blk" ) ]
28
27
use devices:: virtio:: block:: ImageType ;
@@ -1510,29 +1509,29 @@ pub extern "C" fn krun_start_enter(ctx_id: u32) -> i32 {
1510
1509
#[ cfg( target_os = "macos" ) ]
1511
1510
let ( sender, receiver) = unbounded ( ) ;
1512
1511
1513
- #[ cfg( target_arch = "x86_64" ) ]
1514
- let ( irq_sender, irq_receiver) = crossbeam_channel:: unbounded ( ) ;
1515
1512
#[ cfg( feature = "tee" ) ]
1516
1513
let ( pm_sender, pm_receiver) = unbounded ( ) ;
1517
1514
#[ cfg( feature = "tee" ) ]
1518
1515
let pm_efd =
1519
1516
EventFd :: new ( EFD_SEMAPHORE ) . expect ( "unable to create TEE memory properties eventfd" ) ;
1517
+ #[ cfg( target_arch = "x86_64" ) ]
1518
+ let ( sender, receiver) = unbounded ( ) ;
1520
1519
1521
1520
let _vmm = match vmm:: builder:: build_microvm (
1522
1521
& ctx_cfg. vmr ,
1523
1522
& mut event_manager,
1524
1523
ctx_cfg. shutdown_efd ,
1525
1524
#[ cfg( target_os = "macos" ) ]
1526
1525
sender,
1527
- #[ cfg( target_arch = "x86_64" ) ]
1528
- irq_sender,
1529
1526
#[ cfg( feature = "tee" ) ]
1530
1527
(
1531
1528
pm_sender,
1532
1529
pm_efd
1533
1530
. try_clone ( )
1534
1531
. expect ( "unable to clone TEE memory properties eventfd" ) ,
1535
1532
) ,
1533
+ #[ cfg( target_arch = "x86_64" ) ]
1534
+ sender,
1536
1535
) {
1537
1536
Ok ( vmm) => vmm,
1538
1537
Err ( e) => {
@@ -1544,9 +1543,6 @@ pub extern "C" fn krun_start_enter(ctx_id: u32) -> i32 {
1544
1543
#[ cfg( any( target_os = "macos" , feature = "tee" ) ) ]
1545
1544
let mapper_vmm = _vmm. clone ( ) ;
1546
1545
1547
- #[ cfg( target_arch = "x86_64" ) ]
1548
- let irq_vmm = _vmm. clone ( ) ;
1549
-
1550
1546
#[ cfg( target_os = "macos" ) ]
1551
1547
if ctx_cfg. gpu_virgl_flags . is_some ( ) {
1552
1548
std:: thread:: Builder :: new ( )
@@ -1569,50 +1565,7 @@ pub extern "C" fn krun_start_enter(ctx_id: u32) -> i32 {
1569
1565
1570
1566
#[ cfg( target_arch = "x86_64" ) ]
1571
1567
if ctx_cfg. vmr . split_irqchip {
1572
- std:: thread:: Builder :: new ( )
1573
- . name ( "irq worker" . into ( ) )
1574
- . spawn ( move || loop {
1575
- match irq_receiver. recv ( ) {
1576
- Err ( e) => error ! ( "Error in receiver: {:?}" , e) ,
1577
- Ok ( ( message, evt_fd) ) => match message {
1578
- devices:: legacy:: IrqWorkerMessage :: GsiRoute ( entries) => {
1579
- let mut irq_routing = utils:: sized_vec:: vec_with_array_field :: <
1580
- kvm_bindings:: kvm_irq_routing ,
1581
- kvm_bindings:: kvm_irq_routing_entry ,
1582
- > ( entries. len ( ) ) ;
1583
- irq_routing[ 0 ] . nr = entries. len ( ) as u32 ;
1584
- irq_routing[ 0 ] . flags = 0 ;
1585
-
1586
- unsafe {
1587
- let entries_slice: & mut [ kvm_bindings:: kvm_irq_routing_entry ] =
1588
- irq_routing[ 0 ] . entries . as_mut_slice ( entries. len ( ) ) ;
1589
- entries_slice. copy_from_slice ( & entries) ;
1590
- }
1591
-
1592
- irq_vmm
1593
- . lock ( )
1594
- . unwrap ( )
1595
- . kvm_vm ( )
1596
- . fd ( )
1597
- . set_gsi_routing ( & irq_routing[ 0 ] )
1598
- . unwrap ( ) ;
1599
-
1600
- evt_fd. write ( 1 ) . unwrap ( ) ;
1601
- }
1602
- devices:: legacy:: IrqWorkerMessage :: IrqLine ( irq, active) => {
1603
- irq_vmm
1604
- . lock ( )
1605
- . unwrap ( )
1606
- . kvm_vm ( )
1607
- . fd ( )
1608
- . set_irq_line ( irq, active)
1609
- . unwrap ( ) ;
1610
- evt_fd. write ( 1 ) . unwrap ( ) ;
1611
- }
1612
- } ,
1613
- }
1614
- } )
1615
- . unwrap ( ) ;
1568
+ vmm:: worker:: start_worker_thread ( _vmm. clone ( ) , receiver. clone ( ) ) . unwrap ( ) ;
1616
1569
}
1617
1570
1618
1571
#[ cfg( feature = "tee" ) ]
0 commit comments