1*3fbf3534SGeorge Guo/* SPDX-License-Identifier: GPL-2.0 */ 2*3fbf3534SGeorge Guo/* 3*3fbf3534SGeorge Guo * Author: George Guo <guodongtai@kylinos.cn> 4*3fbf3534SGeorge Guo * Copyright (C) 2026 KylinSoft Corporation. 5*3fbf3534SGeorge Guo */ 6*3fbf3534SGeorge Guo 7*3fbf3534SGeorge Guo#include <asm/asmmacro.h> 8*3fbf3534SGeorge Guo#include <asm/regdef.h> 9*3fbf3534SGeorge Guo#include <linux/export.h> 10*3fbf3534SGeorge Guo#include <linux/linkage.h> 11*3fbf3534SGeorge Guo 12*3fbf3534SGeorge GuoSYM_FUNC_START(arch_bpf_timed_may_goto) 13*3fbf3534SGeorge Guo addi.d sp, sp, -64 14*3fbf3534SGeorge Guo st.d ra, sp, 56 15*3fbf3534SGeorge Guo 16*3fbf3534SGeorge Guo /* Save BPF registers R0 - R5 (a5, a0 - a4) */ 17*3fbf3534SGeorge Guo st.d a5, sp, 8 18*3fbf3534SGeorge Guo st.d a0, sp, 16 19*3fbf3534SGeorge Guo st.d a1, sp, 24 20*3fbf3534SGeorge Guo st.d a2, sp, 32 21*3fbf3534SGeorge Guo st.d a3, sp, 40 22*3fbf3534SGeorge Guo st.d a4, sp, 48 23*3fbf3534SGeorge Guo 24*3fbf3534SGeorge Guo /* 25*3fbf3534SGeorge Guo * BPF_REG_AX (t0) holds the offset passed in by the verifier; 26*3fbf3534SGeorge Guo * add it to BPF_REG_FP (s4) to get the pointer to the count and 27*3fbf3534SGeorge Guo * timestamp, then pass it as the first argument in a0. 28*3fbf3534SGeorge Guo * 29*3fbf3534SGeorge Guo * The verifier emits a load using FP right before this call, 30*3fbf3534SGeorge Guo * so BPF_REG_FP (s4) is always set up by the JIT in this case. 31*3fbf3534SGeorge Guo */ 32*3fbf3534SGeorge Guo add.d a0, t0, s4 33*3fbf3534SGeorge Guo bl bpf_check_timed_may_goto 34*3fbf3534SGeorge Guo /* BPF_REG_AX (t0) will be stored into count, so move the return value to it. */ 35*3fbf3534SGeorge Guo move t0, a0 36*3fbf3534SGeorge Guo 37*3fbf3534SGeorge Guo ld.d ra, sp, 56 38*3fbf3534SGeorge Guo ld.d a5, sp, 8 39*3fbf3534SGeorge Guo ld.d a0, sp, 16 40*3fbf3534SGeorge Guo ld.d a1, sp, 24 41*3fbf3534SGeorge Guo ld.d a2, sp, 32 42*3fbf3534SGeorge Guo ld.d a3, sp, 40 43*3fbf3534SGeorge Guo ld.d a4, sp, 48 44*3fbf3534SGeorge Guo addi.d sp, sp, 64 45*3fbf3534SGeorge Guo 46*3fbf3534SGeorge Guo jr ra 47*3fbf3534SGeorge GuoSYM_FUNC_END(arch_bpf_timed_may_goto) 48