Linux Audio

Check our new training course

Linux kernel drivers training

Mar 31-Apr 9, 2025, special US time zones
Register
Loading...
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * bpf_jit_comp64.c: eBPF JIT compiler
   4 *
   5 * Copyright 2016 Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
   6 *		  IBM Corporation
   7 *
   8 * Based on the powerpc classic BPF JIT compiler by Matt Evans
   9 */
  10#include <linux/moduleloader.h>
  11#include <asm/cacheflush.h>
  12#include <asm/asm-compat.h>
  13#include <linux/netdevice.h>
  14#include <linux/filter.h>
  15#include <linux/if_vlan.h>
  16#include <asm/kprobes.h>
  17#include <linux/bpf.h>
  18#include <asm/security_features.h>
  19
  20#include "bpf_jit.h"
  21
  22/*
  23 * Stack layout:
  24 * Ensure the top half (upto local_tmp_var) stays consistent
  25 * with our redzone usage.
  26 *
  27 *		[	prev sp		] <-------------
  28 *		[   nv gpr save area	] 5*8		|
  29 *		[    tail_call_cnt	] 8		|
  30 *		[    local_tmp_var	] 16		|
  31 * fp (r31) -->	[   ebpf stack space	] upto 512	|
  32 *		[     frame header	] 32/112	|
  33 * sp (r1) --->	[    stack pointer	] --------------
  34 */
  35
  36/* for gpr non volatile registers BPG_REG_6 to 10 */
  37#define BPF_PPC_STACK_SAVE	(5*8)
  38/* for bpf JIT code internal usage */
  39#define BPF_PPC_STACK_LOCALS	24
  40/* stack frame excluding BPF stack, ensure this is quadword aligned */
  41#define BPF_PPC_STACKFRAME	(STACK_FRAME_MIN_SIZE + \
  42				 BPF_PPC_STACK_LOCALS + BPF_PPC_STACK_SAVE)
  43
  44/* BPF register usage */
  45#define TMP_REG_1	(MAX_BPF_JIT_REG + 0)
  46#define TMP_REG_2	(MAX_BPF_JIT_REG + 1)
  47
  48/* BPF to ppc register mappings */
  49void bpf_jit_init_reg_mapping(struct codegen_context *ctx)
  50{
  51	/* function return value */
  52	ctx->b2p[BPF_REG_0] = _R8;
  53	/* function arguments */
  54	ctx->b2p[BPF_REG_1] = _R3;
  55	ctx->b2p[BPF_REG_2] = _R4;
  56	ctx->b2p[BPF_REG_3] = _R5;
  57	ctx->b2p[BPF_REG_4] = _R6;
  58	ctx->b2p[BPF_REG_5] = _R7;
  59	/* non volatile registers */
  60	ctx->b2p[BPF_REG_6] = _R27;
  61	ctx->b2p[BPF_REG_7] = _R28;
  62	ctx->b2p[BPF_REG_8] = _R29;
  63	ctx->b2p[BPF_REG_9] = _R30;
  64	/* frame pointer aka BPF_REG_10 */
  65	ctx->b2p[BPF_REG_FP] = _R31;
  66	/* eBPF jit internal registers */
  67	ctx->b2p[BPF_REG_AX] = _R12;
  68	ctx->b2p[TMP_REG_1] = _R9;
  69	ctx->b2p[TMP_REG_2] = _R10;
  70}
  71
  72/* PPC NVR range -- update this if we ever use NVRs below r27 */
  73#define BPF_PPC_NVR_MIN		_R27
  74
  75static inline bool bpf_has_stack_frame(struct codegen_context *ctx)
  76{
  77	/*
  78	 * We only need a stack frame if:
  79	 * - we call other functions (kernel helpers), or
  80	 * - the bpf program uses its stack area
  81	 * The latter condition is deduced from the usage of BPF_REG_FP
  82	 */
  83	return ctx->seen & SEEN_FUNC || bpf_is_seen_register(ctx, bpf_to_ppc(BPF_REG_FP));
  84}
  85
  86/*
  87 * When not setting up our own stackframe, the redzone usage is:
  88 *
  89 *		[	prev sp		] <-------------
  90 *		[	  ...       	] 		|
  91 * sp (r1) --->	[    stack pointer	] --------------
  92 *		[   nv gpr save area	] 5*8
  93 *		[    tail_call_cnt	] 8
  94 *		[    local_tmp_var	] 16
  95 *		[   unused red zone	] 208 bytes protected
  96 */
  97static int bpf_jit_stack_local(struct codegen_context *ctx)
  98{
  99	if (bpf_has_stack_frame(ctx))
 100		return STACK_FRAME_MIN_SIZE + ctx->stack_size;
 101	else
 102		return -(BPF_PPC_STACK_SAVE + 24);
 103}
 104
 105static int bpf_jit_stack_tailcallcnt(struct codegen_context *ctx)
 106{
 107	return bpf_jit_stack_local(ctx) + 16;
 108}
 109
 110static int bpf_jit_stack_offsetof(struct codegen_context *ctx, int reg)
 111{
 112	if (reg >= BPF_PPC_NVR_MIN && reg < 32)
 113		return (bpf_has_stack_frame(ctx) ?
 114			(BPF_PPC_STACKFRAME + ctx->stack_size) : 0)
 115				- (8 * (32 - reg));
 116
 117	pr_err("BPF JIT is asking about unknown registers");
 118	BUG();
 119}
 120
 121void bpf_jit_realloc_regs(struct codegen_context *ctx)
 122{
 123}
 124
 125void bpf_jit_build_prologue(u32 *image, struct codegen_context *ctx)
 126{
 127	int i;
 128
 129#ifndef CONFIG_PPC_KERNEL_PCREL
 130	if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
 131		EMIT(PPC_RAW_LD(_R2, _R13, offsetof(struct paca_struct, kernel_toc)));
 132#endif
 133
 134	/*
 135	 * Initialize tail_call_cnt if we do tail calls.
 136	 * Otherwise, put in NOPs so that it can be skipped when we are
 137	 * invoked through a tail call.
 138	 */
 139	if (ctx->seen & SEEN_TAILCALL) {
 140		EMIT(PPC_RAW_LI(bpf_to_ppc(TMP_REG_1), 0));
 141		/* this goes in the redzone */
 142		EMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, -(BPF_PPC_STACK_SAVE + 8)));
 143	} else {
 144		EMIT(PPC_RAW_NOP());
 145		EMIT(PPC_RAW_NOP());
 146	}
 147
 148	if (bpf_has_stack_frame(ctx)) {
 149		/*
 150		 * We need a stack frame, but we don't necessarily need to
 151		 * save/restore LR unless we call other functions
 152		 */
 153		if (ctx->seen & SEEN_FUNC) {
 154			EMIT(PPC_RAW_MFLR(_R0));
 155			EMIT(PPC_RAW_STD(_R0, _R1, PPC_LR_STKOFF));
 156		}
 157
 158		EMIT(PPC_RAW_STDU(_R1, _R1, -(BPF_PPC_STACKFRAME + ctx->stack_size)));
 159	}
 160
 161	/*
 162	 * Back up non-volatile regs -- BPF registers 6-10
 163	 * If we haven't created our own stack frame, we save these
 164	 * in the protected zone below the previous stack frame
 165	 */
 166	for (i = BPF_REG_6; i <= BPF_REG_10; i++)
 167		if (bpf_is_seen_register(ctx, bpf_to_ppc(i)))
 168			EMIT(PPC_RAW_STD(bpf_to_ppc(i), _R1, bpf_jit_stack_offsetof(ctx, bpf_to_ppc(i))));
 169
 170	/* Setup frame pointer to point to the bpf stack area */
 171	if (bpf_is_seen_register(ctx, bpf_to_ppc(BPF_REG_FP)))
 172		EMIT(PPC_RAW_ADDI(bpf_to_ppc(BPF_REG_FP), _R1,
 173				STACK_FRAME_MIN_SIZE + ctx->stack_size));
 174}
 175
 176static void bpf_jit_emit_common_epilogue(u32 *image, struct codegen_context *ctx)
 177{
 178	int i;
 179
 180	/* Restore NVRs */
 181	for (i = BPF_REG_6; i <= BPF_REG_10; i++)
 182		if (bpf_is_seen_register(ctx, bpf_to_ppc(i)))
 183			EMIT(PPC_RAW_LD(bpf_to_ppc(i), _R1, bpf_jit_stack_offsetof(ctx, bpf_to_ppc(i))));
 184
 185	/* Tear down our stack frame */
 186	if (bpf_has_stack_frame(ctx)) {
 187		EMIT(PPC_RAW_ADDI(_R1, _R1, BPF_PPC_STACKFRAME + ctx->stack_size));
 188		if (ctx->seen & SEEN_FUNC) {
 189			EMIT(PPC_RAW_LD(_R0, _R1, PPC_LR_STKOFF));
 190			EMIT(PPC_RAW_MTLR(_R0));
 191		}
 192	}
 193}
 194
 195void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx)
 196{
 197	bpf_jit_emit_common_epilogue(image, ctx);
 198
 199	/* Move result to r3 */
 200	EMIT(PPC_RAW_MR(_R3, bpf_to_ppc(BPF_REG_0)));
 201
 202	EMIT(PPC_RAW_BLR());
 203}
 204
 205static int bpf_jit_emit_func_call_hlp(u32 *image, struct codegen_context *ctx, u64 func)
 206{
 207	unsigned long func_addr = func ? ppc_function_entry((void *)func) : 0;
 208	long reladdr;
 209
 210	if (WARN_ON_ONCE(!core_kernel_text(func_addr)))
 211		return -EINVAL;
 212
 213	if (IS_ENABLED(CONFIG_PPC_KERNEL_PCREL)) {
 214		reladdr = func_addr - CTX_NIA(ctx);
 215
 216		if (reladdr >= (long)SZ_8G || reladdr < -(long)SZ_8G) {
 217			pr_err("eBPF: address of %ps out of range of pcrel address.\n",
 218				(void *)func);
 219			return -ERANGE;
 220		}
 221		/* pla r12,addr */
 222		EMIT(PPC_PREFIX_MLS | __PPC_PRFX_R(1) | IMM_H18(reladdr));
 223		EMIT(PPC_INST_PADDI | ___PPC_RT(_R12) | IMM_L(reladdr));
 224		EMIT(PPC_RAW_MTCTR(_R12));
 225		EMIT(PPC_RAW_BCTR());
 226
 227	} else {
 228		reladdr = func_addr - kernel_toc_addr();
 229		if (reladdr > 0x7FFFFFFF || reladdr < -(0x80000000L)) {
 230			pr_err("eBPF: address of %ps out of range of kernel_toc.\n", (void *)func);
 231			return -ERANGE;
 232		}
 233
 234		EMIT(PPC_RAW_ADDIS(_R12, _R2, PPC_HA(reladdr)));
 235		EMIT(PPC_RAW_ADDI(_R12, _R12, PPC_LO(reladdr)));
 236		EMIT(PPC_RAW_MTCTR(_R12));
 237		EMIT(PPC_RAW_BCTRL());
 238	}
 239
 240	return 0;
 241}
 242
 243int bpf_jit_emit_func_call_rel(u32 *image, u32 *fimage, struct codegen_context *ctx, u64 func)
 244{
 245	unsigned int i, ctx_idx = ctx->idx;
 246
 247	if (WARN_ON_ONCE(func && is_module_text_address(func)))
 248		return -EINVAL;
 249
 250	/* skip past descriptor if elf v1 */
 251	func += FUNCTION_DESCR_SIZE;
 252
 253	/* Load function address into r12 */
 254	PPC_LI64(_R12, func);
 255
 256	/* For bpf-to-bpf function calls, the callee's address is unknown
 257	 * until the last extra pass. As seen above, we use PPC_LI64() to
 258	 * load the callee's address, but this may optimize the number of
 259	 * instructions required based on the nature of the address.
 260	 *
 261	 * Since we don't want the number of instructions emitted to increase,
 262	 * we pad the optimized PPC_LI64() call with NOPs to guarantee that
 263	 * we always have a five-instruction sequence, which is the maximum
 264	 * that PPC_LI64() can emit.
 265	 */
 266	if (!image)
 267		for (i = ctx->idx - ctx_idx; i < 5; i++)
 268			EMIT(PPC_RAW_NOP());
 269
 270	EMIT(PPC_RAW_MTCTR(_R12));
 271	EMIT(PPC_RAW_BCTRL());
 272
 273	return 0;
 274}
 275
 276static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out)
 277{
 278	/*
 279	 * By now, the eBPF program has already setup parameters in r3, r4 and r5
 280	 * r3/BPF_REG_1 - pointer to ctx -- passed as is to the next bpf program
 281	 * r4/BPF_REG_2 - pointer to bpf_array
 282	 * r5/BPF_REG_3 - index in bpf_array
 283	 */
 284	int b2p_bpf_array = bpf_to_ppc(BPF_REG_2);
 285	int b2p_index = bpf_to_ppc(BPF_REG_3);
 286	int bpf_tailcall_prologue_size = 8;
 287
 288	if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
 289		bpf_tailcall_prologue_size += 4; /* skip past the toc load */
 290
 291	/*
 292	 * if (index >= array->map.max_entries)
 293	 *   goto out;
 294	 */
 295	EMIT(PPC_RAW_LWZ(bpf_to_ppc(TMP_REG_1), b2p_bpf_array, offsetof(struct bpf_array, map.max_entries)));
 296	EMIT(PPC_RAW_RLWINM(b2p_index, b2p_index, 0, 0, 31));
 297	EMIT(PPC_RAW_CMPLW(b2p_index, bpf_to_ppc(TMP_REG_1)));
 298	PPC_BCC_SHORT(COND_GE, out);
 299
 300	/*
 301	 * if (tail_call_cnt >= MAX_TAIL_CALL_CNT)
 302	 *   goto out;
 303	 */
 304	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), _R1, bpf_jit_stack_tailcallcnt(ctx)));
 305	EMIT(PPC_RAW_CMPLWI(bpf_to_ppc(TMP_REG_1), MAX_TAIL_CALL_CNT));
 306	PPC_BCC_SHORT(COND_GE, out);
 307
 308	/*
 309	 * tail_call_cnt++;
 310	 */
 311	EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), 1));
 312	EMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, bpf_jit_stack_tailcallcnt(ctx)));
 313
 314	/* prog = array->ptrs[index]; */
 315	EMIT(PPC_RAW_MULI(bpf_to_ppc(TMP_REG_1), b2p_index, 8));
 316	EMIT(PPC_RAW_ADD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), b2p_bpf_array));
 317	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_array, ptrs)));
 318
 319	/*
 320	 * if (prog == NULL)
 321	 *   goto out;
 322	 */
 323	EMIT(PPC_RAW_CMPLDI(bpf_to_ppc(TMP_REG_1), 0));
 324	PPC_BCC_SHORT(COND_EQ, out);
 325
 326	/* goto *(prog->bpf_func + prologue_size); */
 327	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_prog, bpf_func)));
 328	EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1),
 329			FUNCTION_DESCR_SIZE + bpf_tailcall_prologue_size));
 330	EMIT(PPC_RAW_MTCTR(bpf_to_ppc(TMP_REG_1)));
 331
 332	/* tear down stack, restore NVRs, ... */
 333	bpf_jit_emit_common_epilogue(image, ctx);
 334
 335	EMIT(PPC_RAW_BCTR());
 336
 337	/* out: */
 338	return 0;
 339}
 340
 341/*
 342 * We spill into the redzone always, even if the bpf program has its own stackframe.
 343 * Offsets hardcoded based on BPF_PPC_STACK_SAVE -- see bpf_jit_stack_local()
 344 */
 345void bpf_stf_barrier(void);
 346
 347asm (
 348"		.global bpf_stf_barrier		;"
 349"	bpf_stf_barrier:			;"
 350"		std	21,-64(1)		;"
 351"		std	22,-56(1)		;"
 352"		sync				;"
 353"		ld	21,-64(1)		;"
 354"		ld	22,-56(1)		;"
 355"		ori	31,31,0			;"
 356"		.rept 14			;"
 357"		b	1f			;"
 358"	1:					;"
 359"		.endr				;"
 360"		blr				;"
 361);
 362
 363/* Assemble the body code between the prologue & epilogue */
 364int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, u32 *fimage, struct codegen_context *ctx,
 365		       u32 *addrs, int pass, bool extra_pass)
 366{
 367	enum stf_barrier_type stf_barrier = stf_barrier_type_get();
 368	const struct bpf_insn *insn = fp->insnsi;
 369	int flen = fp->len;
 370	int i, ret;
 371
 372	/* Start of epilogue code - will only be valid 2nd pass onwards */
 373	u32 exit_addr = addrs[flen];
 374
 375	for (i = 0; i < flen; i++) {
 376		u32 code = insn[i].code;
 377		u32 dst_reg = bpf_to_ppc(insn[i].dst_reg);
 378		u32 src_reg = bpf_to_ppc(insn[i].src_reg);
 379		u32 size = BPF_SIZE(code);
 380		u32 tmp1_reg = bpf_to_ppc(TMP_REG_1);
 381		u32 tmp2_reg = bpf_to_ppc(TMP_REG_2);
 382		u32 save_reg, ret_reg;
 383		s16 off = insn[i].off;
 384		s32 imm = insn[i].imm;
 385		bool func_addr_fixed;
 386		u64 func_addr;
 387		u64 imm64;
 388		u32 true_cond;
 389		u32 tmp_idx;
 390		int j;
 391
 392		/*
 393		 * addrs[] maps a BPF bytecode address into a real offset from
 394		 * the start of the body code.
 395		 */
 396		addrs[i] = ctx->idx * 4;
 397
 398		/*
 399		 * As an optimization, we note down which non-volatile registers
 400		 * are used so that we can only save/restore those in our
 401		 * prologue and epilogue. We do this here regardless of whether
 402		 * the actual BPF instruction uses src/dst registers or not
 403		 * (for instance, BPF_CALL does not use them). The expectation
 404		 * is that those instructions will have src_reg/dst_reg set to
 405		 * 0. Even otherwise, we just lose some prologue/epilogue
 406		 * optimization but everything else should work without
 407		 * any issues.
 408		 */
 409		if (dst_reg >= BPF_PPC_NVR_MIN && dst_reg < 32)
 410			bpf_set_seen_register(ctx, dst_reg);
 411		if (src_reg >= BPF_PPC_NVR_MIN && src_reg < 32)
 412			bpf_set_seen_register(ctx, src_reg);
 413
 414		switch (code) {
 415		/*
 416		 * Arithmetic operations: ADD/SUB/MUL/DIV/MOD/NEG
 417		 */
 418		case BPF_ALU | BPF_ADD | BPF_X: /* (u32) dst += (u32) src */
 419		case BPF_ALU64 | BPF_ADD | BPF_X: /* dst += src */
 420			EMIT(PPC_RAW_ADD(dst_reg, dst_reg, src_reg));
 421			goto bpf_alu32_trunc;
 422		case BPF_ALU | BPF_SUB | BPF_X: /* (u32) dst -= (u32) src */
 423		case BPF_ALU64 | BPF_SUB | BPF_X: /* dst -= src */
 424			EMIT(PPC_RAW_SUB(dst_reg, dst_reg, src_reg));
 425			goto bpf_alu32_trunc;
 426		case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
 427		case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
 428			if (!imm) {
 429				goto bpf_alu32_trunc;
 430			} else if (imm >= -32768 && imm < 32768) {
 431				EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(imm)));
 432			} else {
 433				PPC_LI32(tmp1_reg, imm);
 434				EMIT(PPC_RAW_ADD(dst_reg, dst_reg, tmp1_reg));
 435			}
 436			goto bpf_alu32_trunc;
 437		case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
 438		case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
 439			if (!imm) {
 440				goto bpf_alu32_trunc;
 441			} else if (imm > -32768 && imm <= 32768) {
 442				EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(-imm)));
 443			} else {
 444				PPC_LI32(tmp1_reg, imm);
 445				EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 446			}
 447			goto bpf_alu32_trunc;
 448		case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */
 449		case BPF_ALU64 | BPF_MUL | BPF_X: /* dst *= src */
 450			if (BPF_CLASS(code) == BPF_ALU)
 451				EMIT(PPC_RAW_MULW(dst_reg, dst_reg, src_reg));
 452			else
 453				EMIT(PPC_RAW_MULD(dst_reg, dst_reg, src_reg));
 454			goto bpf_alu32_trunc;
 455		case BPF_ALU | BPF_MUL | BPF_K: /* (u32) dst *= (u32) imm */
 456		case BPF_ALU64 | BPF_MUL | BPF_K: /* dst *= imm */
 457			if (imm >= -32768 && imm < 32768)
 458				EMIT(PPC_RAW_MULI(dst_reg, dst_reg, IMM_L(imm)));
 459			else {
 460				PPC_LI32(tmp1_reg, imm);
 461				if (BPF_CLASS(code) == BPF_ALU)
 462					EMIT(PPC_RAW_MULW(dst_reg, dst_reg, tmp1_reg));
 463				else
 464					EMIT(PPC_RAW_MULD(dst_reg, dst_reg, tmp1_reg));
 465			}
 466			goto bpf_alu32_trunc;
 467		case BPF_ALU | BPF_DIV | BPF_X: /* (u32) dst /= (u32) src */
 468		case BPF_ALU | BPF_MOD | BPF_X: /* (u32) dst %= (u32) src */
 469			if (BPF_OP(code) == BPF_MOD) {
 470				EMIT(PPC_RAW_DIVWU(tmp1_reg, dst_reg, src_reg));
 471				EMIT(PPC_RAW_MULW(tmp1_reg, src_reg, tmp1_reg));
 472				EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 473			} else
 474				EMIT(PPC_RAW_DIVWU(dst_reg, dst_reg, src_reg));
 475			goto bpf_alu32_trunc;
 476		case BPF_ALU64 | BPF_DIV | BPF_X: /* dst /= src */
 477		case BPF_ALU64 | BPF_MOD | BPF_X: /* dst %= src */
 478			if (BPF_OP(code) == BPF_MOD) {
 479				EMIT(PPC_RAW_DIVDU(tmp1_reg, dst_reg, src_reg));
 480				EMIT(PPC_RAW_MULD(tmp1_reg, src_reg, tmp1_reg));
 481				EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 482			} else
 483				EMIT(PPC_RAW_DIVDU(dst_reg, dst_reg, src_reg));
 484			break;
 485		case BPF_ALU | BPF_MOD | BPF_K: /* (u32) dst %= (u32) imm */
 486		case BPF_ALU | BPF_DIV | BPF_K: /* (u32) dst /= (u32) imm */
 487		case BPF_ALU64 | BPF_MOD | BPF_K: /* dst %= imm */
 488		case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
 489			if (imm == 0)
 490				return -EINVAL;
 491			if (imm == 1) {
 492				if (BPF_OP(code) == BPF_DIV) {
 493					goto bpf_alu32_trunc;
 494				} else {
 495					EMIT(PPC_RAW_LI(dst_reg, 0));
 496					break;
 497				}
 498			}
 499
 500			PPC_LI32(tmp1_reg, imm);
 501			switch (BPF_CLASS(code)) {
 502			case BPF_ALU:
 503				if (BPF_OP(code) == BPF_MOD) {
 504					EMIT(PPC_RAW_DIVWU(tmp2_reg, dst_reg, tmp1_reg));
 505					EMIT(PPC_RAW_MULW(tmp1_reg, tmp1_reg, tmp2_reg));
 506					EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 507				} else
 508					EMIT(PPC_RAW_DIVWU(dst_reg, dst_reg, tmp1_reg));
 509				break;
 510			case BPF_ALU64:
 511				if (BPF_OP(code) == BPF_MOD) {
 512					EMIT(PPC_RAW_DIVDU(tmp2_reg, dst_reg, tmp1_reg));
 513					EMIT(PPC_RAW_MULD(tmp1_reg, tmp1_reg, tmp2_reg));
 514					EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 515				} else
 516					EMIT(PPC_RAW_DIVDU(dst_reg, dst_reg, tmp1_reg));
 517				break;
 518			}
 519			goto bpf_alu32_trunc;
 520		case BPF_ALU | BPF_NEG: /* (u32) dst = -dst */
 521		case BPF_ALU64 | BPF_NEG: /* dst = -dst */
 522			EMIT(PPC_RAW_NEG(dst_reg, dst_reg));
 523			goto bpf_alu32_trunc;
 524
 525		/*
 526		 * Logical operations: AND/OR/XOR/[A]LSH/[A]RSH
 527		 */
 528		case BPF_ALU | BPF_AND | BPF_X: /* (u32) dst = dst & src */
 529		case BPF_ALU64 | BPF_AND | BPF_X: /* dst = dst & src */
 530			EMIT(PPC_RAW_AND(dst_reg, dst_reg, src_reg));
 531			goto bpf_alu32_trunc;
 532		case BPF_ALU | BPF_AND | BPF_K: /* (u32) dst = dst & imm */
 533		case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
 534			if (!IMM_H(imm))
 535				EMIT(PPC_RAW_ANDI(dst_reg, dst_reg, IMM_L(imm)));
 536			else {
 537				/* Sign-extended */
 538				PPC_LI32(tmp1_reg, imm);
 539				EMIT(PPC_RAW_AND(dst_reg, dst_reg, tmp1_reg));
 540			}
 541			goto bpf_alu32_trunc;
 542		case BPF_ALU | BPF_OR | BPF_X: /* dst = (u32) dst | (u32) src */
 543		case BPF_ALU64 | BPF_OR | BPF_X: /* dst = dst | src */
 544			EMIT(PPC_RAW_OR(dst_reg, dst_reg, src_reg));
 545			goto bpf_alu32_trunc;
 546		case BPF_ALU | BPF_OR | BPF_K:/* dst = (u32) dst | (u32) imm */
 547		case BPF_ALU64 | BPF_OR | BPF_K:/* dst = dst | imm */
 548			if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
 549				/* Sign-extended */
 550				PPC_LI32(tmp1_reg, imm);
 551				EMIT(PPC_RAW_OR(dst_reg, dst_reg, tmp1_reg));
 552			} else {
 553				if (IMM_L(imm))
 554					EMIT(PPC_RAW_ORI(dst_reg, dst_reg, IMM_L(imm)));
 555				if (IMM_H(imm))
 556					EMIT(PPC_RAW_ORIS(dst_reg, dst_reg, IMM_H(imm)));
 557			}
 558			goto bpf_alu32_trunc;
 559		case BPF_ALU | BPF_XOR | BPF_X: /* (u32) dst ^= src */
 560		case BPF_ALU64 | BPF_XOR | BPF_X: /* dst ^= src */
 561			EMIT(PPC_RAW_XOR(dst_reg, dst_reg, src_reg));
 562			goto bpf_alu32_trunc;
 563		case BPF_ALU | BPF_XOR | BPF_K: /* (u32) dst ^= (u32) imm */
 564		case BPF_ALU64 | BPF_XOR | BPF_K: /* dst ^= imm */
 565			if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
 566				/* Sign-extended */
 567				PPC_LI32(tmp1_reg, imm);
 568				EMIT(PPC_RAW_XOR(dst_reg, dst_reg, tmp1_reg));
 569			} else {
 570				if (IMM_L(imm))
 571					EMIT(PPC_RAW_XORI(dst_reg, dst_reg, IMM_L(imm)));
 572				if (IMM_H(imm))
 573					EMIT(PPC_RAW_XORIS(dst_reg, dst_reg, IMM_H(imm)));
 574			}
 575			goto bpf_alu32_trunc;
 576		case BPF_ALU | BPF_LSH | BPF_X: /* (u32) dst <<= (u32) src */
 577			/* slw clears top 32 bits */
 578			EMIT(PPC_RAW_SLW(dst_reg, dst_reg, src_reg));
 579			/* skip zero extension move, but set address map. */
 580			if (insn_is_zext(&insn[i + 1]))
 581				addrs[++i] = ctx->idx * 4;
 582			break;
 583		case BPF_ALU64 | BPF_LSH | BPF_X: /* dst <<= src; */
 584			EMIT(PPC_RAW_SLD(dst_reg, dst_reg, src_reg));
 585			break;
 586		case BPF_ALU | BPF_LSH | BPF_K: /* (u32) dst <<== (u32) imm */
 587			/* with imm 0, we still need to clear top 32 bits */
 588			EMIT(PPC_RAW_SLWI(dst_reg, dst_reg, imm));
 589			if (insn_is_zext(&insn[i + 1]))
 590				addrs[++i] = ctx->idx * 4;
 591			break;
 592		case BPF_ALU64 | BPF_LSH | BPF_K: /* dst <<== imm */
 593			if (imm != 0)
 594				EMIT(PPC_RAW_SLDI(dst_reg, dst_reg, imm));
 595			break;
 596		case BPF_ALU | BPF_RSH | BPF_X: /* (u32) dst >>= (u32) src */
 597			EMIT(PPC_RAW_SRW(dst_reg, dst_reg, src_reg));
 598			if (insn_is_zext(&insn[i + 1]))
 599				addrs[++i] = ctx->idx * 4;
 600			break;
 601		case BPF_ALU64 | BPF_RSH | BPF_X: /* dst >>= src */
 602			EMIT(PPC_RAW_SRD(dst_reg, dst_reg, src_reg));
 603			break;
 604		case BPF_ALU | BPF_RSH | BPF_K: /* (u32) dst >>= (u32) imm */
 605			EMIT(PPC_RAW_SRWI(dst_reg, dst_reg, imm));
 606			if (insn_is_zext(&insn[i + 1]))
 607				addrs[++i] = ctx->idx * 4;
 608			break;
 609		case BPF_ALU64 | BPF_RSH | BPF_K: /* dst >>= imm */
 610			if (imm != 0)
 611				EMIT(PPC_RAW_SRDI(dst_reg, dst_reg, imm));
 612			break;
 613		case BPF_ALU | BPF_ARSH | BPF_X: /* (s32) dst >>= src */
 614			EMIT(PPC_RAW_SRAW(dst_reg, dst_reg, src_reg));
 615			goto bpf_alu32_trunc;
 616		case BPF_ALU64 | BPF_ARSH | BPF_X: /* (s64) dst >>= src */
 617			EMIT(PPC_RAW_SRAD(dst_reg, dst_reg, src_reg));
 618			break;
 619		case BPF_ALU | BPF_ARSH | BPF_K: /* (s32) dst >>= imm */
 620			EMIT(PPC_RAW_SRAWI(dst_reg, dst_reg, imm));
 621			goto bpf_alu32_trunc;
 622		case BPF_ALU64 | BPF_ARSH | BPF_K: /* (s64) dst >>= imm */
 623			if (imm != 0)
 624				EMIT(PPC_RAW_SRADI(dst_reg, dst_reg, imm));
 625			break;
 626
 627		/*
 628		 * MOV
 629		 */
 630		case BPF_ALU | BPF_MOV | BPF_X: /* (u32) dst = src */
 631		case BPF_ALU64 | BPF_MOV | BPF_X: /* dst = src */
 632			if (imm == 1) {
 633				/* special mov32 for zext */
 634				EMIT(PPC_RAW_RLWINM(dst_reg, dst_reg, 0, 0, 31));
 635				break;
 636			}
 637			EMIT(PPC_RAW_MR(dst_reg, src_reg));
 638			goto bpf_alu32_trunc;
 639		case BPF_ALU | BPF_MOV | BPF_K: /* (u32) dst = imm */
 640		case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = (s64) imm */
 641			PPC_LI32(dst_reg, imm);
 642			if (imm < 0)
 643				goto bpf_alu32_trunc;
 644			else if (insn_is_zext(&insn[i + 1]))
 645				addrs[++i] = ctx->idx * 4;
 646			break;
 647
 648bpf_alu32_trunc:
 649		/* Truncate to 32-bits */
 650		if (BPF_CLASS(code) == BPF_ALU && !fp->aux->verifier_zext)
 651			EMIT(PPC_RAW_RLWINM(dst_reg, dst_reg, 0, 0, 31));
 652		break;
 653
 654		/*
 655		 * BPF_FROM_BE/LE
 656		 */
 657		case BPF_ALU | BPF_END | BPF_FROM_LE:
 658		case BPF_ALU | BPF_END | BPF_FROM_BE:
 659#ifdef __BIG_ENDIAN__
 660			if (BPF_SRC(code) == BPF_FROM_BE)
 661				goto emit_clear;
 662#else /* !__BIG_ENDIAN__ */
 663			if (BPF_SRC(code) == BPF_FROM_LE)
 664				goto emit_clear;
 665#endif
 666			switch (imm) {
 667			case 16:
 668				/* Rotate 8 bits left & mask with 0x0000ff00 */
 669				EMIT(PPC_RAW_RLWINM(tmp1_reg, dst_reg, 8, 16, 23));
 670				/* Rotate 8 bits right & insert LSB to reg */
 671				EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 24, 31));
 672				/* Move result back to dst_reg */
 673				EMIT(PPC_RAW_MR(dst_reg, tmp1_reg));
 674				break;
 675			case 32:
 676				/*
 677				 * Rotate word left by 8 bits:
 678				 * 2 bytes are already in their final position
 679				 * -- byte 2 and 4 (of bytes 1, 2, 3 and 4)
 680				 */
 681				EMIT(PPC_RAW_RLWINM(tmp1_reg, dst_reg, 8, 0, 31));
 682				/* Rotate 24 bits and insert byte 1 */
 683				EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 0, 7));
 684				/* Rotate 24 bits and insert byte 3 */
 685				EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 16, 23));
 686				EMIT(PPC_RAW_MR(dst_reg, tmp1_reg));
 687				break;
 688			case 64:
 689				/* Store the value to stack and then use byte-reverse loads */
 690				EMIT(PPC_RAW_STD(dst_reg, _R1, bpf_jit_stack_local(ctx)));
 691				EMIT(PPC_RAW_ADDI(tmp1_reg, _R1, bpf_jit_stack_local(ctx)));
 692				if (cpu_has_feature(CPU_FTR_ARCH_206)) {
 693					EMIT(PPC_RAW_LDBRX(dst_reg, 0, tmp1_reg));
 694				} else {
 695					EMIT(PPC_RAW_LWBRX(dst_reg, 0, tmp1_reg));
 696					if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
 697						EMIT(PPC_RAW_SLDI(dst_reg, dst_reg, 32));
 698					EMIT(PPC_RAW_LI(tmp2_reg, 4));
 699					EMIT(PPC_RAW_LWBRX(tmp2_reg, tmp2_reg, tmp1_reg));
 700					if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
 701						EMIT(PPC_RAW_SLDI(tmp2_reg, tmp2_reg, 32));
 702					EMIT(PPC_RAW_OR(dst_reg, dst_reg, tmp2_reg));
 703				}
 704				break;
 705			}
 706			break;
 707
 708emit_clear:
 709			switch (imm) {
 710			case 16:
 711				/* zero-extend 16 bits into 64 bits */
 712				EMIT(PPC_RAW_RLDICL(dst_reg, dst_reg, 0, 48));
 713				if (insn_is_zext(&insn[i + 1]))
 714					addrs[++i] = ctx->idx * 4;
 715				break;
 716			case 32:
 717				if (!fp->aux->verifier_zext)
 718					/* zero-extend 32 bits into 64 bits */
 719					EMIT(PPC_RAW_RLDICL(dst_reg, dst_reg, 0, 32));
 720				break;
 721			case 64:
 722				/* nop */
 723				break;
 724			}
 725			break;
 726
 727		/*
 728		 * BPF_ST NOSPEC (speculation barrier)
 729		 */
 730		case BPF_ST | BPF_NOSPEC:
 731			if (!security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) ||
 732					!security_ftr_enabled(SEC_FTR_STF_BARRIER))
 733				break;
 734
 735			switch (stf_barrier) {
 736			case STF_BARRIER_EIEIO:
 737				EMIT(PPC_RAW_EIEIO() | 0x02000000);
 738				break;
 739			case STF_BARRIER_SYNC_ORI:
 740				EMIT(PPC_RAW_SYNC());
 741				EMIT(PPC_RAW_LD(tmp1_reg, _R13, 0));
 742				EMIT(PPC_RAW_ORI(_R31, _R31, 0));
 743				break;
 744			case STF_BARRIER_FALLBACK:
 745				ctx->seen |= SEEN_FUNC;
 746				PPC_LI64(_R12, dereference_kernel_function_descriptor(bpf_stf_barrier));
 747				EMIT(PPC_RAW_MTCTR(_R12));
 748				EMIT(PPC_RAW_BCTRL());
 749				break;
 750			case STF_BARRIER_NONE:
 751				break;
 752			}
 753			break;
 754
 755		/*
 756		 * BPF_ST(X)
 757		 */
 758		case BPF_STX | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = src */
 759		case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
 760			if (BPF_CLASS(code) == BPF_ST) {
 761				EMIT(PPC_RAW_LI(tmp1_reg, imm));
 762				src_reg = tmp1_reg;
 763			}
 764			EMIT(PPC_RAW_STB(src_reg, dst_reg, off));
 765			break;
 766		case BPF_STX | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = src */
 767		case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
 768			if (BPF_CLASS(code) == BPF_ST) {
 769				EMIT(PPC_RAW_LI(tmp1_reg, imm));
 770				src_reg = tmp1_reg;
 771			}
 772			EMIT(PPC_RAW_STH(src_reg, dst_reg, off));
 773			break;
 774		case BPF_STX | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = src */
 775		case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
 776			if (BPF_CLASS(code) == BPF_ST) {
 777				PPC_LI32(tmp1_reg, imm);
 778				src_reg = tmp1_reg;
 779			}
 780			EMIT(PPC_RAW_STW(src_reg, dst_reg, off));
 781			break;
 782		case BPF_STX | BPF_MEM | BPF_DW: /* (u64 *)(dst + off) = src */
 783		case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
 784			if (BPF_CLASS(code) == BPF_ST) {
 785				PPC_LI32(tmp1_reg, imm);
 786				src_reg = tmp1_reg;
 787			}
 788			if (off % 4) {
 789				EMIT(PPC_RAW_LI(tmp2_reg, off));
 790				EMIT(PPC_RAW_STDX(src_reg, dst_reg, tmp2_reg));
 791			} else {
 792				EMIT(PPC_RAW_STD(src_reg, dst_reg, off));
 793			}
 794			break;
 795
 796		/*
 797		 * BPF_STX ATOMIC (atomic ops)
 798		 */
 799		case BPF_STX | BPF_ATOMIC | BPF_W:
 800		case BPF_STX | BPF_ATOMIC | BPF_DW:
 801			save_reg = tmp2_reg;
 802			ret_reg = src_reg;
 803
 804			/* Get offset into TMP_REG_1 */
 805			EMIT(PPC_RAW_LI(tmp1_reg, off));
 806			tmp_idx = ctx->idx * 4;
 807			/* load value from memory into TMP_REG_2 */
 808			if (size == BPF_DW)
 809				EMIT(PPC_RAW_LDARX(tmp2_reg, tmp1_reg, dst_reg, 0));
 810			else
 811				EMIT(PPC_RAW_LWARX(tmp2_reg, tmp1_reg, dst_reg, 0));
 812
 813			/* Save old value in _R0 */
 814			if (imm & BPF_FETCH)
 815				EMIT(PPC_RAW_MR(_R0, tmp2_reg));
 816
 817			switch (imm) {
 818			case BPF_ADD:
 819			case BPF_ADD | BPF_FETCH:
 820				EMIT(PPC_RAW_ADD(tmp2_reg, tmp2_reg, src_reg));
 821				break;
 822			case BPF_AND:
 823			case BPF_AND | BPF_FETCH:
 824				EMIT(PPC_RAW_AND(tmp2_reg, tmp2_reg, src_reg));
 825				break;
 826			case BPF_OR:
 827			case BPF_OR | BPF_FETCH:
 828				EMIT(PPC_RAW_OR(tmp2_reg, tmp2_reg, src_reg));
 829				break;
 830			case BPF_XOR:
 831			case BPF_XOR | BPF_FETCH:
 832				EMIT(PPC_RAW_XOR(tmp2_reg, tmp2_reg, src_reg));
 833				break;
 834			case BPF_CMPXCHG:
 835				/*
 836				 * Return old value in BPF_REG_0 for BPF_CMPXCHG &
 837				 * in src_reg for other cases.
 838				 */
 839				ret_reg = bpf_to_ppc(BPF_REG_0);
 840
 841				/* Compare with old value in BPF_R0 */
 842				if (size == BPF_DW)
 843					EMIT(PPC_RAW_CMPD(bpf_to_ppc(BPF_REG_0), tmp2_reg));
 844				else
 845					EMIT(PPC_RAW_CMPW(bpf_to_ppc(BPF_REG_0), tmp2_reg));
 846				/* Don't set if different from old value */
 847				PPC_BCC_SHORT(COND_NE, (ctx->idx + 3) * 4);
 848				fallthrough;
 849			case BPF_XCHG:
 850				save_reg = src_reg;
 851				break;
 852			default:
 853				pr_err_ratelimited(
 854					"eBPF filter atomic op code %02x (@%d) unsupported\n",
 855					code, i);
 856				return -EOPNOTSUPP;
 857			}
 858
 859			/* store new value */
 860			if (size == BPF_DW)
 861				EMIT(PPC_RAW_STDCX(save_reg, tmp1_reg, dst_reg));
 862			else
 863				EMIT(PPC_RAW_STWCX(save_reg, tmp1_reg, dst_reg));
 864			/* we're done if this succeeded */
 865			PPC_BCC_SHORT(COND_NE, tmp_idx);
 866
 867			if (imm & BPF_FETCH) {
 868				EMIT(PPC_RAW_MR(ret_reg, _R0));
 869				/*
 870				 * Skip unnecessary zero-extension for 32-bit cmpxchg.
 871				 * For context, see commit 39491867ace5.
 872				 */
 873				if (size != BPF_DW && imm == BPF_CMPXCHG &&
 874				    insn_is_zext(&insn[i + 1]))
 875					addrs[++i] = ctx->idx * 4;
 876			}
 877			break;
 878
 879		/*
 880		 * BPF_LDX
 881		 */
 882		/* dst = *(u8 *)(ul) (src + off) */
 883		case BPF_LDX | BPF_MEM | BPF_B:
 884		case BPF_LDX | BPF_PROBE_MEM | BPF_B:
 885		/* dst = *(u16 *)(ul) (src + off) */
 886		case BPF_LDX | BPF_MEM | BPF_H:
 887		case BPF_LDX | BPF_PROBE_MEM | BPF_H:
 888		/* dst = *(u32 *)(ul) (src + off) */
 889		case BPF_LDX | BPF_MEM | BPF_W:
 890		case BPF_LDX | BPF_PROBE_MEM | BPF_W:
 891		/* dst = *(u64 *)(ul) (src + off) */
 892		case BPF_LDX | BPF_MEM | BPF_DW:
 893		case BPF_LDX | BPF_PROBE_MEM | BPF_DW:
 894			/*
 895			 * As PTR_TO_BTF_ID that uses BPF_PROBE_MEM mode could either be a valid
 896			 * kernel pointer or NULL but not a userspace address, execute BPF_PROBE_MEM
 897			 * load only if addr is kernel address (see is_kernel_addr()), otherwise
 898			 * set dst_reg=0 and move on.
 899			 */
 900			if (BPF_MODE(code) == BPF_PROBE_MEM) {
 901				EMIT(PPC_RAW_ADDI(tmp1_reg, src_reg, off));
 902				if (IS_ENABLED(CONFIG_PPC_BOOK3E_64))
 903					PPC_LI64(tmp2_reg, 0x8000000000000000ul);
 904				else /* BOOK3S_64 */
 905					PPC_LI64(tmp2_reg, PAGE_OFFSET);
 906				EMIT(PPC_RAW_CMPLD(tmp1_reg, tmp2_reg));
 907				PPC_BCC_SHORT(COND_GT, (ctx->idx + 3) * 4);
 908				EMIT(PPC_RAW_LI(dst_reg, 0));
 909				/*
 910				 * Check if 'off' is word aligned for BPF_DW, because
 911				 * we might generate two instructions.
 912				 */
 913				if (BPF_SIZE(code) == BPF_DW && (off & 3))
 914					PPC_JMP((ctx->idx + 3) * 4);
 915				else
 916					PPC_JMP((ctx->idx + 2) * 4);
 917			}
 918
 919			switch (size) {
 920			case BPF_B:
 921				EMIT(PPC_RAW_LBZ(dst_reg, src_reg, off));
 922				break;
 923			case BPF_H:
 924				EMIT(PPC_RAW_LHZ(dst_reg, src_reg, off));
 925				break;
 926			case BPF_W:
 927				EMIT(PPC_RAW_LWZ(dst_reg, src_reg, off));
 928				break;
 929			case BPF_DW:
 930				if (off % 4) {
 931					EMIT(PPC_RAW_LI(tmp1_reg, off));
 932					EMIT(PPC_RAW_LDX(dst_reg, src_reg, tmp1_reg));
 933				} else {
 934					EMIT(PPC_RAW_LD(dst_reg, src_reg, off));
 935				}
 936				break;
 937			}
 938
 939			if (size != BPF_DW && insn_is_zext(&insn[i + 1]))
 940				addrs[++i] = ctx->idx * 4;
 941
 942			if (BPF_MODE(code) == BPF_PROBE_MEM) {
 943				ret = bpf_add_extable_entry(fp, image, fimage, pass, ctx,
 944							    ctx->idx - 1, 4, dst_reg);
 945				if (ret)
 946					return ret;
 947			}
 948			break;
 949
 950		/*
 951		 * Doubleword load
 952		 * 16 byte instruction that uses two 'struct bpf_insn'
 953		 */
 954		case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
 955			imm64 = ((u64)(u32) insn[i].imm) |
 956				    (((u64)(u32) insn[i+1].imm) << 32);
 957			tmp_idx = ctx->idx;
 958			PPC_LI64(dst_reg, imm64);
 959			/* padding to allow full 5 instructions for later patching */
 960			if (!image)
 961				for (j = ctx->idx - tmp_idx; j < 5; j++)
 962					EMIT(PPC_RAW_NOP());
 963			/* Adjust for two bpf instructions */
 964			addrs[++i] = ctx->idx * 4;
 965			break;
 966
 967		/*
 968		 * Return/Exit
 969		 */
 970		case BPF_JMP | BPF_EXIT:
 971			/*
 972			 * If this isn't the very last instruction, branch to
 973			 * the epilogue. If we _are_ the last instruction,
 974			 * we'll just fall through to the epilogue.
 975			 */
 976			if (i != flen - 1) {
 977				ret = bpf_jit_emit_exit_insn(image, ctx, tmp1_reg, exit_addr);
 978				if (ret)
 979					return ret;
 980			}
 981			/* else fall through to the epilogue */
 982			break;
 983
 984		/*
 985		 * Call kernel helper or bpf function
 986		 */
 987		case BPF_JMP | BPF_CALL:
 988			ctx->seen |= SEEN_FUNC;
 989
 990			ret = bpf_jit_get_func_addr(fp, &insn[i], extra_pass,
 991						    &func_addr, &func_addr_fixed);
 992			if (ret < 0)
 993				return ret;
 994
 995			if (func_addr_fixed)
 996				ret = bpf_jit_emit_func_call_hlp(image, ctx, func_addr);
 997			else
 998				ret = bpf_jit_emit_func_call_rel(image, fimage, ctx, func_addr);
 999
1000			if (ret)
1001				return ret;
1002
1003			/* move return value from r3 to BPF_REG_0 */
1004			EMIT(PPC_RAW_MR(bpf_to_ppc(BPF_REG_0), _R3));
1005			break;
1006
1007		/*
1008		 * Jumps and branches
1009		 */
1010		case BPF_JMP | BPF_JA:
1011			PPC_JMP(addrs[i + 1 + off]);
1012			break;
1013
1014		case BPF_JMP | BPF_JGT | BPF_K:
1015		case BPF_JMP | BPF_JGT | BPF_X:
1016		case BPF_JMP | BPF_JSGT | BPF_K:
1017		case BPF_JMP | BPF_JSGT | BPF_X:
1018		case BPF_JMP32 | BPF_JGT | BPF_K:
1019		case BPF_JMP32 | BPF_JGT | BPF_X:
1020		case BPF_JMP32 | BPF_JSGT | BPF_K:
1021		case BPF_JMP32 | BPF_JSGT | BPF_X:
1022			true_cond = COND_GT;
1023			goto cond_branch;
1024		case BPF_JMP | BPF_JLT | BPF_K:
1025		case BPF_JMP | BPF_JLT | BPF_X:
1026		case BPF_JMP | BPF_JSLT | BPF_K:
1027		case BPF_JMP | BPF_JSLT | BPF_X:
1028		case BPF_JMP32 | BPF_JLT | BPF_K:
1029		case BPF_JMP32 | BPF_JLT | BPF_X:
1030		case BPF_JMP32 | BPF_JSLT | BPF_K:
1031		case BPF_JMP32 | BPF_JSLT | BPF_X:
1032			true_cond = COND_LT;
1033			goto cond_branch;
1034		case BPF_JMP | BPF_JGE | BPF_K:
1035		case BPF_JMP | BPF_JGE | BPF_X:
1036		case BPF_JMP | BPF_JSGE | BPF_K:
1037		case BPF_JMP | BPF_JSGE | BPF_X:
1038		case BPF_JMP32 | BPF_JGE | BPF_K:
1039		case BPF_JMP32 | BPF_JGE | BPF_X:
1040		case BPF_JMP32 | BPF_JSGE | BPF_K:
1041		case BPF_JMP32 | BPF_JSGE | BPF_X:
1042			true_cond = COND_GE;
1043			goto cond_branch;
1044		case BPF_JMP | BPF_JLE | BPF_K:
1045		case BPF_JMP | BPF_JLE | BPF_X:
1046		case BPF_JMP | BPF_JSLE | BPF_K:
1047		case BPF_JMP | BPF_JSLE | BPF_X:
1048		case BPF_JMP32 | BPF_JLE | BPF_K:
1049		case BPF_JMP32 | BPF_JLE | BPF_X:
1050		case BPF_JMP32 | BPF_JSLE | BPF_K:
1051		case BPF_JMP32 | BPF_JSLE | BPF_X:
1052			true_cond = COND_LE;
1053			goto cond_branch;
1054		case BPF_JMP | BPF_JEQ | BPF_K:
1055		case BPF_JMP | BPF_JEQ | BPF_X:
1056		case BPF_JMP32 | BPF_JEQ | BPF_K:
1057		case BPF_JMP32 | BPF_JEQ | BPF_X:
1058			true_cond = COND_EQ;
1059			goto cond_branch;
1060		case BPF_JMP | BPF_JNE | BPF_K:
1061		case BPF_JMP | BPF_JNE | BPF_X:
1062		case BPF_JMP32 | BPF_JNE | BPF_K:
1063		case BPF_JMP32 | BPF_JNE | BPF_X:
1064			true_cond = COND_NE;
1065			goto cond_branch;
1066		case BPF_JMP | BPF_JSET | BPF_K:
1067		case BPF_JMP | BPF_JSET | BPF_X:
1068		case BPF_JMP32 | BPF_JSET | BPF_K:
1069		case BPF_JMP32 | BPF_JSET | BPF_X:
1070			true_cond = COND_NE;
1071			/* Fall through */
1072
1073cond_branch:
1074			switch (code) {
1075			case BPF_JMP | BPF_JGT | BPF_X:
1076			case BPF_JMP | BPF_JLT | BPF_X:
1077			case BPF_JMP | BPF_JGE | BPF_X:
1078			case BPF_JMP | BPF_JLE | BPF_X:
1079			case BPF_JMP | BPF_JEQ | BPF_X:
1080			case BPF_JMP | BPF_JNE | BPF_X:
1081			case BPF_JMP32 | BPF_JGT | BPF_X:
1082			case BPF_JMP32 | BPF_JLT | BPF_X:
1083			case BPF_JMP32 | BPF_JGE | BPF_X:
1084			case BPF_JMP32 | BPF_JLE | BPF_X:
1085			case BPF_JMP32 | BPF_JEQ | BPF_X:
1086			case BPF_JMP32 | BPF_JNE | BPF_X:
1087				/* unsigned comparison */
1088				if (BPF_CLASS(code) == BPF_JMP32)
1089					EMIT(PPC_RAW_CMPLW(dst_reg, src_reg));
1090				else
1091					EMIT(PPC_RAW_CMPLD(dst_reg, src_reg));
1092				break;
1093			case BPF_JMP | BPF_JSGT | BPF_X:
1094			case BPF_JMP | BPF_JSLT | BPF_X:
1095			case BPF_JMP | BPF_JSGE | BPF_X:
1096			case BPF_JMP | BPF_JSLE | BPF_X:
1097			case BPF_JMP32 | BPF_JSGT | BPF_X:
1098			case BPF_JMP32 | BPF_JSLT | BPF_X:
1099			case BPF_JMP32 | BPF_JSGE | BPF_X:
1100			case BPF_JMP32 | BPF_JSLE | BPF_X:
1101				/* signed comparison */
1102				if (BPF_CLASS(code) == BPF_JMP32)
1103					EMIT(PPC_RAW_CMPW(dst_reg, src_reg));
1104				else
1105					EMIT(PPC_RAW_CMPD(dst_reg, src_reg));
1106				break;
1107			case BPF_JMP | BPF_JSET | BPF_X:
1108			case BPF_JMP32 | BPF_JSET | BPF_X:
1109				if (BPF_CLASS(code) == BPF_JMP) {
1110					EMIT(PPC_RAW_AND_DOT(tmp1_reg, dst_reg, src_reg));
1111				} else {
1112					EMIT(PPC_RAW_AND(tmp1_reg, dst_reg, src_reg));
1113					EMIT(PPC_RAW_RLWINM_DOT(tmp1_reg, tmp1_reg, 0, 0, 31));
1114				}
1115				break;
1116			case BPF_JMP | BPF_JNE | BPF_K:
1117			case BPF_JMP | BPF_JEQ | BPF_K:
1118			case BPF_JMP | BPF_JGT | BPF_K:
1119			case BPF_JMP | BPF_JLT | BPF_K:
1120			case BPF_JMP | BPF_JGE | BPF_K:
1121			case BPF_JMP | BPF_JLE | BPF_K:
1122			case BPF_JMP32 | BPF_JNE | BPF_K:
1123			case BPF_JMP32 | BPF_JEQ | BPF_K:
1124			case BPF_JMP32 | BPF_JGT | BPF_K:
1125			case BPF_JMP32 | BPF_JLT | BPF_K:
1126			case BPF_JMP32 | BPF_JGE | BPF_K:
1127			case BPF_JMP32 | BPF_JLE | BPF_K:
1128			{
1129				bool is_jmp32 = BPF_CLASS(code) == BPF_JMP32;
1130
1131				/*
1132				 * Need sign-extended load, so only positive
1133				 * values can be used as imm in cmpldi
1134				 */
1135				if (imm >= 0 && imm < 32768) {
1136					if (is_jmp32)
1137						EMIT(PPC_RAW_CMPLWI(dst_reg, imm));
1138					else
1139						EMIT(PPC_RAW_CMPLDI(dst_reg, imm));
1140				} else {
1141					/* sign-extending load */
1142					PPC_LI32(tmp1_reg, imm);
1143					/* ... but unsigned comparison */
1144					if (is_jmp32)
1145						EMIT(PPC_RAW_CMPLW(dst_reg, tmp1_reg));
1146					else
1147						EMIT(PPC_RAW_CMPLD(dst_reg, tmp1_reg));
1148				}
1149				break;
1150			}
1151			case BPF_JMP | BPF_JSGT | BPF_K:
1152			case BPF_JMP | BPF_JSLT | BPF_K:
1153			case BPF_JMP | BPF_JSGE | BPF_K:
1154			case BPF_JMP | BPF_JSLE | BPF_K:
1155			case BPF_JMP32 | BPF_JSGT | BPF_K:
1156			case BPF_JMP32 | BPF_JSLT | BPF_K:
1157			case BPF_JMP32 | BPF_JSGE | BPF_K:
1158			case BPF_JMP32 | BPF_JSLE | BPF_K:
1159			{
1160				bool is_jmp32 = BPF_CLASS(code) == BPF_JMP32;
1161
1162				/*
1163				 * signed comparison, so any 16-bit value
1164				 * can be used in cmpdi
1165				 */
1166				if (imm >= -32768 && imm < 32768) {
1167					if (is_jmp32)
1168						EMIT(PPC_RAW_CMPWI(dst_reg, imm));
1169					else
1170						EMIT(PPC_RAW_CMPDI(dst_reg, imm));
1171				} else {
1172					PPC_LI32(tmp1_reg, imm);
1173					if (is_jmp32)
1174						EMIT(PPC_RAW_CMPW(dst_reg, tmp1_reg));
1175					else
1176						EMIT(PPC_RAW_CMPD(dst_reg, tmp1_reg));
1177				}
1178				break;
1179			}
1180			case BPF_JMP | BPF_JSET | BPF_K:
1181			case BPF_JMP32 | BPF_JSET | BPF_K:
1182				/* andi does not sign-extend the immediate */
1183				if (imm >= 0 && imm < 32768)
1184					/* PPC_ANDI is _only/always_ dot-form */
1185					EMIT(PPC_RAW_ANDI(tmp1_reg, dst_reg, imm));
1186				else {
1187					PPC_LI32(tmp1_reg, imm);
1188					if (BPF_CLASS(code) == BPF_JMP) {
1189						EMIT(PPC_RAW_AND_DOT(tmp1_reg, dst_reg,
1190								     tmp1_reg));
1191					} else {
1192						EMIT(PPC_RAW_AND(tmp1_reg, dst_reg, tmp1_reg));
1193						EMIT(PPC_RAW_RLWINM_DOT(tmp1_reg, tmp1_reg,
1194									0, 0, 31));
1195					}
1196				}
1197				break;
1198			}
1199			PPC_BCC(true_cond, addrs[i + 1 + off]);
1200			break;
1201
1202		/*
1203		 * Tail call
1204		 */
1205		case BPF_JMP | BPF_TAIL_CALL:
1206			ctx->seen |= SEEN_TAILCALL;
1207			ret = bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]);
1208			if (ret < 0)
1209				return ret;
1210			break;
1211
1212		default:
1213			/*
1214			 * The filter contains something cruel & unusual.
1215			 * We don't handle it, but also there shouldn't be
1216			 * anything missing from our list.
1217			 */
1218			pr_err_ratelimited("eBPF filter opcode %04x (@%d) unsupported\n",
1219					code, i);
1220			return -ENOTSUPP;
1221		}
1222	}
1223
1224	/* Set end-of-body-code address for exit. */
1225	addrs[i] = ctx->idx * 4;
1226
1227	return 0;
1228}
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * bpf_jit_comp64.c: eBPF JIT compiler
   4 *
   5 * Copyright 2016 Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
   6 *		  IBM Corporation
   7 *
   8 * Based on the powerpc classic BPF JIT compiler by Matt Evans
   9 */
  10#include <linux/moduleloader.h>
  11#include <asm/cacheflush.h>
  12#include <asm/asm-compat.h>
  13#include <linux/netdevice.h>
  14#include <linux/filter.h>
  15#include <linux/if_vlan.h>
  16#include <asm/kprobes.h>
  17#include <linux/bpf.h>
  18#include <asm/security_features.h>
  19
  20#include "bpf_jit.h"
  21
  22/*
  23 * Stack layout:
  24 * Ensure the top half (upto local_tmp_var) stays consistent
  25 * with our redzone usage.
  26 *
  27 *		[	prev sp		] <-------------
  28 *		[   nv gpr save area	] 5*8		|
  29 *		[    tail_call_cnt	] 8		|
  30 *		[    local_tmp_var	] 16		|
  31 * fp (r31) -->	[   ebpf stack space	] upto 512	|
  32 *		[     frame header	] 32/112	|
  33 * sp (r1) --->	[    stack pointer	] --------------
  34 */
  35
  36/* for gpr non volatile registers BPG_REG_6 to 10 */
  37#define BPF_PPC_STACK_SAVE	(5*8)
  38/* for bpf JIT code internal usage */
  39#define BPF_PPC_STACK_LOCALS	24
  40/* stack frame excluding BPF stack, ensure this is quadword aligned */
  41#define BPF_PPC_STACKFRAME	(STACK_FRAME_MIN_SIZE + \
  42				 BPF_PPC_STACK_LOCALS + BPF_PPC_STACK_SAVE)
  43
  44/* BPF register usage */
  45#define TMP_REG_1	(MAX_BPF_JIT_REG + 0)
  46#define TMP_REG_2	(MAX_BPF_JIT_REG + 1)
  47
  48/* BPF to ppc register mappings */
  49void bpf_jit_init_reg_mapping(struct codegen_context *ctx)
  50{
  51	/* function return value */
  52	ctx->b2p[BPF_REG_0] = _R8;
  53	/* function arguments */
  54	ctx->b2p[BPF_REG_1] = _R3;
  55	ctx->b2p[BPF_REG_2] = _R4;
  56	ctx->b2p[BPF_REG_3] = _R5;
  57	ctx->b2p[BPF_REG_4] = _R6;
  58	ctx->b2p[BPF_REG_5] = _R7;
  59	/* non volatile registers */
  60	ctx->b2p[BPF_REG_6] = _R27;
  61	ctx->b2p[BPF_REG_7] = _R28;
  62	ctx->b2p[BPF_REG_8] = _R29;
  63	ctx->b2p[BPF_REG_9] = _R30;
  64	/* frame pointer aka BPF_REG_10 */
  65	ctx->b2p[BPF_REG_FP] = _R31;
  66	/* eBPF jit internal registers */
  67	ctx->b2p[BPF_REG_AX] = _R12;
  68	ctx->b2p[TMP_REG_1] = _R9;
  69	ctx->b2p[TMP_REG_2] = _R10;
  70}
  71
  72/* PPC NVR range -- update this if we ever use NVRs below r27 */
  73#define BPF_PPC_NVR_MIN		_R27
  74
  75static inline bool bpf_has_stack_frame(struct codegen_context *ctx)
  76{
  77	/*
  78	 * We only need a stack frame if:
  79	 * - we call other functions (kernel helpers), or
  80	 * - the bpf program uses its stack area
  81	 * The latter condition is deduced from the usage of BPF_REG_FP
  82	 */
  83	return ctx->seen & SEEN_FUNC || bpf_is_seen_register(ctx, bpf_to_ppc(BPF_REG_FP));
  84}
  85
  86/*
  87 * When not setting up our own stackframe, the redzone usage is:
  88 *
  89 *		[	prev sp		] <-------------
  90 *		[	  ...       	] 		|
  91 * sp (r1) --->	[    stack pointer	] --------------
  92 *		[   nv gpr save area	] 5*8
  93 *		[    tail_call_cnt	] 8
  94 *		[    local_tmp_var	] 16
  95 *		[   unused red zone	] 208 bytes protected
  96 */
  97static int bpf_jit_stack_local(struct codegen_context *ctx)
  98{
  99	if (bpf_has_stack_frame(ctx))
 100		return STACK_FRAME_MIN_SIZE + ctx->stack_size;
 101	else
 102		return -(BPF_PPC_STACK_SAVE + 24);
 103}
 104
 105static int bpf_jit_stack_tailcallcnt(struct codegen_context *ctx)
 106{
 107	return bpf_jit_stack_local(ctx) + 16;
 108}
 109
 110static int bpf_jit_stack_offsetof(struct codegen_context *ctx, int reg)
 111{
 112	if (reg >= BPF_PPC_NVR_MIN && reg < 32)
 113		return (bpf_has_stack_frame(ctx) ?
 114			(BPF_PPC_STACKFRAME + ctx->stack_size) : 0)
 115				- (8 * (32 - reg));
 116
 117	pr_err("BPF JIT is asking about unknown registers");
 118	BUG();
 119}
 120
 121void bpf_jit_realloc_regs(struct codegen_context *ctx)
 122{
 123}
 124
 125void bpf_jit_build_prologue(u32 *image, struct codegen_context *ctx)
 126{
 127	int i;
 128
 129#ifndef CONFIG_PPC_KERNEL_PCREL
 130	if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
 131		EMIT(PPC_RAW_LD(_R2, _R13, offsetof(struct paca_struct, kernel_toc)));
 132#endif
 133
 134	/*
 135	 * Initialize tail_call_cnt if we do tail calls.
 136	 * Otherwise, put in NOPs so that it can be skipped when we are
 137	 * invoked through a tail call.
 138	 */
 139	if (ctx->seen & SEEN_TAILCALL) {
 140		EMIT(PPC_RAW_LI(bpf_to_ppc(TMP_REG_1), 0));
 141		/* this goes in the redzone */
 142		EMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, -(BPF_PPC_STACK_SAVE + 8)));
 143	} else {
 144		EMIT(PPC_RAW_NOP());
 145		EMIT(PPC_RAW_NOP());
 146	}
 147
 148	if (bpf_has_stack_frame(ctx)) {
 149		/*
 150		 * We need a stack frame, but we don't necessarily need to
 151		 * save/restore LR unless we call other functions
 152		 */
 153		if (ctx->seen & SEEN_FUNC) {
 154			EMIT(PPC_RAW_MFLR(_R0));
 155			EMIT(PPC_RAW_STD(_R0, _R1, PPC_LR_STKOFF));
 156		}
 157
 158		EMIT(PPC_RAW_STDU(_R1, _R1, -(BPF_PPC_STACKFRAME + ctx->stack_size)));
 159	}
 160
 161	/*
 162	 * Back up non-volatile regs -- BPF registers 6-10
 163	 * If we haven't created our own stack frame, we save these
 164	 * in the protected zone below the previous stack frame
 165	 */
 166	for (i = BPF_REG_6; i <= BPF_REG_10; i++)
 167		if (bpf_is_seen_register(ctx, bpf_to_ppc(i)))
 168			EMIT(PPC_RAW_STD(bpf_to_ppc(i), _R1, bpf_jit_stack_offsetof(ctx, bpf_to_ppc(i))));
 169
 170	/* Setup frame pointer to point to the bpf stack area */
 171	if (bpf_is_seen_register(ctx, bpf_to_ppc(BPF_REG_FP)))
 172		EMIT(PPC_RAW_ADDI(bpf_to_ppc(BPF_REG_FP), _R1,
 173				STACK_FRAME_MIN_SIZE + ctx->stack_size));
 174}
 175
 176static void bpf_jit_emit_common_epilogue(u32 *image, struct codegen_context *ctx)
 177{
 178	int i;
 179
 180	/* Restore NVRs */
 181	for (i = BPF_REG_6; i <= BPF_REG_10; i++)
 182		if (bpf_is_seen_register(ctx, bpf_to_ppc(i)))
 183			EMIT(PPC_RAW_LD(bpf_to_ppc(i), _R1, bpf_jit_stack_offsetof(ctx, bpf_to_ppc(i))));
 184
 185	/* Tear down our stack frame */
 186	if (bpf_has_stack_frame(ctx)) {
 187		EMIT(PPC_RAW_ADDI(_R1, _R1, BPF_PPC_STACKFRAME + ctx->stack_size));
 188		if (ctx->seen & SEEN_FUNC) {
 189			EMIT(PPC_RAW_LD(_R0, _R1, PPC_LR_STKOFF));
 190			EMIT(PPC_RAW_MTLR(_R0));
 191		}
 192	}
 193}
 194
 195void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx)
 196{
 197	bpf_jit_emit_common_epilogue(image, ctx);
 198
 199	/* Move result to r3 */
 200	EMIT(PPC_RAW_MR(_R3, bpf_to_ppc(BPF_REG_0)));
 201
 202	EMIT(PPC_RAW_BLR());
 203}
 204
 205static int bpf_jit_emit_func_call_hlp(u32 *image, struct codegen_context *ctx, u64 func)
 206{
 207	unsigned long func_addr = func ? ppc_function_entry((void *)func) : 0;
 208	long reladdr;
 209
 210	if (WARN_ON_ONCE(!core_kernel_text(func_addr)))
 211		return -EINVAL;
 212
 213	if (IS_ENABLED(CONFIG_PPC_KERNEL_PCREL)) {
 214		reladdr = func_addr - CTX_NIA(ctx);
 215
 216		if (reladdr >= (long)SZ_8G || reladdr < -(long)SZ_8G) {
 217			pr_err("eBPF: address of %ps out of range of pcrel address.\n",
 218				(void *)func);
 219			return -ERANGE;
 220		}
 221		/* pla r12,addr */
 222		EMIT(PPC_PREFIX_MLS | __PPC_PRFX_R(1) | IMM_H18(reladdr));
 223		EMIT(PPC_INST_PADDI | ___PPC_RT(_R12) | IMM_L(reladdr));
 224		EMIT(PPC_RAW_MTCTR(_R12));
 225		EMIT(PPC_RAW_BCTR());
 226
 227	} else {
 228		reladdr = func_addr - kernel_toc_addr();
 229		if (reladdr > 0x7FFFFFFF || reladdr < -(0x80000000L)) {
 230			pr_err("eBPF: address of %ps out of range of kernel_toc.\n", (void *)func);
 231			return -ERANGE;
 232		}
 233
 234		EMIT(PPC_RAW_ADDIS(_R12, _R2, PPC_HA(reladdr)));
 235		EMIT(PPC_RAW_ADDI(_R12, _R12, PPC_LO(reladdr)));
 236		EMIT(PPC_RAW_MTCTR(_R12));
 237		EMIT(PPC_RAW_BCTRL());
 238	}
 239
 240	return 0;
 241}
 242
 243int bpf_jit_emit_func_call_rel(u32 *image, u32 *fimage, struct codegen_context *ctx, u64 func)
 244{
 245	unsigned int i, ctx_idx = ctx->idx;
 246
 247	if (WARN_ON_ONCE(func && is_module_text_address(func)))
 248		return -EINVAL;
 249
 250	/* skip past descriptor if elf v1 */
 251	func += FUNCTION_DESCR_SIZE;
 252
 253	/* Load function address into r12 */
 254	PPC_LI64(_R12, func);
 255
 256	/* For bpf-to-bpf function calls, the callee's address is unknown
 257	 * until the last extra pass. As seen above, we use PPC_LI64() to
 258	 * load the callee's address, but this may optimize the number of
 259	 * instructions required based on the nature of the address.
 260	 *
 261	 * Since we don't want the number of instructions emitted to increase,
 262	 * we pad the optimized PPC_LI64() call with NOPs to guarantee that
 263	 * we always have a five-instruction sequence, which is the maximum
 264	 * that PPC_LI64() can emit.
 265	 */
 266	if (!image)
 267		for (i = ctx->idx - ctx_idx; i < 5; i++)
 268			EMIT(PPC_RAW_NOP());
 269
 270	EMIT(PPC_RAW_MTCTR(_R12));
 271	EMIT(PPC_RAW_BCTRL());
 272
 273	return 0;
 274}
 275
 276static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out)
 277{
 278	/*
 279	 * By now, the eBPF program has already setup parameters in r3, r4 and r5
 280	 * r3/BPF_REG_1 - pointer to ctx -- passed as is to the next bpf program
 281	 * r4/BPF_REG_2 - pointer to bpf_array
 282	 * r5/BPF_REG_3 - index in bpf_array
 283	 */
 284	int b2p_bpf_array = bpf_to_ppc(BPF_REG_2);
 285	int b2p_index = bpf_to_ppc(BPF_REG_3);
 286	int bpf_tailcall_prologue_size = 8;
 287
 288	if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
 289		bpf_tailcall_prologue_size += 4; /* skip past the toc load */
 290
 291	/*
 292	 * if (index >= array->map.max_entries)
 293	 *   goto out;
 294	 */
 295	EMIT(PPC_RAW_LWZ(bpf_to_ppc(TMP_REG_1), b2p_bpf_array, offsetof(struct bpf_array, map.max_entries)));
 296	EMIT(PPC_RAW_RLWINM(b2p_index, b2p_index, 0, 0, 31));
 297	EMIT(PPC_RAW_CMPLW(b2p_index, bpf_to_ppc(TMP_REG_1)));
 298	PPC_BCC_SHORT(COND_GE, out);
 299
 300	/*
 301	 * if (tail_call_cnt >= MAX_TAIL_CALL_CNT)
 302	 *   goto out;
 303	 */
 304	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), _R1, bpf_jit_stack_tailcallcnt(ctx)));
 305	EMIT(PPC_RAW_CMPLWI(bpf_to_ppc(TMP_REG_1), MAX_TAIL_CALL_CNT));
 306	PPC_BCC_SHORT(COND_GE, out);
 307
 308	/*
 309	 * tail_call_cnt++;
 310	 */
 311	EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), 1));
 312	EMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, bpf_jit_stack_tailcallcnt(ctx)));
 313
 314	/* prog = array->ptrs[index]; */
 315	EMIT(PPC_RAW_MULI(bpf_to_ppc(TMP_REG_1), b2p_index, 8));
 316	EMIT(PPC_RAW_ADD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), b2p_bpf_array));
 317	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_array, ptrs)));
 318
 319	/*
 320	 * if (prog == NULL)
 321	 *   goto out;
 322	 */
 323	EMIT(PPC_RAW_CMPLDI(bpf_to_ppc(TMP_REG_1), 0));
 324	PPC_BCC_SHORT(COND_EQ, out);
 325
 326	/* goto *(prog->bpf_func + prologue_size); */
 327	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_prog, bpf_func)));
 328	EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1),
 329			FUNCTION_DESCR_SIZE + bpf_tailcall_prologue_size));
 330	EMIT(PPC_RAW_MTCTR(bpf_to_ppc(TMP_REG_1)));
 331
 332	/* tear down stack, restore NVRs, ... */
 333	bpf_jit_emit_common_epilogue(image, ctx);
 334
 335	EMIT(PPC_RAW_BCTR());
 336
 337	/* out: */
 338	return 0;
 339}
 340
 341/*
 342 * We spill into the redzone always, even if the bpf program has its own stackframe.
 343 * Offsets hardcoded based on BPF_PPC_STACK_SAVE -- see bpf_jit_stack_local()
 344 */
 345void bpf_stf_barrier(void);
 346
 347asm (
 348"		.global bpf_stf_barrier		;"
 349"	bpf_stf_barrier:			;"
 350"		std	21,-64(1)		;"
 351"		std	22,-56(1)		;"
 352"		sync				;"
 353"		ld	21,-64(1)		;"
 354"		ld	22,-56(1)		;"
 355"		ori	31,31,0			;"
 356"		.rept 14			;"
 357"		b	1f			;"
 358"	1:					;"
 359"		.endr				;"
 360"		blr				;"
 361);
 362
 363/* Assemble the body code between the prologue & epilogue */
 364int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, u32 *fimage, struct codegen_context *ctx,
 365		       u32 *addrs, int pass, bool extra_pass)
 366{
 367	enum stf_barrier_type stf_barrier = stf_barrier_type_get();
 368	const struct bpf_insn *insn = fp->insnsi;
 369	int flen = fp->len;
 370	int i, ret;
 371
 372	/* Start of epilogue code - will only be valid 2nd pass onwards */
 373	u32 exit_addr = addrs[flen];
 374
 375	for (i = 0; i < flen; i++) {
 376		u32 code = insn[i].code;
 377		u32 dst_reg = bpf_to_ppc(insn[i].dst_reg);
 378		u32 src_reg = bpf_to_ppc(insn[i].src_reg);
 379		u32 size = BPF_SIZE(code);
 380		u32 tmp1_reg = bpf_to_ppc(TMP_REG_1);
 381		u32 tmp2_reg = bpf_to_ppc(TMP_REG_2);
 382		u32 save_reg, ret_reg;
 383		s16 off = insn[i].off;
 384		s32 imm = insn[i].imm;
 385		bool func_addr_fixed;
 386		u64 func_addr;
 387		u64 imm64;
 388		u32 true_cond;
 389		u32 tmp_idx;
 390		int j;
 391
 392		/*
 393		 * addrs[] maps a BPF bytecode address into a real offset from
 394		 * the start of the body code.
 395		 */
 396		addrs[i] = ctx->idx * 4;
 397
 398		/*
 399		 * As an optimization, we note down which non-volatile registers
 400		 * are used so that we can only save/restore those in our
 401		 * prologue and epilogue. We do this here regardless of whether
 402		 * the actual BPF instruction uses src/dst registers or not
 403		 * (for instance, BPF_CALL does not use them). The expectation
 404		 * is that those instructions will have src_reg/dst_reg set to
 405		 * 0. Even otherwise, we just lose some prologue/epilogue
 406		 * optimization but everything else should work without
 407		 * any issues.
 408		 */
 409		if (dst_reg >= BPF_PPC_NVR_MIN && dst_reg < 32)
 410			bpf_set_seen_register(ctx, dst_reg);
 411		if (src_reg >= BPF_PPC_NVR_MIN && src_reg < 32)
 412			bpf_set_seen_register(ctx, src_reg);
 413
 414		switch (code) {
 415		/*
 416		 * Arithmetic operations: ADD/SUB/MUL/DIV/MOD/NEG
 417		 */
 418		case BPF_ALU | BPF_ADD | BPF_X: /* (u32) dst += (u32) src */
 419		case BPF_ALU64 | BPF_ADD | BPF_X: /* dst += src */
 420			EMIT(PPC_RAW_ADD(dst_reg, dst_reg, src_reg));
 421			goto bpf_alu32_trunc;
 422		case BPF_ALU | BPF_SUB | BPF_X: /* (u32) dst -= (u32) src */
 423		case BPF_ALU64 | BPF_SUB | BPF_X: /* dst -= src */
 424			EMIT(PPC_RAW_SUB(dst_reg, dst_reg, src_reg));
 425			goto bpf_alu32_trunc;
 426		case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
 427		case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
 428			if (!imm) {
 429				goto bpf_alu32_trunc;
 430			} else if (imm >= -32768 && imm < 32768) {
 431				EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(imm)));
 432			} else {
 433				PPC_LI32(tmp1_reg, imm);
 434				EMIT(PPC_RAW_ADD(dst_reg, dst_reg, tmp1_reg));
 435			}
 436			goto bpf_alu32_trunc;
 437		case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
 438		case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
 439			if (!imm) {
 440				goto bpf_alu32_trunc;
 441			} else if (imm > -32768 && imm <= 32768) {
 442				EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(-imm)));
 443			} else {
 444				PPC_LI32(tmp1_reg, imm);
 445				EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 446			}
 447			goto bpf_alu32_trunc;
 448		case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */
 449		case BPF_ALU64 | BPF_MUL | BPF_X: /* dst *= src */
 450			if (BPF_CLASS(code) == BPF_ALU)
 451				EMIT(PPC_RAW_MULW(dst_reg, dst_reg, src_reg));
 452			else
 453				EMIT(PPC_RAW_MULD(dst_reg, dst_reg, src_reg));
 454			goto bpf_alu32_trunc;
 455		case BPF_ALU | BPF_MUL | BPF_K: /* (u32) dst *= (u32) imm */
 456		case BPF_ALU64 | BPF_MUL | BPF_K: /* dst *= imm */
 457			if (imm >= -32768 && imm < 32768)
 458				EMIT(PPC_RAW_MULI(dst_reg, dst_reg, IMM_L(imm)));
 459			else {
 460				PPC_LI32(tmp1_reg, imm);
 461				if (BPF_CLASS(code) == BPF_ALU)
 462					EMIT(PPC_RAW_MULW(dst_reg, dst_reg, tmp1_reg));
 463				else
 464					EMIT(PPC_RAW_MULD(dst_reg, dst_reg, tmp1_reg));
 465			}
 466			goto bpf_alu32_trunc;
 467		case BPF_ALU | BPF_DIV | BPF_X: /* (u32) dst /= (u32) src */
 468		case BPF_ALU | BPF_MOD | BPF_X: /* (u32) dst %= (u32) src */
 469			if (BPF_OP(code) == BPF_MOD) {
 470				EMIT(PPC_RAW_DIVWU(tmp1_reg, dst_reg, src_reg));
 471				EMIT(PPC_RAW_MULW(tmp1_reg, src_reg, tmp1_reg));
 472				EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 473			} else
 474				EMIT(PPC_RAW_DIVWU(dst_reg, dst_reg, src_reg));
 475			goto bpf_alu32_trunc;
 476		case BPF_ALU64 | BPF_DIV | BPF_X: /* dst /= src */
 477		case BPF_ALU64 | BPF_MOD | BPF_X: /* dst %= src */
 478			if (BPF_OP(code) == BPF_MOD) {
 479				EMIT(PPC_RAW_DIVDU(tmp1_reg, dst_reg, src_reg));
 480				EMIT(PPC_RAW_MULD(tmp1_reg, src_reg, tmp1_reg));
 481				EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 482			} else
 483				EMIT(PPC_RAW_DIVDU(dst_reg, dst_reg, src_reg));
 484			break;
 485		case BPF_ALU | BPF_MOD | BPF_K: /* (u32) dst %= (u32) imm */
 486		case BPF_ALU | BPF_DIV | BPF_K: /* (u32) dst /= (u32) imm */
 487		case BPF_ALU64 | BPF_MOD | BPF_K: /* dst %= imm */
 488		case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
 489			if (imm == 0)
 490				return -EINVAL;
 491			if (imm == 1) {
 492				if (BPF_OP(code) == BPF_DIV) {
 493					goto bpf_alu32_trunc;
 494				} else {
 495					EMIT(PPC_RAW_LI(dst_reg, 0));
 496					break;
 497				}
 498			}
 499
 500			PPC_LI32(tmp1_reg, imm);
 501			switch (BPF_CLASS(code)) {
 502			case BPF_ALU:
 503				if (BPF_OP(code) == BPF_MOD) {
 504					EMIT(PPC_RAW_DIVWU(tmp2_reg, dst_reg, tmp1_reg));
 505					EMIT(PPC_RAW_MULW(tmp1_reg, tmp1_reg, tmp2_reg));
 506					EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 507				} else
 508					EMIT(PPC_RAW_DIVWU(dst_reg, dst_reg, tmp1_reg));
 509				break;
 510			case BPF_ALU64:
 511				if (BPF_OP(code) == BPF_MOD) {
 512					EMIT(PPC_RAW_DIVDU(tmp2_reg, dst_reg, tmp1_reg));
 513					EMIT(PPC_RAW_MULD(tmp1_reg, tmp1_reg, tmp2_reg));
 514					EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
 515				} else
 516					EMIT(PPC_RAW_DIVDU(dst_reg, dst_reg, tmp1_reg));
 517				break;
 518			}
 519			goto bpf_alu32_trunc;
 520		case BPF_ALU | BPF_NEG: /* (u32) dst = -dst */
 521		case BPF_ALU64 | BPF_NEG: /* dst = -dst */
 522			EMIT(PPC_RAW_NEG(dst_reg, dst_reg));
 523			goto bpf_alu32_trunc;
 524
 525		/*
 526		 * Logical operations: AND/OR/XOR/[A]LSH/[A]RSH
 527		 */
 528		case BPF_ALU | BPF_AND | BPF_X: /* (u32) dst = dst & src */
 529		case BPF_ALU64 | BPF_AND | BPF_X: /* dst = dst & src */
 530			EMIT(PPC_RAW_AND(dst_reg, dst_reg, src_reg));
 531			goto bpf_alu32_trunc;
 532		case BPF_ALU | BPF_AND | BPF_K: /* (u32) dst = dst & imm */
 533		case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
 534			if (!IMM_H(imm))
 535				EMIT(PPC_RAW_ANDI(dst_reg, dst_reg, IMM_L(imm)));
 536			else {
 537				/* Sign-extended */
 538				PPC_LI32(tmp1_reg, imm);
 539				EMIT(PPC_RAW_AND(dst_reg, dst_reg, tmp1_reg));
 540			}
 541			goto bpf_alu32_trunc;
 542		case BPF_ALU | BPF_OR | BPF_X: /* dst = (u32) dst | (u32) src */
 543		case BPF_ALU64 | BPF_OR | BPF_X: /* dst = dst | src */
 544			EMIT(PPC_RAW_OR(dst_reg, dst_reg, src_reg));
 545			goto bpf_alu32_trunc;
 546		case BPF_ALU | BPF_OR | BPF_K:/* dst = (u32) dst | (u32) imm */
 547		case BPF_ALU64 | BPF_OR | BPF_K:/* dst = dst | imm */
 548			if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
 549				/* Sign-extended */
 550				PPC_LI32(tmp1_reg, imm);
 551				EMIT(PPC_RAW_OR(dst_reg, dst_reg, tmp1_reg));
 552			} else {
 553				if (IMM_L(imm))
 554					EMIT(PPC_RAW_ORI(dst_reg, dst_reg, IMM_L(imm)));
 555				if (IMM_H(imm))
 556					EMIT(PPC_RAW_ORIS(dst_reg, dst_reg, IMM_H(imm)));
 557			}
 558			goto bpf_alu32_trunc;
 559		case BPF_ALU | BPF_XOR | BPF_X: /* (u32) dst ^= src */
 560		case BPF_ALU64 | BPF_XOR | BPF_X: /* dst ^= src */
 561			EMIT(PPC_RAW_XOR(dst_reg, dst_reg, src_reg));
 562			goto bpf_alu32_trunc;
 563		case BPF_ALU | BPF_XOR | BPF_K: /* (u32) dst ^= (u32) imm */
 564		case BPF_ALU64 | BPF_XOR | BPF_K: /* dst ^= imm */
 565			if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
 566				/* Sign-extended */
 567				PPC_LI32(tmp1_reg, imm);
 568				EMIT(PPC_RAW_XOR(dst_reg, dst_reg, tmp1_reg));
 569			} else {
 570				if (IMM_L(imm))
 571					EMIT(PPC_RAW_XORI(dst_reg, dst_reg, IMM_L(imm)));
 572				if (IMM_H(imm))
 573					EMIT(PPC_RAW_XORIS(dst_reg, dst_reg, IMM_H(imm)));
 574			}
 575			goto bpf_alu32_trunc;
 576		case BPF_ALU | BPF_LSH | BPF_X: /* (u32) dst <<= (u32) src */
 577			/* slw clears top 32 bits */
 578			EMIT(PPC_RAW_SLW(dst_reg, dst_reg, src_reg));
 579			/* skip zero extension move, but set address map. */
 580			if (insn_is_zext(&insn[i + 1]))
 581				addrs[++i] = ctx->idx * 4;
 582			break;
 583		case BPF_ALU64 | BPF_LSH | BPF_X: /* dst <<= src; */
 584			EMIT(PPC_RAW_SLD(dst_reg, dst_reg, src_reg));
 585			break;
 586		case BPF_ALU | BPF_LSH | BPF_K: /* (u32) dst <<== (u32) imm */
 587			/* with imm 0, we still need to clear top 32 bits */
 588			EMIT(PPC_RAW_SLWI(dst_reg, dst_reg, imm));
 589			if (insn_is_zext(&insn[i + 1]))
 590				addrs[++i] = ctx->idx * 4;
 591			break;
 592		case BPF_ALU64 | BPF_LSH | BPF_K: /* dst <<== imm */
 593			if (imm != 0)
 594				EMIT(PPC_RAW_SLDI(dst_reg, dst_reg, imm));
 595			break;
 596		case BPF_ALU | BPF_RSH | BPF_X: /* (u32) dst >>= (u32) src */
 597			EMIT(PPC_RAW_SRW(dst_reg, dst_reg, src_reg));
 598			if (insn_is_zext(&insn[i + 1]))
 599				addrs[++i] = ctx->idx * 4;
 600			break;
 601		case BPF_ALU64 | BPF_RSH | BPF_X: /* dst >>= src */
 602			EMIT(PPC_RAW_SRD(dst_reg, dst_reg, src_reg));
 603			break;
 604		case BPF_ALU | BPF_RSH | BPF_K: /* (u32) dst >>= (u32) imm */
 605			EMIT(PPC_RAW_SRWI(dst_reg, dst_reg, imm));
 606			if (insn_is_zext(&insn[i + 1]))
 607				addrs[++i] = ctx->idx * 4;
 608			break;
 609		case BPF_ALU64 | BPF_RSH | BPF_K: /* dst >>= imm */
 610			if (imm != 0)
 611				EMIT(PPC_RAW_SRDI(dst_reg, dst_reg, imm));
 612			break;
 613		case BPF_ALU | BPF_ARSH | BPF_X: /* (s32) dst >>= src */
 614			EMIT(PPC_RAW_SRAW(dst_reg, dst_reg, src_reg));
 615			goto bpf_alu32_trunc;
 616		case BPF_ALU64 | BPF_ARSH | BPF_X: /* (s64) dst >>= src */
 617			EMIT(PPC_RAW_SRAD(dst_reg, dst_reg, src_reg));
 618			break;
 619		case BPF_ALU | BPF_ARSH | BPF_K: /* (s32) dst >>= imm */
 620			EMIT(PPC_RAW_SRAWI(dst_reg, dst_reg, imm));
 621			goto bpf_alu32_trunc;
 622		case BPF_ALU64 | BPF_ARSH | BPF_K: /* (s64) dst >>= imm */
 623			if (imm != 0)
 624				EMIT(PPC_RAW_SRADI(dst_reg, dst_reg, imm));
 625			break;
 626
 627		/*
 628		 * MOV
 629		 */
 630		case BPF_ALU | BPF_MOV | BPF_X: /* (u32) dst = src */
 631		case BPF_ALU64 | BPF_MOV | BPF_X: /* dst = src */
 632			if (imm == 1) {
 633				/* special mov32 for zext */
 634				EMIT(PPC_RAW_RLWINM(dst_reg, dst_reg, 0, 0, 31));
 635				break;
 636			}
 637			EMIT(PPC_RAW_MR(dst_reg, src_reg));
 638			goto bpf_alu32_trunc;
 639		case BPF_ALU | BPF_MOV | BPF_K: /* (u32) dst = imm */
 640		case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = (s64) imm */
 641			PPC_LI32(dst_reg, imm);
 642			if (imm < 0)
 643				goto bpf_alu32_trunc;
 644			else if (insn_is_zext(&insn[i + 1]))
 645				addrs[++i] = ctx->idx * 4;
 646			break;
 647
 648bpf_alu32_trunc:
 649		/* Truncate to 32-bits */
 650		if (BPF_CLASS(code) == BPF_ALU && !fp->aux->verifier_zext)
 651			EMIT(PPC_RAW_RLWINM(dst_reg, dst_reg, 0, 0, 31));
 652		break;
 653
 654		/*
 655		 * BPF_FROM_BE/LE
 656		 */
 657		case BPF_ALU | BPF_END | BPF_FROM_LE:
 658		case BPF_ALU | BPF_END | BPF_FROM_BE:
 659#ifdef __BIG_ENDIAN__
 660			if (BPF_SRC(code) == BPF_FROM_BE)
 661				goto emit_clear;
 662#else /* !__BIG_ENDIAN__ */
 663			if (BPF_SRC(code) == BPF_FROM_LE)
 664				goto emit_clear;
 665#endif
 666			switch (imm) {
 667			case 16:
 668				/* Rotate 8 bits left & mask with 0x0000ff00 */
 669				EMIT(PPC_RAW_RLWINM(tmp1_reg, dst_reg, 8, 16, 23));
 670				/* Rotate 8 bits right & insert LSB to reg */
 671				EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 24, 31));
 672				/* Move result back to dst_reg */
 673				EMIT(PPC_RAW_MR(dst_reg, tmp1_reg));
 674				break;
 675			case 32:
 676				/*
 677				 * Rotate word left by 8 bits:
 678				 * 2 bytes are already in their final position
 679				 * -- byte 2 and 4 (of bytes 1, 2, 3 and 4)
 680				 */
 681				EMIT(PPC_RAW_RLWINM(tmp1_reg, dst_reg, 8, 0, 31));
 682				/* Rotate 24 bits and insert byte 1 */
 683				EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 0, 7));
 684				/* Rotate 24 bits and insert byte 3 */
 685				EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 16, 23));
 686				EMIT(PPC_RAW_MR(dst_reg, tmp1_reg));
 687				break;
 688			case 64:
 689				/* Store the value to stack and then use byte-reverse loads */
 690				EMIT(PPC_RAW_STD(dst_reg, _R1, bpf_jit_stack_local(ctx)));
 691				EMIT(PPC_RAW_ADDI(tmp1_reg, _R1, bpf_jit_stack_local(ctx)));
 692				if (cpu_has_feature(CPU_FTR_ARCH_206)) {
 693					EMIT(PPC_RAW_LDBRX(dst_reg, 0, tmp1_reg));
 694				} else {
 695					EMIT(PPC_RAW_LWBRX(dst_reg, 0, tmp1_reg));
 696					if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
 697						EMIT(PPC_RAW_SLDI(dst_reg, dst_reg, 32));
 698					EMIT(PPC_RAW_LI(tmp2_reg, 4));
 699					EMIT(PPC_RAW_LWBRX(tmp2_reg, tmp2_reg, tmp1_reg));
 700					if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
 701						EMIT(PPC_RAW_SLDI(tmp2_reg, tmp2_reg, 32));
 702					EMIT(PPC_RAW_OR(dst_reg, dst_reg, tmp2_reg));
 703				}
 704				break;
 705			}
 706			break;
 707
 708emit_clear:
 709			switch (imm) {
 710			case 16:
 711				/* zero-extend 16 bits into 64 bits */
 712				EMIT(PPC_RAW_RLDICL(dst_reg, dst_reg, 0, 48));
 713				if (insn_is_zext(&insn[i + 1]))
 714					addrs[++i] = ctx->idx * 4;
 715				break;
 716			case 32:
 717				if (!fp->aux->verifier_zext)
 718					/* zero-extend 32 bits into 64 bits */
 719					EMIT(PPC_RAW_RLDICL(dst_reg, dst_reg, 0, 32));
 720				break;
 721			case 64:
 722				/* nop */
 723				break;
 724			}
 725			break;
 726
 727		/*
 728		 * BPF_ST NOSPEC (speculation barrier)
 729		 */
 730		case BPF_ST | BPF_NOSPEC:
 731			if (!security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) ||
 732					!security_ftr_enabled(SEC_FTR_STF_BARRIER))
 733				break;
 734
 735			switch (stf_barrier) {
 736			case STF_BARRIER_EIEIO:
 737				EMIT(PPC_RAW_EIEIO() | 0x02000000);
 738				break;
 739			case STF_BARRIER_SYNC_ORI:
 740				EMIT(PPC_RAW_SYNC());
 741				EMIT(PPC_RAW_LD(tmp1_reg, _R13, 0));
 742				EMIT(PPC_RAW_ORI(_R31, _R31, 0));
 743				break;
 744			case STF_BARRIER_FALLBACK:
 745				ctx->seen |= SEEN_FUNC;
 746				PPC_LI64(_R12, dereference_kernel_function_descriptor(bpf_stf_barrier));
 747				EMIT(PPC_RAW_MTCTR(_R12));
 748				EMIT(PPC_RAW_BCTRL());
 749				break;
 750			case STF_BARRIER_NONE:
 751				break;
 752			}
 753			break;
 754
 755		/*
 756		 * BPF_ST(X)
 757		 */
 758		case BPF_STX | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = src */
 759		case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
 760			if (BPF_CLASS(code) == BPF_ST) {
 761				EMIT(PPC_RAW_LI(tmp1_reg, imm));
 762				src_reg = tmp1_reg;
 763			}
 764			EMIT(PPC_RAW_STB(src_reg, dst_reg, off));
 765			break;
 766		case BPF_STX | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = src */
 767		case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
 768			if (BPF_CLASS(code) == BPF_ST) {
 769				EMIT(PPC_RAW_LI(tmp1_reg, imm));
 770				src_reg = tmp1_reg;
 771			}
 772			EMIT(PPC_RAW_STH(src_reg, dst_reg, off));
 773			break;
 774		case BPF_STX | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = src */
 775		case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
 776			if (BPF_CLASS(code) == BPF_ST) {
 777				PPC_LI32(tmp1_reg, imm);
 778				src_reg = tmp1_reg;
 779			}
 780			EMIT(PPC_RAW_STW(src_reg, dst_reg, off));
 781			break;
 782		case BPF_STX | BPF_MEM | BPF_DW: /* (u64 *)(dst + off) = src */
 783		case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
 784			if (BPF_CLASS(code) == BPF_ST) {
 785				PPC_LI32(tmp1_reg, imm);
 786				src_reg = tmp1_reg;
 787			}
 788			if (off % 4) {
 789				EMIT(PPC_RAW_LI(tmp2_reg, off));
 790				EMIT(PPC_RAW_STDX(src_reg, dst_reg, tmp2_reg));
 791			} else {
 792				EMIT(PPC_RAW_STD(src_reg, dst_reg, off));
 793			}
 794			break;
 795
 796		/*
 797		 * BPF_STX ATOMIC (atomic ops)
 798		 */
 799		case BPF_STX | BPF_ATOMIC | BPF_W:
 800		case BPF_STX | BPF_ATOMIC | BPF_DW:
 801			save_reg = tmp2_reg;
 802			ret_reg = src_reg;
 803
 804			/* Get offset into TMP_REG_1 */
 805			EMIT(PPC_RAW_LI(tmp1_reg, off));
 806			tmp_idx = ctx->idx * 4;
 807			/* load value from memory into TMP_REG_2 */
 808			if (size == BPF_DW)
 809				EMIT(PPC_RAW_LDARX(tmp2_reg, tmp1_reg, dst_reg, 0));
 810			else
 811				EMIT(PPC_RAW_LWARX(tmp2_reg, tmp1_reg, dst_reg, 0));
 812
 813			/* Save old value in _R0 */
 814			if (imm & BPF_FETCH)
 815				EMIT(PPC_RAW_MR(_R0, tmp2_reg));
 816
 817			switch (imm) {
 818			case BPF_ADD:
 819			case BPF_ADD | BPF_FETCH:
 820				EMIT(PPC_RAW_ADD(tmp2_reg, tmp2_reg, src_reg));
 821				break;
 822			case BPF_AND:
 823			case BPF_AND | BPF_FETCH:
 824				EMIT(PPC_RAW_AND(tmp2_reg, tmp2_reg, src_reg));
 825				break;
 826			case BPF_OR:
 827			case BPF_OR | BPF_FETCH:
 828				EMIT(PPC_RAW_OR(tmp2_reg, tmp2_reg, src_reg));
 829				break;
 830			case BPF_XOR:
 831			case BPF_XOR | BPF_FETCH:
 832				EMIT(PPC_RAW_XOR(tmp2_reg, tmp2_reg, src_reg));
 833				break;
 834			case BPF_CMPXCHG:
 835				/*
 836				 * Return old value in BPF_REG_0 for BPF_CMPXCHG &
 837				 * in src_reg for other cases.
 838				 */
 839				ret_reg = bpf_to_ppc(BPF_REG_0);
 840
 841				/* Compare with old value in BPF_R0 */
 842				if (size == BPF_DW)
 843					EMIT(PPC_RAW_CMPD(bpf_to_ppc(BPF_REG_0), tmp2_reg));
 844				else
 845					EMIT(PPC_RAW_CMPW(bpf_to_ppc(BPF_REG_0), tmp2_reg));
 846				/* Don't set if different from old value */
 847				PPC_BCC_SHORT(COND_NE, (ctx->idx + 3) * 4);
 848				fallthrough;
 849			case BPF_XCHG:
 850				save_reg = src_reg;
 851				break;
 852			default:
 853				pr_err_ratelimited(
 854					"eBPF filter atomic op code %02x (@%d) unsupported\n",
 855					code, i);
 856				return -EOPNOTSUPP;
 857			}
 858
 859			/* store new value */
 860			if (size == BPF_DW)
 861				EMIT(PPC_RAW_STDCX(save_reg, tmp1_reg, dst_reg));
 862			else
 863				EMIT(PPC_RAW_STWCX(save_reg, tmp1_reg, dst_reg));
 864			/* we're done if this succeeded */
 865			PPC_BCC_SHORT(COND_NE, tmp_idx);
 866
 867			if (imm & BPF_FETCH) {
 868				EMIT(PPC_RAW_MR(ret_reg, _R0));
 869				/*
 870				 * Skip unnecessary zero-extension for 32-bit cmpxchg.
 871				 * For context, see commit 39491867ace5.
 872				 */
 873				if (size != BPF_DW && imm == BPF_CMPXCHG &&
 874				    insn_is_zext(&insn[i + 1]))
 875					addrs[++i] = ctx->idx * 4;
 876			}
 877			break;
 878
 879		/*
 880		 * BPF_LDX
 881		 */
 882		/* dst = *(u8 *)(ul) (src + off) */
 883		case BPF_LDX | BPF_MEM | BPF_B:
 884		case BPF_LDX | BPF_PROBE_MEM | BPF_B:
 885		/* dst = *(u16 *)(ul) (src + off) */
 886		case BPF_LDX | BPF_MEM | BPF_H:
 887		case BPF_LDX | BPF_PROBE_MEM | BPF_H:
 888		/* dst = *(u32 *)(ul) (src + off) */
 889		case BPF_LDX | BPF_MEM | BPF_W:
 890		case BPF_LDX | BPF_PROBE_MEM | BPF_W:
 891		/* dst = *(u64 *)(ul) (src + off) */
 892		case BPF_LDX | BPF_MEM | BPF_DW:
 893		case BPF_LDX | BPF_PROBE_MEM | BPF_DW:
 894			/*
 895			 * As PTR_TO_BTF_ID that uses BPF_PROBE_MEM mode could either be a valid
 896			 * kernel pointer or NULL but not a userspace address, execute BPF_PROBE_MEM
 897			 * load only if addr is kernel address (see is_kernel_addr()), otherwise
 898			 * set dst_reg=0 and move on.
 899			 */
 900			if (BPF_MODE(code) == BPF_PROBE_MEM) {
 901				EMIT(PPC_RAW_ADDI(tmp1_reg, src_reg, off));
 902				if (IS_ENABLED(CONFIG_PPC_BOOK3E_64))
 903					PPC_LI64(tmp2_reg, 0x8000000000000000ul);
 904				else /* BOOK3S_64 */
 905					PPC_LI64(tmp2_reg, PAGE_OFFSET);
 906				EMIT(PPC_RAW_CMPLD(tmp1_reg, tmp2_reg));
 907				PPC_BCC_SHORT(COND_GT, (ctx->idx + 3) * 4);
 908				EMIT(PPC_RAW_LI(dst_reg, 0));
 909				/*
 910				 * Check if 'off' is word aligned for BPF_DW, because
 911				 * we might generate two instructions.
 912				 */
 913				if (BPF_SIZE(code) == BPF_DW && (off & 3))
 914					PPC_JMP((ctx->idx + 3) * 4);
 915				else
 916					PPC_JMP((ctx->idx + 2) * 4);
 917			}
 918
 919			switch (size) {
 920			case BPF_B:
 921				EMIT(PPC_RAW_LBZ(dst_reg, src_reg, off));
 922				break;
 923			case BPF_H:
 924				EMIT(PPC_RAW_LHZ(dst_reg, src_reg, off));
 925				break;
 926			case BPF_W:
 927				EMIT(PPC_RAW_LWZ(dst_reg, src_reg, off));
 928				break;
 929			case BPF_DW:
 930				if (off % 4) {
 931					EMIT(PPC_RAW_LI(tmp1_reg, off));
 932					EMIT(PPC_RAW_LDX(dst_reg, src_reg, tmp1_reg));
 933				} else {
 934					EMIT(PPC_RAW_LD(dst_reg, src_reg, off));
 935				}
 936				break;
 937			}
 938
 939			if (size != BPF_DW && insn_is_zext(&insn[i + 1]))
 940				addrs[++i] = ctx->idx * 4;
 941
 942			if (BPF_MODE(code) == BPF_PROBE_MEM) {
 943				ret = bpf_add_extable_entry(fp, image, fimage, pass, ctx,
 944							    ctx->idx - 1, 4, dst_reg);
 945				if (ret)
 946					return ret;
 947			}
 948			break;
 949
 950		/*
 951		 * Doubleword load
 952		 * 16 byte instruction that uses two 'struct bpf_insn'
 953		 */
 954		case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
 955			imm64 = ((u64)(u32) insn[i].imm) |
 956				    (((u64)(u32) insn[i+1].imm) << 32);
 957			tmp_idx = ctx->idx;
 958			PPC_LI64(dst_reg, imm64);
 959			/* padding to allow full 5 instructions for later patching */
 960			if (!image)
 961				for (j = ctx->idx - tmp_idx; j < 5; j++)
 962					EMIT(PPC_RAW_NOP());
 963			/* Adjust for two bpf instructions */
 964			addrs[++i] = ctx->idx * 4;
 965			break;
 966
 967		/*
 968		 * Return/Exit
 969		 */
 970		case BPF_JMP | BPF_EXIT:
 971			/*
 972			 * If this isn't the very last instruction, branch to
 973			 * the epilogue. If we _are_ the last instruction,
 974			 * we'll just fall through to the epilogue.
 975			 */
 976			if (i != flen - 1) {
 977				ret = bpf_jit_emit_exit_insn(image, ctx, tmp1_reg, exit_addr);
 978				if (ret)
 979					return ret;
 980			}
 981			/* else fall through to the epilogue */
 982			break;
 983
 984		/*
 985		 * Call kernel helper or bpf function
 986		 */
 987		case BPF_JMP | BPF_CALL:
 988			ctx->seen |= SEEN_FUNC;
 989
 990			ret = bpf_jit_get_func_addr(fp, &insn[i], extra_pass,
 991						    &func_addr, &func_addr_fixed);
 992			if (ret < 0)
 993				return ret;
 994
 995			if (func_addr_fixed)
 996				ret = bpf_jit_emit_func_call_hlp(image, ctx, func_addr);
 997			else
 998				ret = bpf_jit_emit_func_call_rel(image, fimage, ctx, func_addr);
 999
