]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/mips/net/bpf_jit_asm.S
Merge branches 'for-4.13/ish' and 'for-4.13/ite' into for-linus
[karo-tx-linux.git] / arch / mips / net / bpf_jit_asm.S
index 5d2e0c8d29c0bd0003bae3f7337edbcab5a403c4..88a2075305d1c1d71d09c7e3860367609b81ca04 100644 (file)
@@ -90,18 +90,14 @@ FEXPORT(sk_load_half_positive)
        is_offset_in_header(2, half)
        /* Offset within header boundaries */
        PTR_ADDU t1, $r_skb_data, offset
-       .set    reorder
-       lh      $r_A, 0(t1)
-       .set    noreorder
+       lhu     $r_A, 0(t1)
 #ifdef CONFIG_CPU_LITTLE_ENDIAN
 # if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
-       wsbh    t0, $r_A
-       seh     $r_A, t0
+       wsbh    $r_A, $r_A
 # else
-       sll     t0, $r_A, 24
-       andi    t1, $r_A, 0xff00
-       sra     t0, t0, 16
-       srl     t1, t1, 8
+       sll     t0, $r_A, 8
+       srl     t1, $r_A, 8
+       andi    t0, t0, 0xff00
        or      $r_A, t0, t1
 # endif
 #endif
@@ -115,7 +111,7 @@ FEXPORT(sk_load_byte_positive)
        is_offset_in_header(1, byte)
        /* Offset within header boundaries */
        PTR_ADDU t1, $r_skb_data, offset
-       lb      $r_A, 0(t1)
+       lbu     $r_A, 0(t1)
        jr      $r_ra
         move   $r_ret, zero
        END(sk_load_byte)
@@ -139,6 +135,11 @@ FEXPORT(sk_load_byte_positive)
  * (void *to) is returned in r_s0
  *
  */
+#ifdef CONFIG_CPU_LITTLE_ENDIAN
+#define DS_OFFSET(SIZE) (4 * SZREG)
+#else
+#define DS_OFFSET(SIZE) ((4 * SZREG) + (4 - SIZE))
+#endif
 #define bpf_slow_path_common(SIZE)                             \
        /* Quick check. Are we within reasonable boundaries? */ \
        LONG_ADDIU      $r_s1, $r_skb_len, -SIZE;               \
@@ -150,7 +151,7 @@ FEXPORT(sk_load_byte_positive)
        PTR_LA          t0, skb_copy_bits;                      \
        PTR_S           $r_ra, (5 * SZREG)($r_sp);              \
        /* Assign low slot to a2 */                             \
-       move            a2, $r_sp;                              \
+       PTR_ADDIU       a2, $r_sp, DS_OFFSET(SIZE);             \
        jalr            t0;                                     \
        /* Reset our destination slot (DS but it's ok) */       \
         INT_S          zero, (4 * SZREG)($r_sp);               \