On Wed, 16 Apr 2014 13:38:27 +0200 Alexander Graf <ag...@suse.de> wrote:
> > On 16.04.2014, at 13:22, Alexander Graf <ag...@suse.de> wrote: > > > > > On 14.04.14 18:48, Cornelia Huck wrote: > >> Provide helper functions for enabling capabilities (on a vcpu and on a vm). > >> > >> Reviewed-by: Thomas Huth <th...@linux.vnet.ibm.com> > >> Signed-off-by: Cornelia Huck <cornelia.h...@de.ibm.com> > >> --- > >> include/sysemu/kvm.h | 4 ++++ > >> kvm-all.c | 33 ++++++++++++++++++++++++++++++++- > >> 2 files changed, 36 insertions(+), 1 deletion(-) > >> > >> diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h > >> index 0bee1e8..2ff5ad3 100644 > >> --- a/include/sysemu/kvm.h > >> +++ b/include/sysemu/kvm.h > >> @@ -294,6 +294,10 @@ bool kvm_arch_stop_on_emulation_error(CPUState *cpu); > >> int kvm_check_extension(KVMState *s, unsigned int extension); > >> +int kvm_enable_cap_vm(KVMState *s, unsigned int capability, ...); > >> + > >> +int kvm_enable_cap_vcpu(CPUState *cpu, unsigned int capability, ...); > >> + > >> uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function, > >> uint32_t index, int reg); > >> diff --git a/kvm-all.c b/kvm-all.c > >> index cd4111d..658e50c 100644 > >> --- a/kvm-all.c > >> +++ b/kvm-all.c > >> @@ -501,7 +501,38 @@ int kvm_check_extension(KVMState *s, unsigned int > >> extension) > >> return ret; > >> } > >> -static int kvm_set_ioeventfd_mmio(int fd, hwaddr addr, uint32_t val, > >> +int kvm_enable_cap_vm(KVMState *s, unsigned int capability, ...) > >> +{ > >> + struct kvm_enable_cap cap = {}; > >> + va_list ap; > >> + int i; > >> + > >> + cap.cap = capability; > >> + va_start(ap, capability); > >> + for (i = 0; i < 4; i++) { > >> + cap.args[i] = va_arg(ap, uint64_t); > > > > Is this legit? Can we just pull items off the stack without running beyond? > > For inspiration on how to know the number of arguments that got passed in, > check out > > http://git.qemu.org/?p=qemu.git;a=blob;f=include/sysemu/device_tree.h#l40 Ah, that is probably better than splattering args with random stuff. Will try.