1000			if (ret)
1001				return ret;
1002
1003			/* move return value from r3 to BPF_REG_0 */
1004			EMIT(PPC_RAW_MR(bpf_to_ppc(BPF_REG_0), _R3));
1005			break;
1006
1007		/*
1008		 * Jumps and branches
1009		 */
1010		case BPF_JMP | BPF_JA:
1011			PPC_JMP(addrs[i + 1 + off]);
1012			break;
1013
1014		case BPF_JMP | BPF_JGT | BPF_K:
1015		case BPF_JMP | BPF_JGT | BPF_X:
1016		case BPF_JMP | BPF_JSGT | BPF_K:
1017		case BPF_JMP | BPF_JSGT | BPF_X:
1018		case BPF_JMP32 | BPF_JGT | BPF_K:
1019		case BPF_JMP32 | BPF_JGT | BPF_X:
1020		case BPF_JMP32 | BPF_JSGT | BPF_K:
1021		case BPF_JMP32 | BPF_JSGT | BPF_X:
1022			true_cond = COND_GT;
1023			goto cond_branch;
1024		case BPF_JMP | BPF_JLT | BPF_K:
1025		case BPF_JMP | BPF_JLT | BPF_X:
1026		case BPF_JMP | BPF_JSLT | BPF_K:
1027		case BPF_JMP | BPF_JSLT | BPF_X:
1028		case BPF_JMP32 | BPF_JLT | BPF_K:
1029		case BPF_JMP32 | BPF_JLT | BPF_X:
1030		case BPF_JMP32 | BPF_JSLT | BPF_K:
1031		case BPF_JMP32 | BPF_JSLT | BPF_X:
1032			true_cond = COND_LT;
1033			goto cond_branch;
1034		case BPF_JMP | BPF_JGE | BPF_K:
1035		case BPF_JMP | BPF_JGE | BPF_X:
1036		case BPF_JMP | BPF_JSGE | BPF_K:
1037		case BPF_JMP | BPF_JSGE | BPF_X:
1038		case BPF_JMP32 | BPF_JGE | BPF_K:
1039		case BPF_JMP32 | BPF_JGE | BPF_X:
1040		case BPF_JMP32 | BPF_JSGE | BPF_K:
1041		case BPF_JMP32 | BPF_JSGE | BPF_X:
1042			true_cond = COND_GE;
1043			goto cond_branch;
1044		case BPF_JMP | BPF_JLE | BPF_K:
1045		case BPF_JMP | BPF_JLE | BPF_X:
1046		case BPF_JMP | BPF_JSLE | BPF_K:
1047		case BPF_JMP | BPF_JSLE | BPF_X:
1048		case BPF_JMP32 | BPF_JLE | BPF_K:
1049		case BPF_JMP32 | BPF_JLE | BPF_X:
1050		case BPF_JMP32 | BPF_JSLE | BPF_K:
1051		case BPF_JMP32 | BPF_JSLE | BPF_X:
1052			true_cond = COND_LE;
1053			goto cond_branch;
1054		case BPF_JMP | BPF_JEQ | BPF_K:
1055		case BPF_JMP | BPF_JEQ | BPF_X:
1056		case BPF_JMP32 | BPF_JEQ | BPF_K:
1057		case BPF_JMP32 | BPF_JEQ | BPF_X:
1058			true_cond = COND_EQ;
1059			goto cond_branch;
1060		case BPF_JMP | BPF_JNE | BPF_K:
1061		case BPF_JMP | BPF_JNE | BPF_X:
1062		case BPF_JMP32 | BPF_JNE | BPF_K:
1063		case BPF_JMP32 | BPF_JNE | BPF_X:
1064			true_cond = COND_NE;
1065			goto cond_branch;
1066		case BPF_JMP | BPF_JSET | BPF_K:
1067		case BPF_JMP | BPF_JSET | BPF_X:
1068		case BPF_JMP32 | BPF_JSET | BPF_K:
1069		case BPF_JMP32 | BPF_JSET | BPF_X:
1070			true_cond = COND_NE;
1071			/* Fall through */
1072
1073cond_branch:
1074			switch (code) {
1075			case BPF_JMP | BPF_JGT | BPF_X:
1076			case BPF_JMP | BPF_JLT | BPF_X:
1077			case BPF_JMP | BPF_JGE | BPF_X:
1078			case BPF_JMP | BPF_JLE | BPF_X:
1079			case BPF_JMP | BPF_JEQ | BPF_X:
1080			case BPF_JMP | BPF_JNE | BPF_X:
1081			case BPF_JMP32 | BPF_JGT | BPF_X:
1082			case BPF_JMP32 | BPF_JLT | BPF_X:
1083			case BPF_JMP32 | BPF_JGE | BPF_X:
1084			case BPF_JMP32 | BPF_JLE | BPF_X:
1085			case BPF_JMP32 | BPF_JEQ | BPF_X:
1086			case BPF_JMP32 | BPF_JNE | BPF_X:
1087				/* unsigned comparison */
1088				if (BPF_CLASS(code) == BPF_JMP32)
1089					EMIT(PPC_RAW_CMPLW(dst_reg, src_reg));
1090				else
1091					EMIT(PPC_RAW_CMPLD(dst_reg, src_reg));
1092				break;
1093			case BPF_JMP | BPF_JSGT | BPF_X:
1094			case BPF_JMP | BPF_JSLT | BPF_X:
1095			case BPF_JMP | BPF_JSGE | BPF_X:
1096			case BPF_JMP | BPF_JSLE | BPF_X:
1097			case BPF_JMP32 | BPF_JSGT | BPF_X:
1098			case BPF_JMP32 | BPF_JSLT | BPF_X:
1099			case BPF_JMP32 | BPF_JSGE | BPF_X:
1100			case BPF_JMP32 | BPF_JSLE | BPF_X:
1101				/* signed comparison */
1102				if (BPF_CLASS(code) == BPF_JMP32)
1103					EMIT(PPC_RAW_CMPW(dst_reg, src_reg));
1104				else
1105					EMIT(PPC_RAW_CMPD(dst_reg, src_reg));
1106				break;
1107			case BPF_JMP | BPF_JSET | BPF_X:
1108			case BPF_JMP32 | BPF_JSET | BPF_X:
1109				if (BPF_CLASS(code) == BPF_JMP) {
1110					EMIT(PPC_RAW_AND_DOT(tmp1_reg, dst_reg, src_reg));
1111				} else {
1112					EMIT(PPC_RAW_AND(tmp1_reg, dst_reg, src_reg));
1113					EMIT(PPC_RAW_RLWINM_DOT(tmp1_reg, tmp1_reg, 0, 0, 31));
1114				}
1115				break;
1116			case BPF_JMP | BPF_JNE | BPF_K:
1117			case BPF_JMP | BPF_JEQ | BPF_K:
1118			case BPF_JMP | BPF_JGT | BPF_K:
1119			case BPF_JMP | BPF_JLT | BPF_K:
1120			case BPF_JMP | BPF_JGE | BPF_K:
1121			case BPF_JMP | BPF_JLE | BPF_K:
1122			case BPF_JMP32 | BPF_JNE | BPF_K:
1123			case BPF_JMP32 | BPF_JEQ | BPF_K:
1124			case BPF_JMP32 | BPF_JGT | BPF_K:
1125			case BPF_JMP32 | BPF_JLT | BPF_K:
1126			case BPF_JMP32 | BPF_JGE | BPF_K:
1127			case BPF_JMP32 | BPF_JLE | BPF_K:
1128			{
1129				bool is_jmp32 = BPF_CLASS(code) == BPF_JMP32;
1130
1131				/*
1132				 * Need sign-extended load, so only positive
1133				 * values can be used as imm in cmpldi
1134				 */
1135				if (imm >= 0 && imm < 32768) {
1136					if (is_jmp32)
1137						EMIT(PPC_RAW_CMPLWI(dst_reg, imm));
1138					else
1139						EMIT(PPC_RAW_CMPLDI(dst_reg, imm));
1140				} else {
1141					/* sign-extending load */
1142					PPC_LI32(tmp1_reg, imm);
1143					/* ... but unsigned comparison */
1144					if (is_jmp32)
1145						EMIT(PPC_RAW_CMPLW(dst_reg, tmp1_reg));
1146					else
1147						EMIT(PPC_RAW_CMPLD(dst_reg, tmp1_reg));
1148				}
1149				break;
1150			}
1151			case BPF_JMP | BPF_JSGT | BPF_K:
1152			case BPF_JMP | BPF_JSLT | BPF_K:
1153			case BPF_JMP | BPF_JSGE | BPF_K:
1154			case BPF_JMP | BPF_JSLE | BPF_K:
1155			case BPF_JMP32 | BPF_JSGT | BPF_K:
1156			case BPF_JMP32 | BPF_JSLT | BPF_K:
1157			case BPF_JMP32 | BPF_JSGE | BPF_K:
1158			case BPF_JMP32 | BPF_JSLE | BPF_K:
1159			{
1160				bool is_jmp32 = BPF_CLASS(code) == BPF_JMP32;
1161
1162				/*
1163				 * signed comparison, so any 16-bit value
1164				 * can be used in cmpdi
1165				 */
1166				if (imm >= -32768 && imm < 32768) {
1167					if (is_jmp32)
1168						EMIT(PPC_RAW_CMPWI(dst_reg, imm));
1169					else
1170						EMIT(PPC_RAW_CMPDI(dst_reg, imm));
1171				} else {
1172					PPC_LI32(tmp1_reg, imm);
1173					if (is_jmp32)
1174						EMIT(PPC_RAW_CMPW(dst_reg, tmp1_reg));
1175					else
1176						EMIT(PPC_RAW_CMPD(dst_reg, tmp1_reg));
1177				}
1178				break;
1179			}
1180			case BPF_JMP | BPF_JSET | BPF_K:
1181			case BPF_JMP32 | BPF_JSET | BPF_K:
1182				/* andi does not sign-extend the immediate */
1183				if (imm >= 0 && imm < 32768)
1184					/* PPC_ANDI is _only/always_ dot-form */
1185					EMIT(PPC_RAW_ANDI(tmp1_reg, dst_reg, imm));
1186				else {
1187					PPC_LI32(tmp1_reg, imm);
1188					if (BPF_CLASS(code) == BPF_JMP) {
1189						EMIT(PPC_RAW_AND_DOT(tmp1_reg, dst_reg,
1190								     tmp1_reg));
1191					} else {
1192						EMIT(PPC_RAW_AND(tmp1_reg, dst_reg, tmp1_reg));
1193						EMIT(PPC_RAW_RLWINM_DOT(tmp1_reg, tmp1_reg,
1194									0, 0, 31));
1195					}
1196				}
1197				break;
1198			}
1199			PPC_BCC(true_cond, addrs[i + 1 + off]);
1200			break;
1201
1202		/*
1203		 * Tail call
1204		 */
1205		case BPF_JMP | BPF_TAIL_CALL:
1206			ctx->seen |= SEEN_TAILCALL;
1207			ret = bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]);
1208			if (ret < 0)
1209				return ret;
1210			break;
1211
1212		default:
1213			/*
1214			 * The filter contains something cruel & unusual.
1215			 * We don't handle it, but also there shouldn't be
1216			 * anything missing from our list.
1217			 */
1218			pr_err_ratelimited("eBPF filter opcode %04x (@%d) unsupported\n",
1219					code, i);
1220			return -ENOTSUPP;
1221		}
1222	}
1223
1224	/* Set end-of-body-code address for exit. */
1225	addrs[i] = ctx->idx * 4;
1226
1227	return 0;
1228}