FAILED: patch "[PATCH] LoongArch: Ensure FP/SIMD registers in the core dump file is" failed to apply to 6.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.4.y
git checkout FETCH_HEAD
git cherry-pick -x 656f9aec07dba7c61d469727494a5d1b18d0bef4
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023082705-predator-enjoyable-15fb@gregkh' --subject-prefix 'PATCH 6.4.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 656f9aec07dba7c61d469727494a5d1b18d0bef4 Mon Sep 17 00:00:00 2001
From: Huacai Chen <[email protected]>
Date: Sat, 26 Aug 2023 22:21:57 +0800
Subject: [PATCH] LoongArch: Ensure FP/SIMD registers in the core dump file is
up to date
This is a port of commit 379eb01c21795edb4c ("riscv: Ensure the value of FP registers in the core dump file is up to date").
The values of FP/SIMD registers in the core dump file come from the thread.fpu. However, kernel saves the FP/SIMD registers only before scheduling out the process. If no process switch happens during the exception handling, kernel will not have a chance to save the latest values of FP/SIMD registers. So it may cause their values in the core dump file incorrect. To solve this problem, force fpr_get()/simd_get() to save the FP/SIMD registers into the thread.fpu if the target task equals the current task.
arch/loongarch/include/asm/fpu.h +18 -4
@@ -173,16 +173,30 @@ static inline void restore_fp(struct task_struct *tsk)_restore_fp (&tsk->thread.fpu); } -static inline union fpureg *get_fpu_regs (struct task_struct *tsk) +static inline void save_fpu_regs (struct task_struct *tsk) { +unsigned int euen; +if (tsk == current) {preempt_disable (); -if (is_fpu_owner ()) + + euen =csr_read32 (LOONGARCH_CSR_EUEN ); + +#ifdef CONFIG_CPU_HAS_LASX +if (euen &CSR_EUEN_LASXEN ) +_save_lasx (¤t->thread.fpu); + else +#endif +#ifdef CONFIG_CPU_HAS_LSX +if (euen &CSR_EUEN_LSXEN ) +_save_lsx (¤t->thread.fpu); + else +#endif +if (euen &CSR_EUEN_FPEN )_save_fp (¤t->thread.fpu); +preempt_enable (); } - -return tsk->thread.fpu.fpr; }static inline int is_simd_owner (void )
arch/loongarch/kernel/ptrace.c +4 -0
@@ -147,6 +147,8 @@ static int fpr_get(struct task_struct *target, {int r; +save_fpu_regs (target); +if (sizeof (target->thread.fpu.fpr[0 ]) ==sizeof (elf_fpreg_t)) r =gfpr_get (target, &to);else
@@ -278,6 +280,8 @@ static int simd_get(struct task_struct *target, {const unsigned int wr_size =NUM_FPU_REGS * regset->size; +save_fpu_regs (target); +if (!tsk_used_math (target)) {/* The task hasn't used FP or LSX, fill with 0xff */ copy_pad_fprs (target, regset, &to,0 );
Huacai Chen
maintainerQuoted 9 lines · On Sun, Aug 27, 2023 at 2:45 PM <[email protected]> wrote:
The patch below does not apply to the 6.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.To reproduce the conflict and resubmit, you may use the following commands:
Quoted 8 lines
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.4.y
git checkoutFETCH_HEAD
git cherry-pick -x656f9aec07dba7c61d469727494a5d1b18d0bef4
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023082705-predator-enjoyable-15fb@gregkh' --subject-prefix 'PATCH 6.4.y' HEAD^..Possible dependencies:
I'm sorry, this is my mistake. 6.4 also need to cut the simd_get() part, because simd is only supported since 6.5
Huacai
Quoted 92 lines
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From
656f9aec07dba7c61d469727494a5d1b18d0bef4Mon Sep 17 00:00:00 2001
From: Huacai Chen <[email protected]>
Date: Sat, 26 Aug 2023 22:21:57 +0800
Subject: [PATCH] LoongArch: Ensure FP/SIMD registers in the core dump file is
up to dateThis is a port of commit
379eb01c21795edb4c("riscv: Ensure the value of FP registers in the core dump file is up to date").The values of FP/SIMD registers in the core dump file come from the thread.fpu. However, kernel saves the FP/SIMD registers only before scheduling out the process. If no process switch happens during the exception handling, kernel will not have a chance to save the latest values of FP/SIMD registers. So it may cause their values in the core dump file incorrect. To solve this problem, force fpr_get()/simd_get() to save the FP/SIMD registers into the thread.fpu if the target task equals the current task.
Signed-off-by Huacai Chen <[email protected]>arch/loongarch/include/asm/fpu.h +18
-4@@ -173,16 +173,30 @@ static inline void restore_fp(struct task_struct *tsk)_restore_fp (&tsk->thread.fpu); } -static inline union fpureg *get_fpu_regs (struct task_struct *tsk) +static inline void save_fpu_regs (struct task_struct *tsk) { +unsigned int euen; +if (tsk == current) {preempt_disable (); -if (is_fpu_owner ()) + + euen =csr_read32 (LOONGARCH_CSR_EUEN ); + +#ifdef CONFIG_CPU_HAS_LASX +if (euen &CSR_EUEN_LASXEN ) +_save_lasx (¤t->thread.fpu); + else +#endif +#ifdef CONFIG_CPU_HAS_LSX +if (euen &CSR_EUEN_LSXEN ) +_save_lsx (¤t->thread.fpu); + else +#endif +if (euen &CSR_EUEN_FPEN )_save_fp (¤t->thread.fpu); +preempt_enable (); } - -return tsk->thread.fpu.fpr; }static inline int is_simd_owner (void )arch/loongarch/kernel/ptrace.c +4
-0@@ -147,6 +147,8 @@ static int fpr_get(struct task_struct *target, {int r; +save_fpu_regs (target); +if (sizeof (target->thread.fpu.fpr[0 ]) ==sizeof (elf_fpreg_t)) r =gfpr_get (target, &to);else @@ -278,6 +280,8 @@ static int simd_get(struct task_struct *target, {const unsigned int wr_size =NUM_FPU_REGS * regset->size; +save_fpu_regs (target); +if (!tsk_used_math (target)) {/* The task hasn't used FP or LSX, fill with 0xff */ copy_pad_fprs (target, regset, &to,0 );
Greg KH
maintainerQuoted 17 lines · Huacai Chen
Quoted 16 lines · On Sun, Aug 27, 2023 at 2:45 PM <[email protected]> wrote:
The patch below does not apply to the 6.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.4.y
git checkoutFETCH_HEAD
git cherry-pick -x656f9aec07dba7c61d469727494a5d1b18d0bef4
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023082705-predator-enjoyable-15fb@gregkh' --subject-prefix 'PATCH 6.4.y' HEAD^..
Quoted 3 lines
Quoted 1 line
Possible dependencies:
I'm sorry, this is my mistake. 6.4 also need to cut the
simd_get()part, because simd is only supported since 6.5
I do not understand, sorry. Is this relevant for 6.4.y? If so, can you provide a working backport?
thanks,
greg k-h
Huacai Chen
maintainerQuoted 19 lines · Greg KH
Quoted 17 lines · Huacai Chen
Quoted 16 lines · On Sun, Aug 27, 2023 at 2:45 PM <[email protected]> wrote:
The patch below does not apply to the 6.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.4.y
git checkoutFETCH_HEAD
git cherry-pick -x656f9aec07dba7c61d469727494a5d1b18d0bef4
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023082705-predator-enjoyable-15fb@gregkh' --subject-prefix 'PATCH 6.4.y' HEAD^..
Quoted 6 lines
Quoted 3 lines
Quoted 1 line
Possible dependencies:
I'm sorry, this is my mistake. 6.4 also need to cut the
simd_get()part, because simd is only supported since 6.5I do not understand, sorry. Is this relevant for 6.4.y? If so, can you provide a working backport?
Sorry to bother you. Please give up backporting this patch, I found that there are some dependencies but they shouldn't be backported to stable branches.
Sorry for that again.
Huacai
Quoted 4 lines
thanks,
greg k-h