s390/extable: convert to relative table with data
[linux-2.6-microblaze.git] / arch / s390 / net / bpf_jit_comp.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * BPF Jit compiler for s390.
4  *
5  * Minimum build requirements:
6  *
7  *  - HAVE_MARCH_Z196_FEATURES: laal, laalg
8  *  - HAVE_MARCH_Z10_FEATURES: msfi, cgrj, clgrj
9  *  - HAVE_MARCH_Z9_109_FEATURES: alfi, llilf, clfi, oilf, nilf
10  *  - 64BIT
11  *
12  * Copyright IBM Corp. 2012,2015
13  *
14  * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
15  *            Michael Holzheu <holzheu@linux.vnet.ibm.com>
16  */
17
18 #define KMSG_COMPONENT "bpf_jit"
19 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
20
21 #include <linux/netdevice.h>
22 #include <linux/filter.h>
23 #include <linux/init.h>
24 #include <linux/bpf.h>
25 #include <linux/mm.h>
26 #include <linux/kernel.h>
27 #include <asm/cacheflush.h>
28 #include <asm/extable.h>
29 #include <asm/dis.h>
30 #include <asm/facility.h>
31 #include <asm/nospec-branch.h>
32 #include <asm/set_memory.h>
33 #include "bpf_jit.h"
34
35 struct bpf_jit {
36         u32 seen;               /* Flags to remember seen eBPF instructions */
37         u32 seen_reg[16];       /* Array to remember which registers are used */
38         u32 *addrs;             /* Array with relative instruction addresses */
39         u8 *prg_buf;            /* Start of program */
40         int size;               /* Size of program and literal pool */
41         int size_prg;           /* Size of program */
42         int prg;                /* Current position in program */
43         int lit32_start;        /* Start of 32-bit literal pool */
44         int lit32;              /* Current position in 32-bit literal pool */
45         int lit64_start;        /* Start of 64-bit literal pool */
46         int lit64;              /* Current position in 64-bit literal pool */
47         int base_ip;            /* Base address for literal pool */
48         int exit_ip;            /* Address of exit */
49         int r1_thunk_ip;        /* Address of expoline thunk for 'br %r1' */
50         int r14_thunk_ip;       /* Address of expoline thunk for 'br %r14' */
51         int tail_call_start;    /* Tail call start offset */
52         int excnt;              /* Number of exception table entries */
53 };
54
55 #define SEEN_MEM        BIT(0)          /* use mem[] for temporary storage */
56 #define SEEN_LITERAL    BIT(1)          /* code uses literals */
57 #define SEEN_FUNC       BIT(2)          /* calls C functions */
58 #define SEEN_TAIL_CALL  BIT(3)          /* code uses tail calls */
59 #define SEEN_STACK      (SEEN_FUNC | SEEN_MEM)
60
61 /*
62  * s390 registers
63  */
64 #define REG_W0          (MAX_BPF_JIT_REG + 0)   /* Work register 1 (even) */
65 #define REG_W1          (MAX_BPF_JIT_REG + 1)   /* Work register 2 (odd) */
66 #define REG_L           (MAX_BPF_JIT_REG + 2)   /* Literal pool register */
67 #define REG_15          (MAX_BPF_JIT_REG + 3)   /* Register 15 */
68 #define REG_0           REG_W0                  /* Register 0 */
69 #define REG_1           REG_W1                  /* Register 1 */
70 #define REG_2           BPF_REG_1               /* Register 2 */
71 #define REG_14          BPF_REG_0               /* Register 14 */
72
73 /*
74  * Mapping of BPF registers to s390 registers
75  */
76 static const int reg2hex[] = {
77         /* Return code */
78         [BPF_REG_0]     = 14,
79         /* Function parameters */
80         [BPF_REG_1]     = 2,
81         [BPF_REG_2]     = 3,
82         [BPF_REG_3]     = 4,
83         [BPF_REG_4]     = 5,
84         [BPF_REG_5]     = 6,
85         /* Call saved registers */
86         [BPF_REG_6]     = 7,
87         [BPF_REG_7]     = 8,
88         [BPF_REG_8]     = 9,
89         [BPF_REG_9]     = 10,
90         /* BPF stack pointer */
91         [BPF_REG_FP]    = 13,
92         /* Register for blinding */
93         [BPF_REG_AX]    = 12,
94         /* Work registers for s390x backend */
95         [REG_W0]        = 0,
96         [REG_W1]        = 1,
97         [REG_L]         = 11,
98         [REG_15]        = 15,
99 };
100
101 static inline u32 reg(u32 dst_reg, u32 src_reg)
102 {
103         return reg2hex[dst_reg] << 4 | reg2hex[src_reg];
104 }
105
106 static inline u32 reg_high(u32 reg)
107 {
108         return reg2hex[reg] << 4;
109 }
110
111 static inline void reg_set_seen(struct bpf_jit *jit, u32 b1)
112 {
113         u32 r1 = reg2hex[b1];
114
115         if (r1 >= 6 && r1 <= 15 && !jit->seen_reg[r1])
116                 jit->seen_reg[r1] = 1;
117 }
118
119 #define REG_SET_SEEN(b1)                                        \
120 ({                                                              \
121         reg_set_seen(jit, b1);                                  \
122 })
123
124 #define REG_SEEN(b1) jit->seen_reg[reg2hex[(b1)]]
125
126 /*
127  * EMIT macros for code generation
128  */
129
130 #define _EMIT2(op)                                              \
131 ({                                                              \
132         if (jit->prg_buf)                                       \
133                 *(u16 *) (jit->prg_buf + jit->prg) = (op);      \
134         jit->prg += 2;                                          \
135 })
136
137 #define EMIT2(op, b1, b2)                                       \
138 ({                                                              \
139         _EMIT2((op) | reg(b1, b2));                             \
140         REG_SET_SEEN(b1);                                       \
141         REG_SET_SEEN(b2);                                       \
142 })
143
144 #define _EMIT4(op)                                              \
145 ({                                                              \
146         if (jit->prg_buf)                                       \
147                 *(u32 *) (jit->prg_buf + jit->prg) = (op);      \
148         jit->prg += 4;                                          \
149 })
150
151 #define EMIT4(op, b1, b2)                                       \
152 ({                                                              \
153         _EMIT4((op) | reg(b1, b2));                             \
154         REG_SET_SEEN(b1);                                       \
155         REG_SET_SEEN(b2);                                       \
156 })
157
158 #define EMIT4_RRF(op, b1, b2, b3)                               \
159 ({                                                              \
160         _EMIT4((op) | reg_high(b3) << 8 | reg(b1, b2));         \
161         REG_SET_SEEN(b1);                                       \
162         REG_SET_SEEN(b2);                                       \
163         REG_SET_SEEN(b3);                                       \
164 })
165
166 #define _EMIT4_DISP(op, disp)                                   \
167 ({                                                              \
168         unsigned int __disp = (disp) & 0xfff;                   \
169         _EMIT4((op) | __disp);                                  \
170 })
171
172 #define EMIT4_DISP(op, b1, b2, disp)                            \
173 ({                                                              \
174         _EMIT4_DISP((op) | reg_high(b1) << 16 |                 \
175                     reg_high(b2) << 8, (disp));                 \
176         REG_SET_SEEN(b1);                                       \
177         REG_SET_SEEN(b2);                                       \
178 })
179
180 #define EMIT4_IMM(op, b1, imm)                                  \
181 ({                                                              \
182         unsigned int __imm = (imm) & 0xffff;                    \
183         _EMIT4((op) | reg_high(b1) << 16 | __imm);              \
184         REG_SET_SEEN(b1);                                       \
185 })
186
187 #define EMIT4_PCREL(op, pcrel)                                  \
188 ({                                                              \
189         long __pcrel = ((pcrel) >> 1) & 0xffff;                 \
190         _EMIT4((op) | __pcrel);                                 \
191 })
192
193 #define EMIT4_PCREL_RIC(op, mask, target)                       \
194 ({                                                              \
195         int __rel = ((target) - jit->prg) / 2;                  \
196         _EMIT4((op) | (mask) << 20 | (__rel & 0xffff));         \
197 })
198
199 #define _EMIT6(op1, op2)                                        \
200 ({                                                              \
201         if (jit->prg_buf) {                                     \
202                 *(u32 *) (jit->prg_buf + jit->prg) = (op1);     \
203                 *(u16 *) (jit->prg_buf + jit->prg + 4) = (op2); \
204         }                                                       \
205         jit->prg += 6;                                          \
206 })
207
208 #define _EMIT6_DISP(op1, op2, disp)                             \
209 ({                                                              \
210         unsigned int __disp = (disp) & 0xfff;                   \
211         _EMIT6((op1) | __disp, op2);                            \
212 })
213
214 #define _EMIT6_DISP_LH(op1, op2, disp)                          \
215 ({                                                              \
216         u32 _disp = (u32) (disp);                               \
217         unsigned int __disp_h = _disp & 0xff000;                \
218         unsigned int __disp_l = _disp & 0x00fff;                \
219         _EMIT6((op1) | __disp_l, (op2) | __disp_h >> 4);        \
220 })
221
222 #define EMIT6_DISP_LH(op1, op2, b1, b2, b3, disp)               \
223 ({                                                              \
224         _EMIT6_DISP_LH((op1) | reg(b1, b2) << 16 |              \
225                        reg_high(b3) << 8, op2, disp);           \
226         REG_SET_SEEN(b1);                                       \
227         REG_SET_SEEN(b2);                                       \
228         REG_SET_SEEN(b3);                                       \
229 })
230
231 #define EMIT6_PCREL_RIEB(op1, op2, b1, b2, mask, target)        \
232 ({                                                              \
233         unsigned int rel = (int)((target) - jit->prg) / 2;      \
234         _EMIT6((op1) | reg(b1, b2) << 16 | (rel & 0xffff),      \
235                (op2) | (mask) << 12);                           \
236         REG_SET_SEEN(b1);                                       \
237         REG_SET_SEEN(b2);                                       \
238 })
239
240 #define EMIT6_PCREL_RIEC(op1, op2, b1, imm, mask, target)       \
241 ({                                                              \
242         unsigned int rel = (int)((target) - jit->prg) / 2;      \
243         _EMIT6((op1) | (reg_high(b1) | (mask)) << 16 |          \
244                 (rel & 0xffff), (op2) | ((imm) & 0xff) << 8);   \
245         REG_SET_SEEN(b1);                                       \
246         BUILD_BUG_ON(((unsigned long) (imm)) > 0xff);           \
247 })
248
249 #define EMIT6_PCREL(op1, op2, b1, b2, i, off, mask)             \
250 ({                                                              \
251         int rel = (addrs[(i) + (off) + 1] - jit->prg) / 2;      \
252         _EMIT6((op1) | reg(b1, b2) << 16 | (rel & 0xffff), (op2) | (mask));\
253         REG_SET_SEEN(b1);                                       \
254         REG_SET_SEEN(b2);                                       \
255 })
256
257 #define EMIT6_PCREL_RILB(op, b, target)                         \
258 ({                                                              \
259         unsigned int rel = (int)((target) - jit->prg) / 2;      \
260         _EMIT6((op) | reg_high(b) << 16 | rel >> 16, rel & 0xffff);\
261         REG_SET_SEEN(b);                                        \
262 })
263
264 #define EMIT6_PCREL_RIL(op, target)                             \
265 ({                                                              \
266         unsigned int rel = (int)((target) - jit->prg) / 2;      \
267         _EMIT6((op) | rel >> 16, rel & 0xffff);                 \
268 })
269
270 #define EMIT6_PCREL_RILC(op, mask, target)                      \
271 ({                                                              \
272         EMIT6_PCREL_RIL((op) | (mask) << 20, (target));         \
273 })
274
275 #define _EMIT6_IMM(op, imm)                                     \
276 ({                                                              \
277         unsigned int __imm = (imm);                             \
278         _EMIT6((op) | (__imm >> 16), __imm & 0xffff);           \
279 })
280
281 #define EMIT6_IMM(op, b1, imm)                                  \
282 ({                                                              \
283         _EMIT6_IMM((op) | reg_high(b1) << 16, imm);             \
284         REG_SET_SEEN(b1);                                       \
285 })
286
287 #define _EMIT_CONST_U32(val)                                    \
288 ({                                                              \
289         unsigned int ret;                                       \
290         ret = jit->lit32;                                       \
291         if (jit->prg_buf)                                       \
292                 *(u32 *)(jit->prg_buf + jit->lit32) = (u32)(val);\
293         jit->lit32 += 4;                                        \
294         ret;                                                    \
295 })
296
297 #define EMIT_CONST_U32(val)                                     \
298 ({                                                              \
299         jit->seen |= SEEN_LITERAL;                              \
300         _EMIT_CONST_U32(val) - jit->base_ip;                    \
301 })
302
303 #define _EMIT_CONST_U64(val)                                    \
304 ({                                                              \
305         unsigned int ret;                                       \
306         ret = jit->lit64;                                       \
307         if (jit->prg_buf)                                       \
308                 *(u64 *)(jit->prg_buf + jit->lit64) = (u64)(val);\
309         jit->lit64 += 8;                                        \
310         ret;                                                    \
311 })
312
313 #define EMIT_CONST_U64(val)                                     \
314 ({                                                              \
315         jit->seen |= SEEN_LITERAL;                              \
316         _EMIT_CONST_U64(val) - jit->base_ip;                    \
317 })
318
319 #define EMIT_ZERO(b1)                                           \
320 ({                                                              \
321         if (!fp->aux->verifier_zext) {                          \
322                 /* llgfr %dst,%dst (zero extend to 64 bit) */   \
323                 EMIT4(0xb9160000, b1, b1);                      \
324                 REG_SET_SEEN(b1);                               \
325         }                                                       \
326 })
327
328 /*
329  * Return whether this is the first pass. The first pass is special, since we
330  * don't know any sizes yet, and thus must be conservative.
331  */
332 static bool is_first_pass(struct bpf_jit *jit)
333 {
334         return jit->size == 0;
335 }
336
337 /*
338  * Return whether this is the code generation pass. The code generation pass is
339  * special, since we should change as little as possible.
340  */
341 static bool is_codegen_pass(struct bpf_jit *jit)
342 {
343         return jit->prg_buf;
344 }
345
346 /*
347  * Return whether "rel" can be encoded as a short PC-relative offset
348  */
349 static bool is_valid_rel(int rel)
350 {
351         return rel >= -65536 && rel <= 65534;
352 }
353
354 /*
355  * Return whether "off" can be reached using a short PC-relative offset
356  */
357 static bool can_use_rel(struct bpf_jit *jit, int off)
358 {
359         return is_valid_rel(off - jit->prg);
360 }
361
362 /*
363  * Return whether given displacement can be encoded using
364  * Long-Displacement Facility
365  */
366 static bool is_valid_ldisp(int disp)
367 {
368         return disp >= -524288 && disp <= 524287;
369 }
370
371 /*
372  * Return whether the next 32-bit literal pool entry can be referenced using
373  * Long-Displacement Facility
374  */
375 static bool can_use_ldisp_for_lit32(struct bpf_jit *jit)
376 {
377         return is_valid_ldisp(jit->lit32 - jit->base_ip);
378 }
379
380 /*
381  * Return whether the next 64-bit literal pool entry can be referenced using
382  * Long-Displacement Facility
383  */
384 static bool can_use_ldisp_for_lit64(struct bpf_jit *jit)
385 {
386         return is_valid_ldisp(jit->lit64 - jit->base_ip);
387 }
388
389 /*
390  * Fill whole space with illegal instructions
391  */
392 static void jit_fill_hole(void *area, unsigned int size)
393 {
394         memset(area, 0, size);
395 }
396
397 /*
398  * Save registers from "rs" (register start) to "re" (register end) on stack
399  */
400 static void save_regs(struct bpf_jit *jit, u32 rs, u32 re)
401 {
402         u32 off = STK_OFF_R6 + (rs - 6) * 8;
403
404         if (rs == re)
405                 /* stg %rs,off(%r15) */
406                 _EMIT6(0xe300f000 | rs << 20 | off, 0x0024);
407         else
408                 /* stmg %rs,%re,off(%r15) */
409                 _EMIT6_DISP(0xeb00f000 | rs << 20 | re << 16, 0x0024, off);
410 }
411
412 /*
413  * Restore registers from "rs" (register start) to "re" (register end) on stack
414  */
415 static void restore_regs(struct bpf_jit *jit, u32 rs, u32 re, u32 stack_depth)
416 {
417         u32 off = STK_OFF_R6 + (rs - 6) * 8;
418
419         if (jit->seen & SEEN_STACK)
420                 off += STK_OFF + stack_depth;
421
422         if (rs == re)
423                 /* lg %rs,off(%r15) */
424                 _EMIT6(0xe300f000 | rs << 20 | off, 0x0004);
425         else
426                 /* lmg %rs,%re,off(%r15) */
427                 _EMIT6_DISP(0xeb00f000 | rs << 20 | re << 16, 0x0004, off);
428 }
429
430 /*
431  * Return first seen register (from start)
432  */
433 static int get_start(struct bpf_jit *jit, int start)
434 {
435         int i;
436
437         for (i = start; i <= 15; i++) {
438                 if (jit->seen_reg[i])
439                         return i;
440         }
441         return 0;
442 }
443
444 /*
445  * Return last seen register (from start) (gap >= 2)
446  */
447 static int get_end(struct bpf_jit *jit, int start)
448 {
449         int i;
450
451         for (i = start; i < 15; i++) {
452                 if (!jit->seen_reg[i] && !jit->seen_reg[i + 1])
453                         return i - 1;
454         }
455         return jit->seen_reg[15] ? 15 : 14;
456 }
457
458 #define REGS_SAVE       1
459 #define REGS_RESTORE    0
460 /*
461  * Save and restore clobbered registers (6-15) on stack.
462  * We save/restore registers in chunks with gap >= 2 registers.
463  */
464 static void save_restore_regs(struct bpf_jit *jit, int op, u32 stack_depth)
465 {
466         const int last = 15, save_restore_size = 6;
467         int re = 6, rs;
468
469         if (is_first_pass(jit)) {
470                 /*
471                  * We don't know yet which registers are used. Reserve space
472                  * conservatively.
473                  */
474                 jit->prg += (last - re + 1) * save_restore_size;
475                 return;
476         }
477
478         do {
479                 rs = get_start(jit, re);
480                 if (!rs)
481                         break;
482                 re = get_end(jit, rs + 1);
483                 if (op == REGS_SAVE)
484                         save_regs(jit, rs, re);
485                 else
486                         restore_regs(jit, rs, re, stack_depth);
487                 re++;
488         } while (re <= last);
489 }
490
491 static void bpf_skip(struct bpf_jit *jit, int size)
492 {
493         if (size >= 6 && !is_valid_rel(size)) {
494                 /* brcl 0xf,size */
495                 EMIT6_PCREL_RIL(0xc0f4000000, size);
496                 size -= 6;
497         } else if (size >= 4 && is_valid_rel(size)) {
498                 /* brc 0xf,size */
499                 EMIT4_PCREL(0xa7f40000, size);
500                 size -= 4;
501         }
502         while (size >= 2) {
503                 /* bcr 0,%0 */
504                 _EMIT2(0x0700);
505                 size -= 2;
506         }
507 }
508
509 /*
510  * Emit function prologue
511  *
512  * Save registers and create stack frame if necessary.
513  * See stack frame layout desription in "bpf_jit.h"!
514  */
515 static void bpf_jit_prologue(struct bpf_jit *jit, u32 stack_depth)
516 {
517         if (jit->seen & SEEN_TAIL_CALL) {
518                 /* xc STK_OFF_TCCNT(4,%r15),STK_OFF_TCCNT(%r15) */
519                 _EMIT6(0xd703f000 | STK_OFF_TCCNT, 0xf000 | STK_OFF_TCCNT);
520         } else {
521                 /*
522                  * There are no tail calls. Insert nops in order to have
523                  * tail_call_start at a predictable offset.
524                  */
525                 bpf_skip(jit, 6);
526         }
527         /* Tail calls have to skip above initialization */
528         jit->tail_call_start = jit->prg;
529         /* Save registers */
530         save_restore_regs(jit, REGS_SAVE, stack_depth);
531         /* Setup literal pool */
532         if (is_first_pass(jit) || (jit->seen & SEEN_LITERAL)) {
533                 if (!is_first_pass(jit) &&
534                     is_valid_ldisp(jit->size - (jit->prg + 2))) {
535                         /* basr %l,0 */
536                         EMIT2(0x0d00, REG_L, REG_0);
537                         jit->base_ip = jit->prg;
538                 } else {
539                         /* larl %l,lit32_start */
540                         EMIT6_PCREL_RILB(0xc0000000, REG_L, jit->lit32_start);
541                         jit->base_ip = jit->lit32_start;
542                 }
543         }
544         /* Setup stack and backchain */
545         if (is_first_pass(jit) || (jit->seen & SEEN_STACK)) {
546                 if (is_first_pass(jit) || (jit->seen & SEEN_FUNC))
547                         /* lgr %w1,%r15 (backchain) */
548                         EMIT4(0xb9040000, REG_W1, REG_15);
549                 /* la %bfp,STK_160_UNUSED(%r15) (BPF frame pointer) */
550                 EMIT4_DISP(0x41000000, BPF_REG_FP, REG_15, STK_160_UNUSED);
551                 /* aghi %r15,-STK_OFF */
552                 EMIT4_IMM(0xa70b0000, REG_15, -(STK_OFF + stack_depth));
553                 if (is_first_pass(jit) || (jit->seen & SEEN_FUNC))
554                         /* stg %w1,152(%r15) (backchain) */
555                         EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W1, REG_0,
556                                       REG_15, 152);
557         }
558 }
559
560 /*
561  * Function epilogue
562  */
563 static void bpf_jit_epilogue(struct bpf_jit *jit, u32 stack_depth)
564 {
565         jit->exit_ip = jit->prg;
566         /* Load exit code: lgr %r2,%b0 */
567         EMIT4(0xb9040000, REG_2, BPF_REG_0);
568         /* Restore registers */
569         save_restore_regs(jit, REGS_RESTORE, stack_depth);
570         if (nospec_uses_trampoline()) {
571                 jit->r14_thunk_ip = jit->prg;
572                 /* Generate __s390_indirect_jump_r14 thunk */
573                 if (test_facility(35)) {
574                         /* exrl %r0,.+10 */
575                         EMIT6_PCREL_RIL(0xc6000000, jit->prg + 10);
576                 } else {
577                         /* larl %r1,.+14 */
578                         EMIT6_PCREL_RILB(0xc0000000, REG_1, jit->prg + 14);
579                         /* ex 0,0(%r1) */
580                         EMIT4_DISP(0x44000000, REG_0, REG_1, 0);
581                 }
582                 /* j . */
583                 EMIT4_PCREL(0xa7f40000, 0);
584         }
585         /* br %r14 */
586         _EMIT2(0x07fe);
587
588         if ((nospec_uses_trampoline()) &&
589             (is_first_pass(jit) || (jit->seen & SEEN_FUNC))) {
590                 jit->r1_thunk_ip = jit->prg;
591                 /* Generate __s390_indirect_jump_r1 thunk */
592                 if (test_facility(35)) {
593                         /* exrl %r0,.+10 */
594                         EMIT6_PCREL_RIL(0xc6000000, jit->prg + 10);
595                         /* j . */
596                         EMIT4_PCREL(0xa7f40000, 0);
597                         /* br %r1 */
598                         _EMIT2(0x07f1);
599                 } else {
600                         /* ex 0,S390_lowcore.br_r1_tampoline */
601                         EMIT4_DISP(0x44000000, REG_0, REG_0,
602                                    offsetof(struct lowcore, br_r1_trampoline));
603                         /* j . */
604                         EMIT4_PCREL(0xa7f40000, 0);
605                 }
606         }
607 }
608
609 static int get_probe_mem_regno(const u8 *insn)
610 {
611         /*
612          * insn must point to llgc, llgh, llgf or lg, which have destination
613          * register at the same position.
614          */
615         if (insn[0] != 0xe3) /* common llgc, llgh, llgf and lg prefix */
616                 return -1;
617         if (insn[5] != 0x90 && /* llgc */
618             insn[5] != 0x91 && /* llgh */
619             insn[5] != 0x16 && /* llgf */
620             insn[5] != 0x04) /* lg */
621                 return -1;
622         return insn[1] >> 4;
623 }
624
625 bool ex_handler_bpf(const struct exception_table_entry *x, struct pt_regs *regs)
626 {
627         int regno;
628         u8 *insn;
629
630         regs->psw.addr = extable_fixup(x);
631         insn = (u8 *)__rewind_psw(regs->psw, regs->int_code >> 16);
632         regno = get_probe_mem_regno(insn);
633         if (WARN_ON_ONCE(regno < 0))
634                 /* JIT bug - unexpected instruction. */
635                 return false;
636         regs->gprs[regno] = 0;
637         return true;
638 }
639
640 static int bpf_jit_probe_mem(struct bpf_jit *jit, struct bpf_prog *fp,
641                              int probe_prg, int nop_prg)
642 {
643         struct exception_table_entry *ex;
644         s64 delta;
645         u8 *insn;
646         int prg;
647         int i;
648
649         if (!fp->aux->extable)
650                 /* Do nothing during early JIT passes. */
651                 return 0;
652         insn = jit->prg_buf + probe_prg;
653         if (WARN_ON_ONCE(get_probe_mem_regno(insn) < 0))
654                 /* JIT bug - unexpected probe instruction. */
655                 return -1;
656         if (WARN_ON_ONCE(probe_prg + insn_length(*insn) != nop_prg))
657                 /* JIT bug - gap between probe and nop instructions. */
658                 return -1;
659         for (i = 0; i < 2; i++) {
660                 if (WARN_ON_ONCE(jit->excnt >= fp->aux->num_exentries))
661                         /* Verifier bug - not enough entries. */
662                         return -1;
663                 ex = &fp->aux->extable[jit->excnt];
664                 /* Add extable entries for probe and nop instructions. */
665                 prg = i == 0 ? probe_prg : nop_prg;
666                 delta = jit->prg_buf + prg - (u8 *)&ex->insn;
667                 if (WARN_ON_ONCE(delta < INT_MIN || delta > INT_MAX))
668                         /* JIT bug - code and extable must be close. */
669                         return -1;
670                 ex->insn = delta;
671                 /*
672                  * Always land on the nop. Note that extable infrastructure
673                  * ignores fixup field, it is handled by ex_handler_bpf().
674                  */
675                 delta = jit->prg_buf + nop_prg - (u8 *)&ex->fixup;
676                 if (WARN_ON_ONCE(delta < INT_MIN || delta > INT_MAX))
677                         /* JIT bug - landing pad and extable must be close. */
678                         return -1;
679                 ex->fixup = delta;
680                 ex->type = EX_TYPE_BPF;
681                 jit->excnt++;
682         }
683         return 0;
684 }
685
686 /*
687  * Compile one eBPF instruction into s390x code
688  *
689  * NOTE: Use noinline because for gcov (-fprofile-arcs) gcc allocates a lot of
690  * stack space for the large switch statement.
691  */
692 static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp,
693                                  int i, bool extra_pass, u32 stack_depth)
694 {
695         struct bpf_insn *insn = &fp->insnsi[i];
696         u32 dst_reg = insn->dst_reg;
697         u32 src_reg = insn->src_reg;
698         int last, insn_count = 1;
699         u32 *addrs = jit->addrs;
700         s32 imm = insn->imm;
701         s16 off = insn->off;
702         int probe_prg = -1;
703         unsigned int mask;
704         int nop_prg;
705         int err;
706
707         if (BPF_CLASS(insn->code) == BPF_LDX &&
708             BPF_MODE(insn->code) == BPF_PROBE_MEM)
709                 probe_prg = jit->prg;
710
711         switch (insn->code) {
712         /*
713          * BPF_MOV
714          */
715         case BPF_ALU | BPF_MOV | BPF_X: /* dst = (u32) src */
716                 /* llgfr %dst,%src */
717                 EMIT4(0xb9160000, dst_reg, src_reg);
718                 if (insn_is_zext(&insn[1]))
719                         insn_count = 2;
720                 break;
721         case BPF_ALU64 | BPF_MOV | BPF_X: /* dst = src */
722                 /* lgr %dst,%src */
723                 EMIT4(0xb9040000, dst_reg, src_reg);
724                 break;
725         case BPF_ALU | BPF_MOV | BPF_K: /* dst = (u32) imm */
726                 /* llilf %dst,imm */
727                 EMIT6_IMM(0xc00f0000, dst_reg, imm);
728                 if (insn_is_zext(&insn[1]))
729                         insn_count = 2;
730                 break;
731         case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = imm */
732                 /* lgfi %dst,imm */
733                 EMIT6_IMM(0xc0010000, dst_reg, imm);
734                 break;
735         /*
736          * BPF_LD 64
737          */
738         case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
739         {
740                 /* 16 byte instruction that uses two 'struct bpf_insn' */
741                 u64 imm64;
742
743                 imm64 = (u64)(u32) insn[0].imm | ((u64)(u32) insn[1].imm) << 32;
744                 /* lgrl %dst,imm */
745                 EMIT6_PCREL_RILB(0xc4080000, dst_reg, _EMIT_CONST_U64(imm64));
746                 insn_count = 2;
747                 break;
748         }
749         /*
750          * BPF_ADD
751          */
752         case BPF_ALU | BPF_ADD | BPF_X: /* dst = (u32) dst + (u32) src */
753                 /* ar %dst,%src */
754                 EMIT2(0x1a00, dst_reg, src_reg);
755                 EMIT_ZERO(dst_reg);
756                 break;
757         case BPF_ALU64 | BPF_ADD | BPF_X: /* dst = dst + src */
758                 /* agr %dst,%src */
759                 EMIT4(0xb9080000, dst_reg, src_reg);
760                 break;
761         case BPF_ALU | BPF_ADD | BPF_K: /* dst = (u32) dst + (u32) imm */
762                 if (imm != 0) {
763                         /* alfi %dst,imm */
764                         EMIT6_IMM(0xc20b0000, dst_reg, imm);
765                 }
766                 EMIT_ZERO(dst_reg);
767                 break;
768         case BPF_ALU64 | BPF_ADD | BPF_K: /* dst = dst + imm */
769                 if (!imm)
770                         break;
771                 /* agfi %dst,imm */
772                 EMIT6_IMM(0xc2080000, dst_reg, imm);
773                 break;
774         /*
775          * BPF_SUB
776          */
777         case BPF_ALU | BPF_SUB | BPF_X: /* dst = (u32) dst - (u32) src */
778                 /* sr %dst,%src */
779                 EMIT2(0x1b00, dst_reg, src_reg);
780                 EMIT_ZERO(dst_reg);
781                 break;
782         case BPF_ALU64 | BPF_SUB | BPF_X: /* dst = dst - src */
783                 /* sgr %dst,%src */
784                 EMIT4(0xb9090000, dst_reg, src_reg);
785                 break;
786         case BPF_ALU | BPF_SUB | BPF_K: /* dst = (u32) dst - (u32) imm */
787                 if (imm != 0) {
788                         /* alfi %dst,-imm */
789                         EMIT6_IMM(0xc20b0000, dst_reg, -imm);
790                 }
791                 EMIT_ZERO(dst_reg);
792                 break;
793         case BPF_ALU64 | BPF_SUB | BPF_K: /* dst = dst - imm */
794                 if (!imm)
795                         break;
796                 if (imm == -0x80000000) {
797                         /* algfi %dst,0x80000000 */
798                         EMIT6_IMM(0xc20a0000, dst_reg, 0x80000000);
799                 } else {
800                         /* agfi %dst,-imm */
801                         EMIT6_IMM(0xc2080000, dst_reg, -imm);
802                 }
803                 break;
804         /*
805          * BPF_MUL
806          */
807         case BPF_ALU | BPF_MUL | BPF_X: /* dst = (u32) dst * (u32) src */
808                 /* msr %dst,%src */
809                 EMIT4(0xb2520000, dst_reg, src_reg);
810                 EMIT_ZERO(dst_reg);
811                 break;
812         case BPF_ALU64 | BPF_MUL | BPF_X: /* dst = dst * src */
813                 /* msgr %dst,%src */
814                 EMIT4(0xb90c0000, dst_reg, src_reg);
815                 break;
816         case BPF_ALU | BPF_MUL | BPF_K: /* dst = (u32) dst * (u32) imm */
817                 if (imm != 1) {
818                         /* msfi %r5,imm */
819                         EMIT6_IMM(0xc2010000, dst_reg, imm);
820                 }
821                 EMIT_ZERO(dst_reg);
822                 break;
823         case BPF_ALU64 | BPF_MUL | BPF_K: /* dst = dst * imm */
824                 if (imm == 1)
825                         break;
826                 /* msgfi %dst,imm */
827                 EMIT6_IMM(0xc2000000, dst_reg, imm);
828                 break;
829         /*
830          * BPF_DIV / BPF_MOD
831          */
832         case BPF_ALU | BPF_DIV | BPF_X: /* dst = (u32) dst / (u32) src */
833         case BPF_ALU | BPF_MOD | BPF_X: /* dst = (u32) dst % (u32) src */
834         {
835                 int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0;
836
837                 /* lhi %w0,0 */
838                 EMIT4_IMM(0xa7080000, REG_W0, 0);
839                 /* lr %w1,%dst */
840                 EMIT2(0x1800, REG_W1, dst_reg);
841                 /* dlr %w0,%src */
842                 EMIT4(0xb9970000, REG_W0, src_reg);
843                 /* llgfr %dst,%rc */
844                 EMIT4(0xb9160000, dst_reg, rc_reg);
845                 if (insn_is_zext(&insn[1]))
846                         insn_count = 2;
847                 break;
848         }
849         case BPF_ALU64 | BPF_DIV | BPF_X: /* dst = dst / src */
850         case BPF_ALU64 | BPF_MOD | BPF_X: /* dst = dst % src */
851         {
852                 int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0;
853
854                 /* lghi %w0,0 */
855                 EMIT4_IMM(0xa7090000, REG_W0, 0);
856                 /* lgr %w1,%dst */
857                 EMIT4(0xb9040000, REG_W1, dst_reg);
858                 /* dlgr %w0,%dst */
859                 EMIT4(0xb9870000, REG_W0, src_reg);
860                 /* lgr %dst,%rc */
861                 EMIT4(0xb9040000, dst_reg, rc_reg);
862                 break;
863         }
864         case BPF_ALU | BPF_DIV | BPF_K: /* dst = (u32) dst / (u32) imm */
865         case BPF_ALU | BPF_MOD | BPF_K: /* dst = (u32) dst % (u32) imm */
866         {
867                 int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0;
868
869                 if (imm == 1) {
870                         if (BPF_OP(insn->code) == BPF_MOD)
871                                 /* lhgi %dst,0 */
872                                 EMIT4_IMM(0xa7090000, dst_reg, 0);
873                         else
874                                 EMIT_ZERO(dst_reg);
875                         break;
876                 }
877                 /* lhi %w0,0 */
878                 EMIT4_IMM(0xa7080000, REG_W0, 0);
879                 /* lr %w1,%dst */
880                 EMIT2(0x1800, REG_W1, dst_reg);
881                 if (!is_first_pass(jit) && can_use_ldisp_for_lit32(jit)) {
882                         /* dl %w0,<d(imm)>(%l) */
883                         EMIT6_DISP_LH(0xe3000000, 0x0097, REG_W0, REG_0, REG_L,
884                                       EMIT_CONST_U32(imm));
885                 } else {
886                         /* lgfrl %dst,imm */
887                         EMIT6_PCREL_RILB(0xc40c0000, dst_reg,
888                                          _EMIT_CONST_U32(imm));
889                         jit->seen |= SEEN_LITERAL;
890                         /* dlr %w0,%dst */
891                         EMIT4(0xb9970000, REG_W0, dst_reg);
892                 }
893                 /* llgfr %dst,%rc */
894                 EMIT4(0xb9160000, dst_reg, rc_reg);
895                 if (insn_is_zext(&insn[1]))
896                         insn_count = 2;
897                 break;
898         }
899         case BPF_ALU64 | BPF_DIV | BPF_K: /* dst = dst / imm */
900         case BPF_ALU64 | BPF_MOD | BPF_K: /* dst = dst % imm */
901         {
902                 int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0;
903
904                 if (imm == 1) {
905                         if (BPF_OP(insn->code) == BPF_MOD)
906                                 /* lhgi %dst,0 */
907                                 EMIT4_IMM(0xa7090000, dst_reg, 0);
908                         break;
909                 }
910                 /* lghi %w0,0 */
911                 EMIT4_IMM(0xa7090000, REG_W0, 0);
912                 /* lgr %w1,%dst */
913                 EMIT4(0xb9040000, REG_W1, dst_reg);
914                 if (!is_first_pass(jit) && can_use_ldisp_for_lit64(jit)) {
915                         /* dlg %w0,<d(imm)>(%l) */
916                         EMIT6_DISP_LH(0xe3000000, 0x0087, REG_W0, REG_0, REG_L,
917                                       EMIT_CONST_U64(imm));
918                 } else {
919                         /* lgrl %dst,imm */
920                         EMIT6_PCREL_RILB(0xc4080000, dst_reg,
921                                          _EMIT_CONST_U64(imm));
922                         jit->seen |= SEEN_LITERAL;
923                         /* dlgr %w0,%dst */
924                         EMIT4(0xb9870000, REG_W0, dst_reg);
925                 }
926                 /* lgr %dst,%rc */
927                 EMIT4(0xb9040000, dst_reg, rc_reg);
928                 break;
929         }
930         /*
931          * BPF_AND
932          */
933         case BPF_ALU | BPF_AND | BPF_X: /* dst = (u32) dst & (u32) src */
934                 /* nr %dst,%src */
935                 EMIT2(0x1400, dst_reg, src_reg);
936                 EMIT_ZERO(dst_reg);
937                 break;
938         case BPF_ALU64 | BPF_AND | BPF_X: /* dst = dst & src */
939                 /* ngr %dst,%src */
940                 EMIT4(0xb9800000, dst_reg, src_reg);
941                 break;
942         case BPF_ALU | BPF_AND | BPF_K: /* dst = (u32) dst & (u32) imm */
943                 /* nilf %dst,imm */
944                 EMIT6_IMM(0xc00b0000, dst_reg, imm);
945                 EMIT_ZERO(dst_reg);
946                 break;
947         case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
948                 if (!is_first_pass(jit) && can_use_ldisp_for_lit64(jit)) {
949                         /* ng %dst,<d(imm)>(%l) */
950                         EMIT6_DISP_LH(0xe3000000, 0x0080,
951                                       dst_reg, REG_0, REG_L,
952                                       EMIT_CONST_U64(imm));
953                 } else {
954                         /* lgrl %w0,imm */
955                         EMIT6_PCREL_RILB(0xc4080000, REG_W0,
956                                          _EMIT_CONST_U64(imm));
957                         jit->seen |= SEEN_LITERAL;
958                         /* ngr %dst,%w0 */
959                         EMIT4(0xb9800000, dst_reg, REG_W0);
960                 }
961                 break;
962         /*
963          * BPF_OR
964          */
965         case BPF_ALU | BPF_OR | BPF_X: /* dst = (u32) dst | (u32) src */
966                 /* or %dst,%src */
967                 EMIT2(0x1600, dst_reg, src_reg);
968                 EMIT_ZERO(dst_reg);
969                 break;
970         case BPF_ALU64 | BPF_OR | BPF_X: /* dst = dst | src */
971                 /* ogr %dst,%src */
972                 EMIT4(0xb9810000, dst_reg, src_reg);
973                 break;
974         case BPF_ALU | BPF_OR | BPF_K: /* dst = (u32) dst | (u32) imm */
975                 /* oilf %dst,imm */
976                 EMIT6_IMM(0xc00d0000, dst_reg, imm);
977                 EMIT_ZERO(dst_reg);
978                 break;
979         case BPF_ALU64 | BPF_OR | BPF_K: /* dst = dst | imm */
980                 if (!is_first_pass(jit) && can_use_ldisp_for_lit64(jit)) {
981                         /* og %dst,<d(imm)>(%l) */
982                         EMIT6_DISP_LH(0xe3000000, 0x0081,
983                                       dst_reg, REG_0, REG_L,
984                                       EMIT_CONST_U64(imm));
985                 } else {
986                         /* lgrl %w0,imm */
987                         EMIT6_PCREL_RILB(0xc4080000, REG_W0,
988                                          _EMIT_CONST_U64(imm));
989                         jit->seen |= SEEN_LITERAL;
990                         /* ogr %dst,%w0 */
991                         EMIT4(0xb9810000, dst_reg, REG_W0);
992                 }
993                 break;
994         /*
995          * BPF_XOR
996          */
997         case BPF_ALU | BPF_XOR | BPF_X: /* dst = (u32) dst ^ (u32) src */
998                 /* xr %dst,%src */
999                 EMIT2(0x1700, dst_reg, src_reg);
1000                 EMIT_ZERO(dst_reg);
1001                 break;
1002         case BPF_ALU64 | BPF_XOR | BPF_X: /* dst = dst ^ src */
1003                 /* xgr %dst,%src */
1004                 EMIT4(0xb9820000, dst_reg, src_reg);
1005                 break;
1006         case BPF_ALU | BPF_XOR | BPF_K: /* dst = (u32) dst ^ (u32) imm */
1007                 if (imm != 0) {
1008                         /* xilf %dst,imm */
1009                         EMIT6_IMM(0xc0070000, dst_reg, imm);
1010                 }
1011                 EMIT_ZERO(dst_reg);
1012                 break;
1013         case BPF_ALU64 | BPF_XOR | BPF_K: /* dst = dst ^ imm */
1014                 if (!is_first_pass(jit) && can_use_ldisp_for_lit64(jit)) {
1015                         /* xg %dst,<d(imm)>(%l) */
1016                         EMIT6_DISP_LH(0xe3000000, 0x0082,
1017                                       dst_reg, REG_0, REG_L,
1018                                       EMIT_CONST_U64(imm));
1019                 } else {
1020                         /* lgrl %w0,imm */
1021                         EMIT6_PCREL_RILB(0xc4080000, REG_W0,
1022                                          _EMIT_CONST_U64(imm));
1023                         jit->seen |= SEEN_LITERAL;
1024                         /* xgr %dst,%w0 */
1025                         EMIT4(0xb9820000, dst_reg, REG_W0);
1026                 }
1027                 break;
1028         /*
1029          * BPF_LSH
1030          */
1031         case BPF_ALU | BPF_LSH | BPF_X: /* dst = (u32) dst << (u32) src */
1032                 /* sll %dst,0(%src) */
1033                 EMIT4_DISP(0x89000000, dst_reg, src_reg, 0);
1034                 EMIT_ZERO(dst_reg);
1035                 break;
1036         case BPF_ALU64 | BPF_LSH | BPF_X: /* dst = dst << src */
1037                 /* sllg %dst,%dst,0(%src) */
1038                 EMIT6_DISP_LH(0xeb000000, 0x000d, dst_reg, dst_reg, src_reg, 0);
1039                 break;
1040         case BPF_ALU | BPF_LSH | BPF_K: /* dst = (u32) dst << (u32) imm */
1041                 if (imm != 0) {
1042                         /* sll %dst,imm(%r0) */
1043                         EMIT4_DISP(0x89000000, dst_reg, REG_0, imm);
1044                 }
1045                 EMIT_ZERO(dst_reg);
1046                 break;
1047         case BPF_ALU64 | BPF_LSH | BPF_K: /* dst = dst << imm */
1048                 if (imm == 0)
1049                         break;
1050                 /* sllg %dst,%dst,imm(%r0) */
1051                 EMIT6_DISP_LH(0xeb000000, 0x000d, dst_reg, dst_reg, REG_0, imm);
1052                 break;
1053         /*
1054          * BPF_RSH
1055          */
1056         case BPF_ALU | BPF_RSH | BPF_X: /* dst = (u32) dst >> (u32) src */
1057                 /* srl %dst,0(%src) */
1058                 EMIT4_DISP(0x88000000, dst_reg, src_reg, 0);
1059                 EMIT_ZERO(dst_reg);
1060                 break;
1061         case BPF_ALU64 | BPF_RSH | BPF_X: /* dst = dst >> src */
1062                 /* srlg %dst,%dst,0(%src) */
1063                 EMIT6_DISP_LH(0xeb000000, 0x000c, dst_reg, dst_reg, src_reg, 0);
1064                 break;
1065         case BPF_ALU | BPF_RSH | BPF_K: /* dst = (u32) dst >> (u32) imm */
1066                 if (imm != 0) {
1067                         /* srl %dst,imm(%r0) */
1068                         EMIT4_DISP(0x88000000, dst_reg, REG_0, imm);
1069                 }
1070                 EMIT_ZERO(dst_reg);
1071                 break;
1072         case BPF_ALU64 | BPF_RSH | BPF_K: /* dst = dst >> imm */
1073                 if (imm == 0)
1074                         break;
1075                 /* srlg %dst,%dst,imm(%r0) */
1076                 EMIT6_DISP_LH(0xeb000000, 0x000c, dst_reg, dst_reg, REG_0, imm);
1077                 break;
1078         /*
1079          * BPF_ARSH
1080          */
1081         case BPF_ALU | BPF_ARSH | BPF_X: /* ((s32) dst) >>= src */
1082                 /* sra %dst,%dst,0(%src) */
1083                 EMIT4_DISP(0x8a000000, dst_reg, src_reg, 0);
1084                 EMIT_ZERO(dst_reg);
1085                 break;
1086         case BPF_ALU64 | BPF_ARSH | BPF_X: /* ((s64) dst) >>= src */
1087                 /* srag %dst,%dst,0(%src) */
1088                 EMIT6_DISP_LH(0xeb000000, 0x000a, dst_reg, dst_reg, src_reg, 0);
1089                 break;
1090         case BPF_ALU | BPF_ARSH | BPF_K: /* ((s32) dst >> imm */
1091                 if (imm != 0) {
1092                         /* sra %dst,imm(%r0) */
1093                         EMIT4_DISP(0x8a000000, dst_reg, REG_0, imm);
1094                 }
1095                 EMIT_ZERO(dst_reg);
1096                 break;
1097         case BPF_ALU64 | BPF_ARSH | BPF_K: /* ((s64) dst) >>= imm */
1098                 if (imm == 0)
1099                         break;
1100                 /* srag %dst,%dst,imm(%r0) */
1101                 EMIT6_DISP_LH(0xeb000000, 0x000a, dst_reg, dst_reg, REG_0, imm);
1102                 break;
1103         /*
1104          * BPF_NEG
1105          */
1106         case BPF_ALU | BPF_NEG: /* dst = (u32) -dst */
1107                 /* lcr %dst,%dst */
1108                 EMIT2(0x1300, dst_reg, dst_reg);
1109                 EMIT_ZERO(dst_reg);
1110                 break;
1111         case BPF_ALU64 | BPF_NEG: /* dst = -dst */
1112                 /* lcgr %dst,%dst */
1113                 EMIT4(0xb9030000, dst_reg, dst_reg);
1114                 break;
1115         /*
1116          * BPF_FROM_BE/LE
1117          */
1118         case BPF_ALU | BPF_END | BPF_FROM_BE:
1119                 /* s390 is big endian, therefore only clear high order bytes */
1120                 switch (imm) {
1121                 case 16: /* dst = (u16) cpu_to_be16(dst) */
1122                         /* llghr %dst,%dst */
1123                         EMIT4(0xb9850000, dst_reg, dst_reg);
1124                         if (insn_is_zext(&insn[1]))
1125                                 insn_count = 2;
1126                         break;
1127                 case 32: /* dst = (u32) cpu_to_be32(dst) */
1128                         if (!fp->aux->verifier_zext)
1129                                 /* llgfr %dst,%dst */
1130                                 EMIT4(0xb9160000, dst_reg, dst_reg);
1131                         break;
1132                 case 64: /* dst = (u64) cpu_to_be64(dst) */
1133                         break;
1134                 }
1135                 break;
1136         case BPF_ALU | BPF_END | BPF_FROM_LE:
1137                 switch (imm) {
1138                 case 16: /* dst = (u16) cpu_to_le16(dst) */
1139                         /* lrvr %dst,%dst */
1140                         EMIT4(0xb91f0000, dst_reg, dst_reg);
1141                         /* srl %dst,16(%r0) */
1142                         EMIT4_DISP(0x88000000, dst_reg, REG_0, 16);
1143                         /* llghr %dst,%dst */
1144                         EMIT4(0xb9850000, dst_reg, dst_reg);
1145                         if (insn_is_zext(&insn[1]))
1146                                 insn_count = 2;
1147                         break;
1148                 case 32: /* dst = (u32) cpu_to_le32(dst) */
1149                         /* lrvr %dst,%dst */
1150                         EMIT4(0xb91f0000, dst_reg, dst_reg);
1151                         if (!fp->aux->verifier_zext)
1152                                 /* llgfr %dst,%dst */
1153                                 EMIT4(0xb9160000, dst_reg, dst_reg);
1154                         break;
1155                 case 64: /* dst = (u64) cpu_to_le64(dst) */
1156                         /* lrvgr %dst,%dst */
1157                         EMIT4(0xb90f0000, dst_reg, dst_reg);
1158                         break;
1159                 }
1160                 break;
1161         /*
1162          * BPF_NOSPEC (speculation barrier)
1163          */
1164         case BPF_ST | BPF_NOSPEC:
1165                 break;
1166         /*
1167          * BPF_ST(X)
1168          */
1169         case BPF_STX | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = src_reg */
1170                 /* stcy %src,off(%dst) */
1171                 EMIT6_DISP_LH(0xe3000000, 0x0072, src_reg, dst_reg, REG_0, off);
1172                 jit->seen |= SEEN_MEM;
1173                 break;
1174         case BPF_STX | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = src */
1175                 /* sthy %src,off(%dst) */
1176                 EMIT6_DISP_LH(0xe3000000, 0x0070, src_reg, dst_reg, REG_0, off);
1177                 jit->seen |= SEEN_MEM;
1178                 break;
1179         case BPF_STX | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = src */
1180                 /* sty %src,off(%dst) */
1181                 EMIT6_DISP_LH(0xe3000000, 0x0050, src_reg, dst_reg, REG_0, off);
1182                 jit->seen |= SEEN_MEM;
1183                 break;
1184         case BPF_STX | BPF_MEM | BPF_DW: /* (u64 *)(dst + off) = src */
1185                 /* stg %src,off(%dst) */
1186                 EMIT6_DISP_LH(0xe3000000, 0x0024, src_reg, dst_reg, REG_0, off);
1187                 jit->seen |= SEEN_MEM;
1188                 break;
1189         case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
1190                 /* lhi %w0,imm */
1191                 EMIT4_IMM(0xa7080000, REG_W0, (u8) imm);
1192                 /* stcy %w0,off(dst) */
1193                 EMIT6_DISP_LH(0xe3000000, 0x0072, REG_W0, dst_reg, REG_0, off);
1194                 jit->seen |= SEEN_MEM;
1195                 break;
1196         case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
1197                 /* lhi %w0,imm */
1198                 EMIT4_IMM(0xa7080000, REG_W0, (u16) imm);
1199                 /* sthy %w0,off(dst) */
1200                 EMIT6_DISP_LH(0xe3000000, 0x0070, REG_W0, dst_reg, REG_0, off);
1201                 jit->seen |= SEEN_MEM;
1202                 break;
1203         case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
1204                 /* llilf %w0,imm  */
1205                 EMIT6_IMM(0xc00f0000, REG_W0, (u32) imm);
1206                 /* sty %w0,off(%dst) */
1207                 EMIT6_DISP_LH(0xe3000000, 0x0050, REG_W0, dst_reg, REG_0, off);
1208                 jit->seen |= SEEN_MEM;
1209                 break;
1210         case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
1211                 /* lgfi %w0,imm */
1212                 EMIT6_IMM(0xc0010000, REG_W0, imm);
1213                 /* stg %w0,off(%dst) */
1214                 EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W0, dst_reg, REG_0, off);
1215                 jit->seen |= SEEN_MEM;
1216                 break;
1217         /*
1218          * BPF_ATOMIC
1219          */
1220         case BPF_STX | BPF_ATOMIC | BPF_DW:
1221         case BPF_STX | BPF_ATOMIC | BPF_W:
1222         {
1223                 bool is32 = BPF_SIZE(insn->code) == BPF_W;
1224
1225                 switch (insn->imm) {
1226 /* {op32|op64} {%w0|%src},%src,off(%dst) */
1227 #define EMIT_ATOMIC(op32, op64) do {                                    \
1228         EMIT6_DISP_LH(0xeb000000, is32 ? (op32) : (op64),               \
1229                       (insn->imm & BPF_FETCH) ? src_reg : REG_W0,       \
1230                       src_reg, dst_reg, off);                           \
1231         if (is32 && (insn->imm & BPF_FETCH))                            \
1232                 EMIT_ZERO(src_reg);                                     \
1233 } while (0)
1234                 case BPF_ADD:
1235                 case BPF_ADD | BPF_FETCH:
1236                         /* {laal|laalg} */
1237                         EMIT_ATOMIC(0x00fa, 0x00ea);
1238                         break;
1239                 case BPF_AND:
1240                 case BPF_AND | BPF_FETCH:
1241                         /* {lan|lang} */
1242                         EMIT_ATOMIC(0x00f4, 0x00e4);
1243                         break;
1244                 case BPF_OR:
1245                 case BPF_OR | BPF_FETCH:
1246                         /* {lao|laog} */
1247                         EMIT_ATOMIC(0x00f6, 0x00e6);
1248                         break;
1249                 case BPF_XOR:
1250                 case BPF_XOR | BPF_FETCH:
1251                         /* {lax|laxg} */
1252                         EMIT_ATOMIC(0x00f7, 0x00e7);
1253                         break;
1254 #undef EMIT_ATOMIC
1255                 case BPF_XCHG:
1256                         /* {ly|lg} %w0,off(%dst) */
1257                         EMIT6_DISP_LH(0xe3000000,
1258                                       is32 ? 0x0058 : 0x0004, REG_W0, REG_0,
1259                                       dst_reg, off);
1260                         /* 0: {csy|csg} %w0,%src,off(%dst) */
1261                         EMIT6_DISP_LH(0xeb000000, is32 ? 0x0014 : 0x0030,
1262                                       REG_W0, src_reg, dst_reg, off);
1263                         /* brc 4,0b */
1264                         EMIT4_PCREL_RIC(0xa7040000, 4, jit->prg - 6);
1265                         /* {llgfr|lgr} %src,%w0 */
1266                         EMIT4(is32 ? 0xb9160000 : 0xb9040000, src_reg, REG_W0);
1267                         if (is32 && insn_is_zext(&insn[1]))
1268                                 insn_count = 2;
1269                         break;
1270                 case BPF_CMPXCHG:
1271                         /* 0: {csy|csg} %b0,%src,off(%dst) */
1272                         EMIT6_DISP_LH(0xeb000000, is32 ? 0x0014 : 0x0030,
1273                                       BPF_REG_0, src_reg, dst_reg, off);
1274                         break;
1275                 default:
1276                         pr_err("Unknown atomic operation %02x\n", insn->imm);
1277                         return -1;
1278                 }
1279
1280                 jit->seen |= SEEN_MEM;
1281                 break;
1282         }
1283         /*
1284          * BPF_LDX
1285          */
1286         case BPF_LDX | BPF_MEM | BPF_B: /* dst = *(u8 *)(ul) (src + off) */
1287         case BPF_LDX | BPF_PROBE_MEM | BPF_B:
1288                 /* llgc %dst,0(off,%src) */
1289                 EMIT6_DISP_LH(0xe3000000, 0x0090, dst_reg, src_reg, REG_0, off);
1290                 jit->seen |= SEEN_MEM;
1291                 if (insn_is_zext(&insn[1]))
1292                         insn_count = 2;
1293                 break;
1294         case BPF_LDX | BPF_MEM | BPF_H: /* dst = *(u16 *)(ul) (src + off) */
1295         case BPF_LDX | BPF_PROBE_MEM | BPF_H:
1296                 /* llgh %dst,0(off,%src) */
1297                 EMIT6_DISP_LH(0xe3000000, 0x0091, dst_reg, src_reg, REG_0, off);
1298                 jit->seen |= SEEN_MEM;
1299                 if (insn_is_zext(&insn[1]))
1300                         insn_count = 2;
1301                 break;
1302         case BPF_LDX | BPF_MEM | BPF_W: /* dst = *(u32 *)(ul) (src + off) */
1303         case BPF_LDX | BPF_PROBE_MEM | BPF_W:
1304                 /* llgf %dst,off(%src) */
1305                 jit->seen |= SEEN_MEM;
1306                 EMIT6_DISP_LH(0xe3000000, 0x0016, dst_reg, src_reg, REG_0, off);
1307                 if (insn_is_zext(&insn[1]))
1308                         insn_count = 2;
1309                 break;
1310         case BPF_LDX | BPF_MEM | BPF_DW: /* dst = *(u64 *)(ul) (src + off) */
1311         case BPF_LDX | BPF_PROBE_MEM | BPF_DW:
1312                 /* lg %dst,0(off,%src) */
1313                 jit->seen |= SEEN_MEM;
1314                 EMIT6_DISP_LH(0xe3000000, 0x0004, dst_reg, src_reg, REG_0, off);
1315                 break;
1316         /*
1317          * BPF_JMP / CALL
1318          */
1319         case BPF_JMP | BPF_CALL:
1320         {
1321                 u64 func;
1322                 bool func_addr_fixed;
1323                 int ret;
1324
1325                 ret = bpf_jit_get_func_addr(fp, insn, extra_pass,
1326                                             &func, &func_addr_fixed);
1327                 if (ret < 0)
1328                         return -1;
1329
1330                 REG_SET_SEEN(BPF_REG_5);
1331                 jit->seen |= SEEN_FUNC;
1332                 /* lgrl %w1,func */
1333                 EMIT6_PCREL_RILB(0xc4080000, REG_W1, _EMIT_CONST_U64(func));
1334                 if (nospec_uses_trampoline()) {
1335                         /* brasl %r14,__s390_indirect_jump_r1 */
1336                         EMIT6_PCREL_RILB(0xc0050000, REG_14, jit->r1_thunk_ip);
1337                 } else {
1338                         /* basr %r14,%w1 */
1339                         EMIT2(0x0d00, REG_14, REG_W1);
1340                 }
1341                 /* lgr %b0,%r2: load return value into %b0 */
1342                 EMIT4(0xb9040000, BPF_REG_0, REG_2);
1343                 break;
1344         }
1345         case BPF_JMP | BPF_TAIL_CALL: {
1346                 int patch_1_clrj, patch_2_clij, patch_3_brc;
1347
1348                 /*
1349                  * Implicit input:
1350                  *  B1: pointer to ctx
1351                  *  B2: pointer to bpf_array
1352                  *  B3: index in bpf_array
1353                  */
1354                 jit->seen |= SEEN_TAIL_CALL;
1355
1356                 /*
1357                  * if (index >= array->map.max_entries)
1358                  *         goto out;
1359                  */
1360
1361                 /* llgf %w1,map.max_entries(%b2) */
1362                 EMIT6_DISP_LH(0xe3000000, 0x0016, REG_W1, REG_0, BPF_REG_2,
1363                               offsetof(struct bpf_array, map.max_entries));
1364                 /* if ((u32)%b3 >= (u32)%w1) goto out; */
1365                 /* clrj %b3,%w1,0xa,out */
1366                 patch_1_clrj = jit->prg;
1367                 EMIT6_PCREL_RIEB(0xec000000, 0x0077, BPF_REG_3, REG_W1, 0xa,
1368                                  jit->prg);
1369
1370                 /*
1371                  * if (tail_call_cnt++ >= MAX_TAIL_CALL_CNT)
1372                  *         goto out;
1373                  */
1374
1375                 if (jit->seen & SEEN_STACK)
1376                         off = STK_OFF_TCCNT + STK_OFF + stack_depth;
1377                 else
1378                         off = STK_OFF_TCCNT;
1379                 /* lhi %w0,1 */
1380                 EMIT4_IMM(0xa7080000, REG_W0, 1);
1381                 /* laal %w1,%w0,off(%r15) */
1382                 EMIT6_DISP_LH(0xeb000000, 0x00fa, REG_W1, REG_W0, REG_15, off);
1383                 /* clij %w1,MAX_TAIL_CALL_CNT-1,0x2,out */
1384                 patch_2_clij = jit->prg;
1385                 EMIT6_PCREL_RIEC(0xec000000, 0x007f, REG_W1, MAX_TAIL_CALL_CNT - 1,
1386                                  2, jit->prg);
1387
1388                 /*
1389                  * prog = array->ptrs[index];
1390                  * if (prog == NULL)
1391                  *         goto out;
1392                  */
1393
1394                 /* llgfr %r1,%b3: %r1 = (u32) index */
1395                 EMIT4(0xb9160000, REG_1, BPF_REG_3);
1396                 /* sllg %r1,%r1,3: %r1 *= 8 */
1397                 EMIT6_DISP_LH(0xeb000000, 0x000d, REG_1, REG_1, REG_0, 3);
1398                 /* ltg %r1,prog(%b2,%r1) */
1399                 EMIT6_DISP_LH(0xe3000000, 0x0002, REG_1, BPF_REG_2,
1400                               REG_1, offsetof(struct bpf_array, ptrs));
1401                 /* brc 0x8,out */
1402                 patch_3_brc = jit->prg;
1403                 EMIT4_PCREL_RIC(0xa7040000, 8, jit->prg);
1404
1405                 /*
1406                  * Restore registers before calling function
1407                  */
1408                 save_restore_regs(jit, REGS_RESTORE, stack_depth);
1409
1410                 /*
1411                  * goto *(prog->bpf_func + tail_call_start);
1412                  */
1413
1414                 /* lg %r1,bpf_func(%r1) */
1415                 EMIT6_DISP_LH(0xe3000000, 0x0004, REG_1, REG_1, REG_0,
1416                               offsetof(struct bpf_prog, bpf_func));
1417                 /* bc 0xf,tail_call_start(%r1) */
1418                 _EMIT4(0x47f01000 + jit->tail_call_start);
1419                 /* out: */
1420                 if (jit->prg_buf) {
1421                         *(u16 *)(jit->prg_buf + patch_1_clrj + 2) =
1422                                 (jit->prg - patch_1_clrj) >> 1;
1423                         *(u16 *)(jit->prg_buf + patch_2_clij + 2) =
1424                                 (jit->prg - patch_2_clij) >> 1;
1425                         *(u16 *)(jit->prg_buf + patch_3_brc + 2) =
1426                                 (jit->prg - patch_3_brc) >> 1;
1427                 }
1428                 break;
1429         }
1430         case BPF_JMP | BPF_EXIT: /* return b0 */
1431                 last = (i == fp->len - 1) ? 1 : 0;
1432                 if (last)
1433                         break;
1434                 if (!is_first_pass(jit) && can_use_rel(jit, jit->exit_ip))
1435                         /* brc 0xf, <exit> */
1436                         EMIT4_PCREL_RIC(0xa7040000, 0xf, jit->exit_ip);
1437                 else
1438                         /* brcl 0xf, <exit> */
1439                         EMIT6_PCREL_RILC(0xc0040000, 0xf, jit->exit_ip);
1440                 break;
1441         /*
1442          * Branch relative (number of skipped instructions) to offset on
1443          * condition.
1444          *
1445          * Condition code to mask mapping:
1446          *
1447          * CC | Description        | Mask
1448          * ------------------------------
1449          * 0  | Operands equal     |    8
1450          * 1  | First operand low  |    4
1451          * 2  | First operand high |    2
1452          * 3  | Unused             |    1
1453          *
1454          * For s390x relative branches: ip = ip + off_bytes
1455          * For BPF relative branches:   insn = insn + off_insns + 1
1456          *
1457          * For example for s390x with offset 0 we jump to the branch
1458          * instruction itself (loop) and for BPF with offset 0 we
1459          * branch to the instruction behind the branch.
1460          */
1461         case BPF_JMP | BPF_JA: /* if (true) */
1462                 mask = 0xf000; /* j */
1463                 goto branch_oc;
1464         case BPF_JMP | BPF_JSGT | BPF_K: /* ((s64) dst > (s64) imm) */
1465         case BPF_JMP32 | BPF_JSGT | BPF_K: /* ((s32) dst > (s32) imm) */
1466                 mask = 0x2000; /* jh */
1467                 goto branch_ks;
1468         case BPF_JMP | BPF_JSLT | BPF_K: /* ((s64) dst < (s64) imm) */
1469         case BPF_JMP32 | BPF_JSLT | BPF_K: /* ((s32) dst < (s32) imm) */
1470                 mask = 0x4000; /* jl */
1471                 goto branch_ks;
1472         case BPF_JMP | BPF_JSGE | BPF_K: /* ((s64) dst >= (s64) imm) */
1473         case BPF_JMP32 | BPF_JSGE | BPF_K: /* ((s32) dst >= (s32) imm) */
1474                 mask = 0xa000; /* jhe */
1475                 goto branch_ks;
1476         case BPF_JMP | BPF_JSLE | BPF_K: /* ((s64) dst <= (s64) imm) */
1477         case BPF_JMP32 | BPF_JSLE | BPF_K: /* ((s32) dst <= (s32) imm) */
1478                 mask = 0xc000; /* jle */
1479                 goto branch_ks;
1480         case BPF_JMP | BPF_JGT | BPF_K: /* (dst_reg > imm) */
1481         case BPF_JMP32 | BPF_JGT | BPF_K: /* ((u32) dst_reg > (u32) imm) */
1482                 mask = 0x2000; /* jh */
1483                 goto branch_ku;
1484         case BPF_JMP | BPF_JLT | BPF_K: /* (dst_reg < imm) */
1485         case BPF_JMP32 | BPF_JLT | BPF_K: /* ((u32) dst_reg < (u32) imm) */
1486                 mask = 0x4000; /* jl */
1487                 goto branch_ku;
1488         case BPF_JMP | BPF_JGE | BPF_K: /* (dst_reg >= imm) */
1489         case BPF_JMP32 | BPF_JGE | BPF_K: /* ((u32) dst_reg >= (u32) imm) */
1490                 mask = 0xa000; /* jhe */
1491                 goto branch_ku;
1492         case BPF_JMP | BPF_JLE | BPF_K: /* (dst_reg <= imm) */
1493         case BPF_JMP32 | BPF_JLE | BPF_K: /* ((u32) dst_reg <= (u32) imm) */
1494                 mask = 0xc000; /* jle */
1495                 goto branch_ku;
1496         case BPF_JMP | BPF_JNE | BPF_K: /* (dst_reg != imm) */
1497         case BPF_JMP32 | BPF_JNE | BPF_K: /* ((u32) dst_reg != (u32) imm) */
1498                 mask = 0x7000; /* jne */
1499                 goto branch_ku;
1500         case BPF_JMP | BPF_JEQ | BPF_K: /* (dst_reg == imm) */
1501         case BPF_JMP32 | BPF_JEQ | BPF_K: /* ((u32) dst_reg == (u32) imm) */
1502                 mask = 0x8000; /* je */
1503                 goto branch_ku;
1504         case BPF_JMP | BPF_JSET | BPF_K: /* (dst_reg & imm) */
1505         case BPF_JMP32 | BPF_JSET | BPF_K: /* ((u32) dst_reg & (u32) imm) */
1506                 mask = 0x7000; /* jnz */
1507                 if (BPF_CLASS(insn->code) == BPF_JMP32) {
1508                         /* llilf %w1,imm (load zero extend imm) */
1509                         EMIT6_IMM(0xc00f0000, REG_W1, imm);
1510                         /* nr %w1,%dst */
1511                         EMIT2(0x1400, REG_W1, dst_reg);
1512                 } else {
1513                         /* lgfi %w1,imm (load sign extend imm) */
1514                         EMIT6_IMM(0xc0010000, REG_W1, imm);
1515                         /* ngr %w1,%dst */
1516                         EMIT4(0xb9800000, REG_W1, dst_reg);
1517                 }
1518                 goto branch_oc;
1519
1520         case BPF_JMP | BPF_JSGT | BPF_X: /* ((s64) dst > (s64) src) */
1521         case BPF_JMP32 | BPF_JSGT | BPF_X: /* ((s32) dst > (s32) src) */
1522                 mask = 0x2000; /* jh */
1523                 goto branch_xs;
1524         case BPF_JMP | BPF_JSLT | BPF_X: /* ((s64) dst < (s64) src) */
1525         case BPF_JMP32 | BPF_JSLT | BPF_X: /* ((s32) dst < (s32) src) */
1526                 mask = 0x4000; /* jl */
1527                 goto branch_xs;
1528         case BPF_JMP | BPF_JSGE | BPF_X: /* ((s64) dst >= (s64) src) */
1529         case BPF_JMP32 | BPF_JSGE | BPF_X: /* ((s32) dst >= (s32) src) */
1530                 mask = 0xa000; /* jhe */
1531                 goto branch_xs;
1532         case BPF_JMP | BPF_JSLE | BPF_X: /* ((s64) dst <= (s64) src) */
1533         case BPF_JMP32 | BPF_JSLE | BPF_X: /* ((s32) dst <= (s32) src) */
1534                 mask = 0xc000; /* jle */
1535                 goto branch_xs;
1536         case BPF_JMP | BPF_JGT | BPF_X: /* (dst > src) */
1537         case BPF_JMP32 | BPF_JGT | BPF_X: /* ((u32) dst > (u32) src) */
1538                 mask = 0x2000; /* jh */
1539                 goto branch_xu;
1540         case BPF_JMP | BPF_JLT | BPF_X: /* (dst < src) */
1541         case BPF_JMP32 | BPF_JLT | BPF_X: /* ((u32) dst < (u32) src) */
1542                 mask = 0x4000; /* jl */
1543                 goto branch_xu;
1544         case BPF_JMP | BPF_JGE | BPF_X: /* (dst >= src) */
1545         case BPF_JMP32 | BPF_JGE | BPF_X: /* ((u32) dst >= (u32) src) */
1546                 mask = 0xa000; /* jhe */
1547                 goto branch_xu;
1548         case BPF_JMP | BPF_JLE | BPF_X: /* (dst <= src) */
1549         case BPF_JMP32 | BPF_JLE | BPF_X: /* ((u32) dst <= (u32) src) */
1550                 mask = 0xc000; /* jle */
1551                 goto branch_xu;
1552         case BPF_JMP | BPF_JNE | BPF_X: /* (dst != src) */
1553         case BPF_JMP32 | BPF_JNE | BPF_X: /* ((u32) dst != (u32) src) */
1554                 mask = 0x7000; /* jne */
1555                 goto branch_xu;
1556         case BPF_JMP | BPF_JEQ | BPF_X: /* (dst == src) */
1557         case BPF_JMP32 | BPF_JEQ | BPF_X: /* ((u32) dst == (u32) src) */
1558                 mask = 0x8000; /* je */
1559                 goto branch_xu;
1560         case BPF_JMP | BPF_JSET | BPF_X: /* (dst & src) */
1561         case BPF_JMP32 | BPF_JSET | BPF_X: /* ((u32) dst & (u32) src) */
1562         {
1563                 bool is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
1564
1565                 mask = 0x7000; /* jnz */
1566                 /* nrk or ngrk %w1,%dst,%src */
1567                 EMIT4_RRF((is_jmp32 ? 0xb9f40000 : 0xb9e40000),
1568                           REG_W1, dst_reg, src_reg);
1569                 goto branch_oc;
1570 branch_ks:
1571                 is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
1572                 /* cfi or cgfi %dst,imm */
1573                 EMIT6_IMM(is_jmp32 ? 0xc20d0000 : 0xc20c0000,
1574                           dst_reg, imm);
1575                 if (!is_first_pass(jit) &&
1576                     can_use_rel(jit, addrs[i + off + 1])) {
1577                         /* brc mask,off */
1578                         EMIT4_PCREL_RIC(0xa7040000,
1579                                         mask >> 12, addrs[i + off + 1]);
1580                 } else {
1581                         /* brcl mask,off */
1582                         EMIT6_PCREL_RILC(0xc0040000,
1583                                          mask >> 12, addrs[i + off + 1]);
1584                 }
1585                 break;
1586 branch_ku:
1587                 /* lgfi %w1,imm (load sign extend imm) */
1588                 src_reg = REG_1;
1589                 EMIT6_IMM(0xc0010000, src_reg, imm);
1590                 goto branch_xu;
1591 branch_xs:
1592                 is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
1593                 if (!is_first_pass(jit) &&
1594                     can_use_rel(jit, addrs[i + off + 1])) {
1595                         /* crj or cgrj %dst,%src,mask,off */
1596                         EMIT6_PCREL(0xec000000, (is_jmp32 ? 0x0076 : 0x0064),
1597                                     dst_reg, src_reg, i, off, mask);
1598                 } else {
1599                         /* cr or cgr %dst,%src */
1600                         if (is_jmp32)
1601                                 EMIT2(0x1900, dst_reg, src_reg);
1602                         else
1603                                 EMIT4(0xb9200000, dst_reg, src_reg);
1604                         /* brcl mask,off */
1605                         EMIT6_PCREL_RILC(0xc0040000,
1606                                          mask >> 12, addrs[i + off + 1]);
1607                 }
1608                 break;
1609 branch_xu:
1610                 is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
1611                 if (!is_first_pass(jit) &&
1612                     can_use_rel(jit, addrs[i + off + 1])) {
1613                         /* clrj or clgrj %dst,%src,mask,off */
1614                         EMIT6_PCREL(0xec000000, (is_jmp32 ? 0x0077 : 0x0065),
1615                                     dst_reg, src_reg, i, off, mask);
1616                 } else {
1617                         /* clr or clgr %dst,%src */
1618                         if (is_jmp32)
1619                                 EMIT2(0x1500, dst_reg, src_reg);
1620                         else
1621                                 EMIT4(0xb9210000, dst_reg, src_reg);
1622                         /* brcl mask,off */
1623                         EMIT6_PCREL_RILC(0xc0040000,
1624                                          mask >> 12, addrs[i + off + 1]);
1625                 }
1626                 break;
1627 branch_oc:
1628                 if (!is_first_pass(jit) &&
1629                     can_use_rel(jit, addrs[i + off + 1])) {
1630                         /* brc mask,off */
1631                         EMIT4_PCREL_RIC(0xa7040000,
1632                                         mask >> 12, addrs[i + off + 1]);
1633                 } else {
1634                         /* brcl mask,off */
1635                         EMIT6_PCREL_RILC(0xc0040000,
1636                                          mask >> 12, addrs[i + off + 1]);
1637                 }
1638                 break;
1639         }
1640         default: /* too complex, give up */
1641                 pr_err("Unknown opcode %02x\n", insn->code);
1642                 return -1;
1643         }
1644
1645         if (probe_prg != -1) {
1646                 /*
1647                  * Handlers of certain exceptions leave psw.addr pointing to
1648                  * the instruction directly after the failing one. Therefore,
1649                  * create two exception table entries and also add a nop in
1650                  * case two probing instructions come directly after each
1651                  * other.
1652                  */
1653                 nop_prg = jit->prg;
1654                 /* bcr 0,%0 */
1655                 _EMIT2(0x0700);
1656                 err = bpf_jit_probe_mem(jit, fp, probe_prg, nop_prg);
1657                 if (err < 0)
1658                         return err;
1659         }
1660
1661         return insn_count;
1662 }
1663
1664 /*
1665  * Return whether new i-th instruction address does not violate any invariant
1666  */
1667 static bool bpf_is_new_addr_sane(struct bpf_jit *jit, int i)
1668 {
1669         /* On the first pass anything goes */
1670         if (is_first_pass(jit))
1671                 return true;
1672
1673         /* The codegen pass must not change anything */
1674         if (is_codegen_pass(jit))
1675                 return jit->addrs[i] == jit->prg;
1676
1677         /* Passes in between must not increase code size */
1678         return jit->addrs[i] >= jit->prg;
1679 }
1680
1681 /*
1682  * Update the address of i-th instruction
1683  */
1684 static int bpf_set_addr(struct bpf_jit *jit, int i)
1685 {
1686         int delta;
1687
1688         if (is_codegen_pass(jit)) {
1689                 delta = jit->prg - jit->addrs[i];
1690                 if (delta < 0)
1691                         bpf_skip(jit, -delta);
1692         }
1693         if (WARN_ON_ONCE(!bpf_is_new_addr_sane(jit, i)))
1694                 return -1;
1695         jit->addrs[i] = jit->prg;
1696         return 0;
1697 }
1698
1699 /*
1700  * Compile eBPF program into s390x code
1701  */
1702 static int bpf_jit_prog(struct bpf_jit *jit, struct bpf_prog *fp,
1703                         bool extra_pass, u32 stack_depth)
1704 {
1705         int i, insn_count, lit32_size, lit64_size;
1706
1707         jit->lit32 = jit->lit32_start;
1708         jit->lit64 = jit->lit64_start;
1709         jit->prg = 0;
1710         jit->excnt = 0;
1711
1712         bpf_jit_prologue(jit, stack_depth);
1713         if (bpf_set_addr(jit, 0) < 0)
1714                 return -1;
1715         for (i = 0; i < fp->len; i += insn_count) {
1716                 insn_count = bpf_jit_insn(jit, fp, i, extra_pass, stack_depth);
1717                 if (insn_count < 0)
1718                         return -1;
1719                 /* Next instruction address */
1720                 if (bpf_set_addr(jit, i + insn_count) < 0)
1721                         return -1;
1722         }
1723         bpf_jit_epilogue(jit, stack_depth);
1724
1725         lit32_size = jit->lit32 - jit->lit32_start;
1726         lit64_size = jit->lit64 - jit->lit64_start;
1727         jit->lit32_start = jit->prg;
1728         if (lit32_size)
1729                 jit->lit32_start = ALIGN(jit->lit32_start, 4);
1730         jit->lit64_start = jit->lit32_start + lit32_size;
1731         if (lit64_size)
1732                 jit->lit64_start = ALIGN(jit->lit64_start, 8);
1733         jit->size = jit->lit64_start + lit64_size;
1734         jit->size_prg = jit->prg;
1735
1736         if (WARN_ON_ONCE(fp->aux->extable &&
1737                          jit->excnt != fp->aux->num_exentries))
1738                 /* Verifier bug - too many entries. */
1739                 return -1;
1740
1741         return 0;
1742 }
1743
1744 bool bpf_jit_needs_zext(void)
1745 {
1746         return true;
1747 }
1748
1749 struct s390_jit_data {
1750         struct bpf_binary_header *header;
1751         struct bpf_jit ctx;
1752         int pass;
1753 };
1754
1755 static struct bpf_binary_header *bpf_jit_alloc(struct bpf_jit *jit,
1756                                                struct bpf_prog *fp)
1757 {
1758         struct bpf_binary_header *header;
1759         u32 extable_size;
1760         u32 code_size;
1761
1762         /* We need two entries per insn. */
1763         fp->aux->num_exentries *= 2;
1764
1765         code_size = roundup(jit->size,
1766                             __alignof__(struct exception_table_entry));
1767         extable_size = fp->aux->num_exentries *
1768                 sizeof(struct exception_table_entry);
1769         header = bpf_jit_binary_alloc(code_size + extable_size, &jit->prg_buf,
1770                                       8, jit_fill_hole);
1771         if (!header)
1772                 return NULL;
1773         fp->aux->extable = (struct exception_table_entry *)
1774                 (jit->prg_buf + code_size);
1775         return header;
1776 }
1777
1778 /*
1779  * Compile eBPF program "fp"
1780  */
1781 struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
1782 {
1783         u32 stack_depth = round_up(fp->aux->stack_depth, 8);
1784         struct bpf_prog *tmp, *orig_fp = fp;
1785         struct bpf_binary_header *header;
1786         struct s390_jit_data *jit_data;
1787         bool tmp_blinded = false;
1788         bool extra_pass = false;
1789         struct bpf_jit jit;
1790         int pass;
1791
1792         if (!fp->jit_requested)
1793                 return orig_fp;
1794
1795         tmp = bpf_jit_blind_constants(fp);
1796         /*
1797          * If blinding was requested and we failed during blinding,
1798          * we must fall back to the interpreter.
1799          */
1800         if (IS_ERR(tmp))
1801                 return orig_fp;
1802         if (tmp != fp) {
1803                 tmp_blinded = true;
1804                 fp = tmp;
1805         }
1806
1807         jit_data = fp->aux->jit_data;
1808         if (!jit_data) {
1809                 jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
1810                 if (!jit_data) {
1811                         fp = orig_fp;
1812                         goto out;
1813                 }
1814                 fp->aux->jit_data = jit_data;
1815         }
1816         if (jit_data->ctx.addrs) {
1817                 jit = jit_data->ctx;
1818                 header = jit_data->header;
1819                 extra_pass = true;
1820                 pass = jit_data->pass + 1;
1821                 goto skip_init_ctx;
1822         }
1823
1824         memset(&jit, 0, sizeof(jit));
1825         jit.addrs = kvcalloc(fp->len + 1, sizeof(*jit.addrs), GFP_KERNEL);
1826         if (jit.addrs == NULL) {
1827                 fp = orig_fp;
1828                 goto free_addrs;
1829         }
1830         /*
1831          * Three initial passes:
1832          *   - 1/2: Determine clobbered registers
1833          *   - 3:   Calculate program size and addrs arrray
1834          */
1835         for (pass = 1; pass <= 3; pass++) {
1836                 if (bpf_jit_prog(&jit, fp, extra_pass, stack_depth)) {
1837                         fp = orig_fp;
1838                         goto free_addrs;
1839                 }
1840         }
1841         /*
1842          * Final pass: Allocate and generate program
1843          */
1844         header = bpf_jit_alloc(&jit, fp);
1845         if (!header) {
1846                 fp = orig_fp;
1847                 goto free_addrs;
1848         }
1849 skip_init_ctx:
1850         if (bpf_jit_prog(&jit, fp, extra_pass, stack_depth)) {
1851                 bpf_jit_binary_free(header);
1852                 fp = orig_fp;
1853                 goto free_addrs;
1854         }
1855         if (bpf_jit_enable > 1) {
1856                 bpf_jit_dump(fp->len, jit.size, pass, jit.prg_buf);
1857                 print_fn_code(jit.prg_buf, jit.size_prg);
1858         }
1859         if (!fp->is_func || extra_pass) {
1860                 bpf_jit_binary_lock_ro(header);
1861         } else {
1862                 jit_data->header = header;
1863                 jit_data->ctx = jit;
1864                 jit_data->pass = pass;
1865         }
1866         fp->bpf_func = (void *) jit.prg_buf;
1867         fp->jited = 1;
1868         fp->jited_len = jit.size;
1869
1870         if (!fp->is_func || extra_pass) {
1871                 bpf_prog_fill_jited_linfo(fp, jit.addrs + 1);
1872 free_addrs:
1873                 kvfree(jit.addrs);
1874                 kfree(jit_data);
1875                 fp->aux->jit_data = NULL;
1876         }
1877 out:
1878         if (tmp_blinded)
1879                 bpf_jit_prog_release_other(fp, fp == orig_fp ?
1880                                            tmp : orig_fp);
1881         return fp;
1882 }