Netdev List
 help / color / mirror / Atom feed
* linux-next: manual merge of the net-next tree with the net tree
From: Stephen Rothwell @ 2014-10-29  0:14 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Vince Bridgers, Viet Nga Dao

[-- Attachment #1: Type: text/plain, Size: 604 bytes --]

Hi all,

Today's linux-next merge of the net-next tree got a conflict in
drivers/net/phy/marvell.c between commit 99d881f993f0 ("net: phy: Add
SGMII Configuration for Marvell 88E1145 Initialization") from the net
tree and commit b02241755d0e ("net: phy: Adding SGMII support for
Marvell 88ee1145 driver") from the net-next tree.

I fixed it up (they are basically the same patch :-( so I just fixed up
the differences and basically used the net tree version) and can carry
the fix as necessary (no action is required).

-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply

* [PATCH net-next 1/3] bpf: reduce verifier memory consumption
From: Alexei Starovoitov @ 2014-10-28 22:11 UTC (permalink / raw)
  To: David S. Miller
  Cc: Hannes Frederic Sowa, Eric Dumazet, Daniel Borkmann,
	Andy Lutomirski, netdev, linux-kernel
In-Reply-To: <1414534303-9906-1-git-send-email-ast@plumgrid.com>

verifier keeps track of register state spilled to stack.
registers are 8-byte wide and always aligned, so instead of tracking them
in every byte-sized stack slot, use MAX_BPF_STACK / 8 array to track
spilled register state.
Though verifier runs in user context and its state freed immediately
after verification, it makes sense to reduce its memory usage.
This optimization reduces sizeof(struct verifier_state)
from 12464 to 1712 on 64-bit and from 6232 to 1112 on 32-bit.

Note, this patch doesn't change existing limits, which are there to bound
time and memory during verification: 4k total number of insns in a program,
1k number of jumps (states to visit) and 32k number of processed insn
(since an insn may be visited multiple times). Theoretical worst case memory
during verification is 1712 * 1k = 17Mbyte. Out-of-memory situation triggers
cleanup and rejects the program.

Suggested-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
---
 kernel/bpf/verifier.c |  101 ++++++++++++++++++++++++++++---------------------
 1 file changed, 57 insertions(+), 44 deletions(-)

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 9f81818f2941..b6a1f7c14a67 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -153,22 +153,19 @@ struct reg_state {
 
 enum bpf_stack_slot_type {
 	STACK_INVALID,    /* nothing was stored in this stack slot */
-	STACK_SPILL,      /* 1st byte of register spilled into stack */
-	STACK_SPILL_PART, /* other 7 bytes of register spill */
+	STACK_SPILL,      /* register spilled into stack */
 	STACK_MISC	  /* BPF program wrote some data into this slot */
 };
 
-struct bpf_stack_slot {
-	enum bpf_stack_slot_type stype;
-	struct reg_state reg_st;
-};
+#define BPF_REG_SIZE 8	/* size of eBPF register in bytes */
 
 /* state of the program:
  * type of all registers and stack info
  */
 struct verifier_state {
 	struct reg_state regs[MAX_BPF_REG];
-	struct bpf_stack_slot stack[MAX_BPF_STACK];
+	u8 stack_slot_type[MAX_BPF_STACK];
+	struct reg_state spilled_regs[MAX_BPF_STACK / BPF_REG_SIZE];
 };
 
 /* linked list of verifier states used to prune search */
@@ -259,10 +256,10 @@ static void print_verifier_state(struct verifier_env *env)
 				env->cur_state.regs[i].map_ptr->key_size,
 				env->cur_state.regs[i].map_ptr->value_size);
 	}
-	for (i = 0; i < MAX_BPF_STACK; i++) {
-		if (env->cur_state.stack[i].stype == STACK_SPILL)
+	for (i = 0; i < MAX_BPF_STACK; i += BPF_REG_SIZE) {
+		if (env->cur_state.stack_slot_type[i] == STACK_SPILL)
 			verbose(" fp%d=%s", -MAX_BPF_STACK + i,
-				reg_type_str[env->cur_state.stack[i].reg_st.type]);
+				reg_type_str[env->cur_state.spilled_regs[i / BPF_REG_SIZE].type]);
 	}
 	verbose("\n");
 }
@@ -539,8 +536,10 @@ static int bpf_size_to_bytes(int bpf_size)
 static int check_stack_write(struct verifier_state *state, int off, int size,
 			     int value_regno)
 {
-	struct bpf_stack_slot *slot;
 	int i;
+	/* caller checked that off % size == 0 and -MAX_BPF_STACK <= off < 0,
+	 * so it's aligned access and [off, off + size) are within stack limits
+	 */
 
 	if (value_regno >= 0 &&
 	    (state->regs[value_regno].type == PTR_TO_MAP_VALUE ||
@@ -548,30 +547,24 @@ static int check_stack_write(struct verifier_state *state, int off, int size,
 	     state->regs[value_regno].type == PTR_TO_CTX)) {
 
 		/* register containing pointer is being spilled into stack */
-		if (size != 8) {
+		if (size != BPF_REG_SIZE) {
 			verbose("invalid size of register spill\n");
 			return -EACCES;
 		}
 
-		slot = &state->stack[MAX_BPF_STACK + off];
-		slot->stype = STACK_SPILL;
 		/* save register state */
-		slot->reg_st = state->regs[value_regno];
-		for (i = 1; i < 8; i++) {
-			slot = &state->stack[MAX_BPF_STACK + off + i];
-			slot->stype = STACK_SPILL_PART;
-			slot->reg_st.type = UNKNOWN_VALUE;
-			slot->reg_st.map_ptr = NULL;
-		}
-	} else {
+		state->spilled_regs[(MAX_BPF_STACK + off) / BPF_REG_SIZE] =
+			state->regs[value_regno];
 
+		for (i = 0; i < BPF_REG_SIZE; i++)
+			state->stack_slot_type[MAX_BPF_STACK + off + i] = STACK_SPILL;
+	} else {
 		/* regular write of data into stack */
-		for (i = 0; i < size; i++) {
-			slot = &state->stack[MAX_BPF_STACK + off + i];
-			slot->stype = STACK_MISC;
-			slot->reg_st.type = UNKNOWN_VALUE;
-			slot->reg_st.map_ptr = NULL;
-		}
+		state->spilled_regs[(MAX_BPF_STACK + off) / BPF_REG_SIZE] =
+			(struct reg_state) {};
+
+		for (i = 0; i < size; i++)
+			state->stack_slot_type[MAX_BPF_STACK + off + i] = STACK_MISC;
 	}
 	return 0;
 }
@@ -579,19 +572,18 @@ static int check_stack_write(struct verifier_state *state, int off, int size,
 static int check_stack_read(struct verifier_state *state, int off, int size,
 			    int value_regno)
 {
+	u8 *slot_type;
 	int i;
-	struct bpf_stack_slot *slot;
 
-	slot = &state->stack[MAX_BPF_STACK + off];
+	slot_type = &state->stack_slot_type[MAX_BPF_STACK + off];
 
-	if (slot->stype == STACK_SPILL) {
-		if (size != 8) {
+	if (slot_type[0] == STACK_SPILL) {
+		if (size != BPF_REG_SIZE) {
 			verbose("invalid size of register spill\n");
 			return -EACCES;
 		}
-		for (i = 1; i < 8; i++) {
-			if (state->stack[MAX_BPF_STACK + off + i].stype !=
-			    STACK_SPILL_PART) {
+		for (i = 1; i < BPF_REG_SIZE; i++) {
+			if (slot_type[i] != STACK_SPILL) {
 				verbose("corrupted spill memory\n");
 				return -EACCES;
 			}
@@ -599,12 +591,12 @@ static int check_stack_read(struct verifier_state *state, int off, int size,
 
 		if (value_regno >= 0)
 			/* restore register state from stack */
-			state->regs[value_regno] = slot->reg_st;
+			state->regs[value_regno] =
+				state->spilled_regs[(MAX_BPF_STACK + off) / BPF_REG_SIZE];
 		return 0;
 	} else {
 		for (i = 0; i < size; i++) {
-			if (state->stack[MAX_BPF_STACK + off + i].stype !=
-			    STACK_MISC) {
+			if (slot_type[i] != STACK_MISC) {
 				verbose("invalid read from stack off %d+%d size %d\n",
 					off, i, size);
 				return -EACCES;
@@ -747,7 +739,7 @@ static int check_stack_boundary(struct verifier_env *env,
 	}
 
 	for (i = 0; i < access_size; i++) {
-		if (state->stack[MAX_BPF_STACK + off + i].stype != STACK_MISC) {
+		if (state->stack_slot_type[MAX_BPF_STACK + off + i] != STACK_MISC) {
 			verbose("invalid indirect read from stack off %d+%d size %d\n",
 				off, i, access_size);
 			return -EACCES;
@@ -1417,12 +1409,33 @@ static bool states_equal(struct verifier_state *old, struct verifier_state *cur)
 	}
 
 	for (i = 0; i < MAX_BPF_STACK; i++) {
-		if (memcmp(&old->stack[i], &cur->stack[i],
-			   sizeof(old->stack[0])) != 0) {
-			if (old->stack[i].stype == STACK_INVALID)
-				continue;
+		if (old->stack_slot_type[i] == STACK_INVALID)
+			continue;
+		if (old->stack_slot_type[i] != cur->stack_slot_type[i])
+			/* Ex: old explored (safe) state has STACK_SPILL in
+			 * this stack slot, but current has has STACK_MISC ->
+			 * this verifier states are not equivalent,
+			 * return false to continue verification of this path
+			 */
 			return false;
-		}
+		if (i % BPF_REG_SIZE)
+			continue;
+		if (memcmp(&old->spilled_regs[i / BPF_REG_SIZE],
+			   &cur->spilled_regs[i / BPF_REG_SIZE],
+			   sizeof(old->spilled_regs[0])))
+			/* when explored and current stack slot types are
+			 * the same, check that stored pointers types
+			 * are the same as well.
+			 * Ex: explored safe path could have stored
+			 * (struct reg_state) {.type = PTR_TO_STACK, .imm = -8}
+			 * but current path has stored:
+			 * (struct reg_state) {.type = PTR_TO_STACK, .imm = -16}
+			 * such verifier states are not equivalent.
+			 * return false to continue verification of this path
+			 */
+			return false;
+		else
+			continue;
 	}
 	return true;
 }
-- 
1.7.9.5

^ permalink raw reply related

* [PATCH net-next 3/3] test: bpf: add a testcase reduced from nmap
From: Alexei Starovoitov @ 2014-10-28 22:11 UTC (permalink / raw)
  To: David S. Miller
  Cc: Hannes Frederic Sowa, Eric Dumazet, Daniel Borkmann,
	Andy Lutomirski, netdev, linux-kernel
In-Reply-To: <1414534303-9906-1-git-send-email-ast@plumgrid.com>

nmap generates classic BPF programs to filter ARP packets with given target MAC
which triggered a bug in eBPF x64 JIT. The bug was fixed in
commit e0ee9c12157d ("x86: bpf_jit: fix two bugs in eBPF JIT compiler")
This patch is adding a testcase in eBPF instructions (those that
were generated by classic->eBPF converter) to be processed by JIT.
The test is primarily targeting JIT compiler.

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
---
 lib/test_bpf.c |   43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/lib/test_bpf.c b/lib/test_bpf.c
index 23e070bcf72d..3f167d2eeb94 100644
--- a/lib/test_bpf.c
+++ b/lib/test_bpf.c
@@ -1756,6 +1756,49 @@ static struct bpf_test tests[] = {
 		{ },
 		{ { 0, 1 } }
 	},
+	{
+		"nmap reduced",
+		.u.insns_int = {
+			BPF_MOV64_REG(R6, R1),
+			BPF_LD_ABS(BPF_H, 12),
+			BPF_JMP_IMM(BPF_JNE, R0, 0x806, 28),
+			BPF_LD_ABS(BPF_H, 12),
+			BPF_JMP_IMM(BPF_JNE, R0, 0x806, 26),
+			BPF_MOV32_IMM(R0, 18),
+			BPF_STX_MEM(BPF_W, R10, R0, -64),
+			BPF_LDX_MEM(BPF_W, R7, R10, -64),
+			BPF_LD_IND(BPF_W, R7, 14),
+			BPF_STX_MEM(BPF_W, R10, R0, -60),
+			BPF_MOV32_IMM(R0, 280971478),
+			BPF_STX_MEM(BPF_W, R10, R0, -56),
+			BPF_LDX_MEM(BPF_W, R7, R10, -56),
+			BPF_LDX_MEM(BPF_W, R0, R10, -60),
+			BPF_ALU32_REG(BPF_SUB, R0, R7),
+			BPF_JMP_IMM(BPF_JNE, R0, 0, 15),
+			BPF_LD_ABS(BPF_H, 12),
+			BPF_JMP_IMM(BPF_JNE, R0, 0x806, 13),
+			BPF_MOV32_IMM(R0, 22),
+			BPF_STX_MEM(BPF_W, R10, R0, -56),
+			BPF_LDX_MEM(BPF_W, R7, R10, -56),
+			BPF_LD_IND(BPF_H, R7, 14),
+			BPF_STX_MEM(BPF_W, R10, R0, -52),
+			BPF_MOV32_IMM(R0, 17366),
+			BPF_STX_MEM(BPF_W, R10, R0, -48),
+			BPF_LDX_MEM(BPF_W, R7, R10, -48),
+			BPF_LDX_MEM(BPF_W, R0, R10, -52),
+			BPF_ALU32_REG(BPF_SUB, R0, R7),
+			BPF_JMP_IMM(BPF_JNE, R0, 0, 2),
+			BPF_MOV32_IMM(R0, 256),
+			BPF_EXIT_INSN(),
+			BPF_MOV32_IMM(R0, 0),
+			BPF_EXIT_INSN(),
+		},
+		INTERNAL,
+		{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x06, 0, 0,
+		  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		  0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6},
+		{ { 38, 256 } }
+	},
 };
 
 static struct net_device dev;
-- 
1.7.9.5

^ permalink raw reply related

* [PATCH net-next 2/3] samples: bpf: add a verifier test and summary line
From: Alexei Starovoitov @ 2014-10-28 22:11 UTC (permalink / raw)
  To: David S. Miller
  Cc: Hannes Frederic Sowa, Eric Dumazet, Daniel Borkmann,
	Andy Lutomirski, netdev, linux-kernel
In-Reply-To: <1414534303-9906-1-git-send-email-ast@plumgrid.com>

- add a test specifically targeting verifier state pruning.
It checks state propagation between registers, storing that
state into stack and state pruning algorithm recognizing
equivalent stack and register states.

- add summary line to spot failures easier

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
---
 samples/bpf/test_verifier.c |   46 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/samples/bpf/test_verifier.c b/samples/bpf/test_verifier.c
index eb4bec0ad8af..63402742345e 100644
--- a/samples/bpf/test_verifier.c
+++ b/samples/bpf/test_verifier.c
@@ -602,6 +602,45 @@ static struct bpf_test tests[] = {
 		},
 		.result = ACCEPT,
 	},
+	{
+		"jump test 5",
+		.insns = {
+			BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
+			BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
+			BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 0),
+			BPF_MOV64_IMM(BPF_REG_0, 0),
+			BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 0),
+			BPF_MOV64_IMM(BPF_REG_0, 0),
+			BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 0),
+			BPF_MOV64_IMM(BPF_REG_0, 0),
+			BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 0),
+			BPF_MOV64_IMM(BPF_REG_0, 0),
+			BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 2),
+			BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_2, -8),
+			BPF_JMP_IMM(BPF_JA, 0, 0, 0),
+			BPF_MOV64_IMM(BPF_REG_0, 0),
+			BPF_EXIT_INSN(),
+		},
+		.result = ACCEPT,
+	},
 };
 
 static int probe_filter_length(struct bpf_insn *fp)
@@ -630,7 +669,7 @@ static int create_map(void)
 
 static int test(void)
 {
-	int prog_fd, i;
+	int prog_fd, i, pass_cnt = 0, err_cnt = 0;
 
 	for (i = 0; i < ARRAY_SIZE(tests); i++) {
 		struct bpf_insn *prog = tests[i].insns;
@@ -657,21 +696,25 @@ static int test(void)
 				printf("FAIL\nfailed to load prog '%s'\n",
 				       strerror(errno));
 				printf("%s", bpf_log_buf);
+				err_cnt++;
 				goto fail;
 			}
 		} else {
 			if (prog_fd >= 0) {
 				printf("FAIL\nunexpected success to load\n");
 				printf("%s", bpf_log_buf);
+				err_cnt++;
 				goto fail;
 			}
 			if (strstr(bpf_log_buf, tests[i].errstr) == 0) {
 				printf("FAIL\nunexpected error message: %s",
 				       bpf_log_buf);
+				err_cnt++;
 				goto fail;
 			}
 		}
 
+		pass_cnt++;
 		printf("OK\n");
 fail:
 		if (map_fd >= 0)
@@ -679,6 +722,7 @@ fail:
 		close(prog_fd);
 
 	}
+	printf("Summary: %d PASSED, %d FAILED\n", pass_cnt, err_cnt);
 
 	return 0;
 }
-- 
1.7.9.5

^ permalink raw reply related

* [PATCH net-next 0/3] reduce verifier memory consumption and add tests
From: Alexei Starovoitov @ 2014-10-28 22:11 UTC (permalink / raw)
  To: David S. Miller
  Cc: Hannes Frederic Sowa, Eric Dumazet, Daniel Borkmann,
	Andy Lutomirski, netdev, linux-kernel

Small set of cleanups:
 - reduce verifier memory consumption
 - add verifier test to check register state propagation and state equivalence
 - add JIT test reduced from recent nmap triggered crash

Alexei Starovoitov (3):
  bpf: reduce verifier memory consumption
  samples: bpf: add a verifier test and summary line
  test: bpf: add a testcase reduced from nmap

 kernel/bpf/verifier.c       |  101 ++++++++++++++++++++++++-------------------
 lib/test_bpf.c              |   43 ++++++++++++++++++
 samples/bpf/test_verifier.c |   46 +++++++++++++++++++-
 3 files changed, 145 insertions(+), 45 deletions(-)

-- 
1.7.9.5

^ permalink raw reply

* Re: [PATCH] ovs: Turn vports with dependencies into separate modules
From: Thomas Graf @ 2014-10-28 21:47 UTC (permalink / raw)
  To: Alexei Starovoitov
  Cc: David Miller, dev@openvswitch.org, netdev@vger.kernel.org
In-Reply-To: <CAADnVQK2HRn=XyqF==tuDPFgA5gamVCZmxg5ELVjBX2i0dYwfA@mail.gmail.com>

On 10/28/14 at 02:42pm, Alexei Starovoitov wrote:
> On Tue, Oct 28, 2014 at 2:27 PM, David Miller <davem@davemloft.net> wrote:
> >>
> >> it fails the build when lockdep is on:
> >> ERROR: "lockdep_ovsl_is_held" [net/openvswitch/vport-gre.ko] undefined!
> >
> > I've fixed it thusly:
> 
> thanks! that was quick. the fix looks good.

Thanks and sorry for causing this fallout

^ permalink raw reply

* Re: [PATCH] ovs: Turn vports with dependencies into separate modules
From: Alexei Starovoitov @ 2014-10-28 21:42 UTC (permalink / raw)
  To: David Miller; +Cc: Thomas Graf, dev@openvswitch.org, netdev@vger.kernel.org
In-Reply-To: <20141028.172743.459865270069950735.davem@davemloft.net>

On Tue, Oct 28, 2014 at 2:27 PM, David Miller <davem@davemloft.net> wrote:
>>
>> it fails the build when lockdep is on:
>> ERROR: "lockdep_ovsl_is_held" [net/openvswitch/vport-gre.ko] undefined!
>
> I've fixed it thusly:

thanks! that was quick. the fix looks good.

^ permalink raw reply

* Re: [PATCH net 0/3] cdc-ether: handle promiscuous mode
From: David Miller @ 2014-10-28 21:30 UTC (permalink / raw)
  To: oneukum; +Cc: olivier.blin, netdev, hayeswang, bjorn
In-Reply-To: <1414530625.29018.1.camel@linux-0dmf.site>

From: Oliver Neukum <oneukum@suse.de>
Date: Tue, 28 Oct 2014 22:10:25 +0100

> On Tue, 2014-10-28 at 15:49 -0400, David Miller wrote:
>> From: Olivier Blin <olivier.blin@softathome.com>
>> Date: Fri, 24 Oct 2014 19:42:59 +0200
>> 
>> > Since kernel 3.16, my Lenovo USB network adapters (RTL8153) using
>> > cdc-ether are not working anymore in a bridge.
>> > 
>> > This is due to commit c472ab68ad67db23c9907a27649b7dc0899b61f9, which
>> > resets the packet filter when the device is bound.
>> > 
>> > The default packet filter set by cdc-ether does not include
>> > promiscuous, while the adapter seemed to have promiscuous enabled by
>> > default.
>> > 
>> > This patch series allows to support promiscuous mode for cdc-ether, by
>> > hooking into set_rx_mode.
>> > 
>> > Incidentally, maybe this device should be handled by the r8152 driver,
>> > but this patch series is still nice for other adapters.
>> 
>> Can a usbnet expert please review this series?
> 
> Acked-by: Oliver Neukum <oneukum@suse.de>

Series applied, thanks!

^ permalink raw reply

* Re: [PATCH] ovs: Turn vports with dependencies into separate modules
From: David Miller @ 2014-10-28 21:27 UTC (permalink / raw)
  To: alexei.starovoitov; +Cc: tgraf, dev, netdev
In-Reply-To: <CAADnVQ+Z6-7sdWAEvHkKR==Nds6hqBfbfPmtUDiZXOTE9DRnGw@mail.gmail.com>

From: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Date: Tue, 28 Oct 2014 13:57:13 -0700

> On Tue, Oct 28, 2014 at 11:43 AM, David Miller <davem@davemloft.net> wrote:
>> From: Thomas Graf <tgraf@suug.ch>
>> Date: Wed, 22 Oct 2014 17:29:06 +0200
>>
>>> The internal and netdev vport remain part of openvswitch.ko. Encap
>>> vports including vxlan, gre, and geneve can be built as separate
>>> modules and are loaded on demand. Modules can be unloaded after use.
>>> Datapath ports keep a reference to the vport module during their
>>> lifetime.
>>>
>>> Allows to remove the error prone maintenance of the global list
>>> vport_ops_list.
>>>
>>> Signed-off-by: Thomas Graf <tgraf@suug.ch>
>>
>> Applied, thanks a lot Thomas.
> 
> Thomas,
> 
> it fails the build when lockdep is on:
> ERROR: "lockdep_ovsl_is_held" [net/openvswitch/vport-gre.ko] undefined!

I've fixed it thusly:

====================
[PATCH] openvswitch: Export lockdep_ovsl_is_held to modules.

ERROR: "lockdep_ovsl_is_held" [net/openvswitch/vport-gre.ko] undefined!

Reported-by: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
 net/openvswitch/datapath.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index aecddb9..f18302f 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -131,6 +131,7 @@ int lockdep_ovsl_is_held(void)
 	else
 		return 1;
 }
+EXPORT_SYMBOL(lockdep_ovsl_is_held);
 #endif
 
 static struct vport *new_vport(const struct vport_parms *);
-- 
1.7.11.7

^ permalink raw reply related

* Re: [PATCH net-next 00/13] Mellanox ethernet driver update Oct-27-2014
From: David Miller @ 2014-10-28 21:22 UTC (permalink / raw)
  To: amirv; +Cc: netdev, yevgenyp, ogerlitz
In-Reply-To: <1414402667-8841-1-git-send-email-amirv@mellanox.com>

From: Amir Vadai <amirv@mellanox.com>
Date: Mon, 27 Oct 2014 11:37:34 +0200

> This patchset introduces some small bug fixes, support in get/set of
> vlan offload and get/set/capabilities of the link.
> 
> First 7 patches by Saeed, add support in setting/getting link speed and getting
> cable capabilities.
> Next 2 patches also by Saeed, enable the user to turn rx/tx vlan offloading on
> and off.
> Jenni fixed a bug in error flow during device initalization.
> Ido and Jack fixed some code duplication and errors discovered by static checker.
> last patch by me is a fix to make ethtool report the actual rings used by
> indirection QP.
> 
> Patches were applied and tested against commit 61ed53d ("Merge tag 'ntb-3.18'
> of git://github.com/jonmason/ntb")

Series applied to net-next, thanks.

^ permalink raw reply

* Re: [PATCH net 0/3] cdc-ether: handle promiscuous mode
From: Oliver Neukum @ 2014-10-28 21:10 UTC (permalink / raw)
  To: David Miller; +Cc: olivier.blin, netdev, hayeswang, bjorn
In-Reply-To: <20141028.154926.273240718595756465.davem@davemloft.net>

On Tue, 2014-10-28 at 15:49 -0400, David Miller wrote:
> From: Olivier Blin <olivier.blin@softathome.com>
> Date: Fri, 24 Oct 2014 19:42:59 +0200
> 
> > Since kernel 3.16, my Lenovo USB network adapters (RTL8153) using
> > cdc-ether are not working anymore in a bridge.
> > 
> > This is due to commit c472ab68ad67db23c9907a27649b7dc0899b61f9, which
> > resets the packet filter when the device is bound.
> > 
> > The default packet filter set by cdc-ether does not include
> > promiscuous, while the adapter seemed to have promiscuous enabled by
> > default.
> > 
> > This patch series allows to support promiscuous mode for cdc-ether, by
> > hooking into set_rx_mode.
> > 
> > Incidentally, maybe this device should be handled by the r8152 driver,
> > but this patch series is still nice for other adapters.
> 
> Can a usbnet expert please review this series?

Acked-by: Oliver Neukum <oneukum@suse.de>

	Regards
		Oliver

^ permalink raw reply

* [PATCH] carl9170: Convert byte_rev_table uses to bitrev8
From: Joe Perches @ 2014-10-28 21:18 UTC (permalink / raw)
  To: Christian Lamparter
  Cc: John W. Linville, Wang, Yalin, Russell King, linux-mm,
	Will Deacon, Akinobu Mita, linux-arm-kernel, linux-wireless,
	netdev, LKML
In-Reply-To: <1414392371.8884.2.camel@perches.com>

Use the inline function instead of directly indexing the array.

This allows some architectures with hardware instructions
for bit reversals to eliminate the array.

Signed-off-by: Joe Perches <joe@perches.com>
---
On Sun, 2014-10-26 at 23:46 -0700, Joe Perches wrote:
> On Mon, 2014-10-27 at 14:37 +0800, Wang, Yalin wrote:
> > this change add CONFIG_HAVE_ARCH_BITREVERSE config option,
> > so that we can use arm/arm64 rbit instruction to do bitrev operation
> > by hardware.
[]
> > diff --git a/include/linux/bitrev.h b/include/linux/bitrev.h
> > index 7ffe03f..ef5b2bb 100644
> > --- a/include/linux/bitrev.h
> > +++ b/include/linux/bitrev.h
> > @@ -3,6 +3,14 @@
> >  
> >  #include <linux/types.h>
> >  
> > +#ifdef CONFIG_HAVE_ARCH_BITREVERSE
> > +#include <asm/bitrev.h>
> > +
> > +#define bitrev32 __arch_bitrev32
> > +#define bitrev16 __arch_bitrev16
> > +#define bitrev8 __arch_bitrev8
> > +
> > +#else
> >  extern u8 const byte_rev_table[256];

 drivers/net/wireless/ath/carl9170/phy.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/carl9170/phy.c b/drivers/net/wireless/ath/carl9170/phy.c
index b80b213..dca6df1 100644
--- a/drivers/net/wireless/ath/carl9170/phy.c
+++ b/drivers/net/wireless/ath/carl9170/phy.c
@@ -994,7 +994,7 @@ static int carl9170_init_rf_bank4_pwr(struct ar9170 *ar, bool band5ghz,
 			refsel0 = 0;
 			refsel1 = 1;
 		}
-		chansel = byte_rev_table[chansel];
+		chansel = bitrev8(chansel);
 	} else {
 		if (freq == 2484) {
 			chansel = 10 + (freq - 2274) / 5;
@@ -1002,7 +1002,7 @@ static int carl9170_init_rf_bank4_pwr(struct ar9170 *ar, bool band5ghz,
 		} else
 			chansel = 16 + (freq - 2272) / 5;
 		chansel *= 4;
-		chansel = byte_rev_table[chansel];
+		chansel = bitrev8(chansel);
 	}
 
 	d1 =	chansel;


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related

* Re: [PATCH net 0/2] net: systemport: RX path and suspend fixes
From: David Miller @ 2014-10-28 21:11 UTC (permalink / raw)
  To: f.fainelli; +Cc: netdev
In-Reply-To: <1414519921-3246-1-git-send-email-f.fainelli@gmail.com>

From: Florian Fainelli <f.fainelli@gmail.com>
Date: Tue, 28 Oct 2014 11:11:59 -0700

> These two patches fix a race condition where we have our RX interrupts
> enabled, but not NAPI for the RX path, and the second patch fixes an
> issue for packets stuck in RX fifo during a suspend/resume cycle.

Series applied, thanks.

^ permalink raw reply

* Re: [PATCH] fixup! net: pxa168_eth: Provide phy_interface mode on platform_data
From: Sebastian Hesselbarth @ 2014-10-28 21:11 UTC (permalink / raw)
  To: David Miller
  Cc: antoine.tenart, f.fainelli, eric.y.miao, haojian.zhuang,
	linux-arm-kernel, netdev, linux-kernel
In-Reply-To: <20141028.164939.509353257563688482.davem@davemloft.net>

On 28.10.2014 21:49, David Miller wrote:
> From: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
> Date: Sat, 25 Oct 2014 12:08:59 +0200
>
>> Do not add phy include to the board file but platform_data include
>> instead.
>>
>> Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
>> ---
>> David,
>>
>> I should have compile tested this patch earlier. I did now on
>> pxa168_defconfig right after I received an 0-day kbuild error
>> on this patch.
>>
>> This is the corresponding fix, can you please squash it in?
>>
>> Thanks and sorry for the noise,
>
> Patch applied to net-next, but:
>
> 1) There is never any way for me to "squash" a patch into an old
>     one.  Once I apply a patch it is a permanent commit in my tree
>     and cannot be undone and/or modified.
>
>     Therefore the only thing you can do is send me a relative fix
>     and that's what shows up in my tree as yet another later commit.

Ok, good to know and sorry for the crippled fixup patch. I was assuming
that net-next is also rebased until pulled/moved to some stable state.

> 2) Always be specific about the target tree in you subject,
>     line.  Never assume I can figure it out by context.

Also, sorry for the little information given.

Thanks,

Sebastian

^ permalink raw reply

* Re: [PATCH net-next] datapath: Rename last_action() as nla_is_last() and move to netlink.h
From: David Miller @ 2014-10-28 21:08 UTC (permalink / raw)
  To: simon.horman; +Cc: netdev, pshelar, dev, tgraf, azhou
In-Reply-To: <1414393936-14463-1-git-send-email-simon.horman@netronome.com>

From: Simon Horman <simon.horman@netronome.com>
Date: Mon, 27 Oct 2014 16:12:16 +0900

> The original motivation for this change was to allow the helper to be used
> in files other than actions.c as part of work on an odp select group
> action.
> 
> It was as pointed out by Thomas Graf that this helper would be best off
> living in netlink.h. Furthermore, I think that the generic nature of this
> helper means it is best off in netlink.h regardless of if it is used more
> than one .c file or not. Thus, I would like it considered independent of
> the work on an odp select group action.
> 
> Cc: Thomas Graf <tgraf@suug.ch>
> Cc: Pravin Shelar <pshelar@nicira.com>
> Cc: Andy Zhou <azhou@nicira.com>
> Signed-off-by: Simon Horman <simon.horman@netronome.com>

Applied, thanks Simon.

^ permalink raw reply

* Re: [PATCH] skbuff.h: fix kernel-doc warning for headers_end
From: David Miller @ 2014-10-28 21:02 UTC (permalink / raw)
  To: rdunlap; +Cc: netdev
In-Reply-To: <544DAA6E.4090509@infradead.org>

From: Randy Dunlap <rdunlap@infradead.org>
Date: Sun, 26 Oct 2014 19:14:06 -0700

> From: Randy Dunlap <rdunlap@infradead.org>
> 
> Fix kernel-doc warning in <linux/skbuff.h> by making both headers_start
> and headers_end private fields.
> 
> Warning(..//include/linux/skbuff.h:654): No description found for parameter 'headers_end[0]'
> 
> Signed-off-by: Randy Dunlap <rdunlap@infradead.org>

Applied, thanks a lot Randy.

^ permalink raw reply

* Re: [PATCH net] net: phy: Add SGMII Configuration for Marvell 88E1145 Initialization
From: David Miller @ 2014-10-28 21:00 UTC (permalink / raw)
  To: vbridger; +Cc: f.fainelli, netdev, vbridger
In-Reply-To: <1414351344-24042-1-git-send-email-vbridger@opensource.altera.com>

From: Vince Bridgers <vbridger@opensource.altera.com>
Date: Sun, 26 Oct 2014 14:22:24 -0500

> Marvell phy 88E1145 configuration & initialization was missing a case
> for initializing SGMII mode. This patch adds that case.
> 
> Signed-off-by: Vince Bridgers <vbridger@opensource.altera.com>

Applied, thanks.

^ permalink raw reply

* Re: [PATCH -next 0/2] net: allow setting ecn via routing table
From: David Miller @ 2014-10-28 20:57 UTC (permalink / raw)
  To: fw; +Cc: netdev
In-Reply-To: <1414276729-17871-1-git-send-email-fw@strlen.de>

From: Florian Westphal <fw@strlen.de>
Date: Sun, 26 Oct 2014 00:38:47 +0200

> These two patches allow turing on explicit congestion notification
> based on the destination network.
> 
> For example, assuming the default tcp_ecn sysctl '2', the following will
> enable ecn (tcp_ecn=1 behaviour, i.e. request ecn to be enabled for a
> tcp connection) for all connections to hosts inside the 192.168.2/24 network:
> 
> ip route change 192.168.2.0/24 dev eth0 features ecn
> 
> Having a more fine-grained per-route setting can be beneficial for
> various reasons, for example 1) within data centers, or 2) local ISPs
> may deploy ECN support for their own video/streaming services [1], etc.
> 
> Joint work with Daniel Borkmann, feature suggested by Hannes Frederic Sowa.
> 
> The patch to enable this in iproute2 will be posted shortly, it is currently
> also available here:
> http://git.breakpoint.cc/cgit/fw/iproute2.git/commit/?h=iproute_features&id=8843d2d8973fb81c78a7efe6d42e3a17d739003e
> 
> [1] http://www.ietf.org/proceedings/89/slides/slides-89-tsvarea-1.pdf, p.15

I don't like how the route metric gives less control than the sysctl.

If the tcp_ecn cases of '1' and '2' make sense for the sysctl, I do not
see why they wouldn't make sense for the per-route knob to.

Implement the following policy, if per-route metric is non-zero use it
instead of the sysctl setting.

Then you have a helper:

static int tcp_ecn_enabled(struct net *net, struct dst_entry *dst)
{
	u32 val = dst_metric(dst, RTAX_ECN);

	if (val)
		return val;
	return net->ipv4.sysctl_tcp_ecn;
}

Then there is no other change to make other than an absolute
strict substitution of sysctl_tcp_ecn with tcp_ecn_enabled().

^ permalink raw reply

* Re: [PATCH] ovs: Turn vports with dependencies into separate modules
From: Alexei Starovoitov @ 2014-10-28 20:57 UTC (permalink / raw)
  To: David Miller; +Cc: Thomas Graf, dev@openvswitch.org, netdev@vger.kernel.org
In-Reply-To: <20141028.144344.398016097830457432.davem@davemloft.net>

On Tue, Oct 28, 2014 at 11:43 AM, David Miller <davem@davemloft.net> wrote:
> From: Thomas Graf <tgraf@suug.ch>
> Date: Wed, 22 Oct 2014 17:29:06 +0200
>
>> The internal and netdev vport remain part of openvswitch.ko. Encap
>> vports including vxlan, gre, and geneve can be built as separate
>> modules and are loaded on demand. Modules can be unloaded after use.
>> Datapath ports keep a reference to the vport module during their
>> lifetime.
>>
>> Allows to remove the error prone maintenance of the global list
>> vport_ops_list.
>>
>> Signed-off-by: Thomas Graf <tgraf@suug.ch>
>
> Applied, thanks a lot Thomas.

Thomas,

it fails the build when lockdep is on:
ERROR: "lockdep_ovsl_is_held" [net/openvswitch/vport-gre.ko] undefined!

^ permalink raw reply

* Re: [PATCH] fixup! net: pxa168_eth: Provide phy_interface mode on platform_data
From: David Miller @ 2014-10-28 20:49 UTC (permalink / raw)
  To: sebastian.hesselbarth
  Cc: antoine.tenart, f.fainelli, eric.y.miao, haojian.zhuang,
	linux-arm-kernel, netdev, linux-kernel
In-Reply-To: <1414231739-7447-1-git-send-email-sebastian.hesselbarth@gmail.com>

From: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Date: Sat, 25 Oct 2014 12:08:59 +0200

> Do not add phy include to the board file but platform_data include
> instead.
> 
> Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
> ---
> David,
> 
> I should have compile tested this patch earlier. I did now on
> pxa168_defconfig right after I received an 0-day kbuild error
> on this patch.
> 
> This is the corresponding fix, can you please squash it in?
> 
> Thanks and sorry for the noise,

Patch applied to net-next, but:

1) There is never any way for me to "squash" a patch into an old
   one.  Once I apply a patch it is a permanent commit in my tree
   and cannot be undone and/or modified.

   Therefore the only thing you can do is send me a relative fix
   and that's what shows up in my tree as yet another later commit.

2) Always be specific about the target tree in you subject,
   line.  Never assume I can figure it out by context.

Thanks.

^ permalink raw reply

* Re: [PATCH net-next 2/2] udp: Reset flow table for flows over unconnected sockets
From: Eric Dumazet @ 2014-10-28 19:59 UTC (permalink / raw)
  To: Tom Herbert; +Cc: David Miller, Linux Netdev List
In-Reply-To: <CA+mtBx_+cxm9DgH2WHJWeHMBx9oxnRFNRunBcy32Jz4yj_DYuA@mail.gmail.com>

On Tue, 2014-10-28 at 12:07 -0700, Tom Herbert wrote:

> As I said, for some applications (like DNS which I suspect you're
> basically emulating) it is infeasible to size the table. Try disabling
> RFS for your test.

Well, we already did experiments.

- DNS servers are using kernel bypass.
  Damn faster than SO_REUSEPORT on UDP anyway (Ying Cai is working on
this problem, since QUIC does not yet use kernel bypass and wants
FQ/pacing)

- Disable RFS for non TCP flows.

- Or have separate hash tables for TCP/UDP (slightly same effect, as UDP
table is mostly empty in our case)


Disabling RFS is the on/off behavior you seem to push, nice for
benchmarks without hassle.

I will no longer comment on this thread, it appears we disagree and wont
find an agreement.

^ permalink raw reply

* Re: [Patch net 2/2] net_sched: always call ->destroy when ->init() fails
From: David Miller @ 2014-10-28 19:58 UTC (permalink / raw)
  To: kaber
  Cc: cwang, eric.dumazet, xiyou.wangcong, netdev, wang.bo116,
	john.r.fastabend, edumazet, vtlam
In-Reply-To: <20141025010359.GD11289@acer.localdomain>

From: Patrick McHardy <kaber@trash.net>
Date: Sat, 25 Oct 2014 02:04:00 +0100

>> Really, we don't have to make all ->init() doing cleanup by itself.
> 
> Are you seriously suggesting that it would be better to have ->destroy()
> check what parts were actually initialized and what needs to be cleaned
> up instead of assuming a consistent state and have the only function that
> actually knows the current state on error (->init()) do its own cleanup?
> 
> That's not even worth arguing about, its utterly and completely wrong.

I agree with Patrick here.

^ permalink raw reply

* Re: irq disable in __netdev_alloc_frag() ?
From: Christoph Lameter @ 2014-10-28 19:46 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: Jesper Dangaard Brouer, Eric Dumazet, Alexander Duyck,
	Alexei Starovoitov, Network Development
In-Reply-To: <CANn89i+U0=YrwoUSASejsS37EiXO7dKR25Vx04at3PqGA1EpHA@mail.gmail.com>

On Mon, 27 Oct 2014, Eric Dumazet wrote:

> Unfortunately, SLUB is more expensive than SLAB for many networking workloads.

hackbench performs better with SLUB.

> The cost of disabling interrupts is pure noise compared to cache line misses.
>
> SLUB has poor behavior compared to SLAB with alien caches,
> even with the side effect that 'struct page' is 64 bytes aligned
> instead of being 56 bytes with SLAB
>
> Note that I am not doing SLUB/SLAB tests every day, so it might be
> better nowadays.

Well we did some intensive work on these issues a couple of years ago.

^ permalink raw reply

* Re: [PATCH net 0/3] cdc-ether: handle promiscuous mode
From: David Miller @ 2014-10-28 19:49 UTC (permalink / raw)
  To: olivier.blin; +Cc: netdev, oneukum, hayeswang, bjorn
In-Reply-To: <1414172582-30844-1-git-send-email-olivier.blin@softathome.com>

From: Olivier Blin <olivier.blin@softathome.com>
Date: Fri, 24 Oct 2014 19:42:59 +0200

> Since kernel 3.16, my Lenovo USB network adapters (RTL8153) using
> cdc-ether are not working anymore in a bridge.
> 
> This is due to commit c472ab68ad67db23c9907a27649b7dc0899b61f9, which
> resets the packet filter when the device is bound.
> 
> The default packet filter set by cdc-ether does not include
> promiscuous, while the adapter seemed to have promiscuous enabled by
> default.
> 
> This patch series allows to support promiscuous mode for cdc-ether, by
> hooking into set_rx_mode.
> 
> Incidentally, maybe this device should be handled by the r8152 driver,
> but this patch series is still nice for other adapters.

Can a usbnet expert please review this series?

Thanks.

^ permalink raw reply

* Re: [PATCH 1/1] drivers: net:cpsw: fix probe_dt when only slave 1 is pinned out
From: David Miller @ 2014-10-28 19:44 UTC (permalink / raw)
  To: mugunthanvnm; +Cc: netdev
In-Reply-To: <1414156893-1884-1-git-send-email-mugunthanvnm@ti.com>

From: Mugunthan V N <mugunthanvnm@ti.com>
Date: Fri, 24 Oct 2014 18:51:33 +0530

> when slave 0 has no phy and slave 1 connected to phy, driver probe will
> fail as there is no phy id present for slave 0 device tree, so continuing
> even though no phy-id found, also moving mac-id read later to ensure
> mac-id is read from device tree even when phy-id entry in not found.
> 
> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>

Applied, thanks.

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox