Netdev List
 help / color / mirror / Atom feed
* [PATCH v2 perf,bpf 08/11] perf, bpf: save btf information as headers to perf.data
From: Song Liu @ 2019-02-15  0:00 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: ast, daniel, kernel-team, peterz, acme, jolsa, namhyung, Song Liu
In-Reply-To: <20190215000010.2590505-1-songliubraving@fb.com>

This patch enables perf-record to save btf information as headers to
perf.data A new header type HEADER_BTF is introduced for this data.

Signed-off-by: Song Liu <songliubraving@fb.com>
---
 tools/perf/util/header.c | 99 +++++++++++++++++++++++++++++++++++++++-
 tools/perf/util/header.h |  1 +
 2 files changed, 99 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 2ae76a9d06f6..3f1562afe8e5 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -1125,6 +1125,45 @@ static int write_bpf_prog_info(struct feat_fd *ff,
 	return ret;
 }
 
+static int write_btf(struct feat_fd *ff,
+		     struct perf_evlist *evlist __maybe_unused)
+{
+	struct perf_env *env = &ff->ph->env;
+	struct rb_root *root;
+	struct rb_node *next;
+	u32 count = 0;
+	int ret;
+
+	down_read(&env->bpf_info_lock);
+
+	root = &env->btfs;
+	next = rb_first(root);
+	while (next) {
+		++count;
+		next = rb_next(next);
+	}
+
+	ret = do_write(ff, &count, sizeof(count));
+
+	if (ret < 0)
+		goto out;
+
+	next = rb_first(root);
+	while (next) {
+		struct btf_node *node;
+
+		node = rb_entry(next, struct btf_node, rb_node);
+		next = rb_next(&node->rb_node);
+		ret = do_write(ff, node,
+			       sizeof(struct btf_node) + node->data_size);
+		if (ret < 0)
+			goto out;
+	}
+out:
+	up_read(&env->bpf_info_lock);
+	return ret;
+}
+
 static int cpu_cache_level__sort(const void *a, const void *b)
 {
 	struct cpu_cache_level *cache_a = (struct cpu_cache_level *)a;
@@ -1628,6 +1667,28 @@ static void print_bpf_prog_info(struct feat_fd *ff, FILE *fp)
 	up_read(&env->bpf_info_lock);
 }
 
