From patchwork Mon Feb 24 23:37:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402185 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 97C961395 for ; Mon, 24 Feb 2020 23:47:49 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0F1D02176D for ; Mon, 24 Feb 2020 23:47:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="o+ULUonw" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0F1D02176D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46276 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NS0-0006rd-7c for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:47:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47236) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIP-0006XW-TF for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:38:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIF-00084H-AQ for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:53 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:40469) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NID-0007mF-PU; Mon, 24 Feb 2020 18:37:43 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ16KYCz9sPR; Tue, 25 Feb 2020 10:37:29 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587449; bh=8A+KaP+Y4XZ/WHaF2XZly7J1NhFQyfdVqyaRuyRsHFA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o+ULUonw5nSJf+7mFpf/0Ou8MbHSGm0Eny+5tJ4gTn2GitGCxGDy+RDaRyrSWu/np pNYepwsLf1dSTwnFCxBXlCFmuAhCQ8mtLA31Rddnpy26fWuu42BXyol33ZFMUozfM0 bnjGx6ZRsjyrg6D7QEzLalcdbFcBmvUcGfLGVgTs= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 01/18] pseries: Update SLOF firmware image Date: Tue, 25 Feb 2020 10:37:07 +1100 Message-Id: <20200224233724.46415-2-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Alexey Kardashevskiy This adds vTPM support, full-FDT-rebuild-on-CAS fixes and basic ext4 support. The full changelog is: Alexey Kardashevskiy (10): disk-label: Prepare for extenting disk-label: Support Linux GPT partition type ext2: Prepare for extending ext2: Rename group-desc-size ext2: Read size of group descriptors ext2: Read all 64bit of inode number ext2/4: Add basic extent tree support elf64: Add LE64 ABIv1/2 support for loading images to given address fdt: Fix creating new nodes at H_CAS version: update to 20200221 Greg Kurz (2): fdt: Fix update of "interrupt-controller" node at CAS fdt: Delete nodes of devices removed between boot and CAS Stefan Berger (8): slof: Implement SLOF_get_keystroke() and SLOF_reset() slof: Make linker script variables accessible qemu: Make print_version variable accessible tpm: Add TPM CRQ driver implementation tpm: Add sha256 implementation tcgbios: Add TPM 2.0 support and firmware API tcgbios: Implement menu to clear TPM 2 and activate its PCR banks tcgbios: Measure the GPT table Signed-off-by: Alexey Kardashevskiy Signed-off-by: David Gibson --- pc-bios/README | 2 +- pc-bios/slof.bin | Bin 931032 -> 968616 bytes roms/SLOF | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/README b/pc-bios/README index d6d33d237f..a71fb318b3 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -14,7 +14,7 @@ - SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware implementation for certain IBM POWER hardware. The sources are at https://github.com/aik/SLOF, and the image currently in qemu is - built from git tag qemu-slof-20191217. + built from git tag qemu-slof-20200221. - sgabios (the Serial Graphics Adapter option ROM) provides a means for legacy x86 software to communicate with an attached serial console as diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin index 78d8b26cbb88a1913c3b262fd5be29ff89afd554..1c5948561639cfe244ad5d60506050ddb0c9b5b2 100644 GIT binary patch delta 263704 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

