@@ -15,6 +15,7 @@ pub struct VmMachineUninit {
1515 config : AxVMConfig ,
1616 pt_levels : usize ,
1717 pa_max : usize ,
18+ pa_bits : usize ,
1819}
1920
2021impl VmMachineUninitOps for VmMachineUninit {
@@ -25,6 +26,7 @@ impl VmMachineUninitOps for VmMachineUninit {
2526 config,
2627 pt_levels : 4 ,
2728 pa_max : usize:: MAX ,
29+ pa_bits : 48 ,
2830 }
2931 }
3032
@@ -63,23 +65,32 @@ impl VmMachineUninit {
6365 let vcpu_count = vcpus. len ( ) ;
6466
6567 for vcpu in & vcpus {
66- let ( max_levels, max_pa) =
67- vcpu. with_hcpu ( |cpu| ( cpu. max_guest_page_table_levels ( ) , cpu. pa_range . end ) ) ;
68+ let ( max_levels, max_pa, pa_bits) = vcpu. with_hcpu ( |cpu| {
69+ (
70+ cpu. max_guest_page_table_levels ( ) ,
71+ cpu. pa_range . end ,
72+ cpu. pa_bits ,
73+ )
74+ } ) ;
6875 if max_levels < self . pt_levels {
6976 self . pt_levels = max_levels;
7077 }
7178 if max_pa < self . pa_max {
7279 self . pa_max = max_pa;
7380 }
81+
82+ if pa_bits < self . pa_bits {
83+ self . pa_bits = pa_bits;
84+ }
7485 }
7586
7687 if self . pt_levels == 3 {
7788 self . pa_max = self . pa_max . min ( 0x8000000000 ) ;
7889 }
7990
8091 debug ! (
81- "VM {} ({}) vCPU count: {}, \n Max Guest Page Table Levels: {}\n Max PA: {:#x}" ,
82- self . config. id, self . config. name, vcpu_count, self . pt_levels, self . pa_max
92+ "VM {} ({}) vCPU count: {}, \n Max Guest Page Table Levels: {}\n Max PA: {:#x}\n PA Bits: {} " ,
93+ self . config. id, self . config. name, vcpu_count, self . pt_levels, self . pa_max, self . pa_bits
8394 ) ;
8495 Ok ( vcpus)
8596 }
@@ -121,6 +132,7 @@ impl VmMachineUninit {
121132 vcpu. vcpu . set_entry ( kernel_entry) . unwrap ( ) ;
122133 vcpu. vcpu . set_dtb_addr ( dtb_addr) . unwrap ( ) ;
123134 vcpu. set_pt_level ( self . pt_levels ) ;
135+ vcpu. set_pa_bits ( self . pa_bits ) ;
124136
125137 let setup_config = Aarch64VCpuSetupConfig {
126138 passthrough_interrupt : self . config . interrupt_mode ( )
0 commit comments