+static void print_btf(struct feat_fd *ff, FILE *fp)
+{
+	struct perf_env *env = &ff->ph->env;
+	struct rb_root *root;
+	struct rb_node *next;
+
+	down_read(&env->bpf_info_lock);
+
+	root = &env->btfs;
+	next = rb_first(root);
+
+	while (next) {
+		struct btf_node *node;
+
+		node = rb_entry(next, struct btf_node, rb_node);
+		next = rb_next(&node->rb_node);
+		fprintf(fp, "# bpf_prog_info of id %u\n", node->id);
+	}
+
+	up_read(&env->bpf_info_lock);
+}
+
 static void free_event_desc(struct perf_evsel *events)
 {
 	struct perf_evsel *evsel;
@@ -2723,6 +2784,41 @@ static int process_bpf_prog_info(struct feat_fd *ff,
 	return err;
 }
 
+static int process_btf(struct feat_fd *ff, void *data __maybe_unused)
+{
+	struct perf_env *env = &ff->ph->env;
+	u32 count, i;
+
+	if (do_read_u32(ff, &count))
+		return -1;
+
+	down_write(&env->bpf_info_lock);
+
+	for (i = 0; i < count; ++i) {
+		struct btf_node btf_node;
+		struct btf_node *node;
+
+		if (__do_read(ff, &btf_node, sizeof(struct btf_node)))
+			return -1;
+
+		node = malloc(sizeof(struct btf_node) + btf_node.data_size);
+		if (!node)
+			return -1;
+
+		node->id = btf_node.id;
+		node->data_size = btf_node.data_size;
+
+		if (__do_read(ff, node->data, btf_node.data_size)) {
+			free(node);
+			return -1;
+		}
+		perf_env__insert_btf(env, node);
+	}
+
+	up_write(&env->bpf_info_lock);
+	return 0;
+}
+
 struct feature_ops {
 	int (*write)(struct feat_fd *ff, struct perf_evlist *evlist);
 	void (*print)(struct feat_fd *ff, FILE *fp);
@@ -2783,7 +2879,8 @@ static const struct feature_ops feat_ops[HEADER_LAST_FEATURE] = {
 	FEAT_OPR(SAMPLE_TIME,	sample_time,	false),
 	FEAT_OPR(MEM_TOPOLOGY,	mem_topology,	true),
 	FEAT_OPR(CLOCKID,       clockid,        false),
-	FEAT_OPR(BPF_PROG_INFO, bpf_prog_info,  false)
+	FEAT_OPR(BPF_PROG_INFO, bpf_prog_info,  false),
+	FEAT_OPR(BTF,           btf,            false)
 };
 
 struct header_print_data {
diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h
index 0785c91b4c3a..ba51d8e43c53 100644
--- a/tools/perf/util/header.h
+++ b/tools/perf/util/header.h
@@ -40,6 +40,7 @@ enum {
 	HEADER_MEM_TOPOLOGY,
 	HEADER_CLOCKID,
 	HEADER_BPF_PROG_INFO,
+	HEADER_BTF,
 	HEADER_LAST_FEATURE,
 	HEADER_FEAT_BITS	= 256,
 };
-- 
2.17.1


^ permalink raw reply related

* [PATCH v2 perf,bpf 04/11] perf, bpf: synthesize bpf events with bpf_program__get_prog_info_linear()
From: Song Liu @ 2019-02-15  0:00 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: ast, daniel, kernel-team, peterz, acme, jolsa, namhyung, Song Liu
In-Reply-To: <20190215000010.2590505-1-songliubraving@fb.com>

With bpf_program__get_prog_info_linear, we can simplify the logic that
synthesizes bpf events.

This patch doesn't change the behavior of the code.

Signed-off-by: Song Liu <songliubraving@fb.com>
---
 tools/perf/util/bpf-event.c | 118 ++++++++++++------------------------
 1 file changed, 40 insertions(+), 78 deletions(-)

diff --git a/tools/perf/util/bpf-event.c b/tools/perf/util/bpf-event.c
index 796ef793f4ce..e6dfb95029e5 100644
--- a/tools/perf/util/bpf-event.c
+++ b/tools/perf/util/bpf-event.c
@@ -3,7 +3,9 @@
 #include <stdlib.h>
 #include <bpf/bpf.h>
 #include <bpf/btf.h>
+#include <bpf/libbpf.h>
 #include <linux/btf.h>
+#include <linux/err.h>
 #include "bpf-event.h"
 #include "debug.h"
 #include "symbol.h"
@@ -49,99 +51,62 @@ static int perf_event__synthesize_one_bpf_prog(struct perf_tool *tool,
 {
 	struct ksymbol_event *ksymbol_event = &event->ksymbol_event;
 	struct bpf_event *bpf_event = &event->bpf_event;
-	u32 sub_prog_cnt, i, func_info_rec_size = 0;
-	u8 (*prog_tags)[BPF_TAG_SIZE] = NULL;
-	struct bpf_prog_info info = { .type = 0, };
-	u32 info_len = sizeof(info);
-	void *func_infos = NULL;
-	u64 *prog_addrs = NULL;
+	struct bpf_prog_info_linear *info_linear;
+	struct bpf_prog_info *info;
 	struct btf *btf = NULL;
-	u32 *prog_lens = NULL;
 	bool has_btf = false;
-	char errbuf[512];
+	u32 sub_prog_cnt, i;
 	int err = 0;
+	u64 arrays;
 
-	/* Call bpf_obj_get_info_by_fd() to get sizes of arrays */
-	err = bpf_obj_get_info_by_fd(fd, &info, &info_len);
+	arrays = 1UL << BPF_PROG_INFO_JITED_KSYMS;
+	arrays |= 1UL << BPF_PROG_INFO_JITED_FUNC_LENS;
+	arrays |= 1UL << BPF_PROG_INFO_FUNC_INFO;
+	arrays |= 1UL << BPF_PROG_INFO_PROG_TAGS;
 
-	if (err) {
-		pr_debug("%s: failed to get BPF program info: %s, aborting\n",
-			 __func__, str_error_r(errno, errbuf, sizeof(errbuf)));
+	info_linear = bpf_program__get_prog_info_linear(fd, arrays);
+	if (IS_ERR_OR_NULL(info_linear)) {
+		info_linear = NULL;
+		pr_debug("%s: failed to get BPF program info. aborting\n", __func__);
 		return -1;
 	}
-	if (info_len < offsetof(struct bpf_prog_info, prog_tags)) {
+
+	if (info_linear->info_len < offsetof(struct bpf_prog_info, prog_tags)) {
 		pr_debug("%s: the kernel is too old, aborting\n", __func__);
 		return -2;
 	}
 
+	info = &info_linear->info;
+
 	/* number of ksyms, func_lengths, and tags should match */
-	sub_prog_cnt = info.nr_jited_ksyms;
-	if (sub_prog_cnt != info.nr_prog_tags ||
-	    sub_prog_cnt != info.nr_jited_func_lens)
+	sub_prog_cnt = info->nr_jited_ksyms;
+	if (sub_prog_cnt != info->nr_prog_tags ||
+	    sub_prog_cnt != info->nr_jited_func_lens)
 		return -1;
 
 	/* check BTF func info support */
-	if (info.btf_id && info.nr_func_info && info.func_info_rec_size) {
+	if (info->btf_id && info->nr_func_info && info->func_info_rec_size) {
 		/* btf func info number should be same as sub_prog_cnt */
-		if (sub_prog_cnt != info.nr_func_info) {
+		if (sub_prog_cnt != info->nr_func_info) {
 			pr_debug("%s: mismatch in BPF sub program count and BTF function info count, aborting\n", __func__);
-			return -1;
-		}
-		if (btf__get_from_id(info.btf_id, &btf)) {
-			pr_debug("%s: failed to get BTF of id %u, aborting\n", __func__, info.btf_id);
-			return -1;
+			err = -1;
+			goto out;
 		}
-		func_info_rec_size = info.func_info_rec_size;
-		func_infos = calloc(sub_prog_cnt, func_info_rec_size);
-		if (!func_infos) {
-			pr_debug("%s: failed to allocate memory for func_infos, aborting\n", __func__);
-			return -1;
+		if (btf__get_from_id(info->btf_id, &btf)) {
+			pr_debug("%s: failed to get BTF of id %u, aborting\n", __func__, info->btf_id);
+			err = -1;
+			btf = NULL;
+			goto out;
 		}
 		has_btf = true;
 	}
 
-	/*
-	 * We need address, length, and tag for each sub program.
-	 * Allocate memory and call bpf_obj_get_info_by_fd() again
-	 */
-	prog_addrs = calloc(sub_prog_cnt, sizeof(u64));
-	if (!prog_addrs) {
-		pr_debug("%s: failed to allocate memory for prog_addrs, aborting\n", __func__);
-		goto out;
-	}
-	prog_lens = calloc(sub_prog_cnt, sizeof(u32));
-	if (!prog_lens) {
-		pr_debug("%s: failed to allocate memory for prog_lens, aborting\n", __func__);
-		goto out;
-	}
-	prog_tags = calloc(sub_prog_cnt, BPF_TAG_SIZE);
-	if (!prog_tags) {
-		pr_debug("%s: failed to allocate memory for prog_tags, aborting\n", __func__);
-		goto out;
-	}
-
-	memset(&info, 0, sizeof(info));
-	info.nr_jited_ksyms = sub_prog_cnt;
-	info.nr_jited_func_lens = sub_prog_cnt;
-	info.nr_prog_tags = sub_prog_cnt;
-	info.jited_ksyms = ptr_to_u64(prog_addrs);
-	info.jited_func_lens = ptr_to_u64(prog_lens);
-	info.prog_tags = ptr_to_u64(prog_tags);
-	info_len = sizeof(info);
-	if (has_btf) {
-		info.nr_func_info = sub_prog_cnt;
-		info.func_info_rec_size = func_info_rec_size;
-		info.func_info = ptr_to_u64(func_infos);
-	}
-
-	err = bpf_obj_get_info_by_fd(fd, &info, &info_len);
-	if (err) {
-		pr_debug("%s: failed to get BPF program info, aborting\n", __func__);
-		goto out;
-	}
-
 	/* Synthesize PERF_RECORD_KSYMBOL */
 	for (i = 0; i < sub_prog_cnt; i++) {
+		u8 (*prog_tags)[BPF_TAG_SIZE] = (void *)(info->prog_tags);
+		__u32 *prog_lens = (__u32 *)(info->jited_func_lens);
+		__u64 *prog_addrs = (__u64 *)(info->jited_ksyms);
+		void *func_infos = (void *)(info->func_info);
 		const struct bpf_func_info *finfo;
 		const char *short_name = NULL;
 		const struct btf_type *t;
@@ -163,13 +128,13 @@ static int perf_event__synthesize_one_bpf_prog(struct perf_tool *tool,
 					 KSYM_NAME_LEN - name_len,
 					 prog_tags[i], BPF_TAG_SIZE);
 		if (has_btf) {
-			finfo = func_infos + i * info.func_info_rec_size;
+			finfo = func_infos + i * info->func_info_rec_size;
 			t = btf__type_by_id(btf, finfo->type_id);
 			short_name = btf__name_by_offset(btf, t->name_off);
 		} else if (i == 0 && sub_prog_cnt == 1) {
 			/* no subprog */
-			if (info.name[0])
-				short_name = info.name;
+			if (info->name[0])
+				short_name = info->name;
 		} else
 			short_name = "F";
 		if (short_name)
@@ -195,9 +160,9 @@ static int perf_event__synthesize_one_bpf_prog(struct perf_tool *tool,
 			},
 			.type = PERF_BPF_EVENT_PROG_LOAD,
 			.flags = 0,
-			.id = info.id,
+			.id = info->id,
 		};
-		memcpy(bpf_event->tag, prog_tags[i], BPF_TAG_SIZE);
+		memcpy(bpf_event->tag, info->tag, BPF_TAG_SIZE);
 		memset((void *)event + event->header.size, 0, machine->id_hdr_size);
 		event->header.size += machine->id_hdr_size;
 		err = perf_tool__process_synth_event(tool, event,
@@ -205,10 +170,7 @@ static int perf_event__synthesize_one_bpf_prog(struct perf_tool *tool,
 	}
 
 out:
-	free(prog_tags);
-	free(prog_lens);
-	free(prog_addrs);
-	free(func_infos);
+	free(info_linear);
 	free(btf);
 	return err ? -1 : 0;
 }
-- 
2.17.1


^ permalink raw reply related

* [PATCH v2 perf,bpf 01/11] perf, bpf: consider events with attr.bpf_event as side-band events
From: Song Liu @ 2019-02-14 23:58 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: ast, daniel, kernel-team, peterz, acme, jolsa, namhyung, Song Liu
In-Reply-To: <20190214235624.2579307-1-songliubraving@fb.com>

Events with bpf_event should be considered as side-band event, as they
carry information about BPF programs.

Fixes: 6ee52e2a3fe4 ("perf, bpf: Introduce PERF_RECORD_BPF_EVENT")
Signed-off-by: Song Liu <songliubraving@fb.com>
---
 kernel/events/core.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 0a8dab322111..9403bdda5f8c 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -4238,7 +4238,8 @@ static bool is_sb_event(struct perf_event *event)
 	if (attr->mmap || attr->mmap_data || attr->mmap2 ||
 	    attr->comm || attr->comm_exec ||
 	    attr->task || attr->ksymbol ||
-	    attr->context_switch)
+	    attr->context_switch ||
+	    attr->bpf_event)
 		return true;
 	return false;
 }
-- 
2.17.1


^ permalink raw reply related

* [PATCH v2 perf,bpf 00/11] perf annotation of BPF programs
From: Song Liu @ 2019-02-14 23:56 UTC (permalink / raw)
  To: linux-kernel, netdev
  Cc: acme, ast, daniel, jolsa, kernel-team, namhyung, peterz, Song Liu

Changes v1 to v2:
1. Fix compilation error with different feature-disassembler-four-args;
2. Fix a segfault in perf-record;
3. Split patches 5/9 and 6/9 so that perf_env changes and perf.data changes
   are in separate patches.

This series enables annotation of BPF programs in perf.

perf tool gathers information via sys_bpf and (optionally) stores them in
perf.data as headers.

Patch 1/11 fixes a minor issue in kernel;
Patch 2/11 to 4/11 introduce new helper functions and use them in perf and
     bpftool;
Patch 5/11 to 8/11 saves information of bpf program in perf_env;
Patch 9/11 adds --bpf-event options to perf-top;
Patch 10/11 enables annotation of bpf programs based on information
     gathered in 5/11 to 8/11;
Patch 11/11 handles information of short living BPF program that are loaded
     during perf-record or perf-top.

Commands tested during developments are perf-top, perf-record, perf-report,
and perf-annotate.

===================== Note on patch dependency  ========================
This set has dependency in both bpf-next tree and tip/perf/core. Current
version is developed on bpf-next tree with the following commits
cherry-picked from tip/perf/core:

(from 1/10 to 10/10)
commit 76193a94522f ("perf, bpf: Introduce PERF_RECORD_KSYMBOL")
commit d764ac646491 ("tools headers uapi: Sync tools/include/uapi/linux/perf_event.h")
commit 6ee52e2a3fe4 ("perf, bpf: Introduce PERF_RECORD_BPF_EVENT")
commit df063c83aa2c ("tools headers uapi: Sync tools/include/uapi/linux/perf_event.h")
commit 9aa0bfa370b2 ("perf tools: Handle PERF_RECORD_KSYMBOL")
commit 45178a928a4b ("perf tools: Handle PERF_RECORD_BPF_EVENT")
commit 7b612e291a5a ("perf tools: Synthesize PERF_RECORD_* for loaded BPF programs")
commit a40b95bcd30c ("perf top: Synthesize BPF events for pre-existing loaded BPF programs")
commit 6934058d9fb6 ("bpf: Add module name [bpf] to ksymbols for bpf programs")
commit 811184fb6977 ("perf bpf: Fix synthesized PERF_RECORD_KSYMBOL/BPF_EVENT")
========================================================================

This set is also available at:

https://github.com/liu-song-6/linux/tree/bpf-annotation

Thanks!!

Song Liu (11):
  perf, bpf: consider events with attr.bpf_event as side-band events
  bpf: libbpf: introduce bpf_program__get_prog_info_linear()
  bpf: bpftool: use bpf_program__get_prog_info_linear() in
    prog.c:do_dump()
  perf, bpf: synthesize bpf events with
    bpf_program__get_prog_info_linear()
  perf, bpf: save bpf_prog_info in a rbtree in perf_env
  perf, bpf: save bpf_prog_info information as headers to perf.data
  perf, bpf: save btf in a rbtree in perf_env
  perf, bpf: save btf information as headers to perf.data
  perf-top: add option --bpf-event
  perf, bpf: enable annotation of bpf program
  perf, bpf: save information about short living bpf programs

 kernel/events/core.c        |   3 +-
 tools/bpf/bpftool/prog.c    | 266 ++++++---------------------
 tools/lib/bpf/libbpf.c      | 251 +++++++++++++++++++++++++
 tools/lib/bpf/libbpf.h      |  63 +++++++
 tools/lib/bpf/libbpf.map    |   3 +
 tools/perf/Makefile.config  |   6 +-
 tools/perf/builtin-record.c |  15 +-
 tools/perf/builtin-top.c    |  15 +-
 tools/perf/util/annotate.c  | 149 ++++++++++++++-
 tools/perf/util/bpf-event.c | 354 +++++++++++++++++++++++++++---------
 tools/perf/util/bpf-event.h |  48 ++++-
 tools/perf/util/dso.c       |   1 +
 tools/perf/util/dso.h       |  33 ++--
 tools/perf/util/env.c       | 148 +++++++++++++++
 tools/perf/util/env.h       |  17 ++
 tools/perf/util/evlist.c    |  20 ++
 tools/perf/util/evlist.h    |   2 +
 tools/perf/util/header.c    | 231 ++++++++++++++++++++++-
 tools/perf/util/header.h    |   2 +
 tools/perf/util/symbol.c    |   1 +
 20 files changed, 1316 insertions(+), 312 deletions(-)

--
2.17.1

^ permalink raw reply

* RE:(2) [Bug reporting] kernel panic during handle the dst unreach icmp msg.
From: 배석진 @ 2019-02-14 23:54 UTC (permalink / raw)
  To: Eric Dumazet, 배석진, netdev@vger.kernel.org
  Cc: 박종언, Steffen Klassert, Herbert Xu
In-Reply-To: <da4182b2-61ab-3ac8-b8a7-1b2b90dcbd54@gmail.com>

> I do not believe this patch is needed.
>  
> You probably hit another more serious bug, but since you do not post the full stack trace
> it is hard to help.
>  
> Are you using vti tunnel ?

there's no working logs of vpn/vti/tun on platform or kernel history.
and callstack has no functions about that.
it looks like simple ipv4 usage.

attaching full dump info.
no additional bug or warning on entire kernel history.
anything about tun or kasan even onther.

thanks.


<4>[60392.948306] I[1:    ksoftirqd/1:   19] ------------[ cut here ]------------
<0>[60392.948334] I[1:    ksoftirqd/1:   19] kernel BUG at net/ipv4/tcp_ipv4.c:519!
<2>[60392.948344] I[1:    ksoftirqd/1:   19] sec_debug_set_extra_info_fault = BUG / 0xffffff80090351d0
<0>[60392.948386] I[1:    ksoftirqd/1:   19] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
<4>[60392.948395] I[1:    ksoftirqd/1:   19] Modules linked in:
<0>[60392.948408] I[1:    ksoftirqd/1:   19] debug-snapshot: core register saved(CPU:1)
<0>[60392.948416] I[1:    ksoftirqd/1:   19] DISR_EL1: 0000000000000000
<0>[60392.948425] I[1:    ksoftirqd/1:   19] DISR_EL1 valid_bit(31) is NOT set (0x0)
<0>[60392.948433] I[1:    ksoftirqd/1:   19] CPU : ERXSTATUS_EL1: 0000000000000000, ERXADDR_EL1: 0000000000000000, ERXMISC0_EL1: 0000000000000000
<0>[60392.948441] I[1:    ksoftirqd/1:   19] ERXSTATUS_EL1 valid_bit(30) is NOT set (0x0)
<0>[60392.948449] I[1:    ksoftirqd/1:   19] DSU : ERXSTATUS_EL1: 0000000000000000, ERXADDR_EL1: 0000000000000000, ERXMISC0_EL1: 0000000000000000
<0>[60392.948457] I[1:    ksoftirqd/1:   19] ERXSTATUS_EL1 valid_bit(30) is NOT set (0x0)
<0>[60392.948464] I[1:    ksoftirqd/1:   19] debug-snapshot: context saved(CPU:1)
<0>[60392.950562] I[1:    ksoftirqd/1:   19] ============ CPU Error Log Info after Cache flush ================
<0>[60392.950579] I[1:    ksoftirqd/1:   19] DISR_EL1: 0000000000000000
<0>[60392.950588] I[1:    ksoftirqd/1:   19] DISR_EL1 valid_bit(31) is NOT set (0x0)
<0>[60392.950596] I[1:    ksoftirqd/1:   19] CPU : ERXSTATUS_EL1: 0000000000000000, ERXADDR_EL1: 0000000000000000, ERXMISC0_EL1: 0000000000000000
<0>[60392.950604] I[1:    ksoftirqd/1:   19] ERXSTATUS_EL1 valid_bit(30) is NOT set (0x0)
<0>[60392.950611] I[1:    ksoftirqd/1:   19] DSU : ERXSTATUS_EL1: 0000000000000000, ERXADDR_EL1: 0000000000000000, ERXMISC0_EL1: 0000000000000000
<0>[60392.950619] I[1:    ksoftirqd/1:   19] ERXSTATUS_EL1 valid_bit(30) is NOT set (0x0)
<6>[60392.950631] I[1:    ksoftirqd/1:   19] debug-snapshot: item - log_kevents is disabled
<6>[60392.950638] I[1:    ksoftirqd/1:   19] TIF_FOREIGN_FPSTATE: 0, FP/SIMD depth 0, cpu: 0
<4>[60392.950648] I[1:    ksoftirqd/1:   19] CPU: 1 PID: 19 Comm: ksoftirqd/1 Tainted: G        W       4.14.85-15389299 #1
<4>[60392.950655] I[1:    ksoftirqd/1:   19] Hardware name: Samsung BEYOND2LTE KOR SINGLE 26 board based on EXYNOS9820 (DT)
<4>[60392.950664] I[1:    ksoftirqd/1:   19] task: ffffffc8f0c8c400 task.stack: ffffff800b958000
<4>[60392.950676] I[1:    ksoftirqd/1:   19] PC is at tcp_v4_err+0x4b0/0x4bc
<4>[60392.950684] I[1:    ksoftirqd/1:   19] LR is at tcp_v4_err+0x3ac/0x4bc
<4>[60392.950692] I[1:    ksoftirqd/1:   19] pc : [<ffffff80090351d0>] lr : [<ffffff80090350cc>] pstate: 60c00145
<4>[60392.950698] I[1:    ksoftirqd/1:   19] sp : ffffff800b95b940
<4>[60392.950705] I[1:    ksoftirqd/1:   19] x29: ffffff800b95b990 x28: ffffffc82fe10c2c 
<4>[60392.950714] I[1:    ksoftirqd/1:   19] x27: 0000000000000003 x26: 0000000000000001 
<4>[60392.950723] I[1:    ksoftirqd/1:   19] x25: ffffffc0051e5e00 x24: ffffff800aaebc80 
<4>[60392.950732] I[1:    ksoftirqd/1:   19] x23: ffffffc0051e5f58 x22: 0000000000000000 
<4>[60392.950741] I[1:    ksoftirqd/1:   19] x21: 0000000000000071 x20: ffffffc0051e5e88 
<4>[60392.950750] I[1:    ksoftirqd/1:   19] x19: ffffffc0051e5e00 x18: 0000000000000001 
<4>[60392.950760] I[1:    ksoftirqd/1:   19] x17: 0000000000000400 x16: 0000000000000000 
<4>[60392.950769] I[1:    ksoftirqd/1:   19] x15: ffffffffffffffff x14: 0000000000000000 
<4>[60392.950778] I[1:    ksoftirqd/1:   19] x13: 0000000000000002 x12: 0000000000000000 
<4>[60392.950787] I[1:    ksoftirqd/1:   19] x11: ffffffc0051e5f58 x10: 0000000000007530 
<4>[60392.950796] I[1:    ksoftirqd/1:   19] x9 : 0000000000000020 x8 : 0000000000000200 
<4>[60392.950806] I[1:    ksoftirqd/1:   19] x7 : 0000000000000000 x6 : 0000000000000010 
<4>[60392.950815] I[1:    ksoftirqd/1:   19] x5 : 000000000000808c x4 : 000000000000bb01 
<4>[60392.950825] I[1:    ksoftirqd/1:   19] x3 : 00000000831fd9ac x2 : 000000000000808c 
<4>[60392.950834] I[1:    ksoftirqd/1:   19] x1 : 000000000200a8c0 x0 : 0000000000000040 
<4>[60392.950844] I[1:    ksoftirqd/1:   19] 
<4>[60392.950844] I[1:    ksoftirqd/1:   19] PC: 0xffffff80090350d0:
<4>[60392.950855] I[1:    ksoftirqd/1:   19] 50d0 : 92407C08 14000009 AA1303E0 97FFFE97 17FFFFD0 F940CB08 D538D089 9108E108
<4>[60392.950872] I[1:    ksoftirqd/1:   19] 50f0 : 17FFFF78 52801F48 12001D29 F940AE77 9AC92108 D344FD09 528EA60A 9105626B
<4>[60392.950888] I[1:    ksoftirqd/1:   19] 5110 : F11D4D3F 9A8A3108 EB0B02FF B9072268 54000580 B4000577 97C9A4D3 D29EF9EA
<4>[60392.950903] I[1:    ksoftirqd/1:   19] 5130 : F2BC6A6A F9444A68 F2D374AA D343FC09 F2E4188A 9BCA7D29 D344FD29 EB08013F
<4>[60392.950919] I[1:    ksoftirqd/1:   19] 5150 : 54000069 AA0903E8 F9044A69 B94022E9 B9472277 4B090100 97C94F99 CB0002E8
<4>[60392.950934] I[1:    ksoftirqd/1:   19] 5170 : 7100051F 5400022B 320003EA B000A74B 391D4A6A 93407D08 F945416A D344FD0B
<4>[60392.950951] I[1:    ksoftirqd/1:   19] 5190 : 528EA609 F11D4D7F 9A893108 8B080142 911A4261 AA1303E0 F9034662 97FCBBB7
<4>[60392.950967] I[1:    ksoftirqd/1:   19] 51b0 : AA1603E8 17FFFF86 F9455668 AA1303E0 F9402D08 94063788 AA1603E8 17FFFF80
<4>[60392.950982] I[1:    ksoftirqd/1:   19] 51d0 : D4210000 14000000 00BE7BAD F81C0FF7 A90157F6 A9024FF4 A9037BFD 9100C3FD
<4>[60392.950997] I[1:    ksoftirqd/1:   19] 51f0 : AA0003F6 B940AAC8 F9407AC9 7941BECA B9409AD7 2A2803E8 2A0203F4 2A0103F5
<4>[60392.951012] I[1:    ksoftirqd/1:   19] 5210 : 721B051F 8B0A0133 54000201 321F07E3 2A1503E0 2A1403E1 2A1703E2 2A1F03E4
<4>[60392.951028] I[1:    ksoftirqd/1:   19] 5230 : 97D8189D 13804008 0B000108 53107D08 79002268 7941BEC8 321C03E9 790166C9
<4>[60392.951043] I[1:    ksoftirqd/1:   19] 5250 : 790162C8 14000012 79401A68 B940B2C2 AA1303E0 53027D08 121E0D01 97D8177A
<4>[60392.951058] I[1:    ksoftirqd/1:   19] 5270 : 2A0003E4 321F07E3 2A1503E0 2A1403E1 2A1703E2 97D81888 13804008 0B000108
<4>[60392.951073] I[1:    ksoftirqd/1:   19] 5290 : 12800009 4A484128 79002268 A9437BFD A9424FF4 A94157F6 F84407F7 D65F03C0
<4>[60392.951089] I[1:    ksoftirqd/1:   19] 52b0 : 00BE7BAD A9BF7BFD 910003FD B9458008 B9400002 AA0103E0 2A0803E1 97FFFFC4
<4>[60392.951105] I[1:    ksoftirqd/1:   19] 
<4>[60392.951105] I[1:    ksoftirqd/1:   19] LR: 0xffffff8009034fcc:
<4>[60392.951116] I[1:    ksoftirqd/1:   19] 4fcc : 39404A69 121F1929 7100093F 540001A1 B4000068 F9407508 B4000148 B9408F28
<4>[60392.951131] I[1:    ksoftirqd/1:   19] 4fec : 35000188 F942A668 AA1303E0 B9022E75 940637FA AA1303E0 97FFAE89 14000006
<4>[60392.951147] I[1:    ksoftirqd/1:   19] 500c : B9408F28 35000068 39568268 37000208 B9023275 AA1403E0 94061649 91020260
<4>[60392.951162] I[1:    ksoftirqd/1:   19] 502c : 97D6FDEE 36000060 AA1303E0 97FCB533 A9457BFD A9444FF4 A94357F6 A9425FF8
<4>[60392.951177] I[1:    ksoftirqd/1:   19] 504c : A94167FA A8C66FFC D65F03C0 F942A668 AA1303E0 B9022E75 940637E0 17FFFFEE
<4>[60392.951193] I[1:    ksoftirqd/1:   19] 506c : D00030CB D37DF34A 9114816B B86A6975 7100075F 54FFFA68 B9400129 6B0902FF
<4>[60392.951208] I[1:    ksoftirqd/1:   19] 508c : 54FFFA01 395D4669 34FFF9C9 B5FFF9A8 395D4E69 34FFF969 B9408F2A 35FFF92A
<4>[60392.951223] I[1:    ksoftirqd/1:   19] 50ac : AA0803F6 B9489A68 51000529 391D4E69 340001C8 B948A669 0B480D20 97C94FC1
<4>[60392.951238] I[1:    ksoftirqd/1:   19] 50cc : 395D4E69 92407C08 14000009 AA1303E0 97FFFE97 17FFFFD0 F940CB08 D538D089
<4>[60392.951254] I[1:    ksoftirqd/1:   19] 50ec : 9108E108 17FFFF78 52801F48 12001D29 F940AE77 9AC92108 D344FD09 528EA60A
<4>[60392.951269] I[1:    ksoftirqd/1:   19] 510c : 9105626B F11D4D3F 9A8A3108 EB0B02FF B9072268 54000580 B4000577 97C9A4D3
<4>[60392.951283] I[1:    ksoftirqd/1:   19] 512c : D29EF9EA F2BC6A6A F9444A68 F2D374AA D343FC09 F2E4188A 9BCA7D29 D344FD29
<4>[60392.951299] I[1:    ksoftirqd/1:   19] 514c : EB08013F 54000069 AA0903E8 F9044A69 B94022E9 B9472277 4B090100 97C94F99
<4>[60392.951314] I[1:    ksoftirqd/1:   19] 516c : CB0002E8 7100051F 5400022B 320003EA B000A74B 391D4A6A 93407D08 F945416A
<4>[60392.951328] I[1:    ksoftirqd/1:   19] 518c : D344FD0B 528EA609 F11D4D7F 9A893108 8B080142 911A4261 AA1303E0 F9034662
<4>[60392.951344] I[1:    ksoftirqd/1:   19] 51ac : 97FCBBB7 AA1603E8 17FFFF86 F9455668 AA1303E0 F9402D08 94063788 AA1603E8
<4>[60392.951358] I[1:    ksoftirqd/1:   19] 
<4>[60392.951358] I[1:    ksoftirqd/1:   19] SP: 0xffffff800b95b840:
<4>[60392.951369] I[1:    ksoftirqd/1:   19] b840 : 0B95BA88 FFFFFF80 00002752 00000000 0B95B9A0 FFFFFF80 00000001 00000000
<4>[60392.951384] I[1:    ksoftirqd/1:   19] b860 : 00000001 00000000 051E5E00 FFFFFFC0 0B95B8E0 FFFFFF80 09001E50 FFFFFF80
<4>[60392.951398] I[1:    ksoftirqd/1:   19] b880 : 0B95B8E0 FFFFFF80 EE595D00 B254C55C EF89B000 FFFFFFC8 EE595D00 B254C55C
<4>[60392.951412] I[1:    ksoftirqd/1:   19] b8a0 : 2FE10C24 FFFFFFC8 36B80010 FFFFFFC0 0B2D8880 FFFFFF80 0AAEBC80 FFFFFF80
<4>[60392.951426] I[1:    ksoftirqd/1:   19] b8c0 : 00000010 00000000 00000000 00000000 0B95B930 FFFFFF80 09015704 FFFFFF80
<4>[60392.951440] I[1:    ksoftirqd/1:   19] b8e0 : 00000003 00000000 0906F3D0 FFFFFF80 00000001 00000000 EF89B000 FFFFFFC8
<4>[60392.951454] I[1:    ksoftirqd/1:   19] b900 : 0AAEBC80 FFFFFF80 2FE10C24 FFFFFFC8 00000000 00000000 00000000 FFFFFFC8
<4>[60392.951468] I[1:    ksoftirqd/1:   19] b920 : 00780078 FFFFFFC8 EE595D00 B254C55C 0B95B990 FFFFFF80 09034E40 FFFFFF80
<4>[60392.951482] I[1:    ksoftirqd/1:   19] b940 : 0A5386B0 FFFFFF80 0A540FD0 FFFFFF80 EF89B0A0 FFFFFFC8 EF89B000 FFFFFFC8
<4>[60392.951496] I[1:    ksoftirqd/1:   19] b960 : 00000008 00000000 2FE10C24 FFFFFFC8 00000000 00000000 00000006 00000000
<4>[60392.951511] I[1:    ksoftirqd/1:   19] b980 : 00000000 00000000 1EEBFB80 FFFFFFC8 0B95B9C0 FFFFFF80 0904A990 FFFFFF80
<4>[60392.951526] I[1:    ksoftirqd/1:   19] b9a0 : 0AAEBC80 FFFFFF80 36B82128 FFFFFFC0 2FE10C2C FFFFFFC8 1EEBFB80 FFFFFFC8
<4>[60392.951541] I[1:    ksoftirqd/1:   19] b9c0 : 0B95BA00 FFFFFF80 0904A6D0 FFFFFF80 1EEBFC18 FFFFFFC8 EE595D00 B254C55C
<4>[60392.951556] I[1:    ksoftirqd/1:   19] b9e0 : 0A540578 FFFFFF80 12995900 FFFFFFC0 0AAEBC80 FFFFFF80 1EEBFB80 FFFFFFC8
<4>[60392.951570] I[1:    ksoftirqd/1:   19] ba00 : 0B95BA40 FFFFFF80 0904A3AC FFFFFF80 00000008 00000000 1EEBFC18 FFFFFFC8
<4>[60392.951586] I[1:    ksoftirqd/1:   19] ba20 : 0A540578 FFFFFF80 0964F9E8 FFFFFF80 0AAEBC80 FFFFFF80 1EEBFB80 FFFFFFC8
<4>[60392.951605] I[1:    ksoftirqd/1:   19] 
<4>[60392.951605] I[1:    ksoftirqd/1:   19] X7: 0xffffffffffffff00:
<4>[60392.951616] I[1:    ksoftirqd/1:   19] ff00 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951637] I[1:    ksoftirqd/1:   19] ff20 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951655] I[1:    ksoftirqd/1:   19] ff40 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951671] I[1:    ksoftirqd/1:   19] ff60 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951696] I[1:    ksoftirqd/1:   19] ff80 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951713] I[1:    ksoftirqd/1:   19] ffa0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951730] I[1:    ksoftirqd/1:   19] ffc0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951747] I[1:    ksoftirqd/1:   19] ffe0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951764] I[1:    ksoftirqd/1:   19] 0000 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951780] I[1:    ksoftirqd/1:   19] 0020 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951797] I[1:    ksoftirqd/1:   19] 0040 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951814] I[1:    ksoftirqd/1:   19] 0060 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951831] I[1:    ksoftirqd/1:   19] 0080 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951849] I[1:    ksoftirqd/1:   19] 00a0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951867] I[1:    ksoftirqd/1:   19] 00c0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951884] I[1:    ksoftirqd/1:   19] 00e0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.951902] I[1:    ksoftirqd/1:   19] 
<4>[60392.951902] I[1:    ksoftirqd/1:   19] X11: 0xffffffc0051e5e58:
<4>[60392.951914] I[1:    ksoftirqd/1:   19] 5e58 : 00017031 00000000 00004301 00000000 0000FD75 00000000 EE63F5D0 FFFFFFC8
<4>[60392.951930] I[1:    ksoftirqd/1:   19] 5e78 : FFFFFFFF 00000004 00000003 00000000 00790078 00000000 00000000 00000000
<4>[60392.951945] I[1:    ksoftirqd/1:   19] 5e98 : 051E5E98 FFFFFFC0 051E5E98 FFFFFFC0 00000000 00000001 051E5EB0 FFFFFFC0
<4>[60392.951961] I[1:    ksoftirqd/1:   19] 5eb8 : 051E5EB0 FFFFFFC0 00000000 00000000 051E5EC8 FFFFFFC0 051E5EC8 FFFFFFC0
<4>[60392.951975] I[1:    ksoftirqd/1:   19] 5ed8 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.951990] I[1:    ksoftirqd/1:   19] 5ef8 : 00000000 00000000 00000000 00123900 00000000 00000000 00000000 00000000
<4>[60392.952005] I[1:    ksoftirqd/1:   19] 5f18 : 00000000 00000000 00000000 00000000 42FCE000 FFFFFFC8 00000000 00000000
<4>[60392.952020] I[1:    ksoftirqd/1:   19] 5f38 : 00000000 00100000 00000000 00000001 00000000 00000000 00000000 00000000
<4>[60392.952035] I[1:    ksoftirqd/1:   19] 5f58 : 051E5F58 FFFFFFC0 051E5F58 FFFFFFC0 00000000 00000000 FFFFFFFF 00000000
<4>[60392.952050] I[1:    ksoftirqd/1:   19] 5f78 : 00000000 00000000 FFFFFFFF 7FFFFFFF 00000000 00000000 00000000 00000000
<4>[60392.952065] I[1:    ksoftirqd/1:   19] 5f98 : 00000000 00000000 090343B0 FFFFFF80 051E5E00 FFFFFFC0 00000001 FFFFFFFF
<4>[60392.952079] I[1:    ksoftirqd/1:   19] 5fb8 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 000C026F
<4>[60392.952094] I[1:    ksoftirqd/1:   19] 5fd8 : 0007C913 FFFFFFFF 00000000 00000000 00000000 00000000 00006000 00000000
<4>[60392.952109] I[1:    ksoftirqd/1:   19] 5ff8 : 00000000 00000000 00000001 00000000 014000C0 43A820B3 00010600 00000001
<4>[60392.952124] I[1:    ksoftirqd/1:   19] 6018 : 00000000 00000000 0AAF9E10 FFFFFF80 00000000 00000000 00000071 00000000
<4>[60392.952139] I[1:    ksoftirqd/1:   19] 6038 : 00000000 00002752 00000000 00000000 00000000 00000000 FFFFFFFF 7FFFFFFF
<4>[60392.952155] I[1:    ksoftirqd/1:   19] 
<4>[60392.952155] I[1:    ksoftirqd/1:   19] X12: 0xffffffffffffff00:
<4>[60392.952166] I[1:    ksoftirqd/1:   19] ff00 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952183] I[1:    ksoftirqd/1:   19] ff20 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952199] I[1:    ksoftirqd/1:   19] ff40 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952216] I[1:    ksoftirqd/1:   19] ff60 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952232] I[1:    ksoftirqd/1:   19] ff80 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952249] I[1:    ksoftirqd/1:   19] ffa0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952266] I[1:    ksoftirqd/1:   19] ffc0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952283] I[1:    ksoftirqd/1:   19] ffe0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952300] I[1:    ksoftirqd/1:   19] 0000 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952317] I[1:    ksoftirqd/1:   19] 0020 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952333] I[1:    ksoftirqd/1:   19] 0040 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952350] I[1:    ksoftirqd/1:   19] 0060 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952366] I[1:    ksoftirqd/1:   19] 0080 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952383] I[1:    ksoftirqd/1:   19] 00a0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952401] I[1:    ksoftirqd/1:   19] 00c0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952417] I[1:    ksoftirqd/1:   19] 00e0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952436] I[1:    ksoftirqd/1:   19] 
<4>[60392.952436] I[1:    ksoftirqd/1:   19] X14: 0xffffffffffffff00:
<4>[60392.952447] I[1:    ksoftirqd/1:   19] ff00 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952467] I[1:    ksoftirqd/1:   19] ff20 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952483] I[1:    ksoftirqd/1:   19] ff40 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952499] I[1:    ksoftirqd/1:   19] ff60 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952516] I[1:    ksoftirqd/1:   19] ff80 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952532] I[1:    ksoftirqd/1:   19] ffa0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952548] I[1:    ksoftirqd/1:   19] ffc0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952563] I[1:    ksoftirqd/1:   19] ffe0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952580] I[1:    ksoftirqd/1:   19] 0000 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952596] I[1:    ksoftirqd/1:   19] 0020 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952612] I[1:    ksoftirqd/1:   19] 0040 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952628] I[1:    ksoftirqd/1:   19] 0060 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952645] I[1:    ksoftirqd/1:   19] 0080 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952661] I[1:    ksoftirqd/1:   19] 00a0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952677] I[1:    ksoftirqd/1:   19] 00c0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952693] I[1:    ksoftirqd/1:   19] 00e0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952710] I[1:    ksoftirqd/1:   19] 
<4>[60392.952710] I[1:    ksoftirqd/1:   19] X15: 0xfffffffffffffeff:
<4>[60392.952721] I[1:    ksoftirqd/1:   19] fefc : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952737] I[1:    ksoftirqd/1:   19] ff1c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952753] I[1:    ksoftirqd/1:   19] ff3c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952768] I[1:    ksoftirqd/1:   19] ff5c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952784] I[1:    ksoftirqd/1:   19] ff7c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952799] I[1:    ksoftirqd/1:   19] ff9c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952815] I[1:    ksoftirqd/1:   19] ffbc : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952830] I[1:    ksoftirqd/1:   19] ffdc : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952846] I[1:    ksoftirqd/1:   19] fffc : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952861] I[1:    ksoftirqd/1:   19] 001c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952877] I[1:    ksoftirqd/1:   19] 003c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952893] I[1:    ksoftirqd/1:   19] 005c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952910] I[1:    ksoftirqd/1:   19] 007c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952926] I[1:    ksoftirqd/1:   19] 009c : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952944] I[1:    ksoftirqd/1:   19] 00bc : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952960] I[1:    ksoftirqd/1:   19] 00dc : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952976] I[1:    ksoftirqd/1:   19] 00fc : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.952993] I[1:    ksoftirqd/1:   19] 
<4>[60392.952993] I[1:    ksoftirqd/1:   19] X16: 0xffffffffffffff00:
<4>[60392.953004] I[1:    ksoftirqd/1:   19] ff00 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953020] I[1:    ksoftirqd/1:   19] ff20 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953036] I[1:    ksoftirqd/1:   19] ff40 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953052] I[1:    ksoftirqd/1:   19] ff60 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953068] I[1:    ksoftirqd/1:   19] ff80 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953084] I[1:    ksoftirqd/1:   19] ffa0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953099] I[1:    ksoftirqd/1:   19] ffc0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953115] I[1:    ksoftirqd/1:   19] ffe0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953130] I[1:    ksoftirqd/1:   19] 0000 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953146] I[1:    ksoftirqd/1:   19] 0020 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953162] I[1:    ksoftirqd/1:   19] 0040 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953178] I[1:    ksoftirqd/1:   19] 0060 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953194] I[1:    ksoftirqd/1:   19] 0080 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953210] I[1:    ksoftirqd/1:   19] 00a0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953226] I[1:    ksoftirqd/1:   19] 00c0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953242] I[1:    ksoftirqd/1:   19] 00e0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953259] I[1:    ksoftirqd/1:   19] 
<4>[60392.953259] I[1:    ksoftirqd/1:   19] X19: 0xffffffc0051e5d00:
<4>[60392.953270] I[1:    ksoftirqd/1:   19] 5d00 : 00000000 00000000 00000000 00000000 E745D5E7 496DFBF1 00000000 00000000
<4>[60392.953285] I[1:    ksoftirqd/1:   19] 5d20 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.953300] I[1:    ksoftirqd/1:   19] 5d40 : 00000000 00000000 00000000 00000000 00000000 00000000 FFFF0000 0200A8C0
<4>[60392.953314] I[1:    ksoftirqd/1:   19] 5d60 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.953328] I[1:    ksoftirqd/1:   19] 5d80 : 00000000 00000000 0081FF80 00000000 00000000 00080000 00000000 00000000
<4>[60392.953342] I[1:    ksoftirqd/1:   19] 5da0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.953356] I[1:    ksoftirqd/1:   19] 5dc0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.953370] I[1:    ksoftirqd/1:   19] 5de0 : 00000000 00000000 051E0BC0 FFFFFFC0 00000085 00000000 3C0ADD53 FCA9C68D
<4>[60392.953384] I[1:    ksoftirqd/1:   19] 5e00 : 831FD9AC 0200A8C0 EEE47EBA 808CBB01 4004000A 00000000 00000000 00000000
<4>[60392.953398] I[1:    ksoftirqd/1:   19] 5e20 : BC8B82B8 FFFFFFC8 0AAF9E10 FFFFFF80 0AAEBC80 FFFFFF80 00000000 00000000
<4>[60392.953412] I[1:    ksoftirqd/1:   19] 5e40 : FFFF0000 831FD9AC 00000000 00000000 FFFF0000 0200A8C0 00017031 00000000
<4>[60392.953427] I[1:    ksoftirqd/1:   19] 5e60 : 00004301 00000000 0000FD75 00000000 EE63F5D0 FFFFFFC8 FFFFFFFF 00000004
<4>[60392.953441] I[1:    ksoftirqd/1:   19] 5e80 : 00000003 00000000 00790078 00000000 00000000 00000000 051E5E98 FFFFFFC0
<4>[60392.953455] I[1:    ksoftirqd/1:   19] 5ea0 : 051E5E98 FFFFFFC0 00000000 00000001 051E5EB0 FFFFFFC0 051E5EB0 FFFFFFC0
<4>[60392.953469] I[1:    ksoftirqd/1:   19] 5ec0 : 00000000 00000000 051E5EC8 FFFFFFC0 051E5EC8 FFFFFFC0 00000000 00000000
<4>[60392.953483] I[1:    ksoftirqd/1:   19] 5ee0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.953498] I[1:    ksoftirqd/1:   19] 
<4>[60392.953498] I[1:    ksoftirqd/1:   19] X20: 0xffffffc0051e5d88:
<4>[60392.953509] I[1:    ksoftirqd/1:   19] 5d88 : 0081FF80 00000000 00000000 00080000 00000000 00000000 00000000 00000000
<4>[60392.953523] I[1:    ksoftirqd/1:   19] 5da8 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.953537] I[1:    ksoftirqd/1:   19] 5dc8 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.953551] I[1:    ksoftirqd/1:   19] 5de8 : 051E0BC0 FFFFFFC0 00000085 00000000 3C0ADD53 FCA9C68D 831FD9AC 0200A8C0
<4>[60392.953565] I[1:    ksoftirqd/1:   19] 5e08 : EEE47EBA 808CBB01 4004000A 00000000 00000000 00000000 BC8B82B8 FFFFFFC8
<4>[60392.953580] I[1:    ksoftirqd/1:   19] 5e28 : 0AAF9E10 FFFFFF80 0AAEBC80 FFFFFF80 00000000 00000000 FFFF0000 831FD9AC
<4>[60392.953594] I[1:    ksoftirqd/1:   19] 5e48 : 00000000 00000000 FFFF0000 0200A8C0 00017031 00000000 00004301 00000000
<4>[60392.953608] I[1:    ksoftirqd/1:   19] 5e68 : 0000FD75 00000000 EE63F5D0 FFFFFFC8 FFFFFFFF 00000004 00000003 00000000
<4>[60392.953622] I[1:    ksoftirqd/1:   19] 5e88 : 00790078 00000000 00000000 00000000 051E5E98 FFFFFFC0 051E5E98 FFFFFFC0
<4>[60392.953636] I[1:    ksoftirqd/1:   19] 5ea8 : 00000000 00000001 051E5EB0 FFFFFFC0 051E5EB0 FFFFFFC0 00000000 00000000
<4>[60392.953650] I[1:    ksoftirqd/1:   19] 5ec8 : 051E5EC8 FFFFFFC0 051E5EC8 FFFFFFC0 00000000 00000000 00000000 00000000
<4>[60392.953664] I[1:    ksoftirqd/1:   19] 5ee8 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00123900
<4>[60392.953678] I[1:    ksoftirqd/1:   19] 5f08 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.953692] I[1:    ksoftirqd/1:   19] 5f28 : 42FCE000 FFFFFFC8 00000000 00000000 00000000 00100000 00000000 00000001
<4>[60392.953706] I[1:    ksoftirqd/1:   19] 5f48 : 00000000 00000000 00000000 00000000 051E5F58 FFFFFFC0 051E5F58 FFFFFFC0
<4>[60392.953720] I[1:    ksoftirqd/1:   19] 5f68 : 00000000 00000000 FFFFFFFF 00000000 00000000 00000000 FFFFFFFF 7FFFFFFF
<4>[60392.953736] I[1:    ksoftirqd/1:   19] 
<4>[60392.953736] I[1:    ksoftirqd/1:   19] X22: 0xffffffffffffff00:
<4>[60392.953747] I[1:    ksoftirqd/1:   19] ff00 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953764] I[1:    ksoftirqd/1:   19] ff20 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953779] I[1:    ksoftirqd/1:   19] ff40 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953795] I[1:    ksoftirqd/1:   19] ff60 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953813] I[1:    ksoftirqd/1:   19] ff80 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953830] I[1:    ksoftirqd/1:   19] ffa0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953846] I[1:    ksoftirqd/1:   19] ffc0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953862] I[1:    ksoftirqd/1:   19] ffe0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953877] I[1:    ksoftirqd/1:   19] 0000 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953893] I[1:    ksoftirqd/1:   19] 0020 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953909] I[1:    ksoftirqd/1:   19] 0040 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953925] I[1:    ksoftirqd/1:   19] 0060 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953941] I[1:    ksoftirqd/1:   19] 0080 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953957] I[1:    ksoftirqd/1:   19] 00a0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953973] I[1:    ksoftirqd/1:   19] 00c0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.953989] I[1:    ksoftirqd/1:   19] 00e0 : ******** ******** ******** ******** ******** ******** ******** ********
<4>[60392.954007] I[1:    ksoftirqd/1:   19] 
<4>[60392.954007] I[1:    ksoftirqd/1:   19] X23: 0xffffffc0051e5e58:
<4>[60392.954019] I[1:    ksoftirqd/1:   19] 5e58 : 00017031 00000000 00004301 00000000 0000FD75 00000000 EE63F5D0 FFFFFFC8
<4>[60392.954034] I[1:    ksoftirqd/1:   19] 5e78 : FFFFFFFF 00000004 00000003 00000000 00790078 00000000 00000000 00000000
<4>[60392.954048] I[1:    ksoftirqd/1:   19] 5e98 : 051E5E98 FFFFFFC0 051E5E98 FFFFFFC0 00000000 00000001 051E5EB0 FFFFFFC0
<4>[60392.954062] I[1:    ksoftirqd/1:   19] 5eb8 : 051E5EB0 FFFFFFC0 00000000 00000000 051E5EC8 FFFFFFC0 051E5EC8 FFFFFFC0
<4>[60392.954077] I[1:    ksoftirqd/1:   19] 5ed8 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954091] I[1:    ksoftirqd/1:   19] 5ef8 : 00000000 00000000 00000000 00123900 00000000 00000000 00000000 00000000
<4>[60392.954105] I[1:    ksoftirqd/1:   19] 5f18 : 00000000 00000000 00000000 00000000 42FCE000 FFFFFFC8 00000000 00000000
<4>[60392.954119] I[1:    ksoftirqd/1:   19] 5f38 : 00000000 00100000 00000000 00000001 00000000 00000000 00000000 00000000
<4>[60392.954135] I[1:    ksoftirqd/1:   19] 5f58 : 051E5F58 FFFFFFC0 051E5F58 FFFFFFC0 00000000 00000000 FFFFFFFF 00000000
<4>[60392.954149] I[1:    ksoftirqd/1:   19] 5f78 : 00000000 00000000 FFFFFFFF 7FFFFFFF 00000000 00000000 00000000 00000000
<4>[60392.954163] I[1:    ksoftirqd/1:   19] 5f98 : 00000000 00000000 090343B0 FFFFFF80 051E5E00 FFFFFFC0 00000001 FFFFFFFF
<4>[60392.954178] I[1:    ksoftirqd/1:   19] 5fb8 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 000C026F
<4>[60392.954192] I[1:    ksoftirqd/1:   19] 5fd8 : 0007C913 FFFFFFFF 00000000 00000000 00000000 00000000 00006000 00000000
<4>[60392.954206] I[1:    ksoftirqd/1:   19] 5ff8 : 00000000 00000000 00000001 00000000 014000C0 43A820B3 00010600 00000001
<4>[60392.954220] I[1:    ksoftirqd/1:   19] 6018 : 00000000 00000000 0AAF9E10 FFFFFF80 00000000 00000000 00000071 00000000
<4>[60392.954234] I[1:    ksoftirqd/1:   19] 6038 : 00000000 00002752 00000000 00000000 00000000 00000000 FFFFFFFF 7FFFFFFF
<4>[60392.954249] I[1:    ksoftirqd/1:   19] 
<4>[60392.954249] I[1:    ksoftirqd/1:   19] X24: 0xffffff800aaebb80:
<4>[60392.954261] I[1:    ksoftirqd/1:   19] bb80 : 0AAEEB88 FFFFFF80 0AB08710 FFFFFF80 08F65024 FFFFFF80 08F65060 FFFFFF80
<4>[60392.954275] I[1:    ksoftirqd/1:   19] bba0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954289] I[1:    ksoftirqd/1:   19] bbc0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954303] I[1:    ksoftirqd/1:   19] bbe0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954318] I[1:    ksoftirqd/1:   19] bc00 : 00000000 00000000 00000000 00000000 0AAEBC10 FFFFFF80 0AAEBC10 FFFFFF80
<4>[60392.954333] I[1:    ksoftirqd/1:   19] bc20 : 0AAEBC98 FFFFFF80 0AAEBC98 FFFFFF80 00000000 00000000 00000000 00000000
<4>[60392.954347] I[1:    ksoftirqd/1:   19] bc40 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954361] I[1:    ksoftirqd/1:   19] bc60 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954376] I[1:    ksoftirqd/1:   19] bc80 : 00000002 000004F2 00020002 00000000 000174E6 00000000 0AAEBC20 FFFFFF80
<4>[60392.954391] I[1:    ksoftirqd/1:   19] bca0 : 0AAEBC20 FFFFFF80 00000000 00000000 00000000 00000000 0B61BC48 FFFFFF80
<4>[60392.954405] I[1:    ksoftirqd/1:   19] bcc0 : 0B61BC48 FFFFFF80 0A550D80 FFFFFF80 00000000 00000000 9DB59DB5 00000000
<4>[60392.954419] I[1:    ksoftirqd/1:   19] bce0 : 0C000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954433] I[1:    ksoftirqd/1:   19] bd00 : 09644DB0 FFFFFF80 F0000091 00000000 EF839800 FFFFFFC8 EF839900 FFFFFFC8
<4>[60392.954447] I[1:    ksoftirqd/1:   19] bd20 : 0919AB44 FFFFFF80 0A580018 FFFFFF80 00000000 00000001 00000002 00000000
<4>[60392.954461] I[1:    ksoftirqd/1:   19] bd40 : 00000000 00000000 0A580018 FFFFFF80 0AB08478 FFFFFF80 0AAEBD20 FFFFFF80
<4>[60392.954475] I[1:    ksoftirqd/1:   19] bd60 : 00000000 00000000 00000000 00000000 00000000 00000000 EF896858 FFFFFFC8
<4>[60392.954490] I[1:    ksoftirqd/1:   19] 
<4>[60392.954490] I[1:    ksoftirqd/1:   19] X25: 0xffffffc0051e5d00:
<4>[60392.954501] I[1:    ksoftirqd/1:   19] 5d00 : 00000000 00000000 00000000 00000000 E745D5E7 496DFBF1 00000000 00000000
<4>[60392.954516] I[1:    ksoftirqd/1:   19] 5d20 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954530] I[1:    ksoftirqd/1:   19] 5d40 : 00000000 00000000 00000000 00000000 00000000 00000000 FFFF0000 0200A8C0
<4>[60392.954544] I[1:    ksoftirqd/1:   19] 5d60 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954562] I[1:    ksoftirqd/1:   19] 5d80 : 00000000 00000000 0081FF80 00000000 00000000 00080000 00000000 00000000
<4>[60392.954579] I[1:    ksoftirqd/1:   19] 5da0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954593] I[1:    ksoftirqd/1:   19] 5dc0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954607] I[1:    ksoftirqd/1:   19] 5de0 : 00000000 00000000 051E0BC0 FFFFFFC0 00000085 00000000 3C0ADD53 FCA9C68D
<4>[60392.954622] I[1:    ksoftirqd/1:   19] 5e00 : 831FD9AC 0200A8C0 EEE47EBA 808CBB01 4004000A 00000000 00000000 00000000
<4>[60392.954640] I[1:    ksoftirqd/1:   19] 5e20 : BC8B82B8 FFFFFFC8 0AAF9E10 FFFFFF80 0AAEBC80 FFFFFF80 00000000 00000000
<4>[60392.954673] I[1:    ksoftirqd/1:   19] 5e40 : FFFF0000 831FD9AC 00000000 00000000 FFFF0000 0200A8C0 00017031 00000000
<4>[60392.954687] I[1:    ksoftirqd/1:   19] 5e60 : 00004301 00000000 0000FD75 00000000 EE63F5D0 FFFFFFC8 FFFFFFFF 00000004
<4>[60392.954702] I[1:    ksoftirqd/1:   19] 5e80 : 00000003 00000000 00790078 00000000 00000000 00000000 051E5E98 FFFFFFC0
<4>[60392.954716] I[1:    ksoftirqd/1:   19] 5ea0 : 051E5E98 FFFFFFC0 00000000 00000001 051E5EB0 FFFFFFC0 051E5EB0 FFFFFFC0
<4>[60392.954730] I[1:    ksoftirqd/1:   19] 5ec0 : 00000000 00000000 051E5EC8 FFFFFFC0 051E5EC8 FFFFFFC0 00000000 00000000
<4>[60392.954745] I[1:    ksoftirqd/1:   19] 5ee0 : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954761] I[1:    ksoftirqd/1:   19] 
<4>[60392.954761] I[1:    ksoftirqd/1:   19] X28: 0xffffffc82fe10b2c:
<4>[60392.954772] I[1:    ksoftirqd/1:   19] 0b2c : 05F02FA5 F6F39767 535F5E0E 0CC4A1B3 04B50A41 DE8744AE 00000040 00000020
<4>[60392.954787] I[1:    ksoftirqd/1:   19] 0b4c : 00000000 00000002 00000000 DB9D6F18 FFFFFFC8 00000000 00000000 00000000
<4>[60392.954801] I[1:    ksoftirqd/1:   19] 0b6c : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954815] I[1:    ksoftirqd/1:   19] 0b8c : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954830] I[1:    ksoftirqd/1:   19] 0bac : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954844] I[1:    ksoftirqd/1:   19] 0bcc : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954858] I[1:    ksoftirqd/1:   19] 0bec : 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<4>[60392.954872] I[1:    ksoftirqd/1:   19] 0c0c : 00080000 5000C045 000036D4 62240140 0200A8C0 0200A8C0 ABB50103 00000000
<4>[60392.954886] I[1:    ksoftirqd/1:   19] 0c2c : 34000045 004023E3 99CA0640 0200A8C0 831FD9AC BB018C80 AE46FB9F 537870A5
<4>[60392.954900] I[1:    ksoftirqd/1:   19] 0c4c : 48031180 00002D8D 0A080101 F2556142 DBE9DC24 736D692E 76726573 00656369
<4>[60392.954914] I[1:    ksoftirqd/1:   19] 0c6c : 00390100 00000000 4E000000 554C4C55 00644C4C 00000000 00000000 00000000
<4>[60392.954928] I[1:    ksoftirqd/1:   19] 0c8c : 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000000
<4>[60392.954942] I[1:    ksoftirqd/1:   19] 0cac : 00000000 00000000 00000000 00000000 00000000 00000001 00000000 00000000
<4>[60392.954956] I[1:    ksoftirqd/1:   19] 0ccc : 00000000 00000000 00000000 00000000 00000000 00100000 00000001 2FE10CF8
<4>[60392.954970] I[1:    ksoftirqd/1:   19] 0cec : FFFFFFC8 00000000 00000000 001B4880 FFFFFFBF 00001000 00000000 00000000
<4>[60392.954984] I[1:    ksoftirqd/1:   19] 0d0c : 00000002 00000001 00000001 00000000 00000000 00000001 00000001 00000000
<4>[60392.954999] I[1:    ksoftirqd/1:   19] 
<4>[60392.954999] I[1:    ksoftirqd/1:   19] X29: 0xffffff800b95b890:
<4>[60392.955010] I[1:    ksoftirqd/1:   19] b890 : EF89B000 FFFFFFC8 EE595D00 B254C55C 2FE10C24 FFFFFFC8 36B80010 FFFFFFC0
<4>[60392.955025] I[1:    ksoftirqd/1:   19] b8b0 : 0B2D8880 FFFFFF80 0AAEBC80 FFFFFF80 00000010 00000000 00000000 00000000
<4>[60392.955039] I[1:    ksoftirqd/1:   19] b8d0 : 0B95B930 FFFFFF80 09015704 FFFFFF80 00000003 00000000 0906F3D0 FFFFFF80
<4>[60392.955053] I[1:    ksoftirqd/1:   19] b8f0 : 00000001 00000000 EF89B000 FFFFFFC8 0AAEBC80 FFFFFF80 2FE10C24 FFFFFFC8
<4>[60392.955067] I[1:    ksoftirqd/1:   19] b910 : 00000000 00000000 00000000 FFFFFFC8 00780078 FFFFFFC8 EE595D00 B254C55C
<4>[60392.955081] I[1:    ksoftirqd/1:   19] b930 : 0B95B990 FFFFFF80 09034E40 FFFFFF80 0A5386B0 FFFFFF80 0A540FD0 FFFFFF80
<4>[60392.955096] I[1:    ksoftirqd/1:   19] b950 : EF89B0A0 FFFFFFC8 EF89B000 FFFFFFC8 00000008 00000000 2FE10C24 FFFFFFC8
<4>[60392.955110] I[1:    ksoftirqd/1:   19] b970 : 00000000 00000000 00000006 00000000 00000000 00000000 1EEBFB80 FFFFFFC8
<4>[60392.955124] I[1:    ksoftirqd/1:   19] b990 : 0B95B9C0 FFFFFF80 0904A990 FFFFFF80 0AAEBC80 FFFFFF80 36B82128 FFFFFFC0
<4>[60392.955138] I[1:    ksoftirqd/1:   19] b9b0 : 2FE10C2C FFFFFFC8 1EEBFB80 FFFFFFC8 0B95BA00 FFFFFF80 0904A6D0 FFFFFF80
<4>[60392.955152] I[1:    ksoftirqd/1:   19] b9d0 : 1EEBFC18 FFFFFFC8 EE595D00 B254C55C 0A540578 FFFFFF80 12995900 FFFFFFC0
<4>[60392.955167] I[1:    ksoftirqd/1:   19] b9f0 : 0AAEBC80 FFFFFF80 1EEBFB80 FFFFFFC8 0B95BA40 FFFFFF80 0904A3AC FFFFFF80
<4>[60392.955181] I[1:    ksoftirqd/1:   19] ba10 : 00000008 00000000 1EEBFC18 FFFFFFC8 0A540578 FFFFFF80 0964F9E8 FFFFFF80
<4>[60392.955195] I[1:    ksoftirqd/1:   19] ba30 : 0AAEBC80 FFFFFF80 1EEBFB80 FFFFFFC8 0B95BA70 FFFFFF80 0900B104 FFFFFF80
<4>[60392.955209] I[1:    ksoftirqd/1:   19] ba50 : 2FE10C10 FFFFFFC8 00000001 00000000 0AAEBC80 FFFFFF80 1EEBFB80 FFFFFFC8
<4>[60392.955223] I[1:    ksoftirqd/1:   19] ba70 : 0B95BAE0 FFFFFF80 0900AFD4 FFFFFF80 00000004 00000000 00000001 00000002
<4>[60392.955238] I[1:    ksoftirqd/1:   19] 
<0>[60392.955246] I[1:    ksoftirqd/1:   19] Process ksoftirqd/1 (pid: 19, stack limit = 0xffffff800b958000)
<0>[60392.955253] I[1:    ksoftirqd/1:   19] Call trace:
<4>[60392.955263] I[1:    ksoftirqd/1:   19] Exception stack(0xffffff800b95b700 to 0xffffff800b95b840)
<4>[60392.955272] I[1:    ksoftirqd/1:   19] b700: 0000000000000040 000000000200a8c0 000000000000808c 00000000831fd9ac
<4>[60392.955281] I[1:    ksoftirqd/1:   19] b720: 000000000000bb01 000000000000808c 0000000000000010 0000000000000000
<4>[60392.955290] I[1:    ksoftirqd/1:   19] b740: 0000000000000200 0000000000000020 0000000000007530 ffffffc0051e5f58
<4>[60392.955298] I[1:    ksoftirqd/1:   19] b760: 0000000000000000 0000000000000002 0000000000000000 ffffffffffffffff
<4>[60392.955306] I[1:    ksoftirqd/1:   19] b780: 0000000000000000 0000000000000400 0000000000000001 ffffffc0051e5e00
<4>[60392.955315] I[1:    ksoftirqd/1:   19] b7a0: ffffffc0051e5e88 0000000000000071 0000000000000000 ffffffc0051e5f58
<4>[60392.955323] I[1:    ksoftirqd/1:   19] b7c0: ffffff800aaebc80 ffffffc0051e5e00 0000000000000001 0000000000000003
<4>[60392.955332] I[1:    ksoftirqd/1:   19] b7e0: ffffffc82fe10c2c ffffff800b95b990 ffffff80090350cc ffffff800b95b940
<4>[60392.955341] I[1:    ksoftirqd/1:   19] b800: ffffff80090351d0 0000000060c00145 0000000000000001 b254c55cee595d00
<4>[60392.955349] I[1:    ksoftirqd/1:   19] b820: ffffffffffffffff ffffff800b2d7db8 ffffff800b95b990 ffffff80090351d0
<0>[60392.955362] I[1:    ksoftirqd/1:   19] [<ffffff80090351d0>] tcp_v4_err+0x4b0/0x4bc
<0>[60392.955372] I[1:    ksoftirqd/1:   19] [<ffffff800904a990>] icmp_socket_deliver+0x70/0xc0
<0>[60392.955380] I[1:    ksoftirqd/1:   19] [<ffffff800904a6d0>] icmp_unreach+0x1b4/0x1f0
<0>[60392.955389] I[1:    ksoftirqd/1:   19] [<ffffff800904a3ac>] icmp_rcv+0x310/0x348
<0>[60392.955400] I[1:    ksoftirqd/1:   19] [<ffffff800900b104>] ip_local_deliver_finish+0xf8/0x1f0
<0>[60392.955409] I[1:    ksoftirqd/1:   19] [<ffffff800900afd4>] ip_local_deliver+0xc8/0x100
<0>[60392.955418] I[1:    ksoftirqd/1:   19] [<ffffff800900b790>] ip_rcv_finish+0x218/0x2e4
<0>[60392.955426] I[1:    ksoftirqd/1:   19] [<ffffff800900b4c0>] ip_rcv+0x2c4/0x37c
<0>[60392.955437] I[1:    ksoftirqd/1:   19] [<ffffff8008f84f98>] __netif_receive_skb_core+0x8f0/0xa68
<0>[60392.955446] I[1:    ksoftirqd/1:   19] [<ffffff8008f85960>] process_backlog+0x17c/0x290
<0>[60392.955455] I[1:    ksoftirqd/1:   19] [<ffffff8008f85ef0>] net_rx_action+0x224/0x464
<0>[60392.955465] I[1:    ksoftirqd/1:   19] [<ffffff80081b9564>] __do_softirq+0x200/0x39c
<0>[60392.955475] I[1:    ksoftirqd/1:   19] [<ffffff80081f1f04>] run_ksoftirqd+0x34/0x74
<0>[60392.955485] I[1:    ksoftirqd/1:   19] [<ffffff800821ad7c>] smpboot_thread_fn+0x1d0/0x2f8
<0>[60392.955495] I[1:    ksoftirqd/1:   19] [<ffffff8008215c48>] kthread+0x11c/0x130
<0>[60392.955505] I[1:    ksoftirqd/1:   19] [<ffffff80081bdaa0>] ret_from_fork+0x10/0x1c
<0>[60392.955515] I[1:    ksoftirqd/1:   19] Code: f9402d08 94063788 aa1603e8 17ffff80 (d4210000) 
<4>[60392.955524] I[1:    ksoftirqd/1:   19] ---[ end trace c1d9b9267f6ef3c2 ]---


