2022-08-23 01:52:49

by Wangshaobo (bobo)

[permalink] [raw]
Subject: [PATCH] arm64/sme: Clearing TIF_SVE but not TIF_SME in za_set()

Clearing target's TIF_SVE but not current's TIF_SME in za_set(), as it indicates
target's SVE storage unavailable.

Fixes: 776b4a1cf364 ("arm64/sme: Add ptrace support for ZA")
Signed-off-by: Wang ShaoBo <[email protected]>
---
arch/arm64/kernel/ptrace.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
index 21da83187a60..66d5c7efb745 100644
--- a/arch/arm64/kernel/ptrace.c
+++ b/arch/arm64/kernel/ptrace.c
@@ -1084,7 +1084,7 @@ static int za_set(struct task_struct *target,
if (!target->thread.sve_state) {
sve_alloc(target);
if (!target->thread.sve_state) {
- clear_thread_flag(TIF_SME);
+ clear_tsk_thread_flag(target, TIF_SVE);
ret = -ENOMEM;
goto out;
}
--
2.25.1


2022-08-23 16:01:07

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] arm64/sme: Clearing TIF_SVE but not TIF_SME in za_set()

On Tue, Aug 23, 2022 at 09:56:27AM +0800, Wang ShaoBo wrote:

> Clearing target's TIF_SVE but not current's TIF_SME in za_set(), as it indicates
> target's SVE storage unavailable.

> +++ b/arch/arm64/kernel/ptrace.c
> @@ -1084,7 +1084,7 @@ static int za_set(struct task_struct *target,
> if (!target->thread.sve_state) {
> sve_alloc(target);
> if (!target->thread.sve_state) {
> - clear_thread_flag(TIF_SME);
> + clear_tsk_thread_flag(target, TIF_SVE);
> ret = -ENOMEM;
> goto out;
> }

We didn't set TIF_SVE so we have no reason to clear it here, we know it
can't have been set since there was no sve_state allocated. The clear
of TIF_SME is happening on the wrong task though, and TBH is just
redudnant for similar reasons.


Attachments:
(No filename) (771.00 B)
signature.asc (499.00 B)
Download all attachments