From patchwork Thu Jun 27 15:19:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Palmer Dabbelt X-Patchwork-Id: 1123476 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com 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 ozlabs.org (Postfix) with ESMTPS id 45ZPGt04v2z9s3l for ; Fri, 28 Jun 2019 01:40:06 +1000 (AEST) Received: from localhost ([::1]:51840 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hgWVI-0008Al-1u for incoming@patchwork.ozlabs.org; Thu, 27 Jun 2019 11:40:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60862) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hgWGg-0001ld-ML for qemu-devel@nongnu.org; Thu, 27 Jun 2019 11:24:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hgWGc-0007g0-Ik for qemu-devel@nongnu.org; Thu, 27 Jun 2019 11:24:55 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:36609) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hgWGa-0006bX-9O for qemu-devel@nongnu.org; Thu, 27 Jun 2019 11:24:52 -0400 Received: by mail-pg1-f194.google.com with SMTP id c13so1180450pgg.3 for ; Thu, 27 Jun 2019 08:23:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:cc:from:to; bh=Iw6+m+IE1PHOTPzSnV8qMJ+Sj/ZsLxY0VeWDR+SUS50=; b=ATFpleel2IfUltFcPQWe1Dsak8sR4bmHUUXhVi6/1rjn2EywoMp/L5GU0F/h+OlcLL qanlgsg02fbc3yBTM8Si1uuDcFNsSpEWBHKOk45RQd69QWXTxA5L0rbBw1v6Db1nqhsn qqCpiWdCc6CXPo1OqhL4hLIa9KcoB/TdmEz12GzU/qSIjzo5+yBGUkujgi0aghEIYCbY iMw+vnayhfz9vQB+BIvRmJa0Ia7Vnh7Lwmm5xWRAx9uGoNO7pFIB7B4BnST6jsvI+7nk 2emZcMuOB1wTxqG/Y0wnuF0RPqEVxY8bzx3G9Ux2X2tn8M1NvCjQmfqsPbvUEDpcFK55 HBkw== X-Gm-Message-State: APjAAAUUe3k102ufEFkkl3SnSlfd/fZMMnuf2U9tdlPuyCyqh0drd7zV KXDvzARrYb8KllW4j3+eo76WAQ== X-Google-Smtp-Source: APXvYqx7QFAz0ycxwYn64N6rMCpYYUd5z3YRPOnYVpiuJW21aJOrTXHvztilDPsGl48ZbuyUtf2fIw== X-Received: by 2002:a63:1864:: with SMTP id 36mr2871248pgy.272.1561649014575; Thu, 27 Jun 2019 08:23:34 -0700 (PDT) Received: from localhost (220-132-236-182.HINET-IP.hinet.net. [220.132.236.182]) by smtp.gmail.com with ESMTPSA id i126sm3786390pfb.32.2019.06.27.08.23.33 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Thu, 27 Jun 2019 08:23:34 -0700 (PDT) Date: Thu, 27 Jun 2019 08:19:42 -0700 Message-Id: <20190627152011.18686-6-palmer@sifive.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190627152011.18686-1-palmer@sifive.com> References: <20190627152011.18686-1-palmer@sifive.com> MIME-Version: 1.0 From: Palmer Dabbelt To: Peter Maydell X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.215.194 Subject: [Qemu-devel] [PULL 05/34] RISC-V: Only Check PMP if MMU translation succeeds 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: Alistair Francis , Palmer Dabbelt , qemu-riscv@nongnu.org, qemu-devel@nongnu.org, Hesham Almatary Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Hesham Almatary The current implementation unnecessarily checks for PMP even if MMU translation failed. This may trigger a wrong PMP access exception instead of a page exception. For example, the very first instruction fetched after the first satp write in S-Mode will trigger a PMP access fault instead of an instruction fetch page fault. This patch prioritises MMU exceptions over PMP exceptions and only checks for PMP if MMU translation succeeds. This patch is required for future commits that properly report PMP exception violations if PTW succeeds. Signed-off-by: Hesham Almatary Reviewed-by: Alistair Francis Signed-off-by: Palmer Dabbelt --- target/riscv/cpu_helper.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 0bbfb7f48b79..a45b05ef8395 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -436,6 +436,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, " prot %d\n", __func__, address, ret, pa, prot); if (riscv_feature(env, RISCV_FEATURE_PMP) && + (ret == TRANSLATE_SUCCESS) && !pmp_hart_has_privs(env, pa, TARGET_PAGE_SIZE, 1 << access_type)) { ret = TRANSLATE_FAIL; }