^ permalink raw reply

* [PATCH 1/1] doc: Mention MSG_ZEROCOPY implementation for UDP
From: Petr Vorel @ 2019-02-14 23:43 UTC (permalink / raw)
  To: netdev; +Cc: Petr Vorel

MSG_ZEROCOPY implementation for UDP was merged in v5.0,
6e360f733113 ("Merge branch 'udp-msg_zerocopy'").

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 Documentation/networking/msg_zerocopy.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/networking/msg_zerocopy.rst b/Documentation/networking/msg_zerocopy.rst
index fe46d4867e2d..18c1415e7bfa 100644
--- a/Documentation/networking/msg_zerocopy.rst
+++ b/Documentation/networking/msg_zerocopy.rst
@@ -7,7 +7,7 @@ Intro
 =====
 
 The MSG_ZEROCOPY flag enables copy avoidance for socket send calls.
-The feature is currently implemented for TCP sockets.
+The feature is currently implemented for TCP and UDP sockets.
 
 
 Opportunity and Caveats
-- 
2.20.1


^ permalink raw reply related

* Re: [PATCH v2 bpf-next 0/2] tools/bpf: smaller clean ups
From: Alexei Starovoitov @ 2019-02-14 23:33 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: andrii.nakryiko, netdev, kernel-team, yhs, ast, kafai, daniel,
	david.laight, acme
