static long save_fp_state(struct pt_regs *regs, union __riscv_fp_state *sc_fpregs) { long err; struct __riscv_d_ext_state __user *state = &sc_fpregs->d; size_t i; fstate_save(current, regs); err = __copy_to_user(state, ¤t->thread.fstate, sizeof(*state)); if (unlikely(err)) return err; /* We support no other extension state at this time. */ for (i = 0; i < ARRAY_SIZE(sc_fpregs->q.reserved); i++) { err = __put_user(0, &sc_fpregs->q.reserved[i]); if (unlikely(err)) break; } return err; }
int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) { fstate_save(src, task_pt_regs(src)); *dst = *src; return 0; }