Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.6.
   1/*
   2 * bpf_jit_comp64.c: eBPF JIT compiler
   3 *
   4 * Copyright 2016 Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
   5 *		  IBM Corporation
   6 *
   7 * Based on the powerpc classic BPF JIT compiler by Matt Evans
   8 *
   9 * This program is free software; you can redistribute it and/or
  10 * modify it under the terms of the GNU General Public License
  11 * as published by the Free Software Foundation; version 2
  12 * of the License.
  13 */
  14#include <linux/moduleloader.h>
  15#include <asm/cacheflush.h>
  16#include <linux/netdevice.h>
  17#include <linux/filter.h>
  18#include <linux/if_vlan.h>
  19#include <asm/kprobes.h>
  20#include <linux/bpf.h>
  21
  22#include "bpf_jit64.h"
  23
  24static void bpf_jit_fill_ill_insns(void *area, unsigned int size)
  25{
  26	memset32(area, BREAKPOINT_INSTRUCTION, size/4);
  27}
  28
  29static inline void bpf_flush_icache(void *start, void *end)
  30{
  31	smp_wmb();
  32	flush_icache_range((unsigned long)start, (unsigned long)end);
  33}
  34
  35static inline bool bpf_is_seen_register(struct codegen_context *ctx, int i)
  36{
  37	return (ctx->seen & (1 << (31 - b2p[i])));
  38}
  39
  40static inline void bpf_set_seen_register(struct codegen_context *ctx, int i)
  41{
  42	ctx->seen |= (1 << (31 - b2p[i]));
  43}
  44
  45static inline bool bpf_has_stack_frame(struct codegen_context *ctx)
  46{
  47	/*
  48	 * We only need a stack frame if:
  49	 * - we call other functions (kernel helpers), or
  50	 * - the bpf program uses its stack area
  51	 * The latter condition is deduced from the usage of BPF_REG_FP
  52	 */
  53	return ctx->seen & SEEN_FUNC || bpf_is_seen_register(ctx, BPF_REG_FP);
  54}
  55
  56/*
  57 * When not setting up our own stackframe, the redzone usage is:
  58 *
  59 *		[	prev sp		] <-------------
  60 *		[	  ...       	] 		|
  61 * sp (r1) --->	[    stack pointer	] --------------
  62 *		[   nv gpr save area	] 8*8
  63 *		[    tail_call_cnt	] 8
  64 *		[    local_tmp_var	] 8
  65 *		[   unused red zone	] 208 bytes protected
  66 */
  67static int bpf_jit_stack_local(struct codegen_context *ctx)
  68{
  69	if (bpf_has_stack_frame(ctx))
  70		return STACK_FRAME_MIN_SIZE + ctx->stack_size;
  71	else
  72		return -(BPF_PPC_STACK_SAVE + 16);
  73}
  74
  75static int bpf_jit_stack_tailcallcnt(struct codegen_context *ctx)
  76{
  77	return bpf_jit_stack_local(ctx) + 8;
  78}
  79
  80static int bpf_jit_stack_offsetof(struct codegen_context *ctx, int reg)
  81{
  82	if (reg >= BPF_PPC_NVR_MIN && reg < 32)
  83		return (bpf_has_stack_frame(ctx) ?
  84			(BPF_PPC_STACKFRAME + ctx->stack_size) : 0)
  85				- (8 * (32 - reg));
  86
  87	pr_err("BPF JIT is asking about unknown registers");
  88	BUG();
  89}
  90
  91static void bpf_jit_emit_skb_loads(u32 *image, struct codegen_context *ctx)
  92{
  93	/*
  94	 * Load skb->len and skb->data_len
  95	 * r3 points to skb
  96	 */
  97	PPC_LWZ(b2p[SKB_HLEN_REG], 3, offsetof(struct sk_buff, len));
  98	PPC_LWZ(b2p[TMP_REG_1], 3, offsetof(struct sk_buff, data_len));
  99	/* header_len = len - data_len */
 100	PPC_SUB(b2p[SKB_HLEN_REG], b2p[SKB_HLEN_REG], b2p[TMP_REG_1]);
 101
 102	/* skb->data pointer */
 103	PPC_BPF_LL(b2p[SKB_DATA_REG], 3, offsetof(struct sk_buff, data));
 104}
 105
 106static void bpf_jit_build_prologue(u32 *image, struct codegen_context *ctx)
 107{
 108	int i;
 109
 110	/*
 111	 * Initialize tail_call_cnt if we do tail calls.
 112	 * Otherwise, put in NOPs so that it can be skipped when we are
 113	 * invoked through a tail call.
 114	 */
 115	if (ctx->seen & SEEN_TAILCALL) {
 116		PPC_LI(b2p[TMP_REG_1], 0);
 117		/* this goes in the redzone */
 118		PPC_BPF_STL(b2p[TMP_REG_1], 1, -(BPF_PPC_STACK_SAVE + 8));
 119	} else {
 120		PPC_NOP();
 121		PPC_NOP();
 122	}
 123
 124#define BPF_TAILCALL_PROLOGUE_SIZE	8
 125
 126	if (bpf_has_stack_frame(ctx)) {
 127		/*
 128		 * We need a stack frame, but we don't necessarily need to
 129		 * save/restore LR unless we call other functions
 130		 */
 131		if (ctx->seen & SEEN_FUNC) {
 132			EMIT(PPC_INST_MFLR | __PPC_RT(R0));
 133			PPC_BPF_STL(0, 1, PPC_LR_STKOFF);
 134		}
 135
 136		PPC_BPF_STLU(1, 1, -(BPF_PPC_STACKFRAME + ctx->stack_size));
 137	}
 138
 139	/*
 140	 * Back up non-volatile regs -- BPF registers 6-10
 141	 * If we haven't created our own stack frame, we save these
 142	 * in the protected zone below the previous stack frame
 143	 */
 144	for (i = BPF_REG_6; i <= BPF_REG_10; i++)
 145		if (bpf_is_seen_register(ctx, i))
 146			PPC_BPF_STL(b2p[i], 1, bpf_jit_stack_offsetof(ctx, b2p[i]));
 147
 148	/*
 149	 * Save additional non-volatile regs if we cache skb
 150	 * Also, setup skb data
 151	 */
 152	if (ctx->seen & SEEN_SKB) {
 153		PPC_BPF_STL(b2p[SKB_HLEN_REG], 1,
 154				bpf_jit_stack_offsetof(ctx, b2p[SKB_HLEN_REG]));
 155		PPC_BPF_STL(b2p[SKB_DATA_REG], 1,
 156				bpf_jit_stack_offsetof(ctx, b2p[SKB_DATA_REG]));
 157		bpf_jit_emit_skb_loads(image, ctx);
 158	}
 159
 160	/* Setup frame pointer to point to the bpf stack area */
 161	if (bpf_is_seen_register(ctx, BPF_REG_FP))
 162		PPC_ADDI(b2p[BPF_REG_FP], 1,
 163				STACK_FRAME_MIN_SIZE + ctx->stack_size);
 164}
 165
 166static void bpf_jit_emit_common_epilogue(u32 *image, struct codegen_context *ctx)
 167{
 168	int i;
 169
 170	/* Restore NVRs */
 171	for (i = BPF_REG_6; i <= BPF_REG_10; i++)
 172		if (bpf_is_seen_register(ctx, i))
 173			PPC_BPF_LL(b2p[i], 1, bpf_jit_stack_offsetof(ctx, b2p[i]));
 174
 175	/* Restore non-volatile registers used for skb cache */
 176	if (ctx->seen & SEEN_SKB) {
 177		PPC_BPF_LL(b2p[SKB_HLEN_REG], 1,
 178				bpf_jit_stack_offsetof(ctx, b2p[SKB_HLEN_REG]));
 179		PPC_BPF_LL(b2p[SKB_DATA_REG], 1,
 180				bpf_jit_stack_offsetof(ctx, b2p[SKB_DATA_REG]));
 181	}
 182
 183	/* Tear down our stack frame */
 184	if (bpf_has_stack_frame(ctx)) {
 185		PPC_ADDI(1, 1, BPF_PPC_STACKFRAME + ctx->stack_size);
 186		if (ctx->seen & SEEN_FUNC) {
 187			PPC_BPF_LL(0, 1, PPC_LR_STKOFF);
 188			PPC_MTLR(0);
 189		}
 190	}
 191}
 192
 193static void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx)
 194{
 195	bpf_jit_emit_common_epilogue(image, ctx);
 196
 197	/* Move result to r3 */
 198	PPC_MR(3, b2p[BPF_REG_0]);
 199
 200	PPC_BLR();
 201}
 202
 203static void bpf_jit_emit_func_call(u32 *image, struct codegen_context *ctx, u64 func)
 204{
 205#ifdef PPC64_ELF_ABI_v1
 206	/* func points to the function descriptor */
 207	PPC_LI64(b2p[TMP_REG_2], func);
 208	/* Load actual entry point from function descriptor */
 209	PPC_BPF_LL(b2p[TMP_REG_1], b2p[TMP_REG_2], 0);
 210	/* ... and move it to LR */
 211	PPC_MTLR(b2p[TMP_REG_1]);
 212	/*
 213	 * Load TOC from function descriptor at offset 8.
 214	 * We can clobber r2 since we get called through a
 215	 * function pointer (so caller will save/restore r2)
 216	 * and since we don't use a TOC ourself.
 217	 */
 218	PPC_BPF_LL(2, b2p[TMP_REG_2], 8);
 219#else
 220	/* We can clobber r12 */
 221	PPC_FUNC_ADDR(12, func);
 222	PPC_MTLR(12);
 223#endif
 224	PPC_BLRL();
 225}
 226
 227static void bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out)
 228{
 229	/*
 230	 * By now, the eBPF program has already setup parameters in r3, r4 and r5
 231	 * r3/BPF_REG_1 - pointer to ctx -- passed as is to the next bpf program
 232	 * r4/BPF_REG_2 - pointer to bpf_array
 233	 * r5/BPF_REG_3 - index in bpf_array
 234	 */
 235	int b2p_bpf_array = b2p[BPF_REG_2];
 236	int b2p_index = b2p[BPF_REG_3];
 237
 238	/*
 239	 * if (index >= array->map.max_entries)
 240	 *   goto out;
 241	 */
 242	PPC_LWZ(b2p[TMP_REG_1], b2p_bpf_array, offsetof(struct bpf_array, map.max_entries));
 243	PPC_RLWINM(b2p_index, b2p_index, 0, 0, 31);
 244	PPC_CMPLW(b2p_index, b2p[TMP_REG_1]);
 245	PPC_BCC(COND_GE, out);
 246
 247	/*
 248	 * if (tail_call_cnt > MAX_TAIL_CALL_CNT)
 249	 *   goto out;
 250	 */
 251	PPC_LD(b2p[TMP_REG_1], 1, bpf_jit_stack_tailcallcnt(ctx));
 252	PPC_CMPLWI(b2p[TMP_REG_1], MAX_TAIL_CALL_CNT);
 253	PPC_BCC(COND_GT, out);
 254
 255	/*
 256	 * tail_call_cnt++;
 257	 */
 258	PPC_ADDI(b2p[TMP_REG_1], b2p[TMP_REG_1], 1);
 259	PPC_BPF_STL(b2p[TMP_REG_1], 1, bpf_jit_stack_tailcallcnt(ctx));
 260
 261	/* prog = array->ptrs[index]; */
 262	PPC_MULI(b2p[TMP_REG_1], b2p_index, 8);
 263	PPC_ADD(b2p[TMP_REG_1], b2p[TMP_REG_1], b2p_bpf_array);
 264	PPC_LD(b2p[TMP_REG_1], b2p[TMP_REG_1], offsetof(struct bpf_array, ptrs));
 265
 266	/*
 267	 * if (prog == NULL)
 268	 *   goto out;
 269	 */
 270	PPC_CMPLDI(b2p[TMP_REG_1], 0);
 271	PPC_BCC(COND_EQ, out);
 272
 273	/* goto *(prog->bpf_func + prologue_size); */
 274	PPC_LD(b2p[TMP_REG_1], b2p[TMP_REG_1], offsetof(struct bpf_prog, bpf_func));
 275#ifdef PPC64_ELF_ABI_v1
 276	/* skip past the function descriptor */
 277	PPC_ADDI(b2p[TMP_REG_1], b2p[TMP_REG_1],
 278			FUNCTION_DESCR_SIZE + BPF_TAILCALL_PROLOGUE_SIZE);
 279#else
 280	PPC_ADDI(b2p[TMP_REG_1], b2p[TMP_REG_1], BPF_TAILCALL_PROLOGUE_SIZE);
 281#endif
 282	PPC_MTCTR(b2p[TMP_REG_1]);
 283
 284	/* tear down stack, restore NVRs, ... */
 285	bpf_jit_emit_common_epilogue(image, ctx);
 286
 287	PPC_BCTR();
 288	/* out: */
 289}
 290
 291/* Assemble the body code between the prologue & epilogue */
 292static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
 293			      struct codegen_context *ctx,
 294			      u32 *addrs)
 295{
 296	const struct bpf_insn *insn = fp->insnsi;
 297	int flen = fp->len;
 298	int i;
 299
 300	/* Start of epilogue code - will only be valid 2nd pass onwards */
 301	u32 exit_addr = addrs[flen];
 302
 303	for (i = 0; i < flen; i++) {
 304		u32 code = insn[i].code;
 305		u32 dst_reg = b2p[insn[i].dst_reg];
 306		u32 src_reg = b2p[insn[i].src_reg];
 307		s16 off = insn[i].off;
 308		s32 imm = insn[i].imm;
 309		u64 imm64;
 310		u8 *func;
 311		u32 true_cond;
 312
 313		/*
 314		 * addrs[] maps a BPF bytecode address into a real offset from
 315		 * the start of the body code.
 316		 */
 317		addrs[i] = ctx->idx * 4;
 318
 319		/*
 320		 * As an optimization, we note down which non-volatile registers
 321		 * are used so that we can only save/restore those in our
 322		 * prologue and epilogue. We do this here regardless of whether
 323		 * the actual BPF instruction uses src/dst registers or not
 324		 * (for instance, BPF_CALL does not use them). The expectation
 325		 * is that those instructions will have src_reg/dst_reg set to
 326		 * 0. Even otherwise, we just lose some prologue/epilogue
 327		 * optimization but everything else should work without
 328		 * any issues.
 329		 */
 330		if (dst_reg >= BPF_PPC_NVR_MIN && dst_reg < 32)
 331			bpf_set_seen_register(ctx, insn[i].dst_reg);
 332		if (src_reg >= BPF_PPC_NVR_MIN && src_reg < 32)
 333			bpf_set_seen_register(ctx, insn[i].src_reg);
 334
 335		switch (code) {
 336		/*
 337		 * Arithmetic operations: ADD/SUB/MUL/DIV/MOD/NEG
 338		 */
 339		case BPF_ALU | BPF_ADD | BPF_X: /* (u32) dst += (u32) src */
 340		case BPF_ALU64 | BPF_ADD | BPF_X: /* dst += src */
 341			PPC_ADD(dst_reg, dst_reg, src_reg);
 342			goto bpf_alu32_trunc;
 343		case BPF_ALU | BPF_SUB | BPF_X: /* (u32) dst -= (u32) src */
 344		case BPF_ALU64 | BPF_SUB | BPF_X: /* dst -= src */
 345			PPC_SUB(dst_reg, dst_reg, src_reg);
 346			goto bpf_alu32_trunc;
 347		case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
 348		case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
 349		case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
 350		case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
 351			if (BPF_OP(code) == BPF_SUB)
 352				imm = -imm;
 353			if (imm) {
 354				if (imm >= -32768 && imm < 32768)
 355					PPC_ADDI(dst_reg, dst_reg, IMM_L(imm));
 356				else {
 357					PPC_LI32(b2p[TMP_REG_1], imm);
 358					PPC_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]);
 359				}
 360			}
 361			goto bpf_alu32_trunc;
 362		case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */
 363		case BPF_ALU64 | BPF_MUL | BPF_X: /* dst *= src */
 364			if (BPF_CLASS(code) == BPF_ALU)
 365				PPC_MULW(dst_reg, dst_reg, src_reg);
 366			else
 367				PPC_MULD(dst_reg, dst_reg, src_reg);
 368			goto bpf_alu32_trunc;
 369		case BPF_ALU | BPF_MUL | BPF_K: /* (u32) dst *= (u32) imm */
 370		case BPF_ALU64 | BPF_MUL | BPF_K: /* dst *= imm */
 371			if (imm >= -32768 && imm < 32768)
 372				PPC_MULI(dst_reg, dst_reg, IMM_L(imm));
 373			else {
 374				PPC_LI32(b2p[TMP_REG_1], imm);
 375				if (BPF_CLASS(code) == BPF_ALU)
 376					PPC_MULW(dst_reg, dst_reg,
 377							b2p[TMP_REG_1]);
 378				else
 379					PPC_MULD(dst_reg, dst_reg,
 380							b2p[TMP_REG_1]);
 381			}
 382			goto bpf_alu32_trunc;
 383		case BPF_ALU | BPF_DIV | BPF_X: /* (u32) dst /= (u32) src */
 384		case BPF_ALU | BPF_MOD | BPF_X: /* (u32) dst %= (u32) src */
 385			if (BPF_OP(code) == BPF_MOD) {
 386				PPC_DIVWU(b2p[TMP_REG_1], dst_reg, src_reg);
 387				PPC_MULW(b2p[TMP_REG_1], src_reg,
 388						b2p[TMP_REG_1]);
 389				PPC_SUB(dst_reg, dst_reg, b2p[TMP_REG_1]);
 390			} else
 391				PPC_DIVWU(dst_reg, dst_reg, src_reg);
 392			goto bpf_alu32_trunc;
 393		case BPF_ALU64 | BPF_DIV | BPF_X: /* dst /= src */
 394		case BPF_ALU64 | BPF_MOD | BPF_X: /* dst %= src */
 395			if (BPF_OP(code) == BPF_MOD) {
 396				PPC_DIVD(b2p[TMP_REG_1], dst_reg, src_reg);
 397				PPC_MULD(b2p[TMP_REG_1], src_reg,
 398						b2p[TMP_REG_1]);
 399				PPC_SUB(dst_reg, dst_reg, b2p[TMP_REG_1]);
 400			} else
 401				PPC_DIVD(dst_reg, dst_reg, src_reg);
 402			break;
 403		case BPF_ALU | BPF_MOD | BPF_K: /* (u32) dst %= (u32) imm */
 404		case BPF_ALU | BPF_DIV | BPF_K: /* (u32) dst /= (u32) imm */
 405		case BPF_ALU64 | BPF_MOD | BPF_K: /* dst %= imm */
 406		case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
 407			if (imm == 0)
 408				return -EINVAL;
 409			else if (imm == 1)
 410				goto bpf_alu32_trunc;
 411
 412			PPC_LI32(b2p[TMP_REG_1], imm);
 413			switch (BPF_CLASS(code)) {
 414			case BPF_ALU:
 415				if (BPF_OP(code) == BPF_MOD) {
 416					PPC_DIVWU(b2p[TMP_REG_2], dst_reg,
 417							b2p[TMP_REG_1]);
 418					PPC_MULW(b2p[TMP_REG_1],
 419							b2p[TMP_REG_1],
 420							b2p[TMP_REG_2]);
 421					PPC_SUB(dst_reg, dst_reg,
 422							b2p[TMP_REG_1]);
 423				} else
 424					PPC_DIVWU(dst_reg, dst_reg,
 425							b2p[TMP_REG_1]);
 426				break;
 427			case BPF_ALU64:
 428				if (BPF_OP(code) == BPF_MOD) {
 429					PPC_DIVD(b2p[TMP_REG_2], dst_reg,
 430							b2p[TMP_REG_1]);
 431					PPC_MULD(b2p[TMP_REG_1],
 432							b2p[TMP_REG_1],
 433							b2p[TMP_REG_2]);
 434					PPC_SUB(dst_reg, dst_reg,
 435							b2p[TMP_REG_1]);
 436				} else
 437					PPC_DIVD(dst_reg, dst_reg,
 438							b2p[TMP_REG_1]);
 439				break;
 440			}
 441			goto bpf_alu32_trunc;
 442		case BPF_ALU | BPF_NEG: /* (u32) dst = -dst */
 443		case BPF_ALU64 | BPF_NEG: /* dst = -dst */
 444			PPC_NEG(dst_reg, dst_reg);
 445			goto bpf_alu32_trunc;
 446
 447		/*
 448		 * Logical operations: AND/OR/XOR/[A]LSH/[A]RSH
 449		 */
 450		case BPF_ALU | BPF_AND | BPF_X: /* (u32) dst = dst & src */
 451		case BPF_ALU64 | BPF_AND | BPF_X: /* dst = dst & src */
 452			PPC_AND(dst_reg, dst_reg, src_reg);
 453			goto bpf_alu32_trunc;
 454		case BPF_ALU | BPF_AND | BPF_K: /* (u32) dst = dst & imm */
 455		case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
 456			if (!IMM_H(imm))
 457				PPC_ANDI(dst_reg, dst_reg, IMM_L(imm));
 458			else {
 459				/* Sign-extended */
 460				PPC_LI32(b2p[TMP_REG_1], imm);
 461				PPC_AND(dst_reg, dst_reg, b2p[TMP_REG_1]);
 462			}
 463			goto bpf_alu32_trunc;
 464		case BPF_ALU | BPF_OR | BPF_X: /* dst = (u32) dst | (u32) src */
 465		case BPF_ALU64 | BPF_OR | BPF_X: /* dst = dst | src */
 466			PPC_OR(dst_reg, dst_reg, src_reg);
 467			goto bpf_alu32_trunc;
 468		case BPF_ALU | BPF_OR | BPF_K:/* dst = (u32) dst | (u32) imm */
 469		case BPF_ALU64 | BPF_OR | BPF_K:/* dst = dst | imm */
 470			if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
 471				/* Sign-extended */
 472				PPC_LI32(b2p[TMP_REG_1], imm);
 473				PPC_OR(dst_reg, dst_reg, b2p[TMP_REG_1]);
 474			} else {
 475				if (IMM_L(imm))
 476					PPC_ORI(dst_reg, dst_reg, IMM_L(imm));
 477				if (IMM_H(imm))
 478					PPC_ORIS(dst_reg, dst_reg, IMM_H(imm));
 479			}
 480			goto bpf_alu32_trunc;
 481		case BPF_ALU | BPF_XOR | BPF_X: /* (u32) dst ^= src */
 482		case BPF_ALU64 | BPF_XOR | BPF_X: /* dst ^= src */
 483			PPC_XOR(dst_reg, dst_reg, src_reg);
 484			goto bpf_alu32_trunc;
 485		case BPF_ALU | BPF_XOR | BPF_K: /* (u32) dst ^= (u32) imm */
 486		case BPF_ALU64 | BPF_XOR | BPF_K: /* dst ^= imm */
 487			if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
 488				/* Sign-extended */
 489				PPC_LI32(b2p[TMP_REG_1], imm);
 490				PPC_XOR(dst_reg, dst_reg, b2p[TMP_REG_1]);
 491			} else {
 492				if (IMM_L(imm))
 493					PPC_XORI(dst_reg, dst_reg, IMM_L(imm));
 494				if (IMM_H(imm))
 495					PPC_XORIS(dst_reg, dst_reg, IMM_H(imm));
 496			}
 497			goto bpf_alu32_trunc;
 498		case BPF_ALU | BPF_LSH | BPF_X: /* (u32) dst <<= (u32) src */
 499			/* slw clears top 32 bits */
 500			PPC_SLW(dst_reg, dst_reg, src_reg);
 501			break;
 502		case BPF_ALU64 | BPF_LSH | BPF_X: /* dst <<= src; */
 503			PPC_SLD(dst_reg, dst_reg, src_reg);
 504			break;
 505		case BPF_ALU | BPF_LSH | BPF_K: /* (u32) dst <<== (u32) imm */
 506			/* with imm 0, we still need to clear top 32 bits */
 507			PPC_SLWI(dst_reg, dst_reg, imm);
 508			break;
 509		case BPF_ALU64 | BPF_LSH | BPF_K: /* dst <<== imm */
 510			if (imm != 0)
 511				PPC_SLDI(dst_reg, dst_reg, imm);
 512			break;
 513		case BPF_ALU | BPF_RSH | BPF_X: /* (u32) dst >>= (u32) src */
 514			PPC_SRW(dst_reg, dst_reg, src_reg);
 515			break;
 516		case BPF_ALU64 | BPF_RSH | BPF_X: /* dst >>= src */
 517			PPC_SRD(dst_reg, dst_reg, src_reg);
 518			break;
 519		case BPF_ALU | BPF_RSH | BPF_K: /* (u32) dst >>= (u32) imm */
 520			PPC_SRWI(dst_reg, dst_reg, imm);
 521			break;
 522		case BPF_ALU64 | BPF_RSH | BPF_K: /* dst >>= imm */
 523			if (imm != 0)
 524				PPC_SRDI(dst_reg, dst_reg, imm);
 525			break;
 526		case BPF_ALU64 | BPF_ARSH | BPF_X: /* (s64) dst >>= src */
 527			PPC_SRAD(dst_reg, dst_reg, src_reg);
 528			break;
 529		case BPF_ALU64 | BPF_ARSH | BPF_K: /* (s64) dst >>= imm */
 530			if (imm != 0)
 531				PPC_SRADI(dst_reg, dst_reg, imm);
 532			break;
 533
 534		/*
 535		 * MOV
 536		 */
 537		case BPF_ALU | BPF_MOV | BPF_X: /* (u32) dst = src */
 538		case BPF_ALU64 | BPF_MOV | BPF_X: /* dst = src */
 539			PPC_MR(dst_reg, src_reg);
 540			goto bpf_alu32_trunc;
 541		case BPF_ALU | BPF_MOV | BPF_K: /* (u32) dst = imm */
 542		case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = (s64) imm */
 543			PPC_LI32(dst_reg, imm);
 544			if (imm < 0)
 545				goto bpf_alu32_trunc;
 546			break;
 547
 548bpf_alu32_trunc:
 549		/* Truncate to 32-bits */
 550		if (BPF_CLASS(code) == BPF_ALU)
 551			PPC_RLWINM(dst_reg, dst_reg, 0, 0, 31);
 552		break;
 553
 554		/*
 555		 * BPF_FROM_BE/LE
 556		 */
 557		case BPF_ALU | BPF_END | BPF_FROM_LE:
 558		case BPF_ALU | BPF_END | BPF_FROM_BE:
 559#ifdef __BIG_ENDIAN__
 560			if (BPF_SRC(code) == BPF_FROM_BE)
 561				goto emit_clear;
 562#else /* !__BIG_ENDIAN__ */
 563			if (BPF_SRC(code) == BPF_FROM_LE)
 564				goto emit_clear;
 565#endif
 566			switch (imm) {
 567			case 16:
 568				/* Rotate 8 bits left & mask with 0x0000ff00 */
 569				PPC_RLWINM(b2p[TMP_REG_1], dst_reg, 8, 16, 23);
 570				/* Rotate 8 bits right & insert LSB to reg */
 571				PPC_RLWIMI(b2p[TMP_REG_1], dst_reg, 24, 24, 31);
 572				/* Move result back to dst_reg */
 573				PPC_MR(dst_reg, b2p[TMP_REG_1]);
 574				break;
 575			case 32:
 576				/*
 577				 * Rotate word left by 8 bits:
 578				 * 2 bytes are already in their final position
 579				 * -- byte 2 and 4 (of bytes 1, 2, 3 and 4)
 580				 */
 581				PPC_RLWINM(b2p[TMP_REG_1], dst_reg, 8, 0, 31);
 582				/* Rotate 24 bits and insert byte 1 */
 583				PPC_RLWIMI(b2p[TMP_REG_1], dst_reg, 24, 0, 7);
 584				/* Rotate 24 bits and insert byte 3 */
 585				PPC_RLWIMI(b2p[TMP_REG_1], dst_reg, 24, 16, 23);
 586				PPC_MR(dst_reg, b2p[TMP_REG_1]);
 587				break;
 588			case 64:
 589				/*
 590				 * Way easier and faster(?) to store the value
 591				 * into stack and then use ldbrx
 592				 *
 593				 * ctx->seen will be reliable in pass2, but
 594				 * the instructions generated will remain the
 595				 * same across all passes
 596				 */
 597				PPC_STD(dst_reg, 1, bpf_jit_stack_local(ctx));
 598				PPC_ADDI(b2p[TMP_REG_1], 1, bpf_jit_stack_local(ctx));
 599				PPC_LDBRX(dst_reg, 0, b2p[TMP_REG_1]);
 600				break;
 601			}
 602			break;
 603
 604emit_clear:
 605			switch (imm) {
 606			case 16:
 607				/* zero-extend 16 bits into 64 bits */
 608				PPC_RLDICL(dst_reg, dst_reg, 0, 48);
 609				break;
 610			case 32:
 611				/* zero-extend 32 bits into 64 bits */
 612				PPC_RLDICL(dst_reg, dst_reg, 0, 32);
 613				break;
 614			case 64:
 615				/* nop */
 616				break;
 617			}
 618			break;
 619
 620		/*
 621		 * BPF_ST(X)
 622		 */
 623		case BPF_STX | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = src */
 624		case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
 625			if (BPF_CLASS(code) == BPF_ST) {
 626				PPC_LI(b2p[TMP_REG_1], imm);
 627				src_reg = b2p[TMP_REG_1];
 628			}
 629			PPC_STB(src_reg, dst_reg, off);
 630			break;
 631		case BPF_STX | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = src */
 632		case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
 633			if (BPF_CLASS(code) == BPF_ST) {
 634				PPC_LI(b2p[TMP_REG_1], imm);
 635				src_reg = b2p[TMP_REG_1];
 636			}
 637			PPC_STH(src_reg, dst_reg, off);
 638			break;
 639		case BPF_STX | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = src */
 640		case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
 641			if (BPF_CLASS(code) == BPF_ST) {
 642				PPC_LI32(b2p[TMP_REG_1], imm);
 643				src_reg = b2p[TMP_REG_1];
 644			}
 645			PPC_STW(src_reg, dst_reg, off);
 646			break;
 647		case BPF_STX | BPF_MEM | BPF_DW: /* (u64 *)(dst + off) = src */
 648		case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
 649			if (BPF_CLASS(code) == BPF_ST) {
 650				PPC_LI32(b2p[TMP_REG_1], imm);
 651				src_reg = b2p[TMP_REG_1];
 652			}
 653			PPC_STD(src_reg, dst_reg, off);
 654			break;
 655
 656		/*
 657		 * BPF_STX XADD (atomic_add)
 658		 */
 659		/* *(u32 *)(dst + off) += src */
 660		case BPF_STX | BPF_XADD | BPF_W:
 661			/* Get EA into TMP_REG_1 */
 662			PPC_ADDI(b2p[TMP_REG_1], dst_reg, off);
 663			/* error if EA is not word-aligned */
 664			PPC_ANDI(b2p[TMP_REG_2], b2p[TMP_REG_1], 0x03);
 665			PPC_BCC_SHORT(COND_EQ, (ctx->idx * 4) + 12);
 666			PPC_LI(b2p[BPF_REG_0], 0);
 667			PPC_JMP(exit_addr);
 668			/* load value from memory into TMP_REG_2 */
 669			PPC_BPF_LWARX(b2p[TMP_REG_2], 0, b2p[TMP_REG_1], 0);
 670			/* add value from src_reg into this */
 671			PPC_ADD(b2p[TMP_REG_2], b2p[TMP_REG_2], src_reg);
 672			/* store result back */
 673			PPC_BPF_STWCX(b2p[TMP_REG_2], 0, b2p[TMP_REG_1]);
 674			/* we're done if this succeeded */
 675			PPC_BCC_SHORT(COND_EQ, (ctx->idx * 4) + (7*4));
 676			/* otherwise, let's try once more */
 677			PPC_BPF_LWARX(b2p[TMP_REG_2], 0, b2p[TMP_REG_1], 0);
 678			PPC_ADD(b2p[TMP_REG_2], b2p[TMP_REG_2], src_reg);
 679			PPC_BPF_STWCX(b2p[TMP_REG_2], 0, b2p[TMP_REG_1]);
 680			/* exit if the store was not successful */
 681			PPC_LI(b2p[BPF_REG_0], 0);
 682			PPC_BCC(COND_NE, exit_addr);
 683			break;
 684		/* *(u64 *)(dst + off) += src */
 685		case BPF_STX | BPF_XADD | BPF_DW:
 686			PPC_ADDI(b2p[TMP_REG_1], dst_reg, off);
 687			/* error if EA is not doubleword-aligned */
 688			PPC_ANDI(b2p[TMP_REG_2], b2p[TMP_REG_1], 0x07);
 689			PPC_BCC_SHORT(COND_EQ, (ctx->idx * 4) + (3*4));
 690			PPC_LI(b2p[BPF_REG_0], 0);
 691			PPC_JMP(exit_addr);
 692			PPC_BPF_LDARX(b2p[TMP_REG_2], 0, b2p[TMP_REG_1], 0);
 693			PPC_ADD(b2p[TMP_REG_2], b2p[TMP_REG_2], src_reg);
 694			PPC_BPF_STDCX(b2p[TMP_REG_2], 0, b2p[TMP_REG_1]);
 695			PPC_BCC_SHORT(COND_EQ, (ctx->idx * 4) + (7*4));
 696			PPC_BPF_LDARX(b2p[TMP_REG_2], 0, b2p[TMP_REG_1], 0);
 697			PPC_ADD(b2p[TMP_REG_2], b2p[TMP_REG_2], src_reg);
 698			PPC_BPF_STDCX(b2p[TMP_REG_2], 0, b2p[TMP_REG_1]);
 699			PPC_LI(b2p[BPF_REG_0], 0);
 700			PPC_BCC(COND_NE, exit_addr);
 701			break;
 702
 703		/*
 704		 * BPF_LDX
 705		 */
 706		/* dst = *(u8 *)(ul) (src + off) */
 707		case BPF_LDX | BPF_MEM | BPF_B:
 708			PPC_LBZ(dst_reg, src_reg, off);
 709			break;
 710		/* dst = *(u16 *)(ul) (src + off) */
 711		case BPF_LDX | BPF_MEM | BPF_H:
 712			PPC_LHZ(dst_reg, src_reg, off);
 713			break;
 714		/* dst = *(u32 *)(ul) (src + off) */
 715		case BPF_LDX | BPF_MEM | BPF_W:
 716			PPC_LWZ(dst_reg, src_reg, off);
 717			break;
 718		/* dst = *(u64 *)(ul) (src + off) */
 719		case BPF_LDX | BPF_MEM | BPF_DW:
 720			PPC_LD(dst_reg, src_reg, off);
 721			break;
 722
 723		/*
 724		 * Doubleword load
 725		 * 16 byte instruction that uses two 'struct bpf_insn'
 726		 */
 727		case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
 728			imm64 = ((u64)(u32) insn[i].imm) |
 729				    (((u64)(u32) insn[i+1].imm) << 32);
 730			/* Adjust for two bpf instructions */
 731			addrs[++i] = ctx->idx * 4;
 732			PPC_LI64(dst_reg, imm64);
 733			break;
 734
 735		/*
 736		 * Return/Exit
 737		 */
 738		case BPF_JMP | BPF_EXIT:
 739			/*
 740			 * If this isn't the very last instruction, branch to
 741			 * the epilogue. If we _are_ the last instruction,
 742			 * we'll just fall through to the epilogue.
 743			 */
 744			if (i != flen - 1)
 745				PPC_JMP(exit_addr);
 746			/* else fall through to the epilogue */
 747			break;
 748
 749		/*
 750		 * Call kernel helper
 751		 */
 752		case BPF_JMP | BPF_CALL:
 753			ctx->seen |= SEEN_FUNC;
 754			func = (u8 *) __bpf_call_base + imm;
 755
 756			/* Save skb pointer if we need to re-cache skb data */
 757			if ((ctx->seen & SEEN_SKB) &&
 758			    bpf_helper_changes_pkt_data(func))
 759				PPC_BPF_STL(3, 1, bpf_jit_stack_local(ctx));
 760
 761			bpf_jit_emit_func_call(image, ctx, (u64)func);
 762
 763			/* move return value from r3 to BPF_REG_0 */
 764			PPC_MR(b2p[BPF_REG_0], 3);
 765
 766			/* refresh skb cache */
 767			if ((ctx->seen & SEEN_SKB) &&
 768			    bpf_helper_changes_pkt_data(func)) {
 769				/* reload skb pointer to r3 */
 770				PPC_BPF_LL(3, 1, bpf_jit_stack_local(ctx));
 771				bpf_jit_emit_skb_loads(image, ctx);
 772			}
 773			break;
 774
 775		/*
 776		 * Jumps and branches
 777		 */
 778		case BPF_JMP | BPF_JA:
 779			PPC_JMP(addrs[i + 1 + off]);
 780			break;
 781
 782		case BPF_JMP | BPF_JGT | BPF_K:
 783		case BPF_JMP | BPF_JGT | BPF_X:
 784		case BPF_JMP | BPF_JSGT | BPF_K:
 785		case BPF_JMP | BPF_JSGT | BPF_X:
 786			true_cond = COND_GT;
 787			goto cond_branch;
 788		case BPF_JMP | BPF_JLT | BPF_K:
 789		case BPF_JMP | BPF_JLT | BPF_X:
 790		case BPF_JMP | BPF_JSLT | BPF_K:
 791		case BPF_JMP | BPF_JSLT | BPF_X:
 792			true_cond = COND_LT;
 793			goto cond_branch;
 794		case BPF_JMP | BPF_JGE | BPF_K:
 795		case BPF_JMP | BPF_JGE | BPF_X:
 796		case BPF_JMP | BPF_JSGE | BPF_K:
 797		case BPF_JMP | BPF_JSGE | BPF_X:
 798			true_cond = COND_GE;
 799			goto cond_branch;
 800		case BPF_JMP | BPF_JLE | BPF_K:
 801		case BPF_JMP | BPF_JLE | BPF_X:
 802		case BPF_JMP | BPF_JSLE | BPF_K:
 803		case BPF_JMP | BPF_JSLE | BPF_X:
 804			true_cond = COND_LE;
 805			goto cond_branch;
 806		case BPF_JMP | BPF_JEQ | BPF_K:
 807		case BPF_JMP | BPF_JEQ | BPF_X:
 808			true_cond = COND_EQ;
 809			goto cond_branch;
 810		case BPF_JMP | BPF_JNE | BPF_K:
 811		case BPF_JMP | BPF_JNE | BPF_X:
 812			true_cond = COND_NE;
 813			goto cond_branch;
 814		case BPF_JMP | BPF_JSET | BPF_K:
 815		case BPF_JMP | BPF_JSET | BPF_X:
 816			true_cond = COND_NE;
 817			/* Fall through */
 818
 819cond_branch:
 820			switch (code) {
 821			case BPF_JMP | BPF_JGT | BPF_X:
 822			case BPF_JMP | BPF_JLT | BPF_X:
 823			case BPF_JMP | BPF_JGE | BPF_X:
 824			case BPF_JMP | BPF_JLE | BPF_X:
 825			case BPF_JMP | BPF_JEQ | BPF_X:
 826			case BPF_JMP | BPF_JNE | BPF_X:
 827				/* unsigned comparison */
 828				PPC_CMPLD(dst_reg, src_reg);
 829				break;
 830			case BPF_JMP | BPF_JSGT | BPF_X:
 831			case BPF_JMP | BPF_JSLT | BPF_X:
 832			case BPF_JMP | BPF_JSGE | BPF_X:
 833			case BPF_JMP | BPF_JSLE | BPF_X:
 834				/* signed comparison */
 835				PPC_CMPD(dst_reg, src_reg);
 836				break;
 837			case BPF_JMP | BPF_JSET | BPF_X:
 838				PPC_AND_DOT(b2p[TMP_REG_1], dst_reg, src_reg);
 839				break;
 840			case BPF_JMP | BPF_JNE | BPF_K:
 841			case BPF_JMP | BPF_JEQ | BPF_K:
 842			case BPF_JMP | BPF_JGT | BPF_K:
 843			case BPF_JMP | BPF_JLT | BPF_K:
 844			case BPF_JMP | BPF_JGE | BPF_K:
 845			case BPF_JMP | BPF_JLE | BPF_K:
 846				/*
 847				 * Need sign-extended load, so only positive
 848				 * values can be used as imm in cmpldi
 849				 */
 850				if (imm >= 0 && imm < 32768)
 851					PPC_CMPLDI(dst_reg, imm);
 852				else {
 853					/* sign-extending load */
 854					PPC_LI32(b2p[TMP_REG_1], imm);
 855					/* ... but unsigned comparison */
 856					PPC_CMPLD(dst_reg, b2p[TMP_REG_1]);
 857				}
 858				break;
 859			case BPF_JMP | BPF_JSGT | BPF_K:
 860			case BPF_JMP | BPF_JSLT | BPF_K:
 861			case BPF_JMP | BPF_JSGE | BPF_K:
 862			case BPF_JMP | BPF_JSLE | BPF_K:
 863				/*
 864				 * signed comparison, so any 16-bit value
 865				 * can be used in cmpdi
 866				 */
 867				if (imm >= -32768 && imm < 32768)
 868					PPC_CMPDI(dst_reg, imm);
 869				else {
 870					PPC_LI32(b2p[TMP_REG_1], imm);
 871					PPC_CMPD(dst_reg, b2p[TMP_REG_1]);
 872				}
 873				break;
 874			case BPF_JMP | BPF_JSET | BPF_K:
 875				/* andi does not sign-extend the immediate */
 876				if (imm >= 0 && imm < 32768)
 877					/* PPC_ANDI is _only/always_ dot-form */
 878					PPC_ANDI(b2p[TMP_REG_1], dst_reg, imm);
 879				else {
 880					PPC_LI32(b2p[TMP_REG_1], imm);
 881					PPC_AND_DOT(b2p[TMP_REG_1], dst_reg,
 882						    b2p[TMP_REG_1]);
 883				}
 884				break;
 885			}
 886			PPC_BCC(true_cond, addrs[i + 1 + off]);
 887			break;
 888
 889		/*
 890		 * Loads from packet header/data
 891		 * Assume 32-bit input value in imm and X (src_reg)
 892		 */
 893
 894		/* Absolute loads */
 895		case BPF_LD | BPF_W | BPF_ABS:
 896			func = (u8 *)CHOOSE_LOAD_FUNC(imm, sk_load_word);
 897			goto common_load_abs;
 898		case BPF_LD | BPF_H | BPF_ABS:
 899			func = (u8 *)CHOOSE_LOAD_FUNC(imm, sk_load_half);
 900			goto common_load_abs;
 901		case BPF_LD | BPF_B | BPF_ABS:
 902			func = (u8 *)CHOOSE_LOAD_FUNC(imm, sk_load_byte);
 903common_load_abs:
 904			/*
 905			 * Load from [imm]
 906			 * Load into r4, which can just be passed onto
 907			 *  skb load helpers as the second parameter
 908			 */
 909			PPC_LI32(4, imm);
 910			goto common_load;
 911
 912		/* Indirect loads */
 913		case BPF_LD | BPF_W | BPF_IND:
 914			func = (u8 *)sk_load_word;
 915			goto common_load_ind;
 916		case BPF_LD | BPF_H | BPF_IND:
 917			func = (u8 *)sk_load_half;
 918			goto common_load_ind;
 919		case BPF_LD | BPF_B | BPF_IND:
 920			func = (u8 *)sk_load_byte;
 921common_load_ind:
 922			/*
 923			 * Load from [src_reg + imm]
 924			 * Treat src_reg as a 32-bit value
 925			 */
 926			PPC_EXTSW(4, src_reg);
 927			if (imm) {
 928				if (imm >= -32768 && imm < 32768)
 929					PPC_ADDI(4, 4, IMM_L(imm));
 930				else {
 931					PPC_LI32(b2p[TMP_REG_1], imm);
 932					PPC_ADD(4, 4, b2p[TMP_REG_1]);
 933				}
 934			}
 935
 936common_load:
 937			ctx->seen |= SEEN_SKB;
 938			ctx->seen |= SEEN_FUNC;
 939			bpf_jit_emit_func_call(image, ctx, (u64)func);
 940
 941			/*
 942			 * Helper returns 'lt' condition on error, and an
 943			 * appropriate return value in BPF_REG_0
 944			 */
 945			PPC_BCC(COND_LT, exit_addr);
 946			break;
 947
 948		/*
 949		 * Tail call
 950		 */
 951		case BPF_JMP | BPF_TAIL_CALL:
 952			ctx->seen |= SEEN_TAILCALL;
 953			bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]);
 954			break;
 955
 956		default:
 957			/*
 958			 * The filter contains something cruel & unusual.
 959			 * We don't handle it, but also there shouldn't be
 960			 * anything missing from our list.
 961			 */
 962			pr_err_ratelimited("eBPF filter opcode %04x (@%d) unsupported\n",
 963					code, i);
 964			return -ENOTSUPP;
 965		}
 966	}
 967
 968	/* Set end-of-body-code address for exit. */
 969	addrs[i] = ctx->idx * 4;
 970
 971	return 0;
 972}
 973
 974struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
 975{
 976	u32 proglen;
 977	u32 alloclen;
 978	u8 *image = NULL;
 979	u32 *code_base;
 980	u32 *addrs;
 981	struct codegen_context cgctx;
 982	int pass;
 983	int flen;
 984	struct bpf_binary_header *bpf_hdr;
 985	struct bpf_prog *org_fp = fp;
 986	struct bpf_prog *tmp_fp;
 987	bool bpf_blinded = false;
 988
 989	if (!fp->jit_requested)
 990		return org_fp;
 991
 992	tmp_fp = bpf_jit_blind_constants(org_fp);
 993	if (IS_ERR(tmp_fp))
 994		return org_fp;
 995
 996	if (tmp_fp != org_fp) {
 997		bpf_blinded = true;
 998		fp = tmp_fp;
 999	}
1000
1001	flen = fp->len;
1002	addrs = kzalloc((flen+1) * sizeof(*addrs), GFP_KERNEL);
1003	if (addrs == NULL) {
1004		fp = org_fp;
1005		goto out;
1006	}
1007
1008	memset(&cgctx, 0, sizeof(struct codegen_context));
1009
1010	/* Make sure that the stack is quadword aligned. */
1011	cgctx.stack_size = round_up(fp->aux->stack_depth, 16);
1012
1013	/* Scouting faux-generate pass 0 */
1014	if (bpf_jit_build_body(fp, 0, &cgctx, addrs)) {
1015		/* We hit something illegal or unsupported. */
1016		fp = org_fp;
1017		goto out;
1018	}
1019
1020	/*
1021	 * Pretend to build prologue, given the features we've seen.  This will
1022	 * update ctgtx.idx as it pretends to output instructions, then we can
1023	 * calculate total size from idx.
1024	 */
1025	bpf_jit_build_prologue(0, &cgctx);
1026	bpf_jit_build_epilogue(0, &cgctx);
1027
1028	proglen = cgctx.idx * 4;
1029	alloclen = proglen + FUNCTION_DESCR_SIZE;
1030
1031	bpf_hdr = bpf_jit_binary_alloc(alloclen, &image, 4,
1032			bpf_jit_fill_ill_insns);
1033	if (!bpf_hdr) {
1034		fp = org_fp;
1035		goto out;
1036	}
1037
1038	code_base = (u32 *)(image + FUNCTION_DESCR_SIZE);
1039
1040	/* Code generation passes 1-2 */
1041	for (pass = 1; pass < 3; pass++) {
1042		/* Now build the prologue, body code & epilogue for real. */
1043		cgctx.idx = 0;
1044		bpf_jit_build_prologue(code_base, &cgctx);
1045		bpf_jit_build_body(fp, code_base, &cgctx, addrs);
1046		bpf_jit_build_epilogue(code_base, &cgctx);
1047
1048		if (bpf_jit_enable > 1)
1049			pr_info("Pass %d: shrink = %d, seen = 0x%x\n", pass,
1050				proglen - (cgctx.idx * 4), cgctx.seen);
1051	}
1052
1053	if (bpf_jit_enable > 1)
1054		/*
1055		 * Note that we output the base address of the code_base
1056		 * rather than image, since opcodes are in code_base.
1057		 */
1058		bpf_jit_dump(flen, proglen, pass, code_base);
1059
1060#ifdef PPC64_ELF_ABI_v1
1061	/* Function descriptor nastiness: Address + TOC */
1062	((u64 *)image)[0] = (u64)code_base;
1063	((u64 *)image)[1] = local_paca->kernel_toc;
1064#endif
1065
1066	fp->bpf_func = (void *)image;
1067	fp->jited = 1;
1068	fp->jited_len = alloclen;
1069
1070	bpf_flush_icache(bpf_hdr, (u8 *)bpf_hdr + (bpf_hdr->pages * PAGE_SIZE));
1071
1072out:
1073	kfree(addrs);
1074
1075	if (bpf_blinded)
1076		bpf_jit_prog_release_other(fp, fp == org_fp ? tmp_fp : org_fp);
1077
1078	return fp;
1079}
1080
1081/* Overriding bpf_jit_free() as we don't set images read-only. */
1082void bpf_jit_free(struct bpf_prog *fp)
1083{
1084	unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
1085	struct bpf_binary_header *bpf_hdr = (void *)addr;
1086
1087	if (fp->jited)
1088		bpf_jit_binary_free(bpf_hdr);
1089
1090	bpf_prog_unlock_free(fp);
1091}