In-Reply-To: <20190213182554.2763867-1-andriin@fb.com>

On Wed, Feb 13, 2019 at 10:25:52AM -0800, Andrii Nakryiko wrote:
> This patchset replaces bzero() with memset() and syncs if_link.h header
> to suppress unsynchronized headers warning.

Applied, Thanks


^ permalink raw reply

* Re: [PATCH bpf-next v2] bpf: fix memory leak in bpf_lwt_xmit_reroute
From: Alexei Starovoitov @ 2019-02-14 23:33 UTC (permalink / raw)
  To: David Ahern
  Cc: Peter Oskolkov, Alexei Starovoitov, Daniel Borkmann, netdev,
	Peter Oskolkov, Willem de Bruijn
In-Reply-To: <4f4ce7f6-a9df-b898-8de5-05dcbf15b095@gmail.com>

On Thu, Feb 14, 2019 at 12:04:47PM -0700, David Ahern wrote:
> On 2/14/19 11:39 AM, Peter Oskolkov wrote:
> > On error the skb should be freed. Tested with diff/steps
> > provided by David Ahern.
> > 
> > v2: surface routing errors to the user instead of a generic EINVAL,
> >     as suggested by David Ahern.
> > 
> > Reported-by: David Ahern <dsahern@gmail.com>
> > Fixes: 3bd0b15281af ("bpf: add handling of BPF_LWT_REROUTE to lwt_bpf.c")
> > Signed-off-by: Peter Oskolkov <posk@google.com>
> > ---
> >  net/core/lwt_bpf.c | 29 ++++++++++++++++++++---------
> >  1 file changed, 20 insertions(+), 9 deletions(-)
> > 
> 
> Reviewed-by: David Ahern <dsahern@gmail.com>

