[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH 4/9] target/ppc: Add kvmppc_hpt_needs_host_contigu
From: |
Cédric Le Goater |
Subject: |
Re: [Qemu-ppc] [PATCH 4/9] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper |
Date: |
Thu, 21 Jun 2018 07:56:58 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 |
On 06/18/2018 08:36 AM, David Gibson wrote:
> KVM HV has a restriction that for HPT mode guests, guest pages must be hpa
> contiguous as well as gpa contiguous. We have to account for that in
> various places. We determine whether we're subject to this restriction
> from the SMMU information exposed by KVM.
>
> Planned cleanups to the way we handle this will require knowing whether
> this restriction is in play in wider parts of the code. So, expose a
> helper function which returns it.
>
> This does mean some redundant calls to kvm_get_smmu_info(), but they'll go
> away again with future cleanups.
>
> Signed-off-by: David Gibson <address@hidden>
Reviewed-by: Cédric Le Goater <address@hidden>
but this patch is already committed it seems.
C.
> ---
> target/ppc/kvm.c | 17 +++++++++++++++--
> target/ppc/kvm_ppc.h | 6 ++++++
> 2 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> index 5c0e313ca6..50b5d01432 100644
> --- a/target/ppc/kvm.c
> +++ b/target/ppc/kvm.c
> @@ -406,9 +406,22 @@ target_ulong kvmppc_configure_v3_mmu(PowerPCCPU *cpu,
> }
> }
>
> +bool kvmppc_hpt_needs_host_contiguous_pages(void)
> +{
> + PowerPCCPU *cpu = POWERPC_CPU(first_cpu);
> + static struct kvm_ppc_smmu_info smmu_info;
> +
> + if (!kvm_enabled()) {
> + return false;
> + }
> +
> + kvm_get_smmu_info(cpu, &smmu_info);
> + return !!(smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL);
> +}
> +
> static bool kvm_valid_page_size(uint32_t flags, long rampgsize, uint32_t
> shift)
> {
> - if (!(flags & KVM_PPC_PAGE_SIZES_REAL)) {
> + if (!kvmppc_hpt_needs_host_contiguous_pages()) {
> return true;
> }
>
> @@ -445,7 +458,7 @@ static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
> /* If we have HV KVM, we need to forbid CI large pages if our
> * host page size is smaller than 64K.
> */
> - if (smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL) {
> + if (kvmppc_hpt_needs_host_contiguous_pages()) {
> if (getpagesize() >= 0x10000) {
> cpu->hash64_opts->flags |= PPC_HASH64_CI_LARGEPAGE;
> } else {
> diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
> index e2840e1d33..a7ddb8a5d6 100644
> --- a/target/ppc/kvm_ppc.h
> +++ b/target/ppc/kvm_ppc.h
> @@ -70,6 +70,7 @@ int kvmppc_resize_hpt_prepare(PowerPCCPU *cpu, target_ulong
> flags, int shift);
> int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shift);
> bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
>
> +bool kvmppc_hpt_needs_host_contiguous_pages(void);
> bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path);
>
> #else
> @@ -222,6 +223,11 @@ static inline uint64_t kvmppc_rma_size(uint64_t
> current_size,
> return ram_size;
> }
>
> +static inline bool kvmppc_hpt_needs_host_contiguous_pages(void)
> +{
> + return false;
> +}
> +
> static inline bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
> {
> return true;
>
- [Qemu-ppc] [PATCH 0/9] spapr: Clean up pagesize handling, David Gibson, 2018/06/18
- [Qemu-ppc] [PATCH 3/9] spapr: Add cpu_apply hook to capabilities, David Gibson, 2018/06/18
- [Qemu-ppc] [PATCH 2/9] spapr: Compute effective capability values earlier, David Gibson, 2018/06/18
- [Qemu-ppc] [PATCH 4/9] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper, David Gibson, 2018/06/18
- [Qemu-ppc] [PATCH 1/9] target/ppc: Allow cpu compatiblity checks based on type, not instance, David Gibson, 2018/06/18
- [Qemu-ppc] [PATCH 7/9] target/ppc: Add ppc_hash64_filter_pagesizes(), David Gibson, 2018/06/18
- [Qemu-ppc] [PATCH 8/9] spapr: Limit available pagesizes to provide a consistent guest environment, David Gibson, 2018/06/18