From nobody Tue Feb 10 15:45:22 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1529664700746539.0781256333489; Fri, 22 Jun 2018 03:51:40 -0700 (PDT) Received: from localhost ([::1]:60757 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fWJfI-0004f8-27 for importer@patchew.org; Fri, 22 Jun 2018 06:51:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45761) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fWJPv-0000hG-6S for qemu-devel@nongnu.org; Fri, 22 Jun 2018 06:35:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fWJPs-0003Sh-No for qemu-devel@nongnu.org; Fri, 22 Jun 2018 06:35:47 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:56107) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fWJPr-0003P8-Uo; Fri, 22 Jun 2018 06:35:44 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 41Bw2H30kHz9s7M; Fri, 22 Jun 2018 20:35:34 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1529663735; bh=4JLNuZOc3oROrWXV082ERH9/K7BvZEP4qZtFC1h7RlU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eme6ZKh1xJtXk+CGjW6VFeICPBmMNEmMQ0n5FkUhG2l2oZyUIHAOQx9G/FeeoozS6 MRTVx16X5zbbWrTJb2zVOng71ow9YjQyRrtovDrmmNdegZIJUnAFtgf5er3dya4poY OiWFmke5DMGu1PV8ckPEujExG9S3JBQLsy1i77o4= From: David Gibson To: peter.maydell@linaro.org Date: Fri, 22 Jun 2018 20:35:13 +1000 Message-Id: <20180622103528.28598-11-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180622103528.28598-1-david@gibson.dropbear.id.au> References: <20180622103528.28598-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 10/25] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, aik@ozlabs.ru, qemu-devel@nongnu.org, agraf@suse.de, groug@kaod.org, qemu-ppc@nongnu.org, clg@kaod.org, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Greg Kurz Reviewed-by: C=C3=A9dric Le Goater --- 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, } } =20 +bool kvmppc_hpt_needs_host_contiguous_pages(void) +{ + PowerPCCPU *cpu =3D 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 s= hift) { - if (!(flags & KVM_PPC_PAGE_SIZES_REAL)) { + if (!kvmppc_hpt_needs_host_contiguous_pages()) { return true; } =20 @@ -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() >=3D 0x10000) { cpu->hash64_opts->flags |=3D 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_ulo= ng flags, int shift); int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shif= t); bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu); =20 +bool kvmppc_hpt_needs_host_contiguous_pages(void); bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path); =20 #else @@ -222,6 +223,11 @@ static inline uint64_t kvmppc_rma_size(uint64_t curren= t_size, return ram_size; } =20 +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; --=20 2.17.1