*z#t4z+-Gnk=A4y+fXu` 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 J?c49Y^)CQ54<-Nr diff --git a/roms/SLOF b/roms/SLOF index 9546892a80..7c98b3b613 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit 9546892a80d5a4c73deea6719de46372f007f4a6 +Subproject commit 7c98b3b613338a385722a953517349664aa4f532 From patchwork Mon Feb 24 23:37:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402153 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A7A90138D for ; Mon, 24 Feb 2020 23:38:46 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D8B6421D7E for ; Mon, 24 Feb 2020 23:38:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="Qimy6N6G" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D8B6421D7E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46104 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NJE-00083u-NA for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:38:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47041) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIF-0006Db-6s for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NID-000820-VZ for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:43 -0500 Received: from ozlabs.org ([203.11.71.1]:38445) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NID-0007mK-50; Mon, 24 Feb 2020 18:37:41 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ20tYgz9sQx; Tue, 25 Feb 2020 10:37:30 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587450; bh=3yZHI6i+ESlOY6Bm+OB1zHwskVZfGDMZIUebGR7XvSM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qimy6N6Gz3LjvVUqRZa8ALGP6sRN0em5SUHbrXQ5oT9ER+s4xYWxG1Z1DfYLXuZqV i9z9yXQEfNh19AsUAgSZOmIe/L66czPAP1T7B/lRlWpTTrxVyhD1YWrLIjknSbqoh2 1HeviM1j6lWk7+Bd2Hw1bhlne2I6z75nmd54ekSY= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 03/18] ppc: Remove stub of PPC970 HID4 implementation Date: Tue, 25 Feb 2020 10:37:09 +1100 Message-Id: <20200224233724.46415-4-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The PowerPC 970 CPU was a cut-down POWER4, which had hypervisor capability. However, it can be (and often was) strapped into "Apple mode", where the hypervisor capabilities were disabled (essentially putting it always in hypervisor mode). That's actually the only mode of the 970 we support in qemu, and we're unlikely to change that any time soon. However, we do have a partial implementation of the 970's HID4 register which affects things only relevant for hypervisor mode. That stub is also really ugly, since it attempts to duplicate the effects of HID4 by re-encoding it into the LPCR register used in newer CPUs, but in a really confusing way. Just get rid of it. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Greg Kurz --- target/ppc/mmu-hash64.c | 29 +---------------------------- target/ppc/translate_init.inc.c | 20 ++++++++------------ 2 files changed, 9 insertions(+), 40 deletions(-) diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index da8966ccf5..3e0be4d55f 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -1091,33 +1091,6 @@ void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) /* Filter out bits */ switch (env->mmu_model) { - case POWERPC_MMU_64B: /* 970 */ - if (val & 0x40) { - lpcr |= LPCR_LPES0; - } - if (val & 0x8000000000000000ull) { - lpcr |= LPCR_LPES1; - } - if (val & 0x20) { - lpcr |= (0x4ull << LPCR_RMLS_SHIFT); - } - if (val & 0x4000000000000000ull) { - lpcr |= (0x2ull << LPCR_RMLS_SHIFT); - } - if (val & 0x2000000000000000ull) { - lpcr |= (0x1ull << LPCR_RMLS_SHIFT); - } - env->spr[SPR_RMOR] = ((lpcr >> 41) & 0xffffull) << 26; - - /* - * XXX We could also write LPID from HID4 here - * but since we don't tag any translation on it - * it doesn't actually matter - * - * XXX For proper emulation of 970 we also need - * to dig HRMOR out of HID5 - */ - break; case POWERPC_MMU_2_03: /* P5p */ lpcr = val & (LPCR_RMLS | LPCR_ILE | LPCR_LPES0 | LPCR_LPES1 | @@ -1154,7 +1127,7 @@ void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) } break; default: - ; + g_assert_not_reached(); } env->spr[SPR_LPCR] = lpcr; ppc_hash64_update_rmls(cpu); diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c index a0d0eaabf2..ab79975fec 100644 --- a/target/ppc/translate_init.inc.c +++ b/target/ppc/translate_init.inc.c @@ -7895,25 +7895,21 @@ static void spr_write_lpcr(DisasContext *ctx, int sprn, int gprn) { gen_helper_store_lpcr(cpu_env, cpu_gpr[gprn]); } - -static void spr_write_970_hid4(DisasContext *ctx, int sprn, int gprn) -{ -#if defined(TARGET_PPC64) - spr_write_generic(ctx, sprn, gprn); - gen_helper_store_lpcr(cpu_env, cpu_gpr[gprn]); -#endif -} - #endif /* !defined(CONFIG_USER_ONLY) */ static void gen_spr_970_lpar(CPUPPCState *env) { #if !defined(CONFIG_USER_ONLY) - /* Logical partitionning */ - /* PPC970: HID4 is effectively the LPCR */ + /* + * PPC970: HID4 covers things later controlled by the LPCR and + * RMOR in later CPUs, but with a different encoding. We only + * support the 970 in "Apple mode" which has all hypervisor + * facilities disabled by strapping, so we can basically just + * ignore it + */ spr_register(env, SPR_970_HID4, "HID4", SPR_NOACCESS, SPR_NOACCESS, - &spr_read_generic, &spr_write_970_hid4, + &spr_read_generic, &spr_write_generic, 0x00000000); #endif } From patchwork Mon Feb 24 23:37:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402163 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F32DA138D for ; Mon, 24 Feb 2020 23:40:42 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C780B2084E for ; Mon, 24 Feb 2020 23:40:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="lBGUvJaJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C780B2084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46144 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NL7-0003sr-Uq for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:40:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47131) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIL-0006Kx-EO for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIK-00086h-13 for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:49 -0500 Received: from ozlabs.org ([203.11.71.1]:46699) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIJ-00083A-B0; Mon, 24 Feb 2020 18:37:47 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ256Wlz9sRN; Tue, 25 Feb 2020 10:37:30 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587450; bh=GpG7JIVsiHpMpesoVJsSFbR7MFKVdTtNyC10o80HfXM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lBGUvJaJYSMWEcxMYfTo/3GL2YEISwMo2dsklK0mKQZR1SRtJF1W/PQryDYqxM45q IIY+JI8IalBpvWhZqs0SK381fqYMtJOZ9zlAbvOWOIPxZChnZO1zXqSticwhkgqvSp FKeiKCfhxYFHYwcYmMEIpRdi/UxsYqyBcMI47GrQ= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 04/18] target/ppc: Correct handling of real mode accesses with vhyp on hash MMU Date: Tue, 25 Feb 2020 10:37:10 +1100 Message-Id: <20200224233724.46415-5-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" On ppc we have the concept of virtual hypervisor ("vhyp") mode, where we only model the non-hypervisor-privileged parts of the cpu. Essentially we model the hypervisor's behaviour from the point of view of a guest OS, but we don't model the hypervisor's execution. In particular, in this mode, qemu's notion of target physical address is a guest physical address from the vcpu's point of view. So accesses in guest real mode don't require translation. If we were modelling the hypervisor mode, we'd need to translate the guest physical address into a host physical address. Currently, we handle this sloppily: we rely on setting up the virtual LPCR and RMOR registers so that GPAs are simply HPAs plus an offset, which we set to zero. This is already conceptually dubious, since the LPCR and RMOR registers don't exist in the non-hypervisor portion of the CPU. It gets worse with POWER9, where RMOR and LPCR[VPM0] no longer exist at all. Clean this up by explicitly handling the vhyp case. While we're there, remove some unnecessary nesting of if statements that made the logic to select the correct real mode behaviour a bit less clear than it could be. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Greg Kurz --- target/ppc/mmu-hash64.c | 60 ++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index 3e0be4d55f..392f90e0ae 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -789,27 +789,30 @@ int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, */ raddr = eaddr & 0x0FFFFFFFFFFFFFFFULL; - /* In HV mode, add HRMOR if top EA bit is clear */ - if (msr_hv || !env->has_hv_mode) { + if (cpu->vhyp) { + /* + * In virtual hypervisor mode, there's nothing to do: + * EA == GPA == qemu guest address + */ + } else if (msr_hv || !env->has_hv_mode) { + /* In HV mode, add HRMOR if top EA bit is clear */ if (!(eaddr >> 63)) { raddr |= env->spr[SPR_HRMOR]; } - } else { - /* Otherwise, check VPM for RMA vs VRMA */ - if (env->spr[SPR_LPCR] & LPCR_VPM0) { - slb = &env->vrma_slb; - if (slb->sps) { - goto skip_slb_search; - } - /* Not much else to do here */ + } else if (env->spr[SPR_LPCR] & LPCR_VPM0) { + /* Emulated VRMA mode */ + slb = &env->vrma_slb; + if (!slb->sps) { + /* Invalid VRMA setup, machine check */ cs->exception_index = POWERPC_EXCP_MCHECK; env->error_code = 0; return 1; - } else if (raddr < env->rmls) { - /* RMA. Check bounds in RMLS */ - raddr |= env->spr[SPR_RMOR]; - } else { - /* The access failed, generate the approriate interrupt */ + } + + goto skip_slb_search; + } else { + /* Emulated old-style RMO mode, bounds check against RMLS */ + if (raddr >= env->rmls) { if (rwx == 2) { ppc_hash64_set_isi(cs, SRR1_PROTFAULT); } else { @@ -821,6 +824,8 @@ int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, } return 1; } + + raddr |= env->spr[SPR_RMOR]; } tlb_set_page(cs, eaddr & TARGET_PAGE_MASK, raddr & TARGET_PAGE_MASK, PAGE_READ | PAGE_WRITE | PAGE_EXEC, mmu_idx, @@ -953,22 +958,27 @@ hwaddr ppc_hash64_get_phys_page_debug(PowerPCCPU *cpu, target_ulong addr) /* In real mode the top 4 effective address bits are ignored */ raddr = addr & 0x0FFFFFFFFFFFFFFFULL; - /* In HV mode, add HRMOR if top EA bit is clear */ - if ((msr_hv || !env->has_hv_mode) && !(addr >> 63)) { + if (cpu->vhyp) { + /* + * In virtual hypervisor mode, there's nothing to do: + * EA == GPA == qemu guest address + */ + return raddr; + } else if ((msr_hv || !env->has_hv_mode) && !(addr >> 63)) { + /* In HV mode, add HRMOR if top EA bit is clear */ return raddr | env->spr[SPR_HRMOR]; - } - - /* Otherwise, check VPM for RMA vs VRMA */ - if (env->spr[SPR_LPCR] & LPCR_VPM0) { + } else if (env->spr[SPR_LPCR] & LPCR_VPM0) { + /* Emulated VRMA mode */ slb = &env->vrma_slb; if (!slb->sps) { return -1; } - } else if (raddr < env->rmls) { - /* RMA. Check bounds in RMLS */ - return raddr | env->spr[SPR_RMOR]; } else { - return -1; + /* Emulated old-style RMO mode, bounds check against RMLS */ + if (raddr >= env->rmls) { + return -1; + } + return raddr | env->spr[SPR_RMOR]; } } else { slb = slb_lookup(cpu, addr); From patchwork Mon Feb 24 23:37:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402159 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D09AD17D5 for ; Mon, 24 Feb 2020 23:40:17 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A83C62084E for ; Mon, 24 Feb 2020 23:40:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="oum7/qvG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A83C62084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46136 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NKi-000338-SD for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:40:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47038) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIF-0006Da-2N for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NID-00081j-OM for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:43 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:53611) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NID-0007mP-AI; Mon, 24 Feb 2020 18:37:41 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ23x7kz9sRG; Tue, 25 Feb 2020 10:37:30 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587450; bh=UAgl6xBtCPvJbiXShZ0Mi+hYqrfPO3qD5jDYAeMEwGQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oum7/qvGy9vayxqdR5XL+seO+mhjuhMAq2wZqsRe4Irp7AoIdfnBJsUsaODalewOC pFiX5UPCD2FDztpsJdLv8Yj3GLJh19kO150yxHf/afpGeTuqMu+TvMwscKIuSnyx1j HL4+abX5bPfc1SdfFZ7K6Bh672iarmcNafu8rHEc= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 05/18] target/ppc: Introduce ppc_hash64_use_vrma() helper Date: Tue, 25 Feb 2020 10:37:11 +1100 Message-Id: <20200224233724.46415-6-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" When running guests under a hypervisor, the hypervisor obviously needs to be protected from guest accesses even if those are in what the guest considers real mode (translation off). The POWER hardware provides two ways of doing that: The old way has guest real mode accesses simply offset and bounds checked into host addresses. It works, but requires that a significant chunk of the guest's memory - the RMA - be physically contiguous in the host, which is pretty inconvenient. The new way, known as VRMA, has guest real mode accesses translated in roughly the normal way but with some special parameters. In POWER7 and POWER8 the LPCR[VPM0] bit selected between the two modes, but in POWER9 only VRMA mode is supported and LPCR[VPM0] no longer exists. We handle that difference in behaviour in ppc_hash64_set_isi().. but not in other places that we blindly check LPCR[VPM0]. Correct those instances with a new helper to tell if we should be in VRMA mode. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Fabiano Rosas Reviewed-by: Greg Kurz --- target/ppc/mmu-hash64.c | 43 ++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index 392f90e0ae..e372c42add 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -668,6 +668,21 @@ unsigned ppc_hash64_hpte_page_shift_noslb(PowerPCCPU *cpu, return 0; } +static bool ppc_hash64_use_vrma(CPUPPCState *env) +{ + switch (env->mmu_model) { + case POWERPC_MMU_3_00: + /* + * ISAv3.0 (POWER9) always uses VRMA, the VPM0 field and RMOR + * register no longer exist + */ + return true; + + default: + return !!(env->spr[SPR_LPCR] & LPCR_VPM0); + } +} + static void ppc_hash64_set_isi(CPUState *cs, uint64_t error_code) { CPUPPCState *env = &POWERPC_CPU(cs)->env; @@ -676,15 +691,7 @@ static void ppc_hash64_set_isi(CPUState *cs, uint64_t error_code) if (msr_ir) { vpm = !!(env->spr[SPR_LPCR] & LPCR_VPM1); } else { - switch (env->mmu_model) { - case POWERPC_MMU_3_00: - /* Field deprecated in ISAv3.00 - interrupts always go to hyperv */ - vpm = true; - break; - default: - vpm = !!(env->spr[SPR_LPCR] & LPCR_VPM0); - break; - } + vpm = ppc_hash64_use_vrma(env); } if (vpm && !msr_hv) { cs->exception_index = POWERPC_EXCP_HISI; @@ -702,15 +709,7 @@ static void ppc_hash64_set_dsi(CPUState *cs, uint64_t dar, uint64_t dsisr) if (msr_dr) { vpm = !!(env->spr[SPR_LPCR] & LPCR_VPM1); } else { - switch (env->mmu_model) { - case POWERPC_MMU_3_00: - /* Field deprecated in ISAv3.00 - interrupts always go to hyperv */ - vpm = true; - break; - default: - vpm = !!(env->spr[SPR_LPCR] & LPCR_VPM0); - break; - } + vpm = ppc_hash64_use_vrma(env); } if (vpm && !msr_hv) { cs->exception_index = POWERPC_EXCP_HDSI; @@ -799,7 +798,7 @@ int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, if (!(eaddr >> 63)) { raddr |= env->spr[SPR_HRMOR]; } - } else if (env->spr[SPR_LPCR] & LPCR_VPM0) { + } else if (ppc_hash64_use_vrma(env)) { /* Emulated VRMA mode */ slb = &env->vrma_slb; if (!slb->sps) { @@ -967,7 +966,7 @@ hwaddr ppc_hash64_get_phys_page_debug(PowerPCCPU *cpu, target_ulong addr) } else if ((msr_hv || !env->has_hv_mode) && !(addr >> 63)) { /* In HV mode, add HRMOR if top EA bit is clear */ return raddr | env->spr[SPR_HRMOR]; - } else if (env->spr[SPR_LPCR] & LPCR_VPM0) { + } else if (ppc_hash64_use_vrma(env)) { /* Emulated VRMA mode */ slb = &env->vrma_slb; if (!slb->sps) { @@ -1056,8 +1055,7 @@ static void ppc_hash64_update_vrma(PowerPCCPU *cpu) slb->sps = NULL; /* Is VRMA enabled ? */ - lpcr = env->spr[SPR_LPCR]; - if (!(lpcr & LPCR_VPM0)) { + if (!ppc_hash64_use_vrma(env)) { return; } @@ -1065,6 +1063,7 @@ static void ppc_hash64_update_vrma(PowerPCCPU *cpu) * Make one up. Mostly ignore the ESID which will not be needed * for translation */ + lpcr = env->spr[SPR_LPCR]; vsid = SLB_VSID_VRMA; vrmasd = (lpcr & LPCR_VRMASD) >> LPCR_VRMASD_SHIFT; vsid |= (vrmasd << 4) & (SLB_VSID_L | SLB_VSID_LP); From patchwork Mon Feb 24 23:37:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402161 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C72A9138D for ; Mon, 24 Feb 2020 23:40:29 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9E5082084E for ; Mon, 24 Feb 2020 23:40:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="bGxi3TbE" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9E5082084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46138 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NKu-0003NT-O7 for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:40:28 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47145) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIM-0006N8-4K for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIK-000873-Ty for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:50 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:55425) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIK-00083R-JQ; Mon, 24 Feb 2020 18:37:48 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ31DY2z9sRl; Tue, 25 Feb 2020 10:37:30 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587451; bh=HA3KVP0fGxmfs8/fh2+7FtIQCVa4tNAovlFHQPDTU5A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bGxi3TbEIiACBSkQOsX9BR2VOqXDBmwhgRz1hII/9676M+0eyd1WoGDQoIa7FYFyc GR0DjeM2SAXPTQeBTYpnm1t06N/BdeLBpHBlnmtlSuOXCPo4YxmS6lxyYmlvidq864 hkFExg5DUv+0OjOiCyARv8LgzJAvgBPlXDRmsWgw= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 06/18] spapr, ppc: Remove VPM0/RMLS hacks for POWER9 Date: Tue, 25 Feb 2020 10:37:12 +1100 Message-Id: <20200224233724.46415-7-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" For the "pseries" machine, we use "virtual hypervisor" mode where we only model the CPU in non-hypervisor privileged mode. This means that we need guest physical addresses within the modelled cpu to be treated as absolute physical addresses. We used to do that by clearing LPCR[VPM0] and setting LPCR[RMLS] to a high limit so that the old offset based translation for guest mode applied, which does what we need. However, POWER9 has removed support for that translation mode, which meant we had some ugly hacks to keep it working. We now explicitly handle this sort of translation for virtual hypervisor mode, so the hacks aren't necessary. We don't need to set VPM0 and RMLS from the machine type code - they're now ignored in vhyp mode. On the cpu side we don't need to allow LPCR[RMLS] to be set on POWER9 in vhyp mode - that was only there to allow the hack on the machine side. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Greg Kurz --- hw/ppc/spapr_cpu_core.c | 6 +----- target/ppc/mmu-hash64.c | 8 -------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index d09125d9af..ea5e11f1d9 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -58,14 +58,10 @@ static void spapr_reset_vcpu(PowerPCCPU *cpu) * we don't get spurious wakups before an RTAS start-cpu call. * For the same reason, set PSSCR_EC. */ - lpcr &= ~(LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_KBV | pcc->lpcr_pm); + lpcr &= ~(LPCR_VPM1 | LPCR_ISL | LPCR_KBV | pcc->lpcr_pm); lpcr |= LPCR_LPES0 | LPCR_LPES1; env->spr[SPR_PSSCR] |= PSSCR_EC; - /* Set RMLS to the max (ie, 16G) */ - lpcr &= ~LPCR_RMLS; - lpcr |= 1ull << LPCR_RMLS_SHIFT; - ppc_store_lpcr(cpu, lpcr); /* Set a full AMOR so guest can use the AMR as it sees fit */ diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index e372c42add..caf47ad6fc 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -1126,14 +1126,6 @@ void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) (LPCR_PECE_L_MASK & (LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE)) | LPCR_MER | LPCR_GTSE | LPCR_TC | LPCR_HEIC | LPCR_LPES0 | LPCR_HVICE | LPCR_HDICE); - /* - * If we have a virtual hypervisor, we need to bring back RMLS. It - * doesn't exist on an actual P9 but that's all we know how to - * configure with softmmu at the moment - */ - if (cpu->vhyp) { - lpcr |= (val & LPCR_RMLS); - } break; default: g_assert_not_reached(); From patchwork Mon Feb 24 23:37:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402157 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3BFFC14D5 for ; Mon, 24 Feb 2020 23:39:06 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0F5CC2084E for ; Mon, 24 Feb 2020 23:39:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="mavL8cHe" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0F5CC2084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46108 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NJZ-0000Kr-0l for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:39:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47117) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIK-0006HL-9e for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIJ-00086J-7n for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:48 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:33243) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NII-000831-Tn; Mon, 24 Feb 2020 18:37:47 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ26zNcz9sRL; Tue, 25 Feb 2020 10:37:30 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587450; bh=+8n08mVffDMTcd5vOcig56fSB0Fl8e0bs0SvTi5PJhE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mavL8cHeh2GJv4D/dH8V8iCeGeVLv+TfPtDoFo/Pc82YABlrhW05lL7sYrWyR8BRV RT3vhfO8PwUP2+AZcmwtM4/vVVcIw02oN6MZRB8hQ5uY8PCETawN/tEgTbm6nX47JO avA0Yb+yzNsmLE529pmeH2oKDeNtva8bY/XCd2Bo= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 07/18] target/ppc: Remove RMOR register from POWER9 & POWER10 Date: Tue, 25 Feb 2020 10:37:13 +1100 Message-Id: <20200224233724.46415-8-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Currently we create the Real Mode Offset Register (RMOR) on all Book3S cpus from POWER7 onwards. However the translation mode which the RMOR controls is no longer supported in POWER9, and so the register has been removed from the architecture. Remove it from our model on POWER9 and POWER10. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Greg Kurz --- target/ppc/translate_init.inc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c index ab79975fec..925bc31ca5 100644 --- a/target/ppc/translate_init.inc.c +++ b/target/ppc/translate_init.inc.c @@ -8015,12 +8015,16 @@ static void gen_spr_book3s_ids(CPUPPCState *env) SPR_NOACCESS, SPR_NOACCESS, &spr_read_generic, &spr_write_generic, 0x00000000); - spr_register_hv(env, SPR_RMOR, "RMOR", + spr_register_hv(env, SPR_HRMOR, "HRMOR", SPR_NOACCESS, SPR_NOACCESS, SPR_NOACCESS, SPR_NOACCESS, &spr_read_generic, &spr_write_generic, 0x00000000); - spr_register_hv(env, SPR_HRMOR, "HRMOR", +} + +static void gen_spr_rmor(CPUPPCState *env) +{ + spr_register_hv(env, SPR_RMOR, "RMOR", SPR_NOACCESS, SPR_NOACCESS, SPR_NOACCESS, SPR_NOACCESS, &spr_read_generic, &spr_write_generic, @@ -8535,6 +8539,7 @@ static void init_proc_POWER7(CPUPPCState *env) /* POWER7 Specific Registers */ gen_spr_book3s_ids(env); + gen_spr_rmor(env); gen_spr_amr(env); gen_spr_book3s_purr(env); gen_spr_power5p_common(env); @@ -8676,6 +8681,7 @@ static void init_proc_POWER8(CPUPPCState *env) /* POWER8 Specific Registers */ gen_spr_book3s_ids(env); + gen_spr_rmor(env); gen_spr_amr(env); gen_spr_iamr(env); gen_spr_book3s_purr(env); From patchwork Mon Feb 24 23:37:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402171 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 24AEA1395 for ; Mon, 24 Feb 2020 23:42:16 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id EECCA2084E for ; Mon, 24 Feb 2020 23:42:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="MVskP6Sr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EECCA2084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46180 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NMd-0007Rk-2m for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:42:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47151) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIM-0006OE-H8 for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIL-00087B-0u for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:50 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:56073) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIK-00083U-Lt; Mon, 24 Feb 2020 18:37:48 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ33F76z9sRQ; Tue, 25 Feb 2020 10:37:31 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587451; bh=B3GfUzNMF7M6BEFyZO4sQHrqKaHlMmcM0FyDc/XxpkM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MVskP6SrV4+sUGY/ikbBsI2GSoEriO6ZLHsUozr9wmfjvbQtVweWeBWWGx70YUdVa yK9GnAttoeCRwEpkkRlUq4N00D+9ocYzMs7AqPuCT0b6ZLd9qRL5OPysdoUm766qJ9 JcF6aS/qsKTS96k5hFUgWZvJqgCNNW7lG68NBWlY= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 08/18] target/ppc: Use class fields to simplify LPCR masking Date: Tue, 25 Feb 2020 10:37:14 +1100 Message-Id: <20200224233724.46415-9-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" When we store the Logical Partitioning Control Register (LPCR) we have a big switch statement to work out which are valid bits for the cpu model we're emulating. As well as being ugly, this isn't really conceptually correct, since it is based on the mmu_model variable, whereas the LPCR isn't (only) about the MMU, so mmu_model is basically just acting as a proxy for the cpu model. Handle this in a simpler way, by adding a suitable lpcr_mask to the QOM class. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Greg Kurz --- target/ppc/cpu-qom.h | 1 + target/ppc/mmu-hash64.c | 36 ++------------------------------- target/ppc/translate_init.inc.c | 27 +++++++++++++++++++++---- 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/target/ppc/cpu-qom.h b/target/ppc/cpu-qom.h index e499575dc8..15d6b54a7d 100644 --- a/target/ppc/cpu-qom.h +++ b/target/ppc/cpu-qom.h @@ -177,6 +177,7 @@ typedef struct PowerPCCPUClass { uint64_t insns_flags; uint64_t insns_flags2; uint64_t msr_mask; + uint64_t lpcr_mask; /* Available bits in the LPCR */ uint64_t lpcr_pm; /* Power-saving mode Exit Cause Enable bits */ powerpc_mmu_t mmu_model; powerpc_excp_t excp_model; diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index caf47ad6fc..0ef330a614 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -1095,42 +1095,10 @@ static void ppc_hash64_update_vrma(PowerPCCPU *cpu) void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) { + PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu); CPUPPCState *env = &cpu->env; - uint64_t lpcr = 0; - /* Filter out bits */ - switch (env->mmu_model) { - case POWERPC_MMU_2_03: /* P5p */ - lpcr = val & (LPCR_RMLS | LPCR_ILE | - LPCR_LPES0 | LPCR_LPES1 | - LPCR_RMI | LPCR_HDICE); - break; - case POWERPC_MMU_2_06: /* P7 */ - lpcr = val & (LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_DPFD | - LPCR_VRMASD | LPCR_RMLS | LPCR_ILE | - LPCR_P7_PECE0 | LPCR_P7_PECE1 | LPCR_P7_PECE2 | - LPCR_MER | LPCR_TC | - LPCR_LPES0 | LPCR_LPES1 | LPCR_HDICE); - break; - case POWERPC_MMU_2_07: /* P8 */ - lpcr = val & (LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_KBV | - LPCR_DPFD | LPCR_VRMASD | LPCR_RMLS | LPCR_ILE | - LPCR_AIL | LPCR_ONL | LPCR_P8_PECE0 | LPCR_P8_PECE1 | - LPCR_P8_PECE2 | LPCR_P8_PECE3 | LPCR_P8_PECE4 | - LPCR_MER | LPCR_TC | LPCR_LPES0 | LPCR_HDICE); - break; - case POWERPC_MMU_3_00: /* P9 */ - lpcr = val & (LPCR_VPM1 | LPCR_ISL | LPCR_KBV | LPCR_DPFD | - (LPCR_PECE_U_MASK & LPCR_HVEE) | LPCR_ILE | LPCR_AIL | - LPCR_UPRT | LPCR_EVIRT | LPCR_ONL | LPCR_HR | LPCR_LD | - (LPCR_PECE_L_MASK & (LPCR_PDEE | LPCR_HDEE | LPCR_EEE | - LPCR_DEE | LPCR_OEE)) | LPCR_MER | LPCR_GTSE | LPCR_TC | - LPCR_HEIC | LPCR_LPES0 | LPCR_HVICE | LPCR_HDICE); - break; - default: - g_assert_not_reached(); - } - env->spr[SPR_LPCR] = lpcr; + env->spr[SPR_LPCR] = val & pcc->lpcr_mask; ppc_hash64_update_rmls(cpu); ppc_hash64_update_vrma(cpu); } diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c index 925bc31ca5..5b7a5226e1 100644 --- a/target/ppc/translate_init.inc.c +++ b/target/ppc/translate_init.inc.c @@ -8476,6 +8476,8 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data) (1ull << MSR_DR) | (1ull << MSR_PMM) | (1ull << MSR_RI); + pcc->lpcr_mask = LPCR_RMLS | LPCR_ILE | LPCR_LPES0 | LPCR_LPES1 | + LPCR_RMI | LPCR_HDICE; pcc->mmu_model = POWERPC_MMU_2_03; #if defined(CONFIG_SOFTMMU) pcc->handle_mmu_fault = ppc_hash64_handle_mmu_fault; @@ -8653,6 +8655,12 @@ POWERPC_FAMILY(POWER7)(ObjectClass *oc, void *data) (1ull << MSR_PMM) | (1ull << MSR_RI) | (1ull << MSR_LE); + pcc->lpcr_mask = LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_DPFD | + LPCR_VRMASD | LPCR_RMLS | LPCR_ILE | + LPCR_P7_PECE0 | LPCR_P7_PECE1 | LPCR_P7_PECE2 | + LPCR_MER | LPCR_TC | + LPCR_LPES0 | LPCR_LPES1 | LPCR_HDICE; + pcc->lpcr_pm = LPCR_P7_PECE0 | LPCR_P7_PECE1 | LPCR_P7_PECE2; pcc->mmu_model = POWERPC_MMU_2_06; #if defined(CONFIG_SOFTMMU) pcc->handle_mmu_fault = ppc_hash64_handle_mmu_fault; @@ -8669,7 +8677,6 @@ POWERPC_FAMILY(POWER7)(ObjectClass *oc, void *data) pcc->l1_dcache_size = 0x8000; pcc->l1_icache_size = 0x8000; pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_lpcr; - pcc->lpcr_pm = LPCR_P7_PECE0 | LPCR_P7_PECE1 | LPCR_P7_PECE2; } static void init_proc_POWER8(CPUPPCState *env) @@ -8825,6 +8832,13 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data) (1ull << MSR_TS0) | (1ull << MSR_TS1) | (1ull << MSR_LE); + pcc->lpcr_mask = LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_KBV | + LPCR_DPFD | LPCR_VRMASD | LPCR_RMLS | LPCR_ILE | + LPCR_AIL | LPCR_ONL | LPCR_P8_PECE0 | LPCR_P8_PECE1 | + LPCR_P8_PECE2 | LPCR_P8_PECE3 | LPCR_P8_PECE4 | + LPCR_MER | LPCR_TC | LPCR_LPES0 | LPCR_HDICE; + pcc->lpcr_pm = LPCR_P8_PECE0 | LPCR_P8_PECE1 | LPCR_P8_PECE2 | + LPCR_P8_PECE3 | LPCR_P8_PECE4; pcc->mmu_model = POWERPC_MMU_2_07; #if defined(CONFIG_SOFTMMU) pcc->handle_mmu_fault = ppc_hash64_handle_mmu_fault; @@ -8842,8 +8856,6 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data) pcc->l1_dcache_size = 0x8000; pcc->l1_icache_size = 0x8000; pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_lpcr; - pcc->lpcr_pm = LPCR_P8_PECE0 | LPCR_P8_PECE1 | LPCR_P8_PECE2 | - LPCR_P8_PECE3 | LPCR_P8_PECE4; } #ifdef CONFIG_SOFTMMU @@ -9036,6 +9048,14 @@ POWERPC_FAMILY(POWER9)(ObjectClass *oc, void *data) (1ull << MSR_PMM) | (1ull << MSR_RI) | (1ull << MSR_LE); + pcc->lpcr_mask = LPCR_VPM1 | LPCR_ISL | LPCR_KBV | LPCR_DPFD | + (LPCR_PECE_U_MASK & LPCR_HVEE) | LPCR_ILE | LPCR_AIL | + LPCR_UPRT | LPCR_EVIRT | LPCR_ONL | LPCR_HR | LPCR_LD | + (LPCR_PECE_L_MASK & (LPCR_PDEE | LPCR_HDEE | LPCR_EEE | + LPCR_DEE | LPCR_OEE)) + | LPCR_MER | LPCR_GTSE | LPCR_TC | + LPCR_HEIC | LPCR_LPES0 | LPCR_HVICE | LPCR_HDICE; + pcc->lpcr_pm = LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE; pcc->mmu_model = POWERPC_MMU_3_00; #if defined(CONFIG_SOFTMMU) pcc->handle_mmu_fault = ppc64_v3_handle_mmu_fault; @@ -9055,7 +9075,6 @@ POWERPC_FAMILY(POWER9)(ObjectClass *oc, void *data) pcc->l1_dcache_size = 0x8000; pcc->l1_icache_size = 0x8000; pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_lpcr; - pcc->lpcr_pm = LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE; } #ifdef CONFIG_SOFTMMU From patchwork Mon Feb 24 23:37:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402175 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6F533138D for ; Mon, 24 Feb 2020 23:43:31 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3673B2084E for ; Mon, 24 Feb 2020 23:43:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="WG6vednr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3673B2084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NNq-0001wR-D6 for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:43:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47248) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIQ-0006Yd-7X for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIO-00089S-D4 for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:54 -0500 Received: from ozlabs.org ([203.11.71.1]:39877) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIO-00083u-0s; Mon, 24 Feb 2020 18:37:52 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ34nRMz9sRp; Tue, 25 Feb 2020 10:37:31 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587451; bh=byjkajhVcCgIMe86g8VOYlz/YD67HxIZQoRkU7kw4HA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WG6vednrmdV7C8PICKPzvmGD5K5/CfmI588psqCJeyfD922x+JJ0JU29gk3KTvCMP CNi2FpgBu77PMT1TSadBZji/MxAGU1p+eHqYkvEuy2yxzV3Au0v5uxFXpXW5MByTno xzmr/JOBBOaH/KADXP157WfOPwmIEsVN+3Zl00kA= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 09/18] target/ppc: Streamline calculation of RMA limit from LPCR[RMLS] Date: Tue, 25 Feb 2020 10:37:15 +1100 Message-Id: <20200224233724.46415-10-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Currently we use a big switch statement in ppc_hash64_update_rmls() to work out what the right RMA limit is based on the LPCR[RMLS] field. There's no formula for this - it's just an arbitrary mapping defined by the existing CPU implementations - but we can make it a bit more readable by using a lookup table rather than a switch. In addition we can use the MiB/GiB symbols to make it a bit clearer. While there we add a bit of clarity and rationale to the comment about what happens if the LPCR[RMLS] doesn't contain a valid value. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater --- target/ppc/mmu-hash64.c | 71 ++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index 0ef330a614..4f082d775d 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -18,6 +18,7 @@ * License along with this library; if not, see . */ #include "qemu/osdep.h" +#include "qemu/units.h" #include "cpu.h" #include "exec/exec-all.h" #include "exec/helper-proto.h" @@ -757,6 +758,39 @@ static void ppc_hash64_set_c(PowerPCCPU *cpu, hwaddr ptex, uint64_t pte1) stb_phys(CPU(cpu)->as, base + offset, (pte1 & 0xff) | 0x80); } +static target_ulong rmls_limit(PowerPCCPU *cpu) +{ + CPUPPCState *env = &cpu->env; + /* + * This is the full 4 bits encoding of POWER8. Previous + * CPUs only support a subset of these but the filtering + * is done when writing LPCR + */ + const target_ulong rma_sizes[] = { + [0] = 0, + [1] = 16 * GiB, + [2] = 1 * GiB, + [3] = 64 * MiB, + [4] = 256 * MiB, + [5] = 0, + [6] = 0, + [7] = 128 * MiB, + [8] = 32 * MiB, + }; + target_ulong rmls = (env->spr[SPR_LPCR] & LPCR_RMLS) >> LPCR_RMLS_SHIFT; + + if (rmls < ARRAY_SIZE(rma_sizes)) { + return rma_sizes[rmls]; + } else { + /* + * Bad value, so the OS has shot itself in the foot. Return a + * 0-sized RMA which we expect to trigger an immediate DSI or + * ISI + */ + return 0; + } +} + int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, int rwx, int mmu_idx) { @@ -1006,41 +1040,6 @@ void ppc_hash64_tlb_flush_hpte(PowerPCCPU *cpu, target_ulong ptex, cpu->env.tlb_need_flush = TLB_NEED_GLOBAL_FLUSH | TLB_NEED_LOCAL_FLUSH; } -static void ppc_hash64_update_rmls(PowerPCCPU *cpu) -{ - CPUPPCState *env = &cpu->env; - uint64_t lpcr = env->spr[SPR_LPCR]; - - /* - * This is the full 4 bits encoding of POWER8. Previous - * CPUs only support a subset of these but the filtering - * is done when writing LPCR - */ - switch ((lpcr & LPCR_RMLS) >> LPCR_RMLS_SHIFT) { - case 0x8: /* 32MB */ - env->rmls = 0x2000000ull; - break; - case 0x3: /* 64MB */ - env->rmls = 0x4000000ull; - break; - case 0x7: /* 128MB */ - env->rmls = 0x8000000ull; - break; - case 0x4: /* 256MB */ - env->rmls = 0x10000000ull; - break; - case 0x2: /* 1GB */ - env->rmls = 0x40000000ull; - break; - case 0x1: /* 16GB */ - env->rmls = 0x400000000ull; - break; - default: - /* What to do here ??? */ - env->rmls = 0; - } -} - static void ppc_hash64_update_vrma(PowerPCCPU *cpu) { CPUPPCState *env = &cpu->env; @@ -1099,7 +1098,7 @@ void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) CPUPPCState *env = &cpu->env; env->spr[SPR_LPCR] = val & pcc->lpcr_mask; - ppc_hash64_update_rmls(cpu); + env->rmls = rmls_limit(cpu); ppc_hash64_update_vrma(cpu); } From patchwork Mon Feb 24 23:37:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402165 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C3A9F1395 for ; Mon, 24 Feb 2020 23:40:50 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9A9072084E for ; Mon, 24 Feb 2020 23:40:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="jyhHKcNj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9A9072084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46154 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NLF-0004EX-Q3 for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:40:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47209) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIP-0006VX-86 for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIO-000892-1P for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:53 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:38821) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIN-00083v-Mh; Mon, 24 Feb 2020 18:37:51 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ42Yjgz9sSM; Tue, 25 Feb 2020 10:37:31 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587452; bh=/E6r6c1U/O72mbX+roOccD8oy03Pdofs/lMnmoRwM/s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jyhHKcNjcjm4McK+vbaMJBjNoV9gyPZ+gU92OmjQ4fJM0C7EtYZiF42zVUyLCtlyH 3GBHzVUqlBpyWOBnrVn1MB2RCJ2yIuQ4iRIlOarM7+Bc1/vXUEWUKLBmo8d3dhZPmB XYwFFnCTFDRaX92I4A5/PrHkDQeMfYfqE8WLu5G8= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 10/18] target/ppc: Correct RMLS table Date: Tue, 25 Feb 2020 10:37:16 +1100 Message-Id: <20200224233724.46415-11-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The table of RMA limits based on the LPCR[RMLS] field is slightly wrong. We're missing the RMLS == 0 => 256 GiB RMA option, which is available on POWER8, so add that. The comment that goes with the table is much more wrong. We *don't* filter invalid RMLS values when writing the LPCR, and there's not really a sensible way to do so. Furthermore, while in theory the set of RMLS values is implementation dependent, it seems in practice the same set has been available since around POWER4+ up until POWER8, the last model which supports RMLS at all. So, correct that as well. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Greg Kurz --- target/ppc/mmu-hash64.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index 4f082d775d..dd0df6fd01 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -762,12 +762,12 @@ static target_ulong rmls_limit(PowerPCCPU *cpu) { CPUPPCState *env = &cpu->env; /* - * This is the full 4 bits encoding of POWER8. Previous - * CPUs only support a subset of these but the filtering - * is done when writing LPCR + * In theory the meanings of RMLS values are implementation + * dependent. In practice, this seems to have been the set from + * POWER4+..POWER8, and RMLS is no longer supported in POWER9. */ const target_ulong rma_sizes[] = { - [0] = 0, + [0] = 256 * GiB, [1] = 16 * GiB, [2] = 1 * GiB, [3] = 64 * MiB, From patchwork Mon Feb 24 23:37:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402173 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 83B09138D for ; Mon, 24 Feb 2020 23:42:21 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 57DED21556 for ; Mon, 24 Feb 2020 23:42:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="KvxtTJp4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 57DED21556 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46182 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NMi-0007hk-IH for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:42:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47237) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIP-0006XY-Sp for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIO-00089D-7x for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:53 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:55899) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIN-00083r-Sv; Mon, 24 Feb 2020 18:37:52 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ408xTz9sRs; Tue, 25 Feb 2020 10:37:31 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587452; bh=rDAFrF+FxXEkKz5RpQvXoCfUKYeii7iNDX8QMBQkUKc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KvxtTJp4pIBgYh28xOKD0DmLkC61gu9kwamex26hyBp67GPT6creCkYg1L4b9R7fL CsZOTtrpRgfpo0pgtsGcwcUnoBTqWKoLdehHJQLygYh5zmZWC6tO3FflFaWkb/mx6b pndx4O/JsrzYVe9T8HErfoRLWBQrUAXxczRu/gcs= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 11/18] target/ppc: Only calculate RMLS derived RMA limit on demand Date: Tue, 25 Feb 2020 10:37:17 +1100 Message-Id: <20200224233724.46415-12-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" When the LPCR is written, we update the env->rmls field with the RMA limit it implies. Simplify things by just calculating the value directly from the LPCR value when we need it. It's possible this is a little slower, but it's unlikely to be significant, since this is only for real mode accesses in a translation configuration that's not used very often, and the whole thing is behind the qemu TLB anyway. Therefore, keeping the number of state variables down and not having to worry about making sure it's always in sync seems the better option. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Greg Kurz --- target/ppc/cpu.h | 1 - target/ppc/mmu-hash64.c | 84 ++++++++++++++++++++--------------------- 2 files changed, 40 insertions(+), 45 deletions(-) diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 8077fdb068..f9871b1233 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1046,7 +1046,6 @@ struct CPUPPCState { uint64_t insns_flags2; #if defined(TARGET_PPC64) ppc_slb_t vrma_slb; - target_ulong rmls; #endif int error_code; diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index dd0df6fd01..ac21c14f68 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -791,6 +791,35 @@ static target_ulong rmls_limit(PowerPCCPU *cpu) } } +static int build_vrma_slbe(PowerPCCPU *cpu, ppc_slb_t *slb) +{ + CPUPPCState *env = &cpu->env; + target_ulong lpcr = env->spr[SPR_LPCR]; + uint32_t vrmasd = (lpcr & LPCR_VRMASD) >> LPCR_VRMASD_SHIFT; + target_ulong vsid = SLB_VSID_VRMA | ((vrmasd << 4) & SLB_VSID_LLP_MASK); + int i; + + for (i = 0; i < PPC_PAGE_SIZES_MAX_SZ; i++) { + const PPCHash64SegmentPageSizes *sps = &cpu->hash64_opts->sps[i]; + + if (!sps->page_shift) { + break; + } + + if ((vsid & SLB_VSID_LLP_MASK) == sps->slb_enc) { + slb->esid = SLB_ESID_V; + slb->vsid = vsid; + slb->sps = sps; + return 0; + } + } + + error_report("Bad page size encoding in LPCR[VRMASD]; LPCR=0x" + TARGET_FMT_lx"\n", lpcr); + + return -1; +} + int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, int rwx, int mmu_idx) { @@ -844,8 +873,10 @@ int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, goto skip_slb_search; } else { + target_ulong limit = rmls_limit(cpu); + /* Emulated old-style RMO mode, bounds check against RMLS */ - if (raddr >= env->rmls) { + if (raddr >= limit) { if (rwx == 2) { ppc_hash64_set_isi(cs, SRR1_PROTFAULT); } else { @@ -1007,8 +1038,9 @@ hwaddr ppc_hash64_get_phys_page_debug(PowerPCCPU *cpu, target_ulong addr) return -1; } } else { + target_ulong limit = rmls_limit(cpu); /* Emulated old-style RMO mode, bounds check against RMLS */ - if (raddr >= env->rmls) { + if (raddr >= limit) { return -1; } return raddr | env->spr[SPR_RMOR]; @@ -1043,53 +1075,18 @@ void ppc_hash64_tlb_flush_hpte(PowerPCCPU *cpu, target_ulong ptex, static void ppc_hash64_update_vrma(PowerPCCPU *cpu) { CPUPPCState *env = &cpu->env; - const PPCHash64SegmentPageSizes *sps = NULL; - target_ulong esid, vsid, lpcr; ppc_slb_t *slb = &env->vrma_slb; - uint32_t vrmasd; - int i; - - /* First clear it */ - slb->esid = slb->vsid = 0; - slb->sps = NULL; /* Is VRMA enabled ? */ - if (!ppc_hash64_use_vrma(env)) { - return; - } - - /* - * Make one up. Mostly ignore the ESID which will not be needed - * for translation - */ - lpcr = env->spr[SPR_LPCR]; - vsid = SLB_VSID_VRMA; - vrmasd = (lpcr & LPCR_VRMASD) >> LPCR_VRMASD_SHIFT; - vsid |= (vrmasd << 4) & (SLB_VSID_L | SLB_VSID_LP); - esid = SLB_ESID_V; - - for (i = 0; i < PPC_PAGE_SIZES_MAX_SZ; i++) { - const PPCHash64SegmentPageSizes *sps1 = &cpu->hash64_opts->sps[i]; - - if (!sps1->page_shift) { - break; + if (ppc_hash64_use_vrma(env)) { + if (build_vrma_slbe(cpu, slb) == 0) { + return; } - - if ((vsid & SLB_VSID_LLP_MASK) == sps1->slb_enc) { - sps = sps1; - break; - } - } - - if (!sps) { - error_report("Bad page size encoding esid 0x"TARGET_FMT_lx - " vsid 0x"TARGET_FMT_lx, esid, vsid); - return; } - slb->vsid = vsid; - slb->esid = esid; - slb->sps = sps; + /* Otherwise, clear it to indicate error */ + slb->esid = slb->vsid = 0; + slb->sps = NULL; } void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) @@ -1098,7 +1095,6 @@ void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) CPUPPCState *env = &cpu->env; env->spr[SPR_LPCR] = val & pcc->lpcr_mask; - env->rmls = rmls_limit(cpu); ppc_hash64_update_vrma(cpu); } From patchwork Mon Feb 24 23:37:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402167 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B7EEF138D for ; Mon, 24 Feb 2020 23:42:03 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8E6AD2084E for ; Mon, 24 Feb 2020 23:42:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="KM+9D4os" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8E6AD2084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46174 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NMQ-0006ve-OE for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:42:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47210) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIP-0006Vf-8X for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIN-00088p-VD for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:53 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:43209) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIN-00084M-Jw; Mon, 24 Feb 2020 18:37:51 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ44LF9z9sRt; Tue, 25 Feb 2020 10:37:32 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587452; bh=/gYCLL/Jk6TTuPaJCqEEFdhUfEKdZ2BLlTEIKLhOQP8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KM+9D4osvKZ9PLVeJwdJMyToWJJchiXsZHtgHGxqGQD3qyzQGIm6/080bP2wUsS+/ tJKx5+kPzBAK5eUc5auoEOxUdC8w/jiZzs5dicl4qCB7Pp619aG9obD8vIBO8c/bf4 7QPbazSKfcRf/iziAgZvjhCFRRpE/1K9hRB2jOvI= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 12/18] target/ppc: Don't store VRMA SLBE persistently Date: Tue, 25 Feb 2020 10:37:18 +1100 Message-Id: <20200224233724.46415-13-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Currently, we construct the SLBE used for VRMA translations when the LPCR is written (which controls some bits in the SLBE), then use it later for translations. This is a bit complex and confusing - simplify it by simply constructing the SLBE directly from the LPCR when we need it. Signed-off-by: David Gibson Reviewed-by: Fabiano Rosas Reviewed-by: Greg Kurz --- target/ppc/cpu.h | 3 --- target/ppc/mmu-hash64.c | 28 ++++++---------------------- 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index f9871b1233..5a55fb02bd 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1044,9 +1044,6 @@ struct CPUPPCState { uint32_t flags; uint64_t insns_flags; uint64_t insns_flags2; -#if defined(TARGET_PPC64) - ppc_slb_t vrma_slb; -#endif int error_code; uint32_t pending_interrupts; diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index ac21c14f68..f8bf92aa2e 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -825,6 +825,7 @@ int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, { CPUState *cs = CPU(cpu); CPUPPCState *env = &cpu->env; + ppc_slb_t vrma_slbe; ppc_slb_t *slb; unsigned apshift; hwaddr ptex; @@ -863,8 +864,8 @@ int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, } } else if (ppc_hash64_use_vrma(env)) { /* Emulated VRMA mode */ - slb = &env->vrma_slb; - if (!slb->sps) { + slb = &vrma_slbe; + if (build_vrma_slbe(cpu, slb) != 0) { /* Invalid VRMA setup, machine check */ cs->exception_index = POWERPC_EXCP_MCHECK; env->error_code = 0; @@ -1012,6 +1013,7 @@ skip_slb_search: hwaddr ppc_hash64_get_phys_page_debug(PowerPCCPU *cpu, target_ulong addr) { CPUPPCState *env = &cpu->env; + ppc_slb_t vrma_slbe; ppc_slb_t *slb; hwaddr ptex, raddr; ppc_hash_pte64_t pte; @@ -1033,8 +1035,8 @@ hwaddr ppc_hash64_get_phys_page_debug(PowerPCCPU *cpu, target_ulong addr) return raddr | env->spr[SPR_HRMOR]; } else if (ppc_hash64_use_vrma(env)) { /* Emulated VRMA mode */ - slb = &env->vrma_slb; - if (!slb->sps) { + slb = &vrma_slbe; + if (build_vrma_slbe(cpu, slb) != 0) { return -1; } } else { @@ -1072,30 +1074,12 @@ void ppc_hash64_tlb_flush_hpte(PowerPCCPU *cpu, target_ulong ptex, cpu->env.tlb_need_flush = TLB_NEED_GLOBAL_FLUSH | TLB_NEED_LOCAL_FLUSH; } -static void ppc_hash64_update_vrma(PowerPCCPU *cpu) -{ - CPUPPCState *env = &cpu->env; - ppc_slb_t *slb = &env->vrma_slb; - - /* Is VRMA enabled ? */ - if (ppc_hash64_use_vrma(env)) { - if (build_vrma_slbe(cpu, slb) == 0) { - return; - } - } - - /* Otherwise, clear it to indicate error */ - slb->esid = slb->vsid = 0; - slb->sps = NULL; -} - void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) { PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu); CPUPPCState *env = &cpu->env; env->spr[SPR_LPCR] = val & pcc->lpcr_mask; - ppc_hash64_update_vrma(cpu); } void helper_store_lpcr(CPUPPCState *env, target_ulong val) From patchwork Mon Feb 24 23:37:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402169 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3D8741395 for ; Mon, 24 Feb 2020 23:42:06 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 149F42084E for ; Mon, 24 Feb 2020 23:42:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="McfMWxPW" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 149F42084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46178 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NMT-000720-8w for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:42:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47227) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIP-0006Wv-Lp for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIO-00089M-BL for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:53 -0500 Received: from ozlabs.org ([203.11.71.1]:45531) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIN-00086R-VT; Mon, 24 Feb 2020 18:37:52 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ45mbLz9sSQ; Tue, 25 Feb 2020 10:37:32 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587452; bh=aBsVfkPLqtLYAJVvSFLlYU9uQn9tdTvG94/i9S6mjsA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=McfMWxPW19Kby1wByDIvcbGGCAr5vunIN1oepyQqdBDUXTnrPn8QNWsjlAF7H1r/R OpcHyuIfvD2ClHJm2+BkduHkRJGMg3Gy4ZzJdc3wXps9gdCwrl7o3c1Snmvbeo6FJ7 CndnIwI8NdFjBanBpFRFOkHCay6YAiRp+5W+p6oo= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 13/18] spapr: Don't use weird units for MIN_RMA_SLOF Date: Tue, 25 Feb 2020 10:37:19 +1100 Message-Id: <20200224233724.46415-14-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" MIN_RMA_SLOF records the minimum about of RMA that the SLOF firmware requires. It lets us give a meaningful error if the RMA ends up too small, rather than just letting SLOF crash. It's currently stored as a number of megabytes, which is strange for global constants. Move that megabyte scaling into the definition of the constant like most other things use. Change from M to MiB in the associated message while we're at it. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater Reviewed-by: Greg Kurz --- hw/ppc/spapr.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 828e2cc135..272a270b7a 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -103,7 +103,7 @@ #define FW_OVERHEAD 0x2800000 #define KERNEL_LOAD_ADDR FW_MAX_SIZE -#define MIN_RMA_SLOF 128UL +#define MIN_RMA_SLOF (128 * MiB) #define PHANDLE_INTC 0x00001111 @@ -2959,10 +2959,10 @@ static void spapr_machine_init(MachineState *machine) } } - if (spapr->rma_size < (MIN_RMA_SLOF * MiB)) { + if (spapr->rma_size < MIN_RMA_SLOF) { error_report( - "pSeries SLOF firmware requires >= %ldM guest RMA (Real Mode Area memory)", - MIN_RMA_SLOF); + "pSeries SLOF firmware requires >= %ldMiB guest RMA (Real Mode Area memory)", + MIN_RMA_SLOF / MiB); exit(1); } From patchwork Mon Feb 24 23:37:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402181 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F16011395 for ; Mon, 24 Feb 2020 23:45:23 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C82A22176D for ; Mon, 24 Feb 2020 23:45:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="fqNIrEhU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C82A22176D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46242 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NPf-0004uB-0V for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:45:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47312) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIS-0006ds-BQ for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIQ-0008Aq-Et for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:56 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:39967) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIQ-00087O-23; Mon, 24 Feb 2020 18:37:54 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ53F5Dz9sSY; Tue, 25 Feb 2020 10:37:32 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587453; bh=G9vVCBQAxL325dmu2RbgIx5Jm0SP2MYRe+FEiLxyaO4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fqNIrEhUlo13XwfTVkg6NFgxcCi9A9eViTRF/MgkMPTh1kXOs3EWnYH6K9B2AzMOp M4LZBRiycS1ftX0CAH+ipLbCKHGsAxDXZUDSPaTutH4ub9Od//MpkawHD+NjzTA4AD 71nZefaPzFEH2kwmAVwOl+NNt5a+VUbaM/nW9Dh0= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 14/18] spapr,ppc: Simplify signature of kvmppc_rma_size() Date: Tue, 25 Feb 2020 10:37:20 +1100 Message-Id: <20200224233724.46415-15-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , Cedric Le Goater , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" This function calculates the maximum size of the RMA as implied by the host's page size of structure of the VRMA (there are a number of other constraints on the RMA size which will supersede this one in many circumstances). The current interface takes the current RMA size estimate, and clamps it to the VRMA derived size. The only current caller passes in an arguably wrong value (it will match the current RMA estimate in some but not all cases). We want to fix that, but for now just keep concerns separated by having the KVM helper function just return the VRMA derived limit, and let the caller combine it with other constraints. We call the new function kvmppc_vrma_limit() to more clearly indicate its limited responsibility. The helper should only ever be called in the KVM enabled case, so replace its !CONFIG_KVM stub with an assert() rather than a dummy value. Signed-off-by: David Gibson Reviewed-by: Cedric Le Goater Reviewed-by: Greg Kurz Reviewed-by: Alexey Kardashevskiy --- hw/ppc/spapr.c | 5 +++-- target/ppc/kvm.c | 5 ++--- target/ppc/kvm_ppc.h | 7 +++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 272a270b7a..b68d80ba69 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1586,8 +1586,9 @@ void spapr_setup_hpt_and_vrma(SpaprMachineState *spapr) spapr_reallocate_hpt(spapr, hpt_shift, &error_fatal); if (spapr->vrma_adjust) { - spapr->rma_size = kvmppc_rma_size(spapr_node0_size(MACHINE(spapr)), - spapr->htab_shift); + hwaddr vrma_limit = kvmppc_vrma_limit(spapr->htab_shift); + + spapr->rma_size = MIN(spapr_node0_size(MACHINE(spapr)), vrma_limit); } } diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index 7f44b1aa1a..597f72be1b 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -2113,7 +2113,7 @@ void kvmppc_error_append_smt_possible_hint(Error *const *errp) #ifdef TARGET_PPC64 -uint64_t kvmppc_rma_size(uint64_t current_size, unsigned int hash_shift) +uint64_t kvmppc_vrma_limit(unsigned int hash_shift) { struct kvm_ppc_smmu_info info; long rampagesize, best_page_shift; @@ -2140,8 +2140,7 @@ uint64_t kvmppc_rma_size(uint64_t current_size, unsigned int hash_shift) } } - return MIN(current_size, - 1ULL << (best_page_shift + hash_shift - 7)); + return 1ULL << (best_page_shift + hash_shift - 7); } #endif diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h index 9e4f2357cc..332fa0aa1c 100644 --- a/target/ppc/kvm_ppc.h +++ b/target/ppc/kvm_ppc.h @@ -47,7 +47,7 @@ void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t page_shift, int *pfd, bool need_vfio); int kvmppc_remove_spapr_tce(void *table, int pfd, uint32_t window_size); int kvmppc_reset_htab(int shift_hint); -uint64_t kvmppc_rma_size(uint64_t current_size, unsigned int hash_shift); +uint64_t kvmppc_vrma_limit(unsigned int hash_shift); bool kvmppc_has_cap_spapr_vfio(void); #endif /* !CONFIG_USER_ONLY */ bool kvmppc_has_cap_epr(void); @@ -255,10 +255,9 @@ static inline int kvmppc_reset_htab(int shift_hint) return 0; } -static inline uint64_t kvmppc_rma_size(uint64_t current_size, - unsigned int hash_shift) +static inline uint64_t kvmppc_vrma_limit(unsigned int hash_shift) { - return ram_size; + g_assert_not_reached(); } static inline bool kvmppc_hpt_needs_host_contiguous_pages(void) From patchwork Mon Feb 24 23:37:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402183 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0D4341395 for ; Mon, 24 Feb 2020 23:45:25 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D905F2176D for ; Mon, 24 Feb 2020 23:45:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="CMX3rpK7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D905F2176D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46244 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NPg-0004vN-0q for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:45:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47347) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIT-0006g9-Hw for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:38:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIQ-0008BJ-QN for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:57 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:40869) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIQ-00086w-6n; Mon, 24 Feb 2020 18:37:54 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ510Gkz9sSR; Tue, 25 Feb 2020 10:37:33 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587453; bh=QIIJTxC1CVum2uJ2TEw+qN4tR/LbdQA/xEU74HqkcYg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CMX3rpK7a77iV2wIdQZRB3hp5tqqkqESkeW4ttuvaHytZKmdHiLzMofwsa+65XU84 gYZ6hevLoRXTHQA6dNaH1+S3PiqWJnLzrbwBeuBnx66b++0b0t0rLhtmceMPT5KZIR E+kgDi43Bubi1wcehfzyFwRCyUpzrkUGHeaWK00w= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 15/18] spapr: Don't attempt to clamp RMA to VRMA constraint Date: Tue, 25 Feb 2020 10:37:21 +1100 Message-Id: <20200224233724.46415-16-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The Real Mode Area (RMA) is the part of memory which a guest can access when in real (MMU off) mode. Of course, for a guest under KVM, the MMU isn't really turned off, it's just in a special translation mode - Virtual Real Mode Area (VRMA) - which looks like real mode in guest mode. The mechanics of how this works when using the hash MMU (HPT) put a constraint on the size of the RMA, which depends on the size of the HPT. So, the latter part of spapr_setup_hpt_and_vrma() clamps the RMA we advertise to the guest based on this VRMA limit. There are several things wrong with this: 1) spapr_setup_hpt_and_vrma() doesn't actually clamp, it takes the minimum of Node 0 memory size and the VRMA limit. That will *often* work the same as clamping, but there can be other constraints on RMA size which supersede Node 0 memory size. We have real bugs caused by this (currently worked around in the guest kernel) 2) Some callers of spapr_setup_hpt_and_vrma() are in a situation where we're past the point that we can actually advertise an RMA limit to the guest 3) But most fundamentally, the VRMA limit depends on host configuration (page size) which shouldn't be visible to the guest, but this partially exposes it. This can cause problems with migration in certain edge cases, although we will mostly get away with it. In practice, this clamping is almost never applied anyway. With 64kiB pages and the normal rules for sizing of the HPT, the theoretical VRMA limit will be 4x(guest memory size) and so never hit. It will hit with 4kiB pages, where it will be (guest memory size)/4. However all mainstream distro kernels for POWER have used a 64kiB page size for at least 10 years. So, simply replace this logic with a check that the RMA we've calculated based only on guest visible configuration will fit within the host implied VRMA limit. This can break if running HPT guests on a host kernel with 4kiB page size. As noted that's very rare. There also exist several possible workarounds: * Change the host kernel to use 64kiB pages * Use radix MMU (RPT) guests instead of HPT * Use 64kiB hugepages on the host to back guest memory * Increase the guest memory size so that the RMA hits one of the fixed limits before the RMA limit. This is relatively easy on POWER8 which has a 16GiB limit, harder on POWER9 which has a 1TiB limit. * Use a guest NUMA configuration which artificially constrains the RMA within the VRMA limit (the RMA must always fit within Node 0). Previously, on KVM, we also temporarily reduced the rma_size to 256M so that the we'd load the kernel and initrd safely, regardless of the VRMA limit. This was a) confusing, b) could significantly limit the size of images we could load and c) introduced a behavioural difference between KVM and TCG. So we remove that as well. Signed-off-by: David Gibson Reviewed-by: Alexey Kardashevskiy --- hw/ppc/spapr.c | 28 ++++++++++------------------ hw/ppc/spapr_hcall.c | 4 ++-- include/hw/ppc/spapr.h | 3 +-- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index b68d80ba69..4dab489931 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1569,7 +1569,7 @@ void spapr_reallocate_hpt(SpaprMachineState *spapr, int shift, spapr_set_all_lpcrs(0, LPCR_HR | LPCR_UPRT); } -void spapr_setup_hpt_and_vrma(SpaprMachineState *spapr) +void spapr_setup_hpt(SpaprMachineState *spapr) { int hpt_shift; @@ -1585,10 +1585,16 @@ void spapr_setup_hpt_and_vrma(SpaprMachineState *spapr) } spapr_reallocate_hpt(spapr, hpt_shift, &error_fatal); - if (spapr->vrma_adjust) { + if (kvm_enabled()) { hwaddr vrma_limit = kvmppc_vrma_limit(spapr->htab_shift); - spapr->rma_size = MIN(spapr_node0_size(MACHINE(spapr)), vrma_limit); + /* Check our RMA fits in the possible VRMA */ + if (vrma_limit < spapr->rma_size) { + error_report("Unable to create %" HWADDR_PRIu + "MiB RMA (VRMA only allows %" HWADDR_PRIu "MiB", + spapr->rma_size / MiB, vrma_limit / MiB); + exit(EXIT_FAILURE); + } } } @@ -1628,7 +1634,7 @@ static void spapr_machine_reset(MachineState *machine) spapr->patb_entry = PATE1_GR; spapr_set_all_lpcrs(LPCR_HR | LPCR_UPRT, LPCR_HR | LPCR_UPRT); } else { - spapr_setup_hpt_and_vrma(spapr); + spapr_setup_hpt(spapr); } qemu_devices_reset(); @@ -2696,20 +2702,6 @@ static void spapr_machine_init(MachineState *machine) spapr->rma_size = node0_size; - /* With KVM, we don't actually know whether KVM supports an - * unbounded RMA (PR KVM) or is limited by the hash table size - * (HV KVM using VRMA), so we always assume the latter - * - * In that case, we also limit the initial allocations for RTAS - * etc... to 256M since we have no way to know what the VRMA size - * is going to be as it depends on the size of the hash table - * which isn't determined yet. - */ - if (kvm_enabled()) { - spapr->vrma_adjust = 1; - spapr->rma_size = MIN(spapr->rma_size, 0x10000000); - } - /* Actually we don't support unbounded RMA anymore since we added * proper emulation of HV mode. The max we can get is 16G which * also happens to be what we configure for PAPR mode so make sure diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 6db3dbde9c..11e8a4f153 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -1458,7 +1458,7 @@ static void spapr_check_setup_free_hpt(SpaprMachineState *spapr, spapr_free_hpt(spapr); } else if (!(patbe_new & PATE1_GR)) { /* RADIX->HASH || NOTHING->HASH : Allocate HPT */ - spapr_setup_hpt_and_vrma(spapr); + spapr_setup_hpt(spapr); } return; } @@ -1846,7 +1846,7 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu, * (because the guest isn't going to use radix) then set it up here. */ if ((spapr->patb_entry & PATE1_GR) && !guest_radix) { /* legacy hash or new hash: */ - spapr_setup_hpt_and_vrma(spapr); + spapr_setup_hpt(spapr); } if (fdt_bufsize < sizeof(hdr)) { diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 09110961a5..fc49c1a710 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -156,7 +156,6 @@ struct SpaprMachineState { SpaprPendingHpt *pending_hpt; /* in-progress resize */ hwaddr rma_size; - int vrma_adjust; uint32_t fdt_size; uint32_t fdt_initial_size; void *fdt_blob; @@ -795,7 +794,7 @@ void *spapr_build_fdt(SpaprMachineState *spapr, bool reset, size_t space); void spapr_events_init(SpaprMachineState *sm); void spapr_dt_events(SpaprMachineState *sm, void *fdt); void close_htab_fd(SpaprMachineState *spapr); -void spapr_setup_hpt_and_vrma(SpaprMachineState *spapr); +void spapr_setup_hpt(SpaprMachineState *spapr); void spapr_free_hpt(SpaprMachineState *spapr); SpaprTceTable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn); void spapr_tce_table_enable(SpaprTceTable *tcet, From patchwork Mon Feb 24 23:37:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402187 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 60803924 for ; Mon, 24 Feb 2020 23:49:43 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 377472176D for ; Mon, 24 Feb 2020 23:49:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="NUuAk5LZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 377472176D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46292 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NTq-0000Mg-EJ for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:49:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47413) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIm-0007B1-IU for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:38:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIl-0008Hy-8H for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:38:16 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:39165) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIk-00089Z-U7; Mon, 24 Feb 2020 18:38:15 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ75DNQz9sSc; Tue, 25 Feb 2020 10:37:33 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587455; bh=5vj5hZheaPC8JaSv3aSxTYhdCA9hs4iVnlvVk/qgUQc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NUuAk5LZQ26KNU/bVSETT6sgwFWyQTACmGDl8gtSqS2SZerhJTr9HI7C7EaQBQaUJ 4yXe0APc7s7gMF/dbzeXoT1KYUkhgUO34Yc6X1v63h62syV+Y/MJGVBTSEhnBQvDwF gBz60G+lhDjBrsy7+xPgolIwewLH/imyTDpouqEI= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 16/18] spapr: Don't clamp RMA to 16GiB on new machine types Date: Tue, 25 Feb 2020 10:37:22 +1100 Message-Id: <20200224233724.46415-17-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" In spapr_machine_init() we clamp the size of the RMA to 16GiB and the comment saying why doesn't make a whole lot of sense. In fact, this was done because the real mode handling code elsewhere limited the RMA in TCG mode to the maximum value configurable in LPCR[RMLS], 16GiB. But, * Actually LPCR[RMLS] has been able to encode a 256GiB size for a very long time, we just didn't implement it properly in the softmmu * LPCR[RMLS] shouldn't really be relevant anyway, it only was because we used to abuse the RMOR based translation mode in order to handle the fact that we're not modelling the hypervisor parts of the cpu We've now removed those limitations in the modelling so the 16GiB clamp no longer serves a function. However, we can't just remove the limit universally: that would break migration to earlier qemu versions, where the 16GiB RMLS limit still applies, no matter how bad the reasons for it are. So, we replace the 16GiB clamp, with a clamp to a limit defined in the machine type class. We set it to 16 GiB for machine types 4.2 and earlier, but set it to 0 meaning unlimited for the new 5.0 machine type. Signed-off-by: David Gibson --- hw/ppc/spapr.c | 13 ++++++++----- include/hw/ppc/spapr.h | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 4dab489931..6e9f15f64d 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2702,12 +2702,14 @@ static void spapr_machine_init(MachineState *machine) spapr->rma_size = node0_size; - /* Actually we don't support unbounded RMA anymore since we added - * proper emulation of HV mode. The max we can get is 16G which - * also happens to be what we configure for PAPR mode so make sure - * we don't do anything bigger than that + /* + * Clamp the RMA size based on machine type. This is for + * migration compatibility with older qemu versions, which limited + * the RMA size for complicated and mostly bad reasons. */ - spapr->rma_size = MIN(spapr->rma_size, 0x400000000ull); + if (smc->rma_limit) { + spapr->rma_size = MIN(spapr->rma_size, smc->rma_limit); + } if (spapr->rma_size > node0_size) { error_report("Numa node 0 has to span the RMA (%#08"HWADDR_PRIx")", @@ -4600,6 +4602,7 @@ static void spapr_machine_4_2_class_options(MachineClass *mc) compat_props_add(mc->compat_props, hw_compat_4_2, hw_compat_4_2_len); smc->default_caps.caps[SPAPR_CAP_CCF_ASSIST] = SPAPR_CAP_OFF; smc->default_caps.caps[SPAPR_CAP_FWNMI_MCE] = SPAPR_CAP_OFF; + smc->rma_limit = 16 * GiB; mc->nvdimm_supported = false; } diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index fc49c1a710..8a44a1f488 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -126,6 +126,7 @@ struct SpaprMachineClass { bool pre_4_1_migration; /* don't migrate hpt-max-page-size */ bool linux_pci_probe; bool smp_threads_vsmt; /* set VSMT to smp_threads by default */ + hwaddr rma_limit; /* clamp the RMA to this size */ void (*phb_placement)(SpaprMachineState *spapr, uint32_t index, uint64_t *buid, hwaddr *pio, From patchwork Mon Feb 24 23:37:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402179 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CDA2F138D for ; Mon, 24 Feb 2020 23:43:53 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A3E332084E for ; Mon, 24 Feb 2020 23:43:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="Pfh6D2b/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A3E332084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46214 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NOC-0002eY-Qc for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:43:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47300) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NIR-0006cw-UL for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NIQ-0008B0-Fj for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:37:55 -0500 Received: from ozlabs.org ([2401:3900:2:1::2]:58809) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NIQ-00087b-46; Mon, 24 Feb 2020 18:37:54 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ6596pz9sSX; Tue, 25 Feb 2020 10:37:33 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587454; bh=2HMMcHS71SZcl1mdEZbUO8BqzSboB4TqxyWpdz2JwgM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Pfh6D2b/hCpTqdbe2xOgLDE1NoGtFr4CAZgf0QxMb3Q7KW65rTdeTtxxcbTxob/UK G8g9SIEomasRU+4kCF661JpmUjnHKv+qlUeBLLWzYGaAjto9xKbqOwHj6OXP69UMHL pFNofn+Ijb9IE0SM+go0J902hUzDr7wBb/B90SNI= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 17/18] spapr: Clean up RMA size calculation Date: Tue, 25 Feb 2020 10:37:23 +1100 Message-Id: <20200224233724.46415-18-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Move the calculation of the Real Mode Area (RMA) size into a helper function. While we're there clean it up and correct it in a few ways: * Add comments making it clearer where the various constraints come from * Remove a pointless check that the RMA fits within Node 0 (we've just clamped it so that it does) Signed-off-by: David Gibson --- hw/ppc/spapr.c | 59 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 6e9f15f64d..f0354b699d 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2648,6 +2648,40 @@ static PCIHostState *spapr_create_default_phb(void) return PCI_HOST_BRIDGE(dev); } +static hwaddr spapr_rma_size(SpaprMachineState *spapr, Error **errp) +{ + MachineState *machine = MACHINE(spapr); + hwaddr rma_size = machine->ram_size; + hwaddr node0_size = spapr_node0_size(machine); + + /* RMA has to fit in the first NUMA node */ + rma_size = MIN(rma_size, node0_size); + + /* + * VRMA access is via a special 1TiB SLB mapping, so the RMA can + * never exceed that + */ + rma_size = MIN(rma_size, TiB); + + /* + * Clamp the RMA size based on machine type. This is for + * migration compatibility with older qemu versions, which limited + * the RMA size for complicated and mostly bad reasons. + */ + if (smc->rma_limit) { + spapr->rma_size = MIN(spapr->rma_size, smc->rma_limit); + } + + if (rma_size < (MIN_RMA_SLOF * MiB)) { + error_setg(errp, +"pSeries SLOF firmware requires >= %ldMiB guest RMA (Real Mode Area)", + MIN_RMA_SLOF); + return -1; + } + + return rma_size; +} + /* pSeries LPAR / sPAPR hardware init */ static void spapr_machine_init(MachineState *machine) { @@ -2660,7 +2694,6 @@ static void spapr_machine_init(MachineState *machine) int i; MemoryRegion *sysmem = get_system_memory(); MemoryRegion *ram = g_new(MemoryRegion, 1); - hwaddr node0_size = spapr_node0_size(machine); long load_limit, fw_size; char *filename; Error *resize_hpt_err = NULL; @@ -2700,22 +2733,7 @@ static void spapr_machine_init(MachineState *machine) exit(1); } - spapr->rma_size = node0_size; - - /* - * Clamp the RMA size based on machine type. This is for - * migration compatibility with older qemu versions, which limited - * the RMA size for complicated and mostly bad reasons. - */ - if (smc->rma_limit) { - spapr->rma_size = MIN(spapr->rma_size, smc->rma_limit); - } - - if (spapr->rma_size > node0_size) { - error_report("Numa node 0 has to span the RMA (%#08"HWADDR_PRIx")", - spapr->rma_size); - exit(1); - } + spapr->rma_size = spapr_rma_size(spapr, &error_fatal); /* Setup a load limit for the ramdisk leaving room for SLOF and FDT */ load_limit = MIN(spapr->rma_size, RTAS_MAX_ADDR) - FW_OVERHEAD; @@ -2954,13 +2972,6 @@ static void spapr_machine_init(MachineState *machine) } } - if (spapr->rma_size < MIN_RMA_SLOF) { - error_report( - "pSeries SLOF firmware requires >= %ldMiB guest RMA (Real Mode Area memory)", - MIN_RMA_SLOF / MiB); - exit(1); - } - if (kernel_filename) { uint64_t lowaddr = 0; From patchwork Mon Feb 24 23:37:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11402177 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BDDDB1395 for ; Mon, 24 Feb 2020 23:43:45 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 919F32084E for ; Mon, 24 Feb 2020 23:43:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="m1BBjZgf" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 919F32084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46212 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NO4-0002Ld-Q8 for patchwork-qemu-devel@patchwork.kernel.org; Mon, 24 Feb 2020 18:43:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:48169) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NNI-0000xk-2I for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:42:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NNG-0001j2-Sn for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:42:56 -0500 Received: from ozlabs.org ([203.11.71.1]:57215) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NNG-0001im-Ha; Mon, 24 Feb 2020 18:42:54 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ72m7Gz9sSb; Tue, 25 Feb 2020 10:37:34 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587455; bh=GyzBZMDoAMPRnJCvIsnfxFsMHlBhNBqGfLr4nb9ELlM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=m1BBjZgfAz9evchJx+24BlgIm7hMhYLqsbeOYjl9TXtx6/Q8By5QvP9oH4pJFpoBQ lQRHCZTFZaOsoZx2IaQG1Bm+TWTioLzIcY5c7b9eubK6rgQuCHVPbmappWY4kt1Q20 L4u53doG3Aeq0TSeRKyVOGQ/hRlBra6gDrQUnOII= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 18/18] spapr: Fold spapr_node0_size() into its only caller Date: Tue, 25 Feb 2020 10:37:24 +1100 Message-Id: <20200224233724.46415-19-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" The Real Mode Area (RMA) needs to fit within the NUMA node owning memory at address 0. That's usually node 0, but can be a later one if there are some nodes which have no memory (only CPUs). This is currently handled by the spapr_node0_size() helper. It has only one caller, so there's not a lot of point splitting it out. It's also extremely easy to misread the code as clamping to the size of the smallest node rather than the first node with any memory. So, fold it into the caller, and add some commentary to make it a bit clearer exactly what it's doing. Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/ppc/spapr.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index f0354b699d..9ba645c9cb 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -296,20 +296,6 @@ static void spapr_populate_pa_features(SpaprMachineState *spapr, _FDT((fdt_setprop(fdt, offset, "ibm,pa-features", pa_features, pa_size))); } -static hwaddr spapr_node0_size(MachineState *machine) -{ - if (machine->numa_state->num_nodes) { - int i; - for (i = 0; i < machine->numa_state->num_nodes; ++i) { - if (machine->numa_state->nodes[i].node_mem) { - return MIN(pow2floor(machine->numa_state->nodes[i].node_mem), - machine->ram_size); - } - } - } - return machine->ram_size; -} - static void add_str(GString *s, const gchar *s1) { g_string_append_len(s, s1, strlen(s1) + 1); @@ -2652,10 +2638,24 @@ static hwaddr spapr_rma_size(SpaprMachineState *spapr, Error **errp) { MachineState *machine = MACHINE(spapr); hwaddr rma_size = machine->ram_size; - hwaddr node0_size = spapr_node0_size(machine); /* RMA has to fit in the first NUMA node */ - rma_size = MIN(rma_size, node0_size); + if (machine->numa_state->num_nodes) { + /* + * It's possible for there to be some zero-memory nodes first + * in the list. We need the RMA to fit inside the memory of + * the first node which actually has some memory. + */ + int i; + + for (i = 0; i < machine->numa_state->num_nodes; ++i) { + if (machine->numa_state->nodes[i].node_mem != 0) { + rma_size = MIN(rma_size, + machine->numa_state->nodes[i].node_mem); + break; + } + } + } /* * VRMA access is via a special 1TiB SLB mapping, so the RMA can @@ -2672,6 +2672,11 @@ static hwaddr spapr_rma_size(SpaprMachineState *spapr, Error **errp) spapr->rma_size = MIN(spapr->rma_size, smc->rma_limit); } + /* + * RMA size must be a power of 2 + */ + rma_size = pow2floor(rma_size); + if (rma_size < (MIN_RMA_SLOF * MiB)) { error_setg(errp, "pSeries SLOF firmware requires >= %ldMiB guest RMA (Real Mode Area)",