Applied, Thanks


^ permalink raw reply

* [RFC iproute2 v2] ip route: get: allow zero-length subnet mask
From: Luca Boccassi @ 2019-02-14 23:29 UTC (permalink / raw)
  To: netdev; +Cc: stephen, Luca Boccassi, Clément Hertling
In-Reply-To: <20190213200954.32271-1-bluca@debian.org>

A /0 subnet mask is theoretically valid, but ip route get doesn't allow
it:

$ ip route get 1.0.0.0/0
need at least a destination address

Change the check and remember whether we found an address or not, since
according to the documentation it's a mandatory parameter.

$ ip/ip route get 1.0.0.0/0
1.0.0.0 via 192.168.1.1 dev eth0 src 192.168.1.91 uid 1000
    cache

Reported-by: Clément Hertling <wxcafe@wxcafe.net>
Signed-off-by: Luca Boccassi <bluca@debian.org>
---
v2: changed the check instead of removing it, so that "ip route get"
fails since the address is a mandatory parameter according to the
manpage.

 ip/iproute.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/ip/iproute.c b/ip/iproute.c
index 5f58a3b3..cc02a3e1 100644
--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -1932,6 +1932,7 @@ static int iproute_get(int argc, char **argv)
 	int fib_match = 0;
 	int from_ok = 0;
 	unsigned int mark = 0;
+	bool address_found = false;
 
 	iproute_reset_filter(0);
 	filter.cloned = 2;
@@ -2037,11 +2038,12 @@ static int iproute_get(int argc, char **argv)
 				addattr_l(&req.n, sizeof(req),
 					  RTA_DST, &addr.data, addr.bytelen);
 			req.r.rtm_dst_len = addr.bitlen;
+			address_found = true;
 		}
 		argc--; argv++;
 	}
 
-	if (req.r.rtm_dst_len == 0) {
+	if (!address_found) {
 		fprintf(stderr, "need at least a destination address\n");
 		return -1;
 	}
-- 
2.20.1


^ permalink raw reply related

* Re: [PATCH] can: mark expected switch fall-throughs
From: Alexandre Belloni @ 2019-02-14 23:21 UTC (permalink / raw)
  To: Gustavo A. R. Silva
  Cc: Nicolas.Ferre, wg, mkl, davem, Ludovic.Desroches, linux-can,
	netdev, linux-arm-kernel, linux-kernel, Kees Cook
In-Reply-To: <c597ac66-e79d-50e4-6906-923bd18834e9@embeddedor.com>

On 14/02/2019 17:14:05-0600, Gustavo A. R. Silva wrote:
> >>> Also, the gcc documentation says that -Wimplicit-fallthrough=3
> >>> recognizes /* fallthrough */ as a proper fall through comment (and I
> >>> tested with gcc 8.2).
> >>>
> >>
> >> Yeah. But that's not the relevant change in this case.  Notice that the
> >> comment was moved to the very bottom of the previous case.
> >>
> > 
> > Yes and it doesn't matter for gcc, I tested with gcc 8.2.
> > 
> 
> Yeah. But, again, you are missing the relevant part of the patch.
> 

Right, I misread the patch and though you were moving the comment after
the case statement.


-- 
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply

* Re: [PATCH] can: mark expected switch fall-throughs
From: Gustavo A. R. Silva @ 2019-02-14 23:14 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Nicolas.Ferre, wg, mkl, davem, Ludovic.Desroches, linux-can,
	netdev, linux-arm-kernel, linux-kernel, Kees Cook
In-Reply-To: <20190214230756.GR10129@piout.net>



On 2/14/19 5:07 PM, Alexandre Belloni wrote:
> On 14/02/2019 17:04:03-0600, Gustavo A. R. Silva wrote:
>>
>>
>> On 2/14/19 4:17 PM, Alexandre Belloni wrote:
>>> Hi,
>>>
>>> On 14/02/2019 15:37:26-0600, Gustavo A. R. Silva wrote:
>>>>
>>>>
>>>> On 1/30/19 2:11 AM, Nicolas.Ferre@microchip.com wrote:
>>>>> On 29/01/2019 at 19:06, Gustavo A. R. Silva wrote:
>>>>>> In preparation to enabling -Wimplicit-fallthrough, mark switch cases
>>>>>> where we are expecting to fall through.
>>>>>>
>>>>>> This patch fixes the following warnings:
>>>>>>
>>>>>> drivers/net/can/peak_canfd/peak_pciefd_main.c:668:3: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>>>> drivers/net/can/spi/mcp251x.c:875:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>>>> drivers/net/can/usb/peak_usb/pcan_usb.c:422:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>>>> drivers/net/can/at91_can.c:895:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>>>> drivers/net/can/at91_can.c:953:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>>>> drivers/net/can/usb/peak_usb/pcan_usb.c: In function ‘pcan_usb_decode_error’:
>>>>>> drivers/net/can/usb/peak_usb/pcan_usb.c:422:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>>>>     if (n & PCAN_USB_ERROR_BUS_LIGHT) {
>>>>>>        ^
>>>>>> drivers/net/can/usb/peak_usb/pcan_usb.c:428:2: note: here
>>>>>>    case CAN_STATE_ERROR_WARNING:
>>>>>>    ^~~~
>>>>>>
>>>>>> Warning level 3 was used: -Wimplicit-fallthrough=3
>>>>>>
>>>>>> This patch is part of the ongoing efforts to enabling
>>>>>> -Wimplicit-fallthrough.
>>>>>>
>>>>>> Notice that in some cases spelling mistakes were fixed.
>>>>>> In other cases, the /* fall through */ comment is placed
>>>>>> at the bottom of the case statement, which is what GCC
>>>>>> is expecting to find.
>>>>>>
>>>>>> Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
>>>>>> ---
>>>>>>   drivers/net/can/at91_can.c                    | 6 ++++--
>>>>>
>>>>> For this one:
>>>>> Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
>>>>>
>>>>
>>>> Thanks, Nicolas.
>>>>
>>>
>>> I though I had a déjà vu but you actually sent the at91 part twice.
>>>
>>
>> It wasn't intentional.
>>
>>>> Dave:
>>>>
>>>> I wonder if you can take this patch.
>>>>
>>>> Thanks
>>>> --
>>>> Gustavo
>>>>
>>>>>>   drivers/net/can/peak_canfd/peak_pciefd_main.c | 2 +-
>>>>>>   drivers/net/can/spi/mcp251x.c                 | 3 ++-
>>>>>>   drivers/net/can/usb/peak_usb/pcan_usb.c       | 2 +-
>>>>>>   4 files changed, 8 insertions(+), 5 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
>>>>>> index d98c69045b17..1718c20f9c99 100644
>>>>>> --- a/drivers/net/can/at91_can.c
>>>>>> +++ b/drivers/net/can/at91_can.c
>>>>>> @@ -902,7 +902,8 @@ static void at91_irq_err_state(struct net_device *dev,
>>>>>>   				CAN_ERR_CRTL_TX_WARNING :
>>>>>>   				CAN_ERR_CRTL_RX_WARNING;
>>>>>>   		}
>>>>>> -	case CAN_STATE_ERROR_WARNING:	/* fallthrough */
>>>>>> +		/* fall through */
>>>>>> +	case CAN_STATE_ERROR_WARNING:
>>>>>>   		/*
>>>>>>   		 * from: ERROR_ACTIVE, ERROR_WARNING
>>>>>>   		 * to  : ERROR_PASSIVE, BUS_OFF
>>>>>> @@ -951,7 +952,8 @@ static void at91_irq_err_state(struct net_device *dev,
>>>>>>   		netdev_dbg(dev, "Error Active\n");
>>>>>>   		cf->can_id |= CAN_ERR_PROT;
>>>>>>   		cf->data[2] = CAN_ERR_PROT_ACTIVE;
>>>>>> -	case CAN_STATE_ERROR_WARNING:	/* fallthrough */
>>>
>>> Seriously, for that one, you should fix the compiler. The fall through
>>
>> I'll pass your feedback on to the GCC guys.
>>
>>> is not implicit, it is actually quite explicit and the warning is simply
>>> wrong.
>>>
>>> Also, the gcc documentation says that -Wimplicit-fallthrough=3
>>> recognizes /* fallthrough */ as a proper fall through comment (and I
>>> tested with gcc 8.2).
>>>
>>
>> Yeah. But that's not the relevant change in this case.  Notice that the
>> comment was moved to the very bottom of the previous case.
>>
> 
> Yes and it doesn't matter for gcc, I tested with gcc 8.2.
> 

Yeah. But, again, you are missing the relevant part of the patch.

--
Gustavo

^ permalink raw reply

* Re: [PATCH] can: mark expected switch fall-throughs
From: Alexandre Belloni @ 2019-02-14 23:07 UTC (permalink / raw)
  To: Gustavo A. R. Silva
  Cc: Nicolas.Ferre, wg, mkl, davem, Ludovic.Desroches, linux-can,
	netdev, linux-arm-kernel, linux-kernel, Kees Cook
In-Reply-To: <a8e53868-2b13-b050-7714-e3e24d18cf00@embeddedor.com>

On 14/02/2019 17:04:03-0600, Gustavo A. R. Silva wrote:
> 
> 
> On 2/14/19 4:17 PM, Alexandre Belloni wrote:
> > Hi,
> > 
> > On 14/02/2019 15:37:26-0600, Gustavo A. R. Silva wrote:
> >>
> >>
> >> On 1/30/19 2:11 AM, Nicolas.Ferre@microchip.com wrote:
> >>> On 29/01/2019 at 19:06, Gustavo A. R. Silva wrote:
> >>>> In preparation to enabling -Wimplicit-fallthrough, mark switch cases
> >>>> where we are expecting to fall through.
> >>>>
> >>>> This patch fixes the following warnings:
> >>>>
> >>>> drivers/net/can/peak_canfd/peak_pciefd_main.c:668:3: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >>>> drivers/net/can/spi/mcp251x.c:875:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >>>> drivers/net/can/usb/peak_usb/pcan_usb.c:422:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >>>> drivers/net/can/at91_can.c:895:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >>>> drivers/net/can/at91_can.c:953:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >>>> drivers/net/can/usb/peak_usb/pcan_usb.c: In function ‘pcan_usb_decode_error’:
> >>>> drivers/net/can/usb/peak_usb/pcan_usb.c:422:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >>>>     if (n & PCAN_USB_ERROR_BUS_LIGHT) {
> >>>>        ^
> >>>> drivers/net/can/usb/peak_usb/pcan_usb.c:428:2: note: here
> >>>>    case CAN_STATE_ERROR_WARNING:
> >>>>    ^~~~
> >>>>
> >>>> Warning level 3 was used: -Wimplicit-fallthrough=3
> >>>>
> >>>> This patch is part of the ongoing efforts to enabling
> >>>> -Wimplicit-fallthrough.
> >>>>
> >>>> Notice that in some cases spelling mistakes were fixed.
> >>>> In other cases, the /* fall through */ comment is placed
> >>>> at the bottom of the case statement, which is what GCC
> >>>> is expecting to find.
> >>>>
> >>>> Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
> >>>> ---
> >>>>   drivers/net/can/at91_can.c                    | 6 ++++--
> >>>
> >>> For this one:
> >>> Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
> >>>
> >>
> >> Thanks, Nicolas.
> >>
> > 
> > I though I had a déjà vu but you actually sent the at91 part twice.
> > 
> 
> It wasn't intentional.
> 
> >> Dave:
> >>
> >> I wonder if you can take this patch.
> >>
> >> Thanks
> >> --
> >> Gustavo
> >>
> >>>>   drivers/net/can/peak_canfd/peak_pciefd_main.c | 2 +-
> >>>>   drivers/net/can/spi/mcp251x.c                 | 3 ++-
> >>>>   drivers/net/can/usb/peak_usb/pcan_usb.c       | 2 +-
> >>>>   4 files changed, 8 insertions(+), 5 deletions(-)
> >>>>
> >>>> diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
> >>>> index d98c69045b17..1718c20f9c99 100644
> >>>> --- a/drivers/net/can/at91_can.c
> >>>> +++ b/drivers/net/can/at91_can.c
> >>>> @@ -902,7 +902,8 @@ static void at91_irq_err_state(struct net_device *dev,
> >>>>   				CAN_ERR_CRTL_TX_WARNING :
> >>>>   				CAN_ERR_CRTL_RX_WARNING;
> >>>>   		}
> >>>> -	case CAN_STATE_ERROR_WARNING:	/* fallthrough */
> >>>> +		/* fall through */
> >>>> +	case CAN_STATE_ERROR_WARNING:
> >>>>   		/*
> >>>>   		 * from: ERROR_ACTIVE, ERROR_WARNING
> >>>>   		 * to  : ERROR_PASSIVE, BUS_OFF
> >>>> @@ -951,7 +952,8 @@ static void at91_irq_err_state(struct net_device *dev,
> >>>>   		netdev_dbg(dev, "Error Active\n");
> >>>>   		cf->can_id |= CAN_ERR_PROT;
> >>>>   		cf->data[2] = CAN_ERR_PROT_ACTIVE;
> >>>> -	case CAN_STATE_ERROR_WARNING:	/* fallthrough */
> > 
> > Seriously, for that one, you should fix the compiler. The fall through
> 
> I'll pass your feedback on to the GCC guys.
> 
> > is not implicit, it is actually quite explicit and the warning is simply
> > wrong.
> > 
> > Also, the gcc documentation says that -Wimplicit-fallthrough=3
> > recognizes /* fallthrough */ as a proper fall through comment (and I
> > tested with gcc 8.2).
> > 
> 
> Yeah. But that's not the relevant change in this case.  Notice that the
> comment was moved to the very bottom of the previous case.
> 

Yes and it doesn't matter for gcc, I tested with gcc 8.2.

-- 
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply

* Re: [PATCH] can: mark expected switch fall-throughs
From: Gustavo A. R. Silva @ 2019-02-14 23:04 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Nicolas.Ferre, wg, mkl, davem, Ludovic.Desroches, linux-can,
	netdev, linux-arm-kernel, linux-kernel, Kees Cook
In-Reply-To: <20190214221703.GQ10129@piout.net>



On 2/14/19 4:17 PM, Alexandre Belloni wrote:
> Hi,
> 
> On 14/02/2019 15:37:26-0600, Gustavo A. R. Silva wrote:
>>
>>
>> On 1/30/19 2:11 AM, Nicolas.Ferre@microchip.com wrote:
>>> On 29/01/2019 at 19:06, Gustavo A. R. Silva wrote:
>>>> In preparation to enabling -Wimplicit-fallthrough, mark switch cases
>>>> where we are expecting to fall through.
>>>>
>>>> This patch fixes the following warnings:
>>>>
>>>> drivers/net/can/peak_canfd/peak_pciefd_main.c:668:3: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>> drivers/net/can/spi/mcp251x.c:875:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>> drivers/net/can/usb/peak_usb/pcan_usb.c:422:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>> drivers/net/can/at91_can.c:895:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>> drivers/net/can/at91_can.c:953:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>> drivers/net/can/usb/peak_usb/pcan_usb.c: In function ‘pcan_usb_decode_error’:
>>>> drivers/net/can/usb/peak_usb/pcan_usb.c:422:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
>>>>     if (n & PCAN_USB_ERROR_BUS_LIGHT) {
>>>>        ^
>>>> drivers/net/can/usb/peak_usb/pcan_usb.c:428:2: note: here
>>>>    case CAN_STATE_ERROR_WARNING:
>>>>    ^~~~
>>>>
>>>> Warning level 3 was used: -Wimplicit-fallthrough=3
>>>>
>>>> This patch is part of the ongoing efforts to enabling
>>>> -Wimplicit-fallthrough.
>>>>
>>>> Notice that in some cases spelling mistakes were fixed.
>>>> In other cases, the /* fall through */ comment is placed
>>>> at the bottom of the case statement, which is what GCC
>>>> is expecting to find.
>>>>
>>>> Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
>>>> ---
>>>>   drivers/net/can/at91_can.c                    | 6 ++++--
>>>
>>> For this one:
>>> Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
>>>
>>
>> Thanks, Nicolas.
>>
> 
> I though I had a déjà vu but you actually sent the at91 part twice.
> 

It wasn't intentional.

>> Dave:
>>
>> I wonder if you can take this patch.
>>
>> Thanks
>> --
>> Gustavo
>>
>>>>   drivers/net/can/peak_canfd/peak_pciefd_main.c | 2 +-
>>>>   drivers/net/can/spi/mcp251x.c                 | 3 ++-
>>>>   drivers/net/can/usb/peak_usb/pcan_usb.c       | 2 +-
>>>>   4 files changed, 8 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
>>>> index d98c69045b17..1718c20f9c99 100644
>>>> --- a/drivers/net/can/at91_can.c
>>>> +++ b/drivers/net/can/at91_can.c
>>>> @@ -902,7 +902,8 @@ static void at91_irq_err_state(struct net_device *dev,
>>>>   				CAN_ERR_CRTL_TX_WARNING :
>>>>   				CAN_ERR_CRTL_RX_WARNING;
>>>>   		}
>>>> -	case CAN_STATE_ERROR_WARNING:	/* fallthrough */
>>>> +		/* fall through */
>>>> +	case CAN_STATE_ERROR_WARNING:
>>>>   		/*
>>>>   		 * from: ERROR_ACTIVE, ERROR_WARNING
>>>>   		 * to  : ERROR_PASSIVE, BUS_OFF
>>>> @@ -951,7 +952,8 @@ static void at91_irq_err_state(struct net_device *dev,
>>>>   		netdev_dbg(dev, "Error Active\n");
>>>>   		cf->can_id |= CAN_ERR_PROT;
>>>>   		cf->data[2] = CAN_ERR_PROT_ACTIVE;
>>>> -	case CAN_STATE_ERROR_WARNING:	/* fallthrough */
> 
> Seriously, for that one, you should fix the compiler. The fall through

I'll pass your feedback on to the GCC guys.

> is not implicit, it is actually quite explicit and the warning is simply
> wrong.
> 
> Also, the gcc documentation says that -Wimplicit-fallthrough=3
> recognizes /* fallthrough */ as a proper fall through comment (and I
> tested with gcc 8.2).
> 

Yeah. But that's not the relevant change in this case.  Notice that the
comment was moved to the very bottom of the previous case.

Thanks
--
Gustavo

^ permalink raw reply

* [PATCH bpf-next 0/2] libbpf: Add new interfaces
From: Andrey Ignatov @ 2019-02-14 23:01 UTC (permalink / raw)
  To: netdev; +Cc: Andrey Ignatov, ast, daniel, kernel-team

The patch set adds a couple of new interfaces to libbpf:

Patch 1 adds bpf_map__resize() to resize map before loading bpf_object;
Patch 2 adds bpf_object__btf() to get struct btf * from bpf_object__btf.


Andrey Ignatov (2):
  libbpf: Introduce bpf_map__resize
  libbpf: Introduce bpf_object__btf

 tools/lib/bpf/libbpf.c   | 19 +++++++++++++++++++
 tools/lib/bpf/libbpf.h   |  4 ++++
 tools/lib/bpf/libbpf.map |  2 ++
 3 files changed, 25 insertions(+)

-- 
2.17.1


^ permalink raw reply

* [PATCH bpf-next 1/2] libbpf: Introduce bpf_map__resize
From: Andrey Ignatov @ 2019-02-14 23:01 UTC (permalink / raw)
  To: netdev; +Cc: Andrey Ignatov, ast, daniel, kernel-team
In-Reply-To: <cover.1550185216.git.rdna@fb.com>

Add bpf_map__resize() to change max_entries for a map.

Quite often necessary map size is unknown at compile time and can be
calculated only at run time.

Currently the following approach is used to do so:
* bpf_object__open_buffer() to open Elf file from a buffer;
* bpf_object__find_map_by_name() to find relevant map;
* bpf_map__def() to get map attributes and create struct
  bpf_create_map_attr from them;
* update max_entries in bpf_create_map_attr;
* bpf_create_map_xattr() to create new map with updated max_entries;
* bpf_map__reuse_fd() to replace the map in bpf_object with newly
  created one.

And after all this bpf_object can finally be loaded. The map will have
new size.

It 1) is quite a lot of steps; 2) doesn't take BTF into account.

For "2)" even more steps should be made and some of them require changes
to libbpf (e.g. to get struct btf * from bpf_object).

Instead the whole problem can be solved by introducing simple
bpf_map__resize() API that checks the map and sets new max_entries if
the map is not loaded yet.

So the new steps are:
* bpf_object__open_buffer() to open Elf file from a buffer;
* bpf_object__find_map_by_name() to find relevant map;
* bpf_map__resize() to update max_entries.

That's much simpler and works with BTF.

Signed-off-by: Andrey Ignatov <rdna@fb.com>
---
 tools/lib/bpf/libbpf.c   | 14 ++++++++++++++
 tools/lib/bpf/libbpf.h   |  1 +
 tools/lib/bpf/libbpf.map |  1 +
 3 files changed, 16 insertions(+)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index e3c39edfb9d3..690e7b079202 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -1114,6 +1114,20 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd)
 	return -errno;
 }
 
