22//
33// SPDX-License-Identifier: Apache-2.0
44//
5- use std:: sync:: { Arc , Mutex } ;
65use std:: time:: Instant ;
76
87use acpi_tables:: Aml ;
@@ -192,7 +191,7 @@ bitflags! {
192191
193192impl MemoryAffinity {
194193 fn from_region (
195- region : & Arc < GuestRegionMmap > ,
194+ region : & GuestRegionMmap ,
196195 proximity_domain : u32 ,
197196 flags : MemAffinityFlags ,
198197 ) -> Self {
@@ -258,34 +257,33 @@ struct ViotPciRangeNode {
258257}
259258
260259pub fn create_dsdt_table (
261- device_manager : & Arc < Mutex < DeviceManager > > ,
262- cpu_manager : & Arc < Mutex < CpuManager > > ,
263- memory_manager : & Arc < Mutex < MemoryManager > > ,
260+ device_manager : & DeviceManager ,
261+ cpu_manager : & CpuManager ,
262+ memory_manager : & MemoryManager ,
264263) -> Sdt {
265264 trace_scoped ! ( "create_dsdt_table" ) ;
266265 // DSDT
267266 let mut dsdt = Sdt :: new ( * b"DSDT" , 36 , 6 , * b"CLOUDH" , * b"CHDSDT " , 1 ) ;
268267
269268 let mut bytes = Vec :: new ( ) ;
270269
271- device_manager. lock ( ) . unwrap ( ) . to_aml_bytes ( & mut bytes) ;
272- cpu_manager. lock ( ) . unwrap ( ) . to_aml_bytes ( & mut bytes) ;
273- memory_manager. lock ( ) . unwrap ( ) . to_aml_bytes ( & mut bytes) ;
270+ device_manager. to_aml_bytes ( & mut bytes) ;
271+ cpu_manager. to_aml_bytes ( & mut bytes) ;
272+ memory_manager. to_aml_bytes ( & mut bytes) ;
274273 dsdt. append_slice ( & bytes) ;
275274
276275 dsdt
277276}
278277
279278const FACP_DSDT_OFFSET : usize = 140 ;
280279
281- fn create_facp_table ( dsdt_offset : GuestAddress , device_manager : & Arc < Mutex < DeviceManager > > ) -> Sdt {
280+ fn create_facp_table ( dsdt_offset : GuestAddress , device_manager : & DeviceManager ) -> Sdt {
282281 trace_scoped ! ( "create_facp_table" ) ;
283282
284283 // Revision 6 of the ACPI FADT table is 276 bytes long
285284 let mut facp = Sdt :: new ( * b"FACP" , 276 , 6 , * b"CLOUDH" , * b"CHFACP " , 1 ) ;
286285
287286 {
288- let device_manager = device_manager. lock ( ) . unwrap ( ) ;
289287 if let Some ( address) = device_manager. acpi_platform_addresses ( ) . reset_reg_address {
290288 // RESET_REG
291289 facp. write ( 116 , address) ;
@@ -369,7 +367,7 @@ fn create_tpm2_table() -> Sdt {
369367
370368fn create_srat_table (
371369 numa_nodes : & NumaNodes ,
372- device_manager : & Arc < Mutex < DeviceManager > > ,
370+ device_manager : & DeviceManager ,
373371 #[ cfg( target_arch = "x86_64" ) ] topology : Option < ( u16 , u16 , u16 , u16 ) > ,
374372) -> Sdt {
375373 let mut srat = Sdt :: new ( * b"SRAT" , 36 , 3 , * b"CLOUDH" , * b"CHSRAT " , 1 ) ;
@@ -381,7 +379,6 @@ fn create_srat_table(
381379 assert_eq ! ( std:: mem:: size_of:: <MemoryAffinity >( ) , 40 ) ;
382380 // Confirm struct size matches ACPI 6.6 spec
383381 assert_eq ! ( std:: mem:: size_of:: <GenericInitiatorAffinity >( ) , 32 ) ;
384- let dm = device_manager. lock ( ) . unwrap ( ) ;
385382 for ( node_id, node) in numa_nodes. iter ( ) {
386383 let proximity_domain = * node_id;
387384
@@ -436,7 +433,7 @@ fn create_srat_table(
436433 // Add Generic Initiator Affinity structures for device-only NUMA nodes
437434 if let Some ( device_id) = & node. device_id {
438435 // Resolve device_id to guest BDF
439- if let Some ( bdf) = dm . get_device_bdf ( device_id) {
436+ if let Some ( bdf) = device_manager . get_device_bdf ( device_id) {
440437 srat. append ( GenericInitiatorAffinity :: from_pci_bdf (
441438 bdf,
442439 proximity_domain,
@@ -852,9 +849,9 @@ fn create_viot_table(iommu_bdf: &PciBdf, devices_bdf: &[PciBdf]) -> Sdt {
852849// * `Vec<u64>` contains a list of table pointers stored in XSDT.
853850fn create_acpi_tables_internal (
854851 dsdt_addr : GuestAddress ,
855- device_manager : & Arc < Mutex < DeviceManager > > ,
856- cpu_manager : & Arc < Mutex < CpuManager > > ,
857- memory_manager : & Arc < Mutex < MemoryManager > > ,
852+ device_manager : & DeviceManager ,
853+ cpu_manager : & CpuManager ,
854+ memory_manager : & MemoryManager ,
858855 numa_nodes : & NumaNodes ,
859856 tpm_enabled : bool ,
860857) -> ( Rsdp , Vec < u8 > , Vec < u64 > ) {
@@ -876,15 +873,13 @@ fn create_acpi_tables_internal(
876873 // MADT
877874 #[ cfg( target_arch = "aarch64" ) ]
878875 let vgic = device_manager
879- . lock ( )
880- . unwrap ( )
881876 . get_interrupt_controller ( )
882877 . unwrap ( )
883878 . lock ( )
884879 . unwrap ( )
885880 . get_vgic ( )
886881 . unwrap ( ) ;
887- let madt = cpu_manager. lock ( ) . unwrap ( ) . create_madt (
882+ let madt = cpu_manager. create_madt (
888883 #[ cfg( target_arch = "aarch64" ) ]
889884 vgic,
890885 ) ;
@@ -897,7 +892,7 @@ fn create_acpi_tables_internal(
897892 // PPTT
898893 #[ cfg( target_arch = "aarch64" ) ]
899894 {
900- let pptt = cpu_manager. lock ( ) . unwrap ( ) . create_pptt ( ) ;
895+ let pptt = cpu_manager. create_pptt ( ) ;
901896 let pptt_addr = prev_tbl_addr. checked_add ( prev_tbl_len) . unwrap ( ) ;
902897 tables_bytes. extend_from_slice ( pptt. as_slice ( ) ) ;
903898 xsdt_table_pointers. push ( pptt_addr. 0 ) ;
@@ -917,7 +912,7 @@ fn create_acpi_tables_internal(
917912 }
918913
919914 // MCFG
920- let mcfg = create_mcfg_table ( device_manager. lock ( ) . unwrap ( ) . pci_segments ( ) ) ;
915+ let mcfg = create_mcfg_table ( device_manager. pci_segments ( ) ) ;
921916 let mcfg_addr = prev_tbl_addr. checked_add ( prev_tbl_len) . unwrap ( ) ;
922917 tables_bytes. extend_from_slice ( mcfg. as_slice ( ) ) ;
923918 xsdt_table_pointers. push ( mcfg_addr. 0 ) ;
@@ -928,16 +923,12 @@ fn create_acpi_tables_internal(
928923 #[ cfg( target_arch = "aarch64" ) ]
929924 {
930925 let is_serial_on = device_manager
931- . lock ( )
932- . unwrap ( )
933926 . get_device_info ( )
934927 . clone ( )
935928 . contains_key ( & ( DeviceType :: Serial , DeviceType :: Serial . to_string ( ) ) ) ;
936929 let serial_device_addr = arch:: layout:: LEGACY_SERIAL_MAPPED_IO_START . raw_value ( ) ;
937930 let serial_device_irq = if is_serial_on {
938931 device_manager
939- . lock ( )
940- . unwrap ( )
941932 . get_device_info ( )
942933 . clone ( )
943934 . get ( & ( DeviceType :: Serial , DeviceType :: Serial . to_string ( ) ) )
@@ -979,7 +970,7 @@ fn create_acpi_tables_internal(
979970 // Only created if the NUMA nodes list is not empty.
980971 if !numa_nodes. is_empty ( ) {
981972 #[ cfg( target_arch = "x86_64" ) ]
982- let topology = cpu_manager. lock ( ) . unwrap ( ) . get_vcpu_topology ( ) ;
973+ let topology = cpu_manager. get_vcpu_topology ( ) ;
983974 // SRAT
984975 let srat = create_srat_table (
985976 numa_nodes,
@@ -1003,7 +994,7 @@ fn create_acpi_tables_internal(
1003994
1004995 #[ cfg( target_arch = "aarch64" ) ]
1005996 {
1006- let iort = create_iort_table ( device_manager. lock ( ) . unwrap ( ) . pci_segments ( ) ) ;
997+ let iort = create_iort_table ( device_manager. pci_segments ( ) ) ;
1007998 let iort_addr = prev_tbl_addr. checked_add ( prev_tbl_len) . unwrap ( ) ;
1008999 tables_bytes. extend_from_slice ( iort. as_slice ( ) ) ;
10091000 xsdt_table_pointers. push ( iort_addr. 0 ) ;
@@ -1012,8 +1003,7 @@ fn create_acpi_tables_internal(
10121003 }
10131004
10141005 // VIOT
1015- if let Some ( ( iommu_bdf, devices_bdf) ) = device_manager. lock ( ) . unwrap ( ) . iommu_attached_devices ( )
1016- {
1006+ if let Some ( ( iommu_bdf, devices_bdf) ) = device_manager. iommu_attached_devices ( ) {
10171007 let viot = create_viot_table ( iommu_bdf, devices_bdf) ;
10181008
10191009 let viot_addr = prev_tbl_addr. checked_add ( prev_tbl_len) . unwrap ( ) ;
@@ -1040,9 +1030,9 @@ fn create_acpi_tables_internal(
10401030
10411031#[ cfg( feature = "fw_cfg" ) ]
10421032pub fn create_acpi_tables_for_fw_cfg (
1043- device_manager : & Arc < Mutex < DeviceManager > > ,
1044- cpu_manager : & Arc < Mutex < CpuManager > > ,
1045- memory_manager : & Arc < Mutex < MemoryManager > > ,
1033+ device_manager : & DeviceManager ,
1034+ cpu_manager : & CpuManager ,
1035+ memory_manager : & MemoryManager ,
10461036 numa_nodes : & NumaNodes ,
10471037 tpm_enabled : bool ,
10481038) -> Result < ( ) , crate :: vm:: Error > {
@@ -1087,8 +1077,6 @@ pub fn create_acpi_tables_for_fw_cfg(
10871077 checksums. push ( xsdt_checksum) ;
10881078
10891079 device_manager
1090- . lock ( )
1091- . unwrap ( )
10921080 . fw_cfg ( )
10931081 . expect ( "fw_cfg must be present" )
10941082 . lock ( )
@@ -1099,9 +1087,9 @@ pub fn create_acpi_tables_for_fw_cfg(
10991087
11001088pub fn create_acpi_tables (
11011089 guest_mem : & GuestMemoryMmap ,
1102- device_manager : & Arc < Mutex < DeviceManager > > ,
1103- cpu_manager : & Arc < Mutex < CpuManager > > ,
1104- memory_manager : & Arc < Mutex < MemoryManager > > ,
1090+ device_manager : & DeviceManager ,
1091+ cpu_manager : & CpuManager ,
1092+ memory_manager : & MemoryManager ,
11051093 numa_nodes : & NumaNodes ,
11061094 tpm_enabled : bool ,
11071095) -> GuestAddress {
@@ -1139,9 +1127,9 @@ pub fn create_acpi_tables(
11391127
11401128#[ cfg( feature = "tdx" ) ]
11411129pub fn create_acpi_tables_tdx (
1142- device_manager : & Arc < Mutex < DeviceManager > > ,
1143- cpu_manager : & Arc < Mutex < CpuManager > > ,
1144- memory_manager : & Arc < Mutex < MemoryManager > > ,
1130+ device_manager : & DeviceManager ,
1131+ cpu_manager : & CpuManager ,
1132+ memory_manager : & MemoryManager ,
11451133 numa_nodes : & NumaNodes ,
11461134) -> Vec < Sdt > {
11471135 // DSDT
@@ -1155,18 +1143,16 @@ pub fn create_acpi_tables_tdx(
11551143 tables. push ( create_facp_table ( GuestAddress ( 0 ) , device_manager) ) ;
11561144
11571145 // MADT
1158- tables. push ( cpu_manager. lock ( ) . unwrap ( ) . create_madt ( ) ) ;
1146+ tables. push ( cpu_manager. create_madt ( ) ) ;
11591147
11601148 // MCFG
1161- tables. push ( create_mcfg_table (
1162- device_manager. lock ( ) . unwrap ( ) . pci_segments ( ) ,
1163- ) ) ;
1149+ tables. push ( create_mcfg_table ( device_manager. pci_segments ( ) ) ) ;
11641150
11651151 // SRAT and SLIT
11661152 // Only created if the NUMA nodes list is not empty.
11671153 if !numa_nodes. is_empty ( ) {
11681154 #[ cfg( target_arch = "x86_64" ) ]
1169- let topology = cpu_manager. lock ( ) . unwrap ( ) . get_vcpu_topology ( ) ;
1155+ let topology = cpu_manager. get_vcpu_topology ( ) ;
11701156
11711157 // SRAT
11721158 tables. push ( create_srat_table (
@@ -1181,8 +1167,7 @@ pub fn create_acpi_tables_tdx(
11811167 }
11821168
11831169 // VIOT
1184- if let Some ( ( iommu_bdf, devices_bdf) ) = device_manager. lock ( ) . unwrap ( ) . iommu_attached_devices ( )
1185- {
1170+ if let Some ( ( iommu_bdf, devices_bdf) ) = device_manager. iommu_attached_devices ( ) {
11861171 tables. push ( create_viot_table ( iommu_bdf, devices_bdf) ) ;
11871172 }
11881173
0 commit comments