From mboxrd@z Thu Jan 1 00:00:00 1970 From: Clément Léger Date: Thu, 18 Apr 2024 16:26:43 +0200 Subject: [RFC PATCH 4/7] riscv: handle Ssdbltrp mstatus SDT bit In-Reply-To: <20240418142701.1493091-1-cleger@rivosinc.com> References: <20240418142701.1493091-1-cleger@rivosinc.com> Message-ID: <20240418142701.1493091-5-cleger@rivosinc.com> List-Id: To: kvm-riscv@lists.infradead.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit When Ssdbltrp is enabled, we must take care of clearing SDT after sensitive phases are over to avoid generating a double trap. This is mainly about exceptions handling so clear SDT once we have saved enough information (critical CSRs) but also clears it during SATP mode detection which generates an "inline" trap and thus sets SDT implicitely. Signed-off-by: Cl?ment L?ger --- arch/riscv/include/asm/csr.h | 1 + arch/riscv/kernel/entry.S | 52 ++++++++++++++++++++--------------- arch/riscv/kernel/head.S | 4 +++ arch/riscv/kernel/sse_entry.S | 4 +-- 4 files changed, 37 insertions(+), 24 deletions(-) diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h index 5528159b3d5d..905cdf894a57 100644 --- a/arch/riscv/include/asm/csr.h +++ b/arch/riscv/include/asm/csr.h @@ -17,6 +17,7 @@ #define SR_SPP _AC(0x00000100, UL) /* Previously Supervisor */ #define SR_MPP _AC(0x00001800, UL) /* Previously Machine */ #define SR_SUM _AC(0x00040000, UL) /* Supervisor User Memory Access */ +#define SR_SDT _AC(0x01000000, UL) /* Supervisor Double Trap */ #define SR_FS _AC(0x00006000, UL) /* Floating-point Status */ #define SR_FS_OFF _AC(0x00000000, UL) diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S index 1591e0781569..07da91080839 100644 --- a/arch/riscv/kernel/entry.S +++ b/arch/riscv/kernel/entry.S @@ -49,23 +49,12 @@ SYM_CODE_START(handle_exception) REG_S x5, PT_T0(sp) save_from_x6_to_x31 - /* - * Disable user-mode memory access as it should only be set in the - * actual user copy routines. - * - * Disable the FPU/Vector to detect illegal usage of floating point - * or vector in kernel space. - */ - li t0, SR_SUM | SR_FS_VS - REG_L s0, TASK_TI_USER_SP(tp) - csrrc s1, CSR_STATUS, t0 csrr s2, CSR_EPC csrr s3, CSR_TVAL csrr s4, CSR_CAUSE csrr s5, CSR_SCRATCH REG_S s0, PT_SP(sp) - REG_S s1, PT_STATUS(sp) REG_S s2, PT_EPC(sp) REG_S s3, PT_BADADDR(sp) REG_S s4, PT_CAUSE(sp) @@ -77,6 +66,21 @@ SYM_CODE_START(handle_exception) */ csrw CSR_SCRATCH, x0 + /* + * Disable user-mode memory access as it should only be set in the + * actual user copy routines. + * + * Disable the FPU/Vector to detect illegal usage of floating point + * or vector in kernel space. + * + * Clear supervisor double trap bit as all trap context is saved and we + * can handle another one + */ + li t0, SR_SUM | SR_FS_VS | SR_SDT + + csrrc s1, CSR_STATUS, t0 + REG_S s1, PT_STATUS(sp) + /* Load the global pointer */ load_global_pointer @@ -123,15 +127,25 @@ SYM_CODE_START_NOALIGN(ret_from_exception) #ifdef CONFIG_RISCV_M_MODE /* the MPP value is too large to be used as an immediate arg for addi */ li t0, SR_MPP - and s0, s0, t0 + and t1, s0, t0 #else - andi s0, s0, SR_SPP + andi t1, s0, SR_SPP +#endif + +#ifdef CONFIG_RISCV_ISA_V_PREEMPTIVE + move a0, sp + call riscv_v_context_nesting_end #endif - bnez s0, 1f + /* + * Restore STATUS now to set supervisor double trap bit which means that + * from now on, we can not handle an exception up to "sret" + */ + csrw CSR_STATUS, s0 + bnez t1, 1f /* Save unwound kernel stack pointer in thread_info */ - addi s0, sp, PT_SIZE_ON_STACK - REG_S s0, TASK_TI_KERNEL_SP(tp) + addi t1, sp, PT_SIZE_ON_STACK + REG_S t1, TASK_TI_KERNEL_SP(tp) /* Save the kernel shadow call stack pointer */ scs_save_current @@ -142,11 +156,6 @@ SYM_CODE_START_NOALIGN(ret_from_exception) */ csrw CSR_SCRATCH, tp 1: -#ifdef CONFIG_RISCV_ISA_V_PREEMPTIVE - move a0, sp - call riscv_v_context_nesting_end -#endif - REG_L a0, PT_STATUS(sp) /* * The current load reservation is effectively part of the processor's * state, in the sense that load reservations cannot be shared between @@ -167,7 +176,6 @@ SYM_CODE_START_NOALIGN(ret_from_exception) REG_L a2, PT_EPC(sp) REG_SC x0, a2, PT_EPC(sp) - csrw CSR_STATUS, a0 csrw CSR_EPC, a2 REG_L x1, PT_RA(sp) diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S index 4236a69c35cb..bcc2b6678f40 100644 --- a/arch/riscv/kernel/head.S +++ b/arch/riscv/kernel/head.S @@ -106,6 +106,10 @@ relocate_enable_mmu: csrw CSR_SATP, a0 .align 2 1: + /* A trap potentially set the SDT flag, clear it */ + li t0, SR_SDT + csrc CSR_STATUS, t0 + /* Set trap vector to spin forever to help debug */ la a0, .Lsecondary_park csrw CSR_TVEC, a0 diff --git a/arch/riscv/kernel/sse_entry.S b/arch/riscv/kernel/sse_entry.S index d3c7286f3372..e69d386e36e9 100644 --- a/arch/riscv/kernel/sse_entry.S +++ b/arch/riscv/kernel/sse_entry.S @@ -65,7 +65,7 @@ SYM_CODE_START(handle_sse) REG_S a4, PT_SP(sp) /* Disable user memory access and floating/vector computing */ - li t0, SR_SUM | SR_FS_VS + li t0, SR_SUM | SR_FS_VS | SR_SDT csrc CSR_STATUS, t0 load_global_pointer @@ -131,8 +131,8 @@ SYM_CODE_START(handle_sse) SYM_INNER_LABEL(ret_from_sse, SYM_L_GLOBAL) /* Restore saved CSRs */ - csrw CSR_SSCRATCH, s4 csrw CSR_SSTATUS, s5 + csrw CSR_SSCRATCH, s4 #ifdef CONFIG_FRAME_POINTER /* Frame pointer is created only when kernel is interrupted */ -- 2.43.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 24B19C4345F for ; Thu, 18 Apr 2024 15:31:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BJOq/s2swcdAaUtNaQACS2q99BaAEkvOU5lSQpzbz0Q=; b=PBCw9uXID+LQLJ py+uZcIvOd8bPLGaIXZnBGc/6Toc5DNYoz3Zaaz68CtNbF6nEu/U689B9QKBOaMGHfyXvGGIHwEWk rYTctt3Gny0H/mt4cj+GQAuyWcb4UvvY+PLPBQJeJ0J5tNaK1hbX10mxyFhQa5w/ACxAoiIFFAvfe 1HEy97tAKSRn1L73EzwXhHPUCxxP4VqsinbnXWuxvcI91IYTZlcAvKFgbemJB51xNFcQOkVHzTg0a Px5YrY2vHxqr1L7TzESkym7zsoH1TOfINPh88gCQHDI1n9xX0GFPJyTuv9DBlzhi9+jobABB1Jnz3 ka1OflxLM0dNZnRuRJhA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxTjq-00000002nzM-42Py; Thu, 18 Apr 2024 15:31:50 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSjP-00000002cY4-1zaz for linux-riscv@bombadil.infradead.org; Thu, 18 Apr 2024 14:27:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=m/abrO6aRdYSwYEiniLJTSjXDsMHpzNjwZUI0bHiQJI=; b=LG6GtYafBkxrgqHArbSmWKcvY/ SE5uH3zmOC+w8j8WcEdV4u0FvmRHqvnYtqcto1E0ApP9O6Mwnpwz1lPeCJ1XxdrGnYvbsV0J6zVHE 8UMboMLqjn+bzIF4EKbEZdEsGSt/FESPQaM9KTeq6XmFnkArjjc7uj9ViBlzXpYCfNVAF7kBdf/5R x3/9hSW1SU7MFyek+d+LisdEwRItH+eHQrSnYmpcmCrnwQeZnzuqTfuwt6Pm0W2JFUt4Fsm+wuFqw y4ZYieJtqoXnB/i+4QF4466jZU9e9z+KwYfQZU2lAcIIdCk/VxKKTEIKqWvLfOzRypPKGbo8/HWrz zai7ZBeA==; Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by desiato.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxSjM-0000000C2PM-17cl for linux-riscv@lists.infradead.org; Thu, 18 Apr 2024 14:27:18 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-349a35aba9dso167608f8f.3 for ; Thu, 18 Apr 2024 07:27:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1713450434; x=1714055234; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m/abrO6aRdYSwYEiniLJTSjXDsMHpzNjwZUI0bHiQJI=; b=Uz77sTkw5q9geby3ck94PZzmiOCVVLrWvczIqA+VM2y0X9SkoMgfc3YwgJuTMzRN8+ 9Ly/TiQlukai6hsXhbjorXuNnWeC86gwEEbNaKd9v6RL7pRP/D/TrsG8WpCVfsFz/+CG 4obNyf085rSi6y9Via9u3apeDfvfsRsGkjr+p3jsJ/xMgvn424bn6ohZA3IhND0sq9aM 22eZo2E9ZlXGp7djq049zFjMleRcqX4iE4LOn4SlzDPGaaHISNIDdF4thrTqRpou5Er6 e5246HPTKV4+BRL69ITwv56yle+61M0tHXdiGfmldqkn4Eq3LHxoLDyaZeAzEegdYvS9 c5qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713450434; x=1714055234; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=m/abrO6aRdYSwYEiniLJTSjXDsMHpzNjwZUI0bHiQJI=; b=MC5lO39xLmnGjWCUUtWu9P52h7LOoF6wPP1vS+YjLujxNqxHyzfGZl4UTvU+gCw3oC KKJhXMlEZiL3+u+N+vzo2UP4qQdiTkfv08GH6WFv+uJVnb/HFB8hUH41xKrT/FyonST+ yoxPqgpd7y+eGFZbX8HaWhnaDd1imoywKS2brAqNUWaEjlbsMFHmEJTkCsNxFJJyUWZj guNFTWUqx0L0v3tTTrM5Iz+wMnWpwHEWbyFGFq4KI49RWpfQ1VOUDeQNWD5+KfF+xvBd +SNfBHKA/d9YP3HT8fBWQiwf7FOuX4W/7f9HGtHio3iZIsyE1ouOC93IsFLXET7bfftj HDdg== X-Forwarded-Encrypted: i=1; AJvYcCVRAkcUGYLpBL0yHpVjIXCAqEGiSqhvJekJj/5Viy8zhkJ5pSxdHrWqg8fZNsOi+pzzRVbye13Tw2t8kTqXQdaT1zKQkzKcC4TOWyRLKomu X-Gm-Message-State: AOJu0YwuqHX7mHffwkXhM4G6j7NW2nqqSgQ/S3MTQK7g5QvrRddNXQ3d juC98mCg796uCtGTlSagwuXsyBhqVoWHmxMJnBgjVSM6HWQb4/Ky3Yo4y5AdZxs= X-Google-Smtp-Source: AGHT+IEkGDIAezbeIVZmmrT9rlRCJjcxopA8THm4S/C75RtVNLUvN35X394KK2J0KQ/iPXZ6II3FvA== X-Received: by 2002:a05:600c:4f8a:b0:418:f770:ba0 with SMTP id n10-20020a05600c4f8a00b00418f7700ba0mr505923wmq.0.1713450434242; Thu, 18 Apr 2024 07:27:14 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:7b64:4d1d:16d8:e38b]) by smtp.gmail.com with ESMTPSA id v10-20020a05600c470a00b00418a386c059sm2873645wmo.42.2024.04.18.07.27.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 07:27:13 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Anup Patel , Atish Patra Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, Ved Shanbhogue Subject: [RFC PATCH 4/7] riscv: handle Ssdbltrp mstatus SDT bit Date: Thu, 18 Apr 2024 16:26:43 +0200 Message-ID: <20240418142701.1493091-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240418142701.1493091-1-cleger@rivosinc.com> References: <20240418142701.1493091-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240418_152716_426701_08D905F7 X-CRM114-Status: GOOD ( 15.01 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org V2hlbiBTc2RibHRycCBpcyBlbmFibGVkLCB3ZSBtdXN0IHRha2UgY2FyZSBvZiBjbGVhcmluZyBT RFQgYWZ0ZXIKc2Vuc2l0aXZlIHBoYXNlcyBhcmUgb3ZlciB0byBhdm9pZCBnZW5lcmF0aW5nIGEg ZG91YmxlIHRyYXAuIFRoaXMKaXMgbWFpbmx5IGFib3V0IGV4Y2VwdGlvbnMgaGFuZGxpbmcgc28g Y2xlYXIgU0RUIG9uY2Ugd2UgaGF2ZQpzYXZlZCBlbm91Z2ggaW5mb3JtYXRpb24gKGNyaXRpY2Fs IENTUnMpIGJ1dCBhbHNvIGNsZWFycyBpdCBkdXJpbmcgU0FUUAptb2RlIGRldGVjdGlvbiB3aGlj aCBnZW5lcmF0ZXMgYW4gImlubGluZSIgdHJhcCBhbmQgdGh1cyBzZXRzIFNEVAppbXBsaWNpdGVs eS4KClNpZ25lZC1vZmYtYnk6IENsw6ltZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNvbT4K LS0tCiBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Nzci5oICB8ICAxICsKIGFyY2gvcmlzY3Yva2Vy bmVsL2VudHJ5LlMgICAgIHwgNTIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0K IGFyY2gvcmlzY3Yva2VybmVsL2hlYWQuUyAgICAgIHwgIDQgKysrCiBhcmNoL3Jpc2N2L2tlcm5l bC9zc2VfZW50cnkuUyB8ICA0ICstLQogNCBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCsp LCAyNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Nz ci5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9jc3IuaAppbmRleCA1NTI4MTU5YjNkNWQuLjkw NWNkZjg5NGE1NyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9jc3IuaAorKysg Yi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Nzci5oCkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5l IFNSX1NQUAkJX0FDKDB4MDAwMDAxMDAsIFVMKSAvKiBQcmV2aW91c2x5IFN1cGVydmlzb3IgKi8K ICNkZWZpbmUgU1JfTVBQCQlfQUMoMHgwMDAwMTgwMCwgVUwpIC8qIFByZXZpb3VzbHkgTWFjaGlu ZSAqLwogI2RlZmluZSBTUl9TVU0JCV9BQygweDAwMDQwMDAwLCBVTCkgLyogU3VwZXJ2aXNvciBV c2VyIE1lbW9yeSBBY2Nlc3MgKi8KKyNkZWZpbmUgU1JfU0RUCQlfQUMoMHgwMTAwMDAwMCwgVUwp IC8qIFN1cGVydmlzb3IgRG91YmxlIFRyYXAgKi8KIAogI2RlZmluZSBTUl9GUwkJX0FDKDB4MDAw MDYwMDAsIFVMKSAvKiBGbG9hdGluZy1wb2ludCBTdGF0dXMgKi8KICNkZWZpbmUgU1JfRlNfT0ZG CV9BQygweDAwMDAwMDAwLCBVTCkKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL2VudHJ5 LlMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9lbnRyeS5TCmluZGV4IDE1OTFlMDc4MTU2OS4uMDdkYTkx MDgwODM5IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gv cmlzY3Yva2VybmVsL2VudHJ5LlMKQEAgLTQ5LDIzICs0OSwxMiBAQCBTWU1fQ09ERV9TVEFSVCho YW5kbGVfZXhjZXB0aW9uKQogCVJFR19TIHg1LCAgUFRfVDAoc3ApCiAJc2F2ZV9mcm9tX3g2X3Rv X3gzMQogCi0JLyoKLQkgKiBEaXNhYmxlIHVzZXItbW9kZSBtZW1vcnkgYWNjZXNzIGFzIGl0IHNo b3VsZCBvbmx5IGJlIHNldCBpbiB0aGUKLQkgKiBhY3R1YWwgdXNlciBjb3B5IHJvdXRpbmVzLgot CSAqCi0JICogRGlzYWJsZSB0aGUgRlBVL1ZlY3RvciB0byBkZXRlY3QgaWxsZWdhbCB1c2FnZSBv ZiBmbG9hdGluZyBwb2ludAotCSAqIG9yIHZlY3RvciBpbiBrZXJuZWwgc3BhY2UuCi0JICovCi0J bGkgdDAsIFNSX1NVTSB8IFNSX0ZTX1ZTCi0KIAlSRUdfTCBzMCwgVEFTS19USV9VU0VSX1NQKHRw KQotCWNzcnJjIHMxLCBDU1JfU1RBVFVTLCB0MAogCWNzcnIgczIsIENTUl9FUEMKIAljc3JyIHMz LCBDU1JfVFZBTAogCWNzcnIgczQsIENTUl9DQVVTRQogCWNzcnIgczUsIENTUl9TQ1JBVENICiAJ UkVHX1MgczAsIFBUX1NQKHNwKQotCVJFR19TIHMxLCBQVF9TVEFUVVMoc3ApCiAJUkVHX1MgczIs IFBUX0VQQyhzcCkKIAlSRUdfUyBzMywgUFRfQkFEQUREUihzcCkKIAlSRUdfUyBzNCwgUFRfQ0FV U0Uoc3ApCkBAIC03Nyw2ICs2NiwyMSBAQCBTWU1fQ09ERV9TVEFSVChoYW5kbGVfZXhjZXB0aW9u KQogCSAqLwogCWNzcncgQ1NSX1NDUkFUQ0gsIHgwCiAKKwkvKgorCSAqIERpc2FibGUgdXNlci1t b2RlIG1lbW9yeSBhY2Nlc3MgYXMgaXQgc2hvdWxkIG9ubHkgYmUgc2V0IGluIHRoZQorCSAqIGFj dHVhbCB1c2VyIGNvcHkgcm91dGluZXMuCisJICoKKwkgKiBEaXNhYmxlIHRoZSBGUFUvVmVjdG9y IHRvIGRldGVjdCBpbGxlZ2FsIHVzYWdlIG9mIGZsb2F0aW5nIHBvaW50CisJICogb3IgdmVjdG9y IGluIGtlcm5lbCBzcGFjZS4KKwkgKgorCSAqIENsZWFyIHN1cGVydmlzb3IgZG91YmxlIHRyYXAg Yml0IGFzIGFsbCB0cmFwIGNvbnRleHQgaXMgc2F2ZWQgYW5kIHdlCisJICogY2FuIGhhbmRsZSBh bm90aGVyIG9uZQorCSAqLworCWxpIHQwLCBTUl9TVU0gfCBTUl9GU19WUyB8IFNSX1NEVAorCisJ Y3NycmMgczEsIENTUl9TVEFUVVMsIHQwCisJUkVHX1MgczEsIFBUX1NUQVRVUyhzcCkKKwogCS8q IExvYWQgdGhlIGdsb2JhbCBwb2ludGVyICovCiAJbG9hZF9nbG9iYWxfcG9pbnRlcgogCkBAIC0x MjMsMTUgKzEyNywyNSBAQCBTWU1fQ09ERV9TVEFSVF9OT0FMSUdOKHJldF9mcm9tX2V4Y2VwdGlv bikKICNpZmRlZiBDT05GSUdfUklTQ1ZfTV9NT0RFCiAJLyogdGhlIE1QUCB2YWx1ZSBpcyB0b28g bGFyZ2UgdG8gYmUgdXNlZCBhcyBhbiBpbW1lZGlhdGUgYXJnIGZvciBhZGRpICovCiAJbGkgdDAs IFNSX01QUAotCWFuZCBzMCwgczAsIHQwCisJYW5kIHQxLCBzMCwgdDAKICNlbHNlCi0JYW5kaSBz MCwgczAsIFNSX1NQUAorCWFuZGkgdDEsIHMwLCBTUl9TUFAKKyNlbmRpZgorCisjaWZkZWYgQ09O RklHX1JJU0NWX0lTQV9WX1BSRUVNUFRJVkUKKwltb3ZlIGEwLCBzcAorCWNhbGwgcmlzY3Zfdl9j b250ZXh0X25lc3RpbmdfZW5kCiAjZW5kaWYKLQlibmV6IHMwLCAxZgorCS8qCisJICogUmVzdG9y ZSBTVEFUVVMgbm93IHRvIHNldCBzdXBlcnZpc29yIGRvdWJsZSB0cmFwIGJpdCB3aGljaCBtZWFu cyB0aGF0CisJICogZnJvbSBub3cgb24sIHdlIGNhbiBub3QgaGFuZGxlIGFuIGV4Y2VwdGlvbiB1 cCB0byAic3JldCIKKwkgKi8KKwljc3J3IENTUl9TVEFUVVMsIHMwCisJYm5leiB0MSwgMWYKIAog CS8qIFNhdmUgdW53b3VuZCBrZXJuZWwgc3RhY2sgcG9pbnRlciBpbiB0aHJlYWRfaW5mbyAqLwot CWFkZGkgczAsIHNwLCBQVF9TSVpFX09OX1NUQUNLCi0JUkVHX1MgczAsIFRBU0tfVElfS0VSTkVM X1NQKHRwKQorCWFkZGkgdDEsIHNwLCBQVF9TSVpFX09OX1NUQUNLCisJUkVHX1MgdDEsIFRBU0tf VElfS0VSTkVMX1NQKHRwKQogCiAJLyogU2F2ZSB0aGUga2VybmVsIHNoYWRvdyBjYWxsIHN0YWNr IHBvaW50ZXIgKi8KIAlzY3Nfc2F2ZV9jdXJyZW50CkBAIC0xNDIsMTEgKzE1Niw2IEBAIFNZTV9D T0RFX1NUQVJUX05PQUxJR04ocmV0X2Zyb21fZXhjZXB0aW9uKQogCSAqLwogCWNzcncgQ1NSX1ND UkFUQ0gsIHRwCiAxOgotI2lmZGVmIENPTkZJR19SSVNDVl9JU0FfVl9QUkVFTVBUSVZFCi0JbW92 ZSBhMCwgc3AKLQljYWxsIHJpc2N2X3ZfY29udGV4dF9uZXN0aW5nX2VuZAotI2VuZGlmCi0JUkVH X0wgYTAsIFBUX1NUQVRVUyhzcCkKIAkvKgogCSAqIFRoZSBjdXJyZW50IGxvYWQgcmVzZXJ2YXRp b24gaXMgZWZmZWN0aXZlbHkgcGFydCBvZiB0aGUgcHJvY2Vzc29yJ3MKIAkgKiBzdGF0ZSwgaW4g dGhlIHNlbnNlIHRoYXQgbG9hZCByZXNlcnZhdGlvbnMgY2Fubm90IGJlIHNoYXJlZCBiZXR3ZWVu CkBAIC0xNjcsNyArMTc2LDYgQEAgU1lNX0NPREVfU1RBUlRfTk9BTElHTihyZXRfZnJvbV9leGNl cHRpb24pCiAJUkVHX0wgIGEyLCBQVF9FUEMoc3ApCiAJUkVHX1NDIHgwLCBhMiwgUFRfRVBDKHNw KQogCi0JY3NydyBDU1JfU1RBVFVTLCBhMAogCWNzcncgQ1NSX0VQQywgYTIKIAogCVJFR19MIHgx LCAgUFRfUkEoc3ApCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMgYi9hcmNo L3Jpc2N2L2tlcm5lbC9oZWFkLlMKaW5kZXggNDIzNmE2OWMzNWNiLi5iY2MyYjY2NzhmNDAgMTAw NjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3Jpc2N2L2tlcm5l bC9oZWFkLlMKQEAgLTEwNiw2ICsxMDYsMTAgQEAgcmVsb2NhdGVfZW5hYmxlX21tdToKIAljc3J3 IENTUl9TQVRQLCBhMAogLmFsaWduIDIKIDE6CisJLyogQSB0cmFwIHBvdGVudGlhbGx5IHNldCB0 aGUgU0RUIGZsYWcsIGNsZWFyIGl0ICovCisJbGkgdDAsIFNSX1NEVAorCWNzcmMgQ1NSX1NUQVRV UywgdDAKKwogCS8qIFNldCB0cmFwIHZlY3RvciB0byBzcGluIGZvcmV2ZXIgdG8gaGVscCBkZWJ1 ZyAqLwogCWxhIGEwLCAuTHNlY29uZGFyeV9wYXJrCiAJY3NydyBDU1JfVFZFQywgYTAKZGlmZiAt LWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NzZV9lbnRyeS5TIGIvYXJjaC9yaXNjdi9rZXJuZWwv c3NlX2VudHJ5LlMKaW5kZXggZDNjNzI4NmYzMzcyLi5lNjlkMzg2ZTM2ZTkgMTAwNjQ0Ci0tLSBh L2FyY2gvcmlzY3Yva2VybmVsL3NzZV9lbnRyeS5TCisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3Nz ZV9lbnRyeS5TCkBAIC02NSw3ICs2NSw3IEBAIFNZTV9DT0RFX1NUQVJUKGhhbmRsZV9zc2UpCiAJ UkVHX1MgYTQsIFBUX1NQKHNwKQogCiAJLyogRGlzYWJsZSB1c2VyIG1lbW9yeSBhY2Nlc3MgYW5k IGZsb2F0aW5nL3ZlY3RvciBjb21wdXRpbmcgKi8KLQlsaSB0MCwgU1JfU1VNIHwgU1JfRlNfVlMK KwlsaSB0MCwgU1JfU1VNIHwgU1JfRlNfVlMgfCBTUl9TRFQKIAljc3JjIENTUl9TVEFUVVMsIHQw CiAKIAlsb2FkX2dsb2JhbF9wb2ludGVyCkBAIC0xMzEsOCArMTMxLDggQEAgU1lNX0NPREVfU1RB UlQoaGFuZGxlX3NzZSkKIAogU1lNX0lOTkVSX0xBQkVMKHJldF9mcm9tX3NzZSwgU1lNX0xfR0xP QkFMKQogCS8qIFJlc3RvcmUgc2F2ZWQgQ1NScyAqLwotCWNzcncgQ1NSX1NTQ1JBVENILCBzNAog CWNzcncgQ1NSX1NTVEFUVVMsIHM1CisJY3NydyBDU1JfU1NDUkFUQ0gsIHM0CiAKICNpZmRlZiBD T05GSUdfRlJBTUVfUE9JTlRFUgogCS8qIEZyYW1lIHBvaW50ZXIgaXMgY3JlYXRlZCBvbmx5IHdo ZW4ga2VybmVsIGlzIGludGVycnVwdGVkICovCi0tIAoyLjQzLjAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QK bGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D045516C436 for ; Thu, 18 Apr 2024 14:27:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713450437; cv=none; b=XuJFCMZ2NcTVo20cWBn+jBLo9spU3fzGX7OUvwKhuwsWFBFbeJH35kTKruP3ewFhE6ox5FQyWaxDREN2jIh1mD1Y05gh8eTG5hS2YaX5qyU+60kgp8Cn+lgpNix3qUHDoWpbnnutWd5d2UtznijlgOgdnqODeTbpgD7UrGN7uNo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713450437; c=relaxed/simple; bh=n26bGGJNXdZkz4TRas8Z8PR3vR2k7ylQj5DGZP8ph5k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RSUunUcpJ4DZFjuedkAt5jAdB2jYeSK60EV8fPcxNp7u7JimwPlM5v9b2CLwHF7sUdA6k8WzJs0Jol4agh/QmlOX3HN0NF+PNH1jJpdUNQ/tn8vt63IANKsWAOh1Qu7kVVOUXz/m9NTU0XiAkPwGOXehe6rO630ybyRF306Zp6Y= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=K9MDlXGl; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="K9MDlXGl" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-345606e8ac0so124142f8f.0 for ; Thu, 18 Apr 2024 07:27:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1713450434; x=1714055234; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m/abrO6aRdYSwYEiniLJTSjXDsMHpzNjwZUI0bHiQJI=; b=K9MDlXGlRteIDLHFQYLS22vAZQ5DJHbVUSZgobSzh6f221PtEQGNsE2BT0kn379ra5 hMpM3gr/09Kmm7VCKfm96Q1IFHKN9RKg+gmb7kfMq9D5qYHPF9HJk2EQK+6r3In3Milq MnMtNX791XrIOMBzAON8dVEd+7uwDwhCydWdNGEvVkuHoP4PNSZP85kWkTie96snTmpP x/fmMsJNk8obEIbeb7IOWKP5M22NmFVB7PGey4f+WL/QRMOBYhFVzf4WQkn+oZJEb9G7 9GXc6qogXtAHbOdVbz9ChKbBmRQVOkwC1WO3DkM9DyVeGCRv1oA12e4GxCKqsRBPl32T VTgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713450434; x=1714055234; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=m/abrO6aRdYSwYEiniLJTSjXDsMHpzNjwZUI0bHiQJI=; b=qUJCfhDkK17yZGmaoNKPpJCST1RUjC7MA22IquRDNyrtWq6d0turw2WkFWViAoCVRh 4xBnc1MnwTKu4ZBvBxpbPMlETVZzm94IS+3nCABCjCXd8TfMqOcIXiodCKQjyhS7B0wX jBS7IyQkG86ZWivx+q0VdaOx3l6ZliHIemE8T2GrlUO9si0VDKWgru8zf336w0Sqargb ejcoxzDJGRoasf/Ij8ncbeu5/Aoo+CASOcBA8d2+76ZDNUBiihVIRaR3ndD9SM/c09wZ sP/trdFM0J+RaeY0BrO4eSdoD5kmSQWUd8/MJeDo0/6Uf19I0yQKbNo5hj5d7SAAeGUT eLxg== X-Forwarded-Encrypted: i=1; AJvYcCXBc3oC4RN2435ZiH5bCJU8+EU2K6v7/m5bov/BbD6N/CrMQbgy34NO8QUPodDM/Zsu8K34BZQzkFizk3h1zyc9gHVQ3Tw+N5aLBQ== X-Gm-Message-State: AOJu0Yx52o+xohQLaE0Bato9FIa32NjOpH/UybMtwlJSnmcI3YXgbOhC mtB8bP5QWwlV/2aqy5s4mdadkkCYj2zqHfVrLNI6hiH8Mt2pKiMD9PhARYpcFAQ= X-Google-Smtp-Source: AGHT+IEkGDIAezbeIVZmmrT9rlRCJjcxopA8THm4S/C75RtVNLUvN35X394KK2J0KQ/iPXZ6II3FvA== X-Received: by 2002:a05:600c:4f8a:b0:418:f770:ba0 with SMTP id n10-20020a05600c4f8a00b00418f7700ba0mr505923wmq.0.1713450434242; Thu, 18 Apr 2024 07:27:14 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:7b64:4d1d:16d8:e38b]) by smtp.gmail.com with ESMTPSA id v10-20020a05600c470a00b00418a386c059sm2873645wmo.42.2024.04.18.07.27.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 07:27:13 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Anup Patel , Atish Patra Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, Ved Shanbhogue Subject: [RFC PATCH 4/7] riscv: handle Ssdbltrp mstatus SDT bit Date: Thu, 18 Apr 2024 16:26:43 +0200 Message-ID: <20240418142701.1493091-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240418142701.1493091-1-cleger@rivosinc.com> References: <20240418142701.1493091-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When Ssdbltrp is enabled, we must take care of clearing SDT after sensitive phases are over to avoid generating a double trap. This is mainly about exceptions handling so clear SDT once we have saved enough information (critical CSRs) but also clears it during SATP mode detection which generates an "inline" trap and thus sets SDT implicitely. Signed-off-by: Clément Léger --- arch/riscv/include/asm/csr.h | 1 + arch/riscv/kernel/entry.S | 52 ++++++++++++++++++++--------------- arch/riscv/kernel/head.S | 4 +++ arch/riscv/kernel/sse_entry.S | 4 +-- 4 files changed, 37 insertions(+), 24 deletions(-) diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h index 5528159b3d5d..905cdf894a57 100644 --- a/arch/riscv/include/asm/csr.h +++ b/arch/riscv/include/asm/csr.h @@ -17,6 +17,7 @@ #define SR_SPP _AC(0x00000100, UL) /* Previously Supervisor */ #define SR_MPP _AC(0x00001800, UL) /* Previously Machine */ #define SR_SUM _AC(0x00040000, UL) /* Supervisor User Memory Access */ +#define SR_SDT _AC(0x01000000, UL) /* Supervisor Double Trap */ #define SR_FS _AC(0x00006000, UL) /* Floating-point Status */ #define SR_FS_OFF _AC(0x00000000, UL) diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S index 1591e0781569..07da91080839 100644 --- a/arch/riscv/kernel/entry.S +++ b/arch/riscv/kernel/entry.S @@ -49,23 +49,12 @@ SYM_CODE_START(handle_exception) REG_S x5, PT_T0(sp) save_from_x6_to_x31 - /* - * Disable user-mode memory access as it should only be set in the - * actual user copy routines. - * - * Disable the FPU/Vector to detect illegal usage of floating point - * or vector in kernel space. - */ - li t0, SR_SUM | SR_FS_VS - REG_L s0, TASK_TI_USER_SP(tp) - csrrc s1, CSR_STATUS, t0 csrr s2, CSR_EPC csrr s3, CSR_TVAL csrr s4, CSR_CAUSE csrr s5, CSR_SCRATCH REG_S s0, PT_SP(sp) - REG_S s1, PT_STATUS(sp) REG_S s2, PT_EPC(sp) REG_S s3, PT_BADADDR(sp) REG_S s4, PT_CAUSE(sp) @@ -77,6 +66,21 @@ SYM_CODE_START(handle_exception) */ csrw CSR_SCRATCH, x0 + /* + * Disable user-mode memory access as it should only be set in the + * actual user copy routines. + * + * Disable the FPU/Vector to detect illegal usage of floating point + * or vector in kernel space. + * + * Clear supervisor double trap bit as all trap context is saved and we + * can handle another one + */ + li t0, SR_SUM | SR_FS_VS | SR_SDT + + csrrc s1, CSR_STATUS, t0 + REG_S s1, PT_STATUS(sp) + /* Load the global pointer */ load_global_pointer @@ -123,15 +127,25 @@ SYM_CODE_START_NOALIGN(ret_from_exception) #ifdef CONFIG_RISCV_M_MODE /* the MPP value is too large to be used as an immediate arg for addi */ li t0, SR_MPP - and s0, s0, t0 + and t1, s0, t0 #else - andi s0, s0, SR_SPP + andi t1, s0, SR_SPP +#endif + +#ifdef CONFIG_RISCV_ISA_V_PREEMPTIVE + move a0, sp + call riscv_v_context_nesting_end #endif - bnez s0, 1f + /* + * Restore STATUS now to set supervisor double trap bit which means that + * from now on, we can not handle an exception up to "sret" + */ + csrw CSR_STATUS, s0 + bnez t1, 1f /* Save unwound kernel stack pointer in thread_info */ - addi s0, sp, PT_SIZE_ON_STACK - REG_S s0, TASK_TI_KERNEL_SP(tp) + addi t1, sp, PT_SIZE_ON_STACK + REG_S t1, TASK_TI_KERNEL_SP(tp) /* Save the kernel shadow call stack pointer */ scs_save_current @@ -142,11 +156,6 @@ SYM_CODE_START_NOALIGN(ret_from_exception) */ csrw CSR_SCRATCH, tp 1: -#ifdef CONFIG_RISCV_ISA_V_PREEMPTIVE - move a0, sp - call riscv_v_context_nesting_end -#endif - REG_L a0, PT_STATUS(sp) /* * The current load reservation is effectively part of the processor's * state, in the sense that load reservations cannot be shared between @@ -167,7 +176,6 @@ SYM_CODE_START_NOALIGN(ret_from_exception) REG_L a2, PT_EPC(sp) REG_SC x0, a2, PT_EPC(sp) - csrw CSR_STATUS, a0 csrw CSR_EPC, a2 REG_L x1, PT_RA(sp) diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S index 4236a69c35cb..bcc2b6678f40 100644 --- a/arch/riscv/kernel/head.S +++ b/arch/riscv/kernel/head.S @@ -106,6 +106,10 @@ relocate_enable_mmu: csrw CSR_SATP, a0 .align 2 1: + /* A trap potentially set the SDT flag, clear it */ + li t0, SR_SDT + csrc CSR_STATUS, t0 + /* Set trap vector to spin forever to help debug */ la a0, .Lsecondary_park csrw CSR_TVEC, a0 diff --git a/arch/riscv/kernel/sse_entry.S b/arch/riscv/kernel/sse_entry.S index d3c7286f3372..e69d386e36e9 100644 --- a/arch/riscv/kernel/sse_entry.S +++ b/arch/riscv/kernel/sse_entry.S @@ -65,7 +65,7 @@ SYM_CODE_START(handle_sse) REG_S a4, PT_SP(sp) /* Disable user memory access and floating/vector computing */ - li t0, SR_SUM | SR_FS_VS + li t0, SR_SUM | SR_FS_VS | SR_SDT csrc CSR_STATUS, t0 load_global_pointer @@ -131,8 +131,8 @@ SYM_CODE_START(handle_sse) SYM_INNER_LABEL(ret_from_sse, SYM_L_GLOBAL) /* Restore saved CSRs */ - csrw CSR_SSCRATCH, s4 csrw CSR_SSTATUS, s5 + csrw CSR_SSCRATCH, s4 #ifdef CONFIG_FRAME_POINTER /* Frame pointer is created only when kernel is interrupted */ -- 2.43.0