History

Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus

Pull MIPS updates from Ralf Baechle: "This week's round of MIPS fixes: - Fix JZ4740 build - Fix fallback to GFP_DMA - FP seccomp in case of ENOSYS - Fix bootmem panic - A number of FP and CPS fixes - Wire up new syscalls - Make sure BPF assembler objects can properly be disassembled - Fix BPF assembler code for MIPS I" * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: MIPS: scall: Always run the seccomp syscall filters MIPS: Octeon: Fix kernel panic on startup from memory corruption MIPS: Fix R2300 FP context switch handling MIPS: Fix octeon FP context switch handling MIPS: BPF: Fix load delay slots. MIPS: BPF: Do all exports of symbols with FEXPORT(). MIPS: Fix the build on jz4740 after removing the custom gpio.h MIPS: CPS: #ifdef on CONFIG_MIPS_MT_SMP rather than CONFIG_MIPS_MT MIPS: CPS: Don't include MT code in non-MT kernels. MIPS: CPS: Stop dangling delay slot from has_mt. MIPS: dma-default: Fix 32-bit fall back to GFP_DMA MIPS: Wire up userfaultfd and membarrier syscalls.

Linus Torvalds committed 11 years ago

Commit 0d877082 parents 3e519dd d218af713 files · +82 −144Browse files

Unified · Split

13 files
  1. arch/mips/cavium-octeon/setup.c +1 −1
  2. arch/mips/include/uapi/asm/unistd.h +12 −6
  3. arch/mips/jz4740/board-qi_lb60.c +1 −0
  4. arch/mips/jz4740/gpio.c +1 −0
  5. arch/mips/kernel/cps-vec.S +7 −5
  6. arch/mips/kernel/octeon_switch.S +1 −25
  7. arch/mips/kernel/r2300_switch.S +1 −27
  8. arch/mips/kernel/scall32-o32.S +18 −23
  9. arch/mips/kernel/scall64-64.S +18 −22
  10. arch/mips/kernel/scall64-n32.S +7 −14
  11. arch/mips/kernel/scall64-o32.S +7 −14
  12. arch/mips/mm/dma-default.c +1 −1
  13. arch/mips/net/bpf_jit_asm.S +7 −6
