From nobody Sun May 12 16:53:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1565232689; cv=none; d=zoho.com; s=zohoarc; b=DP9bHKlNwV8JRNdUpC1qT8SRTTuGoTc9NK2alRJvplzKo843Bi0PT0nBEx2OdGGTS+vzPMLcWJc58a1UugwC5ynM740jtsBTdb8iI8dbZeklsNZZnEigI2iPnOQ4Q4boWSRZO9hOTAkWKtsQBV51chMXPdmYacMpLrxy5JF5W8M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565232689; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=MEY23tj3FXe9ybdCBXoqAcmhF9Bqo5UZJscRu4cbUuc=; b=DjtJd909+84ETN9BiKa57oLMrOKQTq++XnjCLjaUjpXqivgE674WfRa3lhjgNbdJe9wsgSLQnozJt1zAQ3aU4xlwo+PbQ/G+83cAePkCGHtsUEoTg0c6mTHZMnNE6vXO1aHLszvbP2sDRO/PqrP6YanmBq+t+mN9hzyS22obdXc= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 156523268989571.86121525258966; Wed, 7 Aug 2019 19:51:29 -0700 (PDT) Received: from localhost ([::1]:46546 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hvYWM-0000i2-NU for importer@patchew.org; Wed, 07 Aug 2019 22:51:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33427) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hvYVw-0000GB-52 for qemu-devel@nongnu.org; Wed, 07 Aug 2019 22:50:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hvYVu-0007Py-94 for qemu-devel@nongnu.org; Wed, 07 Aug 2019 22:50:51 -0400 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]:39709) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hvYVt-0007P1-R7; Wed, 07 Aug 2019 22:50:50 -0400 Received: by mail-pf1-x443.google.com with SMTP id f17so39213883pfn.6; Wed, 07 Aug 2019 19:50:46 -0700 (PDT) Received: from localhost.localdomain (unknown-224-80.windriver.com. [147.11.224.80]) by smtp.gmail.com with ESMTPSA id a1sm63456777pgh.61.2019.08.07.19.50.44 (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 07 Aug 2019 19:50:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=MEY23tj3FXe9ybdCBXoqAcmhF9Bqo5UZJscRu4cbUuc=; b=B6d0rf5hd9CYP9oe3XObusydn4RUrl/T4kVgi0oG0UCUhbmox7UVON8c9g4FufI+WR 1BIfl7Mkyk4x0+oh4JsQSWxjw6PS2NHnCKu1WEPkkMFqOYAvmm3l3SfNGof5XcsUSe2d JTQ5yACLAeB/G0hawNn7cGgkTZCjiWl001Pa8taDY9D5b9kLWbZXbqNvIbuDKXUdogdQ 0yGXNfvlTP63NyvH2h1QZX3XbUowsNNobghSsYD3NIaE99YBNm6LyHJ7nYHXzwggiTNT dS3/DPa/Ujf7JkKKgiBIjyWZVE9tcWEy5XsYEqXLFkbh7YBxu3e3B9oh6LcXygjdtIID CKww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=MEY23tj3FXe9ybdCBXoqAcmhF9Bqo5UZJscRu4cbUuc=; b=k0ekJNW67OgkeThlC0GinS2cDUVKf8uvIV8lR1u5j/+sqVAOB0DBxT6TqtxHV3Kv3Y tYo2HCYFeI19KohZ4sbuZ89fHL1Id5ynJdjnT8kq6SXaDVD1v+fNejb8fghL+Vjt5m8n 9Kegnw4hYhHJVDtfg5uehJB0ZF5H4Vpg4kjA3CWqd0z8noDYS1D9D/pHhijJunA0IZc2 /IrFg7INoD+k+HhvuAre5h0MS7a5jSVvpazMFSmBuTXGq15jAnlPRd3LZNcPWcB5tk+J pXzzebYgoCahlePcVFcMWy5iaUuEvryfCLpOrOqICOEHUiRg2VfaVStCyHpY3q7EbyKF PGwQ== X-Gm-Message-State: APjAAAUqm5hTsnIvPGpeR9MMFevivvfPYEJ2ywP6VEVf2Jiwdx3LMf5k 8JuUI0SPz1VNPagmtWq5dU0= X-Google-Smtp-Source: APXvYqxYNyHTsewdBL4VTaw7ocNWXUjHB70ACk4DdXh2PBxabWqFTGOK37KsYIJdT7IvcEUJPU1rnA== X-Received: by 2002:a62:e403:: with SMTP id r3mr12258743pfh.37.1565232645639; Wed, 07 Aug 2019 19:50:45 -0700 (PDT) From: Bin Meng To: Alistair Francis , Bastian Koppelmann , Palmer Dabbelt , Sagar Karandikar , Richard Henderson , qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Wed, 7 Aug 2019 19:49:30 -0700 Message-Id: <1565232570-29296-1-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1564577101-29020-1-git-send-email-bmeng.cn@gmail.com> References: <1564577101-29020-1-git-send-email-bmeng.cn@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::443 Subject: [Qemu-devel] [PATCH v2] riscv: rv32: Root page table address can be larger than 32-bit 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" For RV32, the root page table's PPN has 22 bits hence its address bits could be larger than the maximum bits that target_ulong is able to represent. Use hwaddr instead. Signed-off-by: Bin Meng Reviewed-by: Alistair Francis --- Changes in v2: - promote ppn, env->satp/env->sptbl to hwaddr otherwise the page table base will not be correctly calculated target/riscv/cpu_helper.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index e32b612..b2b4f3a 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -176,12 +176,12 @@ static int get_physical_address(CPURISCVState *env, h= waddr *physical, =20 *prot =3D 0; =20 - target_ulong base; + hwaddr base; int levels, ptidxbits, ptesize, vm, sum; int mxr =3D get_field(env->mstatus, MSTATUS_MXR); =20 if (env->priv_ver >=3D PRIV_VERSION_1_10_0) { - base =3D get_field(env->satp, SATP_PPN) << PGSHIFT; + base =3D (hwaddr)get_field(env->satp, SATP_PPN) << PGSHIFT; sum =3D get_field(env->mstatus, MSTATUS_SUM); vm =3D get_field(env->satp, SATP_MODE); switch (vm) { @@ -201,7 +201,7 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, g_assert_not_reached(); } } else { - base =3D env->sptbr << PGSHIFT; + base =3D (hwaddr)(env->sptbr) << PGSHIFT; sum =3D !get_field(env->mstatus, MSTATUS_PUM); vm =3D get_field(env->mstatus, MSTATUS_VM); switch (vm) { @@ -239,7 +239,7 @@ restart: ((1 << ptidxbits) - 1); =20 /* check that physical address of PTE is legal */ - target_ulong pte_addr =3D base + idx * ptesize; + hwaddr pte_addr =3D base + idx * ptesize; =20 if (riscv_feature(env, RISCV_FEATURE_PMP) && !pmp_hart_has_privs(env, pte_addr, sizeof(target_ulong), @@ -251,7 +251,7 @@ restart: #elif defined(TARGET_RISCV64) target_ulong pte =3D ldq_phys(cs->as, pte_addr); #endif - target_ulong ppn =3D pte >> PTE_PPN_SHIFT; + hwaddr ppn =3D pte >> PTE_PPN_SHIFT; =20 if (!(pte & PTE_V)) { /* Invalid PTE */ --=20 2.7.4