aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-09-25 07:11:52 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-09-25 07:11:52 -0400
commit346e2e4a8b47089f4319f114ec9ac3a95b5f0ac8 (patch)
tree0e824d68b72969127abcad85e82b468ed4e23237 /arch/sparc
parent5caf6ae5ce880ec15448b310e47a9515ebb7e808 (diff)
parent4f0eb5d7efe375859b15c97f453113a242bf057b (diff)
Merge tag 'phy-for_3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy into usb-next
Kishon writes: Adds 3 new PHY drivers stih407, stih41x and rcar gen2 PHY. It also includes miscellaneous cleanup of other PHY drivers. Conflicts: MAINTAINERS
Diffstat (limited to 'arch/sparc')
-rw-r--r--arch/sparc/net/bpf_jit_comp.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/arch/sparc/net/bpf_jit_comp.c b/arch/sparc/net/bpf_jit_comp.c
index 1f76c22a6a75..51ae87b483e0 100644
--- a/arch/sparc/net/bpf_jit_comp.c
+++ b/arch/sparc/net/bpf_jit_comp.c
@@ -234,12 +234,18 @@ do { BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(u8)); \
234 __emit_load8(BASE, STRUCT, FIELD, DEST); \ 234 __emit_load8(BASE, STRUCT, FIELD, DEST); \
235} while (0) 235} while (0)
236 236
237#define emit_ldmem(OFF, DEST) \ 237#ifdef CONFIG_SPARC64
238do { *prog++ = LD32I | RS1(FP) | S13(-(OFF)) | RD(DEST); \ 238#define BIAS (STACK_BIAS - 4)
239#else
240#define BIAS (-4)
241#endif
242
243#define emit_ldmem(OFF, DEST) \
244do { *prog++ = LD32I | RS1(SP) | S13(BIAS - (OFF)) | RD(DEST); \
239} while (0) 245} while (0)
240 246
241#define emit_stmem(OFF, SRC) \ 247#define emit_stmem(OFF, SRC) \
242do { *prog++ = LD32I | RS1(FP) | S13(-(OFF)) | RD(SRC); \ 248do { *prog++ = ST32I | RS1(SP) | S13(BIAS - (OFF)) | RD(SRC); \
243} while (0) 249} while (0)
244 250
245#ifdef CONFIG_SMP 251#ifdef CONFIG_SMP
@@ -615,10 +621,11 @@ void bpf_jit_compile(struct bpf_prog *fp)
615 case BPF_ANC | SKF_AD_VLAN_TAG: 621 case BPF_ANC | SKF_AD_VLAN_TAG:
616 case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT: 622 case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:
617 emit_skb_load16(vlan_tci, r_A); 623 emit_skb_load16(vlan_tci, r_A);
618 if (code == (BPF_ANC | SKF_AD_VLAN_TAG)) { 624 if (code != (BPF_ANC | SKF_AD_VLAN_TAG)) {
619 emit_andi(r_A, VLAN_VID_MASK, r_A); 625 emit_alu_K(SRL, 12);
626 emit_andi(r_A, 1, r_A);
620 } else { 627 } else {
621 emit_loadimm(VLAN_TAG_PRESENT, r_TMP); 628 emit_loadimm(~VLAN_TAG_PRESENT, r_TMP);
622 emit_and(r_A, r_TMP, r_A); 629 emit_and(r_A, r_TMP, r_A);
623 } 630 }
624 break; 631 break;
@@ -630,15 +637,19 @@ void bpf_jit_compile(struct bpf_prog *fp)
630 emit_loadimm(K, r_X); 637 emit_loadimm(K, r_X);
631 break; 638 break;
632 case BPF_LD | BPF_MEM: 639 case BPF_LD | BPF_MEM:
640 seen |= SEEN_MEM;
633 emit_ldmem(K * 4, r_A); 641 emit_ldmem(K * 4, r_A);
634 break; 642 break;
635 case BPF_LDX | BPF_MEM: 643 case BPF_LDX | BPF_MEM:
644 seen |= SEEN_MEM | SEEN_XREG;
636 emit_ldmem(K * 4, r_X); 645 emit_ldmem(K * 4, r_X);
637 break; 646 break;
638 case BPF_ST: 647 case BPF_ST:
648 seen |= SEEN_MEM;
639 emit_stmem(K * 4, r_A); 649 emit_stmem(K * 4, r_A);
640 break; 650 break;
641 case BPF_STX: 651 case BPF_STX:
652 seen |= SEEN_MEM | SEEN_XREG;
642 emit_stmem(K * 4, r_X); 653 emit_stmem(K * 4, r_X);
643 break; 654 break;
644 655