Lines Matching refs:regs

42 static long restore_fp_state(struct pt_regs *regs,
52 fstate_restore(current, regs);
56 static long save_fp_state(struct pt_regs *regs,
62 fstate_save(current, regs);
67 #define save_fp_state(task, regs) (0)
68 #define restore_fp_state(task, regs) (0)
73 static long save_v_state(struct pt_regs *regs, void __user **sc_vec)
90 riscv_v_vstate_save(&current->thread.vstate, regs);
116 static long __restore_v_state(struct pt_regs *regs, void __user *sc_vec)
127 riscv_v_vstate_set_restore(current, regs);
146 #define save_v_state(task, regs) (0)
147 #define __restore_v_state(task, regs) (0)
150 static long restore_sigcontext(struct pt_regs *regs,
157 err = __copy_from_user(regs, &sc->sc_regs, sizeof(sc->sc_regs));
163 err = restore_fp_state(regs, &sc->sc_fpregs);
192 if (!has_vector() || !riscv_v_vstate_query(regs) ||
196 err = __restore_v_state(regs, sc_ext_ptr);
233 struct pt_regs *regs = current_pt_regs();
242 frame = (struct rt_sigframe __user *)regs->sp;
252 if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
258 regs->cause = -1UL;
260 return regs->a0;
268 frame, (void *)regs->epc, (void *)regs->sp);
275 struct pt_regs *regs)
282 err = __copy_to_user(&sc->sc_regs, regs, sizeof(sc->sc_regs));
285 err |= save_fp_state(regs, &sc->sc_fpregs);
287 if (has_vector() && riscv_v_vstate_query(regs))
288 err |= save_v_state(regs, (void __user **)&sc_ext_ptr);
299 struct pt_regs *regs, size_t framesize)
303 sp = regs->sp;
322 struct pt_regs *regs)
329 frame = get_sigframe(ksig, regs, frame_size);
338 err |= __save_altstack(&frame->uc.uc_stack, regs->sp);
339 err |= setup_sigcontext(frame, regs);
346 regs->ra = (unsigned long)VDSO_SYMBOL(
361 regs->ra = addr;
371 regs->epc = (unsigned long)ksig->ka.sa.sa_handler;
372 regs->sp = (unsigned long)frame;
373 regs->a0 = ksig->sig; /* a0: signal number */
374 regs->a1 = (unsigned long)(&frame->info); /* a1: siginfo pointer */
375 regs->a2 = (unsigned long)(&frame->uc); /* a2: ucontext pointer */
380 (void *)regs->epc, (void *)regs->ra, frame);
386 static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
391 rseq_signal_deliver(ksig, regs);
395 ret = compat_setup_rt_frame(ksig, oldset, regs);
397 ret = setup_rt_frame(ksig, oldset, regs);
402 void arch_do_signal_or_restart(struct pt_regs *regs)
407 bool syscall = (regs->cause == EXC_SYSCALL);
411 continue_addr = regs->epc;
413 retval = regs->a0;
416 regs->cause = -1UL;
427 regs->a0 = regs->orig_a0;
428 regs->epc = restart_addr;
443 if (regs->epc == restart_addr &&
448 regs->a0 = -EINTR;
449 regs->epc = continue_addr;
453 handle_signal(&ksig, regs);
461 if (syscall && regs->epc == restart_addr && retval == -ERESTART_RESTARTBLOCK)
462 regs->a7 = __NR_restart_syscall;