From nobody Sun Feb 8 00:50:23 2026 Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) (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 71A432DC345 for ; Tue, 7 Oct 2025 11:58:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838330; cv=none; b=prsqbOl30uu3S4Z32C26wCEvBqXYp9PaGIEESPP/SyBncdXnovwyVFwgyRcZgmayxw4W9qm7gPEbGZK5HQrZIBpTnD8dMF8E34J7ILblUiGkD6L60NLXAyeglkhsMVSg50woaxdapPStej3gJ8zm1ETSCHLHXPUsHlESqBkx6xc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838330; c=relaxed/simple; bh=mcJVA40xehln8g/vmGo6D124qbuR9E2HuyKpj9/eQaI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yhsb7iuv8C2cN8novBjDwrUEE/XATannYDrglAEhU/23krmmiwPSGoIWDCoqNK2ooWIMf41T+9wEVpvox0hbrN3ChAXoN/1aBNhx4QRAIOcpfPFUJfPXBbuIkT7brwAJoKjZoixrYCUEi9wcE4ur4M37fCNsoLeQnNKEImTeJFk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=la10+bkL; arc=none smtp.client-ip=209.85.167.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="la10+bkL" Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-57992ba129eso7106845e87.3 for ; Tue, 07 Oct 2025 04:58:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759838326; x=1760443126; 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=1hkQNqMVuVavuueLTx2UspShKdK9McUVzuMp7MeB9bE=; b=la10+bkLN+mdwg75GE63u9WUmUYYX3ZEHmh0zGjfQji6476Z0eChRLgAH69P8g/u+D pQmjB74/L/hSQzhyB7FFaUEaiYCXkD26BduPa1HEARsm0xVSz9PuwAOGtMXkXQG9fQH8 ygmvlbABTYspCUuBFwZS54lX3TDSZ90X5ae4k3qBxq7/O50B372gEYerBDbS01M2nsMy awVIPaADIwMs3tzqBrEwmVWhQpy8+wdm0JJ6BWagRgkvGvLyeEV+qsgYmgFSQiNbc5pu yVxL0CNElj13b4uMq4a1sfGA2bder/edYYnCz35sjWjC87BgMUpRj7oQPHwAml3nxpg5 KExw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759838326; x=1760443126; 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=1hkQNqMVuVavuueLTx2UspShKdK9McUVzuMp7MeB9bE=; b=I7dxS/OvGOiOdbTJeEHRh/Pwuta7z1qcdCvT2J00+YmwDUrD8UxRERz19JPgfQGko9 unWLYCSm90gOlwHeh9AX5EGt3PO6ViCoF3uRN75YVEPWdLX2K2JtYoQIKZn8gVTrU3en 0rMpHMjNkUxscumAEdxZQRT8lNbA57gNMSKsoNxyjIOgn35iWUcZqjEMTnLhWjUK9HNS cprZO5VBEIM3DSiHDotvaCo6NkCRFilSP7pc33M/icKMqLNe60UUCSM8mTPS2Kg3es8n yRjQkE5D0XBxTfdfFVKGXt34tpTTJImYesHAEX5/RMZlUqpQYnv+x+7LurYhMv7MvjoB sn6w== X-Gm-Message-State: AOJu0Yyw+rj5rPZnGajUVsNgzDP5DPCxifW1KK/iWeCmAovKvPKguUb1 pMNlcCvjv3XH4I6Kh5bubO2ux4YnDdrazqSbqRL7px7NZYOoMPpzxAfe X-Gm-Gg: ASbGncsilUBKdkB+B+L7pBiF6+IVgEaEV6BeRpM4DBlYnDgwSLrhqesiRQxtdzYvPCh 3FeapdmTuW8eB4yvp+DkWcYXaJdoKseZ1J54pV7UPlO2FJuL2v17MO/txNQ2DZrVVagRTaVRBYN y74KwddGygosycmXz09la/g8C6UHoSFR7oEhmiPoZm1dvNhLpAPcD9DOJYFOS1+RVNc3xLcoa2S /QeZan8uBpN1opEYuLt3S6ZRtqc1VnIPMQb98hijo5OVhdzvi/e9wtwwxyH0njPY/WNakUepn3f WehUHxThD0qKr5/08rjtEF49VjEzvOdP0F2u56CW3nK3ZiYvZ8uDiE62bOlY4BJ+tKAsZ5x+t+n SsnS1UeCzpdObXxDWCFdnia/4VRLZ/hFqNIW1sA== X-Google-Smtp-Source: AGHT+IG37rD+PkxghSu66eoS6ldRFOZQ/XHIZ2H3lGBdSNiBQTjR1sXUQKZr50hfMoazfvibAaCTuQ== X-Received: by 2002:a05:6512:3e02:b0:58a:f865:d7a0 with SMTP id 2adb3069b0e04-58cbb62b934mr5386340e87.35.1759838325227; Tue, 07 Oct 2025 04:58:45 -0700 (PDT) Received: from curiosity ([5.188.167.4]) by smtp.googlemail.com with ESMTPSA id 2adb3069b0e04-58b011a8941sm6043339e87.114.2025.10.07.04.58.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:58:44 -0700 (PDT) From: Sergey Matyukevich To: linux-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Oleg Nesterov , Shuah Khan , Jisheng Zhang , Thomas Gleixner , Thomas Huth , Charlie Jenkins , Andy Chiu , Han Gao , Samuel Holland , Nam Cao , Joel Granados , =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Sergey Matyukevich Subject: [PATCH v2 1/6] selftests: riscv: test ptrace vector interface Date: Tue, 7 Oct 2025 14:58:17 +0300 Message-ID: <20251007115840.2320557-2-geomatsi@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251007115840.2320557-1-geomatsi@gmail.com> References: <20251007115840.2320557-1-geomatsi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a test case to check ptrace behavior in the case when vector extension is supported by the system, but vector context is not yet enabled for the traced process. Signed-off-by: Sergey Matyukevich --- .../testing/selftests/riscv/vector/.gitignore | 1 + tools/testing/selftests/riscv/vector/Makefile | 5 +- .../testing/selftests/riscv/vector/v_ptrace.c | 87 +++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/riscv/vector/v_ptrace.c diff --git a/tools/testing/selftests/riscv/vector/.gitignore b/tools/testin= g/selftests/riscv/vector/.gitignore index 7d9c87cd0649..d21c03c3ee0e 100644 --- a/tools/testing/selftests/riscv/vector/.gitignore +++ b/tools/testing/selftests/riscv/vector/.gitignore @@ -2,3 +2,4 @@ vstate_exec_nolibc vstate_prctl v_initval v_exec_initval_nolibc +v_ptrace diff --git a/tools/testing/selftests/riscv/vector/Makefile b/tools/testing/= selftests/riscv/vector/Makefile index 6f7497f4e7b3..c14ad127e7fb 100644 --- a/tools/testing/selftests/riscv/vector/Makefile +++ b/tools/testing/selftests/riscv/vector/Makefile @@ -2,7 +2,7 @@ # Copyright (C) 2021 ARM Limited # Originally tools/testing/arm64/abi/Makefile =20 -TEST_GEN_PROGS :=3D v_initval vstate_prctl +TEST_GEN_PROGS :=3D v_initval vstate_prctl v_ptrace TEST_GEN_PROGS_EXTENDED :=3D vstate_exec_nolibc v_exec_initval_nolibc =20 include ../../lib.mk @@ -26,3 +26,6 @@ $(OUTPUT)/v_initval: v_initval.c $(OUTPUT)/sys_hwprobe.o = $(OUTPUT)/v_helpers.o $(OUTPUT)/v_exec_initval_nolibc: v_exec_initval_nolibc.c $(CC) -nostdlib -static -include ../../../../include/nolibc/nolibc.h \ -Wall $(CFLAGS) $(LDFLAGS) $^ -o $@ -lgcc + +$(OUTPUT)/v_ptrace: v_ptrace.c $(OUTPUT)/sys_hwprobe.o $(OUTPUT)/v_helpers= .o + $(CC) -static -o$@ $(CFLAGS) $(LDFLAGS) $^ diff --git a/tools/testing/selftests/riscv/vector/v_ptrace.c b/tools/testin= g/selftests/riscv/vector/v_ptrace.c new file mode 100644 index 000000000000..6a8d56a5c4f4 --- /dev/null +++ b/tools/testing/selftests/riscv/vector/v_ptrace.c @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../../kselftest_harness.h" +#include "v_helpers.h" + +volatile unsigned long chld_lock; + +TEST(ptrace_rvv_not_enabled) +{ + pid_t pid; + + if (!is_vector_supported()) + SKIP(return, "Vector not supported"); + + chld_lock =3D 1; + + pid =3D fork(); + + ASSERT_LE(0, pid) + TH_LOG("fork: %m"); + + if (pid =3D=3D 0) { + while (chld_lock =3D=3D 1) + asm volatile("" : : "g"(chld_lock) : "memory"); + + asm volatile ("ebreak" : : : ); + } else { + struct __riscv_v_regset_state *regset_data; + unsigned long vlenb; + size_t regset_size; + struct iovec iov; + int status; + int ret; + + asm volatile("csrr %[vlenb], vlenb" : [vlenb] "=3Dr"(vlenb)); + + ASSERT_GT(vlenb, 0) + TH_LOG("vlenb is not valid: %lu\n", vlenb); + + /* attach */ + + ASSERT_EQ(0, ptrace(PTRACE_ATTACH, pid, NULL, NULL)); + ASSERT_EQ(pid, waitpid(pid, &status, 0)); + ASSERT_TRUE(WIFSTOPPED(status)); + + /* unlock */ + + ASSERT_EQ(0, ptrace(PTRACE_POKEDATA, pid, &chld_lock, 0)); + + /* resume and wait for ebreak */ + + ASSERT_EQ(0, ptrace(PTRACE_CONT, pid, NULL, NULL)); + ASSERT_EQ(pid, waitpid(pid, &status, 0)); + ASSERT_TRUE(WIFSTOPPED(status)); + + /* try to read vector registers from the tracee */ + + regset_size =3D sizeof(*regset_data) + vlenb * 32; + regset_data =3D calloc(1, regset_size); + + iov.iov_base =3D regset_data; + iov.iov_len =3D regset_size; + + /* V extension is available, but not yet enabled for the tracee */ + + errno =3D 0; + ret =3D ptrace(PTRACE_GETREGSET, pid, NT_RISCV_VECTOR, &iov); + ASSERT_EQ(ENODATA, errno); + ASSERT_EQ(-1, ret); + + /* cleanup */ + + ASSERT_EQ(0, kill(pid, SIGKILL)); + } +} + +TEST_HARNESS_MAIN --=20 2.51.0 From nobody Sun Feb 8 00:50:23 2026 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.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 734182DC336 for ; Tue, 7 Oct 2025 11:58:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838332; cv=none; b=leHhPbmjVBWhjzVJ9DPX/eu8RRnAJ47/XcsZrKcsztO+w9O8ZcoUK/FS7zEX01OdWFDuexcjBCgzELQGXxXvTftf+upqK6vAYbwXS9L9lCTBmlBF+HIUZzlktbIUfyxuDId6v6SHb4syoDcCYy0J/VYDTwox97Ov4lHpNlwYy64= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838332; c=relaxed/simple; bh=gmEQJf5Bo7Ywu22iwV79iM0TcDkDXIsr2veWZZhyazc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hZJ/lxFx3m+n+oM71ibgwcorepG42DBM/cSAxxtFfnwk9bN7EA40cTBr7cJ04bbH7FZHOX7BdGdZluPJaZTr36VNHk7j/le9Etkih7rQkl0VW66flcSc+x+M3jCCPBWpmwv3B27W1SmmG4ZHdDDYp5VuHqzXXJzlSx+FV95z8v0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eo+SCg32; arc=none smtp.client-ip=209.85.167.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eo+SCg32" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-58af7f8b79dso6701904e87.3 for ; Tue, 07 Oct 2025 04:58:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759838327; x=1760443127; 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=eN/m6BO/PR+KoZSa3zwPl5m9cqExBgUP+sv/+YAYIuM=; b=eo+SCg32Ai4gE6lg9gVQbimabJtPkAgLcBso9sI3L3wjrofRj3h5BsKKuZ4zF9SDsW RCY82MlJOwZUAkyryZvY8uRJG6rUpjU4V1RRgva/2VNZj9DABsN+jMpt219FJCrKTDlT NsCoA5G3kn71blotUssjypZXyM9NxL7yE5ZELA/bFTpuRO9VRAzNcOMUy+GRmiEwHUla 4pvEMtpWzVX8r2rGMRowzVy6/d64DluNwab5cgTbkOodPJSk9Jk8WfEjjfNyfKU/skOg qW6pbzp3DIkfDVc3b/KpJ0meZ6IlS3A/ZI1oL6gaPi/4hnjH69zZv7MfgKk7AIBr1wtA F6xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759838327; x=1760443127; 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=eN/m6BO/PR+KoZSa3zwPl5m9cqExBgUP+sv/+YAYIuM=; b=UkxmvMpBLVjGM1E//ZVqyZuS8y0CFpkLc81wWC9AS+LNZw8jX3LYnjoDBhbmbHuReV IkemZ8toI2OWEB7SiQRsq4XO77AN0/N2QDZ/zPtsIvE4BLcuRe9PbHaHA7KZxYChic9Y 12ppSdQMwZvaRYQxMKgiATkCyMvEmgMknGKUEhaIBsYUz1QFh1rNx9O8lS0lMc6Yw2GQ xb6OlJxoe1O8h8hVxhKXxKpXo99ptopXdgeTnmZ/et/zmkSM2FU29pmh5NN/OUjfk2t1 GZt9Odw779+FWl86wKuwPm8gpXATKePfM2iI8mHLnotE0qXr6zAw54dU4+tnf1JQiehD mh6w== X-Gm-Message-State: AOJu0YwjaSB1bmbmKtEyk/ry1kqsJDokWxZdBjfkjomOh+hhs84ifu91 ksEl2ys2q1O7JJRjESKQwyym7xlXXrs9SVYsoTklvXI+qjJuvkL+N9l0Kb3Ep+iK X-Gm-Gg: ASbGncu7nXQp0robKiYfut2zqe2rRpghPFvF5oFwoP0UQoQU1KLlR6YkaEAifj61Ux+ PppktPdF0xdiLhuBSleDGDmrq/DmBw3Vpuk4rA4gdQTLd6APF813OrFpPaFPHxiZEpIXT3G23Jt C+ihGJzeeUXj6Ks7r4IFw771gAhpHEQ/GvkODJMmhX4i9qgaWl5UUGWV5IRJHt5uDyHkiePoV5E pxt2Xj1QKgW4mq0251FYqpFpHgdbT8uyMmCgvTqUpC35jaP8AiDspNGcZ1aY7EutazCh/ozqc9i KiK++goxiAXwA4uO4B6+txM9hLUMDfzwoGErrDJq3o8t9Oc9ibtquSH8T2E0NTb7SBp2m4F6hEQ 7zJQd5wgG8slM+AyV9qjs4xwra6+b6BhPZyMXSA== X-Google-Smtp-Source: AGHT+IGVHCBDB2QZW+h1zkAX/sQcZXgkJGGPhYHu9ZuoYVYoNE7EgWv7rs3lrzmRXlTtUhHrJYj2Sg== X-Received: by 2002:a05:6512:10d0:b0:57b:8675:e430 with SMTP id 2adb3069b0e04-58cb9a3907cmr4186418e87.13.1759838327224; Tue, 07 Oct 2025 04:58:47 -0700 (PDT) Received: from curiosity ([5.188.167.4]) by smtp.googlemail.com with ESMTPSA id 2adb3069b0e04-58b011a8941sm6043339e87.114.2025.10.07.04.58.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:58:46 -0700 (PDT) From: Sergey Matyukevich To: linux-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Oleg Nesterov , Shuah Khan , Jisheng Zhang , Thomas Gleixner , Thomas Huth , Charlie Jenkins , Andy Chiu , Han Gao , Samuel Holland , Nam Cao , Joel Granados , =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Sergey Matyukevich , Ilya Mamay Subject: [PATCH v2 2/6] riscv: ptrace: return ENODATA for inactive vector extension Date: Tue, 7 Oct 2025 14:58:18 +0300 Message-ID: <20251007115840.2320557-3-geomatsi@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251007115840.2320557-1-geomatsi@gmail.com> References: <20251007115840.2320557-1-geomatsi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ilya Mamay Currently, ptrace returns EINVAL when the vector extension is supported but not yet activated for the traced process. This error code is inappropriate since all the ptrace arguments are valid. Debug tools like gdbserver expect ENODATA when the requested register set is not active, e.g. see [1]. This expectation seems to be more appropriate, so modify the vector ptrace implementation to return: - EINVAL when V extension is not supported - ENODATA when V extension is supported but not active [1] https://github.com/bminor/binutils-gdb/blob/637f25e88675fa47e47f9cc5e2c= f37384836b8a2/gdbserver/linux-low.cc#L5020 Signed-off-by: Ilya Mamay --- arch/riscv/kernel/ptrace.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/riscv/kernel/ptrace.c b/arch/riscv/kernel/ptrace.c index 8e86305831ea..906cf1197edc 100644 --- a/arch/riscv/kernel/ptrace.c +++ b/arch/riscv/kernel/ptrace.c @@ -95,9 +95,12 @@ static int riscv_vr_get(struct task_struct *target, struct __riscv_v_ext_state *vstate =3D &target->thread.vstate; struct __riscv_v_regset_state ptrace_vstate; =20 - if (!riscv_v_vstate_query(task_pt_regs(target))) + if (!has_vector()) return -EINVAL; =20 + if (!riscv_v_vstate_query(task_pt_regs(target))) + return -ENODATA; + /* * Ensure the vector registers have been saved to the memory before * copying them to membuf. @@ -130,9 +133,12 @@ static int riscv_vr_set(struct task_struct *target, struct __riscv_v_ext_state *vstate =3D &target->thread.vstate; struct __riscv_v_regset_state ptrace_vstate; =20 - if (!riscv_v_vstate_query(task_pt_regs(target))) + if (!has_vector()) return -EINVAL; =20 + if (!riscv_v_vstate_query(task_pt_regs(target))) + return -ENODATA; + /* Copy rest of the vstate except datap */ ret =3D user_regset_copyin(&pos, &count, &kbuf, &ubuf, &ptrace_vstate, 0, sizeof(struct __riscv_v_regset_state)); --=20 2.51.0 From nobody Sun Feb 8 00:50:23 2026 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 3CED82DCBF7 for ; Tue, 7 Oct 2025 11:58:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838332; cv=none; b=dIJhufe58N8fDUNO/JSx9HszctE/UFqczqFXbkvwjxEA6gt/hpIcBxwhJM1opGTVmkF7uzM4dg0HXhul3IVf5LigtaMMt4z8Y1OKjj/zKTJDjBRnqmE9jj8yiOP3itX5TqOcGUbFTz0Fv0Um/9AznBUkNuAkd0n+56NHHRTrPjw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838332; c=relaxed/simple; bh=zd5hjY5wrx8YKzPB1AK38z5RyQ2MEvFwF1ylhr4VaWM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C06aIeJ5ryAT6JHKfjmQJwvS7y6qR7WfcZcYOv0izjHSHlWRuB8ZdKSmZqhMrMOOHwiYl9L0/CZL0Ta3ennzYZlaybnnYbLDn3GAc/YAJdfO1SH+w23GyC7qhouVpJ0qSPGEHchOqzMqLTnuDb1QbrSDHFBJpSlxuKAKti2l8Bs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZnLh4ocE; arc=none smtp.client-ip=209.85.167.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZnLh4ocE" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-57da66e0dc9so6093561e87.0 for ; Tue, 07 Oct 2025 04:58:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759838329; x=1760443129; 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=Bz5jQRJFoVK4+PdvzI4TMgPHFnuOpO8O5iQSmwwrcRs=; b=ZnLh4ocEsiWx9HnYpFno2Xrtw5XgS0zT+0zwbCC53FLz/tTJSfnHxsgqlqIv4egwua zOPV38Ls7RTiT2J888hmsjvx1D8HTuFSuueu04TLQM2KO27f2Hfch7s/RxLCUaMSashX YLPgye9VO4Y77JN7cNFXNYCWB7KhCK3ZswRdeUB1n6ni2bMJQkLQ0bbPTXpweAMnVrOV R6B63K0BsT2d7vSulQLNxhUrzwkcnoYc3RpariUDXab4fpiT2LZ42+CcAiMBieYs6tnn eLP575srDcrRiMpocO2iVf+vDYhvdLaE1tS2xMhv4dXzYgJ3c/uj1IWJjCDYRHO/+tSp uaSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759838329; x=1760443129; 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=Bz5jQRJFoVK4+PdvzI4TMgPHFnuOpO8O5iQSmwwrcRs=; b=v0tfAZGMSPdaD6uq4A5bs1YDX5aKtjwtco8YMQ93Kj1Zy380EAuXgast54dOk4ZUbW cKT5jDqk100knMjwssRIdnM7jPmc2VB/dNVZ5Kf0OIzkpQ1RHbUEHNQiSEyRjHS5zASY 35paFohnklSWkL3CMEmIHSxfXkJh5tfQf67p4nIIyEP50pQsXM31BVeSf2dFTPvZCLcy z3EiIcmcXvcZSyBiPHDYZiGv+xmz2SCByuvtoj120FJLsNt8rLRC0gq/WZqbnvwWTSjK /DQDB18TiHxyZpdyJz9/EZqNVjNdCM+3YSTidj3cq/+O+S31AtCR07yrHcQEKA91+52u HS5g== X-Gm-Message-State: AOJu0YyPv9PtSpdHZoY5pGCvOY3z+f9keovRr1Eaaz+bTgiQOANuia+Y mhSMYfO6jwyPEteJGLoinuWFkBofwfPwWomdeDFMtmoOMThhpEeCkHtW X-Gm-Gg: ASbGncuvWywVRAF23KUtcUQclt+LQr9aGTH3nB8Azs1wtDT/YAYrhrd4jKwTjpCNcK0 QWi+Vgz8WShpVoNwopaxSnILAzpDMpfKKdyerjXiO2okQl4hgksc6v2PyOZBthV8nCTZo8tUgik xliQEw/HWFQ5eSfmNW2iYlYpyg1yvkbhR0C4s3NK+8Ut/c0ui7YHlxqbsULNhxLWclPsuI+/Ps7 bXVYWfCVts5g06iS2aiEGkhnR2X45mMogjHDnRjfbqGo6oV/KpYMTEj+42/RldZ+scNPOHGtklZ +6FsXFJKUYvuZDg2CBtNRka4GeD4yKgjLOSVTnn7PiBhBM00M7YOvnDI8HbpV2ShSCEA9V5OzRR rTdiTAlOVZg6j3IMXyRF9KM6rZypky/AcPmjrVQ== X-Google-Smtp-Source: AGHT+IHybbaDTUuq3OR2dTh3PRjAv16cf+ofk/HgCXjX/Glsz8ylZkJGopHKGG11y1fc7qEDafksGA== X-Received: by 2002:ac2:5bcc:0:b0:590:6119:6b73 with SMTP id 2adb3069b0e04-59061196f21mr616166e87.48.1759838328903; Tue, 07 Oct 2025 04:58:48 -0700 (PDT) Received: from curiosity ([5.188.167.4]) by smtp.googlemail.com with ESMTPSA id 2adb3069b0e04-58b011a8941sm6043339e87.114.2025.10.07.04.58.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:58:48 -0700 (PDT) From: Sergey Matyukevich To: linux-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Oleg Nesterov , Shuah Khan , Jisheng Zhang , Thomas Gleixner , Thomas Huth , Charlie Jenkins , Andy Chiu , Han Gao , Samuel Holland , Nam Cao , Joel Granados , =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Sergey Matyukevich Subject: [PATCH v2 3/6] selftests: riscv: set invalid vtype using ptrace Date: Tue, 7 Oct 2025 14:58:19 +0300 Message-ID: <20251007115840.2320557-4-geomatsi@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251007115840.2320557-1-geomatsi@gmail.com> References: <20251007115840.2320557-1-geomatsi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a test case that attempts to set invalid vtype value using ptrace and verifies that the 'vill' bit is set as required by the RISC-V Vector specification v1.0, Section 3.4.1. Signed-off-by: Sergey Matyukevich --- .../testing/selftests/riscv/vector/v_ptrace.c | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/tools/testing/selftests/riscv/vector/v_ptrace.c b/tools/testin= g/selftests/riscv/vector/v_ptrace.c index 6a8d56a5c4f4..ccda8a4dc49b 100644 --- a/tools/testing/selftests/riscv/vector/v_ptrace.c +++ b/tools/testing/selftests/riscv/vector/v_ptrace.c @@ -84,4 +84,116 @@ TEST(ptrace_rvv_not_enabled) } } =20 +TEST(ptrace_rvv_invalid_vtype) +{ + static volatile unsigned long vtype; + unsigned long vlenb; + unsigned long reg; + pid_t pid; + + if (!is_vector_supported()) + SKIP(return, "Vector not supported"); + + asm volatile("csrr %[vlenb], vlenb" : [vlenb] "=3Dr"(vlenb)); + + if (vlenb > 16) + SKIP(return, "This test does not support VLEN > 128"); + + chld_lock =3D 1; + + pid =3D fork(); + + ASSERT_LE(0, pid) + TH_LOG("fork: %m"); + + if (pid =3D=3D 0) { + while (chld_lock =3D=3D 1) + asm volatile("" : : "g"(chld_lock) : "memory"); + + asm(".option arch, +v\n"); + asm(".option arch, +c\n"); + asm volatile("vsetvli x0, x0, e8, m8, tu, mu\n"); + + while (1) { + asm volatile ("c.ebreak"); + asm volatile("csrr %[vtype], vtype" : [vtype] "=3Dr"(vtype) : :); + asm volatile ("c.ebreak"); + } + } else { + struct __riscv_v_regset_state *regset_data; + struct user_regs_struct regs; + size_t regset_size; + struct iovec iov; + int status; + + /* attach */ + + ASSERT_EQ(0, ptrace(PTRACE_ATTACH, pid, NULL, NULL)); + ASSERT_EQ(pid, waitpid(pid, &status, 0)); + ASSERT_TRUE(WIFSTOPPED(status)); + + /* unlock */ + + ASSERT_EQ(0, ptrace(PTRACE_POKEDATA, pid, &chld_lock, 0)); + + /* resume and wait for the 1st c.ebreak */ + + ASSERT_EQ(0, ptrace(PTRACE_CONT, pid, NULL, NULL)); + ASSERT_EQ(pid, waitpid(pid, &status, 0)); + ASSERT_TRUE(WIFSTOPPED(status)); + + /* read tracee vector csr regs using ptrace GETREGSET */ + + regset_size =3D sizeof(*regset_data) + vlenb * 32; + regset_data =3D calloc(1, regset_size); + + iov.iov_base =3D regset_data; + iov.iov_len =3D regset_size; + + ASSERT_EQ(0, ptrace(PTRACE_GETREGSET, pid, NT_RISCV_VECTOR, &iov)); + + /* set invalid vtype 0x1d =3D (5 | 3 << 3): + * - LMUL: 1/8 + * - SEW: 64 + * - invalid configuration for VLENB <=3D 128 + */ + regset_data->vtype =3D 0x1d; + ASSERT_EQ(0, ptrace(PTRACE_SETREGSET, pid, NT_RISCV_VECTOR, &iov)); + + /* skip 1st c.ebreak, then resume and wait for the 2nd c.ebreak */ + + iov.iov_base =3D ®s; + iov.iov_len =3D sizeof(regs); + + ASSERT_EQ(0, ptrace(PTRACE_GETREGSET, pid, NT_PRSTATUS, &iov)); + regs.pc +=3D 2; + ASSERT_EQ(0, ptrace(PTRACE_SETREGSET, pid, NT_PRSTATUS, &iov)); + + ASSERT_EQ(0, ptrace(PTRACE_CONT, pid, NULL, NULL)); + ASSERT_EQ(pid, waitpid(pid, &status, 0)); + ASSERT_TRUE(WIFSTOPPED(status)); + + /* read tracee vtype using ptrace GETREGSET */ + + iov.iov_base =3D regset_data; + iov.iov_len =3D regset_size; + ASSERT_EQ(0, ptrace(PTRACE_GETREGSET, pid, NT_RISCV_VECTOR, &iov)); + + /* read tracee vtype ptrace PEEKDATA */ + + errno =3D 0; + reg =3D ptrace(PTRACE_PEEKDATA, pid, &vtype, NULL); + ASSERT_FALSE((errno !=3D 0) && (reg =3D=3D -1)); + + /* verify that V state is illegal */ + + EXPECT_EQ(reg, regset_data->vtype); + EXPECT_EQ(1UL, (regset_data->vtype >> (__riscv_xlen - 1))); + + /* cleanup */ + + ASSERT_EQ(0, kill(pid, SIGKILL)); + } +} + TEST_HARNESS_MAIN --=20 2.51.0 From nobody Sun Feb 8 00:50:23 2026 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 81A7C2D94B4 for ; Tue, 7 Oct 2025 11:58:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838334; cv=none; b=jw9xIvGBo2a4gEMVkkAQ5jNJXSAItPPjHRFQrjI28JTJcfqwUHauqITHrkPmumHRbJu2uN8YsZGPc7sgQKSd9fB+yKlKw6TckUshHNKd4VNvxu4C5DesE3/9J2tGIUb0KNu63f2rKBNrOA1RJxRFPwJ3XeDaJ7+Z7/AklWMJh34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838334; c=relaxed/simple; bh=aycT2YW8ngTHcamjRTws20c/psHw5lFicsYQqCpiH3w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EWPS1z4yeywt0yg9VOFMxPm3+6ZikmWzL0vf4bs7G7degkrcn2HJz9pIgZOUQCtAOBNnbVvGtw4sBl58vaxLU/xpv9TsqiOJQRuYB1+ahKQ2BcPoBOaskDpyiVu9Rhw2Ln0IZxugYpcKOEJZLGA+/NC6IARxGkR0ZgCfNyig8ZE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TZdfPHTh; arc=none smtp.client-ip=209.85.167.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TZdfPHTh" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-57bd04f2e84so6962880e87.1 for ; Tue, 07 Oct 2025 04:58:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759838331; x=1760443131; 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=gLmsg/56sZrz4BdDAhOz8lvZvUVWtSQgVDQGJvDc9c8=; b=TZdfPHThxVOMCc4fUJEPoMK97zP6CedDJFjpUZvgPyISZh8XMM78i8gxdVa9O1Bm8a Csl2KoCIl+kBuGTnvlhdS1x++d5Rk71qKg1Sxzcm5ptgqtvP1a/x/IV9hLfOTKwY6HkI shB2aNyprHUmvENH7RGSrNrMtBNuNyDwNm0YhP2jOPzhL/k7I94Ybpqz/mwNyCw63XFz CAkWFIhMajq2mk4ugUq7FO5QfNK88WPkTYkJNeTAOA1tlEi12/G+mjFn6fAAS6IAxqtN +DM7DuH+KzlCE8Xccg2Y8nxpLIJ5Fz+/0+6plbhZmeiNAeUYvo8Gj+xWFAyWYewib/J/ TqGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759838331; x=1760443131; 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=gLmsg/56sZrz4BdDAhOz8lvZvUVWtSQgVDQGJvDc9c8=; b=sEalGRT/8RiAh4KB9Lc7xsuLfTl6zB1NL/rSWyKx+ZWn26kZDo58RCCNGAVZrvEPdc OMH2lDZRkIAe1YRDaMoL2/Gl/t48gTkEGWNgnbB+jKPNlYJ5t5+NkYO+z8kzNCwfK6io RY5vO6BoggXCHnGXRzFOB9/Tr9ZZup/X/qKaV0nLf36t4bj45ASsZ+FDIzKXEQhvEGJG DUSqQg7r+eb4YhbEz5HbIGZoWggLItiefwyr5j8XES3WTpdubtyHqB1q4IaVqDgchA3X bYjxdLtD8TmGbVI0fy8pGxiuQq1pA09iinHfCqa+ivNfrK55hFRGdb3DdNLKH6HKphxa iLAQ== X-Gm-Message-State: AOJu0YyL9geGAdvMFCqf6g/95HE2D4SXXIam6hZwapMe7bk+hlZx4hBb AImi+Ho39Ko1Yt3GcOthO7eIsZY6yjI517Co8hxuubkss7F1CV7n802r X-Gm-Gg: ASbGncvdodldZCArSZYNF3vO6gViKlbJN8Ui8tAW+fSESrK7kUfLAqVosSUM57X9pIM L0Kl2StJEY5ptzi55nUPg9caw0OWr0JaE3AgmOjAubgknq7TSRcEM7q0NPi4lQ4nQC0hkD2FGy0 g81SPLydyXZrx568xo+4m3M6hZBpuPEca7RYl0rnZfKXFFeZcNKb0n+7kiBjBfwUFu99dZZc9xq P7P+VKcP/rux/BJ9CKT44if4vDB/VUz09nHRsYa5Cjh7iRPlir3MDnyqLfGj5ye3h11wZZmf2gR lIvedGzYDvSwxRN0gSsKMVeZNMdJhHuZqYYqrDZ8lF0cyoOxeJtSV8j5pCOnNskgYsocxcQpMct aYggJWmCp2o3XizsynCpTPWjNA6w8OXRwzmthMg== X-Google-Smtp-Source: AGHT+IGfT8s7layBTVcGXA6YfBl09MAMt5tdhMpUSEGyHeuPqtgVVg9HtsIeoOOkz2owLe0BeMm1lQ== X-Received: by 2002:a05:6512:3e27:b0:55f:6db5:748d with SMTP id 2adb3069b0e04-58cb956b71amr5116109e87.4.1759838330577; Tue, 07 Oct 2025 04:58:50 -0700 (PDT) Received: from curiosity ([5.188.167.4]) by smtp.googlemail.com with ESMTPSA id 2adb3069b0e04-58b011a8941sm6043339e87.114.2025.10.07.04.58.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:58:49 -0700 (PDT) From: Sergey Matyukevich To: linux-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Oleg Nesterov , Shuah Khan , Jisheng Zhang , Thomas Gleixner , Thomas Huth , Charlie Jenkins , Andy Chiu , Han Gao , Samuel Holland , Nam Cao , Joel Granados , =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Sergey Matyukevich Subject: [PATCH v2 4/6] riscv: vector: allow to force vector context save Date: Tue, 7 Oct 2025 14:58:20 +0300 Message-ID: <20251007115840.2320557-5-geomatsi@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251007115840.2320557-1-geomatsi@gmail.com> References: <20251007115840.2320557-1-geomatsi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When ptrace updates vector CSR registers for a traced process, the changes may not be immediately visible to the next ptrace operations due to vector context switch optimizations. The function 'riscv_v_vstate_save' saves context only if mstatus.VS is 'dirty'. However mstatus.VS of the traced process context may remain 'clean' between two breakpoints, if no vector instructions were executed between those two breakpoints. In this case the vector context will not be saved at the second breakpoint. As a result, the second ptrace may read stale vector CSR values. Fix this by introducing a TIF flag that forces vector context save on the next context switch, regardless of mstatus.VS state. Set this flag on ptrace oprations that modify vector CSR registers. Signed-off-by: Sergey Matyukevich --- arch/riscv/include/asm/thread_info.h | 2 ++ arch/riscv/include/asm/vector.h | 3 +++ arch/riscv/kernel/process.c | 2 ++ arch/riscv/kernel/ptrace.c | 5 +++++ 4 files changed, 12 insertions(+) diff --git a/arch/riscv/include/asm/thread_info.h b/arch/riscv/include/asm/= thread_info.h index 836d80dd2921..e05e9aa89c43 100644 --- a/arch/riscv/include/asm/thread_info.h +++ b/arch/riscv/include/asm/thread_info.h @@ -118,7 +118,9 @@ int arch_dup_task_struct(struct task_struct *dst, struc= t task_struct *src); =20 #define TIF_32BIT 16 /* compat-mode 32bit process */ #define TIF_RISCV_V_DEFER_RESTORE 17 /* restore Vector before returing to = user */ +#define TIF_RISCV_V_FORCE_SAVE 13 /* force Vector context save */ =20 #define _TIF_RISCV_V_DEFER_RESTORE BIT(TIF_RISCV_V_DEFER_RESTORE) +#define _TIF_RISCV_V_FORCE_SAVE BIT(TIF_RISCV_V_FORCE_SAVE) =20 #endif /* _ASM_RISCV_THREAD_INFO_H */ diff --git a/arch/riscv/include/asm/vector.h b/arch/riscv/include/asm/vecto= r.h index b61786d43c20..d3770e13da93 100644 --- a/arch/riscv/include/asm/vector.h +++ b/arch/riscv/include/asm/vector.h @@ -370,6 +370,9 @@ static inline void __switch_to_vector(struct task_struc= t *prev, { struct pt_regs *regs; =20 + if (test_and_clear_tsk_thread_flag(prev, TIF_RISCV_V_FORCE_SAVE)) + __riscv_v_vstate_dirty(task_pt_regs(prev)); + if (riscv_preempt_v_started(prev)) { if (riscv_v_is_on()) { WARN_ON(prev->thread.riscv_v_flags & RISCV_V_CTX_DEPTH_MASK); diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c index 31a392993cb4..47959c55cefb 100644 --- a/arch/riscv/kernel/process.c +++ b/arch/riscv/kernel/process.c @@ -183,6 +183,7 @@ void flush_thread(void) kfree(current->thread.vstate.datap); memset(¤t->thread.vstate, 0, sizeof(struct __riscv_v_ext_state)); clear_tsk_thread_flag(current, TIF_RISCV_V_DEFER_RESTORE); + clear_tsk_thread_flag(current, TIF_RISCV_V_FORCE_SAVE); #endif #ifdef CONFIG_RISCV_ISA_SUPM if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SUPM)) @@ -205,6 +206,7 @@ int arch_dup_task_struct(struct task_struct *dst, struc= t task_struct *src) memset(&dst->thread.vstate, 0, sizeof(struct __riscv_v_ext_state)); memset(&dst->thread.kernel_vstate, 0, sizeof(struct __riscv_v_ext_state)); clear_tsk_thread_flag(dst, TIF_RISCV_V_DEFER_RESTORE); + clear_tsk_thread_flag(dst, TIF_RISCV_V_FORCE_SAVE); =20 return 0; } diff --git a/arch/riscv/kernel/ptrace.c b/arch/riscv/kernel/ptrace.c index 906cf1197edc..569f756bef23 100644 --- a/arch/riscv/kernel/ptrace.c +++ b/arch/riscv/kernel/ptrace.c @@ -148,6 +148,11 @@ static int riscv_vr_set(struct task_struct *target, if (vstate->vlenb !=3D ptrace_vstate.vlenb) return -EINVAL; =20 + if (vstate->vtype !=3D ptrace_vstate.vtype || + vstate->vcsr !=3D ptrace_vstate.vcsr || + vstate->vl !=3D ptrace_vstate.vl) + set_tsk_thread_flag(target, TIF_RISCV_V_FORCE_SAVE); + vstate->vstart =3D ptrace_vstate.vstart; vstate->vl =3D ptrace_vstate.vl; vstate->vtype =3D ptrace_vstate.vtype; --=20 2.51.0 From nobody Sun Feb 8 00:50:23 2026 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 903002DEA90 for ; Tue, 7 Oct 2025 11:58:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838336; cv=none; b=VJWmFQs9b3+GUxB5P50IyABwHOwv7yjFI6B6wwam8rcZQyoBjdkra0uoKPPJntgmmfWhhMoZTtqH+Tk2d13DD14jh04/lpvJtkSKt28eX5/JSS9q8VXjepVP3tz1Ua1Lnte6j5toWkumtAAo6Jdpr4b5aCJq4kixtd7LIMKOc1s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838336; c=relaxed/simple; bh=2Hli3rnQU0ee/Z+SJdrdeUeLAzI1KOmmrB4NougJ9ws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZK57OKrbX2F08T5Fa9y2l20pjO+IDzEOtUcAkwrJuoTYdj103fyAiepI2bJPTEAhC2oTg6nRqGu8/35SGzmmLGaw0TbqYssu/uQEm9Bh5M5CHcEpIoXrlZ2+uHh97orFVNq7klC0O253jSZCw+fWT1oYaOr8IAin8plwY0YPZaM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=blikrU/q; arc=none smtp.client-ip=209.85.167.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="blikrU/q" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-57a604fecb4so7948706e87.1 for ; Tue, 07 Oct 2025 04:58:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759838333; x=1760443133; 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=DHT1PRp2JY0IGazIqjL1tLWH/amjUJ0aFr/0p5QGBFQ=; b=blikrU/qFPnnGGF6At++q78isAOP+VO71zfsqlULZozidVa36g7NQxT4Hrpew0fRYF r0dK80cmx3tn1HATfyFHJC1kvTtRL0cWji4iVNA3Ye9TM9tBXFdecx4EHDA8dn6PYE3W USN0IVp0VjGdYJDUxXADjMQy/89rcx6RKCpiV72tvw19PrZPkB6EhrPGyzerc6tQxTRY IEKAsdbKUPPQ3elSyn/Ea3NjEXIDkY7zPXNVRibAZR8P/25Wf83swD0/8+ucEI44fHIC fBCOh3PlUT5kabaK2rrMhy24f+DciRBRG5GUeAabjG9PiUUwSy1GNg9rnpHLAaTXagMe OoxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759838333; x=1760443133; 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=DHT1PRp2JY0IGazIqjL1tLWH/amjUJ0aFr/0p5QGBFQ=; b=cKuHV9571xGMRI3k7yTina38XWXCVnl9iCcs8Mjy+r7RFxWXL9Xm/7Xqc89AnPEZMY Jm2QhbOhDhU94Q0z5LxgMKDGwxA9HsNSAIEzQERgefD5ljOZRT/gnsZsi2C0v8vIRwVk dS+XWUNJUTrooYgBCi4pib1IB5m2YvVFwkwHjO2LsuHUoslRjZ3vCfipDbX8tZp9so9F UQrYhRHb16yGZIbT960iTi92oa1ueQlUNbQ3lNO8G9X0V0pfxzyd/fHUUnU2fG6cZjmE 6jQNkpexe/kQ/pBGHKPgBICz6XeI3TpWoHQ77vLzY8xVDXLYpq9+4RCxuIbyet6QRNvA c+BA== X-Gm-Message-State: AOJu0YzizdrI4P0tedH9Kyu2uXhl/rxh2Uv+aJFiYJJVr+QU1OqyxXHM Q0z8T1E3kAr5P+urTBaaQobvRguvgM9uyk60dm3kj/6YOCSfVltuJ2kD X-Gm-Gg: ASbGnctL+9zVqXt0NmFODqoHhy00ENsZKN8cPgMjUdJliMWsCXc7dLQtzzd0HCOKhHc P3xGfCTBEkSQ2VbN5kUlxJhkKfxE8FcyztnvA9ahlzPE+uPyZ883RrMxQaXbK0nbUwr5PCSU1au kA1iM6AceZNG+9Cjt2ougYcJA2tCfiIt3tA/dGqcGXNJbo/gARSHLz/yVwmVsnhZA9+hsMdnOGB jgJjEfsyPiQwjQCAu0YqpPHZv+J95oUvynDrcrpnrasDfrjc3Yi1qroy709Fb/gnznyx3V1KoY+ 9CYU51fZV+TNfUlr99NqYsTxEkVvM/93JF78bLI1TGlDwacNaUfmLMUgNNnraPW8VdU8Lm9gfx1 9Xiy47QMG/m2NZRTWI6lL4HGjBXbI05tzqu4L0F0+wI27aRBK X-Google-Smtp-Source: AGHT+IEzN3zS6xGqVRO8VCU7zICi7Cd8TK0JwH77VbJyPE7udYDtblpgFcyovJkjgfD5sCBUy3Ty/w== X-Received: by 2002:ac2:4e0e:0:b0:570:daa5:de18 with SMTP id 2adb3069b0e04-58cbbbeee5dmr5043998e87.33.1759838332383; Tue, 07 Oct 2025 04:58:52 -0700 (PDT) Received: from curiosity ([5.188.167.4]) by smtp.googlemail.com with ESMTPSA id 2adb3069b0e04-58b011a8941sm6043339e87.114.2025.10.07.04.58.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:58:51 -0700 (PDT) From: Sergey Matyukevich To: linux-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Oleg Nesterov , Shuah Khan , Jisheng Zhang , Thomas Gleixner , Thomas Huth , Charlie Jenkins , Andy Chiu , Han Gao , Samuel Holland , Nam Cao , Joel Granados , =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Sergey Matyukevich Subject: [PATCH v2 5/6] selftests: riscv: verify initial vector state with ptrace Date: Tue, 7 Oct 2025 14:58:21 +0300 Message-ID: <20251007115840.2320557-6-geomatsi@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251007115840.2320557-1-geomatsi@gmail.com> References: <20251007115840.2320557-1-geomatsi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a test case that attaches to a traced process immediately after its first vector instructions to verify the initial vector context state. Signed-off-by: Sergey Matyukevich --- .../testing/selftests/riscv/vector/v_ptrace.c | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/tools/testing/selftests/riscv/vector/v_ptrace.c b/tools/testin= g/selftests/riscv/vector/v_ptrace.c index ccda8a4dc49b..f452e04629ea 100644 --- a/tools/testing/selftests/riscv/vector/v_ptrace.c +++ b/tools/testing/selftests/riscv/vector/v_ptrace.c @@ -196,4 +196,107 @@ TEST(ptrace_rvv_invalid_vtype) } } =20 +TEST(ptrace_rvv_early_access) +{ + static volatile unsigned long vstart; + static volatile unsigned long vtype; + static volatile unsigned long vlenb; + static volatile unsigned long vcsr; + static volatile unsigned long vl; + pid_t pid; + + if (!is_vector_supported()) + SKIP(return, "Vector not supported"); + + chld_lock =3D 1; + + pid =3D fork(); + + ASSERT_LE(0, pid) + TH_LOG("fork: %m"); + + if (pid =3D=3D 0) { + while (chld_lock =3D=3D 1) + asm volatile("" : : "g"(chld_lock) : "memory"); + + asm volatile("csrr %[vstart], vstart" : [vstart] "=3Dr"(vstart)); + asm volatile("csrr %[vl], vl" : [vl] "=3Dr"(vl)); + asm volatile("csrr %[vtype], vtype" : [vtype] "=3Dr"(vtype)); + asm volatile("csrr %[vcsr], vcsr" : [vcsr] "=3Dr"(vcsr)); + asm volatile("csrr %[vlenb], vlenb" : [vlenb] "=3Dr"(vlenb)); + + asm volatile ("ebreak" : : : ); + } else { + struct __riscv_v_regset_state *regset_data; + unsigned long vstart_csr; + unsigned long vl_csr; + unsigned long vtype_csr; + unsigned long vcsr_csr; + unsigned long vlenb_csr; + size_t regset_size; + struct iovec iov; + int status; + + /* attach */ + + ASSERT_EQ(0, ptrace(PTRACE_ATTACH, pid, NULL, NULL)); + ASSERT_EQ(pid, waitpid(pid, &status, 0)); + ASSERT_TRUE(WIFSTOPPED(status)); + + /* unlock */ + + ASSERT_EQ(0, ptrace(PTRACE_POKEDATA, pid, &chld_lock, 0)); + + /* resume and wait for ebreak */ + + ASSERT_EQ(0, ptrace(PTRACE_CONT, pid, NULL, NULL)); + ASSERT_EQ(pid, waitpid(pid, &status, 0)); + ASSERT_TRUE(WIFSTOPPED(status)); + + /* read tracee vector csr regs using ptrace PEEKDATA */ + + errno =3D 0; + vstart_csr =3D ptrace(PTRACE_PEEKDATA, pid, &vstart, NULL); + ASSERT_FALSE((errno !=3D 0) && (vstart_csr =3D=3D -1)); + + errno =3D 0; + vl_csr =3D ptrace(PTRACE_PEEKDATA, pid, &vl, NULL); + ASSERT_FALSE((errno !=3D 0) && (vl_csr =3D=3D -1)); + + errno =3D 0; + vtype_csr =3D ptrace(PTRACE_PEEKDATA, pid, &vtype, NULL); + ASSERT_FALSE((errno !=3D 0) && (vtype_csr =3D=3D -1)); + + errno =3D 0; + vcsr_csr =3D ptrace(PTRACE_PEEKDATA, pid, &vcsr, NULL); + ASSERT_FALSE((errno !=3D 0) && (vcsr_csr =3D=3D -1)); + + errno =3D 0; + vlenb_csr =3D ptrace(PTRACE_PEEKDATA, pid, &vlenb, NULL); + ASSERT_FALSE((errno !=3D 0) && (vlenb_csr =3D=3D -1)); + + /* read tracee csr regs using ptrace GETREGSET */ + + regset_size =3D sizeof(*regset_data) + vlenb_csr * 32; + regset_data =3D calloc(1, regset_size); + + iov.iov_base =3D regset_data; + iov.iov_len =3D regset_size; + + ASSERT_EQ(0, ptrace(PTRACE_GETREGSET, pid, NT_RISCV_VECTOR, &iov)); + + /* compare */ + + EXPECT_EQ(vstart_csr, regset_data->vstart); + EXPECT_EQ(vtype_csr, regset_data->vtype); + EXPECT_EQ(vlenb_csr, regset_data->vlenb); + EXPECT_EQ(vcsr_csr, regset_data->vcsr); + EXPECT_EQ(vl_csr, regset_data->vl); + + /* cleanup */ + + ASSERT_EQ(0, kill(pid, SIGKILL)); + } +} + TEST_HARNESS_MAIN --=20 2.51.0 From nobody Sun Feb 8 00:50:23 2026 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.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 4BA3E2DF152 for ; Tue, 7 Oct 2025 11:58:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838338; cv=none; b=Tu11/MCMFCrtidH6/D7XwVnXeZGb1h3QH6DMBZEyYI4g/3JJWfslNBhRjIYQ5XCbDExuxGb3qxcXcc6ZOB7Ul4gRELIor1IaIYYQ1gG4O7hgn77F7iAQ5jfRqTbGOBVZsPbJA1RQyqZSSaums7q/IwDj8GT2Y6e4014ySOU+cko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759838338; c=relaxed/simple; bh=uXkrELMKCfsRaWYxU5mXegkCFCKgEu54miTT0hVrswo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NXmzr9IE0dq2hlBQOWVs4xqH8xelqkYtIULqsbKZD3qeOaLiGRJand3CSCKJS7gOIrdCJ2yK1zZ6bRLnMhAF/iYUIJjbwf0XIt1lc4lj9D1ep6SX0JkSZWGRgdcAc7aIIpq8Sr1/1mXni5v7QpxVn36SngmsmSBrxSGDJtztlEw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QDU9J0+H; arc=none smtp.client-ip=209.85.167.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QDU9J0+H" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-57ea78e0618so7000669e87.0 for ; Tue, 07 Oct 2025 04:58:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759838334; x=1760443134; 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=5ut4udALSNwNlfbYZc3Tgg1u2DqNTE4rygUYw4A2JFg=; b=QDU9J0+HvLDTZFrUrxoR8FB1nkf/ZkGjPW44S+i3PaYQeb7HEW4FocjEy9Uv+tw8jF DhoqQ9qqdOc0/jOuxjG7uJmToTjCshsTS7P1KuSGmB/uW65kfBzdfMvlcT1T/o3tjB1S dST4XqHIh8hEB5pCMyAdv9cjDDubZpQMNOD4Vhh1e7FILBH4oPdwB3r7D8CtZpgxBeQX YconBVbJgmfJldBTWBhIj6gzTBG/zVu1/MGFc2x4iL8bm7kkiWRrq5JKAO0pDEoq40oL LRKjS/KemIyVqAUVNLt8TsVxh+9aP6aNMdWrNN2uwL4i5AjueDB3xA5iJ+PNMsCNi5nq /5tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759838334; x=1760443134; 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=5ut4udALSNwNlfbYZc3Tgg1u2DqNTE4rygUYw4A2JFg=; b=Wei9XW4k5JqVekGLPwT8w/nB3e9n9Z+Kn+ptla6ax4WFCh7gY+jEunYhmdjC1QF+9/ it/BvrqlzrvLx+ic4HGlaJn+ap9sVuE1GzEHmvXIOGhistZ5/11qyhmtCH4PXcdW5vUG zmXqvFcy8OEIlo1WOBQr9a0MUdXD6zS1BsjTpzaJx3wCsh14Qaiy75X83en3fzOdFTuC 12b5ezTgMWAHgc2MXH3xiohKlXkZxAqiRf71J2NguyzGPrOfDsYDsQab4v7itgsxOZ7K b6YinXtTQ0lBthoE7tGfT5Nxm07OrIt+NQDEK/VwBJ3NwSCG5dfVhyUupaPR++OVMNr0 Bjbw== X-Gm-Message-State: AOJu0YzMEcm87q08i+FjQxz9HWvGaHpd2EvREc2+mBaYm6DVuo/KcwR9 O3rqMZHtZoAVWCkvFrA/DENZt5ZbOLCYtwTe7PGmt80jsLRTY554L8Dl X-Gm-Gg: ASbGncsMwfYkF4c0zEt7V9YKv6jHZGPcxsGV5OO54ujbDQjn4kG5LDygg7xvPhha2K6 R1ncyLRPDwi9jpV/tdasTHnc7IXaiutNooPi4QpC9j4Vd5OXp/PeOCo4c6WlWgwX1coL4oBYaMq GQc6yTgB/0LWIuamlClKgSZZqRti4dL6tSZsrJL7jtB63GukuN+0iNHC4YKaLy1tWqvsiapvX+L QpeNwsVTBqC1fsU1szSiSBcLsReKWRxBBsjTeUW1rC7INdmnWw1Ok87reHou6+oEg9A7gyPlWEs PyLzDJ5UrXzyO5IKwumneWd0W6NHfG0fuABsL7Ld75LjKwwP9/MuHgn6bUeSUeUq4eU83G0mpzk pN+SgEIUrREVtu4jwQEf1jRtLrKoWgeLPLhD3vQ== X-Google-Smtp-Source: AGHT+IF9hiTWhCe1Oqso+uN0BybHSEh0X/p2CShjwG4LdtO5K/sFgcxScdEgvNjZD6t+gVwSik5F2A== X-Received: by 2002:a05:6512:3a92:b0:55c:d62b:d0fc with SMTP id 2adb3069b0e04-58cb96631fcmr4719071e87.10.1759838334241; Tue, 07 Oct 2025 04:58:54 -0700 (PDT) Received: from curiosity ([5.188.167.4]) by smtp.googlemail.com with ESMTPSA id 2adb3069b0e04-58b011a8941sm6043339e87.114.2025.10.07.04.58.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:58:53 -0700 (PDT) From: Sergey Matyukevich To: linux-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Oleg Nesterov , Shuah Khan , Jisheng Zhang , Thomas Gleixner , Thomas Huth , Charlie Jenkins , Andy Chiu , Han Gao , Samuel Holland , Nam Cao , Joel Granados , =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Conor Dooley , Sergey Matyukevich Subject: [PATCH v2 6/6] riscv: vector: initialize vlenb on the first context switch Date: Tue, 7 Oct 2025 14:58:22 +0300 Message-ID: <20251007115840.2320557-7-geomatsi@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251007115840.2320557-1-geomatsi@gmail.com> References: <20251007115840.2320557-1-geomatsi@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The vstate in thread_struct is zeroed when the vector context is initialized. That includes read-only register vlenb, which holds the vector register length in bytes. This zeroed state persists until mstatus.VS becomes 'dirty' and a context switch saves the actual hardware values. This can expose the zero vlenb value to the user-space in early debug scenarios, e.g. when ptrace attaches to a traced process early, before any vector instruction except the first one was executed. Fix this by forcing the vector context save on the first context switch. Signed-off-by: Sergey Matyukevich --- arch/riscv/kernel/vector.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/riscv/kernel/vector.c b/arch/riscv/kernel/vector.c index 901e67adf576..3dd22a71aa18 100644 --- a/arch/riscv/kernel/vector.c +++ b/arch/riscv/kernel/vector.c @@ -120,6 +120,7 @@ static int riscv_v_thread_zalloc(struct kmem_cache *cac= he, =20 ctx->datap =3D datap; memset(ctx, 0, offsetof(struct __riscv_v_ext_state, datap)); + return 0; } =20 @@ -216,8 +217,11 @@ bool riscv_v_first_use_handler(struct pt_regs *regs) force_sig(SIGBUS); return true; } + riscv_v_vstate_on(regs); riscv_v_vstate_set_restore(current, regs); + set_tsk_thread_flag(current, TIF_RISCV_V_FORCE_SAVE); + return true; } =20 --=20 2.51.0