kvm_cpu__setup_pvtime() probes KVM_CAP_STEAL_TIME with kvm__supports_extension(), which issues KVM_CHECK_EXTENSION on the global /dev/kvm fd. That reports the host's raw capabilities, unaware of any per-VM restrictions. pKVM does not offer steal-time to a protected VM, and reflects that on the VM fd alone. kvmtool goes on to KVM_HAS_DEVICE_ATTR, the kernel refuses the PVTIME attribute with -EPERM, and kvm_cpu__arch_init() dies: Fatal: Unable to initialise vcpu Query it on the VM fd via kvm__supports_vm_extension(), as commit 84464ba0246b ("arm64: Query per-VM capabilities when selecting vCPU features") did for the vCPU feature probes. kvmtool then takes the no_pvtime path it already has when steal-time is unsupported. Signed-off-by: Fuad Tabba --- arm64/pvtime.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arm64/pvtime.c b/arm64/pvtime.c index 2933ac7..839aa8a 100644 --- a/arm64/pvtime.c +++ b/arm64/pvtime.c @@ -58,8 +58,8 @@ int kvm_cpu__setup_pvtime(struct kvm_cpu *vcpu) if (kvm_cfg->no_pvtime) return 0; - has_stolen_time = kvm__supports_extension(vcpu->kvm, - KVM_CAP_STEAL_TIME); + has_stolen_time = kvm__supports_vm_extension(vcpu->kvm, + KVM_CAP_STEAL_TIME); if (!has_stolen_time) { kvm_cfg->no_pvtime = true; return 0; -- 2.39.5