arch/mips/cavium-octeon/setup.c+1−1
@@ -933,7 +933,7 @@ void __init plat_mem_setup(void) · 932 unmodified lines
933933 while ((boot_mem_map.nr_map < BOOT_MEM_MAP_MAX)
934934 && (total < MAX_MEMORY)) {
935935 memory = cvmx_bootmem_phy_alloc(mem_alloc_size,
936− __pa_symbol(&__init_end), -1,
936+ __pa_symbol(&_end), -1,
937937 0x100000,
938938 CVMX_BOOTMEM_FLAG_NO_LOCKING);
939939 if (memory >= 0) {
arch/mips/include/uapi/asm/unistd.h+12−6
@@ -377,16 +377,18 @@ · 376 unmodified lines
377377 #define __NR_memfd_create (__NR_Linux + 354)
378378 #define __NR_bpf (__NR_Linux + 355)
379379 #define __NR_execveat (__NR_Linux + 356)
380+#define __NR_userfaultfd (__NR_Linux + 357)
381+#define __NR_membarrier (__NR_Linux + 358)
380382
381383 /*
382384 * Offset of the last Linux o32 flavoured syscall
383385 */
384−#define __NR_Linux_syscalls 356
386+#define __NR_Linux_syscalls 358
385387
386388 #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
387389
388390 #define __NR_O32_Linux 4000
389−#define __NR_O32_Linux_syscalls 356
391+#define __NR_O32_Linux_syscalls 358
390392
391393 #if _MIPS_SIM == _MIPS_SIM_ABI64
392394
@@ -711,16 +713,18 @@ · 318 unmodified lines
711713 #define __NR_memfd_create (__NR_Linux + 314)
712714 #define __NR_bpf (__NR_Linux + 315)
713715 #define __NR_execveat (__NR_Linux + 316)
716+#define __NR_userfaultfd (__NR_Linux + 317)
717+#define __NR_membarrier (__NR_Linux + 318)
714718
715719 /*
716720 * Offset of the last Linux 64-bit flavoured syscall
717721 */
718−#define __NR_Linux_syscalls 316
722+#define __NR_Linux_syscalls 318
719723
720724 #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
721725
722726 #define __NR_64_Linux 5000
723−#define __NR_64_Linux_syscalls 316
727+#define __NR_64_Linux_syscalls 318
724728
725729 #if _MIPS_SIM == _MIPS_SIM_NABI32
726730
@@ -1049,15 +1053,17 @@ · 322 unmodified lines
10491053 #define __NR_memfd_create (__NR_Linux + 318)
10501054 #define __NR_bpf (__NR_Linux + 319)
10511055 #define __NR_execveat (__NR_Linux + 320)
1056+#define __NR_userfaultfd (__NR_Linux + 321)
1057+#define __NR_membarrier (__NR_Linux + 322)
10521058
10531059 /*
10541060 * Offset of the last N32 flavoured syscall
10551061 */
1056−#define __NR_Linux_syscalls 320
1062+#define __NR_Linux_syscalls 322
10571063
10581064 #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
10591065
10601066 #define __NR_N32_Linux 6000
1061−#define __NR_N32_Linux_syscalls 320
1067+#define __NR_N32_Linux_syscalls 322
10621068
10631069 #endif /* _UAPI_ASM_UNISTD_H */
arch/mips/jz4740/board-qi_lb60.c+1−0
@@ -26,6 +26,7 @@ · 25 unmodified lines
2626 #include <linux/power/jz4740-battery.h>
2727 #include <linux/power/gpio-charger.h>
2828
29+#include <asm/mach-jz4740/gpio.h>
2930 #include <asm/mach-jz4740/jz4740_fb.h>
3031 #include <asm/mach-jz4740/jz4740_mmc.h>
3132 #include <asm/mach-jz4740/jz4740_nand.h>
arch/mips/jz4740/gpio.c+1−0
@@ -28,6 +28,7 @@ · 27 unmodified lines
2828 #include <linux/seq_file.h>
2929
3030 #include <asm/mach-jz4740/base.h>
31+#include <asm/mach-jz4740/gpio.h>
3132
3233 #define JZ4740_GPIO_BASE_A (32*0)
3334 #define JZ4740_GPIO_BASE_B (32*1)
arch/mips/kernel/cps-vec.S+7−5
@@ -39,6 +39,7 @@ · 38 unmodified lines
3939 mfc0 \dest, CP0_CONFIG, 3
4040 andi \dest, \dest, MIPS_CONF3_MT
4141 beqz \dest, \nomt
42+ nop
4243 .endm
4344
4445 .section .text.cps-vec
@@ -223,10 +224,9 @@ LEAF(excep_ejtag) · 178 unmodified lines
223224 END(excep_ejtag)
224225
225226 LEAF(mips_cps_core_init)
226−#ifdef CONFIG_MIPS_MT
227+#ifdef CONFIG_MIPS_MT_SMP
227228 /* Check that the core implements the MT ASE */
228229 has_mt t0, 3f
229− nop
230230
231231 .set push
232232 .set mips64r2
@@ -310,8 +310,9 @@ LEAF(mips_cps_boot_vpes) · 77 unmodified lines
310310 PTR_ADDU t0, t0, t1
311311
312312 /* Calculate this VPEs ID. If the core doesn't support MT use 0 */
313+ li t9, 0
314+#ifdef CONFIG_MIPS_MT_SMP
313315 has_mt ta2, 1f
314− li t9, 0
315316
316317 /* Find the number of VPEs present in the core */
317318 mfc0 t1, CP0_MVPCONF0
@@ -330,6 +331,7 @@ LEAF(mips_cps_boot_vpes) · 12 unmodified lines
330331 /* Retrieve the VPE ID from EBase.CPUNum */
331332 mfc0 t9, $15, 1
332333 and t9, t9, t1
334+#endif
333335
334336 1: /* Calculate a pointer to this VPEs struct vpe_boot_config */
335337 li t1, VPEBOOTCFG_SIZE
@@ -337,7 +339,7 @@ LEAF(mips_cps_boot_vpes) · 1 unmodified line
337339 PTR_L ta3, COREBOOTCFG_VPECONFIG(t0)
338340 PTR_ADDU v0, v0, ta3
339341
340−#ifdef CONFIG_MIPS_MT
342+#ifdef CONFIG_MIPS_MT_SMP
341343
342344 /* If the core doesn't support MT then return */
343345 bnez ta2, 1f
@@ -451,7 +453,7 @@ LEAF(mips_cps_boot_vpes) · 107 unmodified lines
451453
452454 2: .set pop
453455
454−#endif /* CONFIG_MIPS_MT */
456+#endif /* CONFIG_MIPS_MT_SMP */
455457
456458 /* Return */
457459 jr ra
arch/mips/kernel/octeon_switch.S+1−25
@@ -18,7 +18,7 @@ · 17 unmodified lines
1818 .set pop
1919 /*
2020 * task_struct *resume(task_struct *prev, task_struct *next,
21− * struct thread_info *next_ti, int usedfpu)
21+ * struct thread_info *next_ti)
2222 */
2323 .align 7
2424 LEAF(resume)
@@ -28,30 +28,6 @@ · 3 unmodified lines
2828 cpu_save_nonscratch a0
2929 LONG_S ra, THREAD_REG31(a0)
3030
31− /*
32− * check if we need to save FPU registers
33− */
34− .set push
35− .set noreorder
36− beqz a3, 1f
37− PTR_L t3, TASK_THREAD_INFO(a0)
38− .set pop
39−
40− /*
41− * clear saved user stack CU1 bit
42− */
43− LONG_L t0, ST_OFF(t3)
44− li t1, ~ST0_CU1
45− and t0, t0, t1
46− LONG_S t0, ST_OFF(t3)
47−
48− .set push
49− .set arch=mips64r2
50− fpu_save_double a0 t0 t1 # c0_status passed in t0
51− # clobbers t1
52− .set pop
53−1:
54−
5531 #if CONFIG_CAVIUM_OCTEON_CVMSEG_SIZE > 0
5632 /* Check if we need to store CVMSEG state */
5733 dmfc0 t0, $11,7 /* CvmMemCtl */
arch/mips/kernel/r2300_switch.S+1−27
@@ -30,19 +30,9 @@ · 29 unmodified lines
3030 */
3131 #define ST_OFF (_THREAD_SIZE - 32 - PT_SIZE + PT_STATUS)
3232
33−/*
34− * FPU context is saved iff the process has used it's FPU in the current
35− * time slice as indicated by TIF_USEDFPU. In any case, the CU1 bit for user
36− * space STATUS register should be 0, so that a process *always* starts its
37− * userland with FPU disabled after each context switch.
38− *
39− * FPU will be enabled as soon as the process accesses FPU again, through
40− * do_cpu() trap.
41− */
42−
4333 /*
4434 * task_struct *resume(task_struct *prev, task_struct *next,
45− * struct thread_info *next_ti, int usedfpu)
35+ * struct thread_info *next_ti)
4636 */
4737 LEAF(resume)
4838 mfc0 t1, CP0_STATUS
@@ -50,22 +40,6 @@ LEAF(resume) · 1 unmodified line
5040 cpu_save_nonscratch a0
5141 sw ra, THREAD_REG31(a0)
5242
53− beqz a3, 1f
54−
55− PTR_L t3, TASK_THREAD_INFO(a0)
56−
57− /*
58− * clear saved user stack CU1 bit
59− */
60− lw t0, ST_OFF(t3)
61− li t1, ~ST0_CU1
62− and t0, t0, t1
63− sw t0, ST_OFF(t3)
64−
65− fpu_save_single a0, t0 # clobbers t0
66−
67−1:
68−
6943 #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
7044 PTR_LA t8, __stack_chk_guard
7145 LONG_L t9, TASK_STACK_CANARY(a1)
arch/mips/kernel/scall32-o32.S+18−23
@@ -36,16 +36,8 @@ NESTED(handle_sys, PT_SIZE, sp) · 35 unmodified lines
3636 lw t1, PT_EPC(sp) # skip syscall on return
3737
3838 subu v0, v0, __NR_O32_Linux # check syscall number
39− sltiu t0, v0, __NR_O32_Linux_syscalls + 1
4039 addiu t1, 4 # skip to next instruction
4140 sw t1, PT_EPC(sp)
42− beqz t0, illegal_syscall
43−
44− sll t0, v0, 2
45− la t1, sys_call_table
46− addu t1, t0
47− lw t2, (t1) # syscall routine
48− beqz t2, illegal_syscall
4941
5042 sw a3, PT_R26(sp) # save a3 for syscall restarting
5143
@@ -96,6 +88,16 @@ loads_done: · 44 unmodified lines
9688 li t1, _TIF_WORK_SYSCALL_ENTRY
9789 and t0, t1
9890 bnez t0, syscall_trace_entry # -> yes
91+syscall_common:
92+ sltiu t0, v0, __NR_O32_Linux_syscalls + 1
93+ beqz t0, illegal_syscall
94+
95+ sll t0, v0, 2
96+ la t1, sys_call_table
97+ addu t1, t0
98+ lw t2, (t1) # syscall routine
99+
100+ beqz t2, illegal_syscall
99101
100102 jalr t2 # Do The Real Thing (TM)
101103
@@ -116,7 +118,7 @@ o32_syscall_exit: · 14 unmodified lines
116118
117119 syscall_trace_entry:
118120 SAVE_STATIC
119− move s0, t2
121+ move s0, v0
120122 move a0, sp
121123
122124 /*
@@ -129,27 +131,18 @@ syscall_trace_entry: · 6 unmodified lines
129131
130132 1: jal syscall_trace_enter
131133
132− bltz v0, 2f # seccomp failed? Skip syscall
134+ bltz v0, 1f # seccomp failed? Skip syscall
135+
136+ move v0, s0 # restore syscall
133137
134− move t0, s0
135138 RESTORE_STATIC
136139 lw a0, PT_R4(sp) # Restore argument registers
137140 lw a1, PT_R5(sp)
138141 lw a2, PT_R6(sp)
139142 lw a3, PT_R7(sp)
140− jalr t0
141−
142− li t0, -EMAXERRNO - 1 # error?
143− sltu t0, t0, v0
144− sw t0, PT_R7(sp) # set error flag
145− beqz t0, 1f
146−
147− lw t1, PT_R2(sp) # syscall number
148− negu v0 # error
149− sw t1, PT_R0(sp) # save it for syscall restarting
150−1: sw v0, PT_R2(sp) # result
143+ j syscall_common
151144
152−2: j syscall_exit
145+1: j syscall_exit
153146
154147 /* ------------------------------------------------------------------------ */
155148
@@ -599,3 +592,5 @@ EXPORT(sys_call_table) · 443 unmodified lines
599592 PTR sys_memfd_create
600593 PTR sys_bpf /* 4355 */
601594 PTR sys_execveat
595+ PTR sys_userfaultfd
596+ PTR sys_membarrier
arch/mips/kernel/scall64-64.S+18−22
@@ -39,18 +39,11 @@ NESTED(handle_sys64, PT_SIZE, sp) · 38 unmodified lines
3939 .set at
4040 #endif
4141
42− dsubu t0, v0, __NR_64_Linux # check syscall number
43− sltiu t0, t0, __NR_64_Linux_syscalls + 1
4442 #if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32)
4543 ld t1, PT_EPC(sp) # skip syscall on return
4644 daddiu t1, 4 # skip to next instruction
4745 sd t1, PT_EPC(sp)
4846 #endif
49− beqz t0, illegal_syscall
50−
51− dsll t0, v0, 3 # offset into table
52− ld t2, (sys_call_table - (__NR_64_Linux * 8))(t0)
53− # syscall routine
5447
5548 sd a3, PT_R26(sp) # save a3 for syscall restarting
5649
@@ -59,6 +52,17 @@ NESTED(handle_sys64, PT_SIZE, sp) · 2 unmodified lines
5952 and t0, t1, t0
6053 bnez t0, syscall_trace_entry
6154
55+syscall_common:
56+ dsubu t2, v0, __NR_64_Linux
57+ sltiu t0, t2, __NR_64_Linux_syscalls + 1
58+ beqz t0, illegal_syscall
59+
60+ dsll t0, t2, 3 # offset into table
61+ dla t2, sys_call_table
62+ daddu t0, t2, t0
63+ ld t2, (t0) # syscall routine
64+ beqz t2, illegal_syscall
65+
6266 jalr t2 # Do The Real Thing (TM)
6367
6468 li t0, -EMAXERRNO - 1 # error?
@@ -78,14 +82,14 @@ n64_syscall_exit: · 13 unmodified lines
7882
7983 syscall_trace_entry:
8084 SAVE_STATIC
81− move s0, t2
85+ move s0, v0
8286 move a0, sp
8387 move a1, v0
8488 jal syscall_trace_enter
8589
86− bltz v0, 2f # seccomp failed? Skip syscall
90+ bltz v0, 1f # seccomp failed? Skip syscall
8791
88− move t0, s0
92+ move v0, s0
8993 RESTORE_STATIC
9094 ld a0, PT_R4(sp) # Restore argument registers
9195 ld a1, PT_R5(sp)
@@ -93,19 +97,9 @@ syscall_trace_entry: · 1 unmodified line
9397 ld a3, PT_R7(sp)
9498 ld a4, PT_R8(sp)
9599 ld a5, PT_R9(sp)
96− jalr t0
97−
98− li t0, -EMAXERRNO - 1 # error?
99− sltu t0, t0, v0
100− sd t0, PT_R7(sp) # set error flag
101− beqz t0, 1f
102−
103− ld t1, PT_R2(sp) # syscall number
104− dnegu v0 # error
105− sd t1, PT_R0(sp) # save it for syscall restarting
106−1: sd v0, PT_R2(sp) # result
100+ j syscall_common
107101
108−2: j syscall_exit
102+1: j syscall_exit
109103
110104 illegal_syscall:
111105 /* This also isn't a 64-bit syscall, throw an error. */
@@ -436,4 +430,6 @@ EXPORT(sys_call_table) · 324 unmodified lines
436430 PTR sys_memfd_create
437431 PTR sys_bpf /* 5315 */
438432 PTR sys_execveat
433+ PTR sys_userfaultfd
434+ PTR sys_membarrier
439435 .size sys_call_table,.-sys_call_table
arch/mips/kernel/scall64-n32.S+7−14
@@ -52,6 +52,7 @@ NESTED(handle_sysn32, PT_SIZE, sp) · 51 unmodified lines
5252 and t0, t1, t0
5353 bnez t0, n32_syscall_trace_entry
5454
55+syscall_common:
5556 jalr t2 # Do The Real Thing (TM)
5657
5758 li t0, -EMAXERRNO - 1 # error?
@@ -75,9 +76,9 @@ n32_syscall_trace_entry: · 17 unmodified lines
7576 move a1, v0
7677 jal syscall_trace_enter
7778
78− bltz v0, 2f # seccomp failed? Skip syscall
79+ bltz v0, 1f # seccomp failed? Skip syscall
7980
80− move t0, s0
81+ move t2, s0
8182 RESTORE_STATIC
8283 ld a0, PT_R4(sp) # Restore argument registers
8384 ld a1, PT_R5(sp)
@@ -85,19 +86,9 @@ n32_syscall_trace_entry: · 1 unmodified line
8586 ld a3, PT_R7(sp)
8687 ld a4, PT_R8(sp)
8788 ld a5, PT_R9(sp)
88− jalr t0
89+ j syscall_common
8990
90− li t0, -EMAXERRNO - 1 # error?
91− sltu t0, t0, v0
92− sd t0, PT_R7(sp) # set error flag
93− beqz t0, 1f
94−
95− ld t1, PT_R2(sp) # syscall number
96− dnegu v0 # error
97− sd t1, PT_R0(sp) # save it for syscall restarting
98−1: sd v0, PT_R2(sp) # result
99−
100−2: j syscall_exit
91+1: j syscall_exit
10192
10293 not_n32_scall:
10394 /* This is not an n32 compatibility syscall, pass it on to
@@ -429,4 +420,6 @@ EXPORT(sysn32_call_table) · 325 unmodified lines
429420 PTR sys_memfd_create
430421 PTR sys_bpf
431422 PTR compat_sys_execveat /* 6320 */
423+ PTR sys_userfaultfd
424+ PTR sys_membarrier
432425 .size sysn32_call_table,.-sysn32_call_table
arch/mips/kernel/scall64-o32.S+7−14
@@ -87,6 +87,7 @@ loads_done: · 86 unmodified lines
8787 and t0, t1, t0
8888 bnez t0, trace_a_syscall
8989
90+syscall_common:
9091 jalr t2 # Do The Real Thing (TM)
9192
9293 li t0, -EMAXERRNO - 1 # error?
@@ -130,9 +131,9 @@ trace_a_syscall: · 37 unmodified lines
130131
131132 1: jal syscall_trace_enter
132133
133− bltz v0, 2f # seccomp failed? Skip syscall
134+ bltz v0, 1f # seccomp failed? Skip syscall
134135
135− move t0, s0
136+ move t2, s0
136137 RESTORE_STATIC
137138 ld a0, PT_R4(sp) # Restore argument registers
138139 ld a1, PT_R5(sp)
@@ -142,19 +143,9 @@ trace_a_syscall: · 3 unmodified lines
142143 ld a5, PT_R9(sp)
143144 ld a6, PT_R10(sp)
144145 ld a7, PT_R11(sp) # For indirect syscalls
145− jalr t0
146+ j syscall_common
146147
147− li t0, -EMAXERRNO - 1 # error?
148− sltu t0, t0, v0
149− sd t0, PT_R7(sp) # set error flag
150− beqz t0, 1f
151−
152− ld t1, PT_R2(sp) # syscall number
153− dnegu v0 # error
154− sd t1, PT_R0(sp) # save it for syscall restarting
155−1: sd v0, PT_R2(sp) # result
156−
157−2: j syscall_exit
148+1: j syscall_exit
158149
159150 /* ------------------------------------------------------------------------ */
160151
@@ -584,4 +575,6 @@ EXPORT(sys32_call_table) · 423 unmodified lines
584575 PTR sys_memfd_create
585576 PTR sys_bpf /* 4355 */
586577 PTR compat_sys_execveat
578+ PTR sys_userfaultfd
579+ PTR sys_membarrier
587580 .size sys32_call_table,.-sys32_call_table
arch/mips/mm/dma-default.c+1−1
@@ -100,7 +100,7 @@ static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp) · 99 unmodified lines
100100 else
101101 #endif
102102 #if defined(CONFIG_ZONE_DMA) && !defined(CONFIG_ZONE_DMA32)
103− if (dev->coherent_dma_mask < DMA_BIT_MASK(64))
103+ if (dev->coherent_dma_mask < DMA_BIT_MASK(sizeof(phys_addr_t) * 8))
104104 dma_flag = __GFP_DMA;
105105 else
106106 #endif
arch/mips/net/bpf_jit_asm.S+7−6
@@ -57,12 +57,13 @@ · 56 unmodified lines
5757
5858 LEAF(sk_load_word)
5959 is_offset_negative(word)
60− .globl sk_load_word_positive
61−sk_load_word_positive:
60+FEXPORT(sk_load_word_positive)
6261 is_offset_in_header(4, word)
6362 /* Offset within header boundaries */
6463 PTR_ADDU t1, $r_skb_data, offset
64+ .set reorder
6565 lw $r_A, 0(t1)
66+ .set noreorder
6667 #ifdef CONFIG_CPU_LITTLE_ENDIAN
6768 # if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
6869 wsbh t0, $r_A
@@ -85,12 +86,13 @@ sk_load_word_positive: · 16 unmodified lines
8586
8687 LEAF(sk_load_half)
8788 is_offset_negative(half)
88− .globl sk_load_half_positive
89−sk_load_half_positive:
89+FEXPORT(sk_load_half_positive)
9090 is_offset_in_header(2, half)
9191 /* Offset within header boundaries */
9292 PTR_ADDU t1, $r_skb_data, offset
93+ .set reorder
9394 lh $r_A, 0(t1)
95+ .set noreorder
9496 #ifdef CONFIG_CPU_LITTLE_ENDIAN
9597 # if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
9698 wsbh t0, $r_A
@@ -109,8 +111,7 @@ sk_load_half_positive: · 12 unmodified lines
109111
110112 LEAF(sk_load_byte)
111113 is_offset_negative(byte)
112− .globl sk_load_byte_positive
113−sk_load_byte_positive:
114+FEXPORT(sk_load_byte_positive)
114115 is_offset_in_header(1, byte)
115116 /* Offset within header boundaries */
116117 PTR_ADDU t1, $r_skb_data, offset