riscv: switch to ->regset_get()

Note: riscv_fpr_get() used to forget to zero-pad at the end.
Not worth -stable...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2020-06-16 14:04:53 -04:00
parent c7a0faa21e
commit 2cb6cd495d

View File

@ -30,13 +30,10 @@ enum riscv_regset {
static int riscv_gpr_get(struct task_struct *target, static int riscv_gpr_get(struct task_struct *target,
const struct user_regset *regset, const struct user_regset *regset,
unsigned int pos, unsigned int count, struct membuf to)
void *kbuf, void __user *ubuf)
{ {
struct pt_regs *regs; return membuf_write(&to, task_pt_regs(target),
sizeof(struct user_regs_struct));
regs = task_pt_regs(target);
return user_regset_copyout(&pos, &count, &kbuf, &ubuf, regs, 0, -1);
} }
static int riscv_gpr_set(struct task_struct *target, static int riscv_gpr_set(struct task_struct *target,
@ -55,21 +52,13 @@ static int riscv_gpr_set(struct task_struct *target,
#ifdef CONFIG_FPU #ifdef CONFIG_FPU
static int riscv_fpr_get(struct task_struct *target, static int riscv_fpr_get(struct task_struct *target,
const struct user_regset *regset, const struct user_regset *regset,
unsigned int pos, unsigned int count, struct membuf to)
void *kbuf, void __user *ubuf)
{ {
int ret;
struct __riscv_d_ext_state *fstate = &target->thread.fstate; struct __riscv_d_ext_state *fstate = &target->thread.fstate;
ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, fstate, 0, membuf_write(&to, fstate, offsetof(struct __riscv_d_ext_state, fcsr));
offsetof(struct __riscv_d_ext_state, fcsr)); membuf_store(&to, fstate->fcsr);
if (!ret) { return membuf_zero(&to, 4); // explicitly pad
ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, fstate, 0,
offsetof(struct __riscv_d_ext_state, fcsr) +
sizeof(fstate->fcsr));
}
return ret;
} }
static int riscv_fpr_set(struct task_struct *target, static int riscv_fpr_set(struct task_struct *target,
@ -98,8 +87,8 @@ static const struct user_regset riscv_user_regset[] = {
.n = ELF_NGREG, .n = ELF_NGREG,
.size = sizeof(elf_greg_t), .size = sizeof(elf_greg_t),
.align = sizeof(elf_greg_t), .align = sizeof(elf_greg_t),
.get = &riscv_gpr_get, .regset_get = riscv_gpr_get,
.set = &riscv_gpr_set, .set = riscv_gpr_set,
}, },
#ifdef CONFIG_FPU #ifdef CONFIG_FPU
[REGSET_F] = { [REGSET_F] = {
@ -107,8 +96,8 @@ static const struct user_regset riscv_user_regset[] = {
.n = ELF_NFPREG, .n = ELF_NFPREG,
.size = sizeof(elf_fpreg_t), .size = sizeof(elf_fpreg_t),
.align = sizeof(elf_fpreg_t), .align = sizeof(elf_fpreg_t),
.get = &riscv_fpr_get, .regset_get = riscv_fpr_get,
.set = &riscv_fpr_set, .set = riscv_fpr_set,
}, },
#endif #endif
}; };