+int bpf_map__resize(struct bpf_map *map, __u32 max_entries)
+{
+	if (!map || !max_entries)
+		return -EINVAL;
+
+	/* If map already created, its attributes can't be changed. */
+	if (map->fd >= 0)
+		return -EBUSY;
+
+	map->def.max_entries = max_entries;
+
+	return 0;
+}
+
 static int
 bpf_object__probe_name(struct bpf_object *obj)
 {
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
index 69a7c25eaccc..987fd92661d6 100644
--- a/tools/lib/bpf/libbpf.h
+++ b/tools/lib/bpf/libbpf.h
@@ -294,6 +294,7 @@ LIBBPF_API int bpf_map__set_priv(struct bpf_map *map, void *priv,
 				 bpf_map_clear_priv_t clear_priv);
 LIBBPF_API void *bpf_map__priv(struct bpf_map *map);
 LIBBPF_API int bpf_map__reuse_fd(struct bpf_map *map, int fd);
+LIBBPF_API int bpf_map__resize(struct bpf_map *map, __u32 max_entries);
 LIBBPF_API bool bpf_map__is_offload_neutral(struct bpf_map *map);
 LIBBPF_API void bpf_map__set_ifindex(struct bpf_map *map, __u32 ifindex);
 LIBBPF_API int bpf_map__pin(struct bpf_map *map, const char *path);
diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map
index 5fc8222209f8..16f342c3d4bc 100644
--- a/tools/lib/bpf/libbpf.map
+++ b/tools/lib/bpf/libbpf.map
@@ -130,6 +130,7 @@ LIBBPF_0.0.2 {
 		bpf_probe_helper;
 		bpf_probe_map_type;
 		bpf_probe_prog_type;
+		bpf_map__resize;
 		bpf_map_lookup_elem_flags;
 		bpf_object__find_map_fd_by_name;
 		bpf_get_link_xdp_id;
-- 
2.17.1


^ permalink raw reply related

* [PATCH bpf-next 2/2] libbpf: Introduce bpf_object__btf
From: Andrey Ignatov @ 2019-02-14 23:01 UTC (permalink / raw)
  To: netdev; +Cc: Andrey Ignatov, ast, daniel, kernel-team
In-Reply-To: <cover.1550185216.git.rdna@fb.com>

Add new accessor for bpf_object to get opaque struct btf * from it.

struct btf * is needed for all operations with BTF and it's present in
bpf_object. The only thing missing is a way to get it.

Example use-case is to get BTF key_type_id an value_type_id for a map in
bpf_object. It can be done with btf__get_map_kv_tids() but that function
requires struct btf *.

Similar API can be added for struct btf_ext but no use-case for it yet.

Signed-off-by: Andrey Ignatov <rdna@fb.com>
---
 tools/lib/bpf/libbpf.c   | 5 +++++
 tools/lib/bpf/libbpf.h   | 3 +++
 tools/lib/bpf/libbpf.map | 1 +
 3 files changed, 9 insertions(+)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 690e7b079202..a77a327c2bb8 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -2332,6 +2332,11 @@ unsigned int bpf_object__kversion(struct bpf_object *obj)
 	return obj ? obj->kern_version : 0;
 }
 
+struct btf *bpf_object__btf(struct bpf_object *obj)
+{
+	return obj ? obj->btf : NULL;
+}
+
 int bpf_object__btf_fd(const struct bpf_object *obj)
 {
 	return obj->btf ? btf__fd(obj->btf) : -1;
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
index 987fd92661d6..6c0168f8bba5 100644
--- a/tools/lib/bpf/libbpf.h
+++ b/tools/lib/bpf/libbpf.h
@@ -89,6 +89,9 @@ LIBBPF_API int bpf_object__load(struct bpf_object *obj);
 LIBBPF_API int bpf_object__unload(struct bpf_object *obj);
 LIBBPF_API const char *bpf_object__name(struct bpf_object *obj);
 LIBBPF_API unsigned int bpf_object__kversion(struct bpf_object *obj);
+
+struct btf;
+LIBBPF_API struct btf *bpf_object__btf(struct bpf_object *obj);
 LIBBPF_API int bpf_object__btf_fd(const struct bpf_object *obj);
 
 LIBBPF_API struct bpf_program *
diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map
index 16f342c3d4bc..99dfa710c818 100644
--- a/tools/lib/bpf/libbpf.map
+++ b/tools/lib/bpf/libbpf.map
@@ -132,6 +132,7 @@ LIBBPF_0.0.2 {
 		bpf_probe_prog_type;
 		bpf_map__resize;
 		bpf_map_lookup_elem_flags;
+		bpf_object__btf;
 		bpf_object__find_map_fd_by_name;
 		bpf_get_link_xdp_id;
 		btf__dedup;
-- 
2.17.1


^ permalink raw reply related

* [PATCH net-next] nfp: flower: fix masks for tcp and ip flags fields
From: Jakub Kicinski @ 2019-02-14 22:37 UTC (permalink / raw)
  To: davem; +Cc: netdev, oss-drivers, Pieter Jansen van Vuuren

From: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>

Check mask fields of tcp and ip flags when setting the corresponding mask
flag used in hardware.

Fixes: 8f2566225ae2 ("flow_offload: add flow_rule and flow_match")
Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>
Reviewed-by: John Hurley <john.hurley@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
 .../net/ethernet/netronome/nfp/flower/match.c | 35 +++++++++++--------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/netronome/nfp/flower/match.c b/drivers/net/ethernet/netronome/nfp/flower/match.c
index 1279fa5da9e1..e03c8ef2c28c 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/match.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/match.c
@@ -172,46 +172,51 @@ nfp_flower_compile_ip_ext(struct nfp_flower_ip_ext *ext,
 	}
 
 	if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_TCP)) {
+		u16 tcp_flags, tcp_flags_mask;
 		struct flow_match_tcp match;
-		u16 tcp_flags;
 
 		flow_rule_match_tcp(rule, &match);
 		tcp_flags = be16_to_cpu(match.key->flags);
+		tcp_flags_mask = be16_to_cpu(match.mask->flags);
 
-		if (tcp_flags & TCPHDR_FIN) {
+		if (tcp_flags & TCPHDR_FIN)
 			ext->flags |= NFP_FL_TCP_FLAG_FIN;
+		if (tcp_flags_mask & TCPHDR_FIN)
 			msk->flags |= NFP_FL_TCP_FLAG_FIN;
-		}
-		if (tcp_flags & TCPHDR_SYN) {
+
+		if (tcp_flags & TCPHDR_SYN)
 			ext->flags |= NFP_FL_TCP_FLAG_SYN;
+		if (tcp_flags_mask & TCPHDR_SYN)
 			msk->flags |= NFP_FL_TCP_FLAG_SYN;
-		}
-		if (tcp_flags & TCPHDR_RST) {
+
+		if (tcp_flags & TCPHDR_RST)
 			ext->flags |= NFP_FL_TCP_FLAG_RST;
+		if (tcp_flags_mask & TCPHDR_RST)
 			msk->flags |= NFP_FL_TCP_FLAG_RST;
-		}
-		if (tcp_flags & TCPHDR_PSH) {
+
+		if (tcp_flags & TCPHDR_PSH)
 			ext->flags |= NFP_FL_TCP_FLAG_PSH;
+		if (tcp_flags_mask & TCPHDR_PSH)
 			msk->flags |= NFP_FL_TCP_FLAG_PSH;
-		}
-		if (tcp_flags & TCPHDR_URG) {
+
+		if (tcp_flags & TCPHDR_URG)
 			ext->flags |= NFP_FL_TCP_FLAG_URG;
+		if (tcp_flags_mask & TCPHDR_URG)
 			msk->flags |= NFP_FL_TCP_FLAG_URG;
-		}
 	}
 
 	if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_CONTROL)) {
 		struct flow_match_control match;
 
 		flow_rule_match_control(rule, &match);
-		if (match.key->flags & FLOW_DIS_IS_FRAGMENT) {
+		if (match.key->flags & FLOW_DIS_IS_FRAGMENT)
 			ext->flags |= NFP_FL_IP_FRAGMENTED;
+		if (match.mask->flags & FLOW_DIS_IS_FRAGMENT)
 			msk->flags |= NFP_FL_IP_FRAGMENTED;
-		}
-		if (match.key->flags & FLOW_DIS_FIRST_FRAG) {
+		if (match.key->flags & FLOW_DIS_FIRST_FRAG)
 			ext->flags |= NFP_FL_IP_FRAG_FIRST;
+		if (match.mask->flags & FLOW_DIS_FIRST_FRAG)
 			msk->flags |= NFP_FL_IP_FRAG_FIRST;
-		}
 	}
 }
 
-- 
2.19.2


^ permalink raw reply related

* Re: [PATCH v3] arm64: dts: lx2160aqds: Add mdio mux nodes
From: Li Yang @ 2019-02-14 22:32 UTC (permalink / raw)
  To: Pankaj Bansal, Rob Herring
  Cc: Shawn Guo, Andrew Lunn, Florian Fainelli, netdev@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
In-Reply-To: <CADRPPNTEE7beTyR-3ezSBuaNm-9vMAiUVKWYUkr_gd8nswMSYg@mail.gmail.com>

