@@ -129,30 +129,32 @@ impl KvmVcpu {
129
129
vm_fd : & VmFd ,
130
130
vcpu_features : & [ VcpuFeatures ] ,
131
131
) -> Result < ( ) , KvmVcpuError > {
132
- let mut kvi = Self :: default_kvi ( vm_fd, self . index ) ?;
132
+ let mut kvi = Self :: default_kvi ( vm_fd) ?;
133
133
134
134
for feature in vcpu_features. iter ( ) {
135
135
let index = feature. index as usize ;
136
136
kvi. features [ index] = feature. bitmap . apply ( kvi. features [ index] ) ;
137
137
}
138
138
139
- self . init_vcpu ( & kvi) ?;
140
- self . finalize_vcpu ( & kvi) ?;
141
-
142
139
self . kvi = if !vcpu_features. is_empty ( ) {
143
140
Some ( kvi)
144
141
} else {
145
142
None
146
143
} ;
147
144
145
+ // Non-boot cpus are powered off initially.
146
+ if 0 < self . index {
147
+ kvi. features [ 0 ] |= 1 << kvm_bindings:: KVM_ARM_VCPU_POWER_OFF ;
148
+ }
149
+
150
+ self . init_vcpu ( & kvi) ?;
151
+ self . finalize_vcpu ( & kvi) ?;
152
+
148
153
Ok ( ( ) )
149
154
}
150
155
151
156
/// Creates default kvi struct based on vcpu index.
152
- pub fn default_kvi (
153
- vm_fd : & VmFd ,
154
- index : u8 ,
155
- ) -> Result < kvm_bindings:: kvm_vcpu_init , KvmVcpuError > {
157
+ pub fn default_kvi ( vm_fd : & VmFd ) -> Result < kvm_bindings:: kvm_vcpu_init , KvmVcpuError > {
156
158
let mut kvi: kvm_bindings:: kvm_vcpu_init = kvm_bindings:: kvm_vcpu_init:: default ( ) ;
157
159
// This reads back the kernel's preferred target type.
158
160
vm_fd
@@ -161,11 +163,6 @@ impl KvmVcpu {
161
163
// We already checked that the capability is supported.
162
164
kvi. features [ 0 ] |= 1 << kvm_bindings:: KVM_ARM_VCPU_PSCI_0_2 ;
163
165
164
- // Non-boot cpus are powered off initially.
165
- if index > 0 {
166
- kvi. features [ 0 ] |= 1 << kvm_bindings:: KVM_ARM_VCPU_POWER_OFF ;
167
- }
168
-
169
166
Ok ( kvi)
170
167
}
171
168
@@ -185,7 +182,7 @@ impl KvmVcpu {
185
182
pub fn restore_state ( & mut self , vm_fd : & VmFd , state : & VcpuState ) -> Result < ( ) , KvmVcpuError > {
186
183
let kvi = match state. kvi {
187
184
Some ( kvi) => kvi,
188
- None => Self :: default_kvi ( vm_fd, self . index ) ?,
185
+ None => Self :: default_kvi ( vm_fd) ?,
189
186
} ;
190
187
self . kvi = state. kvi ;
191
188
0 commit comments