On Mon, Mar 27, 2017 at 04:22:19PM +1100, Alexey Kardashevskiy wrote: > This enables in-kernel handling of H_PUT_TCE_INDIRECT and > H_STUFF_TCE hypercalls. The host kernel support is there since v4.6, > in particular d3695aa4f452 > ("KVM: PPC: Add support for multiple-TCE hcalls"). > > H_PUT_TCE is already accelerated and does not need any special enablement. > > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru>
Applied to ppc-for-2.10. > --- > target/ppc/kvm_ppc.h | 6 ++++++ > hw/ppc/spapr.c | 4 +++- > target/ppc/kvm.c | 14 ++++++++++++++ > 3 files changed, 23 insertions(+), 1 deletion(-) > > diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h > index 4b2fd9a609..f48243d13f 100644 > --- a/target/ppc/kvm_ppc.h > +++ b/target/ppc/kvm_ppc.h > @@ -39,6 +39,7 @@ target_ulong kvmppc_configure_v3_mmu(PowerPCCPU *cpu, > #ifndef CONFIG_USER_ONLY > off_t kvmppc_alloc_rma(void **rma); > bool kvmppc_spapr_use_multitce(void); > +int kvmppc_spapr_enable_inkernel_multitce(void); > void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t page_shift, > uint64_t bus_offset, uint32_t nb_table, > int *pfd, bool need_vfio); > @@ -180,6 +181,11 @@ static inline bool kvmppc_spapr_use_multitce(void) > return false; > } > > +static inline int kvmppc_spapr_enable_inkernel_multitce(void) > +{ > + return -1; > +} > + > static inline void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t > page_shift, > uint64_t bus_offset, > uint32_t nb_table, > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 0e1c29bcf8..8027716f73 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -2360,10 +2360,12 @@ static void ppc_spapr_init(MachineState *machine) > > qemu_register_boot_set(spapr_boot_set, spapr); > > - /* to stop and start vmclock */ > if (kvm_enabled()) { > + /* to stop and start vmclock */ > qemu_add_vm_change_state_handler(cpu_ppc_clock_vm_state_change, > &spapr->tb); > + > + kvmppc_spapr_enable_inkernel_multitce(); > } > } > > diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c > index 6dc39623e5..560ce655c7 100644 > --- a/target/ppc/kvm.c > +++ b/target/ppc/kvm.c > @@ -2194,6 +2194,20 @@ bool kvmppc_spapr_use_multitce(void) > return cap_spapr_multitce; > } > > +int kvmppc_spapr_enable_inkernel_multitce(void) > +{ > + int ret; > + > + ret = kvm_vm_enable_cap(kvm_state, KVM_CAP_PPC_ENABLE_HCALL, 0, > + H_PUT_TCE_INDIRECT, 1); > + if (!ret) { > + ret = kvm_vm_enable_cap(kvm_state, KVM_CAP_PPC_ENABLE_HCALL, 0, > + H_STUFF_TCE, 1); > + } > + > + return ret; > +} > + > void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t page_shift, > uint64_t bus_offset, uint32_t nb_table, > int *pfd, bool need_vfio) -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature