Loading Documentation/networking/mpls-sysctl.txt +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ ip_ttl_propagate - BOOL 0 - disabled / RFC 3443 [Short] Pipe Model 1 - enabled / RFC 3443 Uniform Model (default) default_ttl - BOOL default_ttl - INTEGER Default TTL value to use for MPLS packets where it cannot be propagated from an IP header, either because one isn't present or ip_ttl_propagate has been disabled. Loading MAINTAINERS +1 −0 Original line number Diff line number Diff line Loading @@ -17312,6 +17312,7 @@ N: xdp XDP SOCKETS (AF_XDP) M: Björn Töpel <bjorn.topel@intel.com> M: Magnus Karlsson <magnus.karlsson@intel.com> R: Jonathan Lemon <jonathan.lemon@gmail.com> L: netdev@vger.kernel.org L: bpf@vger.kernel.org S: Maintained Loading arch/x86/net/bpf_jit_comp32.c +29 −255 Original line number Diff line number Diff line Loading @@ -732,9 +732,6 @@ static inline void emit_ia32_lsh_r64(const u8 dst[], const u8 src[], { u8 *prog = *pprog; int cnt = 0; static int jmp_label1 = -1; static int jmp_label2 = -1; static int jmp_label3 = -1; u8 dreg_lo = dstk ? IA32_EAX : dst_lo; u8 dreg_hi = dstk ? IA32_EDX : dst_hi; Loading @@ -753,79 +750,23 @@ static inline void emit_ia32_lsh_r64(const u8 dst[], const u8 src[], /* mov ecx,src_lo */ EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* Jumps when >= 32 */ if (is_imm8(jmp_label(jmp_label1, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label1, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label1, 6)); /* < 32 */ /* shl dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xE0, dreg_hi)); /* mov ebx,dreg_lo */ EMIT2(0x8B, add_2reg(0xC0, dreg_lo, IA32_EBX)); /* shld dreg_hi,dreg_lo,cl */ EMIT3(0x0F, 0xA5, add_2reg(0xC0, dreg_hi, dreg_lo)); /* shl dreg_lo,cl */ EMIT2(0xD3, add_1reg(0xE0, dreg_lo)); /* IA32_ECX = -IA32_ECX + 32 */ /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shr ebx,cl */ EMIT2(0xD3, add_1reg(0xE8, IA32_EBX)); /* or dreg_hi,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 32 */ if (jmp_label1 == -1) jmp_label1 = cnt; /* if ecx >= 32, mov dreg_lo into dreg_hi and clear dreg_lo */ /* cmp ecx,64 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 64); /* Jumps when >= 64 */ if (is_imm8(jmp_label(jmp_label2, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label2, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label2, 6)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* skip the next two instructions (4 bytes) when < 32 */ EMIT2(IA32_JB, 4); /* >= 32 && < 64 */ /* sub ecx,32 */ EMIT3(0x83, add_1reg(0xE8, IA32_ECX), 32); /* shl dreg_lo,cl */ EMIT2(0xD3, add_1reg(0xE0, dreg_lo)); /* mov dreg_hi,dreg_lo */ EMIT2(0x89, add_2reg(0xC0, dreg_hi, dreg_lo)); /* xor dreg_lo,dreg_lo */ EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo)); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 64 */ if (jmp_label2 == -1) jmp_label2 = cnt; /* xor dreg_lo,dreg_lo */ EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo)); /* xor dreg_hi,dreg_hi */ EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi)); if (jmp_label3 == -1) jmp_label3 = cnt; if (dstk) { /* mov dword ptr [ebp+off],dreg_lo */ EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo), Loading @@ -844,9 +785,6 @@ static inline void emit_ia32_arsh_r64(const u8 dst[], const u8 src[], { u8 *prog = *pprog; int cnt = 0; static int jmp_label1 = -1; static int jmp_label2 = -1; static int jmp_label3 = -1; u8 dreg_lo = dstk ? IA32_EAX : dst_lo; u8 dreg_hi = dstk ? IA32_EDX : dst_hi; Loading @@ -865,78 +803,22 @@ static inline void emit_ia32_arsh_r64(const u8 dst[], const u8 src[], /* mov ecx,src_lo */ EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* Jumps when >= 32 */ if (is_imm8(jmp_label(jmp_label1, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label1, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label1, 6)); /* < 32 */ /* lshr dreg_lo,cl */ EMIT2(0xD3, add_1reg(0xE8, dreg_lo)); /* mov ebx,dreg_hi */ EMIT2(0x8B, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* ashr dreg_hi,cl */ /* shrd dreg_lo,dreg_hi,cl */ EMIT3(0x0F, 0xAD, add_2reg(0xC0, dreg_lo, dreg_hi)); /* sar dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xF8, dreg_hi)); /* IA32_ECX = -IA32_ECX + 32 */ /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shl ebx,cl */ EMIT2(0xD3, add_1reg(0xE0, IA32_EBX)); /* or dreg_lo,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_lo, IA32_EBX)); /* if ecx >= 32, mov dreg_hi to dreg_lo and set/clear dreg_hi depending on sign */ /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 32 */ if (jmp_label1 == -1) jmp_label1 = cnt; /* cmp ecx,64 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 64); /* Jumps when >= 64 */ if (is_imm8(jmp_label(jmp_label2, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label2, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label2, 6)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* skip the next two instructions (5 bytes) when < 32 */ EMIT2(IA32_JB, 5); /* >= 32 && < 64 */ /* sub ecx,32 */ EMIT3(0x83, add_1reg(0xE8, IA32_ECX), 32); /* ashr dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xF8, dreg_hi)); /* mov dreg_lo,dreg_hi */ EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi)); /* ashr dreg_hi,imm8 */ EMIT3(0xC1, add_1reg(0xF8, dreg_hi), 31); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 64 */ if (jmp_label2 == -1) jmp_label2 = cnt; /* ashr dreg_hi,imm8 */ /* sar dreg_hi,31 */ EMIT3(0xC1, add_1reg(0xF8, dreg_hi), 31); /* mov dreg_lo,dreg_hi */ EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi)); if (jmp_label3 == -1) jmp_label3 = cnt; if (dstk) { /* mov dword ptr [ebp+off],dreg_lo */ Loading @@ -956,9 +838,6 @@ static inline void emit_ia32_rsh_r64(const u8 dst[], const u8 src[], bool dstk, { u8 *prog = *pprog; int cnt = 0; static int jmp_label1 = -1; static int jmp_label2 = -1; static int jmp_label3 = -1; u8 dreg_lo = dstk ? IA32_EAX : dst_lo; u8 dreg_hi = dstk ? IA32_EDX : dst_hi; Loading @@ -977,77 +856,23 @@ static inline void emit_ia32_rsh_r64(const u8 dst[], const u8 src[], bool dstk, /* mov ecx,src_lo */ EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* Jumps when >= 32 */ if (is_imm8(jmp_label(jmp_label1, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label1, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label1, 6)); /* < 32 */ /* lshr dreg_lo,cl */ EMIT2(0xD3, add_1reg(0xE8, dreg_lo)); /* mov ebx,dreg_hi */ EMIT2(0x8B, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* shrd dreg_lo,dreg_hi,cl */ EMIT3(0x0F, 0xAD, add_2reg(0xC0, dreg_lo, dreg_hi)); /* shr dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xE8, dreg_hi)); /* IA32_ECX = -IA32_ECX + 32 */ /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* if ecx >= 32, mov dreg_hi to dreg_lo and clear dreg_hi */ /* shl ebx,cl */ EMIT2(0xD3, add_1reg(0xE0, IA32_EBX)); /* or dreg_lo,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_lo, IA32_EBX)); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 32 */ if (jmp_label1 == -1) jmp_label1 = cnt; /* cmp ecx,64 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 64); /* Jumps when >= 64 */ if (is_imm8(jmp_label(jmp_label2, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label2, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label2, 6)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* skip the next two instructions (4 bytes) when < 32 */ EMIT2(IA32_JB, 4); /* >= 32 && < 64 */ /* sub ecx,32 */ EMIT3(0x83, add_1reg(0xE8, IA32_ECX), 32); /* shr dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xE8, dreg_hi)); /* mov dreg_lo,dreg_hi */ EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi)); /* xor dreg_hi,dreg_hi */ EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi)); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 64 */ if (jmp_label2 == -1) jmp_label2 = cnt; /* xor dreg_lo,dreg_lo */ EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo)); /* xor dreg_hi,dreg_hi */ EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi)); if (jmp_label3 == -1) jmp_label3 = cnt; if (dstk) { /* mov dword ptr [ebp+off],dreg_lo */ EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo), Loading Loading @@ -1077,27 +902,10 @@ static inline void emit_ia32_lsh_i64(const u8 dst[], const u32 val, } /* Do LSH operation */ if (val < 32) { /* shl dreg_hi,imm8 */ EMIT3(0xC1, add_1reg(0xE0, dreg_hi), val); /* mov ebx,dreg_lo */ EMIT2(0x8B, add_2reg(0xC0, dreg_lo, IA32_EBX)); /* shld dreg_hi,dreg_lo,imm8 */ EMIT4(0x0F, 0xA4, add_2reg(0xC0, dreg_hi, dreg_lo), val); /* shl dreg_lo,imm8 */ EMIT3(0xC1, add_1reg(0xE0, dreg_lo), val); /* IA32_ECX = 32 - val */ /* mov ecx,val */ EMIT2(0xB1, val); /* movzx ecx,ecx */ EMIT3(0x0F, 0xB6, add_2reg(0xC0, IA32_ECX, IA32_ECX)); /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shr ebx,cl */ EMIT2(0xD3, add_1reg(0xE8, IA32_EBX)); /* or dreg_hi,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_hi, IA32_EBX)); } else if (val >= 32 && val < 64) { u32 value = val - 32; Loading Loading @@ -1143,27 +951,10 @@ static inline void emit_ia32_rsh_i64(const u8 dst[], const u32 val, /* Do RSH operation */ if (val < 32) { /* shr dreg_lo,imm8 */ EMIT3(0xC1, add_1reg(0xE8, dreg_lo), val); /* mov ebx,dreg_hi */ EMIT2(0x8B, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* shrd dreg_lo,dreg_hi,imm8 */ EMIT4(0x0F, 0xAC, add_2reg(0xC0, dreg_lo, dreg_hi), val); /* shr dreg_hi,imm8 */ EMIT3(0xC1, add_1reg(0xE8, dreg_hi), val); /* IA32_ECX = 32 - val */ /* mov ecx,val */ EMIT2(0xB1, val); /* movzx ecx,ecx */ EMIT3(0x0F, 0xB6, add_2reg(0xC0, IA32_ECX, IA32_ECX)); /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shl ebx,cl */ EMIT2(0xD3, add_1reg(0xE0, IA32_EBX)); /* or dreg_lo,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_lo, IA32_EBX)); } else if (val >= 32 && val < 64) { u32 value = val - 32; Loading Loading @@ -1208,27 +999,10 @@ static inline void emit_ia32_arsh_i64(const u8 dst[], const u32 val, } /* Do RSH operation */ if (val < 32) { /* shr dreg_lo,imm8 */ EMIT3(0xC1, add_1reg(0xE8, dreg_lo), val); /* mov ebx,dreg_hi */ EMIT2(0x8B, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* shrd dreg_lo,dreg_hi,imm8 */ EMIT4(0x0F, 0xAC, add_2reg(0xC0, dreg_lo, dreg_hi), val); /* ashr dreg_hi,imm8 */ EMIT3(0xC1, add_1reg(0xF8, dreg_hi), val); /* IA32_ECX = 32 - val */ /* mov ecx,val */ EMIT2(0xB1, val); /* movzx ecx,ecx */ EMIT3(0x0F, 0xB6, add_2reg(0xC0, IA32_ECX, IA32_ECX)); /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shl ebx,cl */ EMIT2(0xD3, add_1reg(0xE0, IA32_EBX)); /* or dreg_lo,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_lo, IA32_EBX)); } else if (val >= 32 && val < 64) { u32 value = val - 32; Loading drivers/net/bonding/bond_main.c +23 −14 Original line number Diff line number Diff line Loading @@ -3859,8 +3859,8 @@ static netdev_tx_t bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev) { struct bonding *bond = netdev_priv(bond_dev); struct iphdr *iph = ip_hdr(skb); struct slave *slave; int slave_cnt; u32 slave_id; /* Start with the curr_active_slave that joined the bond as the Loading @@ -3869,23 +3869,32 @@ static netdev_tx_t bond_xmit_roundrobin(struct sk_buff *skb, * send the join/membership reports. The curr_active_slave found * will send all of this type of traffic. */ if (iph->protocol == IPPROTO_IGMP && skb->protocol == htons(ETH_P_IP)) { if (skb->protocol == htons(ETH_P_IP)) { int noff = skb_network_offset(skb); struct iphdr *iph; if (unlikely(!pskb_may_pull(skb, noff + sizeof(*iph)))) goto non_igmp; iph = ip_hdr(skb); if (iph->protocol == IPPROTO_IGMP) { slave = rcu_dereference(bond->curr_active_slave); if (slave) bond_dev_queue_xmit(bond, skb, slave->dev); else bond_xmit_slave_id(bond, skb, 0); } else { int slave_cnt = READ_ONCE(bond->slave_cnt); return NETDEV_TX_OK; } } non_igmp: slave_cnt = READ_ONCE(bond->slave_cnt); if (likely(slave_cnt)) { slave_id = bond_rr_gen_slave_id(bond); bond_xmit_slave_id(bond, skb, slave_id % slave_cnt); } else { bond_tx_drop(bond_dev, skb); } } return NETDEV_TX_OK; } Loading drivers/net/dsa/b53/b53_common.c +2 −2 Original line number Diff line number Diff line Loading @@ -955,13 +955,13 @@ static int b53_setup(struct dsa_switch *ds) if (ret) dev_err(ds->dev, "failed to apply configuration\n"); /* Configure IMP/CPU port, disable unused ports. Enabled /* Configure IMP/CPU port, disable all other ports. Enabled * ports will be configured with .port_enable */ for (port = 0; port < dev->num_ports; port++) { if (dsa_is_cpu_port(ds, port)) b53_enable_cpu_port(dev, port); else if (dsa_is_unused_port(ds, port)) else b53_disable_port(ds, port); } Loading Loading
Documentation/networking/mpls-sysctl.txt +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ ip_ttl_propagate - BOOL 0 - disabled / RFC 3443 [Short] Pipe Model 1 - enabled / RFC 3443 Uniform Model (default) default_ttl - BOOL default_ttl - INTEGER Default TTL value to use for MPLS packets where it cannot be propagated from an IP header, either because one isn't present or ip_ttl_propagate has been disabled. Loading
MAINTAINERS +1 −0 Original line number Diff line number Diff line Loading @@ -17312,6 +17312,7 @@ N: xdp XDP SOCKETS (AF_XDP) M: Björn Töpel <bjorn.topel@intel.com> M: Magnus Karlsson <magnus.karlsson@intel.com> R: Jonathan Lemon <jonathan.lemon@gmail.com> L: netdev@vger.kernel.org L: bpf@vger.kernel.org S: Maintained Loading
arch/x86/net/bpf_jit_comp32.c +29 −255 Original line number Diff line number Diff line Loading @@ -732,9 +732,6 @@ static inline void emit_ia32_lsh_r64(const u8 dst[], const u8 src[], { u8 *prog = *pprog; int cnt = 0; static int jmp_label1 = -1; static int jmp_label2 = -1; static int jmp_label3 = -1; u8 dreg_lo = dstk ? IA32_EAX : dst_lo; u8 dreg_hi = dstk ? IA32_EDX : dst_hi; Loading @@ -753,79 +750,23 @@ static inline void emit_ia32_lsh_r64(const u8 dst[], const u8 src[], /* mov ecx,src_lo */ EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* Jumps when >= 32 */ if (is_imm8(jmp_label(jmp_label1, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label1, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label1, 6)); /* < 32 */ /* shl dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xE0, dreg_hi)); /* mov ebx,dreg_lo */ EMIT2(0x8B, add_2reg(0xC0, dreg_lo, IA32_EBX)); /* shld dreg_hi,dreg_lo,cl */ EMIT3(0x0F, 0xA5, add_2reg(0xC0, dreg_hi, dreg_lo)); /* shl dreg_lo,cl */ EMIT2(0xD3, add_1reg(0xE0, dreg_lo)); /* IA32_ECX = -IA32_ECX + 32 */ /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shr ebx,cl */ EMIT2(0xD3, add_1reg(0xE8, IA32_EBX)); /* or dreg_hi,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 32 */ if (jmp_label1 == -1) jmp_label1 = cnt; /* if ecx >= 32, mov dreg_lo into dreg_hi and clear dreg_lo */ /* cmp ecx,64 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 64); /* Jumps when >= 64 */ if (is_imm8(jmp_label(jmp_label2, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label2, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label2, 6)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* skip the next two instructions (4 bytes) when < 32 */ EMIT2(IA32_JB, 4); /* >= 32 && < 64 */ /* sub ecx,32 */ EMIT3(0x83, add_1reg(0xE8, IA32_ECX), 32); /* shl dreg_lo,cl */ EMIT2(0xD3, add_1reg(0xE0, dreg_lo)); /* mov dreg_hi,dreg_lo */ EMIT2(0x89, add_2reg(0xC0, dreg_hi, dreg_lo)); /* xor dreg_lo,dreg_lo */ EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo)); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 64 */ if (jmp_label2 == -1) jmp_label2 = cnt; /* xor dreg_lo,dreg_lo */ EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo)); /* xor dreg_hi,dreg_hi */ EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi)); if (jmp_label3 == -1) jmp_label3 = cnt; if (dstk) { /* mov dword ptr [ebp+off],dreg_lo */ EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo), Loading @@ -844,9 +785,6 @@ static inline void emit_ia32_arsh_r64(const u8 dst[], const u8 src[], { u8 *prog = *pprog; int cnt = 0; static int jmp_label1 = -1; static int jmp_label2 = -1; static int jmp_label3 = -1; u8 dreg_lo = dstk ? IA32_EAX : dst_lo; u8 dreg_hi = dstk ? IA32_EDX : dst_hi; Loading @@ -865,78 +803,22 @@ static inline void emit_ia32_arsh_r64(const u8 dst[], const u8 src[], /* mov ecx,src_lo */ EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* Jumps when >= 32 */ if (is_imm8(jmp_label(jmp_label1, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label1, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label1, 6)); /* < 32 */ /* lshr dreg_lo,cl */ EMIT2(0xD3, add_1reg(0xE8, dreg_lo)); /* mov ebx,dreg_hi */ EMIT2(0x8B, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* ashr dreg_hi,cl */ /* shrd dreg_lo,dreg_hi,cl */ EMIT3(0x0F, 0xAD, add_2reg(0xC0, dreg_lo, dreg_hi)); /* sar dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xF8, dreg_hi)); /* IA32_ECX = -IA32_ECX + 32 */ /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shl ebx,cl */ EMIT2(0xD3, add_1reg(0xE0, IA32_EBX)); /* or dreg_lo,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_lo, IA32_EBX)); /* if ecx >= 32, mov dreg_hi to dreg_lo and set/clear dreg_hi depending on sign */ /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 32 */ if (jmp_label1 == -1) jmp_label1 = cnt; /* cmp ecx,64 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 64); /* Jumps when >= 64 */ if (is_imm8(jmp_label(jmp_label2, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label2, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label2, 6)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* skip the next two instructions (5 bytes) when < 32 */ EMIT2(IA32_JB, 5); /* >= 32 && < 64 */ /* sub ecx,32 */ EMIT3(0x83, add_1reg(0xE8, IA32_ECX), 32); /* ashr dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xF8, dreg_hi)); /* mov dreg_lo,dreg_hi */ EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi)); /* ashr dreg_hi,imm8 */ EMIT3(0xC1, add_1reg(0xF8, dreg_hi), 31); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 64 */ if (jmp_label2 == -1) jmp_label2 = cnt; /* ashr dreg_hi,imm8 */ /* sar dreg_hi,31 */ EMIT3(0xC1, add_1reg(0xF8, dreg_hi), 31); /* mov dreg_lo,dreg_hi */ EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi)); if (jmp_label3 == -1) jmp_label3 = cnt; if (dstk) { /* mov dword ptr [ebp+off],dreg_lo */ Loading @@ -956,9 +838,6 @@ static inline void emit_ia32_rsh_r64(const u8 dst[], const u8 src[], bool dstk, { u8 *prog = *pprog; int cnt = 0; static int jmp_label1 = -1; static int jmp_label2 = -1; static int jmp_label3 = -1; u8 dreg_lo = dstk ? IA32_EAX : dst_lo; u8 dreg_hi = dstk ? IA32_EDX : dst_hi; Loading @@ -977,77 +856,23 @@ static inline void emit_ia32_rsh_r64(const u8 dst[], const u8 src[], bool dstk, /* mov ecx,src_lo */ EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* Jumps when >= 32 */ if (is_imm8(jmp_label(jmp_label1, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label1, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label1, 6)); /* < 32 */ /* lshr dreg_lo,cl */ EMIT2(0xD3, add_1reg(0xE8, dreg_lo)); /* mov ebx,dreg_hi */ EMIT2(0x8B, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* shrd dreg_lo,dreg_hi,cl */ EMIT3(0x0F, 0xAD, add_2reg(0xC0, dreg_lo, dreg_hi)); /* shr dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xE8, dreg_hi)); /* IA32_ECX = -IA32_ECX + 32 */ /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* if ecx >= 32, mov dreg_hi to dreg_lo and clear dreg_hi */ /* shl ebx,cl */ EMIT2(0xD3, add_1reg(0xE0, IA32_EBX)); /* or dreg_lo,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_lo, IA32_EBX)); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 32 */ if (jmp_label1 == -1) jmp_label1 = cnt; /* cmp ecx,64 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 64); /* Jumps when >= 64 */ if (is_imm8(jmp_label(jmp_label2, 2))) EMIT2(IA32_JAE, jmp_label(jmp_label2, 2)); else EMIT2_off32(0x0F, IA32_JAE + 0x10, jmp_label(jmp_label2, 6)); /* cmp ecx,32 */ EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32); /* skip the next two instructions (4 bytes) when < 32 */ EMIT2(IA32_JB, 4); /* >= 32 && < 64 */ /* sub ecx,32 */ EMIT3(0x83, add_1reg(0xE8, IA32_ECX), 32); /* shr dreg_hi,cl */ EMIT2(0xD3, add_1reg(0xE8, dreg_hi)); /* mov dreg_lo,dreg_hi */ EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi)); /* xor dreg_hi,dreg_hi */ EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi)); /* goto out; */ if (is_imm8(jmp_label(jmp_label3, 2))) EMIT2(0xEB, jmp_label(jmp_label3, 2)); else EMIT1_off32(0xE9, jmp_label(jmp_label3, 5)); /* >= 64 */ if (jmp_label2 == -1) jmp_label2 = cnt; /* xor dreg_lo,dreg_lo */ EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo)); /* xor dreg_hi,dreg_hi */ EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi)); if (jmp_label3 == -1) jmp_label3 = cnt; if (dstk) { /* mov dword ptr [ebp+off],dreg_lo */ EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo), Loading Loading @@ -1077,27 +902,10 @@ static inline void emit_ia32_lsh_i64(const u8 dst[], const u32 val, } /* Do LSH operation */ if (val < 32) { /* shl dreg_hi,imm8 */ EMIT3(0xC1, add_1reg(0xE0, dreg_hi), val); /* mov ebx,dreg_lo */ EMIT2(0x8B, add_2reg(0xC0, dreg_lo, IA32_EBX)); /* shld dreg_hi,dreg_lo,imm8 */ EMIT4(0x0F, 0xA4, add_2reg(0xC0, dreg_hi, dreg_lo), val); /* shl dreg_lo,imm8 */ EMIT3(0xC1, add_1reg(0xE0, dreg_lo), val); /* IA32_ECX = 32 - val */ /* mov ecx,val */ EMIT2(0xB1, val); /* movzx ecx,ecx */ EMIT3(0x0F, 0xB6, add_2reg(0xC0, IA32_ECX, IA32_ECX)); /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shr ebx,cl */ EMIT2(0xD3, add_1reg(0xE8, IA32_EBX)); /* or dreg_hi,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_hi, IA32_EBX)); } else if (val >= 32 && val < 64) { u32 value = val - 32; Loading Loading @@ -1143,27 +951,10 @@ static inline void emit_ia32_rsh_i64(const u8 dst[], const u32 val, /* Do RSH operation */ if (val < 32) { /* shr dreg_lo,imm8 */ EMIT3(0xC1, add_1reg(0xE8, dreg_lo), val); /* mov ebx,dreg_hi */ EMIT2(0x8B, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* shrd dreg_lo,dreg_hi,imm8 */ EMIT4(0x0F, 0xAC, add_2reg(0xC0, dreg_lo, dreg_hi), val); /* shr dreg_hi,imm8 */ EMIT3(0xC1, add_1reg(0xE8, dreg_hi), val); /* IA32_ECX = 32 - val */ /* mov ecx,val */ EMIT2(0xB1, val); /* movzx ecx,ecx */ EMIT3(0x0F, 0xB6, add_2reg(0xC0, IA32_ECX, IA32_ECX)); /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shl ebx,cl */ EMIT2(0xD3, add_1reg(0xE0, IA32_EBX)); /* or dreg_lo,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_lo, IA32_EBX)); } else if (val >= 32 && val < 64) { u32 value = val - 32; Loading Loading @@ -1208,27 +999,10 @@ static inline void emit_ia32_arsh_i64(const u8 dst[], const u32 val, } /* Do RSH operation */ if (val < 32) { /* shr dreg_lo,imm8 */ EMIT3(0xC1, add_1reg(0xE8, dreg_lo), val); /* mov ebx,dreg_hi */ EMIT2(0x8B, add_2reg(0xC0, dreg_hi, IA32_EBX)); /* shrd dreg_lo,dreg_hi,imm8 */ EMIT4(0x0F, 0xAC, add_2reg(0xC0, dreg_lo, dreg_hi), val); /* ashr dreg_hi,imm8 */ EMIT3(0xC1, add_1reg(0xF8, dreg_hi), val); /* IA32_ECX = 32 - val */ /* mov ecx,val */ EMIT2(0xB1, val); /* movzx ecx,ecx */ EMIT3(0x0F, 0xB6, add_2reg(0xC0, IA32_ECX, IA32_ECX)); /* neg ecx */ EMIT2(0xF7, add_1reg(0xD8, IA32_ECX)); /* add ecx,32 */ EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 32); /* shl ebx,cl */ EMIT2(0xD3, add_1reg(0xE0, IA32_EBX)); /* or dreg_lo,ebx */ EMIT2(0x09, add_2reg(0xC0, dreg_lo, IA32_EBX)); } else if (val >= 32 && val < 64) { u32 value = val - 32; Loading
drivers/net/bonding/bond_main.c +23 −14 Original line number Diff line number Diff line Loading @@ -3859,8 +3859,8 @@ static netdev_tx_t bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev) { struct bonding *bond = netdev_priv(bond_dev); struct iphdr *iph = ip_hdr(skb); struct slave *slave; int slave_cnt; u32 slave_id; /* Start with the curr_active_slave that joined the bond as the Loading @@ -3869,23 +3869,32 @@ static netdev_tx_t bond_xmit_roundrobin(struct sk_buff *skb, * send the join/membership reports. The curr_active_slave found * will send all of this type of traffic. */ if (iph->protocol == IPPROTO_IGMP && skb->protocol == htons(ETH_P_IP)) { if (skb->protocol == htons(ETH_P_IP)) { int noff = skb_network_offset(skb); struct iphdr *iph; if (unlikely(!pskb_may_pull(skb, noff + sizeof(*iph)))) goto non_igmp; iph = ip_hdr(skb); if (iph->protocol == IPPROTO_IGMP) { slave = rcu_dereference(bond->curr_active_slave); if (slave) bond_dev_queue_xmit(bond, skb, slave->dev); else bond_xmit_slave_id(bond, skb, 0); } else { int slave_cnt = READ_ONCE(bond->slave_cnt); return NETDEV_TX_OK; } } non_igmp: slave_cnt = READ_ONCE(bond->slave_cnt); if (likely(slave_cnt)) { slave_id = bond_rr_gen_slave_id(bond); bond_xmit_slave_id(bond, skb, slave_id % slave_cnt); } else { bond_tx_drop(bond_dev, skb); } } return NETDEV_TX_OK; } Loading
drivers/net/dsa/b53/b53_common.c +2 −2 Original line number Diff line number Diff line Loading @@ -955,13 +955,13 @@ static int b53_setup(struct dsa_switch *ds) if (ret) dev_err(ds->dev, "failed to apply configuration\n"); /* Configure IMP/CPU port, disable unused ports. Enabled /* Configure IMP/CPU port, disable all other ports. Enabled * ports will be configured with .port_enable */ for (port = 0; port < dev->num_ports; port++) { if (dsa_is_cpu_port(ds, port)) b53_enable_cpu_port(dev, port); else if (dsa_is_unused_port(ds, port)) else b53_disable_port(ds, port); } Loading