Message ID | 1458711153-15988-3-git-send-email-peterx@redhat.com |
---|---|
State | New |
Headers | show |
On 23/03/16 08:32, Peter Xu wrote: > diff --git a/target-arm/kvm.c b/target-arm/kvm.c > index 969ab0b..0a7f9a6 100644 > --- a/target-arm/kvm.c > +++ b/target-arm/kvm.c > @@ -62,13 +62,17 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t *cpus_to_try, > goto err; > } > > + if (!init) { > + goto finish; > + } > + > ret = ioctl(vmfd, KVM_ARM_PREFERRED_TARGET, init); > if (ret >= 0) { > ret = ioctl(cpufd, KVM_ARM_VCPU_INIT, init); > if (ret < 0) { > goto err; > } > - } else { > + } else if (cpus_to_try) { > /* Old kernel which doesn't know about the > * PREFERRED_TARGET ioctl: we know it will only support > * creating one kind of guest CPU which is its preferred > @@ -85,8 +89,12 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t *cpus_to_try, > if (ret < 0) { > goto err; > } > + } else { > + /* Not providing cpus_to_try, do nothing. */ > + ; I think it's probably not the best idea to skip CPU initialization here. I'd rather raise an error in such case. If we supplied non-NULL init argument then we need VCPU been initialized, don't we? If we pass NULL as init then we actually skip this code. Kind regards, Sergey > } > > +finish: > fdarray[0] = kvmfd; > fdarray[1] = vmfd; > fdarray[2] = cpufd;
On Wed, Mar 23, 2016 at 03:24:16PM +0300, Sergey Fedorov wrote: > On 23/03/16 08:32, Peter Xu wrote: > > diff --git a/target-arm/kvm.c b/target-arm/kvm.c > > index 969ab0b..0a7f9a6 100644 > > --- a/target-arm/kvm.c > > +++ b/target-arm/kvm.c > > @@ -62,13 +62,17 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t *cpus_to_try, > > goto err; > > } > > > > + if (!init) { > > + goto finish; > > + } > > + > > ret = ioctl(vmfd, KVM_ARM_PREFERRED_TARGET, init); > > if (ret >= 0) { > > ret = ioctl(cpufd, KVM_ARM_VCPU_INIT, init); > > if (ret < 0) { > > goto err; > > } > > - } else { > > + } else if (cpus_to_try) { > > /* Old kernel which doesn't know about the > > * PREFERRED_TARGET ioctl: we know it will only support > > * creating one kind of guest CPU which is its preferred > > @@ -85,8 +89,12 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t *cpus_to_try, > > if (ret < 0) { > > goto err; > > } > > + } else { > > + /* Not providing cpus_to_try, do nothing. */ > > + ; > > I think it's probably not the best idea to skip CPU initialization here. > I'd rather raise an error in such case. If we supplied non-NULL init > argument then we need VCPU been initialized, don't we? If we pass NULL > as init then we actually skip this code. Though current we will never go into this else... I agree that we should raise error if stepped into it. Will fix. Thanks! -- peterx
diff --git a/target-arm/kvm.c b/target-arm/kvm.c index 969ab0b..0a7f9a6 100644 --- a/target-arm/kvm.c +++ b/target-arm/kvm.c @@ -62,13 +62,17 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t *cpus_to_try, goto err; } + if (!init) { + goto finish; + } + ret = ioctl(vmfd, KVM_ARM_PREFERRED_TARGET, init); if (ret >= 0) { ret = ioctl(cpufd, KVM_ARM_VCPU_INIT, init); if (ret < 0) { goto err; } - } else { + } else if (cpus_to_try) { /* Old kernel which doesn't know about the * PREFERRED_TARGET ioctl: we know it will only support * creating one kind of guest CPU which is its preferred @@ -85,8 +89,12 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t *cpus_to_try, if (ret < 0) { goto err; } + } else { + /* Not providing cpus_to_try, do nothing. */ + ; } +finish: fdarray[0] = kvmfd; fdarray[1] = vmfd; fdarray[2] = cpufd; diff --git a/target-arm/kvm_arm.h b/target-arm/kvm_arm.h index 07f0c72..6bcfe6c 100644 --- a/target-arm/kvm_arm.h +++ b/target-arm/kvm_arm.h @@ -124,9 +124,11 @@ void kvm_arm_reset_vcpu(ARMCPU *cpu); * kvm_arm_create_scratch_host_vcpu: * @cpus_to_try: array of QEMU_KVM_ARM_TARGET_* values (terminated with * QEMU_KVM_ARM_TARGET_NONE) to try as fallback if the kernel does not - * know the PREFERRED_TARGET ioctl + * know the PREFERRED_TARGET ioctl. If NULL is provided, will try + * nothing. * @fdarray: filled in with kvmfd, vmfd, cpufd file descriptors in that order - * @init: filled in with the necessary values for creating a host vcpu + * @init: filled in with the necessary values for creating a host + * vcpu. If NULL is provided, will not init the vCPU. * * Create a scratch vcpu in its own VM of the type preferred by the host * kernel (as would be used for '-cpu host'), for purposes of probing it
Some more lines to make sure we allow NULL for 1st/3rd parameter. Signed-off-by: Peter Xu <peterx@redhat.com> --- target-arm/kvm.c | 10 +++++++++- target-arm/kvm_arm.h | 6 ++++-- 2 files changed, 13 insertions(+), 3 deletions(-)