arch/riscv/net/bpf_jit.h
Source file repositories/reference/linux-study-clean/arch/riscv/net/bpf_jit.h
File Facts
- System
- Linux kernel
- Corpus path
arch/riscv/net/bpf_jit.h- Extension
.h- Size
- 30403 bytes
- Lines
- 1331
- Domain
- Architecture Layer
- Bucket
- arch/riscv
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/bpf.hlinux/filter.h
Detected Declarations
struct rv_jit_contextstruct rv_jit_datafunction Copyrightfunction is_cregfunction ninsns_rvofffunction bpf_fill_ill_insnsfunction emitfunction emitcfunction epilogue_offsetfunction invert_bpf_condfunction is_6b_intfunction is_7b_uintfunction is_8b_uintfunction is_9b_uintfunction is_10b_intfunction is_10b_uintfunction is_12b_intfunction is_12b_checkfunction is_13b_intfunction is_21b_intfunction rv_offsetfunction rv_r_insnfunction rv_i_insnfunction rv_s_insnfunction rv_b_insnfunction rv_u_insnfunction rv_j_insnfunction rv_amo_insnfunction rv_cr_insnfunction rv_ci_insnfunction rv_css_insnfunction rv_ciw_insnfunction rv_cl_insnfunction rv_cs_insnfunction rv_ca_insnfunction rv_cb_insnfunction rv_addifunction rv_andifunction rv_orifunction rv_xorifunction rv_sllifunction rv_srlifunction rv_sraifunction rv_luifunction rv_auipcfunction rv_addfunction rv_subfunction rv_sltu
Annotated Snippet
struct rv_jit_context {
struct bpf_prog *prog;
u16 *insns; /* RV insns */
u16 *ro_insns;
int ninsns;
int prologue_len;
int epilogue_offset;
int *offset; /* BPF to RV */
int nexentries;
int ex_insn_off;
int ex_jmp_off;
unsigned long flags;
int stack_size;
u64 arena_vm_start;
u64 user_vm_start;
};
/* Convert from ninsns to bytes. */
static inline int ninsns_rvoff(int ninsns)
{
return ninsns << 1;
}
struct rv_jit_data {
struct bpf_binary_header *header;
struct bpf_binary_header *ro_header;
u8 *image;
u8 *ro_image;
struct rv_jit_context ctx;
};
static inline void bpf_fill_ill_insns(void *area, unsigned int size)
{
memset(area, 0, size);
}
/* Emit a 4-byte riscv instruction. */
static inline void emit(const u32 insn, struct rv_jit_context *ctx)
{
if (ctx->insns) {
ctx->insns[ctx->ninsns] = insn;
ctx->insns[ctx->ninsns + 1] = (insn >> 16);
}
ctx->ninsns += 2;
}
/* Emit a 2-byte riscv compressed instruction. */
static inline void emitc(const u16 insn, struct rv_jit_context *ctx)
{
BUILD_BUG_ON(!rvc_enabled());
if (ctx->insns)
ctx->insns[ctx->ninsns] = insn;
ctx->ninsns++;
}
static inline int epilogue_offset(struct rv_jit_context *ctx)
{
int to = ctx->epilogue_offset, from = ctx->ninsns;
return ninsns_rvoff(to - from);
}
/* Return -1 or inverted cond. */
static inline int invert_bpf_cond(u8 cond)
{
switch (cond) {
case BPF_JEQ:
return BPF_JNE;
case BPF_JGT:
return BPF_JLE;
case BPF_JLT:
return BPF_JGE;
case BPF_JGE:
return BPF_JLT;
case BPF_JLE:
return BPF_JGT;
case BPF_JNE:
return BPF_JEQ;
case BPF_JSGT:
return BPF_JSLE;
case BPF_JSLT:
return BPF_JSGE;
case BPF_JSGE:
return BPF_JSLT;
case BPF_JSLE:
return BPF_JSGT;
}
Annotation
- Immediate include surface: `linux/bpf.h`, `linux/filter.h`.
- Detected declarations: `struct rv_jit_context`, `struct rv_jit_data`, `function Copyright`, `function is_creg`, `function ninsns_rvoff`, `function bpf_fill_ill_insns`, `function emit`, `function emitc`, `function epilogue_offset`, `function invert_bpf_cond`.
- Atlas domain: Architecture Layer / arch/riscv.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.