Message ID | 1529500053-21704-4-git-send-email-eric.auger@redhat.com |
---|---|
State | New |
Headers | show |
Series | KVM/ARM: Dynamic and larger GPA size | expand |
On Wed, Jun 20, 2018 at 03:07:30PM +0200, Eric Auger wrote: > Add the kvm_get_max_vm_phys_shift() helper that returns the > log of the maximum IPA size supported by KVM. This capability > needs to be known to create the VM with a correct IPA max size > (kvm_type passed along KVM_CREATE_VM ioctl. > > Signed-off-by: Eric Auger <eric.auger@redhat.com> > --- > accel/kvm/kvm-all.c | 7 +++++++ > accel/stubs/kvm-stub.c | 5 +++++ > include/sysemu/kvm.h | 1 + > 3 files changed, 13 insertions(+) > > diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c > index 0590986..137c38e 100644 > --- a/accel/kvm/kvm-all.c > +++ b/accel/kvm/kvm-all.c > @@ -280,6 +280,13 @@ static int kvm_set_user_memory_region(KVMMemoryListener *kml, KVMSlot *slot) > return ret; > } > > +int kvm_get_max_vm_phys_shift(MachineState *ms) > +{ > + KVMState *s = KVM_STATE(ms->accelerator); > + > + return kvm_ioctl(s, KVM_ARM_GET_MAX_VM_PHYS_SHIFT, 0); From the ioctl() name, I'm assuming this is an ARM specific call. In which case, shouldn't it be in target/arm.kvm.c, not kvm-all.c ? > +} > + > int kvm_destroy_vcpu(CPUState *cpu) > { > KVMState *s = kvm_state; > diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c > index 02d5170..7575ba7 100644 > --- a/accel/stubs/kvm-stub.c > +++ b/accel/stubs/kvm-stub.c > @@ -161,6 +161,11 @@ bool kvm_has_free_slot(MachineState *ms) > return false; > } > > +int kvm_get_max_vm_phys_shift(MachineState *ms) > +{ > + return 0; > +} > + > void kvm_init_cpu_signals(CPUState *cpu) > { > abort(); > diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h > index 0b64b8e..240e3d9 100644 > --- a/include/sysemu/kvm.h > +++ b/include/sysemu/kvm.h > @@ -206,6 +206,7 @@ extern KVMState *kvm_state; > /* external API */ > > bool kvm_has_free_slot(MachineState *ms); > +int kvm_get_max_vm_phys_shift(MachineState *ms); > bool kvm_has_sync_mmu(void); > int kvm_has_vcpu_events(void); > int kvm_has_robust_singlestep(void);
Hi David, On 06/21/2018 02:37 AM, David Gibson wrote: > On Wed, Jun 20, 2018 at 03:07:30PM +0200, Eric Auger wrote: >> Add the kvm_get_max_vm_phys_shift() helper that returns the >> log of the maximum IPA size supported by KVM. This capability >> needs to be known to create the VM with a correct IPA max size >> (kvm_type passed along KVM_CREATE_VM ioctl. >> >> Signed-off-by: Eric Auger <eric.auger@redhat.com> >> --- >> accel/kvm/kvm-all.c | 7 +++++++ >> accel/stubs/kvm-stub.c | 5 +++++ >> include/sysemu/kvm.h | 1 + >> 3 files changed, 13 insertions(+) >> >> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c >> index 0590986..137c38e 100644 >> --- a/accel/kvm/kvm-all.c >> +++ b/accel/kvm/kvm-all.c >> @@ -280,6 +280,13 @@ static int kvm_set_user_memory_region(KVMMemoryListener *kml, KVMSlot *slot) >> return ret; >> } >> >> +int kvm_get_max_vm_phys_shift(MachineState *ms) >> +{ >> + KVMState *s = KVM_STATE(ms->accelerator); >> + >> + return kvm_ioctl(s, KVM_ARM_GET_MAX_VM_PHYS_SHIFT, 0); > > From the ioctl() name, I'm assuming this is an ARM specific call. > > In which case, shouldn't it be in target/arm.kvm.c, not kvm-all.c ? Yes definitively. Thanks Eric > >> +} >> + >> int kvm_destroy_vcpu(CPUState *cpu) >> { >> KVMState *s = kvm_state; >> diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c >> index 02d5170..7575ba7 100644 >> --- a/accel/stubs/kvm-stub.c >> +++ b/accel/stubs/kvm-stub.c >> @@ -161,6 +161,11 @@ bool kvm_has_free_slot(MachineState *ms) >> return false; >> } >> >> +int kvm_get_max_vm_phys_shift(MachineState *ms) >> +{ >> + return 0; >> +} >> + >> void kvm_init_cpu_signals(CPUState *cpu) >> { >> abort(); >> diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h >> index 0b64b8e..240e3d9 100644 >> --- a/include/sysemu/kvm.h >> +++ b/include/sysemu/kvm.h >> @@ -206,6 +206,7 @@ extern KVMState *kvm_state; >> /* external API */ >> >> bool kvm_has_free_slot(MachineState *ms); >> +int kvm_get_max_vm_phys_shift(MachineState *ms); >> bool kvm_has_sync_mmu(void); >> int kvm_has_vcpu_events(void); >> int kvm_has_robust_singlestep(void); >
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 0590986..137c38e 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -280,6 +280,13 @@ static int kvm_set_user_memory_region(KVMMemoryListener *kml, KVMSlot *slot) return ret; } +int kvm_get_max_vm_phys_shift(MachineState *ms) +{ + KVMState *s = KVM_STATE(ms->accelerator); + + return kvm_ioctl(s, KVM_ARM_GET_MAX_VM_PHYS_SHIFT, 0); +} + int kvm_destroy_vcpu(CPUState *cpu) { KVMState *s = kvm_state; diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c index 02d5170..7575ba7 100644 --- a/accel/stubs/kvm-stub.c +++ b/accel/stubs/kvm-stub.c @@ -161,6 +161,11 @@ bool kvm_has_free_slot(MachineState *ms) return false; } +int kvm_get_max_vm_phys_shift(MachineState *ms) +{ + return 0; +} + void kvm_init_cpu_signals(CPUState *cpu) { abort(); diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index 0b64b8e..240e3d9 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -206,6 +206,7 @@ extern KVMState *kvm_state; /* external API */ bool kvm_has_free_slot(MachineState *ms); +int kvm_get_max_vm_phys_shift(MachineState *ms); bool kvm_has_sync_mmu(void); int kvm_has_vcpu_events(void); int kvm_has_robust_singlestep(void);
Add the kvm_get_max_vm_phys_shift() helper that returns the log of the maximum IPA size supported by KVM. This capability needs to be known to create the VM with a correct IPA max size (kvm_type passed along KVM_CREATE_VM ioctl. Signed-off-by: Eric Auger <eric.auger@redhat.com> --- accel/kvm/kvm-all.c | 7 +++++++ accel/stubs/kvm-stub.c | 5 +++++ include/sysemu/kvm.h | 1 + 3 files changed, 13 insertions(+)