On Tue, Feb 12, 2019 at 12:01 PM Li Yang <leoyang.li@nxp.com> wrote:
>
> On Mon, Feb 11, 2019 at 9:28 PM Pankaj Bansal <pankaj.bansal@nxp.com> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: Leo Li
> > > Sent: Tuesday, 12 February, 2019 02:14 AM
> > > To: Shawn Guo <shawnguo@kernel.org>; Pankaj Bansal
> > > <pankaj.bansal@nxp.com>
> > > Cc: Andrew Lunn <andrew@lunn.ch>; Florian Fainelli <f.fainelli@gmail.com>;
> > > netdev@vger.kernel.org; linux-arm-kernel@lists.infradead.org
> > > Subject: RE: [PATCH v3] arm64: dts: lx2160aqds: Add mdio mux nodes
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Shawn Guo <shawnguo@kernel.org>
> > > > Sent: Sunday, February 10, 2019 9:00 PM
> > > > To: Pankaj Bansal <pankaj.bansal@nxp.com>
> > > > Cc: Leo Li <leoyang.li@nxp.com>; Andrew Lunn <andrew@lunn.ch>; Florian
> > > > Fainelli <f.fainelli@gmail.com>; netdev@vger.kernel.org; linux-arm-
> > > > kernel@lists.infradead.org
> > > > Subject: Re: [PATCH v3] arm64: dts: lx2160aqds: Add mdio mux nodes
> > > >
> > > > On Wed, Feb 06, 2019 at 09:40:33AM +0000, Pankaj Bansal wrote:
> > > > > The two external MDIO buses used to communicate with phy devices
> > > > > that are external to SOC are muxed in LX2160AQDS board.
> > > > >
> > > > > These buses can be routed to any one of the eight IO slots on
> > > > > LX2160AQDS board depending on value in fpga register 0x54.
> > > > >
> > > > > Additionally the external MDIO1 is used to communicate to the
> > > > > onboard RGMII phy devices.
> > > > >
> > > > > The mdio1 is controlled by bits 4-7 of fpga register and mdio2 is
> > > > > controlled by bits 0-3 of fpga register.
> > > > >
> > > > > Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
> > > > > ---
> > > > >
> > > > > Notes:
> > > > >     V3:
> > > > >     - Add status = disabled in soc file and status = okay in board file
> > > > >       for external MDIO nodes
> > > > >     - Add interrupts property in external mdio nodes in soc file
> > > > >     V2:
> > > > >     - removed unnecassary TODO statements
> > > > >     - removed device_type from mdio nodes
> > > > >     - change the case of hex number to lowercase
> > > > >     - removed board specific comments from soc file
> > > > >
> > > > >  .../boot/dts/freescale/fsl-lx2160a-qds.dts   | 123 +++++++++++++++++
> > > > >  .../boot/dts/freescale/fsl-lx2160a.dtsi      |  22 +++
> > > > >  2 files changed, 145 insertions(+)
> > > > >
> > > > > diff --git a/arch/arm64/boot/dts/freescale/fsl-lx2160a-qds.dts
> > > > > b/arch/arm64/boot/dts/freescale/fsl-lx2160a-qds.dts
> > > > > index 99a22abbe725..079264b391a2 100644
> > > > > --- a/arch/arm64/boot/dts/freescale/fsl-lx2160a-qds.dts
> > > > > +++ b/arch/arm64/boot/dts/freescale/fsl-lx2160a-qds.dts
> > > > > @@ -35,6 +35,14 @@
> > > > >   status = "okay";
> > > > >  };
> > > > >
> > > > > +&emdio1 {
> > > > > + status = "okay";
> > > > > +};
> > > > > +
> > > > > +&emdio2 {
> > > > > + status = "okay";
> > > > > +};
> > > > > +
> > > > >  &esdhc0 {
> > > > >   status = "okay";
> > > > >  };
> > > > > @@ -46,6 +54,121 @@
> > > > >  &i2c0 {
> > > > >   status = "okay";
> > > > >
> > > > > + fpga@66 {
> > > > > +         compatible = "fsl,lx2160aqds-fpga", "fsl,fpga-qixis-i2c";
> > > > > +         reg = <0x66>;
> > > > > +         #address-cells = <1>;
> > > > > +         #size-cells = <0>;
> > > > > +
> > > > > +         mdio-mux-1@54 {
> > > > > +                 mdio-parent-bus = <&emdio1>;
> > > > > +                 reg = <0x54>;            /* BRDCFG4 */
> > > > > +                 mux-mask = <0xf8>;      /* EMI1_MDIO */
> > > > > +                 #address-cells=<1>;
> > > > > +                 #size-cells = <0>;
> > > > > +
> > > > > +                 mdio@0 {
> > > > > +                         reg = <0x00>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > >
> > > > Please have a newline between nodes.  It doesn't deserve a respin
> > > > though.  I can fix them up when applying if Leo is fine with this version.
> > >
> > > I think there should be a compatible string defined for the binding of parent
> > > node mdio-mux, probably "mdio-mux-regmap", and be used here in the device
> > > tree.
> >
> > I have two concerns :
> > 1. The regmap is linux s/w construct, while device tree is h/w representation and is s/w agnostic. can we use regmap in device tree?
>
> Well, if we want to avoid using the regmap name, we probably can try
> "mdio-mux-reg" or "mdio-mux-syscon"?  With further search I also found
> a more generic mux binding at Documentation/devicetree/bindings/mux/,
> would be even better if we can use that to describe the mux.


To make it more clear, with the use of
Documentation/devicetree/bindings/mux/ binding, I think it would end
up with something like this:

i2c {
 fpga {
  compatible = "fsl,lx2160aqds-fpga", "syscon";
  ....
  mux: mux-controller {
   compatible = "mmio-mux"
   ...
  }
 }
...
}

mdio-mux {
 compatible = "mdio-mux"
 mux-controls = <&mux 0>;
 ....
 mdio {
  phy {
  }
  ...
 }
 mdio {
  ...
 }
 ...
}


}"

>
> > 2. By convention the device tree compatible binding is defined as "<manufacturer>,<model>" e.g. "fsl,mpc8349-uart". The mdio-mux node and it's sub nodes are a generic representation of mdio mux and it is not dependent on a particular manufacturer device. How to define the compatible in this case?
>
> The manufacturer prefix is for vendor specific bindings.  If the
> binding a suppose to be generic, we don't need the vendor prefix.
>
> >
> > >
> > > >
> > > > Shawn
> > > >
> > > > > +                 mdio@40 {
> > > > > +                         reg = <0x40>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@c0 {
> > > > > +                         reg = <0xc0>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@c8 {
> > > > > +                         reg = <0xc8>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@d0 {
> > > > > +                         reg = <0xd0>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@d8 {
> > > > > +                         reg = <0xd8>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@e0 {
> > > > > +                         reg = <0xe0>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@e8 {
> > > > > +                         reg = <0xe8>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@f0 {
> > > > > +                         reg = <0xf0>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@f8 {
> > > > > +                         reg = <0xf8>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +         };
> > > > > +
> > > > > +         mdio-mux-2@54 {
> > > > > +                 mdio-parent-bus = <&emdio2>;
> > > > > +                 reg = <0x54>;            /* BRDCFG4 */
> > > > > +                 mux-mask = <0x07>;      /* EMI2_MDIO */
> > > > > +                 #address-cells=<1>;
> > > > > +                 #size-cells = <0>;
> > > > > +
> > > > > +                 mdio@0 {
> > > > > +                         reg = <0x00>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@1 {
> > > > > +                         reg = <0x01>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@2 {
> > > > > +                         reg = <0x02>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@3 {
> > > > > +                         reg = <0x03>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@4 {
> > > > > +                         reg = <0x04>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@5 {
> > > > > +                         reg = <0x05>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@6 {
> > > > > +                         reg = <0x06>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +                 mdio@7 {
> > > > > +                         reg = <0x07>;
> > > > > +                         #address-cells = <1>;
> > > > > +                         #size-cells = <0>;
> > > > > +                 };
> > > > > +         };
> > > > > + };
> > > > > +
> > > > >   i2c-mux@77 {
> > > > >           compatible = "nxp,pca9547";
> > > > >           reg = <0x77>;
> > > > > diff --git a/arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
> > > > > b/arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
> > > > > index a79f5c1ea56d..7def5252ac1a 100644
> > > > > --- a/arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
> > > > > +++ b/arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
> > > > > @@ -762,5 +762,27 @@
> > > > >                                <GIC_SPI 209 IRQ_TYPE_LEVEL_HIGH>;
> > > > >                   dma-coherent;
> > > > >           };
> > > > > +
> > > > > +         /* WRIOP0: 0x8b8_0000, E-MDIO1: 0x1_6000 */
> > > > > +         emdio1: mdio@8b96000 {
> > > > > +                 compatible = "fsl,fman-memac-mdio";
> > > > > +                 reg = <0x0 0x8b96000 0x0 0x1000>;
> > > > > +                 interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
> > > > > +                 #address-cells = <1>;
> > > > > +                 #size-cells = <0>;
> > > > > +                 little-endian;  /* force the driver in LE mode */
> > > > > +                 status = "disabled";
> > > > > +         };
> > > > > +
> > > > > +         /* WRIOP0: 0x8b8_0000, E-MDIO2: 0x1_7000 */
> > > > > +         emdio2: mdio@8b97000 {
> > > > > +                 compatible = "fsl,fman-memac-mdio";
> > > > > +                 reg = <0x0 0x8b97000 0x0 0x1000>;
> > > > > +                 interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
> > > > > +                 #address-cells = <1>;
> > > > > +                 #size-cells = <0>;
> > > > > +                 little-endian;  /* force the driver in LE mode */
> > > > > +                 status = "disabled";
> > > > > +         };
> > > > >   };
> > > > >  };
> > > > > --
> > > > > 2.17.1
> > > > >

^ permalink raw reply

* Re: [PATCH] can: mark expected switch fall-throughs
From: Alexandre Belloni @ 2019-02-14 22:17 UTC (permalink / raw)
  To: Gustavo A. R. Silva
  Cc: Nicolas.Ferre, wg, mkl, davem, Ludovic.Desroches, linux-can,
	netdev, linux-arm-kernel, linux-kernel
In-Reply-To: <daae008e-35fd-7553-fcb2-7932fe53b959@embeddedor.com>

Hi,

On 14/02/2019 15:37:26-0600, Gustavo A. R. Silva wrote:
> 
> 
> On 1/30/19 2:11 AM, Nicolas.Ferre@microchip.com wrote:
> > On 29/01/2019 at 19:06, Gustavo A. R. Silva wrote:
> >> In preparation to enabling -Wimplicit-fallthrough, mark switch cases
> >> where we are expecting to fall through.
> >>
> >> This patch fixes the following warnings:
> >>
> >> drivers/net/can/peak_canfd/peak_pciefd_main.c:668:3: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >> drivers/net/can/spi/mcp251x.c:875:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >> drivers/net/can/usb/peak_usb/pcan_usb.c:422:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >> drivers/net/can/at91_can.c:895:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >> drivers/net/can/at91_can.c:953:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >> drivers/net/can/usb/peak_usb/pcan_usb.c: In function ‘pcan_usb_decode_error’:
> >> drivers/net/can/usb/peak_usb/pcan_usb.c:422:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
> >>     if (n & PCAN_USB_ERROR_BUS_LIGHT) {
> >>        ^
> >> drivers/net/can/usb/peak_usb/pcan_usb.c:428:2: note: here
> >>    case CAN_STATE_ERROR_WARNING:
> >>    ^~~~
> >>
> >> Warning level 3 was used: -Wimplicit-fallthrough=3
> >>
> >> This patch is part of the ongoing efforts to enabling
> >> -Wimplicit-fallthrough.
> >>
> >> Notice that in some cases spelling mistakes were fixed.
> >> In other cases, the /* fall through */ comment is placed
> >> at the bottom of the case statement, which is what GCC
> >> is expecting to find.
> >>
> >> Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
> >> ---
> >>   drivers/net/can/at91_can.c                    | 6 ++++--
> > 
> > For this one:
> > Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
> > 
> 
> Thanks, Nicolas.
> 

I though I had a déjà vu but you actually sent the at91 part twice.

> Dave:
> 
> I wonder if you can take this patch.
> 
> Thanks
> --
> Gustavo
> 
> >>   drivers/net/can/peak_canfd/peak_pciefd_main.c | 2 +-
> >>   drivers/net/can/spi/mcp251x.c                 | 3 ++-
> >>   drivers/net/can/usb/peak_usb/pcan_usb.c       | 2 +-
> >>   4 files changed, 8 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
> >> index d98c69045b17..1718c20f9c99 100644
> >> --- a/drivers/net/can/at91_can.c
> >> +++ b/drivers/net/can/at91_can.c
> >> @@ -902,7 +902,8 @@ static void at91_irq_err_state(struct net_device *dev,
> >>   				CAN_ERR_CRTL_TX_WARNING :
> >>   				CAN_ERR_CRTL_RX_WARNING;
> >>   		}
> >> -	case CAN_STATE_ERROR_WARNING:	/* fallthrough */
> >> +		/* fall through */
> >> +	case CAN_STATE_ERROR_WARNING:
> >>   		/*
> >>   		 * from: ERROR_ACTIVE, ERROR_WARNING
> >>   		 * to  : ERROR_PASSIVE, BUS_OFF
> >> @@ -951,7 +952,8 @@ static void at91_irq_err_state(struct net_device *dev,
> >>   		netdev_dbg(dev, "Error Active\n");
> >>   		cf->can_id |= CAN_ERR_PROT;
> >>   		cf->data[2] = CAN_ERR_PROT_ACTIVE;
> >> -	case CAN_STATE_ERROR_WARNING:	/* fallthrough */

Seriously, for that one, you should fix the compiler. The fall through
is not implicit, it is actually quite explicit and the warning is simply
wrong.

Also, the gcc documentation says that -Wimplicit-fallthrough=3
recognizes /* fallthrough */ as a proper fall through comment (and I
tested with gcc 8.2).

The matching regex is [ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?

-- 
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply

* Re: [RESEND PATCH net] mm: page_alloc: fix ref bias in page_frag_alloc() for 1-byte allocs
From: David Miller @ 2019-02-14 22:21 UTC (permalink / raw)
  To: jannh; +Cc: alexander.duyck, netdev, linux-kernel
In-Reply-To: <CAG48ez3p9kyyON4qDybveNhCNdTPfsvi3hUp7rDQUk-f43xMsQ@mail.gmail.com>

From: Jann Horn <jannh@google.com>
Date: Thu, 14 Feb 2019 22:26:22 +0100

> On Thu, Feb 14, 2019 at 6:13 PM David Miller <davem@davemloft.net> wrote:
>>
>> From: Jann Horn <jannh@google.com>
>> Date: Wed, 13 Feb 2019 22:45:59 +0100
>>
>> > The basic idea behind ->pagecnt_bias is: If we pre-allocate the maximum
>> > number of references that we might need to create in the fastpath later,
>> > the bump-allocation fastpath only has to modify the non-atomic bias value
>> > that tracks the number of extra references we hold instead of the atomic
>> > refcount. The maximum number of allocations we can serve (under the
>> > assumption that no allocation is made with size 0) is nc->size, so that's
>> > the bias used.
>> >
>> > However, even when all memory in the allocation has been given away, a
>> > reference to the page is still held; and in the `offset < 0` slowpath, the
>> > page may be reused if everyone else has dropped their references.
>> > This means that the necessary number of references is actually
>> > `nc->size+1`.
>> >
>> > Luckily, from a quick grep, it looks like the only path that can call
>> > page_frag_alloc(fragsz=1) is TAP with the IFF_NAPI_FRAGS flag, which
>> > requires CAP_NET_ADMIN in the init namespace and is only intended to be
>> > used for kernel testing and fuzzing.
>> >
>> > To test for this issue, put a `WARN_ON(page_ref_count(page) == 0)` in the
>> > `offset < 0` path, below the virt_to_page() call, and then repeatedly call
>> > writev() on a TAP device with IFF_TAP|IFF_NO_PI|IFF_NAPI_FRAGS|IFF_NAPI,
>> > with a vector consisting of 15 elements containing 1 byte each.
>> >
>> > Signed-off-by: Jann Horn <jannh@google.com>
>>
>> Applied and queued up for -stable.
> 
> I had sent a v2 at Alexander Duyck's request an hour before you
> applied the patch (with a minor difference that, in Alexander's
> opinion, might be slightly more efficient). I guess the net tree
> doesn't work like the mm tree, where patches can get removed and
> replaced with newer versions? So if Alexander wants that change
> (s/size/PAGE_FRAG_CACHE_MAX_SIZE/ in the refcount), someone has to
> send that as a separate patch?

Yes, please send a follow-up.  Sorry about that.

^ permalink raw reply

* Re: [PATCH net-next] net: caif: use skb helpers instead of open-coding them
From: Jann Horn @ 2019-02-14 22:00 UTC (permalink / raw)
  To: David S. Miller, Jann Horn, abi.dmitryt; +Cc: Network Development
In-Reply-To: <20190214213547.41783-1-jannh@google.com>

On Thu, Feb 14, 2019 at 10:35 PM Jann Horn <jannh@google.com> wrote:
> Use existing skb_put_data() and skb_trim() instead of open-coding them,
> with the skb_put_data() first so that logically, `skb` still contains the
> data to be copied in its data..tail area when skb_put_data() reads it.
> This change on its own is a cleanup, and it is also necessary for potential
> future integration of skbuffs with things like KASAN.

The maintainer's email address (dmitry.tarnyagin@lockless.no) bounces
with a "553 5.3.0 <dmitry.tarnyagin@lockless.no>... No such user
here". His second address that shows up in the git log,
dmitry.tarnyagin@stericsson.com, also doesn't exist:

$ dig +short stericsson.com MX
10 mxb-00178001.gslb.pphosted.com.
10 mxa-00178001.gslb.pphosted.com.
$ nc -vC mxa-00178001.gslb.pphosted.com 25
Connection to mxa-00178001.gslb.pphosted.com 25 port [tcp/smtp] succeeded!
220 mx07-00178001.pphosted.com ESMTP mfa-m0046668
HELO thejh.net
250 mx07-00178001.pphosted.com Hello {...} (may be forged), pleased to meet you
MAIL FROM: <test@thejh.net>
250 2.1.0 Sender ok
RCPT TO: <dmitry.tarnyagin@stericsson.com>
550 5.1.1 User Unknown

But his third address from a commit he made in 2011,
abi.dmitryt@gmail.com, does exist, so I'm CC'ing that now.

@Dmitry Tarnyagin: Do you still consider yourself to be the maintainer
of the CAIF subsystem? MAINTAINERS currently lists it as "Supported"
by you, which is defined as "Someone is actually paid to look after
this".

> Signed-off-by: Jann Horn <jannh@google.com>
> ---
>  net/caif/cfpkt_skbuff.c | 16 +++++-----------
>  1 file changed, 5 insertions(+), 11 deletions(-)
>
> diff --git a/net/caif/cfpkt_skbuff.c b/net/caif/cfpkt_skbuff.c
> index 38c2b7a890dd..37ac5ca0ffdf 100644
> --- a/net/caif/cfpkt_skbuff.c
> +++ b/net/caif/cfpkt_skbuff.c
> @@ -319,16 +319,12 @@ struct cfpkt *cfpkt_append(struct cfpkt *dstpkt,
>                 if (tmppkt == NULL)
>                         return NULL;
>                 tmp = pkt_to_skb(tmppkt);
> -               skb_set_tail_pointer(tmp, dstlen);
> -               tmp->len = dstlen;
> -               memcpy(tmp->data, dst->data, dstlen);
> +               skb_put_data(tmp, dst->data, dstlen);
>                 cfpkt_destroy(dstpkt);
>                 dst = tmp;
>         }
> -       memcpy(skb_tail_pointer(dst), add->data, skb_headlen(add));
> +       skb_put_data(dst, add->data, skb_headlen(add));
>         cfpkt_destroy(addpkt);
> -       dst->tail += addlen;
> -       dst->len += addlen;
>         return skb_to_pkt(dst);
>  }
>
> @@ -359,13 +355,11 @@ struct cfpkt *cfpkt_split(struct cfpkt *pkt, u16 pos)
>         if (skb2 == NULL)
>                 return NULL;
>
> +       skb_put_data(skb2, split, len2nd);
> +
>         /* Reduce the length of the original packet */
> -       skb_set_tail_pointer(skb, pos);
> -       skb->len = pos;
> +       skb_trim(skb, pos);
>
> -       memcpy(skb2->data, split, len2nd);
> -       skb2->tail += len2nd;
> -       skb2->len += len2nd;
>         skb2->priority = skb->priority;
>         return skb_to_pkt(skb2);
>  }
> --
> 2.21.0.rc0.258.g878e2cd30e-goog
>

^ permalink raw reply

* Re: [PATCHv4 5/6] net: stmmac: socfpga: Use shared System Manager driver
From: David Miller @ 2019-02-14 21:56 UTC (permalink / raw)
  To: thor.thayer
  Cc: lee.jones, arnd, dinguyen, linux, catalin.marinas, will.deacon,
	peppe.cavallaro, alexandre.torgue, joabreu, olof, mcoquelin.stm32,
	mchehab+samsung, mark.rutland, bjorn.andersson, devicetree,
	linux-kernel, linux-arm-kernel, netdev
In-Reply-To: <1550177058-1860-6-git-send-email-thor.thayer@linux.intel.com>

From: thor.thayer@linux.intel.com
Date: Thu, 14 Feb 2019 14:44:17 -0600

> From: Thor Thayer <thor.thayer@linux.intel.com>
> 
> The ARM64 System Manager requires a different method of reading
> the System Manager than ARM32. A new System Manager driver was
> created to steer ARM32 System Manager calls to regmap_mmio and
> ARM64 System Manager calls to the new access method.
> 
> Convert from syscon to the shared System Manager driver so that
> both ARM64 and ARM32 are supported.
> 
> Signed-off-by: Thor Thayer <thor.thayer@linux.intel.com>

Acked-by: David S. Miller <davem@davemloft.net>

^ permalink raw reply

* [PATCH net-next 3/3] nfp: devlink: allow flashing the device via devlink
From: Jakub Kicinski @ 2019-02-14 21:40 UTC (permalink / raw)
  To: davem, jiri; +Cc: netdev, oss-drivers, mkubecek, andrew, Jakub Kicinski
In-Reply-To: <20190214214046.19182-1-jakub.kicinski@netronome.com>

Devlink now allows updating device flash.  Implement this
callback.

Compared to ethtool update we no longer have to release
the networking locks - devlink doesn't take them.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
 .../net/ethernet/netronome/nfp/nfp_devlink.c  | 10 +++++
 drivers/net/ethernet/netronome/nfp/nfp_main.c | 41 +++++++++++++++++++
 drivers/net/ethernet/netronome/nfp/nfp_main.h |  2 +
 .../ethernet/netronome/nfp/nfp_net_ethtool.c  | 35 ++--------------
 4 files changed, 56 insertions(+), 32 deletions(-)

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
index 080a301f379e..db2da99f6aa7 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
@@ -330,6 +330,15 @@ nfp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
 	return err;
 }
 
+static int
+nfp_devlink_flash_update(struct devlink *devlink, const char *path,
+			 const char *component, struct netlink_ext_ack *extack)
+{
+	if (component)
+		return -EOPNOTSUPP;
+	return nfp_flash_update_common(devlink_priv(devlink), path, extack);
+}
+
 const struct devlink_ops nfp_devlink_ops = {
 	.port_split		= nfp_devlink_port_split,
 	.port_unsplit		= nfp_devlink_port_unsplit,
@@ -338,6 +347,7 @@ const struct devlink_ops nfp_devlink_ops = {
 	.eswitch_mode_get	= nfp_devlink_eswitch_mode_get,
 	.eswitch_mode_set	= nfp_devlink_eswitch_mode_set,
 	.info_get		= nfp_devlink_info_get,
+	.flash_update		= nfp_devlink_flash_update,
 };
 
 int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.c b/drivers/net/ethernet/netronome/nfp/nfp_main.c
index 6c10e8d119e4..f4c8776e42b6 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_main.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_main.c
@@ -300,6 +300,47 @@ static int nfp_pcie_sriov_configure(struct pci_dev *pdev, int num_vfs)
 		return nfp_pcie_sriov_enable(pdev, num_vfs);
 }
 
+int nfp_flash_update_common(struct nfp_pf *pf, const char *path,
+			    struct netlink_ext_ack *extack)
+{
+	struct device *dev = &pf->pdev->dev;
+	const struct firmware *fw;
+	struct nfp_nsp *nsp;
+	int err;
+
+	nsp = nfp_nsp_open(pf->cpp);
+	if (IS_ERR(nsp)) {
+		err = PTR_ERR(nsp);
+		if (extack)
+			NL_SET_ERR_MSG_MOD(extack, "can't access NSP");
+		else
+			dev_err(dev, "Failed to access the NSP: %d\n", err);
+		return err;
+	}
+
+	err = request_firmware_direct(&fw, path, dev);
+	if (err) {
+		NL_SET_ERR_MSG_MOD(extack,
+				   "unable to read flash file from disk");
+		goto exit_close_nsp;
+	}
+
+	dev_info(dev, "Please be patient while writing flash image: %s\n",
+		 path);
+
+	err = nfp_nsp_write_flash(nsp, fw);
+	if (err < 0)
+		goto exit_release_fw;
+	dev_info(dev, "Finished writing flash image\n");
+	err = 0;
+
+exit_release_fw:
+	release_firmware(fw);
+exit_close_nsp:
+	nfp_nsp_close(nsp);
+	return err;
+}
+
 static const struct firmware *
 nfp_net_fw_request(struct pci_dev *pdev, struct nfp_pf *pf, const char *name)
 {
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.h b/drivers/net/ethernet/netronome/nfp/nfp_main.h
index a3613a2e0aa5..b7211f200d22 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_main.h
+++ b/drivers/net/ethernet/netronome/nfp/nfp_main.h
@@ -164,6 +164,8 @@ nfp_pf_map_rtsym(struct nfp_pf *pf, const char *name, const char *sym_fmt,
 		 unsigned int min_size, struct nfp_cpp_area **area);
 int nfp_mbox_cmd(struct nfp_pf *pf, u32 cmd, void *in_data, u64 in_length,
 		 void *out_data, u64 out_length);
+int nfp_flash_update_common(struct nfp_pf *pf, const char *path,
+			    struct netlink_ext_ack *extack);
 
 enum nfp_dump_diag {
 	NFP_DUMP_NSP_DIAG = 0,
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
index cb9c512abc76..8f189149efc5 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
@@ -1237,11 +1237,8 @@ static int nfp_net_set_channels(struct net_device *netdev,
 static int
 nfp_net_flash_device(struct net_device *netdev, struct ethtool_flash *flash)
 {
-	const struct firmware *fw;
 	struct nfp_app *app;
-	struct nfp_nsp *nsp;
-	struct device *dev;
-	int err;
+	int ret;
 
 	if (flash->region != ETHTOOL_FLASH_ALL_REGIONS)
 		return -EOPNOTSUPP;
@@ -1250,39 +1247,13 @@ nfp_net_flash_device(struct net_device *netdev, struct ethtool_flash *flash)
 	if (!app)
 		return -EOPNOTSUPP;
 
-	dev = &app->pdev->dev;
-
-	nsp = nfp_nsp_open(app->cpp);
-	if (IS_ERR(nsp)) {
-		err = PTR_ERR(nsp);
-		dev_err(dev, "Failed to access the NSP: %d\n", err);
-		return err;
-	}
-
-	err = request_firmware_direct(&fw, flash->data, dev);
-	if (err)
-		goto exit_close_nsp;
-
-	dev_info(dev, "Please be patient while writing flash image: %s\n",
-		 flash->data);
 	dev_hold(netdev);
 	rtnl_unlock();
-
-	err = nfp_nsp_write_flash(nsp, fw);
-	if (err < 0) {
-		dev_err(dev, "Flash write failed: %d\n", err);
-		goto exit_rtnl_lock;
-	}
-	dev_info(dev, "Finished writing flash image\n");
-
-exit_rtnl_lock:
+	ret = nfp_flash_update_common(app->pf, flash->data, NULL);
 	rtnl_lock();
 	dev_put(netdev);
-	release_firmware(fw);
 
-exit_close_nsp:
-	nfp_nsp_close(nsp);
-	return err;
+	return ret;
 }
 
 static const struct ethtool_ops nfp_net_ethtool_ops = {
-- 
2.19.2


^ permalink raw reply related

* [PATCH net-next 2/3] ethtool: add compat for flash update
From: Jakub Kicinski @ 2019-02-14 21:40 UTC (permalink / raw)
  To: davem, jiri; +Cc: netdev, oss-drivers, mkubecek, andrew, Jakub Kicinski
In-Reply-To: <20190214214046.19182-1-jakub.kicinski@netronome.com>

If driver does not support ethtool flash update operation
call into devlink.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
 include/net/devlink.h |  7 +++++++
 net/core/devlink.c    | 30 ++++++++++++++++++++++++++++++
 net/core/ethtool.c    | 12 +++++++++---
 3 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/include/net/devlink.h b/include/net/devlink.h
index 18d7a051f412..a2da49dd9147 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -1195,11 +1195,18 @@ devlink_health_report(struct devlink_health_reporter *reporter,
 #if IS_REACHABLE(CONFIG_NET_DEVLINK)
 void devlink_compat_running_version(struct net_device *dev,
 				    char *buf, size_t len);
+int devlink_compat_flash_update(struct net_device *dev, const char *file_name);
 #else
 static inline void
 devlink_compat_running_version(struct net_device *dev, char *buf, size_t len)
 {
 }
+
+static inline int
+devlink_compat_flash_update(struct net_device *dev, const char *file_name)
+{
+	return -EOPNOTSUPP;
+}
 #endif
 
 #endif /* _NET_DEVLINK_H_ */
diff --git a/net/core/devlink.c b/net/core/devlink.c
index bd507e13bb7b..d169b5426d3d 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -6435,6 +6435,36 @@ void devlink_compat_running_version(struct net_device *dev,
 	mutex_unlock(&devlink_mutex);
 }
 
+int devlink_compat_flash_update(struct net_device *dev, const char *file_name)
+{
+	struct devlink_port *devlink_port;
+	struct devlink *devlink;
+
+	mutex_lock(&devlink_mutex);
+	list_for_each_entry(devlink, &devlink_list, list) {
+		mutex_lock(&devlink->lock);
+		list_for_each_entry(devlink_port, &devlink->port_list, list) {
+			int ret = -EOPNOTSUPP;
+
+			if (devlink_port->type != DEVLINK_PORT_TYPE_ETH ||
+			    devlink_port->type_dev != dev)
+				continue;
+
+			mutex_unlock(&devlink_mutex);
+			if (devlink->ops->flash_update)
+				ret = devlink->ops->flash_update(devlink,
+								 file_name,
+								 NULL, NULL);
+			mutex_unlock(&devlink->lock);
+			return ret;
+		}
+		mutex_unlock(&devlink->lock);
+	}
+	mutex_unlock(&devlink_mutex);
+
+	return -EOPNOTSUPP;
+}
+
 static int __init devlink_module_init(void)
 {
 	return genl_register_family(&devlink_nl_family);
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index d2c47cdf25da..1320e8dce559 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -2038,11 +2038,17 @@ static noinline_for_stack int ethtool_flash_device(struct net_device *dev,
 
 	if (copy_from_user(&efl, useraddr, sizeof(efl)))
 		return -EFAULT;
+	efl.data[ETHTOOL_FLASH_MAX_FILENAME - 1] = 0;
 
-	if (!dev->ethtool_ops->flash_device)
-		return -EOPNOTSUPP;
+	if (!dev->ethtool_ops->flash_device) {
+		int ret;
 
-	efl.data[ETHTOOL_FLASH_MAX_FILENAME - 1] = 0;
+		rtnl_unlock();
+		ret = devlink_compat_flash_update(dev, efl.data);
+		rtnl_lock();
+
+		return ret;
+	}
 
 	return dev->ethtool_ops->flash_device(dev, &efl);
 }
-- 
2.19.2


^ permalink raw reply related

* [PATCH net-next 1/3] devlink: add flash update command
From: Jakub Kicinski @ 2019-02-14 21:40 UTC (permalink / raw)
  To: davem, jiri; +Cc: netdev, oss-drivers, mkubecek, andrew, Jakub Kicinski
In-Reply-To: <20190214214046.19182-1-jakub.kicinski@netronome.com>

Add devlink flash update command. Advanced NICs have firmware
stored in flash and often cryptographically secured. Updating
that flash is handled by management firmware. Ethtool has a
flash update command which served us well, however, it has two
shortcomings:
 - it takes rtnl_lock unnecessarily - really flash update has
   nothing to do with networking, so using a networking device
   as a handle is suboptimal, which leads us to the second one:
 - it requires a functioning netdev - in case device enters an
   error state and can't spawn a netdev (e.g. communication
   with the device fails) there is no netdev to use as a handle
   for flashing.

Devlink already has the ability to report the firmware versions,
now with the ability to update the firmware/flash we will be
able to recover devices in bad state.

To enable updates of sub-components of the FW allow passing
component name.  This name should correspond to one of the
versions reported in devlink info.

v1: - replace target id with component name (Jiri).

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
 include/net/devlink.h        |  3 +++
 include/uapi/linux/devlink.h |  6 ++++++
 net/core/devlink.c           | 30 ++++++++++++++++++++++++++++++
 3 files changed, 39 insertions(+)

diff --git a/include/net/devlink.h b/include/net/devlink.h
index c6d88759b7d5..18d7a051f412 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -521,6 +521,9 @@ struct devlink_ops {
 				      struct netlink_ext_ack *extack);
 	int (*info_get)(struct devlink *devlink, struct devlink_info_req *req,
 			struct netlink_ext_ack *extack);
+	int (*flash_update)(struct devlink *devlink, const char *file_name,
+			    const char *component,
+			    struct netlink_ext_ack *extack);
 };
 
 static inline void *devlink_priv(struct devlink *devlink)
diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
index 72d9f7c89190..53de8802a000 100644
--- a/include/uapi/linux/devlink.h
+++ b/include/uapi/linux/devlink.h
@@ -103,6 +103,8 @@ enum devlink_command {
 	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
 	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
 
+	DEVLINK_CMD_FLASH_UPDATE,
+
 	/* add new commands above here */
 	__DEVLINK_CMD_MAX,
 	DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
@@ -326,6 +328,10 @@ enum devlink_attr {
 	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS,		/* u64 */
 	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD,	/* u64 */
 	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER,	/* u8 */
+
+	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME,	/* string */
+	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT,	/* string */
+
 	/* add new attributes above here, update the policy in devlink.c */
 
 	__DEVLINK_ATTR_MAX,
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 283c3ed9f25e..bd507e13bb7b 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -2660,6 +2660,27 @@ static int devlink_nl_cmd_reload(struct sk_buff *skb, struct genl_info *info)
 	return devlink->ops->reload(devlink, info->extack);
 }
 
+static int devlink_nl_cmd_flash_update(struct sk_buff *skb,
+				       struct genl_info *info)
+{
+	struct devlink *devlink = info->user_ptr[0];
+	const char *file_name, *component;
+	struct nlattr *nla_component;
+
+	if (!devlink->ops->flash_update)
+		return -EOPNOTSUPP;
+
+	if (!info->attrs[DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME])
+		return -EINVAL;
+	file_name = nla_data(info->attrs[DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME]);
+
+	nla_component = info->attrs[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT];
+	component = nla_component ? nla_data(nla_component) : NULL;
+
+	return devlink->ops->flash_update(devlink, file_name, component,
+					  info->extack);
+}
+
 static const struct devlink_param devlink_param_generic[] = {
 	{
 		.id = DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET,
@@ -4868,6 +4889,8 @@ static const struct nla_policy devlink_nl_policy[DEVLINK_ATTR_MAX + 1] = {
 	[DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING },
 	[DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = { .type = NLA_U64 },
 	[DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER] = { .type = NLA_U8 },
+	[DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME] = { .type = NLA_NUL_STRING },
+	[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT] = { .type = NLA_NUL_STRING },
 };
 
 static const struct genl_ops devlink_nl_ops[] = {
@@ -5156,6 +5179,13 @@ static const struct genl_ops devlink_nl_ops[] = {
 		.internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
 				  DEVLINK_NL_FLAG_NO_LOCK,
 	},
+	{
+		.cmd = DEVLINK_CMD_FLASH_UPDATE,
+		.doit = devlink_nl_cmd_flash_update,
+		.policy = devlink_nl_policy,
+		.flags = GENL_ADMIN_PERM,
+		.internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
+	},
 };
 
 static struct genl_family devlink_nl_family __ro_after_init = {
-- 
2.19.2


^ permalink raw reply related


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