1 // SPDX-License-Identifier: GPL-2.0-or-later
3 #include <linux/regset.h>
5 #include <asm/switch_to.h>
7 #include "ptrace-decl.h"
10 * Regardless of transactions, 'fp_state' holds the current running
11 * value of all FPR registers and 'ckfp_state' holds the last checkpointed
12 * value of all FPR registers for the current transaction.
14 * Userspace interface buffer layout:
21 int fpr_get(struct task_struct
*target
, const struct user_regset
*regset
,
24 #ifdef CONFIG_PPC_FPU_REGS
25 BUILD_BUG_ON(offsetof(struct thread_fp_state
, fpscr
) !=
26 offsetof(struct thread_fp_state
, fpr
[32]));
28 flush_fp_to_thread(target
);
30 return membuf_write(&to
, &target
->thread
.fp_state
, 33 * sizeof(u64
));
32 return membuf_write(&to
, &empty_zero_page
, 33 * sizeof(u64
));
37 * Regardless of transactions, 'fp_state' holds the current running
38 * value of all FPR registers and 'ckfp_state' holds the last checkpointed
39 * value of all FPR registers for the current transaction.
41 * Userspace interface buffer layout:
49 int fpr_set(struct task_struct
*target
, const struct user_regset
*regset
,
50 unsigned int pos
, unsigned int count
,
51 const void *kbuf
, const void __user
*ubuf
)
53 #ifdef CONFIG_PPC_FPU_REGS
54 BUILD_BUG_ON(offsetof(struct thread_fp_state
, fpscr
) !=
55 offsetof(struct thread_fp_state
, fpr
[32]));
57 flush_fp_to_thread(target
);
59 return user_regset_copyin(&pos
, &count
, &kbuf
, &ubuf
,
60 &target
->thread
.fp_state
, 0, -1);