On Thu, Jun 27, 2019 at 08:30:57AM +0100, Auger Eric wrote: > Hi Drew, > > On 6/21/19 6:34 PM, Andrew Jones wrote: > > kvm_arm_create_scratch_host_vcpu() takes a struct kvm_vcpu_init > > parameter. Rather than just using it as an output parameter to > > pass back the preferred target, use it also as an input parameter, > > allowing a caller to pass a selected target if they wish and to > > also pass cpu features. If the caller doesn't want to select a > > target they can pass -1 for the target which indicates they want > > to use the preferred target and have it passed back like before. > > > > Signed-off-by: Andrew Jones <drjo...@redhat.com> > > --- > > target/arm/kvm.c | 20 +++++++++++++++----- > > target/arm/kvm32.c | 6 +++++- > > target/arm/kvm64.c | 6 +++++- > > 3 files changed, 25 insertions(+), 7 deletions(-) > > > > diff --git a/target/arm/kvm.c b/target/arm/kvm.c > > index 60645a196d3d..66c0c198604a 100644 > > --- a/target/arm/kvm.c > > +++ b/target/arm/kvm.c > > @@ -64,7 +64,7 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t > > *cpus_to_try, > > int *fdarray, > > struct kvm_vcpu_init *init) > > { > > - int ret, kvmfd = -1, vmfd = -1, cpufd = -1; > > + int ret = 0, kvmfd = -1, vmfd = -1, cpufd = -1; > > > > kvmfd = qemu_open("/dev/kvm", O_RDWR); > > if (kvmfd < 0) { > > @@ -84,7 +84,14 @@ bool kvm_arm_create_scratch_host_vcpu(const uint32_t > > *cpus_to_try, > > goto finish; > > } > > > > - ret = ioctl(vmfd, KVM_ARM_PREFERRED_TARGET, init); > > + if (init->target == -1) { > > + struct kvm_vcpu_init preferred; > > + > > + ret = ioctl(vmfd, KVM_ARM_PREFERRED_TARGET, &preferred); > > + if (!ret) { > > + init->target = preferred.target; > wouldn't it be safe to copy the whole struct. Kernel code says: > /* > * For now, we don't return any features. > * In future, we might use features to return target > * specific features available for the preferred > * target type. > */
Marc or Christoffer should preferably comment on this. I think the spirit of the ABI is that can use the whole return of KVM_ARM_PREFERRED_TARGET as a reasonable template for KVM_VCPU_INIT without it blowing up in your face. I initially tried to report SVE as available through this route, but we decided against it precisely because userspace might be doing the above. [...] Cheers ---Dave