Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH net-next 09/16] net/mlx5e: Extend tx reporter diagnostics output
From: Jiri Pirko @ 2019-07-08 12:55 UTC (permalink / raw)
  To: Tariq Toukan
  Cc: David S. Miller, netdev, Eran Ben Elisha, ayal, jiri,
	Saeed Mahameed, moshe
In-Reply-To: <1562500388-16847-10-git-send-email-tariqt@mellanox.com>

Sun, Jul 07, 2019 at 01:53:01PM CEST, tariqt@mellanox.com wrote:
>From: Aya Levin <ayal@mellanox.com>
>
>Enhance tx reporter's diagnostics output to include: information common
>to all SQs: SQ size, SQ stride size.
>In addition add channel ix, cc and pc.
>
>$ devlink health diagnose pci/0000:00:0b.0 reporter tx
>Common config:
>   SQ: stride size: 64 size: 1024
> SQs:
>   channel ix: 0 sqn: 4283 HW state: 1 stopped: false cc: 0 pc: 0
>   channel ix: 1 sqn: 4288 HW state: 1 stopped: false cc: 0 pc: 0
>   channel ix: 2 sqn: 4293 HW state: 1 stopped: false cc: 0 pc: 0
>   channel ix: 3 sqn: 4298 HW state: 1 stopped: false cc: 0 pc: 0
>
>$ devlink health diagnose pci/0000:00:0b.0 reporter tx -jp
>{
>    "Common config": [
>        "SQ": {
>            "stride size": 64,
>            "size": 1024
>        } ],
>    "SQs": [ {
>            "channel ix": 0,
>            "sqn": 4283,
>            "HW state": 1,
>            "stopped": false,
>            "cc": 0,
>            "pc": 0
>        },{
>            "channel ix": 1,
>            "sqn": 4288,
>            "HW state": 1,
>            "stopped": false,
>            "cc": 0,
>            "pc": 0
>        },{
>            "channel ix": 2,
>            "sqn": 4293,
>            "HW state": 1,
>            "stopped": false,
>            "cc": 0,
>            "pc": 0
>        },{
>            "channel ix": 3,
>            "sqn": 4298,
>            "HW state": 1,
>            "stopped": false,
>            "cc": 0,
>            "pc": 0
>         } ]
>}
>
>Signed-off-by: Aya Levin <ayal@mellanox.com>
>Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
>---
> .../net/ethernet/mellanox/mlx5/core/en/health.c    | 30 ++++++++++++++++
> .../net/ethernet/mellanox/mlx5/core/en/health.h    |  3 ++
> .../ethernet/mellanox/mlx5/core/en/reporter_tx.c   | 42 ++++++++++++++++++++++
> 3 files changed, 75 insertions(+)
>
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/health.c b/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
>index 60166e5432ae..0d44b081259f 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
>@@ -4,6 +4,36 @@
> #include "health.h"
> #include "lib/eq.h"
> 
>+int mlx5e_reporter_named_obj_nest_start(struct devlink_fmsg *fmsg, char *name)
>+{
>+	int err;
>+
>+	err = devlink_fmsg_pair_nest_start(fmsg, name);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_obj_nest_start(fmsg);
>+	if (err)
>+		return err;
>+
>+	return 0;
>+}
>+
>+int mlx5e_reporter_named_obj_nest_end(struct devlink_fmsg *fmsg)
>+{
>+	int err;
>+
>+	err = devlink_fmsg_pair_nest_end(fmsg);

You should end the obj nest first.


>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_obj_nest_end(fmsg);
>+	if (err)
>+		return err;
>+
>+	return 0;
>+}
>+
> int mlx5e_health_sq_to_ready(struct mlx5e_channel *channel, u32 sqn)
> {
> 	struct mlx5_core_dev *mdev = channel->mdev;
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/health.h b/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
>index 960aa18c425d..0fecad63135c 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
>@@ -11,6 +11,9 @@
> void mlx5e_reporter_tx_err_cqe(struct mlx5e_txqsq *sq);
> int mlx5e_reporter_tx_timeout(struct mlx5e_txqsq *sq);
> 
>+int mlx5e_reporter_named_obj_nest_start(struct devlink_fmsg *fmsg, char *name);
>+int mlx5e_reporter_named_obj_nest_end(struct devlink_fmsg *fmsg);
>+
> #define MLX5E_REPORTER_PER_Q_MAX_LEN 256
> 
> struct mlx5e_err_ctx {
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
>index dd6417930461..c481f7142a12 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
>@@ -153,6 +153,10 @@ static int mlx5e_tx_reporter_recover(struct devlink_health_reporter *reporter,
> 	if (err)
> 		return err;
> 
>+	err = devlink_fmsg_u32_pair_put(fmsg, "channel ix", sq->channel->ix);

"ix" is an attribute of the channel. I think it should be nested under
"channel" here.


>+	if (err)
>+		return err;
>+
> 	err = devlink_fmsg_u32_pair_put(fmsg, "sqn", sq->sqn);
> 	if (err)
> 		return err;
>@@ -165,6 +169,14 @@ static int mlx5e_tx_reporter_recover(struct devlink_health_reporter *reporter,
> 	if (err)
> 		return err;
> 
>+	err = devlink_fmsg_u32_pair_put(fmsg, "cc", sq->cc);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_u32_pair_put(fmsg, "pc", sq->pc);
>+	if (err)
>+		return err;
>+
> 	err = devlink_fmsg_obj_nest_end(fmsg);
> 	if (err)
> 		return err;
>@@ -176,6 +188,9 @@ static int mlx5e_tx_reporter_diagnose(struct devlink_health_reporter *reporter,
> 				      struct devlink_fmsg *fmsg)
> {
> 	struct mlx5e_priv *priv = devlink_health_reporter_priv(reporter);
>+	struct mlx5e_txqsq *generic_sq = priv->txq2sq[0];
>+	u32 sq_stride, sq_sz;
>+
> 	int i, err = 0;
> 
> 	mutex_lock(&priv->state_lock);
>@@ -183,6 +198,33 @@ static int mlx5e_tx_reporter_diagnose(struct devlink_health_reporter *reporter,
> 	if (!test_bit(MLX5E_STATE_OPENED, &priv->state))
> 		goto unlock;
> 
>+	sq_sz = mlx5_wq_cyc_get_size(&generic_sq->wq);
>+	sq_stride = MLX5_SEND_WQE_BB;
>+
>+	err = devlink_fmsg_arr_pair_nest_start(fmsg, "Common config");
>+	if (err)
>+		goto unlock;
>+
>+	err = mlx5e_reporter_named_obj_nest_start(fmsg, "SQ");
>+	if (err)
>+		goto unlock;
>+
>+	err = devlink_fmsg_u64_pair_put(fmsg, "stride size", sq_stride);
>+	if (err)
>+		goto unlock;
>+
>+	err = devlink_fmsg_u32_pair_put(fmsg, "size", sq_sz);
>+	if (err)
>+		goto unlock;
>+
>+	err = devlink_fmsg_arr_pair_nest_end(fmsg);

Which nest is this supposed to end? Looks like it is extra and
should not be here...


>+	if (err)
>+		goto unlock;
>+
>+	err = mlx5e_reporter_named_obj_nest_end(fmsg);
>+	if (err)
>+		goto unlock;
>+
> 	err = devlink_fmsg_arr_pair_nest_start(fmsg, "SQs");
> 	if (err)
> 		goto unlock;
>-- 
>1.8.3.1
>

^ permalink raw reply

* [PATCH] [net-next] net/mlx5e: xsk: dynamically allocate mlx5e_channel_param
From: Arnd Bergmann @ 2019-07-08 12:55 UTC (permalink / raw)
  To: Saeed Mahameed, Leon Romanovsky, David S. Miller,
	Alexei Starovoitov, Daniel Borkmann, Jakub Kicinski,
	Jesper Dangaard Brouer, John Fastabend
  Cc: Arnd Bergmann, Maxim Mikityanskiy, Tariq Toukan, netdev,
	linux-rdma, linux-kernel, xdp-newbies, bpf

The structure is too large to put on the stack, resulting in a
warning on 32-bit ARM:

drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c:59:5: error: stack frame size of 1344 bytes in function
      'mlx5e_open_xsk' [-Werror,-Wframe-larger-than=]

Use kzalloc() instead.

Fixes: a038e9794541 ("net/mlx5e: Add XSK zero-copy support")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 .../mellanox/mlx5/core/en/xsk/setup.c         | 25 ++++++++++++-------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c b/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
index aaffa6f68dc0..db9bbec68dbf 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
@@ -60,24 +60,28 @@ int mlx5e_open_xsk(struct mlx5e_priv *priv, struct mlx5e_params *params,
 		   struct mlx5e_xsk_param *xsk, struct xdp_umem *umem,
 		   struct mlx5e_channel *c)
 {
-	struct mlx5e_channel_param cparam = {};
+	struct mlx5e_channel_param *cparam;
 	struct dim_cq_moder icocq_moder = {};
 	int err;
 
 	if (!mlx5e_validate_xsk_param(params, xsk, priv->mdev))
 		return -EINVAL;
 
-	mlx5e_build_xsk_cparam(priv, params, xsk, &cparam);
+	cparam = kzalloc(sizeof(*cparam), GFP_KERNEL);
+	if (!cparam)
+		return -ENOMEM;
 
-	err = mlx5e_open_cq(c, params->rx_cq_moderation, &cparam.rx_cq, &c->xskrq.cq);
+	mlx5e_build_xsk_cparam(priv, params, xsk, cparam);
+
+	err = mlx5e_open_cq(c, params->rx_cq_moderation, &cparam->rx_cq, &c->xskrq.cq);
 	if (unlikely(err))
-		return err;
+		goto err_kfree_cparam;
 
-	err = mlx5e_open_rq(c, params, &cparam.rq, xsk, umem, &c->xskrq);
+	err = mlx5e_open_rq(c, params, &cparam->rq, xsk, umem, &c->xskrq);
 	if (unlikely(err))
 		goto err_close_rx_cq;
 
-	err = mlx5e_open_cq(c, params->tx_cq_moderation, &cparam.tx_cq, &c->xsksq.cq);
+	err = mlx5e_open_cq(c, params->tx_cq_moderation, &cparam->tx_cq, &c->xsksq.cq);
 	if (unlikely(err))
 		goto err_close_rq;
 
@@ -87,18 +91,18 @@ int mlx5e_open_xsk(struct mlx5e_priv *priv, struct mlx5e_params *params,
 	 * is disabled and then reenabled, but the SQ continues receiving CQEs
 	 * from the old UMEM.
 	 */
-	err = mlx5e_open_xdpsq(c, params, &cparam.xdp_sq, umem, &c->xsksq, true);
+	err = mlx5e_open_xdpsq(c, params, &cparam->xdp_sq, umem, &c->xsksq, true);
 	if (unlikely(err))
 		goto err_close_tx_cq;
 
-	err = mlx5e_open_cq(c, icocq_moder, &cparam.icosq_cq, &c->xskicosq.cq);
+	err = mlx5e_open_cq(c, icocq_moder, &cparam->icosq_cq, &c->xskicosq.cq);
 	if (unlikely(err))
 		goto err_close_sq;
 
 	/* Create a dedicated SQ for posting NOPs whenever we need an IRQ to be
 	 * triggered and NAPI to be called on the correct CPU.
 	 */
-	err = mlx5e_open_icosq(c, params, &cparam.icosq, &c->xskicosq);
+	err = mlx5e_open_icosq(c, params, &cparam->icosq, &c->xskicosq);
 	if (unlikely(err))
 		goto err_close_icocq;
 
@@ -123,6 +127,9 @@ int mlx5e_open_xsk(struct mlx5e_priv *priv, struct mlx5e_params *params,
 err_close_rx_cq:
 	mlx5e_close_cq(&c->xskrq.cq);
 
+err_kfree_cparam:
+	kfree(cparam);
+
 	return err;
 }
 
-- 
2.20.0


^ permalink raw reply related

* Re: [PATCH 2/6] dt-bindings: can: rcar_can: Complete documentation for RZ/G2[EM]
From: Geert Uytterhoeven @ 2019-07-08 12:56 UTC (permalink / raw)
  To: Fabrizio Castro
  Cc: Simon Horman, Geert Uytterhoeven, Wolfgang Grandegger,
	Marc Kleine-Budde, Rob Herring, Mark Rutland, David S. Miller,
	linux-can, netdev,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	Chris Paterson, Biju Das, Linux-Renesas
In-Reply-To: <1560513214-28031-3-git-send-email-fabrizio.castro@bp.renesas.com>

On Fri, Jun 14, 2019 at 1:53 PM Fabrizio Castro
<fabrizio.castro@bp.renesas.com> wrote:
> Add missing RZ/G2[EM] CANFD clock specific documentation.
>
> Fixes: 868b7c0f43e6 ("dt-bindings: can: rcar_can: Add r8a774a1 support")
> Fixes: 0c11e7d0f51c ("dt-bindings: can: rcar_can: Add r8a774c0 support")
> Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
> Reviewed-by: Chris Paterson <Chris.Paterson2@renesas.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
I.e. applied and queued for v5.4.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply

* [PATCH net-next 1/2] bpf: skip sockopt hooks without CONFIG_NET
From: Arnd Bergmann @ 2019-07-08 12:57 UTC (permalink / raw)
  To: Alexei Starovoitov, Daniel Borkmann
  Cc: Arnd Bergmann, Andrii Nakryiko, Martin Lau, Stanislav Fomichev,
	Song Liu, Yonghong Song, Mauricio Vasquez B, Roman Gushchin,
	Matt Mullins, Willem de Bruijn, Andrey Ignatov, netdev, bpf,
	linux-kernel

When CONFIG_NET is disabled, we get a link error:

kernel/bpf/cgroup.o: In function `__cgroup_bpf_run_filter_setsockopt':
cgroup.c:(.text+0x3010): undefined reference to `lock_sock_nested'
cgroup.c:(.text+0x3258): undefined reference to `release_sock'
kernel/bpf/cgroup.o: In function `__cgroup_bpf_run_filter_getsockopt':
cgroup.c:(.text+0x3568): undefined reference to `lock_sock_nested'
cgroup.c:(.text+0x3870): undefined reference to `release_sock'
kernel/bpf/cgroup.o: In function `cg_sockopt_func_proto':
cgroup.c:(.text+0x41d8): undefined reference to `bpf_sk_storage_delete_proto'

None of this code is useful in this configuration anyway, so we can
simply hide it in an appropriate #ifdef.

Fixes: 0d01da6afc54 ("bpf: implement getsockopt and setsockopt hooks")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 include/linux/bpf_types.h | 2 ++
 kernel/bpf/cgroup.c       | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/include/linux/bpf_types.h b/include/linux/bpf_types.h
index eec5aeeeaf92..3c7222b2db96 100644
--- a/include/linux/bpf_types.h
+++ b/include/linux/bpf_types.h
@@ -30,8 +30,10 @@ BPF_PROG_TYPE(BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, raw_tracepoint_writable)
 #ifdef CONFIG_CGROUP_BPF
 BPF_PROG_TYPE(BPF_PROG_TYPE_CGROUP_DEVICE, cg_dev)
 BPF_PROG_TYPE(BPF_PROG_TYPE_CGROUP_SYSCTL, cg_sysctl)
+#ifdef CONFIG_NET
 BPF_PROG_TYPE(BPF_PROG_TYPE_CGROUP_SOCKOPT, cg_sockopt)
 #endif
+#endif
 #ifdef CONFIG_BPF_LIRC_MODE2
 BPF_PROG_TYPE(BPF_PROG_TYPE_LIRC_MODE2, lirc_mode2)
 #endif
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
index 76fa0076f20d..7be44460bd93 100644
--- a/kernel/bpf/cgroup.c
+++ b/kernel/bpf/cgroup.c
@@ -590,6 +590,7 @@ int cgroup_bpf_prog_query(const union bpf_attr *attr,
 	return ret;
 }
 
+#ifdef CONFIG_NET
 /**
  * __cgroup_bpf_run_filter_skb() - Run a program for packet filtering
  * @sk: The socket sending or receiving traffic
@@ -750,6 +751,7 @@ int __cgroup_bpf_run_filter_sock_ops(struct sock *sk,
 	return ret == 1 ? 0 : -EPERM;
 }
 EXPORT_SYMBOL(__cgroup_bpf_run_filter_sock_ops);
+#endif
 
 int __cgroup_bpf_check_dev_permission(short dev_type, u32 major, u32 minor,
 				      short access, enum bpf_attach_type type)
@@ -939,6 +941,7 @@ int __cgroup_bpf_run_filter_sysctl(struct ctl_table_header *head,
 }
 EXPORT_SYMBOL(__cgroup_bpf_run_filter_sysctl);
 
+#ifdef CONFIG_NET
 static bool __cgroup_bpf_prog_array_is_empty(struct cgroup *cgrp,
 					     enum bpf_attach_type attach_type)
 {
@@ -1120,6 +1123,7 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level,
 	return ret;
 }
 EXPORT_SYMBOL(__cgroup_bpf_run_filter_getsockopt);
+#endif
 
 static ssize_t sysctl_cpy_dir(const struct ctl_dir *dir, char **bufp,
 			      size_t *lenp)
@@ -1382,6 +1386,7 @@ const struct bpf_verifier_ops cg_sysctl_verifier_ops = {
 const struct bpf_prog_ops cg_sysctl_prog_ops = {
 };
 
+#ifdef CONFIG_NET
 static const struct bpf_func_proto *
 cg_sockopt_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
 {
@@ -1531,3 +1536,4 @@ const struct bpf_verifier_ops cg_sockopt_verifier_ops = {
 
 const struct bpf_prog_ops cg_sockopt_prog_ops = {
 };
+#endif
-- 
2.20.0


^ permalink raw reply related

* [PATCH net-next 2/2] bpf: avoid unused variable warning in tcp_bpf_rtt()
From: Arnd Bergmann @ 2019-07-08 12:57 UTC (permalink / raw)
  To: Eric Dumazet, David S. Miller, Alexei Starovoitov,
	Daniel Borkmann
  Cc: Arnd Bergmann, Priyaranjan Jha, Yuchung Cheng,
	Soheil Hassas Yeganeh, Stanislav Fomichev, Martin KaFai Lau,
	Song Liu, Yonghong Song, Neal Cardwell, Jason Baron, Yafang Shao,
	Ard Biesheuvel, netdev, linux-kernel, bpf
In-Reply-To: <20190708125733.3944836-1-arnd@arndb.de>

When CONFIG_BPF is disabled, we get a warning for an unused
variable:

In file included from drivers/target/target_core_device.c:26:
include/net/tcp.h:2226:19: error: unused variable 'tp' [-Werror,-Wunused-variable]
        struct tcp_sock *tp = tcp_sk(sk);

The variable is only used in one place, so it can be
replaced with its value there to avoid the warning.

Fixes: 23729ff23186 ("bpf: add BPF_CGROUP_SOCK_OPS callback that is executed on every RTT")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 include/net/tcp.h | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/include/net/tcp.h b/include/net/tcp.h
index e16d8a3fd3b4..cca3c59b98bf 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -2223,9 +2223,7 @@ static inline bool tcp_bpf_ca_needs_ecn(struct sock *sk)
 
 static inline void tcp_bpf_rtt(struct sock *sk)
 {
-	struct tcp_sock *tp = tcp_sk(sk);
-
-	if (BPF_SOCK_OPS_TEST_FLAG(tp, BPF_SOCK_OPS_RTT_CB_FLAG))
+	if (BPF_SOCK_OPS_TEST_FLAG(tcp_sk(sk), BPF_SOCK_OPS_RTT_CB_FLAG))
 		tcp_call_bpf(sk, BPF_SOCK_OPS_RTT_CB, 0, NULL);
 }
 
-- 
2.20.0


^ permalink raw reply related

* Re: [PATCH net-next 10/16] net/mlx5e: Add cq info to tx reporter diagnose
From: Jiri Pirko @ 2019-07-08 13:00 UTC (permalink / raw)
  To: Tariq Toukan
  Cc: David S. Miller, netdev, Eran Ben Elisha, ayal, jiri,
	Saeed Mahameed, moshe
In-Reply-To: <1562500388-16847-11-git-send-email-tariqt@mellanox.com>

Sun, Jul 07, 2019 at 01:53:02PM CEST, tariqt@mellanox.com wrote:
>From: Aya Levin <ayal@mellanox.com>
>
>Add cq information to general diagnose output: CQ size and stride size.
>Per SQ add information about the related CQ: cqn and CQ's HW status.
>
>$ devlink health diagnose pci/0000:00:0b.0 reporter tx
>Common config:
>   SQ: stride size: 64 size: 1024
>   CQ: stride size: 64 size: 1024
> SQs:
>   channel ix: 0 sqn: 4283 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 1030 HW status: 0

The nesting of "cqn" and "HW status" is not visible there. I know it is
comment to iproute2 patch, but still. Should be corrected in this patch
description too.

Other than this, the patch looks good.


>   channel ix: 1 sqn: 4288 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 1034 HW status: 0
>   channel ix: 2 sqn: 4293 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 1038 HW status: 0
>   channel ix: 3 sqn: 4298 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 1042 HW status: 0
>
>$ devlink health diagnose pci/0000:00:0b.0 reporter tx -jp
>{
>    "Common config": [
>        "SQ": {
>            "stride size": 64,
>            "size": 1024
>        },
>        "CQ": {
>            "stride size": 64,
>            "size": 1024
>        } ],
>    "SQs": [ {
>            "channel ix": 0,
>            "sqn": 4283,
>            "HW state": 1,
>            "stopped": false,
>            "cc": 0,
>            "pc": 0,
>            "CQ": {
>                "cqn": 1030,
>                "HW status": 0
>            }
>        },{
>            "channel ix": 1,
>            "sqn": 4288,
>            "HW state": 1,
>            "stopped": false,
>            "cc": 0,
>            "pc": 0,
>            "CQ": {
>                "cqn": 1034,
>                "HW status": 0
>            }
>        },{
>            "channel ix": 2,
>            "sqn": 4293,
>            "HW state": 1,
>            "stopped": false,
>            "cc": 0,
>            "pc": 0,
>            "CQ": {
>                "cqn": 1038,
>                "HW status": 0
>            }
>        },{
>            "channel ix": 3,
>            "sqn": 4298,
>            "HW state": 1,
>            "stopped": false,
>            "cc": 0,
>            "pc": 0,
>            "CQ": {
>                "cqn": 1042,
>                "HW status": 0
>            }
>        } ]
>}
>
>Signed-off-by: Aya Levin <ayal@mellanox.com>
>Signed-off-by: Tariq Toukan <tariqt@mellanox.com>

[...]

^ permalink raw reply

* [PATCH bpf-next] tools: bpftool: add completion for bpftool prog "loadall"
From: Quentin Monnet @ 2019-07-08 13:05 UTC (permalink / raw)
  To: Alexei Starovoitov, Daniel Borkmann
  Cc: bpf, netdev, oss-drivers, Quentin Monnet

Bash completion for proposing the "loadall" subcommand is missing. Let's
add it to the completion script.

Add a specific case to propose "load" and "loadall" for completing:

    $ bpftool prog load
                       ^ cursor is here

Otherwise, completion considers that $command is in load|loadall and
starts making related completions (file or directory names, as the
number of words on the command line is below 6), when the only suggested
keywords should be "load" and "loadall" until one has been picked and a
space entered after that to move to the next word.

Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
 tools/bpf/bpftool/bash-completion/bpftool | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tools/bpf/bpftool/bash-completion/bpftool b/tools/bpf/bpftool/bash-completion/bpftool
index 965a8658cca3..c8f42e1fcbc9 100644
--- a/tools/bpf/bpftool/bash-completion/bpftool
+++ b/tools/bpf/bpftool/bash-completion/bpftool
@@ -342,6 +342,13 @@ _bpftool()
                 load|loadall)
                     local obj
 
+                    # Propose "load/loadall" to complete "bpftool prog load",
+                    # or bash tries to complete "load" as a filename below.
+                    if [[ ${#words[@]} -eq 3 ]]; then
+                        COMPREPLY=( $( compgen -W "load loadall" -- "$cur" ) )
+                        return 0
+                    fi
+
                     if [[ ${#words[@]} -lt 6 ]]; then
                         _filedir
                         return 0
@@ -435,7 +442,7 @@ _bpftool()
                 *)
                     [[ $prev == $object ]] && \
                         COMPREPLY=( $( compgen -W 'dump help pin attach detach \
-                            load show list tracelog run' -- "$cur" ) )
+                            load loadall show list tracelog run' -- "$cur" ) )
                     ;;
             esac
             ;;
-- 
2.17.1


^ permalink raw reply related

* Re: [PATCH] [RFC] Revert "bpf: Fix ORC unwinding in non-JIT BPF code"
From: Josh Poimboeuf @ 2019-07-08 13:11 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, netdev,
	bpf, linux-kernel
In-Reply-To: <20190708124547.3515538-1-arnd@arndb.de>

On Mon, Jul 08, 2019 at 02:45:23PM +0200, Arnd Bergmann wrote:
> Apparently this was a bit premature, at least I still get this
> warning with gcc-8.1:
> 
> kernel/bpf/core.o: warning: objtool: ___bpf_prog_run()+0x44d2: sibling call from callable instruction with modified stack frame
> 
> This reverts commit b22cf36c189f31883ad0238a69ccf82aa1f3b16b.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Yes, I have been working on a fix.

The impact is that ORC unwinding is broken in this function for
CONFIG_RETPOLINE=n.

I don't think we want to revert this patch though, because that will
broaden the impact to the CONFIG_RETPOLINE=y case.  Anyway I hope to
have fixes soon.

-- 
Josh

^ permalink raw reply

* Re: [PATCH] [RFC] Revert "bpf: Fix ORC unwinding in non-JIT BPF code"
From: Arnd Bergmann @ 2019-07-08 13:17 UTC (permalink / raw)
  To: Josh Poimboeuf
  Cc: Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Networking,
	bpf, Linux Kernel Mailing List
In-Reply-To: <20190708130010.pnxlzi5vptuyppxz@treble>

On Mon, Jul 8, 2019 at 3:11 PM Josh Poimboeuf <jpoimboe@redhat.com> wrote:
>
> On Mon, Jul 08, 2019 at 02:45:23PM +0200, Arnd Bergmann wrote:
> > Apparently this was a bit premature, at least I still get this
> > warning with gcc-8.1:
> >
> > kernel/bpf/core.o: warning: objtool: ___bpf_prog_run()+0x44d2: sibling call from callable instruction with modified stack frame
> >
> > This reverts commit b22cf36c189f31883ad0238a69ccf82aa1f3b16b.
> >
> > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>
> Yes, I have been working on a fix.
>
> The impact is that ORC unwinding is broken in this function for
> CONFIG_RETPOLINE=n.
>
> I don't think we want to revert this patch though, because that will
> broaden the impact to the CONFIG_RETPOLINE=y case.  Anyway I hope to
> have fixes soon.

Ok, sounds good. Thanks,

     Arnd

^ permalink raw reply

* Re: [PATCH net-next 00/11] Add drop monitor for offloaded data paths
From: Ido Schimmel @ 2019-07-08 13:19 UTC (permalink / raw)
  To: David Miller
  Cc: netdev, jiri, mlxsw, dsahern, roopa, nikolay, andy, pablo,
	jakub.kicinski, pieter.jansenvanvuuren, andrew, f.fainelli,
	vivien.didelot, idosch
In-Reply-To: <20190707.124541.451040901050013496.davem@davemloft.net>

On Sun, Jul 07, 2019 at 12:45:41PM -0700, David Miller wrote:
> From: Ido Schimmel <idosch@idosch.org>
> Date: Sun,  7 Jul 2019 10:58:17 +0300
> 
> > Users have several ways to debug the kernel and understand why a packet
> > was dropped. For example, using "drop monitor" and "perf". Both
> > utilities trace kfree_skb(), which is the function called when a packet
> > is freed as part of a failure. The information provided by these tools
> > is invaluable when trying to understand the cause of a packet loss.
> > 
> > In recent years, large portions of the kernel data path were offloaded
> > to capable devices. Today, it is possible to perform L2 and L3
> > forwarding in hardware, as well as tunneling (IP-in-IP and VXLAN).
> > Different TC classifiers and actions are also offloaded to capable
> > devices, at both ingress and egress.
> > 
> > However, when the data path is offloaded it is not possible to achieve
> > the same level of introspection as tools such "perf" and "drop monitor"
> > become irrelevant.
> > 
> > This patchset aims to solve this by allowing users to monitor packets
> > that the underlying device decided to drop along with relevant metadata
> > such as the drop reason and ingress port.
> 
> We are now going to have 5 or so ways to capture packets passing through
> the system, this is nonsense.
> 
> AF_PACKET, kfree_skb drop monitor, perf, XDP perf events, and now this
> devlink thing.
> 
> This is insanity, too many ways to do the same thing and therefore the
> worst possible user experience.
> 
> Pick _ONE_ method to trap packets and forward normal kfree_skb events,
> XDP perf events, and these taps there too.
> 
> I mean really, think about it from the average user's perspective.  To
> see all drops/pkts I have to attach a kfree_skb tracepoint, and not just
> listen on devlink but configure a special tap thing beforehand and then
> if someone is using XDP I gotta setup another perf event buffer capture
> thing too.

Let me try to explain again because I probably wasn't clear enough. The
devlink-trap mechanism is not doing the same thing as other solutions.

The packets we are capturing in this patchset are packets that the
kernel (the CPU) never saw up until now - they were silently dropped by
the underlying device performing the packet forwarding instead of the
CPU.

For each such packet we get valuable metadata from the underlying device
such as the drop reason and the ingress port. With time, even more
reasons and metadata could be provided (e.g., egress port, traffic
class). Netlink provides a structured and extensible way to report the
packet along with the metadata to interested users. The tc-sample action
uses a similar concept.

I would like to emphasize that these dropped packets are not injected to
the kernel's receive path and therefore not subject to kfree_skb() and
related infrastructure. There is no need to waste CPU cycles on packets
we already know were dropped (and why). Further, hardware tail/early
drops will not be dropped by the kernel, given its qdiscs are probably
empty.

Regarding the use of devlink, current ASICs can forward packets at
6.4Tb/s. We do not want to overwhelm the CPU with dropped packets and
therefore we give users the ability to control - via devlink - the
trapping of certain packets to the CPU and their reporting to user
space. In the future, devlink-trap can be extended to support the
configuration of the hardware policers of each trap.

^ permalink raw reply

* Re: [PATCH net-next 09/16] net/mlx5e: Extend tx reporter diagnostics output
From: Jiri Pirko @ 2019-07-08 13:39 UTC (permalink / raw)
  To: Tariq Toukan
  Cc: David S. Miller, netdev, Eran Ben Elisha, ayal, jiri,
	Saeed Mahameed, moshe
In-Reply-To: <1562500388-16847-10-git-send-email-tariqt@mellanox.com>

Sun, Jul 07, 2019 at 01:53:01PM CEST, tariqt@mellanox.com wrote:

[...]

>+	err = devlink_fmsg_arr_pair_nest_start(fmsg, "Common config");

Are the values in this section "configurable"? If not, I wouldn't call
it "config"

[...]

^ permalink raw reply

* Re: [PATCH net-next v5 1/4] net/sched: Introduce action ct
From: Marcelo Ricardo Leitner @ 2019-07-08 13:42 UTC (permalink / raw)
  To: Paul Blakey
  Cc: Jiri Pirko, Roi Dayan, Yossi Kuperman, Oz Shlomo, netdev,
	David Miller, Aaron Conole, Zhike Wang, Rony Efraim, nst-kernel,
	John Hurley, Simon Horman, Justin Pettit
In-Reply-To: <1562575880-30891-2-git-send-email-paulb@mellanox.com>

On Mon, Jul 08, 2019 at 11:51:17AM +0300, Paul Blakey wrote:
..
> +static int tcf_ct_handle_fragments(struct net *net, struct sk_buff *skb,
> +				   u8 family, u16 zone)
> +{
> +	enum ip_conntrack_info ctinfo;
> +	struct nf_conn *ct;
> +	int err = 0;
> +	bool frag;
> +
> +	/* Previously seen (loopback)? Ignore. */
> +	ct = nf_ct_get(skb, &ctinfo);
> +	if ((ct && !nf_ct_is_template(ct)) || ctinfo == IP_CT_UNTRACKED)
> +		return 0;
> +
> +	if (family == NFPROTO_IPV4)
> +		err = tcf_ct_ipv4_is_fragment(skb, &frag);
> +	else
> +		err = tcf_ct_ipv6_is_fragment(skb, &frag);
> +	if (err || !frag)
> +		return err;
> +
> +	skb_get(skb);
> +
> +	if (family == NFPROTO_IPV4) {
> +		enum ip_defrag_users user = IP_DEFRAG_CONNTRACK_IN + zone;
> +
> +		memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
> +		local_bh_disable();
> +		err = ip_defrag(net, skb, user);
> +		local_bh_enable();
> +		if (err && err != -EINPROGRESS)
> +			goto out_free;
> +	} else { /* NFPROTO_IPV6 */
> +		enum ip6_defrag_users user = IP6_DEFRAG_CONNTRACK_IN + zone;
> +
> +		memset(IP6CB(skb), 0, sizeof(struct inet6_skb_parm));
> +		err = nf_ct_frag6_gather(net, skb, user);

This doesn't build without IPv6 enabled.
ERROR: "nf_ct_frag6_gather" [net/sched/act_ct.ko] undefined!

We need to (copy and pasted):

@@ -179,7 +179,9 @@ static int tcf_ct_handle_fragments(struct net *net, struct sk_buff *skb,
                local_bh_enable();
                if (err && err != -EINPROGRESS)
                        goto out_free;
-       } else { /* NFPROTO_IPV6 */
+       }
+#if IS_ENABLED(IPV6)
+       else { /* NFPROTO_IPV6 */
                enum ip6_defrag_users user = IP6_DEFRAG_CONNTRACK_IN + zone;

                memset(IP6CB(skb), 0, sizeof(struct inet6_skb_parm));
@@ -187,6 +189,7 @@ static int tcf_ct_handle_fragments(struct net *net, struct sk_buff *skb,
                if (err && err != -EINPROGRESS)
                        goto out_free;
        }
+#endif

        skb_clear_hash(skb);
        skb->ignore_df = 1;

> +		if (err && err != -EINPROGRESS)
> +			goto out_free;
> +	}
> +
> +	skb_clear_hash(skb);
> +	skb->ignore_df = 1;
> +	return err;
> +
> +out_free:
> +	kfree_skb(skb);
> +	return err;
> +}

^ permalink raw reply

* Re: [PATCH v5 rdma-next 1/6] RDMA/core: Create mmap database and cookie helper functions
From: Gal Pressman @ 2019-07-08 13:47 UTC (permalink / raw)
  To: Michal Kalderon, ariel.elior, jgg, dledford; +Cc: linux-rdma, davem, netdev
In-Reply-To: <20190708091503.14723-2-michal.kalderon@marvell.com>

On 08/07/2019 12:14, Michal Kalderon wrote:
> diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
> index 8a6ccb936dfe..a830c2c5d691 100644
> --- a/drivers/infiniband/core/device.c
> +++ b/drivers/infiniband/core/device.c
> @@ -2521,6 +2521,7 @@ void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)
>  	SET_DEVICE_OP(dev_ops, map_mr_sg_pi);
>  	SET_DEVICE_OP(dev_ops, map_phys_fmr);
>  	SET_DEVICE_OP(dev_ops, mmap);
> +	SET_DEVICE_OP(dev_ops, mmap_free);
>  	SET_DEVICE_OP(dev_ops, modify_ah);
>  	SET_DEVICE_OP(dev_ops, modify_cq);
>  	SET_DEVICE_OP(dev_ops, modify_device);
> diff --git a/drivers/infiniband/core/rdma_core.c b/drivers/infiniband/core/rdma_core.c
> index ccf4d069c25c..7166741834c8 100644
> --- a/drivers/infiniband/core/rdma_core.c
> +++ b/drivers/infiniband/core/rdma_core.c
> @@ -817,6 +817,7 @@ static void ufile_destroy_ucontext(struct ib_uverbs_file *ufile,
>  	rdma_restrack_del(&ucontext->res);
>  
>  	ib_dev->ops.dealloc_ucontext(ucontext);
> +	rdma_user_mmap_entries_remove_free(ucontext);

This should happen before dealloc_ucontext.

> +struct rdma_user_mmap_entry *
> +rdma_user_mmap_entry_get(struct ib_ucontext *ucontext, u64 key, u64 len)
> +{
> +	struct rdma_user_mmap_entry *entry;
> +	u64 mmap_page;
> +
> +	mmap_page = key >> PAGE_SHIFT;
> +	if (mmap_page > U32_MAX)
> +		return NULL;
> +
> +	entry = xa_load(&ucontext->mmap_xa, mmap_page);
> +	if (!entry || rdma_user_mmap_get_key(entry) != key ||

I wonder if the 'rdma_user_mmap_get_key(entry) != key' check is still needed.

> +/*
> + * This is only called when the ucontext is destroyed and there can be no
> + * concurrent query via mmap or allocate on the xarray, thus we can be sure no
> + * other thread is using the entry pointer. We also know that all the BAR
> + * pages have either been zap'd or munmaped at this point.  Normal pages are
> + * refcounted and will be freed at the proper time.
> + */
> +void rdma_user_mmap_entries_remove_free(struct ib_ucontext *ucontext)
> +{
> +	struct rdma_user_mmap_entry *entry;
> +	unsigned long mmap_page;
> +
> +	xa_for_each(&ucontext->mmap_xa, mmap_page, entry) {
> +		xa_erase(&ucontext->mmap_xa, mmap_page);
> +
> +		ibdev_dbg(ucontext->device,
> +			  "mmap: obj[0x%p] key[%#llx] addr[%#llx] len[%#llx] removed\n",
> +			  entry->obj, rdma_user_mmap_get_key(entry),
> +			  entry->address, entry->length);
> +		if (ucontext->device->ops.mmap_free)
> +			ucontext->device->ops.mmap_free(entry->address,
> +							entry->length,
> +							entry->mmap_flag);

Pass entry instead?

> +		kfree(entry);
> +	}
> +}
> +
>  void uverbs_user_mmap_disassociate(struct ib_uverbs_file *ufile)
>  {
>  	struct rdma_umap_priv *priv, *next_priv;
> diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
> index 26e9c2594913..54ce3fdae180 100644
> --- a/include/rdma/ib_verbs.h
> +++ b/include/rdma/ib_verbs.h
> @@ -1425,6 +1425,8 @@ struct ib_ucontext {
>  	 * Implementation details of the RDMA core, don't use in drivers:
>  	 */
>  	struct rdma_restrack_entry res;
> +	struct xarray mmap_xa;
> +	u32 mmap_xa_page;
>  };
>  
>  struct ib_uobject {
> @@ -2311,6 +2313,7 @@ struct ib_device_ops {
>  			      struct ib_udata *udata);
>  	void (*dealloc_ucontext)(struct ib_ucontext *context);
>  	int (*mmap)(struct ib_ucontext *context, struct vm_area_struct *vma);
> +	void (*mmap_free)(u64 address, u64 length, u8 mmap_flag);

I feel like this callback needs some documentation.

>  	void (*disassociate_ucontext)(struct ib_ucontext *ibcontext);
>  	int (*alloc_pd)(struct ib_pd *pd, struct ib_udata *udata);
>  	void (*dealloc_pd)(struct ib_pd *pd, struct ib_udata *udata);
> @@ -2706,9 +2709,23 @@ void  ib_set_client_data(struct ib_device *device, struct ib_client *client,
>  void ib_set_device_ops(struct ib_device *device,
>  		       const struct ib_device_ops *ops);
>  
> +#define RDMA_USER_MMAP_INVALID U64_MAX
> +struct rdma_user_mmap_entry {
> +	void  *obj;

I know EFA is the culprit here, but please remove the extra space :).

> +	u64 address;
> +	u64 length;
> +	u32 mmap_page;
> +	u8 mmap_flag;
> +};
> +

^ permalink raw reply

* Re: i.mx6ul with DSA in multi chip addressing mode - no MDIO access
From: Benjamin Beckmeyer @ 2019-07-08 13:55 UTC (permalink / raw)
  To: Andrew Lunn; +Cc: netdev
In-Reply-To: <20190705143647.GC4428@lunn.ch>

> I think you are going to have to parse the register writes/reads to
> figure out what switch registers it is accessing. That should
> hopefully make it clearer why it is making so many accesses.

Hi Andrew,
I got it working a little bit better. When I'm fast enough I can read
the registers I want but it isn't a solution.

Here is an output of the tracing even with my custom accesses.
mii -i 2 0 0x9b60; mii -i 2 1
phyid:2, reg:0x01 -> 0xc801

Do you know how to delete EEInt bit? It is always one. And now all 
accesses coming from the kworker thread. Maybe this is your polling 
function?

I view the INT pin on an oscilloscope but it never changed. So maybe
this is the problem. We just soldered a pull-up to that pin but it 
still never changend. Maybe you have an idea?

So what I think is, because of the EEInt bit is never set back to one 
i will poll it as fast as possible.

root@DistroKit:~ cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 568/568   #P:1
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
     kworker/0:2-106   [000] ....   209.532531: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   209.532649: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:2-106   [000] ....   209.532741: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   209.532835: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   209.532937: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   209.533027: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   209.533632: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:2-106   [000] ....   209.533765: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   209.533875: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   209.534470: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:2-106   [000] ....   209.534603: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   209.534695: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   209.535296: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   209.535429: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   209.535529: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:2-106   [000] ....   209.536129: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   209.536266: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   209.536364: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:2-106   [000] ....   209.536955: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   209.537097: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   209.537194: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   209.537355: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   209.537487: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:2-106   [000] ....   209.537608: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   209.537739: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   209.537890: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:2-106   [000] ....   209.540203: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   209.540323: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   209.540469: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   209.540568: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   209.540666: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:2-106   [000] ....   209.540768: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   210.491498: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x01 val:0x786d
     kworker/0:2-106   [000] ....   210.491619: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x05 val:0x0080
     kworker/0:2-106   [000] ....   210.491762: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   210.491860: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   210.491953: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   210.492052: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   210.492146: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   210.492244: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   210.492332: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   210.493008: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   210.493160: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   210.493252: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   210.493342: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   210.494000: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   210.494137: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   210.494236: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   210.494914: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   210.495050: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   210.495156: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   210.495823: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   210.495958: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   210.496052: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   210.496646: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   210.496781: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   210.496876: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   210.497466: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   210.497615: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   210.497715: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   210.497870: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   210.498433: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   210.498582: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   210.498843: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   210.498948: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   210.499519: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   210.572569: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   210.572687: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   210.572790: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   210.572884: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   210.573502: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   210.573653: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   210.573747: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   210.573844: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   210.574447: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   210.574585: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   210.574682: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   210.575275: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   210.575412: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   210.575514: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   210.576103: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   210.576242: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   210.576346: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   210.576502: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   210.576596: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   210.576723: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   210.576850: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   210.576978: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   210.577073: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   210.577201: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   210.577328: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   210.577452: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   210.577651: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   210.577780: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   210.580149: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   210.580261: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   210.580365: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   210.580509: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
             mii-387   [000] ....   210.646652: mdio_access: 2188000.ethernet-1 write phy:0x22 reg:0x00 val:0x9b60
             mii-388   [000] ....   210.659304: mdio_access: 2188000.ethernet-1 read  phy:0x22 reg:0x01 val:0xc801
     kworker/0:2-106   [000] ....   211.531394: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x01 val:0x786d
     kworker/0:2-106   [000] ....   211.531526: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x05 val:0x0080
     kworker/0:2-106   [000] ....   211.531725: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1b60
     kworker/0:2-106   [000] ....   211.531835: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   211.531936: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   211.532033: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   211.532131: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   211.532223: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   211.532316: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   211.532486: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   211.532603: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   211.532707: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   211.532806: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   211.532902: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   211.532993: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   211.533683: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   211.533832: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   211.533939: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   211.534613: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   211.534754: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   211.535418: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   211.535550: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   211.535647: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   211.536398: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   211.536524: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   211.536629: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   211.537235: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   211.537373: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   211.537467: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   211.538068: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   211.538209: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   211.538310: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   211.538472: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   211.538564: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   211.612565: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   211.612685: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   211.612776: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   211.612876: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   211.612964: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   211.613580: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   211.613727: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   211.613829: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   211.613931: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   211.614531: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   211.614674: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   211.614768: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   211.615374: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   211.615505: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   211.615602: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   211.616194: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   211.616340: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   211.616444: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   211.616535: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   211.616696: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   211.616795: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   211.616925: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   211.617052: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   211.617176: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   211.617273: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   211.617398: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   211.617524: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   211.617649: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   211.617775: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   211.617959: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   211.620269: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   211.620379: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   212.571491: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x01 val:0x786d
     kworker/0:2-106   [000] ....   212.571624: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x05 val:0x0080
     kworker/0:2-106   [000] ....   212.571781: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   212.571886: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   212.571981: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   212.572079: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   212.572181: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   212.572272: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   212.572953: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   212.573091: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   212.573191: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   212.573859: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   212.573998: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   212.574097: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   212.574756: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   212.574899: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   212.575000: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   212.575658: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   212.575808: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   212.575909: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   212.576565: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   212.576699: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   212.576797: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   212.576890: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   212.576982: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   212.577567: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   212.577720: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   212.577823: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   212.577914: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   212.578071: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   212.578641: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   212.578876: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   212.578978: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   212.579074: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   212.652559: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   212.652682: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   212.652772: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   212.652871: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   212.652965: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   212.653054: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   212.653668: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   212.653803: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   212.653909: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   212.654511: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   212.654646: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   212.654745: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   212.655343: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   212.655485: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   212.655583: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   212.655746: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   212.655844: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   212.655981: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   212.656115: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   212.656245: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   212.656381: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   212.656514: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   212.656641: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   212.656767: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   212.656895: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   212.657018: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   212.657142: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   212.657339: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   212.657471: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   212.657595: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   212.657691: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   212.657869: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   213.611366: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x01 val:0x786d
     kworker/0:2-106   [000] ....   213.611493: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x05 val:0x0080
     kworker/0:2-106   [000] ....   213.611682: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   213.611798: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   213.611898: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   213.611990: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   213.612086: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   213.612179: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   213.612284: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   213.612385: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   213.612495: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   213.612591: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   213.612686: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   213.612791: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   213.612887: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   213.612982: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   213.613074: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   213.613165: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   213.613269: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   213.613362: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   213.613457: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   213.613549: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   213.613642: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   213.613733: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   213.613823: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   213.613922: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   213.614022: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   213.614116: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   213.614209: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   213.614299: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   213.614390: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   213.614482: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   213.614574: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   213.614667: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   213.692647: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   213.692763: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   213.692857: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   213.692956: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   213.693052: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   213.693137: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   213.693299: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   213.693441: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   213.693587: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   213.693728: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   213.693858: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   213.693988: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   213.694108: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   213.694231: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   213.694354: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   213.694473: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   213.694599: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   213.694723: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   213.694842: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   213.694963: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   213.695087: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   213.695211: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   213.695341: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   213.695464: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   213.695587: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   213.695679: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   213.695800: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   213.695928: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   213.696049: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   213.696169: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   213.696290: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   213.696414: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   214.651403: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x01 val:0x786d
     kworker/0:2-106   [000] ....   214.651531: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x05 val:0x0080
     kworker/0:2-106   [000] ....   214.651712: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   214.651815: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   214.651915: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   214.652014: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   214.652692: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   214.652840: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   214.652936: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   214.653030: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   214.653697: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   214.653831: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   214.653932: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   214.654596: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   214.654736: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   214.654836: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   214.655587: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   214.655715: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   214.655820: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   214.656492: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   214.656628: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   214.656723: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   214.657325: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   214.657462: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   214.657559: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   214.657711: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   214.658284: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   214.658425: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   214.658520: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   214.658682: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   214.658915: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   214.659011: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   214.659662: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   214.659802: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   214.732556: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   214.732681: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   214.732785: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   214.732882: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   214.732994: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   214.733089: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   214.733700: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   214.733841: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   214.733945: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   214.734539: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   214.734675: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   214.734842: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   214.734944: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   214.735080: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   214.735211: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   214.735341: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   214.735479: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   214.735613: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   214.735742: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   214.735871: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   214.735999: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   214.736123: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   214.736245: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   214.736363: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   214.736488: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   214.736611: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   214.736733: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   214.736859: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   214.736953: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   214.737074: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   214.737194: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   214.737313: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
             mii-389   [000] ....   214.750875: mdio_access: 2188000.ethernet-1 write phy:0x22 reg:0x00 val:0x9b60
             mii-390   [000] ....   214.759035: mdio_access: 2188000.ethernet-1 read  phy:0x22 reg:0x01 val:0xc801
             mii-391   [000] ....   215.302713: mdio_access: 2188000.ethernet-1 write phy:0x22 reg:0x00 val:0x9b60
             mii-392   [000] ....   215.315237: mdio_access: 2188000.ethernet-1 read  phy:0x22 reg:0x01 val:0xc801
     kworker/0:2-106   [000] ....   215.691372: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x01 val:0x786d
     kworker/0:2-106   [000] ....   215.691498: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x05 val:0x0080
     kworker/0:2-106   [000] ....   215.691688: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1b60
     kworker/0:2-106   [000] ....   215.691794: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   215.691894: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   215.692061: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   215.692174: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   215.692270: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   215.692370: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   215.692465: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   215.692566: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   215.692658: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   215.693346: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   215.693481: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   215.693575: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   215.694168: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   215.694319: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   215.694422: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   215.695026: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   215.695158: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   215.695253: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   215.695344: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   215.695940: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   215.696074: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   215.696172: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   215.696775: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   215.696920: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   215.697017: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   215.697617: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   215.697752: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   215.697849: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   215.697943: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   215.698180: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   215.698865: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   215.772572: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   215.772693: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   215.772790: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   215.772891: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   215.772985: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   215.773078: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   215.773684: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   215.773818: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   215.773931: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   215.774524: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   215.774661: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   215.774752: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   215.775351: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   215.775483: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   215.775578: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   215.776174: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   215.776318: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   215.776417: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   215.776567: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   215.776704: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   215.776831: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   215.776971: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   215.777070: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   215.777199: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   215.777335: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   215.777469: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   215.777589: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   215.777707: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   215.777888: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   215.780209: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   215.780334: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   215.780433: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
             mii-393   [000] ....   215.855952: mdio_access: 2188000.ethernet-1 write phy:0x22 reg:0x00 val:0x9b60
             mii-394   [000] ....   215.867854: mdio_access: 2188000.ethernet-1 read  phy:0x22 reg:0x01 val:0xc801
     kworker/0:2-106   [000] ....   216.731386: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x01 val:0x786d
     kworker/0:2-106   [000] ....   216.731518: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x05 val:0x0080
     kworker/0:2-106   [000] ....   216.731706: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1b60
     kworker/0:2-106   [000] ....   216.731808: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   216.731907: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   216.731999: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   216.732681: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   216.732829: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   216.732929: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   216.733598: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   216.733739: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   216.733835: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   216.734495: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   216.734633: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   216.734737: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   216.735400: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   216.735544: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   216.735645: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   216.736310: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   216.736443: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   216.736539: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   216.736633: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   216.737223: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   216.737355: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   216.737448: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   216.737610: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   216.737712: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   216.738280: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:2-106   [000] ....   216.738415: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   216.738508: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   216.738679: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:2-106   [000] ....   216.738867: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   216.738965: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:2-106   [000] ....   216.739532: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   216.812558: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   216.812673: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   216.812778: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   216.812874: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   216.812968: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   216.813583: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   216.813732: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   216.813835: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   216.814444: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   216.814574: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   216.814685: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   216.815288: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   216.815424: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   216.815526: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   216.816115: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   216.816258: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   216.816365: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   216.816958: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   216.817089: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   216.817184: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   216.817282: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   216.817437: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   216.817569: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   216.817694: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   216.817977: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   216.820294: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:1-14    [000] ....   216.820419: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   216.820565: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   216.820670: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:1-14    [000] ....   216.820761: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   216.820867: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:1-14    [000] ....   216.821018: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   217.771340: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x01 val:0x786d
     kworker/0:1-14    [000] ....   217.771464: mdio_access: 2188000.ethernet-1 read  phy:0x01 reg:0x05 val:0x0080
     kworker/0:1-14    [000] ....   217.771642: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:1-14    [000] ....   217.771744: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:1-14    [000] ....   217.771850: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:1-14    [000] ....   217.771959: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   217.772051: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:1-14    [000] ....   217.772149: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   217.772247: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:1-14    [000] ....   217.772337: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   217.772451: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   217.772546: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:1-14    [000] ....   217.772649: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:1-14    [000] ....   217.772749: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   217.772857: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:1-14    [000] ....   217.772958: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   217.773048: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:1-14    [000] ....   217.773135: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   217.773235: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   217.773925: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:1-14    [000] ....   217.774074: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:1-14    [000] ....   217.774171: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   217.774845: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:1-14    [000] ....   217.774981: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   217.775080: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:1-14    [000] ....   217.775739: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   217.775901: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:1-14    [000] ....   217.776010: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9921
     kworker/0:1-14    [000] ....   217.776669: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:1-14    [000] ....   217.776814: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:1-14    [000] ....   217.776918: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1921
     kworker/0:1-14    [000] ....   217.777513: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:1-14    [000] ....   217.777651: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9521
     kworker/0:1-14    [000] ....   217.778251: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   217.852560: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1521
     kworker/0:2-106   [000] ....   217.852675: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:2-106   [000] ....   217.852775: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   217.852869: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   217.852964: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   217.853577: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   217.853724: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:2-106   [000] ....   217.853823: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   217.854427: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   217.854565: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:2-106   [000] ....   217.854665: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   217.855252: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   217.855394: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   217.855494: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   217.856084: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:2-106   [000] ....   217.856218: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   217.856318: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   217.856480: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:2-106   [000] ....   217.856585: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   217.856717: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   217.856852: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   217.856943: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   217.857070: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:2-106   [000] ....   217.857196: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   217.857325: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541
     kworker/0:2-106   [000] ....   217.857449: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9941
     kworker/0:2-106   [000] ....   217.857573: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   217.857693: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x01 val:0x201e
     kworker/0:2-106   [000] ....   217.857874: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1941
     kworker/0:2-106   [000] ....   217.860193: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x01 val:0x203e
     kworker/0:2-106   [000] ....   217.860306: mdio_access: 2188000.ethernet-1 write phy:0x02 reg:0x00 val:0x9541
     kworker/0:2-106   [000] ....   217.860451: mdio_access: 2188000.ethernet-1 read  phy:0x02 reg:0x00 val:0x1541


Cheers,
Benjamin


^ permalink raw reply

* Re: [PATCH net-next 2/2] bpf: avoid unused variable warning in tcp_bpf_rtt()
From: Soheil Hassas Yeganeh @ 2019-07-08 13:55 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Eric Dumazet, David S. Miller, Alexei Starovoitov,
	Daniel Borkmann, Priyaranjan Jha, Yuchung Cheng,
	Stanislav Fomichev, Martin KaFai Lau, Song Liu, Yonghong Song,
	Neal Cardwell, Jason Baron, Yafang Shao, Ard Biesheuvel, netdev,
	linux-kernel, bpf
In-Reply-To: <20190708125733.3944836-2-arnd@arndb.de>

On Mon, Jul 8, 2019 at 8:57 AM Arnd Bergmann <arnd@arndb.de> wrote:
>
> When CONFIG_BPF is disabled, we get a warning for an unused
> variable:
>
> In file included from drivers/target/target_core_device.c:26:
> include/net/tcp.h:2226:19: error: unused variable 'tp' [-Werror,-Wunused-variable]
>         struct tcp_sock *tp = tcp_sk(sk);
>
> The variable is only used in one place, so it can be
> replaced with its value there to avoid the warning.
>
> Fixes: 23729ff23186 ("bpf: add BPF_CGROUP_SOCK_OPS callback that is executed on every RTT")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Acked-by: Soheil Hassas Yeganeh <soheil@google.com>

> ---
>  include/net/tcp.h | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/include/net/tcp.h b/include/net/tcp.h
> index e16d8a3fd3b4..cca3c59b98bf 100644
> --- a/include/net/tcp.h
> +++ b/include/net/tcp.h
> @@ -2223,9 +2223,7 @@ static inline bool tcp_bpf_ca_needs_ecn(struct sock *sk)
>
>  static inline void tcp_bpf_rtt(struct sock *sk)
>  {
> -       struct tcp_sock *tp = tcp_sk(sk);
> -
> -       if (BPF_SOCK_OPS_TEST_FLAG(tp, BPF_SOCK_OPS_RTT_CB_FLAG))
> +       if (BPF_SOCK_OPS_TEST_FLAG(tcp_sk(sk), BPF_SOCK_OPS_RTT_CB_FLAG))
>                 tcp_call_bpf(sk, BPF_SOCK_OPS_RTT_CB, 0, NULL);
>  }
>
> --
> 2.20.0
>

^ permalink raw reply

* Re: [PATCH net-next v4 1/4] net/sched: Introduce action ct
From: Florian Westphal @ 2019-07-08 14:02 UTC (permalink / raw)
  To: Paul Blakey
  Cc: Florian Westphal, Jiri Pirko, Roi Dayan, Yossi Kuperman,
	Oz Shlomo, Marcelo Ricardo Leitner, netdev@vger.kernel.org,
	David Miller, Aaron Conole, Zhike Wang, Rony Efraim,
	nst-kernel@redhat.com, John Hurley, Simon Horman, Justin Pettit
In-Reply-To: <55a5a05f-b2c0-dda0-e961-75a7b4821dc1@mellanox.com>

Paul Blakey <paulb@mellanox.com> wrote:
> Like if conntrack has just timed it out (or conntrack flushed), and skb 
> holds the last ref?

Yes, thats very unlikely but its possible.

^ permalink raw reply

* Re: [rdma 14/16] RDMA/irdma: Add ABI definitions
From: Jason Gunthorpe @ 2019-07-08 14:13 UTC (permalink / raw)
  To: Saleem, Shiraz
  Cc: Leon Romanovsky, Kirsher, Jeffrey T, dledford@redhat.com,
	davem@davemloft.net, Ismail, Mustafa, linux-rdma@vger.kernel.org,
	netdev@vger.kernel.org, nhorman@redhat.com, sassmann@redhat.com,
	poswald@suse.com, Ertman, David M
In-Reply-To: <9DD61F30A802C4429A01CA4200E302A7A68512AA@fmsmsx124.amr.corp.intel.com>

On Sat, Jul 06, 2019 at 04:15:20PM +0000, Saleem, Shiraz wrote:
> > Subject: Re: [rdma 14/16] RDMA/irdma: Add ABI definitions
> > 
> > On Fri, Jul 05, 2019 at 04:42:19PM +0000, Saleem, Shiraz wrote:
> > > > Subject: Re: [rdma 14/16] RDMA/irdma: Add ABI definitions
> > > >
> > > > On Thu, Jul 04, 2019 at 10:40:21AM +0300, Leon Romanovsky wrote:
> > > > > On Wed, Jul 03, 2019 at 07:12:57PM -0700, Jeff Kirsher wrote:
> > > > > > From: Mustafa Ismail <mustafa.ismail@intel.com>
> > > > > >
> > > > > > Add ABI definitions for irdma.
> > > > > >
> > > > > > Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>
> > > > > > Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
> > > > > > include/uapi/rdma/irdma-abi.h | 130
> > > > > > ++++++++++++++++++++++++++++++++++
> > > > > >  1 file changed, 130 insertions(+)  create mode 100644
> > > > > > include/uapi/rdma/irdma-abi.h
> > > > > >
> > > > > > diff --git a/include/uapi/rdma/irdma-abi.h
> > > > > > b/include/uapi/rdma/irdma-abi.h new file mode 100644 index
> > > > > > 000000000000..bdfbda4c829e
> > > > > > +++ b/include/uapi/rdma/irdma-abi.h
> > > > > > @@ -0,0 +1,130 @@
> > > > > > +/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
> > > > > > +/* Copyright (c) 2006 - 2019 Intel Corporation.  All rights reserved.
> > > > > > + * Copyright (c) 2005 Topspin Communications.  All rights reserved.
> > > > > > + * Copyright (c) 2005 Cisco Systems.  All rights reserved.
> > > > > > + * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.
> > > > > > + */
> > > > > > +
> > > > > > +#ifndef IRDMA_ABI_H
> > > > > > +#define IRDMA_ABI_H
> > > > > > +
> > > > > > +#include <linux/types.h>
> > > > > > +
> > > > > > +/* irdma must support legacy GEN_1 i40iw kernel
> > > > > > + * and user-space whose last ABI ver is 5  */ #define
> > > > > > +IRDMA_ABI_VER
> > > > > > +6
> > > > >
> > > > > Can you please elaborate about it more?
> > > > > There is no irdma code in RDMA yet, so it makes me wonder why new
> > > > > define shouldn't start from 1.
> > > >
> > > > It is because they are ABI compatible with the current user space,
> > > > which raises the question why we even have this confusing header file..
> > >
> > > It is because we need to support current providers/i40iw user-space.
> > > Our user-space patch series will introduce a new provider (irdma)
> > > whose ABI ver. is also 6 (capable of supporting X722 and which will
> > > work with i40iw driver on older kernels) and removes providers/i40iw from rdma-
> > core.
> > 
> > Why on earth would we do that?
> > 
> A unified library providers/irdma to go in hand with the driver irdma and uses the ABI header.
> It can support the new network device e810 and existing x722 iWARP device. It obsoletes
> providers/i40iw and extends its ABI. So why keep providers/i40iw around in rdma-core?

Why rewrite a perfectly good userspace that is compatible with the
future and past kernels?

Is there something so wrong with the userspace provider to need this?

Jason

^ permalink raw reply

* Re: [PATCH nf-next 1/3] netfilter: nf_nat_proto: add nf_nat_bridge_ops support
From: Florian Westphal @ 2019-07-08 14:17 UTC (permalink / raw)
  To: wenxu; +Cc: pablo, fw, netfilter-devel, netdev
In-Reply-To: <1562574567-8293-1-git-send-email-wenxu@ucloud.cn>

wenxu@ucloud.cn <wenxu@ucloud.cn> wrote:
> From: wenxu <wenxu@ucloud.cn>
> 
> Add nf_nat_bridge_ops to do nat in the bridge family

Whats the use case for this?

The reason I'm asking is that a bridge doesn't know about IP,
Bridge netfilter (the call-iptables thing) has a lot of glue code
to detect dnat rewrites and updates target mac address, including
support for redirect (suddently packet has to be pushed up the stack)
or changes in the oif to non-bridge ports (it even checks forward sysctl
state ..) and so on.

Thats something that I don't want to support in nftables.

For NAT on bridge, it should be possible already to push such packets
up the stack by

bridge input meta iif eth0 ip saddr 192.168.0.0/16 \
       meta pkttype set unicast ether daddr set 00:11:22:33:44:55

then normal ip processing handles this and nat should "just work".
If above doesn't work for you I'd like to understand why.

^ permalink raw reply

* Re: [PATCH bpf] xdp: fix potential deadlock on socket mutex
From: Jonathan Lemon @ 2019-07-08 14:21 UTC (permalink / raw)
  To: Ilya Maximets
  Cc: netdev, linux-kernel, bpf, xdp-newbies, David S. Miller,
	Björn Töpel, Magnus Karlsson, Jakub Kicinski,
	Alexei Starovoitov, Daniel Borkmann
In-Reply-To: <20190708110344.23278-1-i.maximets@samsung.com>

On 8 Jul 2019, at 4:03, Ilya Maximets wrote:

> There are 2 call chains:
>
>   a) xsk_bind --> xdp_umem_assign_dev
>   b) unregister_netdevice_queue --> xsk_notifier
>
> with the following locking order:
>
>   a) xs->mutex --> rtnl_lock
>   b) rtnl_lock --> xdp.lock --> xs->mutex
>
> Different order of taking 'xs->mutex' and 'rtnl_lock' could produce a
> deadlock here. Fix that by moving the 'rtnl_lock' before 'xs->lock' in
> the bind call chain (a).
>
> Reported-by: syzbot+bf64ec93de836d7f4c2c@syzkaller.appspotmail.com
> Fixes: 455302d1c9ae ("xdp: fix hang while unregistering device bound 
> to xdp socket")
> Signed-off-by: Ilya Maximets <i.maximets@samsung.com>

Thanks, Ilya!

I think in the long run the locking needs to be revisited,
but this should fix the deadlock for now.

Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>



> This patch is a fix for patch that is not yet in mainline, but
> already in 'net' tree. I'm not sure what is the correct process
> for applying such fixes.
>
>  net/xdp/xdp_umem.c | 16 ++++++----------
>  net/xdp/xsk.c      |  2 ++
>  2 files changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/net/xdp/xdp_umem.c b/net/xdp/xdp_umem.c
> index 20c91f02d3d8..83de74ca729a 100644
> --- a/net/xdp/xdp_umem.c
> +++ b/net/xdp/xdp_umem.c
> @@ -87,21 +87,20 @@ int xdp_umem_assign_dev(struct xdp_umem *umem, 
> struct net_device *dev,
>  	struct netdev_bpf bpf;
>  	int err = 0;
>
> +	ASSERT_RTNL();
> +
>  	force_zc = flags & XDP_ZEROCOPY;
>  	force_copy = flags & XDP_COPY;
>
>  	if (force_zc && force_copy)
>  		return -EINVAL;
>
> -	rtnl_lock();
> -	if (xdp_get_umem_from_qid(dev, queue_id)) {
> -		err = -EBUSY;
> -		goto out_rtnl_unlock;
> -	}
> +	if (xdp_get_umem_from_qid(dev, queue_id))
> +		return -EBUSY;
>
>  	err = xdp_reg_umem_at_qid(dev, umem, queue_id);
>  	if (err)
> -		goto out_rtnl_unlock;
> +		return err;
>
>  	umem->dev = dev;
>  	umem->queue_id = queue_id;
> @@ -110,7 +109,7 @@ int xdp_umem_assign_dev(struct xdp_umem *umem, 
> struct net_device *dev,
>
>  	if (force_copy)
>  		/* For copy-mode, we are done. */
> -		goto out_rtnl_unlock;
> +		return 0;
>
>  	if (!dev->netdev_ops->ndo_bpf ||
>  	    !dev->netdev_ops->ndo_xsk_async_xmit) {
> @@ -125,7 +124,6 @@ int xdp_umem_assign_dev(struct xdp_umem *umem, 
> struct net_device *dev,
>  	err = dev->netdev_ops->ndo_bpf(dev, &bpf);
>  	if (err)
>  		goto err_unreg_umem;
> -	rtnl_unlock();
>
>  	umem->zc = true;
>  	return 0;
> @@ -135,8 +133,6 @@ int xdp_umem_assign_dev(struct xdp_umem *umem, 
> struct net_device *dev,
>  		err = 0; /* fallback to copy mode */
>  	if (err)
>  		xdp_clear_umem_at_qid(dev, queue_id);
> -out_rtnl_unlock:
> -	rtnl_unlock();
>  	return err;
>  }
>
> diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
> index 703cf5ea448b..2aa6072a3e55 100644
> --- a/net/xdp/xsk.c
> +++ b/net/xdp/xsk.c
> @@ -416,6 +416,7 @@ static int xsk_bind(struct socket *sock, struct 
> sockaddr *addr, int addr_len)
>  	if (flags & ~(XDP_SHARED_UMEM | XDP_COPY | XDP_ZEROCOPY))
>  		return -EINVAL;
>
> +	rtnl_lock();
>  	mutex_lock(&xs->mutex);
>  	if (xs->state != XSK_READY) {
>  		err = -EBUSY;
> @@ -501,6 +502,7 @@ static int xsk_bind(struct socket *sock, struct 
> sockaddr *addr, int addr_len)
>  		xs->state = XSK_BOUND;
>  out_release:
>  	mutex_unlock(&xs->mutex);
> +	rtnl_unlock();
>  	return err;
>  }
>
> -- 
> 2.17.1

^ permalink raw reply

* Re: [PATCH net-next 11/16] net/mlx5e: Add support to rx reporter diagnose
From: Jiri Pirko @ 2019-07-08 14:22 UTC (permalink / raw)
  To: Tariq Toukan
  Cc: David S. Miller, netdev, Eran Ben Elisha, ayal, jiri,
	Saeed Mahameed, moshe
In-Reply-To: <1562500388-16847-12-git-send-email-tariqt@mellanox.com>

Sun, Jul 07, 2019 at 01:53:03PM CEST, tariqt@mellanox.com wrote:
>From: Aya Levin <ayal@mellanox.com>
>
>Add rx reporter, which supports diagnose call-back. Diagnostics output
>include: information common to all RQs: RQ type, RQ size, RQ stride
>size, CQ size and CQ stride size. In addition advertise information per
>RQ and its related icosq and attached CQ.
>
>$ devlink health diagnose pci/0000:00:0b.0 reporter rx
>Common config:
>   RQ: type: 2 stride size: 2048 size: 8
>   CQ: stride size: 64 size: 1024
> RQs:
>   channel ix: 0 rqn: 4284 HW state: 1 SW state: 3 posted WQEs: 7 cc: 7 ICOSQ HW state: 1 CQ: cqn: 1032 HW status: 0
>   channel ix: 1 rqn: 4289 HW state: 1 SW state: 3 posted WQEs: 7 cc: 7 ICOSQ HW state: 1 CQ: cqn: 1036 HW status: 0
>   channel ix: 2 rqn: 4294 HW state: 1 SW state: 3 posted WQEs: 7 cc: 7 ICOSQ HW state: 1 CQ: cqn: 1040 HW status: 0
>   channel ix: 3 rqn: 4299 HW state: 1 SW state: 3 posted WQEs: 7 cc: 7 ICOSQ HW state: 1 CQ: cqn: 1044 HW status: 0
>
>$ devlink health diagnose pci/0000:00:0b.0 reporter rx -jp
>{
>    "Common config": [
>        "RQ": {
>            "type": 2,
>            "stride size": 2048,
>            "size": 8
>        },
>        "CQ": {
>            "stride size": 64,
>            "size": 1024
>        } ],
>    "RQs": [ {
>            "channel ix": 0,
>            "rqn": 4284,
>            "HW state": 1,
>            "SW state": 3,
>            "posted WQEs": 7,
>            "cc": 7,
>            "ICOSQ HW state": 1,
>            "CQ": {
>                "cqn": 1032,
>                "HW status": 0
>            }
>        },{
>            "channel ix": 1,
>            "rqn": 4289,
>            "HW state": 1,
>            "SW state": 3,
>            "posted WQEs": 7,
>            "cc": 7,
>            "ICOSQ HW state": 1,
>            "CQ": {
>                "cqn": 1036,
>                "HW status": 0
>            }
>        },{
>            "channel ix": 2,
>            "rqn": 4294,
>            "HW state": 1,
>            "SW state": 3,
>            "posted WQEs": 7,
>            "cc": 7,
>            "ICOSQ HW state": 1,
>            "CQ": {
>                "cqn": 1040,
>                "HW status": 0
>            }
>        },{
>            "channel ix": 3,
>            "rqn": 4299,
>            "HW state": 1,
>            "SW state": 3,
>            "posted WQEs": 7,
>            "cc": 7,
>            "ICOSQ HW state": 1,
>            "CQ": {
>                "cqn": 1044,
>                "HW status": 0
>            }
>        } ]
>}
>
>Signed-off-by: Aya Levin <ayal@mellanox.com>
>Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
>---
> drivers/net/ethernet/mellanox/mlx5/core/Makefile   |   4 +-
> drivers/net/ethernet/mellanox/mlx5/core/en.h       |  21 +++
> .../net/ethernet/mellanox/mlx5/core/en/health.c    |  31 ++++
> .../net/ethernet/mellanox/mlx5/core/en/health.h    |   7 +
> .../ethernet/mellanox/mlx5/core/en/reporter_rx.c   | 194 +++++++++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/en_main.c  |  29 +--
> 6 files changed, 258 insertions(+), 28 deletions(-)
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c
>
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
>index 23d566a45a30..a3b9659649a8 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
>@@ -24,8 +24,8 @@ mlx5_core-y :=	main.o cmd.o debugfs.o fw.o eq.o uar.o pagealloc.o \
> mlx5_core-$(CONFIG_MLX5_CORE_EN) += en_main.o en_common.o en_fs.o en_ethtool.o \
> 		en_tx.o en_rx.o en_dim.o en_txrx.o en/xdp.o en_stats.o \
> 		en_selftest.o en/port.o en/monitor_stats.o en/health.o \
>-		en/reporter_tx.o en/params.o en/xsk/umem.o en/xsk/setup.o \
>-		en/xsk/rx.o en/xsk/tx.o
>+		en/reporter_tx.o en/reporter_rx.o en/params.o en/xsk/umem.o \
>+		en/xsk/setup.o en/xsk/rx.o en/xsk/tx.o
> 
> #
> # Netdev extra
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
>index 263558875f20..f7c5cf7a7064 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
>@@ -848,6 +848,7 @@ struct mlx5e_priv {
> 	struct mlx5e_tls          *tls;
> #endif
> 	struct devlink_health_reporter *tx_reporter;
>+	struct devlink_health_reporter *rx_reporter;
> 	struct mlx5e_xsk           xsk;
> };
> 
>@@ -888,6 +889,26 @@ netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
> int mlx5e_poll_rx_cq(struct mlx5e_cq *cq, int budget);
> void mlx5e_free_txqsq_descs(struct mlx5e_txqsq *sq);
> 
>+static inline u32 mlx5e_rqwq_get_size(struct mlx5e_rq *rq)
>+{
>+	switch (rq->wq_type) {
>+	case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
>+		return mlx5_wq_ll_get_size(&rq->mpwqe.wq);
>+	default:
>+		return mlx5_wq_cyc_get_size(&rq->wqe.wq);
>+	}
>+}
>+
>+static inline u32 mlx5e_rqwq_get_cur_sz(struct mlx5e_rq *rq)
>+{
>+	switch (rq->wq_type) {
>+	case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
>+		return rq->mpwqe.wq.cur_sz;
>+	default:
>+		return rq->wqe.wq.cur_sz;
>+	}
>+}
>+
> bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev);
> bool mlx5e_striding_rq_possible(struct mlx5_core_dev *mdev,
> 				struct mlx5e_params *params);
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/health.c b/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
>index a266717d41e5..a0579de8e2e0 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
>@@ -96,6 +96,37 @@ int mlx5e_reporter_cq_common_diagnose(struct mlx5e_cq *cq, struct devlink_fmsg *
> 	return 0;
> }
> 
>+int mlx5e_health_create_reporters(struct mlx5e_priv *priv)
>+{
>+	int err;
>+
>+	err = mlx5e_reporter_tx_create(priv);
>+	if (err)
>+		return err;
>+
>+	err = mlx5e_reporter_rx_create(priv);
>+	if (err)
>+		return err;
>+
>+	return 0;
>+}
>+
>+void mlx5e_health_destroy_reporters(struct mlx5e_priv *priv)
>+{
>+	mlx5e_reporter_rx_destroy(priv);
>+	mlx5e_reporter_tx_destroy(priv);
>+}
>+
>+void mlx5e_health_channels_update(struct mlx5e_priv *priv)
>+{
>+	if (priv->tx_reporter)
>+		devlink_health_reporter_state_update(priv->tx_reporter,
>+						     DEVLINK_HEALTH_REPORTER_STATE_HEALTHY);
>+	if (priv->rx_reporter)
>+		devlink_health_reporter_state_update(priv->rx_reporter,
>+						     DEVLINK_HEALTH_REPORTER_STATE_HEALTHY);
>+}

Could you do this introduction of mlx5e_health_create_reporters(),
mlx5e_health_destroy_reporters(), and mlx5e_health_channels_update()
in a separate patch before this one?


>+
> int mlx5e_health_sq_to_ready(struct mlx5e_channel *channel, u32 sqn)
> {
> 	struct mlx5_core_dev *mdev = channel->mdev;
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/health.h b/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
>index b0c8bda3d25f..7829ea229914 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
>@@ -16,6 +16,9 @@
> int mlx5e_reporter_named_obj_nest_start(struct devlink_fmsg *fmsg, char *name);
> int mlx5e_reporter_named_obj_nest_end(struct devlink_fmsg *fmsg);
> 
>+int mlx5e_reporter_rx_create(struct mlx5e_priv *priv);
>+void mlx5e_reporter_rx_destroy(struct mlx5e_priv *priv);
>+
> #define MLX5E_REPORTER_PER_Q_MAX_LEN 256
> 
> struct mlx5e_err_ctx {
>@@ -29,5 +32,9 @@ struct mlx5e_err_ctx {
> int mlx5e_health_report(struct mlx5e_priv *priv,
> 			struct devlink_health_reporter *reporter, char *err_str,
> 			struct mlx5e_err_ctx *err_ctx);
>+int mlx5e_health_create_reporters(struct mlx5e_priv *priv);
>+void mlx5e_health_destroy_reporters(struct mlx5e_priv *priv);
>+void mlx5e_health_channels_update(struct mlx5e_priv *priv);
>+
> 
> #endif
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c
>new file mode 100644
>index 000000000000..b24bdff473b0
>--- /dev/null
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c
>@@ -0,0 +1,194 @@
>+// SPDX-License-Identifier: GPL-2.0
>+// Copyright (c) 2019 Mellanox Technologies.
>+
>+#include "health.h"
>+#include "params.h"
>+
>+static int mlx5e_query_rq_state(struct mlx5_core_dev *dev, u32 rqn, u8 *state)
>+{
>+	int outlen = MLX5_ST_SZ_BYTES(query_rq_out);
>+	void *out;
>+	void *rqc;
>+	int err;
>+
>+	out = kvzalloc(outlen, GFP_KERNEL);
>+	if (!out)
>+		return -ENOMEM;
>+
>+	err = mlx5_core_query_rq(dev, rqn, out);
>+	if (err)
>+		goto out;
>+
>+	rqc = MLX5_ADDR_OF(query_rq_out, out, rq_context);
>+	*state = MLX5_GET(rqc, rqc, state);
>+
>+out:
>+	kvfree(out);
>+	return err;
>+}
>+
>+static int mlx5e_rx_reporter_build_diagnose_output(struct mlx5e_rq *rq,
>+						   struct devlink_fmsg *fmsg)
>+{
>+	struct mlx5e_priv *priv = rq->channel->priv;
>+	struct mlx5e_params *params = &priv->channels.params;
>+	struct mlx5e_icosq *icosq = &rq->channel->icosq;
>+	u8 icosq_hw_state;
>+	int wqes_sz;
>+	u8 hw_state;
>+	u16 wq_head;
>+	int err;
>+
>+	err = mlx5e_query_rq_state(priv->mdev, rq->rqn, &hw_state);
>+	if (err)
>+		return err;
>+
>+	err = mlx5_core_query_sq_state(priv->mdev, icosq->sqn, &icosq_hw_state);
>+	if (err)
>+		return err;
>+
>+	wqes_sz = mlx5e_rqwq_get_cur_sz(rq);
>+	wq_head = params->rq_wq_type == MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ ?
>+		  rq->mpwqe.wq.head : mlx5_wq_cyc_get_head(&rq->wqe.wq);
>+
>+	err = devlink_fmsg_obj_nest_start(fmsg);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_u32_pair_put(fmsg, "channel ix", rq->channel->ix);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_u32_pair_put(fmsg, "rqn", rq->rqn);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_u8_pair_put(fmsg, "HW state", hw_state);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_u8_pair_put(fmsg, "SW state", rq->state);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_u32_pair_put(fmsg, "posted WQEs", wqes_sz);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_u32_pair_put(fmsg, "cc", wq_head);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_u8_pair_put(fmsg, "ICOSQ HW state", icosq_hw_state);
>+	if (err)
>+		return err;
>+
>+	err = mlx5e_reporter_cq_diagnose(&rq->cq, fmsg);
>+	if (err)
>+		return err;
>+
>+	err = devlink_fmsg_obj_nest_end(fmsg);
>+	if (err)
>+		return err;
>+
>+	return 0;
>+}
>+
>+static int mlx5e_rx_reporter_diagnose(struct devlink_health_reporter *reporter,
>+				      struct devlink_fmsg *fmsg)
>+{
>+	struct mlx5e_priv *priv = devlink_health_reporter_priv(reporter);
>+	struct mlx5e_params *params = &priv->channels.params;
>+	struct mlx5e_rq *generic_rq;
>+	u32 rq_stride, rq_sz;
>+	int i, err = 0;
>+
>+	mutex_lock(&priv->state_lock);
>+
>+	if (!test_bit(MLX5E_STATE_OPENED, &priv->state))
>+		goto unlock;
>+
>+	generic_rq = &priv->channels.c[0]->rq;
>+	rq_sz = mlx5e_rqwq_get_size(generic_rq);
>+	rq_stride = BIT(mlx5e_mpwqe_get_log_stride_size(priv->mdev, params, NULL));
>+
>+	err = devlink_fmsg_arr_pair_nest_start(fmsg, "Common config");
>+	if (err)
>+		goto unlock;
>+
>+	err = mlx5e_reporter_named_obj_nest_start(fmsg, "RQ");
>+	if (err)
>+		goto unlock;
>+
>+	err = devlink_fmsg_u8_pair_put(fmsg, "type", params->rq_wq_type);
>+	if (err)
>+		goto unlock;
>+
>+	err = devlink_fmsg_u64_pair_put(fmsg, "stride size", rq_stride);
>+	if (err)
>+		goto unlock;
>+
>+	err = devlink_fmsg_u32_pair_put(fmsg, "size", rq_sz);
>+	if (err)
>+		goto unlock;
>+
>+	err = devlink_fmsg_arr_pair_nest_end(fmsg);

This is odd. I think that you should have
mlx5e_reporter_named_obj_nest_end() called here and
devlink_fmsg_arr_pair_nest_end() after
mlx5e_reporter_cq_common_diagnose()

Misuse of this seems to be a pattern. We need some checker for this
apparently.


>+	if (err)
>+		goto unlock;
>+
>+	err = mlx5e_reporter_cq_common_diagnose(&generic_rq->cq, fmsg);
>+	if (err)
>+		goto unlock;
>+
>+	err = mlx5e_reporter_named_obj_nest_end(fmsg);
>+	if (err)
>+		goto unlock;
>+
>+	err = devlink_fmsg_arr_pair_nest_start(fmsg, "RQs");
>+	if (err)
>+		goto unlock;
>+
>+	for (i = 0; i < priv->channels.num; i++) {
>+		struct mlx5e_rq *rq = &priv->channels.c[i]->rq;
>+
>+		err = mlx5e_rx_reporter_build_diagnose_output(rq, fmsg);
>+		if (err)
>+			goto unlock;
>+	}
>+	err = devlink_fmsg_arr_pair_nest_end(fmsg);
>+	if (err)
>+		goto unlock;
>+unlock:
>+	mutex_unlock(&priv->state_lock);
>+	return err;
>+}
>+
>+static const struct devlink_health_reporter_ops mlx5_rx_reporter_ops = {
>+		.name = "rx",
>+		.diagnose = mlx5e_rx_reporter_diagnose,
>+};
>+
>+int mlx5e_reporter_rx_create(struct mlx5e_priv *priv)
>+{
>+	struct devlink_health_reporter *reporter;
>+	struct mlx5_core_dev *mdev = priv->mdev;
>+	struct devlink *devlink = priv_to_devlink(mdev);
>+
>+	reporter =
>+		devlink_health_reporter_create(devlink, &mlx5_rx_reporter_ops,
>+					       0, false, priv);

Rather align like this:

	reporter = devlink_health_reporter_create(devlink,
						  &mlx5_rx_reporter_ops,
						  0, false, priv);


>+	if (IS_ERR(reporter))
>+		netdev_warn(priv->netdev, "Failed to create rx reporter, err = %ld\n",
>+			    PTR_ERR(reporter));
>+	else
>+		priv->tx_reporter = reporter;
>+	return PTR_ERR_OR_ZERO(reporter);

Change the flow to:

	if (IS_ERR(reporter)) {
		netdev_warn(priv->netdev, "Failed to create rx reporter, err = %ld\n",
			    PTR_ERR(reporter));
		return PTR_ERR(reporter);
	}
	priv->tx_reporter = reporter;
	return 0;


>+}
>+
>+void mlx5e_reporter_rx_destroy(struct mlx5e_priv *priv)
>+{
>+	if (!priv->rx_reporter)
>+		return;
>+
>+	devlink_health_reporter_destroy(priv->rx_reporter);
>+}
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>index 98c925e72706..3922905e909f 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>@@ -247,26 +247,6 @@ static inline void mlx5e_build_umr_wqe(struct mlx5e_rq *rq,
> 	ucseg->mkey_mask     = cpu_to_be64(MLX5_MKEY_MASK_FREE);
> }
> 
>-static u32 mlx5e_rqwq_get_size(struct mlx5e_rq *rq)
>-{
>-	switch (rq->wq_type) {
>-	case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
>-		return mlx5_wq_ll_get_size(&rq->mpwqe.wq);
>-	default:
>-		return mlx5_wq_cyc_get_size(&rq->wqe.wq);
>-	}
>-}
>-
>-static u32 mlx5e_rqwq_get_cur_sz(struct mlx5e_rq *rq)
>-{
>-	switch (rq->wq_type) {
>-	case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
>-		return rq->mpwqe.wq.cur_sz;
>-	default:
>-		return rq->wqe.wq.cur_sz;
>-	}
>-}
>-
> static int mlx5e_rq_alloc_mpwqe_info(struct mlx5e_rq *rq,
> 				     struct mlx5e_channel *c)
> {
>@@ -2320,10 +2300,7 @@ int mlx5e_open_channels(struct mlx5e_priv *priv,
> 			goto err_close_channels;
> 	}
> 
>-	if (priv->tx_reporter)
>-		devlink_health_reporter_state_update(priv->tx_reporter,
>-						     DEVLINK_HEALTH_REPORTER_STATE_HEALTHY);
>-
>+	mlx5e_health_channels_update(priv);
> 	kvfree(cparam);
> 	return 0;
> 
>@@ -3201,7 +3178,6 @@ static void mlx5e_cleanup_nic_tx(struct mlx5e_priv *priv)
> {
> 	int tc;
> 
>-	mlx5e_reporter_tx_destroy(priv);
> 	for (tc = 0; tc < priv->profile->max_tc; tc++)
> 		mlx5e_destroy_tis(priv->mdev, priv->tisn[tc]);
> }
>@@ -4985,12 +4961,14 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,
> 		mlx5_core_err(mdev, "TLS initialization failed, %d\n", err);
> 	mlx5e_build_nic_netdev(netdev);
> 	mlx5e_build_tc2txq_maps(priv);
>+	mlx5e_health_create_reporters(priv);
> 
> 	return 0;
> }
> 
> static void mlx5e_nic_cleanup(struct mlx5e_priv *priv)
> {
>+	mlx5e_health_destroy_reporters(priv);
> 	mlx5e_tls_cleanup(priv);
> 	mlx5e_ipsec_cleanup(priv);
> 	mlx5e_netdev_cleanup(priv->netdev, priv);
>@@ -5093,7 +5071,6 @@ static int mlx5e_init_nic_tx(struct mlx5e_priv *priv)
> #ifdef CONFIG_MLX5_CORE_EN_DCB
> 	mlx5e_dcbnl_initialize(priv);
> #endif
>-	mlx5e_reporter_tx_create(priv);
> 	return 0;
> }
> 
>-- 
>1.8.3.1
>

^ permalink raw reply

* Re: [PATCH net-next 3/4] bnxt_en: optimized XDP_REDIRECT support
From: Andy Gospodarek @ 2019-07-08 14:26 UTC (permalink / raw)
  To: Ilias Apalodimas; +Cc: Michael Chan, davem, netdev, hawk, ast, ivan.khoronzhuk
In-Reply-To: <20190708082803.GA28592@apalos>

On Mon, Jul 08, 2019 at 11:28:03AM +0300, Ilias Apalodimas wrote:
> Thanks Andy, Michael
> 
> > +	if (event & BNXT_REDIRECT_EVENT)
> > +		xdp_do_flush_map();
> > +
> >  	if (event & BNXT_TX_EVENT) {
> >  		struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
> >  		u16 prod = txr->tx_prod;
> > @@ -2254,9 +2257,23 @@ static void bnxt_free_tx_skbs(struct bnxt *bp)
> >  
> >  		for (j = 0; j < max_idx;) {
> >  			struct bnxt_sw_tx_bd *tx_buf = &txr->tx_buf_ring[j];
> > -			struct sk_buff *skb = tx_buf->skb;
> > +			struct sk_buff *skb;
> >  			int k, last;
> >  
> > +			if (i < bp->tx_nr_rings_xdp &&
> > +			    tx_buf->action == XDP_REDIRECT) {
> > +				dma_unmap_single(&pdev->dev,
> > +					dma_unmap_addr(tx_buf, mapping),
> > +					dma_unmap_len(tx_buf, len),
> > +					PCI_DMA_TODEVICE);
> > +				xdp_return_frame(tx_buf->xdpf);
> > +				tx_buf->action = 0;
> > +				tx_buf->xdpf = NULL;
> > +				j++;
> > +				continue;
> > +			}
> > +
> 
> Can't see the whole file here and maybe i am missing something, but since you
> optimize for that and start using page_pool, XDP_TX will be a re-synced (and
> not remapped)  buffer that can be returned to the pool and resynced for 
> device usage. 
> Is that happening later on the tx clean function?

Take a look at the way we treat the buffers in bnxt_rx_xdp() when we
receive them and then in bnxt_tx_int_xdp() when the transmits have
completed (for XDP_TX and XDP_REDIRECT).  I think we are doing what is
proper with respect to mapping vs sync for both cases, but I would be
fine to be corrected.

> 
> > +			skb = tx_buf->skb;
> >  			if (!skb) {
> >  				j++;
> >  				continue;
> > @@ -2517,6 +2534,13 @@ static int bnxt_alloc_rx_rings(struct bnxt *bp)
> >  		if (rc < 0)
> >  			return rc;
> >  
> > +		rc = xdp_rxq_info_reg_mem_model(&rxr->xdp_rxq,
> > +						MEM_TYPE_PAGE_SHARED, NULL);
> > +		if (rc) {
> > +			xdp_rxq_info_unreg(&rxr->xdp_rxq);
> 
> I think you can use page_pool_free directly here (and pge_pool_destroy once
> Ivan's patchset gets nerged), that's what mlx5 does iirc. Can we keep that
> common please?

That's an easy change, I can do that.

> 
> If Ivan's patch get merged please note you'll have to explicitly
> page_pool_destroy, after calling xdp_rxq_info_unreg() in the general unregister
> case (not the error habdling here). Sorry for the confusion this might bring!

Funny enough the driver was basically doing that until page_pool_destroy
was removed (these patches are not new).  I saw last week there was
discussion to add it back, but I did not want to wait to get this on the
list before that was resolved.

This path works as expected with the code in the tree today so it seemed
like the correct approach to post something that is working, right?  :-)

> 
> > +			return rc;
> > +		}
> > +
> >  		rc = bnxt_alloc_ring(bp, &ring->ring_mem);
> >  		if (rc)
> >  			return rc;
> > @@ -10233,6 +10257,7 @@ static const struct net_device_ops bnxt_netdev_ops = {
> [...]
> 
> Thanks!
> /Ilias

^ permalink raw reply

* Re: [PATCH net-next v6 05/15] ethtool: helper functions for netlink interface
From: Jiri Pirko @ 2019-07-08 14:40 UTC (permalink / raw)
  To: Michal Kubecek
  Cc: netdev, David Miller, Jakub Kicinski, Andrew Lunn,
	Florian Fainelli, John Linville, Stephen Hemminger, Johannes Berg,
	linux-kernel
In-Reply-To: <20190708122251.GB24474@unicorn.suse.cz>

Mon, Jul 08, 2019 at 02:22:51PM CEST, mkubecek@suse.cz wrote:
>On Wed, Jul 03, 2019 at 12:04:35PM +0200, Jiri Pirko wrote:
>> Tue, Jul 02, 2019 at 06:34:37PM CEST, mkubecek@suse.cz wrote:
>> >On Tue, Jul 02, 2019 at 03:05:15PM +0200, Jiri Pirko wrote:
>> >> Tue, Jul 02, 2019 at 01:50:04PM CEST, mkubecek@suse.cz wrote:
>> >> >+/**
>> >> >+ * ethnl_is_privileged() - check if request has sufficient privileges
>> >> >+ * @skb: skb with client request
>> >> >+ *
>> >> >+ * Checks if client request has CAP_NET_ADMIN in its netns. Unlike the flags
>> >> >+ * in genl_ops, this allows finer access control, e.g. allowing or denying
>> >> >+ * the request based on its contents or witholding only part of the data
>> >> >+ * from unprivileged users.
>> >> >+ *
>> >> >+ * Return: true if request is privileged, false if not
>> >> >+ */
>> >> >+static inline bool ethnl_is_privileged(struct sk_buff *skb)
>> >> 
>> >> I wonder why you need this helper. Genetlink uses
>> >> ops->flags & GENL_ADMIN_PERM for this. 
>> >
>> >It's explained in the function description. Sometimes we need finer
>> >control than by request message type. An example is the WoL password:
>> >ETHTOOL_GWOL is privileged because of it but I believe there si no
>> >reason why unprivileged user couldn't see enabled WoL modes, we can
>> >simply omit the password for him. (Also, it allows to combine query for
>> >WoL settings with other unprivileged settings.)
>> 
>> Why can't we have rather:
>> ETHTOOL_WOL_GET for all
>> ETHTOOL_WOL_PASSWORD_GET  with GENL_ADMIN_PERM
>> ?
>> Better to stick with what we have in gennetlink rather then to bend the
>> implementation from the very beginning I think.
>
>We can. But it would also mean two separate SET requests (or breaking
>the rule that _GET_REPLY, _SET and _NTF share the layout). That would be
>unfortunate as ethtool_ops callback does not actually allow setting only
>the modes so that the ETHTOOL_MSG_WOL_SET request (which would have to
>go first as many drivers ignore .sopass if WAKE_MAGICSECURE is not set)
>would have to pass a different password (most likely just leaving what
>->get_wol() put there) and that password would be actually set until the
>second request arrives. There goes the idea of getting rid of ioctl
>interface raciness...

I understand. That is my concern, not to bring baggage from ioclt :/


>
>I would rather see returning to WoL modes not being visible to
>unprivileged users than that (even if there is no actual reason for it).
>Anyway, shortening the series left WoL settings out if the first part so
>that I can split this out for now and leave the discussion for when we
>get to WoL one day.

Fine.


>
>> >> >+/**
>> >> >+ * ethnl_reply_header_size() - total size of reply header
>> >> >+ *
>> >> >+ * This is an upper estimate so that we do not need to hold RTNL lock longer
>> >> >+ * than necessary (to prevent rename between size estimate and composing the
>> >> 
>> >> I guess this description is not relevant anymore. I don't see why to
>> >> hold rtnl mutex for this function...
>> >
>> >You don't need it for this function, it's the other way around: unless
>> >you hold RTNL lock for the whole time covering both checking needed
>> >message size and filling the message - and we don't - the device could
>> >be renamed in between. Thus if we returned size based on current device
>> >name, it might not be sufficient at the time the header is filled.
>> >That's why this function returns maximum possible size (which is
>> >actually a constant).
>> 
>> I suggest to avoid the description. It is misleading. Perhaps something
>> to have in a patch description but not here in code.
>
>The reason I put the comment there was to prevent someone "optimizing"
>the helper by using strlen() later. Maybe something shorter and more to
>the point, e.g.
>
>  Using IFNAMSIZ is faster and prevents a race if the device is renamed
>  before we fill the name into skb.
>
>?

Sounds good, thanks!


>
>Michal

^ permalink raw reply

* [PATCH net-next] net: dsa: vsc73xx: Fix Kconfig warning and build errors
From: YueHaibing @ 2019-07-08 14:42 UTC (permalink / raw)
  To: andrew, vivien.didelot, f.fainelli, davem, paweldembicki
  Cc: linux-kernel, netdev, YueHaibing

Fix Kconfig dependency warning and subsequent build errors
caused by OF is not set:

WARNING: unmet direct dependencies detected for NET_DSA_VITESSE_VSC73XX
  Depends on [n]: NETDEVICES [=y] && HAVE_NET_DSA [=y] && OF [=n] && NET_DSA [=m]
  Selected by [m]:
  - NET_DSA_VITESSE_VSC73XX_PLATFORM [=m] && NETDEVICES [=y] && HAVE_NET_DSA [=y] && HAS_IOMEM [=y]

Move OF and NET_DSA dependencies to NET_DSA_VITESSE_VSC73XX/
NET_DSA_VITESSE_VSC73XX_PLATFORM to fix this.

Reported-by: Hulk Robot <hulkci@huawei.com>
Fixes: 631e83bf7c0e ("net: dsa: vsc73xx: add support for parallel mode")
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
---
 drivers/net/dsa/Kconfig | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/dsa/Kconfig b/drivers/net/dsa/Kconfig
index cf9dbd1..e28c209 100644
--- a/drivers/net/dsa/Kconfig
+++ b/drivers/net/dsa/Kconfig
@@ -100,8 +100,6 @@ config NET_DSA_SMSC_LAN9303_MDIO
 
 config NET_DSA_VITESSE_VSC73XX
 	tristate
-	depends on OF
-	depends on NET_DSA
 	select FIXED_PHY
 	select VITESSE_PHY
 	select GPIOLIB
@@ -112,6 +110,7 @@ config NET_DSA_VITESSE_VSC73XX
 config NET_DSA_VITESSE_VSC73XX_SPI
 	tristate "Vitesse VSC7385/7388/7395/7398 SPI mode support"
 	depends on SPI
+	depends on OF && NET_DSA
 	select NET_DSA_VITESSE_VSC73XX
 	---help---
 	  This enables support for the Vitesse VSC7385, VSC7388, VSC7395
@@ -120,6 +119,7 @@ config NET_DSA_VITESSE_VSC73XX_SPI
 config NET_DSA_VITESSE_VSC73XX_PLATFORM
 	tristate "Vitesse VSC7385/7388/7395/7398 Platform mode support"
 	depends on HAS_IOMEM
+	depends on OF && NET_DSA
 	select NET_DSA_VITESSE_VSC73XX
 	---help---
 	  This enables support for the Vitesse VSC7385, VSC7388, VSC7395
-- 
2.7.4



^ permalink raw reply related

* Re: [PATCH net-next v5 1/5] devlink: Refactor physical port attributes
From: Jiri Pirko @ 2019-07-08 14:44 UTC (permalink / raw)
  To: Parav Pandit; +Cc: netdev, jiri, saeedm, jakub.kicinski
In-Reply-To: <20190708041549.56601-2-parav@mellanox.com>

Mon, Jul 08, 2019 at 06:15:45AM CEST, parav@mellanox.com wrote:
>To support additional devlink port flavours and to support few common
>and few different port attributes, move physical port attributes to a
>different structure.
>
>Signed-off-by: Parav Pandit <parav@mellanox.com>
>---
>Changelog:
>v4->v5:
> - Addressed comments from Jiri.
> - Moved check for physical port flavours check to separate patch.
>v3->v4:
> - Addressed comments from Jiri.
> - Renamed phys_port to physical to be consistent with pci_pf.
> - Removed port_number from __devlink_port_attrs_set and moved
>   assigment to caller function.
> - Used capital letter while moving old comment to new structure.
> - Removed helper function is_devlink_phy_port_num_supported().
>v2->v3:
> - Address comments from Jakub.
> - Made port_number and split_port_number applicable only to
>   physical port flavours by having in union.
>v1->v2:
> - Limited port_num attribute to physical ports
> - Updated PCI PF attribute set API to not have port_number
>---
> include/net/devlink.h | 13 ++++++++--
> net/core/devlink.c    | 59 ++++++++++++++++++++++++++++---------------
> 2 files changed, 50 insertions(+), 22 deletions(-)
>
>diff --git a/include/net/devlink.h b/include/net/devlink.h
>index 6625ea068d5e..c79a1370867a 100644
>--- a/include/net/devlink.h
>+++ b/include/net/devlink.h
>@@ -38,14 +38,23 @@ struct devlink {
> 	char priv[0] __aligned(NETDEV_ALIGN);
> };
> 
>+struct devlink_port_phys_attrs {
>+	u32 port_number; /* Same value as "split group".
>+			  * A physical port which is visible to the user
>+			  * for a given port flavour.
>+			  */
>+	u32 split_subport_number;
>+};
>+
> struct devlink_port_attrs {
> 	u8 set:1,
> 	   split:1,
> 	   switch_port:1;
> 	enum devlink_port_flavour flavour;
>-	u32 port_number; /* same value as "split group" */
>-	u32 split_subport_number;
> 	struct netdev_phys_item_id switch_id;
>+	union {
>+		struct devlink_port_phys_attrs physical;

You can shorten this to just "phys". Would be better.
With that
Acked-by: Jiri Pirko <jiri@mellanox.com>

^ permalink raw reply

* Re: [PATCH net-next v5 2/5] devlink: Return physical port fields only for applicable port flavours
From: Jiri Pirko @ 2019-07-08 14:44 UTC (permalink / raw)
  To: Parav Pandit; +Cc: netdev, jiri, saeedm, jakub.kicinski
In-Reply-To: <20190708041549.56601-3-parav@mellanox.com>

Mon, Jul 08, 2019 at 06:15:46AM CEST, parav@mellanox.com wrote:
>Physical port number and split group fields are applicable only to
>physical port flavours such as PHYSICAL, CPU and DSA.
>Hence limit returning those values in netlink response to such port
>flavours.
>
>Signed-off-by: Parav Pandit <parav@mellanox.com>

Acked-by: Jiri Pirko <jiri@mellanox.com>

^ permalink raw reply


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