aboutsummaryrefslogtreecommitdiff
path: root/target/arm
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2022-09-30 12:38:24 +0100
committerPeter Maydell <peter.maydell@linaro.org>2022-10-10 14:52:23 +0100
commitbbde13cd14ad4eec18529ce0bf5876058464e124 (patch)
tree6b5595ecad836d66e4102bfb5217c84ad1ecce1f /target/arm
parentf1d33f55c47dfdaf8daacd618588ad3ae4c452d1 (diff)
downloadqemu-bbde13cd14ad4eec18529ce0bf5876058464e124.zip
qemu-bbde13cd14ad4eec18529ce0bf5876058464e124.tar.gz
qemu-bbde13cd14ad4eec18529ce0bf5876058464e124.tar.bz2
target/arm/kvm: Retry KVM_CREATE_VM call if it fails EINTR
Occasionally the KVM_CREATE_VM ioctl can return EINTR, even though there is no pending signal to be taken. In commit 94ccff13382055 we added a retry-on-EINTR loop to the KVM_CREATE_VM call in the generic KVM code. Adopt the same approach for the use of the ioctl in the Arm-specific KVM code (where we use it to create a scratch VM for probing for various things). For more information, see the mailing list thread: https://lore.kernel.org/qemu-devel/8735e0s1zw.wl-maz@kernel.org/ Reported-by: Vitaly Chikunov <vt@altlinux.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Vitaly Chikunov <vt@altlinux.org> Reviewed-by: Eric Auger <eric.auger@redhat.com> Acked-by: Marc Zyngier <maz@kernel.org> Message-id: 20220930113824.1933293-1-peter.maydell@linaro.org
Diffstat (limited to 'target/arm')
-rw-r--r--target/arm/kvm.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
index e5c1bd5..1e4de9b 100644
--- a/target/arm/kvm.c
+++ b/target/arm/kvm.c
@@ -79,7 +79,9 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t *cpus_to_try,
if (max_vm_pa_size < 0) {
max_vm_pa_size = 0;
}
- vmfd = ioctl(kvmfd, KVM_CREATE_VM, max_vm_pa_size);
+ do {
+ vmfd = ioctl(kvmfd, KVM_CREATE_VM, max_vm_pa_size);
+ } while (vmfd == -1 && errno == EINTR);
if (vmfd < 0) {
goto err;
}