Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af144a98 authored by David S. Miller's avatar David S. Miller
Browse files


Two cases of overlapping changes, nothing fancy.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 6413139d e858faf5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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.
+1 −0
Original line number Diff line number Diff line
@@ -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
+29 −255
Original line number Diff line number Diff line
@@ -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;

@@ -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),
@@ -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;

@@ -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 */
@@ -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;

@@ -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),
@@ -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;

@@ -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;

@@ -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;

+23 −14
Original line number Diff line number Diff line
@@ -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
@@ -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;
}

+2 −2
Original line number Diff line number Diff line
@@ -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