@@ -140,16 +140,6 @@ pub fn setup_boot_regs(
140
140
Ok ( ( ) )
141
141
}
142
142
143
- /// Read the MPIDR - Multiprocessor Affinity Register.
144
- pub fn get_mpidr ( vcpufd : & VcpuFd ) -> Result < u64 , VcpuArchError > {
145
- // MPIDR register is 64 bit wide on aarch64
146
- let mut mpidr = [ 0_u8 ; 8 ] ;
147
- match vcpufd. get_one_reg ( MPIDR_EL1 , & mut mpidr) {
148
- Err ( err) => Err ( VcpuArchError :: GetOneReg ( MPIDR_EL1 , err) ) ,
149
- Ok ( _) => Ok ( u64:: from_le_bytes ( mpidr) ) ,
150
- }
151
- }
152
-
153
143
/// Saves the states of the system registers into `state`.
154
144
///
155
145
/// # Arguments
@@ -277,7 +267,6 @@ pub struct KvmVcpu {
277
267
pub fd : VcpuFd ,
278
268
/// Vcpu peripherals, such as buses
279
269
pub peripherals : Peripherals ,
280
- mpidr : u64 ,
281
270
kvi : kvm_vcpu_init ,
282
271
}
283
272
@@ -311,14 +300,18 @@ impl KvmVcpu {
311
300
index,
312
301
fd : kvm_vcpu,
313
302
peripherals : Default :: default ( ) ,
314
- mpidr : 0 ,
315
303
kvi,
316
304
} )
317
305
}
318
306
319
- /// Gets the MPIDR register value.
320
- pub fn get_mpidr ( & self ) -> u64 {
321
- self . mpidr
307
+ /// Read the MPIDR - Multiprocessor Affinity Register.
308
+ pub fn get_mpidr ( & self ) -> Result < u64 , VcpuArchError > {
309
+ // MPIDR register is 64 bit wide on aarch64
310
+ let mut mpidr = [ 0_u8 ; 8 ] ;
311
+ match self . fd . get_one_reg ( MPIDR_EL1 , & mut mpidr) {
312
+ Err ( err) => Err ( VcpuArchError :: GetOneReg ( MPIDR_EL1 , err) ) ,
313
+ Ok ( _) => Ok ( u64:: from_le_bytes ( mpidr) ) ,
314
+ }
322
315
}
323
316
324
317
/// Configures an aarch64 specific vcpu for booting Linux.
@@ -351,8 +344,6 @@ impl KvmVcpu {
351
344
)
352
345
. map_err ( KvmVcpuError :: ConfigureRegisters ) ?;
353
346
354
- self . mpidr = get_mpidr ( & self . fd ) . map_err ( KvmVcpuError :: ConfigureRegisters ) ?;
355
-
356
347
Ok ( ( ) )
357
348
}
358
349
@@ -393,7 +384,7 @@ impl KvmVcpu {
393
384
..Default :: default ( )
394
385
} ;
395
386
get_all_registers ( & self . fd , & mut state. regs ) . map_err ( KvmVcpuError :: SaveState ) ?;
396
- state. mpidr = get_mpidr ( & self . fd ) . map_err ( KvmVcpuError :: SaveState ) ?;
387
+ state. mpidr = self . get_mpidr ( ) . map_err ( KvmVcpuError :: SaveState ) ?;
397
388
398
389
state. kvi = self . kvi ;
399
390
// We don't save power off state in a snapshot, because
@@ -757,21 +748,17 @@ mod tests {
757
748
758
749
#[ test]
759
750
fn test_read_mpidr ( ) {
760
- let kvm = Kvm :: new ( vec ! [ ] ) . unwrap ( ) ;
761
- let vm = kvm. fd . create_vm ( ) . unwrap ( ) ;
762
- let vcpu = vm. create_vcpu ( 0 ) . unwrap ( ) ;
763
- let mut kvi: kvm_bindings:: kvm_vcpu_init = kvm_bindings:: kvm_vcpu_init:: default ( ) ;
764
- vm. get_preferred_target ( & mut kvi) . unwrap ( ) ;
751
+ let ( _, _, vcpu, _) = setup_vcpu ( 0x10000 ) ;
765
752
766
753
// Must fail when vcpu is not initialized yet.
767
- let res = get_mpidr ( & vcpu ) ;
754
+ let res = vcpu . get_mpidr ( ) ;
768
755
assert ! ( matches!(
769
756
res. unwrap_err( ) ,
770
757
VcpuArchError :: GetOneReg ( MPIDR_EL1 , _)
771
758
) ) ;
772
759
773
- vcpu. vcpu_init ( & kvi ) . unwrap ( ) ;
774
- assert_eq ! ( get_mpidr( & vcpu ) . unwrap( ) , 0x8000_0000 ) ;
760
+ vcpu. init_vcpu ( ) . unwrap ( ) ;
761
+ assert_eq ! ( vcpu . get_mpidr( ) . unwrap( ) , 0x8000_0000 ) ;
775
762
}
776
763
777
764
#[ test]
0 commit comments