[RFC PATCH 12/25] kvx: Add system call support

Thomas Gleixner tglx at linutronix.de
Mon Jan 9 12:55:08 PST 2023


On Tue, Jan 03 2023 at 17:43, Yann Sionneau wrote:
> +/***********************************************************************
> +*                  Common exception return path
> +***********************************************************************/
> +/**
> + * Restore registers after exception
> + * When entering this macro, $sp must be located right before regs
> + * storage.
> + */
> +EXCEPTION_ENTRY(return_from_exception)
> +#ifdef CONFIG_DEBUG_EXCEPTION_STACK
> +	ld $r1 = 0[$sp]
> +	;;
> +	sbfd $r1 = $r1, $sp
> +	;;
> +	cb.deqz $r1, _check_ok
> +	;;
> +	make $r2 = panic
> +	make $r0 = stack_error_panic_str_label
> +	;;
> +	icall $r2
> +	;;
> +_check_ok:
> +	addd $sp = $sp, STACK_REG_SIZE
> +	;;
> +#endif
> +	get $r11 = $sr
> +	/* Load sps value from saved registers */
> +	ld $r6 = PT_SPS[$sp]
> +	;;
> +	/* Disable interrupt to check task flags atomically */
> +	disable_interrupt $r60
> +	;;
> +	/* Check PL bit of sps, if set, then it means we are returning
> +	 * to a lower privilege level (ie to user), if so, we need to
> +	 * check work pending. If coming from kernel, directly go to
> +	 * register restoration */
> +	cb.even $r6? _restore_regs
> +	ld $r1 = TASK_TI_FLAGS[$r11]
> +	;;
> +	/* Do we have work pending ? */
> +	andd $r5 = $r1, _TIF_WORK_MASK

Please use the generic entry code to handle pending work, tracing etc.

All over the place....

Thanks,

        tglx



More information about the linux-riscv mailing list