On Wed, 16 Apr 2014 13:58:31 +0200 Cornelia Huck <cornelia.h...@de.ibm.com> wrote:
> 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. > Huh, how does <integer type> array[] = { __VA_ARGS__ }; even compile? On both i386 and s390, I get "initialization makes integer from pointer without a cast" - is arm different?