patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9
@ 2018-09-27  8:43 Luca Boccassi
  2018-09-27  8:43 ` [dpdk-stable] patch 'net/nfp: fix live MAC changes not supported' " Luca Boccassi
                   ` (7 more replies)
  0 siblings, 8 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-09-27  8:43 UTC (permalink / raw)
  To: Yunjian Wang; +Cc: Chas Williams, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/27/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From ef681bd47d7fdd3000e904d131f8aafde934eba8 Mon Sep 17 00:00:00 2001
From: Yunjian Wang <wangyunjian@huawei.com>
Date: Tue, 7 Aug 2018 16:10:46 +0800
Subject: [PATCH] net/bonding: support matching QinQ ethertype

[ upstream commit 763e450ae24d88b87f1eb86643a2897b141d9c07 ]

We assume VLAN ethtertype is 0x8100 in get_vlan_offset() function,
but it could be 0x88A8 if QinQ is supported.

Fixes: 06fe78b98ccd ("bond: add mode 6")

Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Acked-by: Chas Williams <chas3@att.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 6081918e79..60f9e1ab11 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -62,7 +62,8 @@ get_vlan_offset(struct ether_hdr *eth_hdr, uint16_t *proto)
 {
 	size_t vlan_offset = 0;
 
-	if (rte_cpu_to_be_16(ETHER_TYPE_VLAN) == *proto) {
+	if (rte_cpu_to_be_16(ETHER_TYPE_VLAN) == *proto ||
+		rte_cpu_to_be_16(ETHER_TYPE_QINQ) == *proto) {
 		struct vlan_hdr *vlan_hdr = (struct vlan_hdr *)(eth_hdr + 1);
 
 		vlan_offset = sizeof(struct vlan_hdr);
-- 
2.18.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-09-25 13:26:56.807025572 +0100
+++ 0001-net-bonding-support-matching-QinQ-ethertype.patch	2018-09-25 13:26:56.763424697 +0100
@@ -1,13 +1,14 @@
-From 763e450ae24d88b87f1eb86643a2897b141d9c07 Mon Sep 17 00:00:00 2001
+From ef681bd47d7fdd3000e904d131f8aafde934eba8 Mon Sep 17 00:00:00 2001
 From: Yunjian Wang <wangyunjian@huawei.com>
 Date: Tue, 7 Aug 2018 16:10:46 +0800
 Subject: [PATCH] net/bonding: support matching QinQ ethertype
 
+[ upstream commit 763e450ae24d88b87f1eb86643a2897b141d9c07 ]
+
 We assume VLAN ethtertype is 0x8100 in get_vlan_offset() function,
 but it could be 0x88A8 if QinQ is supported.
 
 Fixes: 06fe78b98ccd ("bond: add mode 6")
-Cc: stable@dpdk.org
 
 Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
 Acked-by: Chas Williams <chas3@att.com>
@@ -16,10 +17,10 @@
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
-index 58f7377c60..4417422581 100644
+index 6081918e79..60f9e1ab11 100644
 --- a/drivers/net/bonding/rte_eth_bond_pmd.c
 +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
-@@ -37,7 +37,8 @@ get_vlan_offset(struct ether_hdr *eth_hdr, uint16_t *proto)
+@@ -62,7 +62,8 @@ get_vlan_offset(struct ether_hdr *eth_hdr, uint16_t *proto)
  {
  	size_t vlan_offset = 0;
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/nfp: fix live MAC changes not supported' has been queued to LTS release 16.11.9
  2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
@ 2018-09-27  8:43 ` Luca Boccassi
  2018-09-27  8:43 ` [dpdk-stable] patch 'doc: fix wrong usage of bind command' " Luca Boccassi
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-09-27  8:43 UTC (permalink / raw)
  To: Alejandro Lucero; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/27/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From a29020aaa6e5ebcaab9398ea2397f59316190538 Mon Sep 17 00:00:00 2001
From: Alejandro Lucero <alejandro.lucero@netronome.com>
Date: Fri, 24 Aug 2018 15:25:36 +0100
Subject: [PATCH] net/nfp: fix live MAC changes not supported

[ upstream commit 7712a1c660661005225c3f7ccbca09a6296e2751 ]

Some NFP firmwares support live changes to the MAC address, but
this is not always true and the firmware advertises it accordingly.

This patch checks if firmware does not support live changes and
sets RTE_ETH_DEV_NOLIVE_MAC_ADDR in that case.

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
---
 drivers/net/nfp/nfp_net.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
index 0f0589e061..85fd6bda05 100644
--- a/drivers/net/nfp/nfp_net.c
+++ b/drivers/net/nfp/nfp_net.c
@@ -2450,6 +2450,9 @@ nfp_net_init(struct rte_eth_dev *eth_dev)
 	ether_addr_copy((struct ether_addr *)hw->mac_addr,
 			&eth_dev->data->mac_addrs[0]);
 
+	if (!(hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR))
+		eth_dev->data->dev_flags |= RTE_ETH_DEV_NOLIVE_MAC_ADDR;
+
 	PMD_INIT_LOG(INFO, "port %d VendorID=0x%x DeviceID=0x%x "
 		     "mac=%02x:%02x:%02x:%02x:%02x:%02x",
 		     eth_dev->data->port_id, pci_dev->id.vendor_id,
-- 
2.18.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-09-25 13:26:56.827221937 +0100
+++ 0002-net-nfp-fix-live-MAC-changes-not-supported.patch	2018-09-25 13:26:56.771424700 +0100
@@ -1,26 +1,26 @@
-From 7712a1c660661005225c3f7ccbca09a6296e2751 Mon Sep 17 00:00:00 2001
+From a29020aaa6e5ebcaab9398ea2397f59316190538 Mon Sep 17 00:00:00 2001
 From: Alejandro Lucero <alejandro.lucero@netronome.com>
 Date: Fri, 24 Aug 2018 15:25:36 +0100
 Subject: [PATCH] net/nfp: fix live MAC changes not supported
 
+[ upstream commit 7712a1c660661005225c3f7ccbca09a6296e2751 ]
+
 Some NFP firmwares support live changes to the MAC address, but
 this is not always true and the firmware advertises it accordingly.
 
 This patch checks if firmware does not support live changes and
 sets RTE_ETH_DEV_NOLIVE_MAC_ADDR in that case.
 
-Cc: stable@dpdk.org
-
 Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
 ---
  drivers/net/nfp/nfp_net.c | 3 +++
  1 file changed, 3 insertions(+)
 
 diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
-index 6e5e305f1d..ee743e9753 100644
+index 0f0589e061..85fd6bda05 100644
 --- a/drivers/net/nfp/nfp_net.c
 +++ b/drivers/net/nfp/nfp_net.c
-@@ -2886,6 +2886,9 @@ nfp_net_init(struct rte_eth_dev *eth_dev)
+@@ -2450,6 +2450,9 @@ nfp_net_init(struct rte_eth_dev *eth_dev)
  	ether_addr_copy((struct ether_addr *)hw->mac_addr,
  			&eth_dev->data->mac_addrs[0]);
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'doc: fix wrong usage of bind command' has been queued to LTS release 16.11.9
  2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
  2018-09-27  8:43 ` [dpdk-stable] patch 'net/nfp: fix live MAC changes not supported' " Luca Boccassi
@ 2018-09-27  8:43 ` Luca Boccassi
  2018-09-27  8:43 ` [dpdk-stable] patch 'examples/vhost: remove unnecessary constant' " Luca Boccassi
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-09-27  8:43 UTC (permalink / raw)
  To: Rami Rosen; +Cc: Zhiyong Yang, Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/27/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 53ac4208df75a12332b25111140c3bd3f63044cc Mon Sep 17 00:00:00 2001
From: Rami Rosen <ramirose@gmail.com>
Date: Fri, 24 Aug 2018 10:43:02 +0300
Subject: [PATCH] doc: fix wrong usage of bind command

[ upstream commit b733c60f68f12e064359b27e630305c541a3fbdf ]

This patch fixes wrong usage of bind command in vhost.rst.
Using "dpdk-devbind.py -b=uio_pci_generic 0000:00:04.0" gives
an error of "unbind failed". It should be "-b uio_pci_generic" so
it will work correctly.

Fixes: a971c509a523 ("doc: update vhost sample guide")

Signed-off-by: Rami Rosen <ramirose@gmail.com>
Acked-by: Zhiyong Yang <zhiyong.yang@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 doc/guides/sample_app_ug/vhost.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/guides/sample_app_ug/vhost.rst b/doc/guides/sample_app_ug/vhost.rst
index 1f6d0d96a0..c9a605fc48 100644
--- a/doc/guides/sample_app_ug/vhost.rst
+++ b/doc/guides/sample_app_ug/vhost.rst
@@ -115,7 +115,7 @@ could be done by:
 .. code-block:: console
 
    modprobe uio_pci_generic
-   $RTE_SDK/tools/dpdk-devbind.py -b=uio_pci_generic 0000:00:04.0
+   $RTE_SDK/tools/dpdk-devbind.py -b uio_pci_generic 0000:00:04.0
 
 Then start testpmd for packet forwarding testing.
 
-- 
2.18.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-09-25 13:26:56.849323403 +0100
+++ 0003-doc-fix-wrong-usage-of-bind-command.patch	2018-09-25 13:26:56.771424700 +0100
@@ -1,15 +1,16 @@
-From b733c60f68f12e064359b27e630305c541a3fbdf Mon Sep 17 00:00:00 2001
+From 53ac4208df75a12332b25111140c3bd3f63044cc Mon Sep 17 00:00:00 2001
 From: Rami Rosen <ramirose@gmail.com>
 Date: Fri, 24 Aug 2018 10:43:02 +0300
 Subject: [PATCH] doc: fix wrong usage of bind command
 
+[ upstream commit b733c60f68f12e064359b27e630305c541a3fbdf ]
+
 This patch fixes wrong usage of bind command in vhost.rst.
 Using "dpdk-devbind.py -b=uio_pci_generic 0000:00:04.0" gives
 an error of "unbind failed". It should be "-b uio_pci_generic" so
 it will work correctly.
 
 Fixes: a971c509a523 ("doc: update vhost sample guide")
-Cc: stable@dpdk.org
 
 Signed-off-by: Rami Rosen <ramirose@gmail.com>
 Acked-by: Zhiyong Yang <zhiyong.yang@intel.com>
@@ -19,15 +20,15 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/doc/guides/sample_app_ug/vhost.rst b/doc/guides/sample_app_ug/vhost.rst
-index fd42cb3f77..df4d6f9a0b 100644
+index 1f6d0d96a0..c9a605fc48 100644
 --- a/doc/guides/sample_app_ug/vhost.rst
 +++ b/doc/guides/sample_app_ug/vhost.rst
-@@ -78,7 +78,7 @@ could be done by:
+@@ -115,7 +115,7 @@ could be done by:
  .. code-block:: console
  
     modprobe uio_pci_generic
--   $RTE_SDK/usertools/dpdk-devbind.py -b=uio_pci_generic 0000:00:04.0
-+   $RTE_SDK/usertools/dpdk-devbind.py -b uio_pci_generic 0000:00:04.0
+-   $RTE_SDK/tools/dpdk-devbind.py -b=uio_pci_generic 0000:00:04.0
++   $RTE_SDK/tools/dpdk-devbind.py -b uio_pci_generic 0000:00:04.0
  
  Then start testpmd for packet forwarding testing.
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'examples/vhost: remove unnecessary constant' has been queued to LTS release 16.11.9
  2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
  2018-09-27  8:43 ` [dpdk-stable] patch 'net/nfp: fix live MAC changes not supported' " Luca Boccassi
  2018-09-27  8:43 ` [dpdk-stable] patch 'doc: fix wrong usage of bind command' " Luca Boccassi
@ 2018-09-27  8:43 ` Luca Boccassi
  2018-09-27  8:44 ` [dpdk-stable] patch 'vhost-user: drop connection on message handling failures' " Luca Boccassi
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-09-27  8:43 UTC (permalink / raw)
  To: Rami Rosen; +Cc: Tiwei Bie, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/27/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 143430e947d745c42a20932c36950dd79a07382e Mon Sep 17 00:00:00 2001
From: Rami Rosen <ramirose@gmail.com>
Date: Sat, 25 Aug 2018 22:22:40 +0300
Subject: [PATCH] examples/vhost: remove unnecessary constant

[ upstream commit b24ec9bc1c43f7cada0b16709043f84f52f2b895 ]

This patch removes an unnecessary definition of MAX_PRINT_BUFF
in examples/vhost/main.c, since it is no longer being used.

Fixes: 68363d85857d ("examples/vhost: remove the non-working zero copy code")

Signed-off-by: Rami Rosen <ramirose@gmail.com>
Reviewed-by: Tiwei Bie <tiwei.bie@intel.com>
---
 examples/vhost/main.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/examples/vhost/main.c b/examples/vhost/main.c
index fe2327473d..89d21fc022 100644
--- a/examples/vhost/main.c
+++ b/examples/vhost/main.c
@@ -87,9 +87,6 @@
 /* Max number of devices. Limited by vmdq. */
 #define MAX_DEVICES 64
 
-/* Size of buffers used for snprintfs. */
-#define MAX_PRINT_BUFF 6072
-
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
 
-- 
2.18.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-09-25 13:26:56.868552864 +0100
+++ 0004-examples-vhost-remove-unnecessary-constant.patch	2018-09-25 13:26:56.775424702 +0100
@@ -1,13 +1,14 @@
-From b24ec9bc1c43f7cada0b16709043f84f52f2b895 Mon Sep 17 00:00:00 2001
+From 143430e947d745c42a20932c36950dd79a07382e Mon Sep 17 00:00:00 2001
 From: Rami Rosen <ramirose@gmail.com>
 Date: Sat, 25 Aug 2018 22:22:40 +0300
 Subject: [PATCH] examples/vhost: remove unnecessary constant
 
+[ upstream commit b24ec9bc1c43f7cada0b16709043f84f52f2b895 ]
+
 This patch removes an unnecessary definition of MAX_PRINT_BUFF
 in examples/vhost/main.c, since it is no longer being used.
 
 Fixes: 68363d85857d ("examples/vhost: remove the non-working zero copy code")
-Cc: stable@dpdk.org
 
 Signed-off-by: Rami Rosen <ramirose@gmail.com>
 Reviewed-by: Tiwei Bie <tiwei.bie@intel.com>
@@ -16,10 +17,10 @@
  1 file changed, 3 deletions(-)
 
 diff --git a/examples/vhost/main.c b/examples/vhost/main.c
-index 2175c11864..5d28d03f63 100644
+index fe2327473d..89d21fc022 100644
 --- a/examples/vhost/main.c
 +++ b/examples/vhost/main.c
-@@ -58,9 +58,6 @@
+@@ -87,9 +87,6 @@
  /* Max number of devices. Limited by vmdq. */
  #define MAX_DEVICES 64
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'vhost-user: drop connection on message handling failures' has been queued to LTS release 16.11.9
  2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
                   ` (2 preceding siblings ...)
  2018-09-27  8:43 ` [dpdk-stable] patch 'examples/vhost: remove unnecessary constant' " Luca Boccassi
@ 2018-09-27  8:44 ` Luca Boccassi
  2018-09-27  8:44 ` [dpdk-stable] patch 'net/bonding: use evenly distributed default RSS RETA' " Luca Boccassi
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-09-27  8:44 UTC (permalink / raw)
  To: Ilya Maximets; +Cc: Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/27/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 1f663861f80ab4de51216ae5e1c0a3a88d52dd85 Mon Sep 17 00:00:00 2001
From: Ilya Maximets <i.maximets@samsung.com>
Date: Mon, 3 Sep 2018 13:12:24 +0300
Subject: [PATCH] vhost-user: drop connection on message handling failures

[ upstream commit 0d7853a4da3bd681005ecb64ef1183c59356eeea ]

There are a lot of cases where vhost-user massage handling
could fail and end up in a fully not recoverable state. For
example, allocation failures of shadow used ring and batched
copy array are not recoverable and leads to the segmentation
faults like this on the receiving/transmission path:

  Program received signal SIGSEGV, Segmentation fault.
  [Switching to Thread 0x7f913fecf0 (LWP 43625)]
  in copy_desc_to_mbuf () at /lib/librte_vhost/virtio_net.c:760
  760       batch_copy[vq->batch_copy_nb_elems].dst =

This could be easily reproduced in case of low memory or big
number of vhost-user ports.

Fix that by propagating error to the upper layer which will
end up with disconnection in case we can not report to
the message sender when the error happens.

Fixes: f689586bc060 ("vhost: shadow used ring update")

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 lib/librte_vhost/vhost_user.c | 48 +++++++++++++++++++++++------------
 1 file changed, 32 insertions(+), 16 deletions(-)

diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index 04c92ceb30..f3b286e72f 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -741,7 +741,7 @@ vhost_user_set_vring_call(struct virtio_net *dev, struct VhostUserMsg *pmsg)
  *  In vhost-user, when we receive kick message, will test whether virtio
  *  device is ready for packet processing.
  */
-static void
+static int
 vhost_user_set_vring_kick(struct virtio_net *dev, struct VhostUserMsg *pmsg)
 {
 	struct vhost_vring_file file;
@@ -769,6 +769,8 @@ vhost_user_set_vring_kick(struct virtio_net *dev, struct VhostUserMsg *pmsg)
 		if (notify_ops->new_device(dev->vid) == 0)
 			dev->flags |= VIRTIO_DEV_RUNNING;
 	}
+
+	return 0;
 }
 
 static void
@@ -847,14 +849,19 @@ vhost_user_set_vring_enable(struct virtio_net *dev,
 	return 0;
 }
 
-static void
+static int
 vhost_user_set_protocol_features(struct virtio_net *dev,
 				 uint64_t protocol_features)
 {
-	if (protocol_features & ~VHOST_USER_PROTOCOL_FEATURES)
-		return;
+	if (protocol_features & ~VHOST_USER_PROTOCOL_FEATURES) {
+		RTE_LOG(ERR, VHOST_CONFIG,
+			"(%d) received invalid protocol features.\n",
+			dev->vid);
+		return -1;
+	}
 
 	dev->protocol_features = protocol_features;
+	return 0;
 }
 
 static int
@@ -1087,7 +1094,7 @@ vhost_user_msg_handler(int vid, int fd)
 		send_vhost_message(fd, &msg);
 		break;
 	case VHOST_USER_SET_FEATURES:
-		vhost_user_set_features(dev, msg.payload.u64);
+		ret = vhost_user_set_features(dev, msg.payload.u64);
 		break;
 
 	case VHOST_USER_GET_PROTOCOL_FEATURES:
@@ -1096,14 +1103,14 @@ vhost_user_msg_handler(int vid, int fd)
 		send_vhost_message(fd, &msg);
 		break;
 	case VHOST_USER_SET_PROTOCOL_FEATURES:
-		vhost_user_set_protocol_features(dev, msg.payload.u64);
+		ret = vhost_user_set_protocol_features(dev, msg.payload.u64);
 		break;
 
 	case VHOST_USER_SET_OWNER:
-		vhost_user_set_owner();
+		ret = vhost_user_set_owner();
 		break;
 	case VHOST_USER_RESET_OWNER:
-		vhost_user_reset_owner(dev);
+		ret = vhost_user_reset_owner(dev);
 		break;
 
 	case VHOST_USER_SET_MEM_TABLE:
@@ -1111,8 +1118,9 @@ vhost_user_msg_handler(int vid, int fd)
 		break;
 
 	case VHOST_USER_SET_LOG_BASE:
-		vhost_user_set_log_base(dev, &msg);
-
+		ret = vhost_user_set_log_base(dev, &msg);
+		if (ret)
+			break;
 		/* it needs a reply */
 		msg.size = sizeof(msg.payload.u64);
 		send_vhost_message(fd, &msg);
@@ -1123,23 +1131,25 @@ vhost_user_msg_handler(int vid, int fd)
 		break;
 
 	case VHOST_USER_SET_VRING_NUM:
-		vhost_user_set_vring_num(dev, &msg.payload.state);
+		ret = vhost_user_set_vring_num(dev, &msg.payload.state);
 		break;
 	case VHOST_USER_SET_VRING_ADDR:
-		vhost_user_set_vring_addr(&dev, &msg.payload.addr);
+		ret = vhost_user_set_vring_addr(&dev, &msg.payload.addr);
 		break;
 	case VHOST_USER_SET_VRING_BASE:
-		vhost_user_set_vring_base(dev, &msg.payload.state);
+		ret = vhost_user_set_vring_base(dev, &msg.payload.state);
 		break;
 
 	case VHOST_USER_GET_VRING_BASE:
 		ret = vhost_user_get_vring_base(dev, &msg.payload.state);
+		if (ret)
+			break;
 		msg.size = sizeof(msg.payload.state);
 		send_vhost_message(fd, &msg);
 		break;
 
 	case VHOST_USER_SET_VRING_KICK:
-		vhost_user_set_vring_kick(dev, &msg);
+		ret = vhost_user_set_vring_kick(dev, &msg);
 		break;
 	case VHOST_USER_SET_VRING_CALL:
 		vhost_user_set_vring_call(dev, &msg);
@@ -1158,10 +1168,10 @@ vhost_user_msg_handler(int vid, int fd)
 		break;
 
 	case VHOST_USER_SET_VRING_ENABLE:
-		vhost_user_set_vring_enable(dev, &msg.payload.state);
+		ret = vhost_user_set_vring_enable(dev, &msg.payload.state);
 		break;
 	case VHOST_USER_SEND_RARP:
-		vhost_user_send_rarp(dev, &msg);
+		ret = vhost_user_send_rarp(dev, &msg);
 		break;
 
 	default:
@@ -1172,5 +1182,11 @@ vhost_user_msg_handler(int vid, int fd)
 	if (unlock_required)
 		vhost_user_unlock_all_queue_pairs(dev);
 
+	if (ret) {
+		RTE_LOG(ERR, VHOST_CONFIG,
+			"vhost message handling failed.\n");
+		return -1;
+	}
+
 	return 0;
 }
-- 
2.18.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-09-25 13:26:56.888449909 +0100
+++ 0005-vhost-user-drop-connection-on-message-handling-failu.patch	2018-09-25 13:26:56.775424702 +0100
@@ -1,8 +1,10 @@
-From 0d7853a4da3bd681005ecb64ef1183c59356eeea Mon Sep 17 00:00:00 2001
+From 1f663861f80ab4de51216ae5e1c0a3a88d52dd85 Mon Sep 17 00:00:00 2001
 From: Ilya Maximets <i.maximets@samsung.com>
 Date: Mon, 3 Sep 2018 13:12:24 +0300
 Subject: [PATCH] vhost-user: drop connection on message handling failures
 
+[ upstream commit 0d7853a4da3bd681005ecb64ef1183c59356eeea ]
+
 There are a lot of cases where vhost-user massage handling
 could fail and end up in a fully not recoverable state. For
 example, allocation failures of shadow used ring and batched
@@ -22,46 +24,37 @@
 the message sender when the error happens.
 
 Fixes: f689586bc060 ("vhost: shadow used ring update")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
 ---
- lib/librte_vhost/vhost_user.c | 51 +++++++++++++++++++++--------------
- 1 file changed, 31 insertions(+), 20 deletions(-)
+ lib/librte_vhost/vhost_user.c | 48 +++++++++++++++++++++++------------
+ 1 file changed, 32 insertions(+), 16 deletions(-)
 
 diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
-index 9aa1ce1181..63d145b2d6 100644
+index 04c92ceb30..f3b286e72f 100644
 --- a/lib/librte_vhost/vhost_user.c
 +++ b/lib/librte_vhost/vhost_user.c
-@@ -1014,7 +1014,7 @@ vhost_user_set_vring_call(struct virtio_net *dev, struct VhostUserMsg *pmsg)
- 	vq->callfd = file.fd;
- }
- 
+@@ -741,7 +741,7 @@ vhost_user_set_vring_call(struct virtio_net *dev, struct VhostUserMsg *pmsg)
+  *  In vhost-user, when we receive kick message, will test whether virtio
+  *  device is ready for packet processing.
+  */
 -static void
 +static int
- vhost_user_set_vring_kick(struct virtio_net **pdev, struct VhostUserMsg *pmsg)
+ vhost_user_set_vring_kick(struct virtio_net *dev, struct VhostUserMsg *pmsg)
  {
  	struct vhost_vring_file file;
-@@ -1032,7 +1032,7 @@ vhost_user_set_vring_kick(struct virtio_net **pdev, struct VhostUserMsg *pmsg)
- 	/* Interpret ring addresses only when ring is started. */
- 	dev = translate_ring_addresses(dev, file.index);
- 	if (!dev)
--		return;
-+		return -1;
- 
- 	*pdev = dev;
- 
-@@ -1049,6 +1049,7 @@ vhost_user_set_vring_kick(struct virtio_net **pdev, struct VhostUserMsg *pmsg)
- 	if (vq->kickfd >= 0)
- 		close(vq->kickfd);
- 	vq->kickfd = file.fd;
+@@ -769,6 +769,8 @@ vhost_user_set_vring_kick(struct virtio_net *dev, struct VhostUserMsg *pmsg)
+ 		if (notify_ops->new_device(dev->vid) == 0)
+ 			dev->flags |= VIRTIO_DEV_RUNNING;
+ 	}
++
 +	return 0;
  }
  
  static void
-@@ -1172,14 +1173,19 @@ vhost_user_get_protocol_features(struct virtio_net *dev,
- 	msg->size = sizeof(msg->payload.u64);
+@@ -847,14 +849,19 @@ vhost_user_set_vring_enable(struct virtio_net *dev,
+ 	return 0;
  }
  
 -static void
@@ -83,17 +76,17 @@
  }
  
  static int
-@@ -1657,8 +1663,6 @@ vhost_user_msg_handler(int vid, int fd)
+@@ -1087,7 +1094,7 @@ vhost_user_msg_handler(int vid, int fd)
+ 		send_vhost_message(fd, &msg);
  		break;
  	case VHOST_USER_SET_FEATURES:
- 		ret = vhost_user_set_features(dev, msg.payload.u64);
--		if (ret)
--			return -1;
+-		vhost_user_set_features(dev, msg.payload.u64);
++		ret = vhost_user_set_features(dev, msg.payload.u64);
  		break;
  
  	case VHOST_USER_GET_PROTOCOL_FEATURES:
-@@ -1666,14 +1670,14 @@ vhost_user_msg_handler(int vid, int fd)
- 		send_vhost_reply(fd, &msg);
+@@ -1096,14 +1103,14 @@ vhost_user_msg_handler(int vid, int fd)
+ 		send_vhost_message(fd, &msg);
  		break;
  	case VHOST_USER_SET_PROTOCOL_FEATURES:
 -		vhost_user_set_protocol_features(dev, msg.payload.u64);
@@ -110,7 +103,7 @@
  		break;
  
  	case VHOST_USER_SET_MEM_TABLE:
-@@ -1681,8 +1685,9 @@ vhost_user_msg_handler(int vid, int fd)
+@@ -1111,8 +1118,9 @@ vhost_user_msg_handler(int vid, int fd)
  		break;
  
  	case VHOST_USER_SET_LOG_BASE:
@@ -118,74 +111,65 @@
 -
 +		ret = vhost_user_set_log_base(dev, &msg);
 +		if (ret)
-+			goto skip_to_reply;
++			break;
  		/* it needs a reply */
  		msg.size = sizeof(msg.payload.u64);
- 		send_vhost_reply(fd, &msg);
-@@ -1693,23 +1698,25 @@ vhost_user_msg_handler(int vid, int fd)
+ 		send_vhost_message(fd, &msg);
+@@ -1123,23 +1131,25 @@ vhost_user_msg_handler(int vid, int fd)
  		break;
  
  	case VHOST_USER_SET_VRING_NUM:
--		vhost_user_set_vring_num(dev, &msg);
-+		ret = vhost_user_set_vring_num(dev, &msg);
+-		vhost_user_set_vring_num(dev, &msg.payload.state);
++		ret = vhost_user_set_vring_num(dev, &msg.payload.state);
  		break;
  	case VHOST_USER_SET_VRING_ADDR:
--		vhost_user_set_vring_addr(&dev, &msg);
-+		ret = vhost_user_set_vring_addr(&dev, &msg);
+-		vhost_user_set_vring_addr(&dev, &msg.payload.addr);
++		ret = vhost_user_set_vring_addr(&dev, &msg.payload.addr);
  		break;
  	case VHOST_USER_SET_VRING_BASE:
--		vhost_user_set_vring_base(dev, &msg);
-+		ret = vhost_user_set_vring_base(dev, &msg);
+-		vhost_user_set_vring_base(dev, &msg.payload.state);
++		ret = vhost_user_set_vring_base(dev, &msg.payload.state);
  		break;
  
  	case VHOST_USER_GET_VRING_BASE:
--		vhost_user_get_vring_base(dev, &msg);
-+		ret = vhost_user_get_vring_base(dev, &msg);
+ 		ret = vhost_user_get_vring_base(dev, &msg.payload.state);
 +		if (ret)
-+			goto skip_to_reply;
++			break;
  		msg.size = sizeof(msg.payload.state);
- 		send_vhost_reply(fd, &msg);
+ 		send_vhost_message(fd, &msg);
  		break;
  
  	case VHOST_USER_SET_VRING_KICK:
--		vhost_user_set_vring_kick(&dev, &msg);
-+		ret = vhost_user_set_vring_kick(&dev, &msg);
+-		vhost_user_set_vring_kick(dev, &msg);
++		ret = vhost_user_set_vring_kick(dev, &msg);
  		break;
  	case VHOST_USER_SET_VRING_CALL:
  		vhost_user_set_vring_call(dev, &msg);
-@@ -1728,10 +1735,10 @@ vhost_user_msg_handler(int vid, int fd)
+@@ -1158,10 +1168,10 @@ vhost_user_msg_handler(int vid, int fd)
  		break;
  
  	case VHOST_USER_SET_VRING_ENABLE:
--		vhost_user_set_vring_enable(dev, &msg);
-+		ret = vhost_user_set_vring_enable(dev, &msg);
+-		vhost_user_set_vring_enable(dev, &msg.payload.state);
++		ret = vhost_user_set_vring_enable(dev, &msg.payload.state);
  		break;
  	case VHOST_USER_SEND_RARP:
 -		vhost_user_send_rarp(dev, &msg);
 +		ret = vhost_user_send_rarp(dev, &msg);
  		break;
  
- 	case VHOST_USER_NET_SET_MTU:
-@@ -1752,7 +1759,7 @@ vhost_user_msg_handler(int vid, int fd)
- 	}
+ 	default:
+@@ -1172,5 +1182,11 @@ vhost_user_msg_handler(int vid, int fd)
+ 	if (unlock_required)
+ 		vhost_user_unlock_all_queue_pairs(dev);
  
- skip_to_post_handle:
--	if (dev->extern_ops.post_msg_handle) {
-+	if (!ret && dev->extern_ops.post_msg_handle) {
- 		uint32_t need_reply;
- 
- 		ret = (*dev->extern_ops.post_msg_handle)(
-@@ -1772,6 +1779,10 @@ skip_to_reply:
- 		msg.payload.u64 = !!ret;
- 		msg.size = sizeof(msg.payload.u64);
- 		send_vhost_reply(fd, &msg);
-+	} else if (ret) {
++	if (ret) {
 +		RTE_LOG(ERR, VHOST_CONFIG,
 +			"vhost message handling failed.\n");
 +		return -1;
- 	}
- 
- 	if (!(dev->flags & VIRTIO_DEV_RUNNING) && virtio_is_ready(dev)) {
++	}
++
+ 	return 0;
+ }
 -- 
 2.18.0
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bonding: use evenly distributed default RSS RETA' has been queued to LTS release 16.11.9
  2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
                   ` (3 preceding siblings ...)
  2018-09-27  8:44 ` [dpdk-stable] patch 'vhost-user: drop connection on message handling failures' " Luca Boccassi
@ 2018-09-27  8:44 ` Luca Boccassi
  2018-09-27  8:44 ` [dpdk-stable] patch 'net/bonding: do not ignore RSS key on device config' " Luca Boccassi
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-09-27  8:44 UTC (permalink / raw)
  To: Igor Romanov; +Cc: Andrew Rybchenko, Chas Williams, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/27/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 79e22e7318fa1f79655765796140261dcfaefa55 Mon Sep 17 00:00:00 2001
From: Igor Romanov <igor.romanov@oktetlabs.ru>
Date: Wed, 29 Aug 2018 08:48:30 +0100
Subject: [PATCH] net/bonding: use evenly distributed default RSS RETA

[ upstream commit 617d1ac2fd22e9a82d305c0607853f4ee0f7277b ]

Default Redirection Table that is set in bonding driver is distributed
evenly over all Rx queues only within every RETA group (the first RETA
entries in every group are always start with zero). But in the most
drivers, default RETA is distributed over all Rx queues without sequence
resets in the beginning of a new group, which implies more balanced
per-core load.

Change the default RETA to be evenly distributed over all Rx queues
considering the whole table.

Fixes: 734ce47f71e0 ("bonding: support RSS dynamic configuration")

Signed-off-by: Igor Romanov <igor.romanov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Chas Williams <chas3@att.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 60f9e1ab11..1fe0c179a1 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -2381,7 +2381,9 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
 		for (i = 0; i < RTE_DIM(internals->reta_conf); i++) {
 			internals->reta_conf[i].mask = ~0LL;
 			for (j = 0; j < RTE_RETA_GROUP_SIZE; j++)
-				internals->reta_conf[i].reta[j] = j % dev->data->nb_rx_queues;
+				internals->reta_conf[i].reta[j] =
+						(i * RTE_RETA_GROUP_SIZE + j) %
+						dev->data->nb_rx_queues;
 		}
 	}
 
-- 
2.18.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-09-25 13:26:56.906789299 +0100
+++ 0006-net-bonding-use-evenly-distributed-default-RSS-RETA.patch	2018-09-25 13:26:56.779424704 +0100
@@ -1,8 +1,10 @@
-From 617d1ac2fd22e9a82d305c0607853f4ee0f7277b Mon Sep 17 00:00:00 2001
+From 79e22e7318fa1f79655765796140261dcfaefa55 Mon Sep 17 00:00:00 2001
 From: Igor Romanov <igor.romanov@oktetlabs.ru>
 Date: Wed, 29 Aug 2018 08:48:30 +0100
 Subject: [PATCH] net/bonding: use evenly distributed default RSS RETA
 
+[ upstream commit 617d1ac2fd22e9a82d305c0607853f4ee0f7277b ]
+
 Default Redirection Table that is set in bonding driver is distributed
 evenly over all Rx queues only within every RETA group (the first RETA
 entries in every group are always start with zero). But in the most
@@ -14,7 +16,6 @@
 considering the whole table.
 
 Fixes: 734ce47f71e0 ("bonding: support RSS dynamic configuration")
-Cc: stable@dpdk.org
 
 Signed-off-by: Igor Romanov <igor.romanov@oktetlabs.ru>
 Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
@@ -24,10 +25,10 @@
  1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
-index b84f322630..0f5ab09e38 100644
+index 60f9e1ab11..1fe0c179a1 100644
 --- a/drivers/net/bonding/rte_eth_bond_pmd.c
 +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
-@@ -3293,7 +3293,9 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
+@@ -2381,7 +2381,9 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
  		for (i = 0; i < RTE_DIM(internals->reta_conf); i++) {
  			internals->reta_conf[i].mask = ~0LL;
  			for (j = 0; j < RTE_RETA_GROUP_SIZE; j++)

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bonding: do not ignore RSS key on device config' has been queued to LTS release 16.11.9
  2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
                   ` (4 preceding siblings ...)
  2018-09-27  8:44 ` [dpdk-stable] patch 'net/bonding: use evenly distributed default RSS RETA' " Luca Boccassi
@ 2018-09-27  8:44 ` Luca Boccassi
  2018-09-27  8:44 ` [dpdk-stable] patch 'app/testpmd: optimize mbuf pool allocation' " Luca Boccassi
  2018-10-03 16:21 ` [dpdk-stable] patch 'acl: forbid rule with priority zero' " Luca Boccassi
  7 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-09-27  8:44 UTC (permalink / raw)
  To: Igor Romanov; +Cc: Andrew Rybchenko, Chas Williams, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/27/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From c1fea1e942b08365d5279ba2df428a4bf11cd17b Mon Sep 17 00:00:00 2001
From: Igor Romanov <igor.romanov@oktetlabs.ru>
Date: Wed, 29 Aug 2018 08:51:24 +0100
Subject: [PATCH] net/bonding: do not ignore RSS key on device config

[ upstream commit 83cf204a982918fd56b15f9d458d1dfb1e724b5f ]

Bonding driver ignores the value of RSS key (that is set in the port RSS
configuration) in bond_ethdev_configure(). So the only way to set
non-default RSS key is by using rss_hash_update(). This is not an
expected behaviour.

Make the bond_ethdev_configure() set default RSS key only if
requested key is set to NULL.

Fixes: 734ce47f71e0 ("bonding: support RSS dynamic configuration")

Signed-off-by: Igor Romanov <igor.romanov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Chas Williams <chas3@att.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 30 +++++++++++++++++++-------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 1fe0c179a1..c672f0560b 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -1325,6 +1325,9 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
 	int errval;
 	uint16_t q_id;
 
+	struct bond_dev_private *internals = (struct bond_dev_private *)
+		bonded_eth_dev->data->dev_private;
+
 	/* Stop slave */
 	rte_eth_dev_stop(slave_eth_dev->data->port_id);
 
@@ -1334,12 +1337,11 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
 
 	/* If RSS is enabled for bonding, try to enable it for slaves  */
 	if (bonded_eth_dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) {
-		if (bonded_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len
-				!= 0) {
+		if (internals->rss_key_len != 0) {
 			slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len =
-					bonded_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len;
+					internals->rss_key_len;
 			slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key =
-					bonded_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key;
+					internals->rss_key;
 		} else {
 			slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key = NULL;
 		}
@@ -2372,11 +2374,23 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
 
 	unsigned i, j;
 
-	/* If RSS is enabled, fill table and key with default values */
+	/*
+	 * If RSS is enabled, fill table with default values and
+	 * set key to the the value specified in port RSS configuration.
+	 * Fall back to default RSS key if the key is not specified
+	 */
 	if (dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS) {
-		dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key = internals->rss_key;
-		dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len = 0;
-		memcpy(internals->rss_key, default_rss_key, 40);
+		if (dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key != NULL) {
+			internals->rss_key_len =
+				dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len;
+			memcpy(internals->rss_key,
+			       dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key,
+			       internals->rss_key_len);
+		} else {
+			internals->rss_key_len = sizeof(default_rss_key);
+			memcpy(internals->rss_key, default_rss_key,
+			       internals->rss_key_len);
+		}
 
 		for (i = 0; i < RTE_DIM(internals->reta_conf); i++) {
 			internals->reta_conf[i].mask = ~0LL;
-- 
2.18.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-09-25 13:26:56.926173608 +0100
+++ 0007-net-bonding-do-not-ignore-RSS-key-on-device-config.patch	2018-09-25 13:26:56.783424705 +0100
@@ -1,8 +1,10 @@
-From 83cf204a982918fd56b15f9d458d1dfb1e724b5f Mon Sep 17 00:00:00 2001
+From c1fea1e942b08365d5279ba2df428a4bf11cd17b Mon Sep 17 00:00:00 2001
 From: Igor Romanov <igor.romanov@oktetlabs.ru>
 Date: Wed, 29 Aug 2018 08:51:24 +0100
 Subject: [PATCH] net/bonding: do not ignore RSS key on device config
 
+[ upstream commit 83cf204a982918fd56b15f9d458d1dfb1e724b5f ]
+
 Bonding driver ignores the value of RSS key (that is set in the port RSS
 configuration) in bond_ethdev_configure(). So the only way to set
 non-default RSS key is by using rss_hash_update(). This is not an
@@ -12,20 +14,29 @@
 requested key is set to NULL.
 
 Fixes: 734ce47f71e0 ("bonding: support RSS dynamic configuration")
-Cc: stable@dpdk.org
 
 Signed-off-by: Igor Romanov <igor.romanov@oktetlabs.ru>
 Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
 Acked-by: Chas Williams <chas3@att.com>
 ---
- drivers/net/bonding/rte_eth_bond_pmd.c | 27 ++++++++++++++++++--------
- 1 file changed, 19 insertions(+), 8 deletions(-)
+ drivers/net/bonding/rte_eth_bond_pmd.c | 30 +++++++++++++++++++-------
+ 1 file changed, 22 insertions(+), 8 deletions(-)
 
 diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
-index 0f5ab09e38..7814258f23 100644
+index 1fe0c179a1..c672f0560b 100644
 --- a/drivers/net/bonding/rte_eth_bond_pmd.c
 +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
-@@ -1778,12 +1778,11 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
+@@ -1325,6 +1325,9 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
+ 	int errval;
+ 	uint16_t q_id;
+ 
++	struct bond_dev_private *internals = (struct bond_dev_private *)
++		bonded_eth_dev->data->dev_private;
++
+ 	/* Stop slave */
+ 	rte_eth_dev_stop(slave_eth_dev->data->port_id);
+ 
+@@ -1334,12 +1337,11 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
  
  	/* If RSS is enabled for bonding, try to enable it for slaves  */
  	if (bonded_eth_dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) {
@@ -41,7 +52,7 @@
  		} else {
  			slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key = NULL;
  		}
-@@ -3284,11 +3283,23 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
+@@ -2372,11 +2374,23 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
  
  	unsigned i, j;
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'app/testpmd: optimize mbuf pool allocation' has been queued to LTS release 16.11.9
  2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
                   ` (5 preceding siblings ...)
  2018-09-27  8:44 ` [dpdk-stable] patch 'net/bonding: do not ignore RSS key on device config' " Luca Boccassi
@ 2018-09-27  8:44 ` Luca Boccassi
  2018-10-03 16:21 ` [dpdk-stable] patch 'acl: forbid rule with priority zero' " Luca Boccassi
  7 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-09-27  8:44 UTC (permalink / raw)
  To: Phil Yang; +Cc: Gavin Hu, Bernard Iremonger, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/27/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From b2e58e851630e7fd9b2959909e33773812e5f983 Mon Sep 17 00:00:00 2001
From: Phil Yang <phil.yang@arm.com>
Date: Wed, 12 Sep 2018 09:54:26 +0800
Subject: [PATCH] app/testpmd: optimize mbuf pool allocation

[ upstream commit dbfb8ec7094c7115c6d620929de2aedfc9e440aa ]

By default, testpmd will create membuf pool for all NUMA nodes and
ignore EAL configuration.

Count the number of available NUMA according to EAL core mask or core
list configuration. Optimized by only creating membuf pool for those
nodes.

Fixes: c9cafcc82de8 ("app/testpmd: fix mempool creation by socket id")

Signed-off-by: Phil Yang <phil.yang@arm.com>
Acked-by: Gavin Hu <gavin.hu@arm.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
 app/test-pmd/testpmd.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index e48cf8a1ab..a6d80f35ca 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -358,14 +358,14 @@ set_default_fwd_lcores_config(void)
 
 	nb_lc = 0;
 	for (i = 0; i < RTE_MAX_LCORE; i++) {
+		if (!rte_lcore_is_enabled(i))
+			continue;
 		sock_num = rte_lcore_to_socket_id(i) + 1;
 		if (sock_num > max_socket) {
 			if (sock_num > RTE_MAX_NUMA_NODES)
 				rte_exit(EXIT_FAILURE, "Total sockets greater than %u\n", RTE_MAX_NUMA_NODES);
 			max_socket = sock_num;
 		}
-		if (!rte_lcore_is_enabled(i))
-			continue;
 		if (i == rte_get_master_lcore())
 			continue;
 		fwd_lcores_cpuids[nb_lc++] = i;
-- 
2.18.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-09-25 13:26:56.945792405 +0100
+++ 0008-app-testpmd-optimize-mbuf-pool-allocation.patch	2018-09-25 13:26:56.787424707 +0100
@@ -1,8 +1,10 @@
-From dbfb8ec7094c7115c6d620929de2aedfc9e440aa Mon Sep 17 00:00:00 2001
+From b2e58e851630e7fd9b2959909e33773812e5f983 Mon Sep 17 00:00:00 2001
 From: Phil Yang <phil.yang@arm.com>
 Date: Wed, 12 Sep 2018 09:54:26 +0800
 Subject: [PATCH] app/testpmd: optimize mbuf pool allocation
 
+[ upstream commit dbfb8ec7094c7115c6d620929de2aedfc9e440aa ]
+
 By default, testpmd will create membuf pool for all NUMA nodes and
 ignore EAL configuration.
 
@@ -11,7 +13,6 @@
 nodes.
 
 Fixes: c9cafcc82de8 ("app/testpmd: fix mempool creation by socket id")
-Cc: stable@dpdk.org
 
 Signed-off-by: Phil Yang <phil.yang@arm.com>
 Acked-by: Gavin Hu <gavin.hu@arm.com>
@@ -21,21 +22,20 @@
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
-index 571ecb4ac8..001f0e5529 100644
+index e48cf8a1ab..a6d80f35ca 100644
 --- a/app/test-pmd/testpmd.c
 +++ b/app/test-pmd/testpmd.c
-@@ -475,6 +475,8 @@ set_default_fwd_lcores_config(void)
+@@ -358,14 +358,14 @@ set_default_fwd_lcores_config(void)
  
  	nb_lc = 0;
  	for (i = 0; i < RTE_MAX_LCORE; i++) {
 +		if (!rte_lcore_is_enabled(i))
 +			continue;
- 		sock_num = rte_lcore_to_socket_id(i);
- 		if (new_socket_id(sock_num)) {
- 			if (num_sockets >= RTE_MAX_NUMA_NODES) {
-@@ -484,8 +486,6 @@ set_default_fwd_lcores_config(void)
- 			}
- 			socket_ids[num_sockets++] = sock_num;
+ 		sock_num = rte_lcore_to_socket_id(i) + 1;
+ 		if (sock_num > max_socket) {
+ 			if (sock_num > RTE_MAX_NUMA_NODES)
+ 				rte_exit(EXIT_FAILURE, "Total sockets greater than %u\n", RTE_MAX_NUMA_NODES);
+ 			max_socket = sock_num;
  		}
 -		if (!rte_lcore_is_enabled(i))
 -			continue;

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'acl: forbid rule with priority zero' has been queued to LTS release 16.11.9
  2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
                   ` (6 preceding siblings ...)
  2018-09-27  8:44 ` [dpdk-stable] patch 'app/testpmd: optimize mbuf pool allocation' " Luca Boccassi
@ 2018-10-03 16:21 ` Luca Boccassi
  2018-10-03 16:52   ` [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' " Luca Boccassi
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
  7 siblings, 2 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-03 16:21 UTC (permalink / raw)
  To: Konstantin Ananyev; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/05/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 255cbcecfa25b39efb7982e28642ec5c51278f6c Mon Sep 17 00:00:00 2001
From: Konstantin Ananyev <konstantin.ananyev@intel.com>
Date: Fri, 24 Aug 2018 17:47:06 +0100
Subject: [PATCH] acl: forbid rule with priority zero

[ upstream commit 53945477981cf75cf8d66e67a098b486e37df167 ]

If user specifies priority=0 for some of ACL rules
that can cause rte_acl_classify to return wrong results.
The reason is that priority zero is used internally for no-match nodes.
See more details at: https://bugs.dpdk.org/show_bug.cgi?id=79.
The simplest way to overcome the issue is just not allow zero
to be a valid priority for the rule.

Fixes: dc276b5780c2 ("acl: new library")

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 app/test/test_acl.h      | 18 ++++++++++++------
 lib/librte_acl/rte_acl.h |  2 +-
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/app/test/test_acl.h b/app/test/test_acl.h
index 421f3109b3..6f5c485ad9 100644
--- a/app/test/test_acl.h
+++ b/app/test/test_acl.h
@@ -109,34 +109,40 @@ enum {
 struct rte_acl_ipv4vlan_rule invalid_layout_rules[] = {
 		/* test src and dst address */
 		{
-				.data = {.userdata = 1, .category_mask = 1},
+				.data = {.userdata = 1, .category_mask = 1,
+					.priority = 1},
 				.src_addr = IPv4(10,0,0,0),
 				.src_mask_len = 24,
 		},
 		{
-				.data = {.userdata = 2, .category_mask = 1},
+				.data = {.userdata = 2, .category_mask = 1,
+					.priority = 1},
 				.dst_addr = IPv4(10,0,0,0),
 				.dst_mask_len = 24,
 		},
 		/* test src and dst ports */
 		{
-				.data = {.userdata = 3, .category_mask = 1},
+				.data = {.userdata = 3, .category_mask = 1,
+					.priority = 1},
 				.dst_port_low = 100,
 				.dst_port_high = 100,
 		},
 		{
-				.data = {.userdata = 4, .category_mask = 1},
+				.data = {.userdata = 4, .category_mask = 1,
+					.priority = 1},
 				.src_port_low = 100,
 				.src_port_high = 100,
 		},
 		/* test proto */
 		{
-				.data = {.userdata = 5, .category_mask = 1},
+				.data = {.userdata = 5, .category_mask = 1,
+					.priority = 1},
 				.proto = 0xf,
 				.proto_mask = 0xf
 		},
 		{
-				.data = {.userdata = 6, .category_mask = 1},
+				.data = {.userdata = 6, .category_mask = 1,
+					.priority = 1},
 				.dst_port_low = 0xf,
 				.dst_port_high = 0xf,
 		}
diff --git a/lib/librte_acl/rte_acl.h b/lib/librte_acl/rte_acl.h
index caa91f7eab..39686d51f3 100644
--- a/lib/librte_acl/rte_acl.h
+++ b/lib/librte_acl/rte_acl.h
@@ -117,7 +117,7 @@ enum {
 	RTE_ACL_TYPE_SHIFT = 29,
 	RTE_ACL_MAX_INDEX = RTE_LEN2MASK(RTE_ACL_TYPE_SHIFT, uint32_t),
 	RTE_ACL_MAX_PRIORITY = RTE_ACL_MAX_INDEX,
-	RTE_ACL_MIN_PRIORITY = 0,
+	RTE_ACL_MIN_PRIORITY = 1,
 };
 
 #define	RTE_ACL_INVALID_USERDATA	0
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-03 17:20:56.869131226 +0100
+++ 0001-acl-forbid-rule-with-priority-zero.patch	2018-10-03 17:20:56.850109710 +0100
@@ -1,8 +1,10 @@
-From 53945477981cf75cf8d66e67a098b486e37df167 Mon Sep 17 00:00:00 2001
+From 255cbcecfa25b39efb7982e28642ec5c51278f6c Mon Sep 17 00:00:00 2001
 From: Konstantin Ananyev <konstantin.ananyev@intel.com>
 Date: Fri, 24 Aug 2018 17:47:06 +0100
 Subject: [PATCH] acl: forbid rule with priority zero
 
+[ upstream commit 53945477981cf75cf8d66e67a098b486e37df167 ]
+
 If user specifies priority=0 for some of ACL rules
 that can cause rte_acl_classify to return wrong results.
 The reason is that priority zero is used internally for no-match nodes.
@@ -11,32 +13,18 @@
 to be a valid priority for the rule.
 
 Fixes: dc276b5780c2 ("acl: new library")
-Cc: stable@dpdk.org
 
 Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
 ---
+ app/test/test_acl.h      | 18 ++++++++++++------
  lib/librte_acl/rte_acl.h |  2 +-
- test/test/test_acl.h     | 18 ++++++++++++------
  2 files changed, 13 insertions(+), 7 deletions(-)
 
-diff --git a/lib/librte_acl/rte_acl.h b/lib/librte_acl/rte_acl.h
-index 34c3b9c6a3..aa22e70c6e 100644
---- a/lib/librte_acl/rte_acl.h
-+++ b/lib/librte_acl/rte_acl.h
-@@ -88,7 +88,7 @@ enum {
- 	RTE_ACL_TYPE_SHIFT = 29,
- 	RTE_ACL_MAX_INDEX = RTE_LEN2MASK(RTE_ACL_TYPE_SHIFT, uint32_t),
- 	RTE_ACL_MAX_PRIORITY = RTE_ACL_MAX_INDEX,
--	RTE_ACL_MIN_PRIORITY = 0,
-+	RTE_ACL_MIN_PRIORITY = 1,
- };
- 
- #define	RTE_ACL_MASKLEN_TO_BITMASK(v, s)	\
-diff --git a/test/test/test_acl.h b/test/test/test_acl.h
-index c4811c8f5f..bbb0447a89 100644
---- a/test/test/test_acl.h
-+++ b/test/test/test_acl.h
-@@ -80,34 +80,40 @@ enum {
+diff --git a/app/test/test_acl.h b/app/test/test_acl.h
+index 421f3109b3..6f5c485ad9 100644
+--- a/app/test/test_acl.h
++++ b/app/test/test_acl.h
+@@ -109,34 +109,40 @@ enum {
  struct rte_acl_ipv4vlan_rule invalid_layout_rules[] = {
  		/* test src and dst address */
  		{
@@ -83,6 +71,19 @@
  				.dst_port_low = 0xf,
  				.dst_port_high = 0xf,
  		}
+diff --git a/lib/librte_acl/rte_acl.h b/lib/librte_acl/rte_acl.h
+index caa91f7eab..39686d51f3 100644
+--- a/lib/librte_acl/rte_acl.h
++++ b/lib/librte_acl/rte_acl.h
+@@ -117,7 +117,7 @@ enum {
+ 	RTE_ACL_TYPE_SHIFT = 29,
+ 	RTE_ACL_MAX_INDEX = RTE_LEN2MASK(RTE_ACL_TYPE_SHIFT, uint32_t),
+ 	RTE_ACL_MAX_PRIORITY = RTE_ACL_MAX_INDEX,
+-	RTE_ACL_MIN_PRIORITY = 0,
++	RTE_ACL_MIN_PRIORITY = 1,
+ };
+ 
+ #define	RTE_ACL_INVALID_USERDATA	0
 -- 
 2.19.0
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' has been queued to LTS release 16.11.9
  2018-10-03 16:21 ` [dpdk-stable] patch 'acl: forbid rule with priority zero' " Luca Boccassi
@ 2018-10-03 16:52   ` Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'ethdev: fix doxygen comment to be with structure' " Luca Boccassi
                       ` (4 more replies)
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
  1 sibling, 5 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-03 16:52 UTC (permalink / raw)
  To: Alejandro Lucero; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/05/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 2a0d7bd97b6fdda48918015f4a6a28772b9991ca Mon Sep 17 00:00:00 2001
From: Alejandro Lucero <alejandro.lucero@netronome.com>
Date: Thu, 6 Sep 2018 17:02:56 +0100
Subject: [PATCH] net/nfp: fix mbuf flags with checksum good

[ upstream commit 0962b51d3c494b30602897731ef9d598e29b4f3b ]

If checksum offload enabled and hardware reports checksum as good,
update mbuf ol_flags with proper *_CKSUM_GOOD bits.

Fixes: b812daadad0d ("nfp: add Rx and Tx")

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
---
 drivers/net/nfp/nfp_net.c     | 15 +++++++--------
 drivers/net/nfp/nfp_net_pmd.h |  2 ++
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
index 85fd6bda05..9548d58af4 100644
--- a/drivers/net/nfp/nfp_net.c
+++ b/drivers/net/nfp/nfp_net.c
@@ -1567,21 +1567,20 @@ nfp_net_rx_cksum(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd,
 		return;
 
 	/* If IPv4 and IP checksum error, fail */
-	if ((rxd->rxd.flags & PCIE_DESC_RX_IP4_CSUM) &&
-	    !(rxd->rxd.flags & PCIE_DESC_RX_IP4_CSUM_OK))
+	if (unlikely((rxd->rxd.flags & PCIE_DESC_RX_IP4_CSUM) &&
+	    !(rxd->rxd.flags & PCIE_DESC_RX_IP4_CSUM_OK)))
 		mb->ol_flags |= PKT_RX_IP_CKSUM_BAD;
+	else
+		mb->ol_flags |= PKT_RX_IP_CKSUM_GOOD;
 
 	/* If neither UDP nor TCP return */
 	if (!(rxd->rxd.flags & PCIE_DESC_RX_TCP_CSUM) &&
 	    !(rxd->rxd.flags & PCIE_DESC_RX_UDP_CSUM))
 		return;
 
-	if ((rxd->rxd.flags & PCIE_DESC_RX_TCP_CSUM) &&
-	    !(rxd->rxd.flags & PCIE_DESC_RX_TCP_CSUM_OK))
-		mb->ol_flags |= PKT_RX_L4_CKSUM_BAD;
-
-	if ((rxd->rxd.flags & PCIE_DESC_RX_UDP_CSUM) &&
-	    !(rxd->rxd.flags & PCIE_DESC_RX_UDP_CSUM_OK))
+	if (likely(rxd->rxd.flags & PCIE_DESC_RX_L4_CSUM_OK))
+		mb->ol_flags |= PKT_RX_L4_CKSUM_GOOD;
+	else
 		mb->ol_flags |= PKT_RX_L4_CKSUM_BAD;
 }
 
diff --git a/drivers/net/nfp/nfp_net_pmd.h b/drivers/net/nfp/nfp_net_pmd.h
index c1809720fb..ce475e39da 100644
--- a/drivers/net/nfp/nfp_net_pmd.h
+++ b/drivers/net/nfp/nfp_net_pmd.h
@@ -279,6 +279,8 @@ struct nfp_net_txq {
 #define PCIE_DESC_RX_UDP_CSUM_OK        (1 <<  1)
 #define PCIE_DESC_RX_VLAN               (1 <<  0)
 
+#define PCIE_DESC_RX_L4_CSUM_OK         (PCIE_DESC_RX_TCP_CSUM_OK | \
+					 PCIE_DESC_RX_UDP_CSUM_OK)
 struct nfp_net_rx_desc {
 	union {
 		/* Freelist descriptor */
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-03 17:44:54.597757237 +0100
+++ 0001-net-nfp-fix-mbuf-flags-with-checksum-good.patch	2018-10-03 17:44:54.562534580 +0100
@@ -1,13 +1,14 @@
-From 0962b51d3c494b30602897731ef9d598e29b4f3b Mon Sep 17 00:00:00 2001
+From 2a0d7bd97b6fdda48918015f4a6a28772b9991ca Mon Sep 17 00:00:00 2001
 From: Alejandro Lucero <alejandro.lucero@netronome.com>
 Date: Thu, 6 Sep 2018 17:02:56 +0100
 Subject: [PATCH] net/nfp: fix mbuf flags with checksum good
 
+[ upstream commit 0962b51d3c494b30602897731ef9d598e29b4f3b ]
+
 If checksum offload enabled and hardware reports checksum as good,
 update mbuf ol_flags with proper *_CKSUM_GOOD bits.
 
 Fixes: b812daadad0d ("nfp: add Rx and Tx")
-Cc: stable@dpdk.org
 
 Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
 ---
@@ -16,10 +17,10 @@
  2 files changed, 9 insertions(+), 8 deletions(-)
 
 diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
-index 168088c6de..170b5d611f 100644
+index 85fd6bda05..9548d58af4 100644
 --- a/drivers/net/nfp/nfp_net.c
 +++ b/drivers/net/nfp/nfp_net.c
-@@ -1779,21 +1779,20 @@ nfp_net_rx_cksum(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd,
+@@ -1567,21 +1567,20 @@ nfp_net_rx_cksum(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd,
  		return;
  
  	/* If IPv4 and IP checksum error, fail */
@@ -49,10 +50,10 @@
  }
  
 diff --git a/drivers/net/nfp/nfp_net_pmd.h b/drivers/net/nfp/nfp_net_pmd.h
-index c1b044eea4..b01036df2f 100644
+index c1809720fb..ce475e39da 100644
 --- a/drivers/net/nfp/nfp_net_pmd.h
 +++ b/drivers/net/nfp/nfp_net_pmd.h
-@@ -293,6 +293,8 @@ struct nfp_net_txq {
+@@ -279,6 +279,8 @@ struct nfp_net_txq {
  #define PCIE_DESC_RX_UDP_CSUM_OK        (1 <<  1)
  #define PCIE_DESC_RX_VLAN               (1 <<  0)
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'ethdev: fix doxygen comment to be with structure' has been queued to LTS release 16.11.9
  2018-10-03 16:52   ` [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' " Luca Boccassi
@ 2018-10-03 16:52     ` Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'net/virtio: add missing supported features' " Luca Boccassi
                       ` (3 subsequent siblings)
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-03 16:52 UTC (permalink / raw)
  To: Paul M Stillwell Jr; +Cc: Thomas Monjalon, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/05/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 6a8eae9c064500794ed23ba3bd7573aad24dc443 Mon Sep 17 00:00:00 2001
From: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Date: Tue, 25 Sep 2018 15:31:09 +0100
Subject: [PATCH] ethdev: fix doxygen comment to be with structure

[ upstream commit cb0ad8fa267010e5558c0ffe89a3b3229b1e9b8d ]

The doxygen comment describing the rte_eth_dev_info structure
was separated from the structure itself so move the comment
back to be with the structure.

Fixes: 7238e63bce52 ("ethdev: add support for device offload capabilities")

Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>
---
 lib/librte_ether/rte_ethdev.h | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 981e05770f..41839bbe03 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -841,12 +841,6 @@ struct rte_eth_conf {
 	struct rte_intr_conf intr_conf; /**< Interrupt mode configuration. */
 };
 
-/**
- * A structure used to retrieve the contextual information of
- * an Ethernet device, such as the controlling driver of the device,
- * its PCI context, etc...
- */
-
 /**
  * RX offload capabilities of a device.
  */
@@ -878,6 +872,12 @@ struct rte_eth_conf {
 /**
  * Ethernet device information
  */
+
+/**
+ * A structure used to retrieve the contextual information of
+ * an Ethernet device, such as the controlling driver of the
+ * device, etc...
+ */
 struct rte_eth_dev_info {
 	struct rte_pci_device *pci_dev; /**< Device PCI information. */
 	const char *driver_name; /**< Device Driver name. */
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-03 17:44:54.618993224 +0100
+++ 0002-ethdev-fix-doxygen-comment-to-be-with-structure.patch	2018-10-03 17:44:54.566534589 +0100
@@ -1,26 +1,27 @@
-From cb0ad8fa267010e5558c0ffe89a3b3229b1e9b8d Mon Sep 17 00:00:00 2001
+From 6a8eae9c064500794ed23ba3bd7573aad24dc443 Mon Sep 17 00:00:00 2001
 From: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
 Date: Tue, 25 Sep 2018 15:31:09 +0100
 Subject: [PATCH] ethdev: fix doxygen comment to be with structure
 
+[ upstream commit cb0ad8fa267010e5558c0ffe89a3b3229b1e9b8d ]
+
 The doxygen comment describing the rte_eth_dev_info structure
 was separated from the structure itself so move the comment
 back to be with the structure.
 
 Fixes: 7238e63bce52 ("ethdev: add support for device offload capabilities")
-Cc: stable@dpdk.org
 
 Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
 Acked-by: Thomas Monjalon <thomas@monjalon.net>
 ---
- lib/librte_ethdev/rte_ethdev.h | 12 ++++++------
+ lib/librte_ether/rte_ethdev.h | 12 ++++++------
  1 file changed, 6 insertions(+), 6 deletions(-)
 
-diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
-index 44b4fb33fd..012577b0ab 100644
---- a/lib/librte_ethdev/rte_ethdev.h
-+++ b/lib/librte_ethdev/rte_ethdev.h
-@@ -869,12 +869,6 @@ struct rte_eth_conf {
+diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
+index 981e05770f..41839bbe03 100644
+--- a/lib/librte_ether/rte_ethdev.h
++++ b/lib/librte_ether/rte_ethdev.h
+@@ -841,12 +841,6 @@ struct rte_eth_conf {
  	struct rte_intr_conf intr_conf; /**< Interrupt mode configuration. */
  };
  
@@ -33,7 +34,7 @@
  /**
   * RX offload capabilities of a device.
   */
-@@ -1005,6 +999,12 @@ struct rte_eth_switch_info {
+@@ -878,6 +872,12 @@ struct rte_eth_conf {
  /**
   * Ethernet device information
   */
@@ -44,7 +45,7 @@
 + * device, etc...
 + */
  struct rte_eth_dev_info {
- 	struct rte_device *device; /** Generic device information */
+ 	struct rte_pci_device *pci_dev; /**< Device PCI information. */
  	const char *driver_name; /**< Device Driver name. */
 -- 
 2.19.0

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/virtio: add missing supported features' has been queued to LTS release 16.11.9
  2018-10-03 16:52   ` [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' " Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'ethdev: fix doxygen comment to be with structure' " Luca Boccassi
@ 2018-10-03 16:52     ` Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'vhost: fix corner case for enqueue operation' " Luca Boccassi
                       ` (2 subsequent siblings)
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-03 16:52 UTC (permalink / raw)
  To: Tiwei Bie; +Cc: Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/05/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 02be74f19bd0dbd4226a1e028731755c3e914f28 Mon Sep 17 00:00:00 2001
From: Tiwei Bie <tiwei.bie@intel.com>
Date: Fri, 21 Sep 2018 20:52:43 +0800
Subject: [PATCH] net/virtio: add missing supported features

[ upstream commit 66908eff12627c3dd09b0e1f3801d57b425f2e23 ]

The virtio features VIRTIO_NET_F_CSUM, VIRTIO_NET_F_HOST_TSO4
and VIRTIO_NET_F_HOST_TSO6 are supported by the virtio PMD.
But they are missing in the supported feature set. And since
below commit:

commit 4174a7b59d05 ("net/virtio: improve Tx offload features negotiation")

Virtio PMD will announce the Tx offloading capabilities based
on the features read from the device. And virtio-user won't
report the features which are not in virtio-PMD's supported
feature set. So since that commit, virtio-user won't announce
the DEV_TX_OFFLOAD_UDP_CKSUM, DEV_TX_OFFLOAD_TCP_CKSUM and
DEV_TX_OFFLOAD_TCP_TSO offloading capabilities even if the
vhost backend supports them.

This patch adds these missing features, and virtio-user will
report them if the backend supports them.

Fixes: 142678d42959 ("net/virtio-user: fix wrongly get/set features")

Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 drivers/net/virtio/virtio_ethdev.h | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h
index c491ec1b02..5122792a3a 100644
--- a/drivers/net/virtio/virtio_ethdev.h
+++ b/drivers/net/virtio/virtio_ethdev.h
@@ -74,7 +74,11 @@
 	(VIRTIO_PMD_DEFAULT_GUEST_FEATURES |	\
 	 1u << VIRTIO_NET_F_GUEST_CSUM	   |	\
 	 1u << VIRTIO_NET_F_GUEST_TSO4     |	\
-	 1u << VIRTIO_NET_F_GUEST_TSO6)
+	 1u << VIRTIO_NET_F_GUEST_TSO6     |	\
+	 1u << VIRTIO_NET_F_CSUM           |	\
+	 1u << VIRTIO_NET_F_HOST_TSO4      |	\
+	 1u << VIRTIO_NET_F_HOST_TSO6)
+
 /*
  * CQ function prototype
  */
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-03 17:44:54.640397853 +0100
+++ 0003-net-virtio-add-missing-supported-features.patch	2018-10-03 17:44:54.566534589 +0100
@@ -1,8 +1,10 @@
-From 66908eff12627c3dd09b0e1f3801d57b425f2e23 Mon Sep 17 00:00:00 2001
+From 02be74f19bd0dbd4226a1e028731755c3e914f28 Mon Sep 17 00:00:00 2001
 From: Tiwei Bie <tiwei.bie@intel.com>
 Date: Fri, 21 Sep 2018 20:52:43 +0800
 Subject: [PATCH] net/virtio: add missing supported features
 
+[ upstream commit 66908eff12627c3dd09b0e1f3801d57b425f2e23 ]
+
 The virtio features VIRTIO_NET_F_CSUM, VIRTIO_NET_F_HOST_TSO4
 and VIRTIO_NET_F_HOST_TSO6 are supported by the virtio PMD.
 But they are missing in the supported feature set. And since
@@ -22,19 +24,18 @@
 report them if the backend supports them.
 
 Fixes: 142678d42959 ("net/virtio-user: fix wrongly get/set features")
-Cc: stable@dpdk.org
 
 Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
 ---
- drivers/net/virtio/virtio_ethdev.h | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
+ drivers/net/virtio/virtio_ethdev.h | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h
-index b726ad1084..e0f80e5a48 100644
+index c491ec1b02..5122792a3a 100644
 --- a/drivers/net/virtio/virtio_ethdev.h
 +++ b/drivers/net/virtio/virtio_ethdev.h
-@@ -40,7 +40,10 @@
+@@ -74,7 +74,11 @@
  	(VIRTIO_PMD_DEFAULT_GUEST_FEATURES |	\
  	 1u << VIRTIO_NET_F_GUEST_CSUM	   |	\
  	 1u << VIRTIO_NET_F_GUEST_TSO4     |	\
@@ -43,9 +44,10 @@
 +	 1u << VIRTIO_NET_F_CSUM           |	\
 +	 1u << VIRTIO_NET_F_HOST_TSO4      |	\
 +	 1u << VIRTIO_NET_F_HOST_TSO6)
- 
++
  /*
   * CQ function prototype
+  */
 -- 
 2.19.0
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'vhost: fix corner case for enqueue operation' has been queued to LTS release 16.11.9
  2018-10-03 16:52   ` [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' " Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'ethdev: fix doxygen comment to be with structure' " Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'net/virtio: add missing supported features' " Luca Boccassi
@ 2018-10-03 16:52     ` Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'net/bonding: stop and deactivate slaves on stop' " Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'test/crypto: fix number of queue pairs' " Luca Boccassi
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-03 16:52 UTC (permalink / raw)
  To: Jiayu Hu; +Cc: Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/05/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 05cdc11afb96e78f2d2f31e129a7e6ac59e4bc99 Mon Sep 17 00:00:00 2001
From: Jiayu Hu <jiayu.hu@intel.com>
Date: Mon, 17 Sep 2018 11:54:42 +0800
Subject: [PATCH] vhost: fix corner case for enqueue operation

[ upstream commit 729199397f9fc4ba265e94d492c792244e8c364b ]

When performing enqueue operations on the split and packed rings,
if the reserved buffer length from the descriptor table exceeds
65535, the returned length by fill_vec_buf_split/_packed()
overflows. This patch is to avoid this corner case.

Fixes: f689586bc060 ("vhost: shadow used ring update")
Fixes: fd68b4739d2c ("vhost: use buffer vectors in dequeue path")
Fixes: 2f3225a7d69b ("vhost: add vector filling support for packed ring")
Fixes: 37f5e79a271d ("vhost: add shadow used ring support for packed rings")
Fixes: a922401f35cc ("vhost: add Rx support for packed ring")
Fixes: ae999ce49dcb ("vhost: add Tx support for packed ring")

Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 lib/librte_vhost/virtio_net.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
index cfd69ceac1..eaee1c78f1 100644
--- a/lib/librte_vhost/virtio_net.c
+++ b/lib/librte_vhost/virtio_net.c
@@ -272,7 +272,7 @@ flush_shadow_used_ring(struct virtio_net *dev, struct vhost_virtqueue *vq)
 
 static inline void __attribute__((always_inline))
 update_shadow_used_ring(struct vhost_virtqueue *vq,
-			 uint16_t desc_idx, uint16_t len)
+			 uint16_t desc_idx, uint32_t len)
 {
 	uint16_t i = vq->shadow_used_idx++;
 
@@ -610,7 +610,7 @@ static inline int __attribute__((always_inline))
 fill_vec_buf(struct virtio_net *dev, struct vhost_virtqueue *vq,
 			 uint32_t avail_idx, uint32_t *vec_idx,
 			 struct buf_vector *buf_vec, uint16_t *desc_chain_head,
-			 uint16_t *desc_chain_len)
+			 uint32_t *desc_chain_len)
 {
 	uint16_t idx = vq->avail->ring[avail_idx & (vq->size - 1)];
 	uint32_t vec_id = *vec_idx;
@@ -684,7 +684,7 @@ reserve_avail_buf_mergeable(struct virtio_net *dev, struct vhost_virtqueue *vq,
 	uint16_t tries = 0;
 
 	uint16_t head_idx = 0;
-	uint16_t len = 0;
+	uint32_t len = 0;
 
 	*num_buffers = 0;
 	cur_idx  = vq->last_avail_idx;
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-03 17:44:54.657796019 +0100
+++ 0004-vhost-fix-corner-case-for-enqueue-operation.patch	2018-10-03 17:44:54.570534601 +0100
@@ -1,8 +1,10 @@
-From 729199397f9fc4ba265e94d492c792244e8c364b Mon Sep 17 00:00:00 2001
+From 05cdc11afb96e78f2d2f31e129a7e6ac59e4bc99 Mon Sep 17 00:00:00 2001
 From: Jiayu Hu <jiayu.hu@intel.com>
 Date: Mon, 17 Sep 2018 11:54:42 +0800
 Subject: [PATCH] vhost: fix corner case for enqueue operation
 
+[ upstream commit 729199397f9fc4ba265e94d492c792244e8c364b ]
+
 When performing enqueue operations on the split and packed rings,
 if the reserved buffer length from the descriptor table exceeds
 65535, the returned length by fill_vec_buf_split/_packed()
@@ -14,47 +16,37 @@
 Fixes: 37f5e79a271d ("vhost: add shadow used ring support for packed rings")
 Fixes: a922401f35cc ("vhost: add Rx support for packed ring")
 Fixes: ae999ce49dcb ("vhost: add Tx support for packed ring")
-Cc: stable@dpdk.org
 
 Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
 ---
- lib/librte_vhost/virtio_net.c | 20 +++++++++++---------
- 1 file changed, 11 insertions(+), 9 deletions(-)
+ lib/librte_vhost/virtio_net.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
-index 4bfae76a6e..f8794ee198 100644
+index cfd69ceac1..eaee1c78f1 100644
 --- a/lib/librte_vhost/virtio_net.c
 +++ b/lib/librte_vhost/virtio_net.c
-@@ -122,7 +122,7 @@ flush_shadow_used_ring_split(struct virtio_net *dev, struct vhost_virtqueue *vq)
+@@ -272,7 +272,7 @@ flush_shadow_used_ring(struct virtio_net *dev, struct vhost_virtqueue *vq)
  
- static __rte_always_inline void
- update_shadow_used_ring_split(struct vhost_virtqueue *vq,
+ static inline void __attribute__((always_inline))
+ update_shadow_used_ring(struct vhost_virtqueue *vq,
 -			 uint16_t desc_idx, uint16_t len)
 +			 uint16_t desc_idx, uint32_t len)
  {
  	uint16_t i = vq->shadow_used_idx++;
  
-@@ -186,7 +186,7 @@ flush_shadow_used_ring_packed(struct virtio_net *dev,
- 
- static __rte_always_inline void
- update_shadow_used_ring_packed(struct vhost_virtqueue *vq,
--			 uint16_t desc_idx, uint16_t len, uint16_t count)
-+			 uint16_t desc_idx, uint32_t len, uint16_t count)
- {
- 	uint16_t i = vq->shadow_used_idx++;
- 
-@@ -329,7 +329,7 @@ static __rte_always_inline int
- fill_vec_buf_split(struct virtio_net *dev, struct vhost_virtqueue *vq,
- 			 uint32_t avail_idx, uint16_t *vec_idx,
+@@ -610,7 +610,7 @@ static inline int __attribute__((always_inline))
+ fill_vec_buf(struct virtio_net *dev, struct vhost_virtqueue *vq,
+ 			 uint32_t avail_idx, uint32_t *vec_idx,
  			 struct buf_vector *buf_vec, uint16_t *desc_chain_head,
--			 uint16_t *desc_chain_len, uint8_t perm)
-+			 uint32_t *desc_chain_len, uint8_t perm)
+-			 uint16_t *desc_chain_len)
++			 uint32_t *desc_chain_len)
  {
  	uint16_t idx = vq->avail->ring[avail_idx & (vq->size - 1)];
- 	uint16_t vec_id = *vec_idx;
-@@ -409,7 +409,7 @@ reserve_avail_buf_split(struct virtio_net *dev, struct vhost_virtqueue *vq,
- 	uint16_t max_tries, tries = 0;
+ 	uint32_t vec_id = *vec_idx;
+@@ -684,7 +684,7 @@ reserve_avail_buf_mergeable(struct virtio_net *dev, struct vhost_virtqueue *vq,
+ 	uint16_t tries = 0;
  
  	uint16_t head_idx = 0;
 -	uint16_t len = 0;
@@ -62,53 +54,6 @@
  
  	*num_buffers = 0;
  	cur_idx  = vq->last_avail_idx;
-@@ -452,7 +452,7 @@ static __rte_always_inline int
- fill_vec_buf_packed_indirect(struct virtio_net *dev,
- 			struct vhost_virtqueue *vq,
- 			struct vring_packed_desc *desc, uint16_t *vec_idx,
--			struct buf_vector *buf_vec, uint16_t *len, uint8_t perm)
-+			struct buf_vector *buf_vec, uint32_t *len, uint8_t perm)
- {
- 	uint16_t i;
- 	uint32_t nr_descs;
-@@ -508,7 +508,7 @@ static __rte_always_inline int
- fill_vec_buf_packed(struct virtio_net *dev, struct vhost_virtqueue *vq,
- 				uint16_t avail_idx, uint16_t *desc_count,
- 				struct buf_vector *buf_vec, uint16_t *vec_idx,
--				uint16_t *buf_id, uint16_t *len, uint8_t perm)
-+				uint16_t *buf_id, uint32_t *len, uint8_t perm)
- {
- 	bool wrap_counter = vq->avail_wrap_counter;
- 	struct vring_packed_desc *descs = vq->desc_packed;
-@@ -573,7 +573,7 @@ reserve_avail_buf_packed(struct virtio_net *dev, struct vhost_virtqueue *vq,
- 	uint16_t max_tries, tries = 0;
- 
- 	uint16_t buf_id = 0;
--	uint16_t len = 0;
-+	uint32_t len = 0;
- 	uint16_t desc_count;
- 
- 	*num_buffers = 0;
-@@ -1379,7 +1379,8 @@ virtio_dev_tx_split(struct virtio_net *dev, struct vhost_virtqueue *vq,
- 
- 	for (i = 0; i < count; i++) {
- 		struct buf_vector buf_vec[BUF_VECTOR_MAX];
--		uint16_t head_idx, dummy_len;
-+		uint16_t head_idx;
-+		uint32_t dummy_len;
- 		uint16_t nr_vec = 0;
- 		int err;
- 
-@@ -1486,7 +1487,8 @@ virtio_dev_tx_packed(struct virtio_net *dev, struct vhost_virtqueue *vq,
- 
- 	for (i = 0; i < count; i++) {
- 		struct buf_vector buf_vec[BUF_VECTOR_MAX];
--		uint16_t buf_id, dummy_len;
-+		uint16_t buf_id;
-+		uint32_t dummy_len;
- 		uint16_t desc_count, nr_vec = 0;
- 		int err;
- 
 -- 
 2.19.0
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bonding: stop and deactivate slaves on stop' has been queued to LTS release 16.11.9
  2018-10-03 16:52   ` [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' " Luca Boccassi
                       ` (2 preceding siblings ...)
  2018-10-03 16:52     ` [dpdk-stable] patch 'vhost: fix corner case for enqueue operation' " Luca Boccassi
@ 2018-10-03 16:52     ` Luca Boccassi
  2018-10-03 16:52     ` [dpdk-stable] patch 'test/crypto: fix number of queue pairs' " Luca Boccassi
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-03 16:52 UTC (permalink / raw)
  To: Radu Nicolau; +Cc: Declan Doherty, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/05/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From b37c1a4cd7ba380bdfac2a41e2d73962e8853ce5 Mon Sep 17 00:00:00 2001
From: Radu Nicolau <radu.nicolau@intel.com>
Date: Wed, 1 Aug 2018 14:18:43 +0100
Subject: [PATCH] net/bonding: stop and deactivate slaves on stop

[ upstream commit 7486331308f6c18b3f84bb2c19b8ffe1808a32f5 ]

When a bonding port is stopped also stop and deactivate all slaves.
Otherwise slaves will be still listed as active.

Fixes: 2efb58cbab6e ("bond: new link bonding library")

Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index c672f0560b..aad8631787 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -1652,12 +1652,15 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
 			tlb_last_obytets[internals->active_slaves[i]] = 0;
 	}
 
+	eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
+	eth_dev->data->dev_started = 0;
+
 	internals->link_status_polling_enabled = 0;
-	for (i = 0; i < internals->slave_count; i++)
+	for (i = 0; i < internals->slave_count; i++) {
 		internals->slaves[i].last_link_status = 0;
-
-	eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
-	eth_dev->data->dev_started = 0;
+		rte_eth_dev_stop(internals->slaves[i].port_id);
+		deactivate_slave(eth_dev, internals->slaves[i].port_id);
+	}
 }
 
 void
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-03 17:44:54.694590199 +0100
+++ 0006-net-bonding-stop-and-deactivate-slaves-on-stop.patch	2018-10-03 17:44:54.574534610 +0100
@@ -1,13 +1,14 @@
-From 7486331308f6c18b3f84bb2c19b8ffe1808a32f5 Mon Sep 17 00:00:00 2001
+From b37c1a4cd7ba380bdfac2a41e2d73962e8853ce5 Mon Sep 17 00:00:00 2001
 From: Radu Nicolau <radu.nicolau@intel.com>
 Date: Wed, 1 Aug 2018 14:18:43 +0100
 Subject: [PATCH] net/bonding: stop and deactivate slaves on stop
 
+[ upstream commit 7486331308f6c18b3f84bb2c19b8ffe1808a32f5 ]
+
 When a bonding port is stopped also stop and deactivate all slaves.
 Otherwise slaves will be still listed as active.
 
 Fixes: 2efb58cbab6e ("bond: new link bonding library")
-Cc: stable@dpdk.org
 
 Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
 Acked-by: Declan Doherty <declan.doherty@intel.com>
@@ -16,10 +17,10 @@
  1 file changed, 7 insertions(+), 4 deletions(-)
 
 diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
-index 4df0e84079..1d6245aa56 100644
+index c672f0560b..aad8631787 100644
 --- a/drivers/net/bonding/rte_eth_bond_pmd.c
 +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
-@@ -2174,12 +2174,15 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
+@@ -1652,12 +1652,15 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
  			tlb_last_obytets[internals->active_slaves[i]] = 0;
  	}
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'test/crypto: fix number of queue pairs' has been queued to LTS release 16.11.9
  2018-10-03 16:52   ` [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' " Luca Boccassi
                       ` (3 preceding siblings ...)
  2018-10-03 16:52     ` [dpdk-stable] patch 'net/bonding: stop and deactivate slaves on stop' " Luca Boccassi
@ 2018-10-03 16:52     ` Luca Boccassi
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-03 16:52 UTC (permalink / raw)
  To: Fiona Trahe; +Cc: Akhil Goyal, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/05/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 1703f13734d62e5a03e7815b4832b86426e55100 Mon Sep 17 00:00:00 2001
From: Fiona Trahe <fiona.trahe@intel.com>
Date: Sat, 22 Sep 2018 14:33:36 +0100
Subject: [PATCH] test/crypto: fix number of queue pairs

[ upstream commit 738ad7b42b63fc5067419bf609296f2c4a6a0cb0 ]

Some of the tests use a QAT-specific value (2) for
maximum nr of queue pairs to create valid/invalid test cases.
This has accidentally worked ok as default max_qps for all PMDs
is larger. It is incorrect however and would fail if a device
had a max lower than the QAT value.
Instead use the value returned by the PMD in the
rte_cryptodev_get_info query, this value is stored in the ts_params.

Fixes: 202d375c60bc ("app/test: add cryptodev unit and performance tests")

Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
---
 app/test/test_cryptodev.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index a1f8717beb..209c4024b4 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -557,7 +557,7 @@ test_device_configure_invalid_queue_pair_ids(void)
 
 
 	/* valid - max value queue pairs */
-	ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;
+	ts_params->conf.nb_queue_pairs = orig_nb_qps;
 
 	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
 			&ts_params->conf),
@@ -588,7 +588,7 @@ test_device_configure_invalid_queue_pair_ids(void)
 
 
 	/* invalid - max value + 1 queue pairs */
-	ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE + 1;
+	ts_params->conf.nb_queue_pairs = orig_nb_qps + 1;
 
 	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
 			&ts_params->conf),
@@ -735,7 +735,7 @@ test_queue_pair_descriptor_setup(void)
 	/* test invalid queue pair id */
 	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;	/*valid */
 
-	qp_id = DEFAULT_NUM_QPS_PER_QAT_DEVICE;		/*invalid */
+	qp_id = ts_params->conf.nb_queue_pairs;		/*invalid */
 
 	TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
 			ts_params->valid_devs[0],
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-03 17:44:54.714800862 +0100
+++ 0007-test-crypto-fix-number-of-queue-pairs.patch	2018-10-03 17:44:54.578534622 +0100
@@ -1,8 +1,10 @@
-From 738ad7b42b63fc5067419bf609296f2c4a6a0cb0 Mon Sep 17 00:00:00 2001
+From 1703f13734d62e5a03e7815b4832b86426e55100 Mon Sep 17 00:00:00 2001
 From: Fiona Trahe <fiona.trahe@intel.com>
 Date: Sat, 22 Sep 2018 14:33:36 +0100
 Subject: [PATCH] test/crypto: fix number of queue pairs
 
+[ upstream commit 738ad7b42b63fc5067419bf609296f2c4a6a0cb0 ]
+
 Some of the tests use a QAT-specific value (2) for
 maximum nr of queue pairs to create valid/invalid test cases.
 This has accidentally worked ok as default max_qps for all PMDs
@@ -12,19 +14,18 @@
 rte_cryptodev_get_info query, this value is stored in the ts_params.
 
 Fixes: 202d375c60bc ("app/test: add cryptodev unit and performance tests")
-Cc: stable@dpdk.org
 
 Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
 Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
 ---
- test/test/test_cryptodev.c | 6 +++---
+ app/test/test_cryptodev.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
 
-diff --git a/test/test/test_cryptodev.c b/test/test/test_cryptodev.c
-index a6044b261e..c63662d91f 100644
---- a/test/test/test_cryptodev.c
-+++ b/test/test/test_cryptodev.c
-@@ -635,7 +635,7 @@ test_device_configure_invalid_queue_pair_ids(void)
+diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
+index a1f8717beb..209c4024b4 100644
+--- a/app/test/test_cryptodev.c
++++ b/app/test/test_cryptodev.c
+@@ -557,7 +557,7 @@ test_device_configure_invalid_queue_pair_ids(void)
  
  
  	/* valid - max value queue pairs */
@@ -33,7 +34,7 @@
  
  	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
  			&ts_params->conf),
-@@ -667,7 +667,7 @@ test_device_configure_invalid_queue_pair_ids(void)
+@@ -588,7 +588,7 @@ test_device_configure_invalid_queue_pair_ids(void)
  
  
  	/* invalid - max value + 1 queue pairs */
@@ -42,7 +43,7 @@
  
  	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
  			&ts_params->conf),
-@@ -819,7 +819,7 @@ test_queue_pair_descriptor_setup(void)
+@@ -735,7 +735,7 @@ test_queue_pair_descriptor_setup(void)
  	/* test invalid queue pair id */
  	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;	/*valid */
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' has been queued to LTS release 16.11.9
  2018-10-03 16:21 ` [dpdk-stable] patch 'acl: forbid rule with priority zero' " Luca Boccassi
  2018-10-03 16:52   ` [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' " Luca Boccassi
@ 2018-10-15 11:51   ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: fix partition id calculation for X722' " Luca Boccassi
                       ` (23 more replies)
  1 sibling, 24 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Qi Zhang; +Cc: Anand Rawat, Beilei Xing, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 994a8f3dfff72bfd0f83fcd6529997d74b84afd7 Mon Sep 17 00:00:00 2001
From: Qi Zhang <qi.z.zhang@intel.com>
Date: Fri, 28 Sep 2018 11:20:01 +0800
Subject: [PATCH] net/i40e: fix send admin queue command before init

[ upstream commit 0a1b657838c2c0546ebc6469ed2840c5a9a796f4 ]

We should not issue Admin Queue command before Admin Queue is initialized.
But this happened in i40e_hw_init and i40e_filter_input_set_init.

The patch fixes the issue by proper reordering.

Fixes: b6a0ec418274 ("i40e: use AQ for Rx control register read/write")

Reported-by: Anand Rawat <anand.rawat@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 3061296340..2ce0e70258 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -1081,9 +1081,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev)
 	/* Make sure all is clean before doing PF reset */
 	i40e_clear_hw(hw);
 
-	/* Initialize the hardware */
-	i40e_hw_init(dev);
-
 	/* Reset here to make sure all is clean for each PF */
 	ret = i40e_pf_reset(hw);
 	if (ret) {
@@ -1098,20 +1095,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev)
 		return ret;
 	}
 
-	i40e_config_automask(pf);
-
-	/*
-	 * To work around the NVM issue, initialize registers
-	 * for flexible payload and packet type of QinQ by
-	 * software. It should be removed once issues are fixed
-	 * in NVM.
-	 */
-	if (!pf->support_multi_driver)
-		i40e_GLQF_reg_init(hw);
-
-	/* Initialize the input set for filters (hash and fd) to default value */
-	i40e_filter_input_set_init(pf);
-
 	/* Initialize the parameters for adminq */
 	i40e_init_adminq_parameter(hw);
 	ret = i40e_init_adminq(hw);
@@ -1126,6 +1109,23 @@ eth_i40e_dev_init(struct rte_eth_dev *dev)
 		     ((hw->nvm.version >> 4) & 0xff),
 		     (hw->nvm.version & 0xf), hw->nvm.eetrack);
 
+	/* Initialize the hardware */
+	i40e_hw_init(dev);
+
+	i40e_config_automask(pf);
+
+	/*
+	 * To work around the NVM issue, initialize registers
+	 * for flexible payload and packet type of QinQ by
+	 * software. It should be removed once issues are fixed
+	 * in NVM.
+	 */
+	if (!pf->support_multi_driver)
+		i40e_GLQF_reg_init(hw);
+
+	/* Initialize the input set for filters (hash and fd) to default value */
+	i40e_filter_input_set_init(pf);
+
 	/* Need the special FW version to support floating VEB */
 	config_floating_veb(dev);
 	/* Clear PXE mode */
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.650047507 +0100
+++ 0001-net-i40e-fix-send-admin-queue-command-before-init.patch	2018-10-15 12:48:34.493096018 +0100
@@ -1,28 +1,29 @@
-From 0a1b657838c2c0546ebc6469ed2840c5a9a796f4 Mon Sep 17 00:00:00 2001
+From 994a8f3dfff72bfd0f83fcd6529997d74b84afd7 Mon Sep 17 00:00:00 2001
 From: Qi Zhang <qi.z.zhang@intel.com>
 Date: Fri, 28 Sep 2018 11:20:01 +0800
 Subject: [PATCH] net/i40e: fix send admin queue command before init
 
+[ upstream commit 0a1b657838c2c0546ebc6469ed2840c5a9a796f4 ]
+
 We should not issue Admin Queue command before Admin Queue is initialized.
 But this happened in i40e_hw_init and i40e_filter_input_set_init.
 
 The patch fixes the issue by proper reordering.
 
 Fixes: b6a0ec418274 ("i40e: use AQ for Rx control register read/write")
-Cc: stable@dpdk.org
 
 Reported-by: Anand Rawat <anand.rawat@intel.com>
 Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
 Acked-by: Beilei Xing <beilei.xing@intel.com>
 ---
- drivers/net/i40e/i40e_ethdev.c | 36 +++++++++++++++++-----------------
- 1 file changed, 18 insertions(+), 18 deletions(-)
+ drivers/net/i40e/i40e_ethdev.c | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
 
 diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
-index de25de6500..9225333d05 100644
+index 3061296340..2ce0e70258 100644
 --- a/drivers/net/i40e/i40e_ethdev.c
 +++ b/drivers/net/i40e/i40e_ethdev.c
-@@ -1332,9 +1332,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused)
+@@ -1081,9 +1081,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev)
  	/* Make sure all is clean before doing PF reset */
  	i40e_clear_hw(hw);
  
@@ -32,18 +33,17 @@
  	/* Reset here to make sure all is clean for each PF */
  	ret = i40e_pf_reset(hw);
  	if (ret) {
-@@ -1349,21 +1346,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused)
+@@ -1098,20 +1095,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev)
  		return ret;
  	}
  
 -	i40e_config_automask(pf);
 -
--	i40e_set_default_pctype_table(dev);
--
 -	/*
 -	 * To work around the NVM issue, initialize registers
--	 * for packet type of QinQ by software.
--	 * It should be removed once issues are fixed in NVM.
+-	 * for flexible payload and packet type of QinQ by
+-	 * software. It should be removed once issues are fixed
+-	 * in NVM.
 -	 */
 -	if (!pf->support_multi_driver)
 -		i40e_GLQF_reg_init(hw);
@@ -54,7 +54,7 @@
  	/* Initialize the parameters for adminq */
  	i40e_init_adminq_parameter(hw);
  	ret = i40e_init_adminq(hw);
-@@ -1378,6 +1360,24 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused)
+@@ -1126,6 +1109,23 @@ eth_i40e_dev_init(struct rte_eth_dev *dev)
  		     ((hw->nvm.version >> 4) & 0xff),
  		     (hw->nvm.version & 0xf), hw->nvm.eetrack);
  
@@ -63,12 +63,11 @@
 +
 +	i40e_config_automask(pf);
 +
-+	i40e_set_default_pctype_table(dev);
-+
 +	/*
 +	 * To work around the NVM issue, initialize registers
-+	 * for packet type of QinQ by software.
-+	 * It should be removed once issues are fixed in NVM.
++	 * for flexible payload and packet type of QinQ by
++	 * software. It should be removed once issues are fixed
++	 * in NVM.
 +	 */
 +	if (!pf->support_multi_driver)
 +		i40e_GLQF_reg_init(hw);
@@ -76,9 +75,9 @@
 +	/* Initialize the input set for filters (hash and fd) to default value */
 +	i40e_filter_input_set_init(pf);
 +
- 	/* initialise the L3_MAP register */
- 	if (!pf->support_multi_driver) {
- 		ret = i40e_aq_debug_write_global_register(hw,
+ 	/* Need the special FW version to support floating VEB */
+ 	config_floating_veb(dev);
+ 	/* Clear PXE mode */
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e/base: fix partition id calculation for X722' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: properly clean resources' " Luca Boccassi
                       ` (22 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Qi Zhang; +Cc: Beilei Xing, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From cfc7648c166b57d01e7f151f95a6bfced35fba58 Mon Sep 17 00:00:00 2001
From: Qi Zhang <qi.z.zhang@intel.com>
Date: Tue, 25 Sep 2018 10:34:24 +0800
Subject: [PATCH] net/i40e/base: fix partition id calculation for X722

[ upstream commit 188d0bda2bac473a1c49987265ebd33c95c63456 ]

This patch overwrites number of ports for X722 devices with support for
OCP PHY mezzanine. The old method with checking if port is disabled in
the PRTGEN_CNF register cannot be used in this case. When the OCP is
removed, ports were seen as disabled, which resulted in wrong calculation
of partition id, that caused WoL to be disabled on certain ports.

Fixes: 3c89193a36fd ("i40e/base: support WOL config for X722")

Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/base/i40e_common.c | 23 ++++++++++++++++++++++-
 drivers/net/i40e/base/i40e_type.h   |  2 ++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/net/i40e/base/i40e_common.c b/drivers/net/i40e/base/i40e_common.c
index de60e2a126..1bfda0866d 100644
--- a/drivers/net/i40e/base/i40e_common.c
+++ b/drivers/net/i40e/base/i40e_common.c
@@ -3574,9 +3574,10 @@ STATIC void i40e_parse_discover_capabilities(struct i40e_hw *hw, void *buff,
 	u32 valid_functions, num_functions;
 	u32 number, logical_id, phys_id;
 	struct i40e_hw_capabilities *p;
+	enum i40e_status_code status;
+	u16 id, ocp_cfg_word0;
 	u8 major_rev;
 	u32 i = 0;
-	u16 id;
 
 	cap = (struct i40e_aqc_list_capabilities_element_resp *) buff;
 
@@ -3863,6 +3864,26 @@ STATIC void i40e_parse_discover_capabilities(struct i40e_hw *hw, void *buff,
 			hw->num_ports++;
 	}
 
+	/* OCP cards case: if a mezz is removed the ethernet port is at
+	 * disabled state in PRTGEN_CNF register. Additional NVM read is
+	 * needed in order to check if we are dealing with OCP card.
+	 * Those cards have 4 PFs at minimum, so using PRTGEN_CNF for counting
+	 * physical ports results in wrong partition id calculation and thus
+	 * not supporting WoL.
+	 */
+	if (hw->mac.type == I40E_MAC_X722) {
+		if (i40e_acquire_nvm(hw, I40E_RESOURCE_READ) == I40E_SUCCESS) {
+			status = i40e_aq_read_nvm(hw, I40E_SR_EMP_MODULE_PTR,
+						  2 * I40E_SR_OCP_CFG_WORD0,
+						  sizeof(ocp_cfg_word0),
+						  &ocp_cfg_word0, true, NULL);
+			if (status == I40E_SUCCESS &&
+			    (ocp_cfg_word0 & I40E_SR_OCP_ENABLED))
+				hw->num_ports = 4;
+			i40e_release_nvm(hw);
+		}
+	}
+
 	valid_functions = p->valid_functions;
 	num_functions = 0;
 	while (valid_functions) {
diff --git a/drivers/net/i40e/base/i40e_type.h b/drivers/net/i40e/base/i40e_type.h
index d514abe346..aa45d10c79 100644
--- a/drivers/net/i40e/base/i40e_type.h
+++ b/drivers/net/i40e/base/i40e_type.h
@@ -1519,6 +1519,8 @@ struct i40e_hw_port_stats {
 #define I40E_SR_PCIE_ALT_MODULE_MAX_SIZE	1024
 #define I40E_SR_CONTROL_WORD_1_SHIFT		0x06
 #define I40E_SR_CONTROL_WORD_1_MASK	(0x03 << I40E_SR_CONTROL_WORD_1_SHIFT)
+#define I40E_SR_OCP_CFG_WORD0			0x2B
+#define I40E_SR_OCP_ENABLED			BIT(15)
 
 /* Shadow RAM related */
 #define I40E_SR_SECTOR_SIZE_IN_WORDS	0x800
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.678631648 +0100
+++ 0002-net-i40e-base-fix-partition-id-calculation-for-X722.patch	2018-10-15 12:48:34.501096017 +0100
@@ -1,8 +1,10 @@
-From 188d0bda2bac473a1c49987265ebd33c95c63456 Mon Sep 17 00:00:00 2001
+From cfc7648c166b57d01e7f151f95a6bfced35fba58 Mon Sep 17 00:00:00 2001
 From: Qi Zhang <qi.z.zhang@intel.com>
 Date: Tue, 25 Sep 2018 10:34:24 +0800
 Subject: [PATCH] net/i40e/base: fix partition id calculation for X722
 
+[ upstream commit 188d0bda2bac473a1c49987265ebd33c95c63456 ]
+
 This patch overwrites number of ports for X722 devices with support for
 OCP PHY mezzanine. The old method with checking if port is disabled in
 the PRTGEN_CNF register cannot be used in this case. When the OCP is
@@ -10,20 +12,19 @@
 of partition id, that caused WoL to be disabled on certain ports.
 
 Fixes: 3c89193a36fd ("i40e/base: support WOL config for X722")
-Cc: stable@dpdk.org
 
 Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
 Acked-by: Beilei Xing <beilei.xing@intel.com>
 ---
  drivers/net/i40e/base/i40e_common.c | 23 ++++++++++++++++++++++-
- drivers/net/i40e/base/i40e_type.h   |  4 +++-
- 2 files changed, 25 insertions(+), 2 deletions(-)
+ drivers/net/i40e/base/i40e_type.h   |  2 ++
+ 2 files changed, 24 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/i40e/base/i40e_common.c b/drivers/net/i40e/base/i40e_common.c
-index dce5c39653..ee117bd5e4 100644
+index de60e2a126..1bfda0866d 100644
 --- a/drivers/net/i40e/base/i40e_common.c
 +++ b/drivers/net/i40e/base/i40e_common.c
-@@ -3678,9 +3678,10 @@ STATIC void i40e_parse_discover_capabilities(struct i40e_hw *hw, void *buff,
+@@ -3574,9 +3574,10 @@ STATIC void i40e_parse_discover_capabilities(struct i40e_hw *hw, void *buff,
  	u32 valid_functions, num_functions;
  	u32 number, logical_id, phys_id;
  	struct i40e_hw_capabilities *p;
@@ -35,7 +36,7 @@
  
  	cap = (struct i40e_aqc_list_capabilities_element_resp *) buff;
  
-@@ -3972,6 +3973,26 @@ STATIC void i40e_parse_discover_capabilities(struct i40e_hw *hw, void *buff,
+@@ -3863,6 +3864,26 @@ STATIC void i40e_parse_discover_capabilities(struct i40e_hw *hw, void *buff,
  			hw->num_ports++;
  	}
  
@@ -63,15 +64,13 @@
  	num_functions = 0;
  	while (valid_functions) {
 diff --git a/drivers/net/i40e/base/i40e_type.h b/drivers/net/i40e/base/i40e_type.h
-index 55acc147ea..7dde3bfd24 100644
+index d514abe346..aa45d10c79 100644
 --- a/drivers/net/i40e/base/i40e_type.h
 +++ b/drivers/net/i40e/base/i40e_type.h
-@@ -1512,7 +1512,9 @@ struct i40e_hw_port_stats {
+@@ -1519,6 +1519,8 @@ struct i40e_hw_port_stats {
+ #define I40E_SR_PCIE_ALT_MODULE_MAX_SIZE	1024
+ #define I40E_SR_CONTROL_WORD_1_SHIFT		0x06
  #define I40E_SR_CONTROL_WORD_1_MASK	(0x03 << I40E_SR_CONTROL_WORD_1_SHIFT)
- #define I40E_SR_CONTROL_WORD_1_NVM_BANK_VALID	BIT(5)
- #define I40E_SR_NVM_MAP_STRUCTURE_TYPE		BIT(12)
--#define I40E_PTR_TYPE                           BIT(15)
-+#define I40E_PTR_TYPE				BIT(15)
 +#define I40E_SR_OCP_CFG_WORD0			0x2B
 +#define I40E_SR_OCP_ENABLED			BIT(15)
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e/base: properly clean resources' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: fix partition id calculation for X722' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: gracefully clean the " Luca Boccassi
                       ` (21 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Qi Zhang; +Cc: Beilei Xing, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 76c0093f43adee5774ac5c2bd530979ed9ede8bd Mon Sep 17 00:00:00 2001
From: Qi Zhang <qi.z.zhang@intel.com>
Date: Tue, 25 Sep 2018 10:34:31 +0800
Subject: [PATCH] net/i40e/base: properly clean resources

[ upstream commit 02016804ed5e6a46f9162737bcdc78a3780332f5 ]

Allocated resources were not freed in the event of a failure in
i40e_init_lan_hmc function. This patch gracefully handles the fail
case after initializing the lan hmc.

Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/base/i40e_lan_hmc.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/net/i40e/base/i40e_lan_hmc.c b/drivers/net/i40e/base/i40e_lan_hmc.c
index 226064847f..739f3d5a4d 100644
--- a/drivers/net/i40e/base/i40e_lan_hmc.c
+++ b/drivers/net/i40e/base/i40e_lan_hmc.c
@@ -143,7 +143,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
 		ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
 		DEBUGOUT3("i40e_init_lan_hmc: Tx context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
 			  txq_num, obj->max_cnt, ret_code);
-		goto init_lan_hmc_out;
+		goto free_hmc_out;
 	}
 
 	/* aggregate values into the full LAN object for later */
@@ -166,7 +166,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
 		ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
 		DEBUGOUT3("i40e_init_lan_hmc: Rx context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
 			  rxq_num, obj->max_cnt, ret_code);
-		goto init_lan_hmc_out;
+		goto free_hmc_out;
 	}
 
 	/* aggregate values into the full LAN object for later */
@@ -189,7 +189,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
 		ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
 		DEBUGOUT3("i40e_init_lan_hmc: FCoE context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
 			  fcoe_cntx_num, obj->max_cnt, ret_code);
-		goto init_lan_hmc_out;
+		goto free_hmc_out;
 	}
 
 	/* aggregate values into the full LAN object for later */
@@ -212,7 +212,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
 		ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
 		DEBUGOUT3("i40e_init_lan_hmc: FCoE filter: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
 			  fcoe_filt_num, obj->max_cnt, ret_code);
-		goto init_lan_hmc_out;
+		goto free_hmc_out;
 	}
 
 	/* aggregate values into the full LAN object for later */
@@ -233,7 +233,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
 					  (sizeof(struct i40e_hmc_sd_entry) *
 					  hw->hmc.sd_table.sd_cnt));
 		if (ret_code)
-			goto init_lan_hmc_out;
+			goto free_hmc_out;
 		hw->hmc.sd_table.sd_entry =
 			(struct i40e_hmc_sd_entry *)hw->hmc.sd_table.addr.va;
 	}
@@ -241,6 +241,11 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
 	full_obj->size = l2fpm_size;
 
 init_lan_hmc_out:
+	return ret_code;
+free_hmc_out:
+	if (hw->hmc.hmc_obj_virt_mem.va)
+		i40e_free_virt_mem(hw, &hw->hmc.hmc_obj_virt_mem);
+
 	return ret_code;
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.704135671 +0100
+++ 0003-net-i40e-base-properly-clean-resources.patch	2018-10-15 12:48:34.501096017 +0100
@@ -1,14 +1,14 @@
-From 02016804ed5e6a46f9162737bcdc78a3780332f5 Mon Sep 17 00:00:00 2001
+From 76c0093f43adee5774ac5c2bd530979ed9ede8bd Mon Sep 17 00:00:00 2001
 From: Qi Zhang <qi.z.zhang@intel.com>
 Date: Tue, 25 Sep 2018 10:34:31 +0800
 Subject: [PATCH] net/i40e/base: properly clean resources
 
+[ upstream commit 02016804ed5e6a46f9162737bcdc78a3780332f5 ]
+
 Allocated resources were not freed in the event of a failure in
 i40e_init_lan_hmc function. This patch gracefully handles the fail
 case after initializing the lan hmc.
 
-Cc: stable@dpdk.org
-
 Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
 Acked-by: Beilei Xing <beilei.xing@intel.com>
 ---
@@ -16,10 +16,10 @@
  1 file changed, 10 insertions(+), 5 deletions(-)
 
 diff --git a/drivers/net/i40e/base/i40e_lan_hmc.c b/drivers/net/i40e/base/i40e_lan_hmc.c
-index 510c11826c..0afee49b13 100644
+index 226064847f..739f3d5a4d 100644
 --- a/drivers/net/i40e/base/i40e_lan_hmc.c
 +++ b/drivers/net/i40e/base/i40e_lan_hmc.c
-@@ -114,7 +114,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
+@@ -143,7 +143,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
  		ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
  		DEBUGOUT3("i40e_init_lan_hmc: Tx context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
  			  txq_num, obj->max_cnt, ret_code);
@@ -28,7 +28,7 @@
  	}
  
  	/* aggregate values into the full LAN object for later */
-@@ -137,7 +137,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
+@@ -166,7 +166,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
  		ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
  		DEBUGOUT3("i40e_init_lan_hmc: Rx context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
  			  rxq_num, obj->max_cnt, ret_code);
@@ -37,7 +37,7 @@
  	}
  
  	/* aggregate values into the full LAN object for later */
-@@ -160,7 +160,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
+@@ -189,7 +189,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
  		ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
  		DEBUGOUT3("i40e_init_lan_hmc: FCoE context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
  			  fcoe_cntx_num, obj->max_cnt, ret_code);
@@ -46,7 +46,7 @@
  	}
  
  	/* aggregate values into the full LAN object for later */
-@@ -183,7 +183,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
+@@ -212,7 +212,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
  		ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
  		DEBUGOUT3("i40e_init_lan_hmc: FCoE filter: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
  			  fcoe_filt_num, obj->max_cnt, ret_code);
@@ -55,7 +55,7 @@
  	}
  
  	/* aggregate values into the full LAN object for later */
-@@ -204,7 +204,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
+@@ -233,7 +233,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
  					  (sizeof(struct i40e_hmc_sd_entry) *
  					  hw->hmc.sd_table.sd_cnt));
  		if (ret_code)
@@ -64,7 +64,7 @@
  		hw->hmc.sd_table.sd_entry =
  			(struct i40e_hmc_sd_entry *)hw->hmc.sd_table.addr.va;
  	}
-@@ -212,6 +212,11 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
+@@ -241,6 +241,11 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
  	full_obj->size = l2fpm_size;
  
  init_lan_hmc_out:

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e/base: gracefully clean the resources' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: fix partition id calculation for X722' " Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: properly clean resources' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: correct global reset timeout calculation' " Luca Boccassi
                       ` (20 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Qi Zhang; +Cc: Beilei Xing, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 675e3710dfcda4e3ff7b4edb67a5e5ef57c7dbdc Mon Sep 17 00:00:00 2001
From: Qi Zhang <qi.z.zhang@intel.com>
Date: Tue, 25 Sep 2018 10:34:32 +0800
Subject: [PATCH] net/i40e/base: gracefully clean the resources

[ upstream commit 49ea51605be46b48b12c2267b7c2a12d5ed1ed07 ]

Allocated resources were not freed in the event of failure in
i40e_init_asq function. This patch gracefully handles all failures.

Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/base/i40e_adminq.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/i40e/base/i40e_adminq.c b/drivers/net/i40e/base/i40e_adminq.c
index e231582c54..4d3f938e18 100644
--- a/drivers/net/i40e/base/i40e_adminq.c
+++ b/drivers/net/i40e/base/i40e_adminq.c
@@ -126,6 +126,7 @@ enum i40e_status_code i40e_alloc_adminq_arq_ring(struct i40e_hw *hw)
  **/
 void i40e_free_adminq_asq(struct i40e_hw *hw)
 {
+	i40e_free_virt_mem(hw, &hw->aq.asq.cmd_buf);
 	i40e_free_dma_mem(hw, &hw->aq.asq.desc_buf);
 }
 
@@ -433,7 +434,7 @@ enum i40e_status_code i40e_init_asq(struct i40e_hw *hw)
 	/* initialize base registers */
 	ret_code = i40e_config_asq_regs(hw);
 	if (ret_code != I40E_SUCCESS)
-		goto init_adminq_free_rings;
+		goto init_config_regs;
 
 	/* success! */
 	hw->aq.asq.count = hw->aq.num_asq_entries;
@@ -441,6 +442,10 @@ enum i40e_status_code i40e_init_asq(struct i40e_hw *hw)
 
 init_adminq_free_rings:
 	i40e_free_adminq_asq(hw);
+	return ret_code;
+
+init_config_regs:
+	i40e_free_asq_bufs(hw);
 
 init_adminq_exit:
 	return ret_code;
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.723774107 +0100
+++ 0004-net-i40e-base-gracefully-clean-the-resources.patch	2018-10-15 12:48:34.501096017 +0100
@@ -1,13 +1,13 @@
-From 49ea51605be46b48b12c2267b7c2a12d5ed1ed07 Mon Sep 17 00:00:00 2001
+From 675e3710dfcda4e3ff7b4edb67a5e5ef57c7dbdc Mon Sep 17 00:00:00 2001
 From: Qi Zhang <qi.z.zhang@intel.com>
 Date: Tue, 25 Sep 2018 10:34:32 +0800
 Subject: [PATCH] net/i40e/base: gracefully clean the resources
 
+[ upstream commit 49ea51605be46b48b12c2267b7c2a12d5ed1ed07 ]
+
 Allocated resources were not freed in the event of failure in
 i40e_init_asq function. This patch gracefully handles all failures.
 
-Cc: stable@dpdk.org
-
 Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
 Acked-by: Beilei Xing <beilei.xing@intel.com>
 ---
@@ -15,10 +15,10 @@
  1 file changed, 6 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/i40e/base/i40e_adminq.c b/drivers/net/i40e/base/i40e_adminq.c
-index 5736e0cb31..bb4c5c61e7 100644
+index e231582c54..4d3f938e18 100644
 --- a/drivers/net/i40e/base/i40e_adminq.c
 +++ b/drivers/net/i40e/base/i40e_adminq.c
-@@ -97,6 +97,7 @@ enum i40e_status_code i40e_alloc_adminq_arq_ring(struct i40e_hw *hw)
+@@ -126,6 +126,7 @@ enum i40e_status_code i40e_alloc_adminq_arq_ring(struct i40e_hw *hw)
   **/
  void i40e_free_adminq_asq(struct i40e_hw *hw)
  {
@@ -26,7 +26,7 @@
  	i40e_free_dma_mem(hw, &hw->aq.asq.desc_buf);
  }
  
-@@ -404,7 +405,7 @@ enum i40e_status_code i40e_init_asq(struct i40e_hw *hw)
+@@ -433,7 +434,7 @@ enum i40e_status_code i40e_init_asq(struct i40e_hw *hw)
  	/* initialize base registers */
  	ret_code = i40e_config_asq_regs(hw);
  	if (ret_code != I40E_SUCCESS)
@@ -35,7 +35,7 @@
  
  	/* success! */
  	hw->aq.asq.count = hw->aq.num_asq_entries;
-@@ -412,6 +413,10 @@ enum i40e_status_code i40e_init_asq(struct i40e_hw *hw)
+@@ -441,6 +442,10 @@ enum i40e_status_code i40e_init_asq(struct i40e_hw *hw)
  
  init_adminq_free_rings:
  	i40e_free_adminq_asq(hw);

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e/base: correct global reset timeout calculation' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (2 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: gracefully clean the " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/ixgbe: wait longer for link after fiber MAC setup' " Luca Boccassi
                       ` (19 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Qi Zhang; +Cc: Beilei Xing, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From d2f863a3f2f76e384454085fd2cc32e2a06b24b8 Mon Sep 17 00:00:00 2001
From: Qi Zhang <qi.z.zhang@intel.com>
Date: Tue, 25 Sep 2018 10:34:33 +0800
Subject: [PATCH] net/i40e/base: correct global reset timeout calculation

[ upstream commit 92451d9039ddddeddf59208a988393a6d44b2b9b ]

The wait time for Global Reset Ready steady state is calculated based on
the GLGEN_RSTCTL.GRSTDEL value. However, current impelementation multiplied
that value by 20 as a workaround for an issue in SOC platforms.
This resulted in the maximum GLGEN_RSTCTL.GRSTDEL timeout of 6.5 seconds
becoming 130 seconds, which is so long that the VMkernel watchdog thinks
the kernel is frozen and triggers a PSOD.

Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/base/i40e_common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/i40e/base/i40e_common.c b/drivers/net/i40e/base/i40e_common.c
index 1bfda0866d..8ba75c738d 100644
--- a/drivers/net/i40e/base/i40e_common.c
+++ b/drivers/net/i40e/base/i40e_common.c
@@ -1348,7 +1348,7 @@ enum i40e_status_code i40e_pf_reset(struct i40e_hw *hw)
 			I40E_GLGEN_RSTCTL_GRSTDEL_MASK) >>
 			I40E_GLGEN_RSTCTL_GRSTDEL_SHIFT;
 
-	grst_del = grst_del * 20;
+	grst_del = min(grst_del * 20, 160U);
 
 	for (cnt = 0; cnt < grst_del; cnt++) {
 		reg = rd32(hw, I40E_GLGEN_RSTAT);
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.743212124 +0100
+++ 0005-net-i40e-base-correct-global-reset-timeout-calculati.patch	2018-10-15 12:48:34.509096018 +0100
@@ -1,8 +1,10 @@
-From 92451d9039ddddeddf59208a988393a6d44b2b9b Mon Sep 17 00:00:00 2001
+From d2f863a3f2f76e384454085fd2cc32e2a06b24b8 Mon Sep 17 00:00:00 2001
 From: Qi Zhang <qi.z.zhang@intel.com>
 Date: Tue, 25 Sep 2018 10:34:33 +0800
 Subject: [PATCH] net/i40e/base: correct global reset timeout calculation
 
+[ upstream commit 92451d9039ddddeddf59208a988393a6d44b2b9b ]
+
 The wait time for Global Reset Ready steady state is calculated based on
 the GLGEN_RSTCTL.GRSTDEL value. However, current impelementation multiplied
 that value by 20 as a workaround for an issue in SOC platforms.
@@ -10,8 +12,6 @@
 becoming 130 seconds, which is so long that the VMkernel watchdog thinks
 the kernel is frozen and triggers a PSOD.
 
-Cc: stable@dpdk.org
-
 Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
 Acked-by: Beilei Xing <beilei.xing@intel.com>
 ---
@@ -19,10 +19,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/net/i40e/base/i40e_common.c b/drivers/net/i40e/base/i40e_common.c
-index 0affa98ac9..0eb369ff6c 100644
+index 1bfda0866d..8ba75c738d 100644
 --- a/drivers/net/i40e/base/i40e_common.c
 +++ b/drivers/net/i40e/base/i40e_common.c
-@@ -1342,7 +1342,7 @@ enum i40e_status_code i40e_pf_reset(struct i40e_hw *hw)
+@@ -1348,7 +1348,7 @@ enum i40e_status_code i40e_pf_reset(struct i40e_hw *hw)
  			I40E_GLGEN_RSTCTL_GRSTDEL_MASK) >>
  			I40E_GLGEN_RSTCTL_GRSTDEL_SHIFT;
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/ixgbe: wait longer for link after fiber MAC setup' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (3 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: correct global reset timeout calculation' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/enic: do not use non-standard integer types' " Luca Boccassi
                       ` (18 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Matthew Smith; +Cc: Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From e45803dd5f39bd9e5397a3a5ff3c23464b2fe06c Mon Sep 17 00:00:00 2001
From: Matthew Smith <mgsmith@netgate.com>
Date: Mon, 16 Jul 2018 11:36:04 -0500
Subject: [PATCH] net/ixgbe: wait longer for link after fiber MAC setup

[ upstream commit 64f1c8539c8ce99214b9eb1fb728a2c6745f3300 ]

After setting up the link on a fiber port, the maximum wait time for
the link to come up is 500 ms in ixgbe_setup_mac_link_multispeed_fiber().
On an x550 SFP+ port, this is often not sufficiently long for the link
to come up. This can result in never being able to retrieve accurate
link status for the port using rte_eth_link_get_nowait().

Increase the maximum wait time in ixgbe_setup_mac_link_multispeed_fiber()
to 1 s.

Bugzilla ID: 69
Fixes: f3430431abaf ("ixgbe/base: add SFP+ dual-speed support")

Signed-off-by: Matthew Smith <mgsmith@netgate.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ixgbe/base/ixgbe_common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
index e54fd306a3..662bff467f 100644
--- a/drivers/net/ixgbe/base/ixgbe_common.c
+++ b/drivers/net/ixgbe/base/ixgbe_common.c
@@ -5098,7 +5098,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
 		 * Section 73.10.2, we may have to wait up to 500ms if KR is
 		 * attempted.  82599 uses the same timing for 10g SFI.
 		 */
-		for (i = 0; i < 5; i++) {
+		for (i = 0; i < 10; i++) {
 			/* Wait for the link partner to also set speed */
 			msec_delay(100);
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.767168640 +0100
+++ 0006-net-ixgbe-wait-longer-for-link-after-fiber-MAC-setup.patch	2018-10-15 12:48:34.513096018 +0100
@@ -1,8 +1,10 @@
-From 64f1c8539c8ce99214b9eb1fb728a2c6745f3300 Mon Sep 17 00:00:00 2001
+From e45803dd5f39bd9e5397a3a5ff3c23464b2fe06c Mon Sep 17 00:00:00 2001
 From: Matthew Smith <mgsmith@netgate.com>
 Date: Mon, 16 Jul 2018 11:36:04 -0500
 Subject: [PATCH] net/ixgbe: wait longer for link after fiber MAC setup
 
+[ upstream commit 64f1c8539c8ce99214b9eb1fb728a2c6745f3300 ]
+
 After setting up the link on a fiber port, the maximum wait time for
 the link to come up is 500 ms in ixgbe_setup_mac_link_multispeed_fiber().
 On an x550 SFP+ port, this is often not sufficiently long for the link
@@ -14,7 +16,6 @@
 
 Bugzilla ID: 69
 Fixes: f3430431abaf ("ixgbe/base: add SFP+ dual-speed support")
-Cc: stable@dpdk.org
 
 Signed-off-by: Matthew Smith <mgsmith@netgate.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>
@@ -23,10 +24,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
-index b4a0d7003c..21f973e5e0 100644
+index e54fd306a3..662bff467f 100644
 --- a/drivers/net/ixgbe/base/ixgbe_common.c
 +++ b/drivers/net/ixgbe/base/ixgbe_common.c
-@@ -5262,7 +5262,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
+@@ -5098,7 +5098,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
  		 * Section 73.10.2, we may have to wait up to 500ms if KR is
  		 * attempted.  82599 uses the same timing for 10g SFI.
  		 */

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/enic: do not use non-standard integer types' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (4 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/ixgbe: wait longer for link after fiber MAC setup' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/enic: set Rx VLAN offload flag for non-stripped packets' " Luca Boccassi
                       ` (17 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Hyong Youb Kim; +Cc: John Daley, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 91c15970a4602c7721c4d1b291e7c12d6b7bf213 Mon Sep 17 00:00:00 2001
From: Hyong Youb Kim <hyonkim@cisco.com>
Date: Tue, 25 Sep 2018 19:54:17 -0700
Subject: [PATCH] net/enic: do not use non-standard integer types

[ upstream commit 329380b3a13fe00f97465a5e27bb9535157bbe33 ]

Bugzilla ID: 39
Fixes: 9913fbb91df0 ("enic/base: common code")
Fixes: 322b355f2183 ("net/enic/base: bring NIC interface functions up to date")

Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
---
 drivers/net/enic/base/vnic_devcmd.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/enic/base/vnic_devcmd.h b/drivers/net/enic/base/vnic_devcmd.h
index 785fd6fdfd..a94962621a 100644
--- a/drivers/net/enic/base/vnic_devcmd.h
+++ b/drivers/net/enic/base/vnic_devcmd.h
@@ -895,9 +895,9 @@ enum {
 };
 
 struct filter_tlv {
-	u_int32_t type;
-	u_int32_t length;
-	u_int32_t val[0];
+	uint32_t type;
+	uint32_t length;
+	uint32_t val[0];
 };
 
 /* Data for CMD_ADD_FILTER is 2 TLV and filter + action structs */
@@ -911,10 +911,10 @@ struct filter_tlv {
  * drivers should use this instead of "sizeof (struct filter_v2)" when
  * computing length for TLV.
  */
-static inline u_int32_t
+static inline uint32_t
 vnic_filter_size(struct filter_v2 *fp)
 {
-	u_int32_t size;
+	uint32_t size;
 
 	switch (fp->type) {
 	case FILTER_USNIC_ID:
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.789704164 +0100
+++ 0007-net-enic-do-not-use-non-standard-integer-types.patch	2018-10-15 12:48:34.513096018 +0100
@@ -1,33 +1,25 @@
-From 329380b3a13fe00f97465a5e27bb9535157bbe33 Mon Sep 17 00:00:00 2001
+From 91c15970a4602c7721c4d1b291e7c12d6b7bf213 Mon Sep 17 00:00:00 2001
 From: Hyong Youb Kim <hyonkim@cisco.com>
 Date: Tue, 25 Sep 2018 19:54:17 -0700
 Subject: [PATCH] net/enic: do not use non-standard integer types
 
+[ upstream commit 329380b3a13fe00f97465a5e27bb9535157bbe33 ]
+
 Bugzilla ID: 39
 Fixes: 9913fbb91df0 ("enic/base: common code")
 Fixes: 322b355f2183 ("net/enic/base: bring NIC interface functions up to date")
-Cc: stable@dpdk.org
 
 Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
 Reviewed-by: John Daley <johndale@cisco.com>
 ---
- drivers/net/enic/base/vnic_devcmd.h | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
+ drivers/net/enic/base/vnic_devcmd.h | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 diff --git a/drivers/net/enic/base/vnic_devcmd.h b/drivers/net/enic/base/vnic_devcmd.h
-index a22d8a76c5..fffe307e02 100644
+index 785fd6fdfd..a94962621a 100644
 --- a/drivers/net/enic/base/vnic_devcmd.h
 +++ b/drivers/net/enic/base/vnic_devcmd.h
-@@ -875,7 +875,7 @@ struct filter_action_v2 {
- 	u32 rq_idx;
- 	u32 flags;                     /* use FILTER_ACTION_XXX_FLAG defines */
- 	u16 filter_id;
--	u_int8_t reserved[32];         /* for future expansion */
-+	uint8_t reserved[32];         /* for future expansion */
- } __attribute__((packed));
- 
- /* Specifies the filter type. */
-@@ -941,9 +941,9 @@ enum {
+@@ -895,9 +895,9 @@ enum {
  };
  
  struct filter_tlv {
@@ -40,7 +32,7 @@
  };
  
  /* Data for CMD_ADD_FILTER is 2 TLV and filter + action structs */
-@@ -957,10 +957,10 @@ struct filter_tlv {
+@@ -911,10 +911,10 @@ struct filter_tlv {
   * drivers should use this instead of "sizeof (struct filter_v2)" when
   * computing length for TLV.
   */
@@ -53,19 +45,6 @@
  
  	switch (fp->type) {
  	case FILTER_USNIC_ID:
-@@ -999,10 +999,10 @@ enum {
-  * drivers should use this instead of "sizeof (struct filter_action_v2)"
-  * when computing length for TLV.
-  */
--static inline u_int32_t
-+static inline uint32_t
- vnic_action_size(struct filter_action_v2 *fap)
- {
--	u_int32_t size;
-+	uint32_t size;
- 
- 	switch (fap->type) {
- 	case FILTER_ACTION_RQ_STEERING:
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/enic: set Rx VLAN offload flag for non-stripped packets' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (5 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/enic: do not use non-standard integer types' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/nfp: fix RSS' " Luca Boccassi
                       ` (16 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Hyong Youb Kim; +Cc: John Daley, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From cc76098cd86383279ad285cbeceff5c75ebb899f Mon Sep 17 00:00:00 2001
From: Hyong Youb Kim <hyonkim@cisco.com>
Date: Tue, 25 Sep 2018 19:54:19 -0700
Subject: [PATCH] net/enic: set Rx VLAN offload flag for non-stripped packets

[ upstream commit fe5383d133f484d7cb2ad385bbf1e43ad7078682 ]

The NIC indicates VLAN TCI to the driver even when VLAN stripping is
disabled. The driver sets mbuf's vlan_tci but not PKT_RX_VLAN. Set
PKT_RX_VLAN to indicate that vlan_tci is valid.

Fixes: c6f455507411 ("net/enic: add ethernet VLAN packet type")

Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
---
 drivers/net/enic/enic_rxtx.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/enic/enic_rxtx.c b/drivers/net/enic/enic_rxtx.c
index 1934f8baf1..0cfde4684a 100644
--- a/drivers/net/enic/enic_rxtx.c
+++ b/drivers/net/enic/enic_rxtx.c
@@ -189,10 +189,12 @@ enic_cq_rx_to_pkt_flags(struct cq_desc *cqd, struct rte_mbuf *mbuf)
 		pkt_flags |= PKT_RX_VLAN_PKT | PKT_RX_VLAN_STRIPPED;
 		mbuf->packet_type |= RTE_PTYPE_L2_ETHER;
 	} else {
-		if (vlan_tci != 0)
+		if (vlan_tci != 0) {
+			pkt_flags |= PKT_RX_VLAN_PKT;
 			mbuf->packet_type |= RTE_PTYPE_L2_ETHER_VLAN;
-		else
+		} else {
 			mbuf->packet_type |= RTE_PTYPE_L2_ETHER;
+		}
 	}
 	mbuf->vlan_tci = vlan_tci;
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.809131672 +0100
+++ 0008-net-enic-set-Rx-VLAN-offload-flag-for-non-stripped-p.patch	2018-10-15 12:48:34.513096018 +0100
@@ -1,14 +1,15 @@
-From fe5383d133f484d7cb2ad385bbf1e43ad7078682 Mon Sep 17 00:00:00 2001
+From cc76098cd86383279ad285cbeceff5c75ebb899f Mon Sep 17 00:00:00 2001
 From: Hyong Youb Kim <hyonkim@cisco.com>
 Date: Tue, 25 Sep 2018 19:54:19 -0700
 Subject: [PATCH] net/enic: set Rx VLAN offload flag for non-stripped packets
 
+[ upstream commit fe5383d133f484d7cb2ad385bbf1e43ad7078682 ]
+
 The NIC indicates VLAN TCI to the driver even when VLAN stripping is
 disabled. The driver sets mbuf's vlan_tci but not PKT_RX_VLAN. Set
 PKT_RX_VLAN to indicate that vlan_tci is valid.
 
 Fixes: c6f455507411 ("net/enic: add ethernet VLAN packet type")
-Cc: stable@dpdk.org
 
 Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
 Reviewed-by: John Daley <johndale@cisco.com>
@@ -17,16 +18,16 @@
  1 file changed, 4 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/net/enic/enic_rxtx.c b/drivers/net/enic/enic_rxtx.c
-index 7129e1217c..0eb113d753 100644
+index 1934f8baf1..0cfde4684a 100644
 --- a/drivers/net/enic/enic_rxtx.c
 +++ b/drivers/net/enic/enic_rxtx.c
-@@ -233,10 +233,12 @@ enic_cq_rx_to_pkt_flags(struct cq_desc *cqd, struct rte_mbuf *mbuf)
- 		pkt_flags |= PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED;
+@@ -189,10 +189,12 @@ enic_cq_rx_to_pkt_flags(struct cq_desc *cqd, struct rte_mbuf *mbuf)
+ 		pkt_flags |= PKT_RX_VLAN_PKT | PKT_RX_VLAN_STRIPPED;
  		mbuf->packet_type |= RTE_PTYPE_L2_ETHER;
  	} else {
 -		if (vlan_tci != 0)
 +		if (vlan_tci != 0) {
-+			pkt_flags |= PKT_RX_VLAN;
++			pkt_flags |= PKT_RX_VLAN_PKT;
  			mbuf->packet_type |= RTE_PTYPE_L2_ETHER_VLAN;
 -		else
 +		} else {

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/nfp: fix RSS' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (6 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/enic: set Rx VLAN offload flag for non-stripped packets' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix logging to include device name' " Luca Boccassi
                       ` (15 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Alejandro Lucero; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 3e9b054d36acb0a84cc2ce8f1f6b92a7c0fdee8a Mon Sep 17 00:00:00 2001
From: Alejandro Lucero <alejandro.lucero@netronome.com>
Date: Wed, 26 Sep 2018 14:45:50 +0100
Subject: [PATCH] net/nfp: fix RSS

[ upstream commit f14a51689894dc226f6af4ab39f7439e4384a06b ]

Three problems are fixed in this patch:

 - RSS capabilities not advertised properly
 - RSS configuration just done for some RSS types
 - RSS hash match reported for just some RSS types

Fixes: 934e4c60fbff ("nfp: add RSS")

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
---
 drivers/net/nfp/nfp_net.c | 32 ++++++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)

diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
index 9548d58af4..e5f6a883f9 100644
--- a/drivers/net/nfp/nfp_net.c
+++ b/drivers/net/nfp/nfp_net.c
@@ -1629,6 +1629,18 @@ nfp_net_set_hash(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd,
 	case NFP_NET_RSS_IPV6_EX:
 		mbuf->packet_type |= RTE_PTYPE_INNER_L3_IPV6_EXT;
 		break;
+	case NFP_NET_RSS_IPV4_TCP:
+		mbuf->packet_type |= RTE_PTYPE_INNER_L3_IPV6_EXT;
+		break;
+	case NFP_NET_RSS_IPV6_TCP:
+		mbuf->packet_type |= RTE_PTYPE_INNER_L3_IPV6_EXT;
+		break;
+	case NFP_NET_RSS_IPV4_UDP:
+		mbuf->packet_type |= RTE_PTYPE_INNER_L3_IPV6_EXT;
+		break;
+	case NFP_NET_RSS_IPV6_UDP:
+		mbuf->packet_type |= RTE_PTYPE_INNER_L3_IPV6_EXT;
+		break;
 	default:
 		mbuf->packet_type |= RTE_PTYPE_INNER_L4_MASK;
 	}
@@ -2222,14 +2234,22 @@ nfp_net_rss_hash_update(struct rte_eth_dev *dev,
 	}
 
 	if (rss_hf & ETH_RSS_IPV4)
-		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV4 |
-				NFP_NET_CFG_RSS_IPV4_TCP |
-				NFP_NET_CFG_RSS_IPV4_UDP;
+		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV4;
+
+	if (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP)
+		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV4_TCP;
+
+	if (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP)
+		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV4_UDP;
 
 	if (rss_hf & ETH_RSS_IPV6)
-		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV6 |
-				NFP_NET_CFG_RSS_IPV6_TCP |
-				NFP_NET_CFG_RSS_IPV6_UDP;
+		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV6;
+
+	if (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP)
+		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV6_TCP;
+
+	if (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP)
+		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV6_UDP;
 
 	cfg_rss_ctrl |= NFP_NET_CFG_RSS_MASK;
 	cfg_rss_ctrl |= NFP_NET_CFG_RSS_TOEPLITZ;
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.829469772 +0100
+++ 0009-net-nfp-fix-RSS.patch	2018-10-15 12:48:34.517096017 +0100
@@ -1,8 +1,10 @@
-From f14a51689894dc226f6af4ab39f7439e4384a06b Mon Sep 17 00:00:00 2001
+From 3e9b054d36acb0a84cc2ce8f1f6b92a7c0fdee8a Mon Sep 17 00:00:00 2001
 From: Alejandro Lucero <alejandro.lucero@netronome.com>
 Date: Wed, 26 Sep 2018 14:45:50 +0100
 Subject: [PATCH] net/nfp: fix RSS
 
+[ upstream commit f14a51689894dc226f6af4ab39f7439e4384a06b ]
+
 Three problems are fixed in this patch:
 
  - RSS capabilities not advertised properly
@@ -10,30 +12,17 @@
  - RSS hash match reported for just some RSS types
 
 Fixes: 934e4c60fbff ("nfp: add RSS")
-Cc: stable@dpdk.org
 
 Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
 ---
- drivers/net/nfp/nfp_net.c | 36 +++++++++++++++++++++++++++++-------
- 1 file changed, 29 insertions(+), 7 deletions(-)
+ drivers/net/nfp/nfp_net.c | 32 ++++++++++++++++++++++++++------
+ 1 file changed, 26 insertions(+), 6 deletions(-)
 
 diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c
-index 170b5d611f..4d6a797b01 100644
+index 9548d58af4..e5f6a883f9 100644
 --- a/drivers/net/nfp/nfp_net.c
 +++ b/drivers/net/nfp/nfp_net.c
-@@ -1198,8 +1198,10 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
- 		.tx_rs_thresh = DEFAULT_TX_RSBIT_THRESH,
- 	};
- 
--	dev_info->flow_type_rss_offloads = ETH_RSS_NONFRAG_IPV4_TCP |
-+	dev_info->flow_type_rss_offloads = ETH_RSS_IPV4 |
-+					   ETH_RSS_NONFRAG_IPV4_TCP |
- 					   ETH_RSS_NONFRAG_IPV4_UDP |
-+					   ETH_RSS_IPV6 |
- 					   ETH_RSS_NONFRAG_IPV6_TCP |
- 					   ETH_RSS_NONFRAG_IPV6_UDP;
- 
-@@ -1876,6 +1878,18 @@ nfp_net_set_hash(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd,
+@@ -1629,6 +1629,18 @@ nfp_net_set_hash(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd,
  	case NFP_NET_RSS_IPV6_EX:
  		mbuf->packet_type |= RTE_PTYPE_INNER_L3_IPV6_EXT;
  		break;
@@ -52,8 +41,8 @@
  	default:
  		mbuf->packet_type |= RTE_PTYPE_INNER_L4_MASK;
  	}
-@@ -2457,14 +2471,22 @@ nfp_net_rss_hash_write(struct rte_eth_dev *dev,
- 	rss_hf = rss_conf->rss_hf;
+@@ -2222,14 +2234,22 @@ nfp_net_rss_hash_update(struct rte_eth_dev *dev,
+ 	}
  
  	if (rss_hf & ETH_RSS_IPV4)
 -		cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV4 |

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnx2x: fix logging to include device name' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (7 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/nfp: fix RSS' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix to disable further interrupts' " Luca Boccassi
                       ` (14 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Rasesh Mody; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From f21349b9047ebd6b3144ec7c6973241fc22e4970 Mon Sep 17 00:00:00 2001
From: Rasesh Mody <rasesh.mody@cavium.com>
Date: Sat, 29 Sep 2018 05:42:29 +0000
Subject: [PATCH] net/bnx2x: fix logging to include device name

[ upstream commit ba7eeb035a5f442414f9dca6c12a9105a16576aa ]

Fix PMD logging scheme to include device name in the messages printed.

Fixes: 540a211084a7 ("bnx2x: driver core")

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/bnx2x/bnx2x.c          | 764 +++++++++++++++--------------
 drivers/net/bnx2x/bnx2x.h          |  32 +-
 drivers/net/bnx2x/bnx2x_ethdev.c   |  84 ++--
 drivers/net/bnx2x/bnx2x_logs.h     |  27 +-
 drivers/net/bnx2x/bnx2x_rxtx.c     |  15 +-
 drivers/net/bnx2x/bnx2x_stats.c    |  35 +-
 drivers/net/bnx2x/bnx2x_vfpf.c     |  50 +-
 drivers/net/bnx2x/ecore_init.h     |   6 +-
 drivers/net/bnx2x/ecore_init_ops.h |   8 +-
 drivers/net/bnx2x/ecore_sp.c       | 258 +++++-----
 drivers/net/bnx2x/ecore_sp.h       |   4 +-
 drivers/net/bnx2x/elink.c          | 761 ++++++++++++++--------------
 12 files changed, 1056 insertions(+), 988 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index f1de336224..0e68108496 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -181,13 +181,14 @@ bnx2x_dma_alloc(struct bnx2x_softc *sc, size_t size, struct bnx2x_dma *dma,
 					SOCKET_ID_ANY,
 					0, align);
 	if (z == NULL) {
-		PMD_DRV_LOG(ERR, "DMA alloc failed for %s", msg);
+		PMD_DRV_LOG(ERR, sc, "DMA alloc failed for %s", msg);
 		return -ENOMEM;
 	}
 	dma->paddr = (uint64_t) z->phys_addr;
 	dma->vaddr = z->addr;
 
-	PMD_DRV_LOG(DEBUG, "%s: virt=%p phys=%" PRIx64, msg, dma->vaddr, dma->paddr);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "%s: virt=%p phys=%" PRIx64, msg, dma->vaddr, dma->paddr);
 
 	return 0;
 }
@@ -200,11 +201,11 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	uint32_t hw_lock_control_reg;
 	int cnt;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	/* validate the resource is within range */
 	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "resource 0x%x > HW_LOCK_MAX_RESOURCE_VALUE",
 			    resource);
 		return -1;
@@ -220,7 +221,7 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	/* validate the resource is not already taken */
 	lock_status = REG_RD(sc, hw_lock_control_reg);
 	if (lock_status & resource_bit) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "resource in use (status 0x%x bit 0x%x)",
 			    lock_status, resource_bit);
 		return -1;
@@ -236,7 +237,7 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 		DELAY(5000);
 	}
 
-	PMD_DRV_LOG(NOTICE, "Resource lock timeout!");
+	PMD_DRV_LOG(NOTICE, sc, "Resource lock timeout!");
 	return -1;
 }
 
@@ -247,11 +248,11 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	int func = SC_FUNC(sc);
 	uint32_t hw_lock_control_reg;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	/* validate the resource is within range */
 	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "resource 0x%x > HW_LOCK_MAX_RESOURCE_VALUE",
 			    resource);
 		return -1;
@@ -267,7 +268,7 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	/* validate the resource is currently taken */
 	lock_status = REG_RD(sc, hw_lock_control_reg);
 	if (!(lock_status & resource_bit)) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "resource not in use (status 0x%x bit 0x%x)",
 			    lock_status, resource_bit);
 		return -1;
@@ -369,7 +370,7 @@ bnx2x_issue_dmae_with_comp(struct bnx2x_softc *sc, struct dmae_command *dmae)
 		if (!timeout ||
 		    (sc->recovery_state != BNX2X_RECOVERY_DONE &&
 		     sc->recovery_state != BNX2X_RECOVERY_NIC_LOADING)) {
-			PMD_DRV_LOG(INFO, "DMAE timeout!");
+			PMD_DRV_LOG(INFO, sc, "DMAE timeout!");
 			return DMAE_TIMEOUT;
 		}
 
@@ -378,7 +379,7 @@ bnx2x_issue_dmae_with_comp(struct bnx2x_softc *sc, struct dmae_command *dmae)
 	}
 
 	if (*wb_comp & DMAE_PCI_ERR_FLAG) {
-		PMD_DRV_LOG(INFO, "DMAE PCI error!");
+		PMD_DRV_LOG(INFO, sc, "DMAE PCI error!");
 		return DMAE_PCI_ERROR;
 	}
 
@@ -537,7 +538,7 @@ void
 elink_cb_event_log(__rte_unused struct bnx2x_softc *sc,
 		   __rte_unused const elink_log_id_t elink_log_id, ...)
 {
-	PMD_DRV_LOG(DEBUG, "ELINK EVENT LOG (%d)", elink_log_id);
+	PMD_DRV_LOG(DEBUG, sc, "ELINK EVENT LOG (%d)", elink_log_id);
 }
 
 static int bnx2x_set_spio(struct bnx2x_softc *sc, int spio, uint32_t mode)
@@ -546,7 +547,7 @@ static int bnx2x_set_spio(struct bnx2x_softc *sc, int spio, uint32_t mode)
 
 	/* Only 2 SPIOs are configurable */
 	if ((spio != MISC_SPIO_SPIO4) && (spio != MISC_SPIO_SPIO5)) {
-		PMD_DRV_LOG(NOTICE, "Invalid SPIO 0x%x", spio);
+		PMD_DRV_LOG(NOTICE, sc, "Invalid SPIO 0x%x", spio);
 		return -1;
 	}
 
@@ -596,7 +597,7 @@ static int bnx2x_gpio_read(struct bnx2x_softc *sc, int gpio_num, uint8_t port)
 	uint32_t gpio_reg;
 
 	if (gpio_num > MISC_REGISTERS_GPIO_3) {
-		PMD_DRV_LOG(NOTICE, "Invalid GPIO %d", gpio_num);
+		PMD_DRV_LOG(NOTICE, sc, "Invalid GPIO %d", gpio_num);
 		return -1;
 	}
 
@@ -621,7 +622,7 @@ bnx2x_gpio_write(struct bnx2x_softc *sc, int gpio_num, uint32_t mode, uint8_t po
 	uint32_t gpio_reg;
 
 	if (gpio_num > MISC_REGISTERS_GPIO_3) {
-		PMD_DRV_LOG(NOTICE, "Invalid GPIO %d", gpio_num);
+		PMD_DRV_LOG(NOTICE, sc, "Invalid GPIO %d", gpio_num);
 		return -1;
 	}
 
@@ -690,7 +691,8 @@ bnx2x_gpio_mult_write(struct bnx2x_softc *sc, uint8_t pins, uint32_t mode)
 		break;
 
 	default:
-		PMD_DRV_LOG(NOTICE, "Invalid GPIO mode assignment %d", mode);
+		PMD_DRV_LOG(NOTICE, sc,
+			    "Invalid GPIO mode assignment %d", mode);
 		bnx2x_release_hw_lock(sc, HW_LOCK_RESOURCE_GPIO);
 		return -1;
 	}
@@ -716,7 +718,7 @@ bnx2x_gpio_int_write(struct bnx2x_softc *sc, int gpio_num, uint32_t mode,
 	uint32_t gpio_reg;
 
 	if (gpio_num > MISC_REGISTERS_GPIO_3) {
-		PMD_DRV_LOG(NOTICE, "Invalid GPIO %d", gpio_num);
+		PMD_DRV_LOG(NOTICE, sc, "Invalid GPIO %d", gpio_num);
 		return -1;
 	}
 
@@ -793,7 +795,7 @@ elink_cb_fw_command(struct bnx2x_softc *sc, uint32_t command, uint32_t param)
 	SHMEM_WR(sc, func_mb[mb_idx].drv_mb_param, param);
 	SHMEM_WR(sc, func_mb[mb_idx].drv_mb_header, (command | seq));
 
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "wrote command 0x%08x to FW MB param 0x%08x",
 		    (command | seq), param);
 
@@ -808,7 +810,7 @@ elink_cb_fw_command(struct bnx2x_softc *sc, uint32_t command, uint32_t param)
 		rc &= FW_MSG_CODE_MASK;
 	} else {
 		/* Ruh-roh! */
-		PMD_DRV_LOG(NOTICE, "FW failed to respond!");
+		PMD_DRV_LOG(NOTICE, sc, "FW failed to respond!");
 		rc = 0;
 	}
 
@@ -1026,12 +1028,12 @@ bnx2x_sp_post(struct bnx2x_softc *sc, int command, int cid, uint32_t data_hi,
 
 	if (common) {
 		if (!atomic_load_acq_long(&sc->eq_spq_left)) {
-			PMD_DRV_LOG(INFO, "EQ ring is full!");
+			PMD_DRV_LOG(INFO, sc, "EQ ring is full!");
 			return -1;
 		}
 	} else {
 		if (!atomic_load_acq_long(&sc->cq_spq_left)) {
-			PMD_DRV_LOG(INFO, "SPQ ring is full!");
+			PMD_DRV_LOG(INFO, sc, "SPQ ring is full!");
 			return -1;
 		}
 	}
@@ -1064,7 +1066,7 @@ bnx2x_sp_post(struct bnx2x_softc *sc, int command, int cid, uint32_t data_hi,
 		atomic_subtract_acq_long(&sc->cq_spq_left, 1);
 	}
 
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "SPQE[%x] (%x:%x) (cmd, common?) (%d,%d) hw_cid %x"
 		    "data (%x:%x) type(0x%x) left (CQ, EQ) (%lx,%lx)",
 		    sc->spq_prod_idx,
@@ -1137,44 +1139,45 @@ bnx2x_sp_event(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
 	enum ecore_queue_cmd drv_cmd = ECORE_Q_CMD_MAX;
 	struct ecore_queue_sp_obj *q_obj = &BNX2X_SP_OBJ(sc, fp).q_obj;
 
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "fp=%d cid=%d got ramrod #%d state is %x type is %d",
 		    fp->index, cid, command, sc->state,
 		    rr_cqe->ramrod_cqe.ramrod_type);
 
 	switch (command) {
 	case (RAMROD_CMD_ID_ETH_CLIENT_UPDATE):
-		PMD_DRV_LOG(DEBUG, "got UPDATE ramrod. CID %d", cid);
+		PMD_DRV_LOG(DEBUG, sc, "got UPDATE ramrod. CID %d", cid);
 		drv_cmd = ECORE_Q_CMD_UPDATE;
 		break;
 
 	case (RAMROD_CMD_ID_ETH_CLIENT_SETUP):
-		PMD_DRV_LOG(DEBUG, "got MULTI[%d] setup ramrod", cid);
+		PMD_DRV_LOG(DEBUG, sc, "got MULTI[%d] setup ramrod", cid);
 		drv_cmd = ECORE_Q_CMD_SETUP;
 		break;
 
 	case (RAMROD_CMD_ID_ETH_TX_QUEUE_SETUP):
-		PMD_DRV_LOG(DEBUG, "got MULTI[%d] tx-only setup ramrod", cid);
+		PMD_DRV_LOG(DEBUG, sc,
+			    "got MULTI[%d] tx-only setup ramrod", cid);
 		drv_cmd = ECORE_Q_CMD_SETUP_TX_ONLY;
 		break;
 
 	case (RAMROD_CMD_ID_ETH_HALT):
-		PMD_DRV_LOG(DEBUG, "got MULTI[%d] halt ramrod", cid);
+		PMD_DRV_LOG(DEBUG, sc, "got MULTI[%d] halt ramrod", cid);
 		drv_cmd = ECORE_Q_CMD_HALT;
 		break;
 
 	case (RAMROD_CMD_ID_ETH_TERMINATE):
-		PMD_DRV_LOG(DEBUG, "got MULTI[%d] teminate ramrod", cid);
+		PMD_DRV_LOG(DEBUG, sc, "got MULTI[%d] teminate ramrod", cid);
 		drv_cmd = ECORE_Q_CMD_TERMINATE;
 		break;
 
 	case (RAMROD_CMD_ID_ETH_EMPTY):
-		PMD_DRV_LOG(DEBUG, "got MULTI[%d] empty ramrod", cid);
+		PMD_DRV_LOG(DEBUG, sc, "got MULTI[%d] empty ramrod", cid);
 		drv_cmd = ECORE_Q_CMD_EMPTY;
 		break;
 
 	default:
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "ERROR: unexpected MC reply (%d)"
 			    "on fp[%d]", command, fp->index);
 		return;
@@ -1196,7 +1199,7 @@ bnx2x_sp_event(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
 
 	atomic_add_acq_long(&sc->cq_spq_left, 1);
 
-	PMD_DRV_LOG(DEBUG, "sc->cq_spq_left 0x%lx",
+	PMD_DRV_LOG(DEBUG, sc, "sc->cq_spq_left 0x%lx",
 		    atomic_load_acq_long(&sc->cq_spq_left));
 }
 
@@ -1392,7 +1395,7 @@ bnx2x_del_all_macs(struct bnx2x_softc *sc, struct ecore_vlan_mac_obj *mac_obj,
 
 	rc = mac_obj->delete_all(sc, mac_obj, &vlan_mac_flags, &ramrod_flags);
 	if (rc < 0)
-		PMD_DRV_LOG(ERR, "Failed to delete MACs (%d)", rc);
+		PMD_DRV_LOG(ERR, sc, "Failed to delete MACs (%d)", rc);
 
 	return rc;
 }
@@ -1543,13 +1546,13 @@ static int bnx2x_nic_load_no_mcp(struct bnx2x_softc *sc)
 	int path = SC_PATH(sc);
 	int port = SC_PORT(sc);
 
-	PMD_DRV_LOG(INFO, "NO MCP - load counts[%d]      %d, %d, %d",
+	PMD_DRV_LOG(INFO, sc, "NO MCP - load counts[%d]      %d, %d, %d",
 		    path, load_count[path][0], load_count[path][1],
 		    load_count[path][2]);
 
 	load_count[path][0]++;
 	load_count[path][1 + port]++;
-	PMD_DRV_LOG(INFO, "NO MCP - new load counts[%d]  %d, %d, %d",
+	PMD_DRV_LOG(INFO, sc, "NO MCP - new load counts[%d]  %d, %d, %d",
 		    path, load_count[path][0], load_count[path][1],
 		    load_count[path][2]);
 	if (load_count[path][0] == 1)
@@ -1566,12 +1569,12 @@ static int bnx2x_nic_unload_no_mcp(struct bnx2x_softc *sc)
 	int port = SC_PORT(sc);
 	int path = SC_PATH(sc);
 
-	PMD_DRV_LOG(INFO, "NO MCP - load counts[%d]      %d, %d, %d",
+	PMD_DRV_LOG(INFO, sc, "NO MCP - load counts[%d]      %d, %d, %d",
 		    path, load_count[path][0], load_count[path][1],
 		    load_count[path][2]);
 	load_count[path][0]--;
 	load_count[path][1 + port]--;
-	PMD_DRV_LOG(INFO, "NO MCP - new load counts[%d]  %d, %d, %d",
+	PMD_DRV_LOG(INFO, sc, "NO MCP - new load counts[%d]  %d, %d, %d",
 		    path, load_count[path][0], load_count[path][1],
 		    load_count[path][2]);
 	if (load_count[path][0] == 0) {
@@ -1651,7 +1654,7 @@ static int bnx2x_func_wait_started(struct bnx2x_softc *sc)
 		 */
 		struct ecore_func_state_params func_params = { NULL };
 
-		PMD_DRV_LOG(NOTICE, "Unexpected function state! "
+		PMD_DRV_LOG(NOTICE, sc, "Unexpected function state! "
 			    "Forcing STARTED-->TX_STOPPED-->STARTED");
 
 		func_params.f_obj = &sc->func_obj;
@@ -1675,7 +1678,7 @@ static int bnx2x_stop_queue(struct bnx2x_softc *sc, int index)
 	struct ecore_queue_state_params q_params = { NULL };
 	int rc;
 
-	PMD_DRV_LOG(DEBUG, "stopping queue %d cid %d", index, fp->index);
+	PMD_DRV_LOG(DEBUG, sc, "stopping queue %d cid %d", index, fp->index);
 
 	q_params.q_obj = &sc->sp_objs[fp->index].q_obj;
 	/* We want to wait for completion in this context */
@@ -1726,7 +1729,7 @@ static uint8_t bnx2x_wait_sp_comp(struct bnx2x_softc *sc, unsigned long mask)
 
 	tmp = atomic_load_acq_long(&sc->sp_state);
 	if (tmp & mask) {
-		PMD_DRV_LOG(INFO, "Filtering completion timed out: "
+		PMD_DRV_LOG(INFO, sc, "Filtering completion timed out: "
 			    "sp_state 0x%lx, mask 0x%lx", tmp, mask);
 		return FALSE;
 	}
@@ -1752,7 +1755,7 @@ static int bnx2x_func_stop(struct bnx2x_softc *sc)
 	 */
 	rc = ecore_func_state_change(sc, &func_params);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "FUNC_STOP ramrod failed. "
+		PMD_DRV_LOG(NOTICE, sc, "FUNC_STOP ramrod failed. "
 			    "Running a dry transaction");
 		bnx2x_set_bit(RAMROD_DRV_CLR_ONLY, &func_params.ramrod_flags);
 		return ecore_func_state_change(sc, &func_params);
@@ -1801,14 +1804,16 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
 	rc = bnx2x_del_all_macs(sc, &sc->sp_objs[0].mac_obj, ECORE_ETH_MAC,
 			      FALSE);
 	if (rc < 0) {
-		PMD_DRV_LOG(NOTICE, "Failed to delete all ETH MACs (%d)", rc);
+		PMD_DRV_LOG(NOTICE, sc,
+			    "Failed to delete all ETH MACs (%d)", rc);
 	}
 
 	/* Clean up UC list  */
 	rc = bnx2x_del_all_macs(sc, &sc->sp_objs[0].mac_obj, ECORE_UC_LIST_MAC,
 			      TRUE);
 	if (rc < 0) {
-		PMD_DRV_LOG(NOTICE, "Failed to delete UC MACs list (%d)", rc);
+		PMD_DRV_LOG(NOTICE, sc,
+			    "Failed to delete UC MACs list (%d)", rc);
 	}
 
 	/* Disable LLH */
@@ -1831,7 +1836,7 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
 	rparam.mcast_obj = &sc->mcast_obj;
 	rc = ecore_config_mcast(sc, &rparam, ECORE_MCAST_CMD_DEL);
 	if (rc < 0) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "Failed to send DEL MCAST command (%d)", rc);
 	}
 
@@ -1848,7 +1853,7 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
 	 */
 	rc = bnx2x_func_wait_started(sc);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "bnx2x_func_wait_started failed");
+		PMD_DRV_LOG(NOTICE, sc, "bnx2x_func_wait_started failed");
 	}
 
 	/*
@@ -1866,14 +1871,14 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
 	 * very wrong has happen.
 	 */
 	if (!bnx2x_wait_sp_comp(sc, ~0x0UL)) {
-		PMD_DRV_LOG(NOTICE, "Common slow path ramrods got stuck!");
+		PMD_DRV_LOG(NOTICE, sc, "Common slow path ramrods got stuck!");
 	}
 
 unload_error:
 
 	rc = bnx2x_func_stop(sc);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "Function stop failed!");
+		PMD_DRV_LOG(NOTICE, sc, "Function stop failed!");
 	}
 
 	/* disable HW interrupts */
@@ -1882,7 +1887,7 @@ unload_error:
 	/* Reset the chip */
 	rc = bnx2x_reset_hw(sc, reset_code);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "Hardware reset failed");
+		PMD_DRV_LOG(NOTICE, sc, "Hardware reset failed");
 	}
 
 	/* Report UNLOAD_DONE to MCP */
@@ -1893,7 +1898,7 @@ static void bnx2x_disable_close_the_gate(struct bnx2x_softc *sc)
 {
 	uint32_t val;
 
-	PMD_DRV_LOG(DEBUG, "Disabling 'close the gates'");
+	PMD_DRV_LOG(DEBUG, sc, "Disabling 'close the gates'");
 
 	val = REG_RD(sc, MISC_REG_AEU_GENERAL_MASK);
 	val &= ~(MISC_AEU_GENERAL_MASK_REG_AEU_PXP_CLOSE_MASK |
@@ -1924,7 +1929,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
 	rc = mac_obj->delete_all(sc, &sc->sp_objs->mac_obj, &vlan_mac_flags,
 				 &ramrod_flags);
 	if (rc != 0) {
-		PMD_DRV_LOG(NOTICE, "Failed to clean ETH MACs (%d)", rc);
+		PMD_DRV_LOG(NOTICE, sc, "Failed to clean ETH MACs (%d)", rc);
 	}
 
 	/* Cleanup UC list */
@@ -1932,7 +1937,8 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
 	bnx2x_set_bit(ECORE_UC_LIST_MAC, &vlan_mac_flags);
 	rc = mac_obj->delete_all(sc, mac_obj, &vlan_mac_flags, &ramrod_flags);
 	if (rc != 0) {
-		PMD_DRV_LOG(NOTICE, "Failed to clean UC list MACs (%d)", rc);
+		PMD_DRV_LOG(NOTICE, sc,
+			    "Failed to clean UC list MACs (%d)", rc);
 	}
 
 	/* Now clean mcast object... */
@@ -1943,7 +1949,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
 	/* Add a DEL command... */
 	rc = ecore_config_mcast(sc, &rparam, ECORE_MCAST_CMD_DEL);
 	if (rc < 0) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "Failed to send DEL MCAST command (%d)", rc);
 	}
 
@@ -1952,7 +1958,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
 	rc = ecore_config_mcast(sc, &rparam, ECORE_MCAST_CMD_CONT);
 	while (rc != 0) {
 		if (rc < 0) {
-			PMD_DRV_LOG(NOTICE,
+			PMD_DRV_LOG(NOTICE, sc,
 				    "Failed to clean MCAST object (%d)", rc);
 			return;
 		}
@@ -1969,7 +1975,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
 	uint8_t global = FALSE;
 	uint32_t val;
 
-	PMD_DRV_LOG(DEBUG, "Starting NIC unload...");
+	PMD_DRV_LOG(DEBUG, sc, "Starting NIC unload...");
 
 	/* stop the periodic callout */
 	bnx2x_periodic_stop(sc);
@@ -1996,7 +2002,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
 		bnx2x_release_leader_lock(sc);
 		mb();
 
-		PMD_DRV_LOG(NOTICE, "Can't unload in closed or error state");
+		PMD_DRV_LOG(NOTICE, sc, "Can't unload in closed or error state");
 		return -1;
 	}
 
@@ -2101,7 +2107,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
 		bnx2x_disable_close_the_gate(sc);
 	}
 
-	PMD_DRV_LOG(DEBUG, "Ended NIC unload");
+	PMD_DRV_LOG(DEBUG, sc, "Ended NIC unload");
 
 	return 0;
 }
@@ -2249,7 +2255,7 @@ static void bnx2x_ilt_set_info(struct bnx2x_softc *sc)
 	struct ecore_ilt *ilt = sc->ilt;
 	uint16_t line = 0;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	ilt->start_line = FUNC_ILT_BASE(SC_FUNC(sc));
 
@@ -2403,7 +2409,7 @@ static int bnx2x_alloc_mem(struct bnx2x_softc *sc)
 	bnx2x_alloc_ilt_lines_mem(sc);
 
 	if (ecore_ilt_mem_op(sc, ILT_MEMOP_ALLOC)) {
-		PMD_DRV_LOG(NOTICE, "ecore_ilt_mem_op ILT_MEMOP_ALLOC failed");
+		PMD_DRV_LOG(NOTICE, sc, "ecore_ilt_mem_op ILT_MEMOP_ALLOC failed");
 		bnx2x_free_mem(sc);
 		return -1;
 	}
@@ -2606,7 +2612,7 @@ static void bnx2x_set_pf_load(struct bnx2x_softc *sc)
 
 	bnx2x_acquire_hw_lock(sc, HW_LOCK_RESOURCE_RECOVERY_REG);
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	val = REG_RD(sc, BNX2X_RECOVERY_GLOB_REG);
 
@@ -2659,14 +2665,14 @@ static uint8_t bnx2x_clear_pf_load(struct bnx2x_softc *sc)
 /* send load requrest to mcp and analyze response */
 static int bnx2x_nic_load_request(struct bnx2x_softc *sc, uint32_t * load_code)
 {
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	/* init fw_seq */
 	sc->fw_seq =
 	    (SHMEM_RD(sc, func_mb[SC_FW_MB_IDX(sc)].drv_mb_header) &
 	     DRV_MSG_SEQ_NUMBER_MASK);
 
-	PMD_DRV_LOG(DEBUG, "initial fw_seq 0x%04x", sc->fw_seq);
+	PMD_DRV_LOG(DEBUG, sc, "initial fw_seq 0x%04x", sc->fw_seq);
 
 #ifdef BNX2X_PULSE
 	/* get the current FW pulse sequence */
@@ -2685,13 +2691,13 @@ static int bnx2x_nic_load_request(struct bnx2x_softc *sc, uint32_t * load_code)
 
 	/* if the MCP fails to respond we must abort */
 	if (!(*load_code)) {
-		PMD_DRV_LOG(NOTICE, "MCP response failure!");
+		PMD_DRV_LOG(NOTICE, sc, "MCP response failure!");
 		return -1;
 	}
 
 	/* if MCP refused then must abort */
 	if ((*load_code) == FW_MSG_CODE_DRV_LOAD_REFUSED) {
-		PMD_DRV_LOG(NOTICE, "MCP refused load request");
+		PMD_DRV_LOG(NOTICE, sc, "MCP refused load request");
 		return -1;
 	}
 
@@ -2718,12 +2724,12 @@ static int bnx2x_nic_load_analyze_req(struct bnx2x_softc *sc, uint32_t load_code
 
 		/* read loaded FW from chip */
 		loaded_fw = REG_RD(sc, XSEM_REG_PRAM);
-		PMD_DRV_LOG(DEBUG, "loaded FW 0x%08x / my FW 0x%08x",
+		PMD_DRV_LOG(DEBUG, sc, "loaded FW 0x%08x / my FW 0x%08x",
 			    loaded_fw, my_fw);
 
 		/* abort nic load if version mismatch */
 		if (my_fw != loaded_fw) {
-			PMD_DRV_LOG(NOTICE,
+			PMD_DRV_LOG(NOTICE, sc,
 				    "FW 0x%08x already loaded (mine is 0x%08x)",
 				    loaded_fw, my_fw);
 			return -1;
@@ -2738,7 +2744,7 @@ static void bnx2x_nic_load_pmf(struct bnx2x_softc *sc, uint32_t load_code)
 {
 	uint32_t ncsi_oem_data_addr;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
 	    (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) ||
@@ -2753,7 +2759,7 @@ static void bnx2x_nic_load_pmf(struct bnx2x_softc *sc, uint32_t load_code)
 		sc->port.pmf = 0;
 	}
 
-	PMD_DRV_LOG(DEBUG, "pmf %d", sc->port.pmf);
+	PMD_DRV_LOG(DEBUG, sc, "pmf %d", sc->port.pmf);
 
 	if (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) {
 		if (SHMEM2_HAS(sc, ncsi_oem_data_addr)) {
@@ -2796,10 +2802,10 @@ static void bnx2x_read_mf_cfg(struct bnx2x_softc *sc)
 
 	if (sc->devinfo.mf_info.mf_config[SC_VN(sc)] &
 	    FUNC_MF_CFG_FUNC_DISABLED) {
-		PMD_DRV_LOG(DEBUG, "mf_cfg function disabled");
+		PMD_DRV_LOG(DEBUG, sc, "mf_cfg function disabled");
 		sc->flags |= BNX2X_MF_FUNC_DIS;
 	} else {
-		PMD_DRV_LOG(DEBUG, "mf_cfg function enabled");
+		PMD_DRV_LOG(DEBUG, sc, "mf_cfg function enabled");
 		sc->flags &= ~BNX2X_MF_FUNC_DIS;
 	}
 }
@@ -2820,7 +2826,7 @@ static int bnx2x_acquire_alr(struct bnx2x_softc *sc)
 	}
 
 	if (!(val & (1L << 31))) {
-		PMD_DRV_LOG(NOTICE, "Cannot acquire MCP access lock register");
+		PMD_DRV_LOG(NOTICE, sc, "Cannot acquire MCP access lock register");
 		return -1;
 	}
 
@@ -2848,7 +2854,7 @@ static void bnx2x_fan_failure(struct bnx2x_softc *sc)
 		 ext_phy_config);
 
 	/* log the failure */
-	PMD_DRV_LOG(INFO,
+	PMD_DRV_LOG(INFO, sc,
 		    "Fan Failure has caused the driver to shutdown "
 		    "the card to prevent permanent damage. "
 		    "Please contact OEM Support for assistance");
@@ -2926,7 +2932,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
 	uint32_t cnt;
 
 	if (sc->attn_state & asserted) {
-		PMD_DRV_LOG(ERR, "IGU ERROR attn=0x%08x", asserted);
+		PMD_DRV_LOG(ERR, sc, "IGU ERROR attn=0x%08x", asserted);
 	}
 
 	bnx2x_acquire_hw_lock(sc, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port);
@@ -2958,45 +2964,45 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
 		}
 
 		if (asserted & ATTN_SW_TIMER_4_FUNC) {
-			PMD_DRV_LOG(DEBUG, "ATTN_SW_TIMER_4_FUNC!");
+			PMD_DRV_LOG(DEBUG, sc, "ATTN_SW_TIMER_4_FUNC!");
 		}
 
 		if (asserted & GPIO_2_FUNC) {
-			PMD_DRV_LOG(DEBUG, "GPIO_2_FUNC!");
+			PMD_DRV_LOG(DEBUG, sc, "GPIO_2_FUNC!");
 		}
 
 		if (asserted & GPIO_3_FUNC) {
-			PMD_DRV_LOG(DEBUG, "GPIO_3_FUNC!");
+			PMD_DRV_LOG(DEBUG, sc, "GPIO_3_FUNC!");
 		}
 
 		if (asserted & GPIO_4_FUNC) {
-			PMD_DRV_LOG(DEBUG, "GPIO_4_FUNC!");
+			PMD_DRV_LOG(DEBUG, sc, "GPIO_4_FUNC!");
 		}
 
 		if (port == 0) {
 			if (asserted & ATTN_GENERAL_ATTN_1) {
-				PMD_DRV_LOG(DEBUG, "ATTN_GENERAL_ATTN_1!");
+				PMD_DRV_LOG(DEBUG, sc, "ATTN_GENERAL_ATTN_1!");
 				REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_1, 0x0);
 			}
 			if (asserted & ATTN_GENERAL_ATTN_2) {
-				PMD_DRV_LOG(DEBUG, "ATTN_GENERAL_ATTN_2!");
+				PMD_DRV_LOG(DEBUG, sc, "ATTN_GENERAL_ATTN_2!");
 				REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_2, 0x0);
 			}
 			if (asserted & ATTN_GENERAL_ATTN_3) {
-				PMD_DRV_LOG(DEBUG, "ATTN_GENERAL_ATTN_3!");
+				PMD_DRV_LOG(DEBUG, sc, "ATTN_GENERAL_ATTN_3!");
 				REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_3, 0x0);
 			}
 		} else {
 			if (asserted & ATTN_GENERAL_ATTN_4) {
-				PMD_DRV_LOG(DEBUG, "ATTN_GENERAL_ATTN_4!");
+				PMD_DRV_LOG(DEBUG, sc, "ATTN_GENERAL_ATTN_4!");
 				REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_4, 0x0);
 			}
 			if (asserted & ATTN_GENERAL_ATTN_5) {
-				PMD_DRV_LOG(DEBUG, "ATTN_GENERAL_ATTN_5!");
+				PMD_DRV_LOG(DEBUG, sc, "ATTN_GENERAL_ATTN_5!");
 				REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_5, 0x0);
 			}
 			if (asserted & ATTN_GENERAL_ATTN_6) {
-				PMD_DRV_LOG(DEBUG, "ATTN_GENERAL_ATTN_6!");
+				PMD_DRV_LOG(DEBUG, sc, "ATTN_GENERAL_ATTN_6!");
 				REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_6, 0x0);
 			}
 		}
@@ -3010,7 +3016,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
 		reg_addr = (BAR_IGU_INTMEM + IGU_CMD_ATTN_BIT_SET_UPPER * 8);
 	}
 
-	PMD_DRV_LOG(DEBUG, "about to mask 0x%08x at %s addr 0x%08x",
+	PMD_DRV_LOG(DEBUG, sc, "about to mask 0x%08x at %s addr 0x%08x",
 		    asserted,
 		    (sc->devinfo.int_block == INT_BLOCK_HC) ? "HC" : "IGU",
 		    reg_addr);
@@ -3032,7 +3038,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
 				 && (++cnt < MAX_IGU_ATTN_ACK_TO));
 
 			if (!igu_acked) {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Failed to verify IGU ack on time");
 			}
 
@@ -3048,7 +3054,7 @@ static void
 bnx2x_print_next_block(__rte_unused struct bnx2x_softc *sc, __rte_unused int idx,
 		     __rte_unused const char *blk)
 {
-	PMD_DRV_LOG(INFO, "%s%s", idx ? ", " : "", blk);
+	PMD_DRV_LOG(INFO, sc, "%s%s", idx ? ", " : "", blk);
 }
 
 static int
@@ -3356,7 +3362,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
 	    (sig[2] & HW_PRTY_ASSERT_SET_2) ||
 	    (sig[3] & HW_PRTY_ASSERT_SET_3) ||
 	    (sig[4] & HW_PRTY_ASSERT_SET_4)) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "Parity error: HW block parity attention:"
 			    "[0]:0x%08x [1]:0x%08x [2]:0x%08x [3]:0x%08x [4]:0x%08x",
 			    (uint32_t) (sig[0] & HW_PRTY_ASSERT_SET_0),
@@ -3366,7 +3372,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
 			    (uint32_t) (sig[4] & HW_PRTY_ASSERT_SET_4));
 
 		if (print)
-			PMD_DRV_LOG(INFO, "Parity errors detected in blocks: ");
+			PMD_DRV_LOG(INFO, sc, "Parity errors detected in blocks: ");
 
 		par_num =
 		    bnx2x_check_blocks_with_parity0(sc, sig[0] &
@@ -3390,7 +3396,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
 						  par_num, print);
 
 		if (print)
-			PMD_DRV_LOG(INFO, "");
+			PMD_DRV_LOG(INFO, sc, "");
 
 		return TRUE;
 	}
@@ -3422,64 +3428,64 @@ static void bnx2x_attn_int_deasserted4(struct bnx2x_softc *sc, uint32_t attn)
 
 	if (attn & AEU_INPUTS_ATTN_BITS_PGLUE_HW_INTERRUPT) {
 		val = REG_RD(sc, PGLUE_B_REG_PGLUE_B_INT_STS_CLR);
-		PMD_DRV_LOG(INFO, "ERROR: PGLUE hw attention 0x%08x", val);
+		PMD_DRV_LOG(INFO, sc, "ERROR: PGLUE hw attention 0x%08x", val);
 		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_ADDRESS_ERROR)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_ADDRESS_ERROR");
 		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_INCORRECT_RCV_BEHAVIOR)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_INCORRECT_RCV_BEHAVIOR");
 		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_WAS_ERROR_ATTN)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_WAS_ERROR_ATTN");
 		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_VF_LENGTH_VIOLATION_ATTN)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_VF_LENGTH_VIOLATION_ATTN");
 		if (val &
 		    PGLUE_B_PGLUE_B_INT_STS_REG_VF_GRC_SPACE_VIOLATION_ATTN)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_VF_GRC_SPACE_VIOLATION_ATTN");
 		if (val &
 		    PGLUE_B_PGLUE_B_INT_STS_REG_VF_MSIX_BAR_VIOLATION_ATTN)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_VF_MSIX_BAR_VIOLATION_ATTN");
 		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_TCPL_ERROR_ATTN)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_TCPL_ERROR_ATTN");
 		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_TCPL_IN_TWO_RCBS_ATTN)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_TCPL_IN_TWO_RCBS_ATTN");
 		if (val & PGLUE_B_PGLUE_B_INT_STS_REG_CSSNOOP_FIFO_OVERFLOW)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: PGLUE_B_PGLUE_B_INT_STS_REG_CSSNOOP_FIFO_OVERFLOW");
 	}
 
 	if (attn & AEU_INPUTS_ATTN_BITS_ATC_HW_INTERRUPT) {
 		val = REG_RD(sc, ATC_REG_ATC_INT_STS_CLR);
-		PMD_DRV_LOG(INFO, "ERROR: ATC hw attention 0x%08x", val);
+		PMD_DRV_LOG(INFO, sc, "ERROR: ATC hw attention 0x%08x", val);
 		if (val & ATC_ATC_INT_STS_REG_ADDRESS_ERROR)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: ATC_ATC_INT_STS_REG_ADDRESS_ERROR");
 		if (val & ATC_ATC_INT_STS_REG_ATC_TCPL_TO_NOT_PEND)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: ATC_ATC_INT_STS_REG_ATC_TCPL_TO_NOT_PEND");
 		if (val & ATC_ATC_INT_STS_REG_ATC_GPA_MULTIPLE_HITS)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: ATC_ATC_INT_STS_REG_ATC_GPA_MULTIPLE_HITS");
 		if (val & ATC_ATC_INT_STS_REG_ATC_RCPL_TO_EMPTY_CNT)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: ATC_ATC_INT_STS_REG_ATC_RCPL_TO_EMPTY_CNT");
 		if (val & ATC_ATC_INT_STS_REG_ATC_TCPL_ERROR)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: ATC_ATC_INT_STS_REG_ATC_TCPL_ERROR");
 		if (val & ATC_ATC_INT_STS_REG_ATC_IREQ_LESS_THAN_STU)
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "ERROR: ATC_ATC_INT_STS_REG_ATC_IREQ_LESS_THAN_STU");
 	}
 
 	if (attn & (AEU_INPUTS_ATTN_BITS_PGLUE_PARITY_ERROR |
 		    AEU_INPUTS_ATTN_BITS_ATC_PARITY_ERROR)) {
-		PMD_DRV_LOG(INFO,
+		PMD_DRV_LOG(INFO, sc,
 			    "ERROR: FATAL parity attention set4 0x%08x",
 			    (uint32_t) (attn &
 					(AEU_INPUTS_ATTN_BITS_PGLUE_PARITY_ERROR
@@ -3602,11 +3608,11 @@ static void bnx2x_dcc_event(struct bnx2x_softc *sc, uint32_t dcc_event)
  */
 		if (sc->devinfo.
 		    mf_info.mf_config[SC_VN(sc)] & FUNC_MF_CFG_FUNC_DISABLED) {
-			PMD_DRV_LOG(DEBUG, "mf_cfg function disabled");
+			PMD_DRV_LOG(DEBUG, sc, "mf_cfg function disabled");
 			sc->flags |= BNX2X_MF_FUNC_DIS;
 			bnx2x_e1h_disable(sc);
 		} else {
-			PMD_DRV_LOG(DEBUG, "mf_cfg function enabled");
+			PMD_DRV_LOG(DEBUG, sc, "mf_cfg function enabled");
 			sc->flags &= ~BNX2X_MF_FUNC_DIS;
 			bnx2x_e1h_enable(sc);
 		}
@@ -3661,7 +3667,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
 	last_idx =
 	    REG_RD8(sc, BAR_XSTRORM_INTMEM + XSTORM_ASSERT_LIST_INDEX_OFFSET);
 	if (last_idx)
-		PMD_DRV_LOG(ERR, "XSTORM_ASSERT_LIST_INDEX 0x%x", last_idx);
+		PMD_DRV_LOG(ERR, sc, "XSTORM_ASSERT_LIST_INDEX 0x%x", last_idx);
 
 	/* print the asserts */
 	for (i = 0; i < STORM_ASSERT_ARRAY_SIZE; i++) {
@@ -3683,7 +3689,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
 			   12);
 
 		if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) {
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "XSTORM_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x",
 				    i, row3, row2, row1, row0);
 			rc++;
@@ -3696,7 +3702,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
 	last_idx =
 	    REG_RD8(sc, BAR_TSTRORM_INTMEM + TSTORM_ASSERT_LIST_INDEX_OFFSET);
 	if (last_idx) {
-		PMD_DRV_LOG(ERR, "TSTORM_ASSERT_LIST_INDEX 0x%x", last_idx);
+		PMD_DRV_LOG(ERR, sc, "TSTORM_ASSERT_LIST_INDEX 0x%x", last_idx);
 	}
 
 	/* print the asserts */
@@ -3719,7 +3725,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
 			   12);
 
 		if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) {
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "TSTORM_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x",
 				    i, row3, row2, row1, row0);
 			rc++;
@@ -3732,7 +3738,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
 	last_idx =
 	    REG_RD8(sc, BAR_CSTRORM_INTMEM + CSTORM_ASSERT_LIST_INDEX_OFFSET);
 	if (last_idx) {
-		PMD_DRV_LOG(ERR, "CSTORM_ASSERT_LIST_INDEX 0x%x", last_idx);
+		PMD_DRV_LOG(ERR, sc, "CSTORM_ASSERT_LIST_INDEX 0x%x", last_idx);
 	}
 
 	/* print the asserts */
@@ -3755,7 +3761,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
 			   12);
 
 		if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) {
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "CSTORM_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x",
 				    i, row3, row2, row1, row0);
 			rc++;
@@ -3768,7 +3774,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
 	last_idx =
 	    REG_RD8(sc, BAR_USTRORM_INTMEM + USTORM_ASSERT_LIST_INDEX_OFFSET);
 	if (last_idx) {
-		PMD_DRV_LOG(ERR, "USTORM_ASSERT_LIST_INDEX 0x%x", last_idx);
+		PMD_DRV_LOG(ERR, sc, "USTORM_ASSERT_LIST_INDEX 0x%x", last_idx);
 	}
 
 	/* print the asserts */
@@ -3791,7 +3797,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
 			   12);
 
 		if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) {
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "USTORM_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x",
 				    i, row3, row2, row1, row0);
 			rc++;
@@ -3856,7 +3862,7 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
 
 		} else if (attn & BNX2X_MC_ASSERT_BITS) {
 
-			PMD_DRV_LOG(ERR, "MC assert!");
+			PMD_DRV_LOG(ERR, sc, "MC assert!");
 			bnx2x_mc_assert(sc);
 			REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_10, 0);
 			REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_9, 0);
@@ -3866,24 +3872,24 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
 
 		} else if (attn & BNX2X_MCP_ASSERT) {
 
-			PMD_DRV_LOG(ERR, "MCP assert!");
+			PMD_DRV_LOG(ERR, sc, "MCP assert!");
 			REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_11, 0);
 
 		} else {
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "Unknown HW assert! (attn 0x%08x)", attn);
 		}
 	}
 
 	if (attn & EVEREST_LATCHED_ATTN_IN_USE_MASK) {
-		PMD_DRV_LOG(ERR, "LATCHED attention 0x%08x (masked)", attn);
+		PMD_DRV_LOG(ERR, sc, "LATCHED attention 0x%08x (masked)", attn);
 		if (attn & BNX2X_GRC_TIMEOUT) {
 			val = REG_RD(sc, MISC_REG_GRC_TIMEOUT_ATTN);
-			PMD_DRV_LOG(ERR, "GRC time-out 0x%08x", val);
+			PMD_DRV_LOG(ERR, sc, "GRC time-out 0x%08x", val);
 		}
 		if (attn & BNX2X_GRC_RSV) {
 			val = REG_RD(sc, MISC_REG_GRC_RSV_ATTN);
-			PMD_DRV_LOG(ERR, "GRC reserved 0x%08x", val);
+			PMD_DRV_LOG(ERR, sc, "GRC reserved 0x%08x", val);
 		}
 		REG_WR(sc, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0x7ff);
 	}
@@ -3898,24 +3904,24 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
 
 	if (attn & AEU_INPUTS_ATTN_BITS_CFC_HW_INTERRUPT) {
 		val = REG_RD(sc, CFC_REG_CFC_INT_STS_CLR);
-		PMD_DRV_LOG(ERR, "CFC hw attention 0x%08x", val);
+		PMD_DRV_LOG(ERR, sc, "CFC hw attention 0x%08x", val);
 /* CFC error attention */
 		if (val & 0x2) {
-			PMD_DRV_LOG(ERR, "FATAL error from CFC");
+			PMD_DRV_LOG(ERR, sc, "FATAL error from CFC");
 		}
 	}
 
 	if (attn & AEU_INPUTS_ATTN_BITS_PXP_HW_INTERRUPT) {
 		val = REG_RD(sc, PXP_REG_PXP_INT_STS_CLR_0);
-		PMD_DRV_LOG(ERR, "PXP hw attention-0 0x%08x", val);
+		PMD_DRV_LOG(ERR, sc, "PXP hw attention-0 0x%08x", val);
 /* RQ_USDMDP_FIFO_OVERFLOW */
 		if (val & 0x18000) {
-			PMD_DRV_LOG(ERR, "FATAL error from PXP");
+			PMD_DRV_LOG(ERR, sc, "FATAL error from PXP");
 		}
 
 		if (!CHIP_IS_E1x(sc)) {
 			val = REG_RD(sc, PXP_REG_PXP_INT_STS_CLR_1);
-			PMD_DRV_LOG(ERR, "PXP hw attention-1 0x%08x", val);
+			PMD_DRV_LOG(ERR, sc, "PXP hw attention-1 0x%08x", val);
 		}
 	}
 #define PXP2_EOP_ERROR_BIT  PXP2_PXP2_INT_STS_CLR_0_REG_WR_PGLUE_EOP_ERROR
@@ -3943,7 +3949,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
 				val0 = REG_RD(sc, PXP2_REG_PXP2_INT_STS_CLR_0);
 
 			/* print the register, since no one can restore it */
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "PXP2_REG_PXP2_INT_STS_CLR_0 0x%08x", val0);
 
 			/*
@@ -3951,7 +3957,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
 			 * then notify
 			 */
 			if (val0 & PXP2_EOP_ERROR_BIT) {
-				PMD_DRV_LOG(ERR, "PXP2_WR_PGLUE_EOP_ERROR");
+				PMD_DRV_LOG(ERR, sc, "PXP2_WR_PGLUE_EOP_ERROR");
 
 				/*
 				 * if only PXP2_PXP2_INT_STS_0_REG_WR_PGLUE_EOP_ERROR is
@@ -3972,7 +3978,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
 		val &= ~(attn & HW_INTERRUT_ASSERT_SET_2);
 		REG_WR(sc, reg_offset, val);
 
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "FATAL HW block attention set2 0x%x",
 			    (uint32_t) (attn & HW_INTERRUT_ASSERT_SET_2));
 		rte_panic("HW block attention set2");
@@ -3987,10 +3993,10 @@ static void bnx2x_attn_int_deasserted1(struct bnx2x_softc *sc, uint32_t attn)
 
 	if (attn & AEU_INPUTS_ATTN_BITS_DOORBELLQ_HW_INTERRUPT) {
 		val = REG_RD(sc, DORQ_REG_DORQ_INT_STS_CLR);
-		PMD_DRV_LOG(ERR, "DB hw attention 0x%08x", val);
+		PMD_DRV_LOG(ERR, sc, "DB hw attention 0x%08x", val);
 /* DORQ discard attention */
 		if (val & 0x2) {
-			PMD_DRV_LOG(ERR, "FATAL error from DORQ");
+			PMD_DRV_LOG(ERR, sc, "FATAL error from DORQ");
 		}
 	}
 
@@ -4002,7 +4008,7 @@ static void bnx2x_attn_int_deasserted1(struct bnx2x_softc *sc, uint32_t attn)
 		val &= ~(attn & HW_INTERRUT_ASSERT_SET_1);
 		REG_WR(sc, reg_offset, val);
 
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "FATAL HW block attention set1 0x%08x",
 			    (uint32_t) (attn & HW_INTERRUT_ASSERT_SET_1));
 		rte_panic("HW block attention set1");
@@ -4023,7 +4029,7 @@ static void bnx2x_attn_int_deasserted0(struct bnx2x_softc *sc, uint32_t attn)
 		val &= ~AEU_INPUTS_ATTN_BITS_SPIO5;
 		REG_WR(sc, reg_offset, val);
 
-		PMD_DRV_LOG(WARNING, "SPIO5 hw attention");
+		PMD_DRV_LOG(WARNING, sc, "SPIO5 hw attention");
 
 /* Fan failure attention */
 		elink_hw_reset_phy(&sc->link_params);
@@ -4113,14 +4119,14 @@ static void bnx2x_attn_int_deasserted(struct bnx2x_softc *sc, uint32_t deasserte
 	}
 
 	val = ~deasserted;
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "about to mask 0x%08x at %s addr 0x%08x", val,
 		    (sc->devinfo.int_block == INT_BLOCK_HC) ? "HC" : "IGU",
 		    reg_addr);
 	REG_WR(sc, reg_addr, val);
 
 	if (~sc->attn_state & deasserted) {
-		PMD_DRV_LOG(ERR, "IGU error");
+		PMD_DRV_LOG(ERR, sc, "IGU error");
 	}
 
 	reg_addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 :
@@ -4150,12 +4156,12 @@ static void bnx2x_attn_int(struct bnx2x_softc *sc)
 	uint32_t asserted = attn_bits & ~attn_ack & ~attn_state;
 	uint32_t deasserted = ~attn_bits & attn_ack & attn_state;
 
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "attn_bits 0x%08x attn_ack 0x%08x asserted 0x%08x deasserted 0x%08x",
 		    attn_bits, attn_ack, asserted, deasserted);
 
 	if (~(attn_bits ^ attn_ack) & (attn_bits ^ attn_state)) {
-		PMD_DRV_LOG(ERR, "BAD attention state");
+		PMD_DRV_LOG(ERR, sc, "BAD attention state");
 	}
 
 	/* handle bits that were raised */
@@ -4212,7 +4218,7 @@ static void bnx2x_handle_mcast_eqe(struct bnx2x_softc *sc)
 	if (sc->mcast_obj.check_pending(&sc->mcast_obj)) {
 		rc = ecore_config_mcast(sc, &rparam, ECORE_MCAST_CMD_CONT);
 		if (rc < 0) {
-			PMD_DRV_LOG(INFO,
+			PMD_DRV_LOG(INFO, sc,
 				    "Failed to send pending mcast commands (%d)",
 				    rc);
 		}
@@ -4232,17 +4238,17 @@ bnx2x_handle_classification_eqe(struct bnx2x_softc *sc, union event_ring_elem *e
 
 	switch (le32toh(elem->message.data.eth_event.echo) >> BNX2X_SWCID_SHIFT) {
 	case ECORE_FILTER_MAC_PENDING:
-		PMD_DRV_LOG(DEBUG, "Got SETUP_MAC completions");
+		PMD_DRV_LOG(DEBUG, sc, "Got SETUP_MAC completions");
 		vlan_mac_obj = &sc->sp_objs[cid].mac_obj;
 		break;
 
 	case ECORE_FILTER_MCAST_PENDING:
-		PMD_DRV_LOG(DEBUG, "Got SETUP_MCAST completions");
+		PMD_DRV_LOG(DEBUG, sc, "Got SETUP_MCAST completions");
 		bnx2x_handle_mcast_eqe(sc);
 		return;
 
 	default:
-		PMD_DRV_LOG(NOTICE, "Unsupported classification command: %d",
+		PMD_DRV_LOG(NOTICE, sc, "Unsupported classification command: %d",
 			    elem->message.data.eth_event.echo);
 		return;
 	}
@@ -4250,9 +4256,10 @@ bnx2x_handle_classification_eqe(struct bnx2x_softc *sc, union event_ring_elem *e
 	rc = vlan_mac_obj->complete(sc, vlan_mac_obj, elem, &ramrod_flags);
 
 	if (rc < 0) {
-		PMD_DRV_LOG(NOTICE, "Failed to schedule new commands (%d)", rc);
+		PMD_DRV_LOG(NOTICE, sc,
+			    "Failed to schedule new commands (%d)", rc);
 	} else if (rc > 0) {
-		PMD_DRV_LOG(DEBUG, "Scheduled next pending commands...");
+		PMD_DRV_LOG(DEBUG, sc, "Scheduled next pending commands...");
 	}
 }
 
@@ -4316,7 +4323,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 /* handle eq element */
 		switch (opcode) {
 		case EVENT_RING_OPCODE_STAT_QUERY:
-			PMD_DEBUG_PERIODIC_LOG(DEBUG, "got statistics completion event %d",
+			PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "got statistics completion event %d",
 				    sc->stats_comp++);
 			/* nothing to do with stats comp */
 			goto next_spqe;
@@ -4324,7 +4331,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 		case EVENT_RING_OPCODE_CFC_DEL:
 			/* handle according to cid range */
 			/* we may want to verify here that the sc state is HALTING */
-			PMD_DRV_LOG(DEBUG, "got delete ramrod for MULTI[%d]",
+			PMD_DRV_LOG(DEBUG, sc, "got delete ramrod for MULTI[%d]",
 				    cid);
 			q_obj = bnx2x_cid_to_q_obj(sc, cid);
 			if (q_obj->complete_cmd(sc, q_obj, ECORE_Q_CMD_CFC_DEL)) {
@@ -4333,14 +4340,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 			goto next_spqe;
 
 		case EVENT_RING_OPCODE_STOP_TRAFFIC:
-			PMD_DRV_LOG(DEBUG, "got STOP TRAFFIC");
+			PMD_DRV_LOG(DEBUG, sc, "got STOP TRAFFIC");
 			if (f_obj->complete_cmd(sc, f_obj, ECORE_F_CMD_TX_STOP)) {
 				break;
 			}
 			goto next_spqe;
 
 		case EVENT_RING_OPCODE_START_TRAFFIC:
-			PMD_DRV_LOG(DEBUG, "got START TRAFFIC");
+			PMD_DRV_LOG(DEBUG, sc, "got START TRAFFIC");
 			if (f_obj->complete_cmd
 			    (sc, f_obj, ECORE_F_CMD_TX_START)) {
 				break;
@@ -4350,7 +4357,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 		case EVENT_RING_OPCODE_FUNCTION_UPDATE:
 			echo = elem->message.data.function_update_event.echo;
 			if (echo == SWITCH_UPDATE) {
-				PMD_DRV_LOG(DEBUG,
+				PMD_DRV_LOG(DEBUG, sc,
 					    "got FUNC_SWITCH_UPDATE ramrod");
 				if (f_obj->complete_cmd(sc, f_obj,
 							ECORE_F_CMD_SWITCH_UPDATE))
@@ -4358,7 +4365,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 					break;
 				}
 			} else {
-				PMD_DRV_LOG(DEBUG,
+				PMD_DRV_LOG(DEBUG, sc,
 					    "AFEX: ramrod completed FUNCTION_UPDATE");
 				f_obj->complete_cmd(sc, f_obj,
 						    ECORE_F_CMD_AFEX_UPDATE);
@@ -4374,14 +4381,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 			goto next_spqe;
 
 		case EVENT_RING_OPCODE_FUNCTION_START:
-			PMD_DRV_LOG(DEBUG, "got FUNC_START ramrod");
+			PMD_DRV_LOG(DEBUG, sc, "got FUNC_START ramrod");
 			if (f_obj->complete_cmd(sc, f_obj, ECORE_F_CMD_START)) {
 				break;
 			}
 			goto next_spqe;
 
 		case EVENT_RING_OPCODE_FUNCTION_STOP:
-			PMD_DRV_LOG(DEBUG, "got FUNC_STOP ramrod");
+			PMD_DRV_LOG(DEBUG, sc, "got FUNC_STOP ramrod");
 			if (f_obj->complete_cmd(sc, f_obj, ECORE_F_CMD_STOP)) {
 				break;
 			}
@@ -4393,7 +4400,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 		case (EVENT_RING_OPCODE_RSS_UPDATE_RULES | BNX2X_STATE_OPENING_WAITING_PORT):
 			cid =
 			    elem->message.data.eth_event.echo & BNX2X_SWCID_MASK;
-			PMD_DRV_LOG(DEBUG, "got RSS_UPDATE ramrod. CID %d",
+			PMD_DRV_LOG(DEBUG, sc, "got RSS_UPDATE ramrod. CID %d",
 				    cid);
 			rss_raw->clear_pending(rss_raw);
 			break;
@@ -4404,7 +4411,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES | BNX2X_STATE_OPEN):
 		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES | BNX2X_STATE_DIAG):
 		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES | BNX2X_STATE_CLOSING_WAITING_HALT):
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "got (un)set mac ramrod");
 			bnx2x_handle_classification_eqe(sc, elem);
 			break;
@@ -4412,7 +4419,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 		case (EVENT_RING_OPCODE_MULTICAST_RULES | BNX2X_STATE_OPEN):
 		case (EVENT_RING_OPCODE_MULTICAST_RULES | BNX2X_STATE_DIAG):
 		case (EVENT_RING_OPCODE_MULTICAST_RULES | BNX2X_STATE_CLOSING_WAITING_HALT):
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "got mcast ramrod");
 			bnx2x_handle_mcast_eqe(sc);
 			break;
@@ -4420,14 +4427,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
 		case (EVENT_RING_OPCODE_FILTERS_RULES | BNX2X_STATE_OPEN):
 		case (EVENT_RING_OPCODE_FILTERS_RULES | BNX2X_STATE_DIAG):
 		case (EVENT_RING_OPCODE_FILTERS_RULES | BNX2X_STATE_CLOSING_WAITING_HALT):
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "got rx_mode ramrod");
 			bnx2x_handle_rx_mode_eqe(sc);
 			break;
 
 		default:
 			/* unknown event log error and continue */
-			PMD_DRV_LOG(INFO, "Unknown EQ event %d, sc->state 0x%x",
+			PMD_DRV_LOG(INFO, sc, "Unknown EQ event %d, sc->state 0x%x",
 				    elem->message.opcode, sc->state);
 		}
 
@@ -4453,12 +4460,16 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
 	uint16_t status;
 	int rc = 0;
 
+	PMD_DRV_LOG(DEBUG, sc, "---> SP TASK <---");
+
 	/* what work needs to be performed? */
 	status = bnx2x_update_dsb_idx(sc);
 
+	PMD_DRV_LOG(DEBUG, sc, "dsb status 0x%04x", status);
+
 	/* HW attentions */
 	if (status & BNX2X_DEF_SB_ATT_IDX) {
-		PMD_DRV_LOG(DEBUG, "---> ATTN INTR <---");
+		PMD_DRV_LOG(DEBUG, sc, "---> ATTN INTR <---");
 		bnx2x_attn_int(sc);
 		status &= ~BNX2X_DEF_SB_ATT_IDX;
 		rc = 1;
@@ -4467,7 +4478,7 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
 	/* SP events: STAT_QUERY and others */
 	if (status & BNX2X_DEF_SB_IDX) {
 /* handle EQ completions */
-		PMD_DEBUG_PERIODIC_LOG(DEBUG, "---> EQ INTR <---");
+		PMD_DRV_LOG(DEBUG, sc, "---> EQ INTR <---");
 		bnx2x_eq_int(sc);
 		bnx2x_ack_sb(sc, sc->igu_dsb_id, USTORM_ID,
 			   le16toh(sc->def_idx), IGU_INT_NOP, 1);
@@ -4476,7 +4487,7 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
 
 	/* if status is non zero then something went wrong */
 	if (unlikely(status)) {
-		PMD_DRV_LOG(INFO,
+		PMD_DRV_LOG(INFO, sc,
 			    "Got an unknown SP interrupt! (0x%04x)", status);
 	}
 
@@ -4492,7 +4503,8 @@ static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp, int scan_fp)
 	struct bnx2x_softc *sc = fp->sc;
 	uint8_t more_rx = FALSE;
 
-	PMD_DRV_LOG(DEBUG, "---> FP TASK QUEUE (%d) <--", fp->index);
+	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc,
+			       "---> FP TASK QUEUE (%d) <--", fp->index);
 
 	/* update the fastpath index */
 	bnx2x_update_fp_sb_idx(fp);
@@ -4542,7 +4554,7 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
 		return 0;
 	}
 
-	PMD_DEBUG_PERIODIC_LOG(DEBUG, "Interrupt status 0x%04x", status);
+	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "Interrupt status 0x%04x", status);
 	//bnx2x_dump_status_block(sc);
 
 	FOR_EACH_ETH_QUEUE(sc, i) {
@@ -4560,7 +4572,7 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
 	}
 
 	if (unlikely(status)) {
-		PMD_DRV_LOG(WARNING,
+		PMD_DRV_LOG(WARNING, sc,
 			    "Unexpected fastpath status (0x%08x)!", status);
 	}
 
@@ -4596,7 +4608,7 @@ static void bnx2x_init_func_obj(struct bnx2x_softc *sc)
 {
 	sc->dmae_ready = 0;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	ecore_init_func_obj(sc,
 			    &sc->func_obj,
@@ -4612,7 +4624,7 @@ static int bnx2x_init_hw(struct bnx2x_softc *sc, uint32_t load_code)
 	struct ecore_func_state_params func_params = { NULL };
 	int rc;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	/* prepare the parameters for function state transitions */
 	bnx2x_set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
@@ -5201,7 +5213,7 @@ static void bnx2x_init_internal(struct bnx2x_softc *sc, uint32_t load_code)
 		break;
 
 	default:
-		PMD_DRV_LOG(NOTICE, "Unknown load_code (0x%x) from MCP",
+		PMD_DRV_LOG(NOTICE, sc, "Unknown load_code (0x%x) from MCP",
 			    load_code);
 		break;
 	}
@@ -5292,7 +5304,7 @@ bnx2x_extract_max_cfg(__rte_unused struct bnx2x_softc *sc, uint32_t mf_cfg)
 			    FUNC_MF_CFG_MAX_BW_SHIFT);
 
 	if (!max_cfg) {
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "Max BW configured to 0 - using 100 instead");
 		max_cfg = 100;
 	}
@@ -5556,7 +5568,7 @@ static void bnx2x_igu_int_enable(struct bnx2x_softc *sc)
 
 	val |= IGU_PF_CONF_FUNC_EN;
 
-	PMD_DRV_LOG(DEBUG, "write 0x%x to IGU mode %s",
+	PMD_DRV_LOG(DEBUG, sc, "write 0x%x to IGU mode %s",
 		    val, ((msix) ? "MSI-X" : ((msi) ? "MSI" : "INTx")));
 
 	REG_WR(sc, IGU_REG_PF_CONFIGURATION, val);
@@ -5604,7 +5616,7 @@ static void bnx2x_hc_int_disable(struct bnx2x_softc *sc)
 
 	REG_WR(sc, addr, val);
 	if (REG_RD(sc, addr) != val) {
-		PMD_DRV_LOG(ERR, "proper val not read from HC IGU!");
+		PMD_DRV_LOG(ERR, sc, "proper val not read from HC IGU!");
 	}
 }
 
@@ -5615,14 +5627,14 @@ static void bnx2x_igu_int_disable(struct bnx2x_softc *sc)
 	val &= ~(IGU_PF_CONF_MSI_MSIX_EN |
 		 IGU_PF_CONF_INT_LINE_EN | IGU_PF_CONF_ATTN_BIT_EN);
 
-	PMD_DRV_LOG(DEBUG, "write %x to IGU", val);
+	PMD_DRV_LOG(DEBUG, sc, "write %x to IGU", val);
 
 	/* flush all outstanding writes */
 	mb();
 
 	REG_WR(sc, IGU_REG_PF_CONFIGURATION, val);
 	if (REG_RD(sc, IGU_REG_PF_CONFIGURATION) != val) {
-		PMD_DRV_LOG(ERR, "proper val not read from IGU!");
+		PMD_DRV_LOG(ERR, sc, "proper val not read from IGU!");
 	}
 }
 
@@ -5639,7 +5651,7 @@ static void bnx2x_nic_init(struct bnx2x_softc *sc, int load_code)
 {
 	int i;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	for (i = 0; i < sc->num_queues; i++) {
 		bnx2x_init_eth_fp(sc, i);
@@ -5769,7 +5781,7 @@ static int bnx2x_set_power_state(struct bnx2x_softc *sc, uint8_t state)
 
 	/* If there is no power capability, silently succeed */
 	if (!(sc->devinfo.pcie_cap_flags & BNX2X_PM_CAPABLE_FLAG)) {
-		PMD_DRV_LOG(WARNING, "No power capability");
+		PMD_DRV_LOG(WARNING, sc, "No power capability");
 		return 0;
 	}
 
@@ -5814,7 +5826,7 @@ static int bnx2x_set_power_state(struct bnx2x_softc *sc, uint8_t state)
 		break;
 
 	default:
-		PMD_DRV_LOG(NOTICE, "Can't support PCI power state = %d",
+		PMD_DRV_LOG(NOTICE, sc, "Can't support PCI power state = %d",
 			    state);
 		return -1;
 	}
@@ -5832,7 +5844,7 @@ static uint8_t bnx2x_trylock_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 
 	/* Validating that the resource is within range */
 	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
-		PMD_DRV_LOG(INFO,
+		PMD_DRV_LOG(INFO, sc,
 			    "resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)",
 			    resource, HW_LOCK_MAX_RESOURCE_VALUE);
 		return FALSE;
@@ -5852,7 +5864,7 @@ static uint8_t bnx2x_trylock_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 		return TRUE;
 	}
 
-	PMD_DRV_LOG(NOTICE, "Failed to get a resource lock 0x%x", resource);
+	PMD_DRV_LOG(NOTICE, sc, "Failed to get a resource lock 0x%x", resource);
 
 	return FALSE;
 }
@@ -5945,7 +5957,7 @@ static int bnx2x_er_poll_igu_vq(struct bnx2x_softc *sc)
 	} while (cnt-- > 0);
 
 	if (cnt <= 0) {
-		PMD_DRV_LOG(NOTICE, "Still pending IGU requests bits=0x%08x!",
+		PMD_DRV_LOG(NOTICE, sc, "Still pending IGU requests bits=0x%08x!",
 			    pend_bits);
 		return -1;
 	}
@@ -6026,7 +6038,7 @@ static int bnx2x_init_shmem(struct bnx2x_softc *sc)
 
 	} while (cnt++ < (MCP_TIMEOUT / MCP_ONE_TIMEOUT));
 
-	PMD_DRV_LOG(NOTICE, "BAD MCP validity signature");
+	PMD_DRV_LOG(NOTICE, sc, "BAD MCP validity signature");
 
 	return -1;
 }
@@ -6181,7 +6193,7 @@ static int bnx2x_process_kill(struct bnx2x_softc *sc, uint8_t global)
 	} while (cnt-- > 0);
 
 	if (cnt <= 0) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "ERROR: Tetris buffer didn't get empty or there "
 			    "are still outstanding read requests after 1s! "
 			    "sr_cnt=0x%08x, blk_cnt=0x%08x, port_is_idle_0=0x%08x, "
@@ -6254,14 +6266,14 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
 		load_code = bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_REQ,
 					   DRV_MSG_CODE_LOAD_REQ_WITH_LFA);
 		if (!load_code) {
-			PMD_DRV_LOG(NOTICE, "MCP response failure, aborting");
+			PMD_DRV_LOG(NOTICE, sc, "MCP response failure, aborting");
 			rc = -1;
 			goto exit_leader_reset;
 		}
 
 		if ((load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) &&
 		    (load_code != FW_MSG_CODE_DRV_LOAD_COMMON)) {
-			PMD_DRV_LOG(NOTICE,
+			PMD_DRV_LOG(NOTICE, sc,
 				    "MCP unexpected response, aborting");
 			rc = -1;
 			goto exit_leader_reset2;
@@ -6269,7 +6281,7 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
 
 		load_code = bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
 		if (!load_code) {
-			PMD_DRV_LOG(NOTICE, "MCP response failure, aborting");
+			PMD_DRV_LOG(NOTICE, sc, "MCP response failure, aborting");
 			rc = -1;
 			goto exit_leader_reset2;
 		}
@@ -6277,7 +6289,7 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
 
 	/* try to recover after the failure */
 	if (bnx2x_process_kill(sc, global)) {
-		PMD_DRV_LOG(NOTICE, "Something bad occurred on engine %d!",
+		PMD_DRV_LOG(NOTICE, sc, "Something bad occurred on engine %d!",
 			    SC_PATH(sc));
 		rc = -1;
 		goto exit_leader_reset2;
@@ -6436,12 +6448,12 @@ bnx2x_pf_rx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
 	/* validate rings have enough entries to cross high thresholds */
 	if (sc->dropless_fc &&
 	    pause->bd_th_hi + FW_PREFETCH_CNT > sc->rx_ring_size) {
-		PMD_DRV_LOG(WARNING, "rx bd ring threshold limit");
+		PMD_DRV_LOG(WARNING, sc, "rx bd ring threshold limit");
 	}
 
 	if (sc->dropless_fc &&
 	    pause->rcq_th_hi + FW_PREFETCH_CNT > USABLE_RCQ_ENTRIES(rxq)) {
-		PMD_DRV_LOG(WARNING, "rcq ring threshold limit");
+		PMD_DRV_LOG(WARNING, sc, "rcq ring threshold limit");
 	}
 
 	pause->pri_map = 1;
@@ -6512,7 +6524,7 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
 	struct ecore_queue_setup_params *setup_params = &q_params.params.setup;
 	int rc;
 
-	PMD_DRV_LOG(DEBUG, "setting up queue %d", fp->index);
+	PMD_DRV_LOG(DEBUG, sc, "setting up queue %d", fp->index);
 
 	bnx2x_ack_sb(sc, fp->igu_sb_id, USTORM_ID, 0, IGU_INT_ENABLE, 0);
 
@@ -6530,11 +6542,11 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
 	/* Change the state to INIT */
 	rc = ecore_queue_state_change(sc, &q_params);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "Queue(%d) INIT failed", fp->index);
+		PMD_DRV_LOG(NOTICE, sc, "Queue(%d) INIT failed", fp->index);
 		return rc;
 	}
 
-	PMD_DRV_LOG(DEBUG, "init complete");
+	PMD_DRV_LOG(DEBUG, sc, "init complete");
 
 	/* now move the Queue to the SETUP state */
 	memset(setup_params, 0, sizeof(*setup_params));
@@ -6558,7 +6570,7 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
 	/* change the state to SETUP */
 	rc = ecore_queue_state_change(sc, &q_params);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "Queue(%d) SETUP failed", fp->index);
+		PMD_DRV_LOG(NOTICE, sc, "Queue(%d) SETUP failed", fp->index);
 		return rc;
 	}
 
@@ -6686,11 +6698,11 @@ bnx2x_set_mac_one(struct bnx2x_softc *sc, uint8_t * mac,
 	rc = ecore_config_vlan_mac(sc, &ramrod_param);
 
 	if (rc == ECORE_EXISTS) {
-		PMD_DRV_LOG(INFO, "Failed to schedule ADD operations (EEXIST)");
+		PMD_DRV_LOG(INFO, sc, "Failed to schedule ADD operations (EEXIST)");
 /* do not treat adding same MAC as error */
 		rc = 0;
 	} else if (rc < 0) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "%s MAC failed (%d)", (set ? "Set" : "Delete"), rc);
 	}
 
@@ -6701,7 +6713,7 @@ static int bnx2x_set_eth_mac(struct bnx2x_softc *sc, uint8_t set)
 {
 	unsigned long ramrod_flags = 0;
 
-	PMD_DRV_LOG(DEBUG, "Adding Ethernet MAC");
+	PMD_DRV_LOG(DEBUG, sc, "Adding Ethernet MAC");
 
 	bnx2x_set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
 
@@ -6885,7 +6897,7 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
 
 	if (bnx2x_test_bit(BNX2X_LINK_REPORT_LINK_DOWN,
 			 &cur_data.link_report_flags)) {
-		PMD_DRV_LOG(INFO, "NIC Link is Down");
+		PMD_DRV_LOG(INFO, sc, "NIC Link is Down");
 	} else {
 		__rte_unused const char *duplex;
 		__rte_unused const char *flow;
@@ -6925,7 +6937,7 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
 			flow = "none";
 		}
 
-		PMD_DRV_LOG(INFO,
+		PMD_DRV_LOG(INFO, sc,
 			    "NIC Link is Up, %d Mbps %s duplex, Flow control: %s",
 			    cur_data.line_speed, duplex, flow);
 	}
@@ -7080,7 +7092,7 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
 {
 	if ((sc->state != BNX2X_STATE_OPEN) ||
 	    (atomic_load_acq_long(&sc->periodic_flags) == PERIODIC_STOP)) {
-		PMD_DRV_LOG(WARNING, "periodic callout exit (state=0x%x)",
+		PMD_DRV_LOG(INFO, sc, "periodic callout exit (state=0x%x)",
 			    sc->state);
 		return;
 	}
@@ -7117,7 +7129,7 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
 		if ((drv_pulse != mcp_pulse) &&
 		    (drv_pulse != ((mcp_pulse + 1) & MCP_PULSE_SEQ_MASK))) {
 			/* someone lost a heartbeat... */
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "drv_pulse (0x%x) != mcp_pulse (0x%x)",
 				    drv_pulse, mcp_pulse);
 		}
@@ -7133,7 +7145,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 	uint32_t load_code = 0;
 	int i, rc = 0;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	sc->state = BNX2X_STATE_OPENING_WAITING_LOAD;
 
@@ -7187,7 +7199,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 				goto bnx2x_nic_load_error2;
 			}
 		} else {
-			PMD_DRV_LOG(INFO, "Device has no MCP!");
+			PMD_DRV_LOG(INFO, sc, "Device has no MCP!");
 			load_code = bnx2x_nic_load_no_mcp(sc);
 		}
 
@@ -7199,7 +7211,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 
 /* Initialize HW */
 		if (bnx2x_init_hw(sc, load_code) != 0) {
-			PMD_DRV_LOG(NOTICE, "HW init failed");
+			PMD_DRV_LOG(NOTICE, sc, "HW init failed");
 			bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
 			sc->state = BNX2X_STATE_CLOSED;
 			rc = -ENXIO;
@@ -7219,7 +7231,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 		sc->state = BNX2X_STATE_OPENING_WAITING_PORT;
 		rc = bnx2x_func_start(sc);
 		if (rc) {
-			PMD_DRV_LOG(NOTICE, "Function start failed!");
+			PMD_DRV_LOG(NOTICE, sc, "Function start failed!");
 			bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
 			sc->state = BNX2X_STATE_ERROR;
 			goto bnx2x_nic_load_error3;
@@ -7230,7 +7242,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 			load_code =
 			    bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
 			if (!load_code) {
-				PMD_DRV_LOG(NOTICE,
+				PMD_DRV_LOG(NOTICE, sc,
 					    "MCP response failure, aborting");
 				sc->state = BNX2X_STATE_ERROR;
 				rc = -ENXIO;
@@ -7241,7 +7253,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 
 	rc = bnx2x_setup_leading(sc);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "Setup leading failed!");
+		PMD_DRV_LOG(NOTICE, sc, "Setup leading failed!");
 		sc->state = BNX2X_STATE_ERROR;
 		goto bnx2x_nic_load_error3;
 	}
@@ -7253,7 +7265,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 			rc = bnx2x_vf_setup_queue(sc, &sc->fp[i], FALSE);
 
 		if (rc) {
-			PMD_DRV_LOG(NOTICE, "Queue(%d) setup failed", i);
+			PMD_DRV_LOG(NOTICE, sc, "Queue(%d) setup failed", i);
 			sc->state = BNX2X_STATE_ERROR;
 			goto bnx2x_nic_load_error3;
 		}
@@ -7261,7 +7273,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 
 	rc = bnx2x_init_rss_pf(sc);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "PF RSS init failed");
+		PMD_DRV_LOG(NOTICE, sc, "PF RSS init failed");
 		sc->state = BNX2X_STATE_ERROR;
 		goto bnx2x_nic_load_error3;
 	}
@@ -7277,7 +7289,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 	}
 
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "Setting Ethernet MAC failed");
+		PMD_DRV_LOG(NOTICE, sc, "Setting Ethernet MAC failed");
 		sc->state = BNX2X_STATE_ERROR;
 		goto bnx2x_nic_load_error3;
 	}
@@ -7329,13 +7341,13 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
 
 	/* wait for all pending SP commands to complete */
 	if (IS_PF(sc) && !bnx2x_wait_sp_comp(sc, ~0x0UL)) {
-		PMD_DRV_LOG(NOTICE, "Timeout waiting for all SPs to complete!");
+		PMD_DRV_LOG(NOTICE, sc, "Timeout waiting for all SPs to complete!");
 		bnx2x_periodic_stop(sc);
 		bnx2x_nic_unload(sc, UNLOAD_CLOSE, FALSE);
 		return -ENXIO;
 	}
 
-	PMD_DRV_LOG(DEBUG, "NIC successfully loaded");
+	PMD_DRV_LOG(DEBUG, sc, "NIC successfully loaded");
 
 	return 0;
 
@@ -7384,7 +7396,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
 
 	/* Check if the driver is still running and bail out if it is. */
 	if (sc->state != BNX2X_STATE_CLOSED) {
-		PMD_DRV_LOG(DEBUG, "Init called while driver is running!");
+		PMD_DRV_LOG(DEBUG, sc, "Init called while driver is running!");
 		rc = 0;
 		goto bnx2x_init_done;
 	}
@@ -7422,7 +7434,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
 				     && (!global ||!other_load_status))
 				    && bnx2x_trylock_leader_lock(sc)
 				    && !bnx2x_leader_reset(sc)) {
-					PMD_DRV_LOG(INFO,
+					PMD_DRV_LOG(INFO, sc,
 						    "Recovered during init");
 					break;
 				}
@@ -7432,7 +7444,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
 
 				sc->recovery_state = BNX2X_RECOVERY_FAILED;
 
-				PMD_DRV_LOG(NOTICE,
+				PMD_DRV_LOG(NOTICE, sc,
 					    "Recovery flow hasn't properly "
 					    "completed yet, try again later. "
 					    "If you still see this message after a "
@@ -7451,7 +7463,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
 bnx2x_init_done:
 
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "Initialization failed, "
+		PMD_DRV_LOG(NOTICE, sc, "Initialization failed, "
 			    "stack notified driver is NOT running!");
 	}
 
@@ -7483,7 +7495,7 @@ static void bnx2x_get_function_num(struct bnx2x_softc *sc)
 		sc->pfunc_abs = (sc->pfunc_rel | sc->path_id);
 	}
 
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "Relative function %d, Absolute function %d, Path %d",
 		    sc->pfunc_rel, sc->pfunc_abs, sc->path_id);
 }
@@ -7520,14 +7532,14 @@ static uint32_t bnx2x_pcie_capability_read(struct bnx2x_softc *sc, int reg)
 	/* ensure PCIe capability is enabled */
 	caps = pci_find_cap(sc, PCIY_EXPRESS, BNX2X_PCI_CAP);
 	if (NULL != caps) {
-		PMD_DRV_LOG(DEBUG, "Found PCIe capability: "
+		PMD_DRV_LOG(DEBUG, sc, "Found PCIe capability: "
 			    "id=0x%04X type=0x%04X addr=0x%08X",
 			    caps->id, caps->type, caps->addr);
 		pci_read(sc, (caps->addr + reg), &ret, 2);
 		return ret;
 	}
 
-	PMD_DRV_LOG(WARNING, "PCIe capability NOT FOUND!!!");
+	PMD_DRV_LOG(WARNING, sc, "PCIe capability NOT FOUND!!!");
 
 	return 0;
 }
@@ -7545,7 +7557,7 @@ static uint8_t bnx2x_is_pcie_pending(struct bnx2x_softc *sc)
 */
 static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
 {
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	struct bnx2x_pci_cap *caps;
 	uint16_t link_status;
@@ -7556,7 +7568,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
 	/* check if PCI Power Management is enabled */
 	caps = pci_find_cap(sc, PCIY_PMG, BNX2X_PCI_CAP);
 	if (NULL != caps) {
-		PMD_DRV_LOG(DEBUG, "Found PM capability: "
+		PMD_DRV_LOG(DEBUG, sc, "Found PM capability: "
 			    "id=0x%04X type=0x%04X addr=0x%08X",
 			    caps->id, caps->type, caps->addr);
 
@@ -7570,7 +7582,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
 	sc->devinfo.pcie_link_width =
 	    ((link_status & PCIM_LINK_STA_WIDTH) >> 4);
 
-	PMD_DRV_LOG(DEBUG, "PCIe link speed=%d width=%d",
+	PMD_DRV_LOG(DEBUG, sc, "PCIe link speed=%d width=%d",
 		    sc->devinfo.pcie_link_speed, sc->devinfo.pcie_link_width);
 
 	sc->devinfo.pcie_cap_flags |= BNX2X_PCIE_CAPABLE_FLAG;
@@ -7578,7 +7590,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
 	/* check if MSI capability is enabled */
 	caps = pci_find_cap(sc, PCIY_MSI, BNX2X_PCI_CAP);
 	if (NULL != caps) {
-		PMD_DRV_LOG(DEBUG, "Found MSI capability at 0x%04x", reg);
+		PMD_DRV_LOG(DEBUG, sc, "Found MSI capability at 0x%04x", reg);
 
 		sc->devinfo.pcie_cap_flags |= BNX2X_MSI_CAPABLE_FLAG;
 		sc->devinfo.pcie_msi_cap_reg = caps->addr;
@@ -7587,7 +7599,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
 	/* check if MSI-X capability is enabled */
 	caps = pci_find_cap(sc, PCIY_MSIX, BNX2X_PCI_CAP);
 	if (NULL != caps) {
-		PMD_DRV_LOG(DEBUG, "Found MSI-X capability at 0x%04x", reg);
+		PMD_DRV_LOG(DEBUG, sc, "Found MSI-X capability at 0x%04x", reg);
 
 		sc->devinfo.pcie_cap_flags |= BNX2X_MSIX_CAPABLE_FLAG;
 		sc->devinfo.pcie_msix_cap_reg = caps->addr;
@@ -7607,7 +7619,7 @@ static int bnx2x_get_shmem_mf_cfg_info_sd(struct bnx2x_softc *sc)
 	mf_info->multi_vnics_mode = 1;
 
 	if (!VALID_OVLAN(mf_info->ext_id)) {
-		PMD_DRV_LOG(NOTICE, "Invalid VLAN (%d)", mf_info->ext_id);
+		PMD_DRV_LOG(NOTICE, sc, "Invalid VLAN (%d)", mf_info->ext_id);
 		return 1;
 	}
 
@@ -7731,14 +7743,14 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
 	/* various MF mode sanity checks... */
 
 	if (mf_info->mf_config[SC_VN(sc)] & FUNC_MF_CFG_FUNC_HIDE) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "Enumerated function %d is marked as hidden",
 			    SC_PORT(sc));
 		return 1;
 	}
 
 	if ((mf_info->vnics_per_port > 1) && !mf_info->multi_vnics_mode) {
-		PMD_DRV_LOG(NOTICE, "vnics_per_port=%d multi_vnics_mode=%d",
+		PMD_DRV_LOG(NOTICE, sc, "vnics_per_port=%d multi_vnics_mode=%d",
 			    mf_info->vnics_per_port, mf_info->multi_vnics_mode);
 		return 1;
 	}
@@ -7746,13 +7758,13 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
 	if (mf_info->mf_mode == MULTI_FUNCTION_SD) {
 /* vnic id > 0 must have valid ovlan in switch-dependent mode */
 		if ((SC_VN(sc) > 0) && !VALID_OVLAN(OVLAN(sc))) {
-			PMD_DRV_LOG(NOTICE, "mf_mode=SD vnic_id=%d ovlan=%d",
+			PMD_DRV_LOG(NOTICE, sc, "mf_mode=SD vnic_id=%d ovlan=%d",
 				    SC_VN(sc), OVLAN(sc));
 			return 1;
 		}
 
 		if (!VALID_OVLAN(OVLAN(sc)) && mf_info->multi_vnics_mode) {
-			PMD_DRV_LOG(NOTICE,
+			PMD_DRV_LOG(NOTICE, sc,
 				    "mf_mode=SD multi_vnics_mode=%d ovlan=%d",
 				    mf_info->multi_vnics_mode, OVLAN(sc));
 			return 1;
@@ -7771,7 +7783,7 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
 			      && !VALID_OVLAN(ovlan1))
 			     || ((!mf_info->multi_vnics_mode)
 				 && VALID_OVLAN(ovlan1)))) {
-				PMD_DRV_LOG(NOTICE,
+				PMD_DRV_LOG(NOTICE, sc,
 					    "mf_mode=SD function %d MF config "
 					    "mismatch, multi_vnics_mode=%d ovlan=%d",
 					    i, mf_info->multi_vnics_mode,
@@ -7795,7 +7807,7 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
 				    && !(mf_cfg2 & FUNC_MF_CFG_FUNC_HIDE)
 				    && VALID_OVLAN(ovlan2)
 				    && (ovlan1 == ovlan2)) {
-					PMD_DRV_LOG(NOTICE,
+					PMD_DRV_LOG(NOTICE, sc,
 						    "mf_mode=SD functions %d and %d "
 						    "have the same ovlan (%d)",
 						    i, j, ovlan1);
@@ -7825,7 +7837,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
 	}
 
 	if (sc->devinfo.mf_cfg_base == SHMEM_MF_CFG_ADDR_NONE) {
-		PMD_DRV_LOG(NOTICE, "Invalid mf_cfg_base!");
+		PMD_DRV_LOG(NOTICE, sc, "Invalid mf_cfg_base!");
 		return 1;
 	}
 
@@ -7843,7 +7855,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
 		if (mac_upper != FUNC_MF_CFG_UPPERMAC_DEFAULT) {
 			mf_info->mf_mode = MULTI_FUNCTION_SI;
 		} else {
-			PMD_DRV_LOG(NOTICE,
+			PMD_DRV_LOG(NOTICE, sc,
 				    "Invalid config for Switch Independent mode");
 		}
 
@@ -7859,7 +7871,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
 		    FUNC_MF_CFG_E1HOV_TAG_DEFAULT) {
 			mf_info->mf_mode = MULTI_FUNCTION_SD;
 		} else {
-			PMD_DRV_LOG(NOTICE,
+			PMD_DRV_LOG(NOTICE, sc,
 				    "Invalid config for Switch Dependent mode");
 		}
 
@@ -7883,14 +7895,14 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
 		    (mac_upper != FUNC_MF_CFG_UPPERMAC_DEFAULT)) {
 			mf_info->mf_mode = MULTI_FUNCTION_AFEX;
 		} else {
-			PMD_DRV_LOG(NOTICE, "Invalid config for AFEX mode");
+			PMD_DRV_LOG(NOTICE, sc, "Invalid config for AFEX mode");
 		}
 
 		break;
 
 	default:
 
-		PMD_DRV_LOG(NOTICE, "Unknown MF mode (0x%08x)",
+		PMD_DRV_LOG(NOTICE, sc, "Unknown MF mode (0x%08x)",
 			    (val & SHARED_FEAT_CFG_FORCE_SF_MODE_MASK));
 
 		return 1;
@@ -7922,7 +7934,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
 	if (mf_info->mf_mode == SINGLE_FUNCTION) {
 /* invalid MF config */
 		if (SC_VN(sc) >= 1) {
-			PMD_DRV_LOG(NOTICE, "VNIC ID >= 1 in SF mode");
+			PMD_DRV_LOG(NOTICE, sc, "VNIC ID >= 1 in SF mode");
 			return 1;
 		}
 
@@ -7951,7 +7963,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
 
 	default:
 
-		PMD_DRV_LOG(NOTICE, "Get MF config failed (mf_mode=0x%08x)",
+		PMD_DRV_LOG(NOTICE, sc, "Get MF config failed (mf_mode=0x%08x)",
 			    mf_info->mf_mode);
 		return 1;
 	}
@@ -7979,7 +7991,7 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
 	int port;
 	uint32_t mac_hi, mac_lo, val;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	port = SC_PORT(sc);
 	mac_hi = mac_lo = 0;
@@ -8053,7 +8065,7 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
 
 	if ((mac_lo == 0) && (mac_hi == 0)) {
 		*sc->mac_addr_str = 0;
-		PMD_DRV_LOG(NOTICE, "No Ethernet address programmed!");
+		PMD_DRV_LOG(NOTICE, sc, "No Ethernet address programmed!");
 	} else {
 		sc->link_params.mac_addr[0] = (uint8_t) (mac_hi >> 8);
 		sc->link_params.mac_addr[1] = (uint8_t) (mac_hi);
@@ -8069,7 +8081,8 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
 			 sc->link_params.mac_addr[3],
 			 sc->link_params.mac_addr[4],
 			 sc->link_params.mac_addr[5]);
-		PMD_DRV_LOG(DEBUG, "Ethernet address: %s", sc->mac_addr_str);
+		PMD_DRV_LOG(DEBUG, sc,
+			    "Ethernet address: %s", sc->mac_addr_str);
 	}
 
 	return 0;
@@ -8084,24 +8097,24 @@ static void bnx2x_media_detect(struct bnx2x_softc *sc)
 	case ELINK_ETH_PHY_XFP_FIBER:
 	case ELINK_ETH_PHY_KR:
 	case ELINK_ETH_PHY_CX4:
-		PMD_DRV_LOG(INFO, "Found 10GBase-CX4 media.");
+		PMD_DRV_LOG(INFO, sc, "Found 10GBase-CX4 media.");
 		sc->media = IFM_10G_CX4;
 		break;
 	case ELINK_ETH_PHY_DA_TWINAX:
-		PMD_DRV_LOG(INFO, "Found 10Gb Twinax media.");
+		PMD_DRV_LOG(INFO, sc, "Found 10Gb Twinax media.");
 		sc->media = IFM_10G_TWINAX;
 		break;
 	case ELINK_ETH_PHY_BASE_T:
-		PMD_DRV_LOG(INFO, "Found 10GBase-T media.");
+		PMD_DRV_LOG(INFO, sc, "Found 10GBase-T media.");
 		sc->media = IFM_10G_T;
 		break;
 	case ELINK_ETH_PHY_NOT_PRESENT:
-		PMD_DRV_LOG(INFO, "Media not present.");
+		PMD_DRV_LOG(INFO, sc, "Media not present.");
 		sc->media = 0;
 		break;
 	case ELINK_ETH_PHY_UNSPECIFIED:
 	default:
-		PMD_DRV_LOG(INFO, "Unknown media!");
+		PMD_DRV_LOG(INFO, sc, "Unknown media!");
 		sc->media = 0;
 		break;
 	}
@@ -8164,7 +8177,7 @@ static int bnx2x_get_igu_cam_info(struct bnx2x_softc *sc)
 	sc->igu_sb_cnt = min(sc->igu_sb_cnt, igu_sb_cnt);
 
 	if (igu_sb_cnt == 0) {
-		PMD_DRV_LOG(ERR, "CAM configuration error");
+		PMD_DRV_LOG(ERR, sc, "CAM configuration error");
 		return -1;
 	}
 
@@ -8201,7 +8214,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
 		sc->devinfo.chip_id |= 0x1;
 	}
 
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "chip_id=0x%08x (num=0x%04x rev=0x%01x metal=0x%02x bond=0x%01x)",
 		    sc->devinfo.chip_id,
 		    ((sc->devinfo.chip_id >> 16) & 0xffff),
@@ -8212,7 +8225,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
 	val = (REG_RD(sc, 0x2874) & 0x55);
 	if ((sc->devinfo.chip_id & 0x1) || (CHIP_IS_E1H(sc) && (val == 0x55))) {
 		sc->flags |= BNX2X_ONE_PORT_FLAG;
-		PMD_DRV_LOG(DEBUG, "single port device");
+		PMD_DRV_LOG(DEBUG, sc, "single port device");
 	}
 
 	/* set the doorbell size */
@@ -8236,7 +8249,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
 		sc->devinfo.chip_port_mode =
 		    (val) ? CHIP_4_PORT_MODE : CHIP_2_PORT_MODE;
 
-		PMD_DRV_LOG(DEBUG, "Port mode = %s", (val) ? "4" : "2");
+		PMD_DRV_LOG(DEBUG, sc, "Port mode = %s", (val) ? "4" : "2");
 	}
 
 	/* get the function and path info for the device */
@@ -8251,7 +8264,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
 
 	if (!sc->devinfo.shmem_base) {
 /* this should ONLY prevent upcoming shmem reads */
-		PMD_DRV_LOG(INFO, "MCP not active");
+		PMD_DRV_LOG(INFO, sc, "MCP not active");
 		sc->flags |= BNX2X_NO_MCP_FLAG;
 		return 0;
 	}
@@ -8260,7 +8273,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
 	val = SHMEM_RD(sc, validity_map[SC_PORT(sc)]);
 	if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) !=
 	    (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) {
-		PMD_DRV_LOG(NOTICE, "Invalid SHMEM validity signature: 0x%08x",
+		PMD_DRV_LOG(NOTICE, sc, "Invalid SHMEM validity signature: 0x%08x",
 			    val);
 		return 0;
 	}
@@ -8273,7 +8286,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
 		 ((sc->devinfo.bc_ver >> 24) & 0xff),
 		 ((sc->devinfo.bc_ver >> 16) & 0xff),
 		 ((sc->devinfo.bc_ver >> 8) & 0xff));
-	PMD_DRV_LOG(INFO, "Bootcode version: %s", sc->devinfo.bc_ver_str);
+	PMD_DRV_LOG(INFO, sc, "Bootcode version: %s", sc->devinfo.bc_ver_str);
 
 	/* get the bootcode shmem address */
 	sc->devinfo.mf_cfg_base = bnx2x_get_shmem_mf_cfg_base(sc);
@@ -8328,7 +8341,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
 			}
 
 			if (REG_RD(sc, IGU_REG_RESET_MEMORIES)) {
-				PMD_DRV_LOG(NOTICE,
+				PMD_DRV_LOG(NOTICE, sc,
 					    "FORCING IGU Normal Mode failed!!!");
 				bnx2x_release_hw_lock(sc, HW_LOCK_RESOURCE_RESET);
 				return -1;
@@ -8336,10 +8349,10 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
 		}
 
 		if (val & IGU_BLOCK_CONFIGURATION_REG_BACKWARD_COMP_EN) {
-			PMD_DRV_LOG(DEBUG, "IGU Backward Compatible Mode");
+			PMD_DRV_LOG(DEBUG, sc, "IGU Backward Compatible Mode");
 			sc->devinfo.int_block |= INT_BLOCK_MODE_BW_COMP;
 		} else {
-			PMD_DRV_LOG(DEBUG, "IGU Normal Mode");
+			PMD_DRV_LOG(DEBUG, sc, "IGU Normal Mode");
 		}
 
 		rc = bnx2x_get_igu_cam_info(sc);
@@ -8413,7 +8426,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
 	}
 
 	if (!(sc->port.supported[0] || sc->port.supported[1])) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "Invalid phy config in NVRAM (PHY1=0x%08x PHY2=0x%08x)",
 			    SHMEM_RD(sc,
 				     dev_info.port_hw_config
@@ -8439,7 +8452,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
 				   NIG_REG_XGXS0_CTRL_PHY_ADDR + port * 0x18);
 			break;
 		default:
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "Invalid switch config in"
 				    "link_config=0x%08x",
 				    sc->port.link_config[0]);
@@ -8447,7 +8460,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
 		}
 	}
 
-	PMD_DRV_LOG(INFO, "PHY addr 0x%08x", sc->port.phy_addr);
+	PMD_DRV_LOG(INFO, sc, "PHY addr 0x%08x", sc->port.phy_addr);
 
 	/* mask what we support according to speed_cap_mask per configuration */
 	for (idx = 0; idx < cfg_size; idx++) {
@@ -8500,7 +8513,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
 		}
 	}
 
-	PMD_DRV_LOG(INFO, "PHY supported 0=0x%08x 1=0x%08x",
+	PMD_DRV_LOG(INFO, sc, "PHY supported 0=0x%08x 1=0x%08x",
 		    sc->port.supported[0], sc->port.supported[1]);
 }
 
@@ -8559,7 +8572,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
 				sc->port.advertising[idx] |=
 				    (ADVERTISED_10baseT_Full | ADVERTISED_TP);
 			} else {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Invalid NVRAM config link_config=0x%08x "
 					    "speed_cap_mask=0x%08x",
 					    link_config,
@@ -8579,7 +8592,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
 				sc->port.advertising[idx] |=
 				    (ADVERTISED_10baseT_Half | ADVERTISED_TP);
 			} else {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Invalid NVRAM config link_config=0x%08x "
 					    "speed_cap_mask=0x%08x",
 					    link_config,
@@ -8598,7 +8611,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
 				sc->port.advertising[idx] |=
 				    (ADVERTISED_100baseT_Full | ADVERTISED_TP);
 			} else {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Invalid NVRAM config link_config=0x%08x "
 					    "speed_cap_mask=0x%08x",
 					    link_config,
@@ -8618,7 +8631,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
 				sc->port.advertising[idx] |=
 				    (ADVERTISED_100baseT_Half | ADVERTISED_TP);
 			} else {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Invalid NVRAM config link_config=0x%08x "
 					    "speed_cap_mask=0x%08x",
 					    link_config,
@@ -8636,7 +8649,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
 				sc->port.advertising[idx] |=
 				    (ADVERTISED_1000baseT_Full | ADVERTISED_TP);
 			} else {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Invalid NVRAM config link_config=0x%08x "
 					    "speed_cap_mask=0x%08x",
 					    link_config,
@@ -8654,7 +8667,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
 				sc->port.advertising[idx] |=
 				    (ADVERTISED_2500baseX_Full | ADVERTISED_TP);
 			} else {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Invalid NVRAM config link_config=0x%08x "
 					    "speed_cap_mask=0x%08x",
 					    link_config,
@@ -8673,7 +8686,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
 				    (ADVERTISED_10000baseT_Full |
 				     ADVERTISED_FIBRE);
 			} else {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Invalid NVRAM config link_config=0x%08x "
 					    "speed_cap_mask=0x%08x",
 					    link_config,
@@ -8688,7 +8701,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
 			break;
 
 		default:
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "Invalid NVRAM config link_config=0x%08x "
 				    "speed_cap_mask=0x%08x", link_config,
 				    sc->link_params.speed_cap_mask[idx]);
@@ -8719,7 +8732,7 @@ static void bnx2x_get_phy_info(struct bnx2x_softc *sc)
 	uint8_t port = SC_PORT(sc);
 	uint32_t eee_mode;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	/* shmem data already read in bnx2x_get_shmem_info() */
 
@@ -8879,7 +8892,7 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc)
 		snprintf(buf, sizeof(buf), "fp_%d_sb", i);
 		if (bnx2x_dma_alloc(sc, sizeof(union bnx2x_host_hc_status_block),
 				  &fp->sb_dma, buf, RTE_CACHE_LINE_SIZE) != 0) {
-			PMD_DRV_LOG(NOTICE, "Failed to alloc %s", buf);
+			PMD_DRV_LOG(NOTICE, sc, "Failed to alloc %s", buf);
 			return -1;
 		} else {
 			if (CHIP_IS_E2E3(sc)) {
@@ -8969,7 +8982,7 @@ static int bnx2x_prev_mcp_done(struct bnx2x_softc *sc)
 	uint32_t rc = bnx2x_fw_command(sc, DRV_MSG_CODE_UNLOAD_DONE,
 				     DRV_MSG_CODE_UNLOAD_SKIP_LINK_RESET);
 	if (!rc) {
-		PMD_DRV_LOG(NOTICE, "MCP response failure, aborting");
+		PMD_DRV_LOG(NOTICE, sc, "MCP response failure, aborting");
 		return -1;
 	}
 
@@ -9001,12 +9014,12 @@ static uint8_t bnx2x_prev_is_path_marked(struct bnx2x_softc *sc)
 	tmp = bnx2x_prev_path_get_entry(sc);
 	if (tmp) {
 		if (tmp->aer) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Path %d/%d/%d was marked by AER",
 				    sc->pcie_bus, sc->pcie_device, SC_PATH(sc));
 		} else {
 			rc = TRUE;
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Path %d/%d/%d was already cleaned from previous drivers",
 				    sc->pcie_bus, sc->pcie_device, SC_PATH(sc));
 		}
@@ -9027,11 +9040,11 @@ static int bnx2x_prev_mark_path(struct bnx2x_softc *sc, uint8_t after_undi)
 	tmp = bnx2x_prev_path_get_entry(sc);
 	if (tmp) {
 		if (!tmp->aer) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Re-marking AER in path %d/%d/%d",
 				    sc->pcie_bus, sc->pcie_device, SC_PATH(sc));
 		} else {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Removing AER indication from path %d/%d/%d",
 				    sc->pcie_bus, sc->pcie_device, SC_PATH(sc));
 			tmp->aer = 0;
@@ -9047,7 +9060,7 @@ static int bnx2x_prev_mark_path(struct bnx2x_softc *sc, uint8_t after_undi)
 	tmp = rte_malloc("", sizeof(struct bnx2x_prev_list_node),
 			 RTE_CACHE_LINE_SIZE);
 	if (!tmp) {
-		PMD_DRV_LOG(NOTICE, "Failed to allocate 'bnx2x_prev_list_node'");
+		PMD_DRV_LOG(NOTICE, sc, "Failed to allocate 'bnx2x_prev_list_node'");
 		return -1;
 	}
 
@@ -9072,13 +9085,13 @@ static int bnx2x_do_flr(struct bnx2x_softc *sc)
 
 	/* only E2 and onwards support FLR */
 	if (CHIP_IS_E1x(sc)) {
-		PMD_DRV_LOG(WARNING, "FLR not supported in E1H");
+		PMD_DRV_LOG(WARNING, sc, "FLR not supported in E1H");
 		return -1;
 	}
 
 	/* only bootcode REQ_BC_VER_4_INITIATE_FLR and onwards support flr */
 	if (sc->devinfo.bc_ver < REQ_BC_VER_4_INITIATE_FLR) {
-		PMD_DRV_LOG(WARNING,
+		PMD_DRV_LOG(WARNING, sc,
 			    "FLR not supported by BC_VER: 0x%08x",
 			    sc->devinfo.bc_ver);
 		return -1;
@@ -9095,7 +9108,7 @@ static int bnx2x_do_flr(struct bnx2x_softc *sc)
 		}
 	}
 
-	PMD_DRV_LOG(NOTICE, "PCIE transaction is not cleared, "
+	PMD_DRV_LOG(NOTICE, sc, "PCIE transaction is not cleared, "
 		    "proceeding with reset anyway");
 
 clear:
@@ -9243,7 +9256,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
 		if (reset_reg & MISC_REGISTERS_RESET_REG_1_RST_DORQ) {
 			tmp_reg = REG_RD(sc, DORQ_REG_NORM_CID_OFST);
 			if (tmp_reg == 0x7) {
-				PMD_DRV_LOG(DEBUG, "UNDI previously loaded");
+				PMD_DRV_LOG(DEBUG, sc, "UNDI previously loaded");
 				prev_undi = TRUE;
 				/* clear the UNDI indication */
 				REG_WR(sc, DORQ_REG_NORM_CID_OFST, 0);
@@ -9262,7 +9275,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
 				break;
 			}
 
-			PMD_DRV_LOG(DEBUG, "BRB still has 0x%08x", tmp_reg);
+			PMD_DRV_LOG(DEBUG, sc, "BRB still has 0x%08x", tmp_reg);
 
 			/* reset timer as long as BRB actually gets emptied */
 			if (prev_brb > tmp_reg) {
@@ -9280,7 +9293,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
 		}
 
 		if (!timer_count) {
-			PMD_DRV_LOG(NOTICE, "Failed to empty BRB");
+			PMD_DRV_LOG(NOTICE, sc, "Failed to empty BRB");
 		}
 	}
 
@@ -9335,7 +9348,7 @@ static int bnx2x_prev_unload_uncommon(struct bnx2x_softc *sc)
 		return 0;
 	}
 
-	PMD_DRV_LOG(INFO, "Could not FLR");
+	PMD_DRV_LOG(INFO, sc, "Could not FLR");
 
 	/* Close the MCP request, return failure */
 	rc = bnx2x_prev_mcp_done(sc);
@@ -9382,7 +9395,7 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
 		/* Lock MCP using an unload request */
 		fw = bnx2x_fw_command(sc, DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS, 0);
 		if (!fw) {
-			PMD_DRV_LOG(NOTICE, "MCP response failure, aborting");
+			PMD_DRV_LOG(NOTICE, sc, "MCP response failure, aborting");
 			rc = -1;
 			break;
 		}
@@ -9402,7 +9415,7 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
 	} while (--time_counter);
 
 	if (!time_counter || rc) {
-		PMD_DRV_LOG(NOTICE, "Failed to unload previous driver!");
+		PMD_DRV_LOG(NOTICE, sc, "Failed to unload previous driver!");
 		rc = -1;
 	}
 
@@ -9419,7 +9432,7 @@ bnx2x_dcbx_set_state(struct bnx2x_softc *sc, uint8_t dcb_on, uint32_t dcbx_enabl
 		sc->dcb_state = FALSE;
 		sc->dcbx_enabled = BNX2X_DCBX_ENABLED_INVALID;
 	}
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "DCB state [%s:%s]",
 		    dcb_on ? "ON" : "OFF",
 		    (dcbx_enabled == BNX2X_DCBX_ENABLED_OFF) ? "user-mode" :
@@ -9452,7 +9465,7 @@ static void bnx2x_init_multi_cos(struct bnx2x_softc *sc)
 		if (cos < sc->max_cos) {
 			sc->prio_to_cos[pri] = cos;
 		} else {
-			PMD_DRV_LOG(WARNING,
+			PMD_DRV_LOG(WARNING, sc,
 				    "Invalid COS %d for priority %d "
 				    "(max COS is %d), setting to 0", cos, pri,
 				    (sc->max_cos - 1));
@@ -9473,7 +9486,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
 	cap = sc->pci_caps = rte_zmalloc("caps", sizeof(struct bnx2x_pci_cap),
 					 RTE_CACHE_LINE_SIZE);
 	if (!cap) {
-		PMD_DRV_LOG(NOTICE, "Failed to allocate memory");
+		PMD_DRV_LOG(NOTICE, sc, "Failed to allocate memory");
 		return -ENOMEM;
 	}
 
@@ -9484,7 +9497,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
 	pci_read(sc, PCIR_STATUS, &status, 2);
 	if (!(status & PCIM_STATUS_CAPPRESENT)) {
 #endif
-		PMD_DRV_LOG(NOTICE, "PCIe capability reading failed");
+		PMD_DRV_LOG(NOTICE, sc, "PCIe capability reading failed");
 		return -1;
 	}
 
@@ -9504,7 +9517,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
 					sizeof(struct bnx2x_pci_cap),
 					RTE_CACHE_LINE_SIZE);
 		if (!cap->next) {
-			PMD_DRV_LOG(NOTICE, "Failed to allocate memory");
+			PMD_DRV_LOG(NOTICE, sc, "Failed to allocate memory");
 			return -ENOMEM;
 		}
 		cap = cap->next;
@@ -9540,25 +9553,25 @@ void bnx2x_load_firmware(struct bnx2x_softc *sc)
 		? FW_NAME_57711 : FW_NAME_57810;
 	f = open(fwname, O_RDONLY);
 	if (f < 0) {
-		PMD_DRV_LOG(NOTICE, "Can't open firmware file");
+		PMD_DRV_LOG(NOTICE, sc, "Can't open firmware file");
 		return;
 	}
 
 	if (fstat(f, &st) < 0) {
-		PMD_DRV_LOG(NOTICE, "Can't stat firmware file");
+		PMD_DRV_LOG(NOTICE, sc, "Can't stat firmware file");
 		close(f);
 		return;
 	}
 
 	sc->firmware = rte_zmalloc("bnx2x_fw", st.st_size, RTE_CACHE_LINE_SIZE);
 	if (!sc->firmware) {
-		PMD_DRV_LOG(NOTICE, "Can't allocate memory for firmware");
+		PMD_DRV_LOG(NOTICE, sc, "Can't allocate memory for firmware");
 		close(f);
 		return;
 	}
 
 	if (read(f, sc->firmware, st.st_size) != st.st_size) {
-		PMD_DRV_LOG(NOTICE, "Can't read firmware data");
+		PMD_DRV_LOG(NOTICE, sc, "Can't read firmware data");
 		close(f);
 		return;
 	}
@@ -9566,10 +9579,11 @@ void bnx2x_load_firmware(struct bnx2x_softc *sc)
 
 	sc->fw_len = st.st_size;
 	if (sc->fw_len < FW_HEADER_LEN) {
-		PMD_DRV_LOG(NOTICE, "Invalid fw size: %" PRIu64, sc->fw_len);
+		PMD_DRV_LOG(NOTICE, sc,
+			    "Invalid fw size: %" PRIu64, sc->fw_len);
 		return;
 	}
-	PMD_DRV_LOG(DEBUG, "fw_len = %" PRIu64, sc->fw_len);
+	PMD_DRV_LOG(DEBUG, sc, "fw_len = %" PRIu64, sc->fw_len);
 }
 
 static void
@@ -9636,11 +9650,11 @@ int bnx2x_attach(struct bnx2x_softc *sc)
 {
 	int rc;
 
-	PMD_DRV_LOG(DEBUG, "Starting attach...");
+	PMD_DRV_LOG(DEBUG, sc, "Starting attach...");
 
 	rc = bnx2x_pci_get_caps(sc);
 	if (rc) {
-		PMD_DRV_LOG(NOTICE, "PCIe caps reading was failed");
+		PMD_DRV_LOG(NOTICE, sc, "PCIe caps reading was failed");
 		return rc;
 	}
 
@@ -9679,7 +9693,7 @@ int bnx2x_attach(struct bnx2x_softc *sc)
 
 		/* get device info and set params */
 		if (bnx2x_get_device_info(sc) != 0) {
-			PMD_DRV_LOG(NOTICE, "getting device info");
+			PMD_DRV_LOG(NOTICE, sc, "getting device info");
 			return -ENXIO;
 		}
 
@@ -9778,7 +9792,7 @@ bnx2x_igu_clear_sb_gen(struct bnx2x_softc *sc, uint8_t func, uint8_t idu_sb_id,
 
 	mb();
 
-	PMD_DRV_LOG(DEBUG, "write 0x%08x to IGU(via GRC) addr 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "write 0x%08x to IGU(via GRC) addr 0x%x",
 		    ctl, igu_addr_ctl);
 	REG_WR(sc, igu_addr_ctl, ctl);
 
@@ -9790,7 +9804,7 @@ bnx2x_igu_clear_sb_gen(struct bnx2x_softc *sc, uint8_t func, uint8_t idu_sb_id,
 	}
 
 	if (!(REG_RD(sc, igu_addr_ack) & sb_bit)) {
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "Unable to finish IGU cleanup: "
 			    "idu_sb_id %d offset %d bit %d (cnt %d)",
 			    idu_sb_id, idu_sb_id / 32, idu_sb_id % 32, cnt);
@@ -9810,7 +9824,7 @@ static void bnx2x_reset_common(struct bnx2x_softc *sc)
 {
 	uint32_t val = 0x1400;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	/* reset_common */
 	REG_WR(sc, (GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR),
@@ -10019,7 +10033,8 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
 	uint8_t abs_func_id;
 	uint32_t val;
 
-	PMD_DRV_LOG(DEBUG, "starting common init for func %d", SC_ABS_FUNC(sc));
+	PMD_DRV_LOG(DEBUG, sc,
+		    "starting common init for func %d", SC_ABS_FUNC(sc));
 
 	/*
 	 * take the RESET lock to protect undi_unload flow from accessing
@@ -10102,12 +10117,12 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
 
 	val = REG_RD(sc, PXP2_REG_RQ_CFG_DONE);
 	if (val != 1) {
-		PMD_DRV_LOG(NOTICE, "PXP2 CFG failed");
+		PMD_DRV_LOG(NOTICE, sc, "PXP2 CFG failed");
 		return -1;
 	}
 	val = REG_RD(sc, PXP2_REG_RD_INIT_DONE);
 	if (val != 1) {
-		PMD_DRV_LOG(NOTICE, "PXP2 RD_INIT failed");
+		PMD_DRV_LOG(NOTICE, sc, "PXP2 RD_INIT failed");
 		return -1;
 	}
 
@@ -10229,7 +10244,7 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
 		} while (factor-- && (val != 1));
 
 		if (val != 1) {
-			PMD_DRV_LOG(NOTICE, "ATC_INIT failed");
+			PMD_DRV_LOG(NOTICE, sc, "ATC_INIT failed");
 			return -1;
 		}
 	}
@@ -10367,7 +10382,7 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
 
 	if (sizeof(union cdu_context) != 1024) {
 /* we currently assume that a context is 1024 bytes */
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "please adjust the size of cdu_context(%ld)",
 			    (long)sizeof(union cdu_context));
 	}
@@ -10429,17 +10444,17 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
 	/* finish CFC init */
 	val = reg_poll(sc, CFC_REG_LL_INIT_DONE, 1, 100, 10);
 	if (val != 1) {
-		PMD_DRV_LOG(NOTICE, "CFC LL_INIT failed");
+		PMD_DRV_LOG(NOTICE, sc, "CFC LL_INIT failed");
 		return -1;
 	}
 	val = reg_poll(sc, CFC_REG_AC_INIT_DONE, 1, 100, 10);
 	if (val != 1) {
-		PMD_DRV_LOG(NOTICE, "CFC AC_INIT failed");
+		PMD_DRV_LOG(NOTICE, sc, "CFC AC_INIT failed");
 		return -1;
 	}
 	val = reg_poll(sc, CFC_REG_CAM_INIT_DONE, 1, 100, 10);
 	if (val != 1) {
-		PMD_DRV_LOG(NOTICE, "CFC CAM_INIT failed");
+		PMD_DRV_LOG(NOTICE, sc, "CFC CAM_INIT failed");
 		return -1;
 	}
 	REG_WR(sc, CFC_REG_DEBUG0, 0);
@@ -10492,7 +10507,7 @@ static int bnx2x_init_hw_port(struct bnx2x_softc *sc)
 	uint32_t low, high;
 	uint32_t val;
 
-	PMD_DRV_LOG(DEBUG, "starting port init for port %d", port);
+	PMD_DRV_LOG(DEBUG, sc, "starting port init for port %d", port);
 
 	REG_WR(sc, NIG_REG_MASK_INTERRUPT_PORT0 + port * 4, 0);
 
@@ -10719,7 +10734,7 @@ bnx2x_flr_clnup_poll_hw_counter(struct bnx2x_softc *sc, uint32_t reg,
 	uint32_t val = bnx2x_flr_clnup_reg_poll(sc, reg, 0, poll_cnt);
 
 	if (val != 0) {
-		PMD_DRV_LOG(NOTICE, "%s usage count=%d", msg, val);
+		PMD_DRV_LOG(NOTICE, sc, "%s usage count=%d", msg, val);
 		return -1;
 	}
 
@@ -10811,7 +10826,7 @@ bnx2x_send_final_clnup(struct bnx2x_softc *sc, uint8_t clnup_func,
 	int ret = 0;
 
 	if (REG_RD(sc, comp_addr)) {
-		PMD_DRV_LOG(NOTICE,
+		PMD_DRV_LOG(NOTICE, sc,
 			    "Cleanup complete was not 0 before sending");
 		return -1;
 	}
@@ -10824,8 +10839,8 @@ bnx2x_send_final_clnup(struct bnx2x_softc *sc, uint8_t clnup_func,
 	REG_WR(sc, XSDM_REG_OPERATION_GEN, op_gen_command);
 
 	if (bnx2x_flr_clnup_reg_poll(sc, comp_addr, 1, poll_cnt) != 1) {
-		PMD_DRV_LOG(NOTICE, "FW final cleanup did not succeed");
-		PMD_DRV_LOG(DEBUG, "At timeout completion address contained %x",
+		PMD_DRV_LOG(NOTICE, sc, "FW final cleanup did not succeed");
+		PMD_DRV_LOG(DEBUG, sc, "At timeout completion address contained %x",
 			    (REG_RD(sc, comp_addr)));
 		rte_panic("FLR cleanup failed");
 		return -1;
@@ -10941,28 +10956,30 @@ static void bnx2x_hw_enable_status(struct bnx2x_softc *sc)
 	__rte_unused uint32_t val;
 
 	val = REG_RD(sc, CFC_REG_WEAK_ENABLE_PF);
-	PMD_DRV_LOG(DEBUG, "CFC_REG_WEAK_ENABLE_PF is 0x%x", val);
+	PMD_DRV_LOG(DEBUG, sc, "CFC_REG_WEAK_ENABLE_PF is 0x%x", val);
 
 	val = REG_RD(sc, PBF_REG_DISABLE_PF);
-	PMD_DRV_LOG(DEBUG, "PBF_REG_DISABLE_PF is 0x%x", val);
+	PMD_DRV_LOG(DEBUG, sc, "PBF_REG_DISABLE_PF is 0x%x", val);
 
 	val = REG_RD(sc, IGU_REG_PCI_PF_MSI_EN);
-	PMD_DRV_LOG(DEBUG, "IGU_REG_PCI_PF_MSI_EN is 0x%x", val);
+	PMD_DRV_LOG(DEBUG, sc, "IGU_REG_PCI_PF_MSI_EN is 0x%x", val);
 
 	val = REG_RD(sc, IGU_REG_PCI_PF_MSIX_EN);
-	PMD_DRV_LOG(DEBUG, "IGU_REG_PCI_PF_MSIX_EN is 0x%x", val);
+	PMD_DRV_LOG(DEBUG, sc, "IGU_REG_PCI_PF_MSIX_EN is 0x%x", val);
 
 	val = REG_RD(sc, IGU_REG_PCI_PF_MSIX_FUNC_MASK);
-	PMD_DRV_LOG(DEBUG, "IGU_REG_PCI_PF_MSIX_FUNC_MASK is 0x%x", val);
+	PMD_DRV_LOG(DEBUG, sc, "IGU_REG_PCI_PF_MSIX_FUNC_MASK is 0x%x", val);
 
 	val = REG_RD(sc, PGLUE_B_REG_SHADOW_BME_PF_7_0_CLR);
-	PMD_DRV_LOG(DEBUG, "PGLUE_B_REG_SHADOW_BME_PF_7_0_CLR is 0x%x", val);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "PGLUE_B_REG_SHADOW_BME_PF_7_0_CLR is 0x%x", val);
 
 	val = REG_RD(sc, PGLUE_B_REG_FLR_REQUEST_PF_7_0_CLR);
-	PMD_DRV_LOG(DEBUG, "PGLUE_B_REG_FLR_REQUEST_PF_7_0_CLR is 0x%x", val);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "PGLUE_B_REG_FLR_REQUEST_PF_7_0_CLR is 0x%x", val);
 
 	val = REG_RD(sc, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER);
-	PMD_DRV_LOG(DEBUG, "PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER is 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER is 0x%x",
 		    val);
 }
 
@@ -11006,7 +11023,7 @@ static int bnx2x_pf_flr_clnup(struct bnx2x_softc *sc)
 
 	/* Verify no pending pci transactions */
 	if (bnx2x_is_pcie_pending(sc)) {
-		PMD_DRV_LOG(NOTICE, "PCIE Transactions still pending");
+		PMD_DRV_LOG(NOTICE, sc, "PCIE Transactions still pending");
 	}
 
 	/* Debug */
@@ -11033,13 +11050,13 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
 	int main_mem_width, rc;
 	uint32_t i;
 
-	PMD_DRV_LOG(DEBUG, "starting func init for func %d", func);
+	PMD_DRV_LOG(DEBUG, sc, "starting func init for func %d", func);
 
 	/* FLR cleanup */
 	if (!CHIP_IS_E1x(sc)) {
 		rc = bnx2x_pf_flr_clnup(sc);
 		if (rc) {
-			PMD_DRV_LOG(NOTICE, "FLR cleanup failed!");
+			PMD_DRV_LOG(NOTICE, sc, "FLR cleanup failed!");
 			return rc;
 		}
 	}
@@ -11286,7 +11303,7 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
 
 		val = REG_RD(sc, main_mem_prty_clr);
 		if (val) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Parity errors in HC block during function init (0x%x)!",
 				    val);
 		}
@@ -11324,7 +11341,7 @@ static void bnx2x_link_reset(struct bnx2x_softc *sc)
 		elink_lfa_reset(&sc->link_params, &sc->link_vars);
 	} else {
 		if (!CHIP_REV_IS_SLOW(sc)) {
-			PMD_DRV_LOG(WARNING,
+			PMD_DRV_LOG(WARNING, sc,
 				    "Bootcode is missing - cannot reset link");
 		}
 	}
@@ -11354,7 +11371,7 @@ static void bnx2x_reset_port(struct bnx2x_softc *sc)
 	/* Check for BRB port occupancy */
 	val = REG_RD(sc, BRB1_REG_PORT_NUM_OCC_BLOCKS_0 + port * 4);
 	if (val) {
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "BRB1 is not empty, %d blocks are occupied", val);
 	}
 }
@@ -11548,10 +11565,10 @@ static int ecore_gunzip(struct bnx2x_softc *sc, const uint8_t * zbuf, int len)
 	int ret;
 	int data_begin = cut_gzip_prefix(zbuf, len);
 
-	PMD_DRV_LOG(DEBUG, "ecore_gunzip %d", len);
+	PMD_DRV_LOG(DEBUG, sc, "ecore_gunzip %d", len);
 
 	if (data_begin <= 0) {
-		PMD_DRV_LOG(NOTICE, "bad gzip prefix");
+		PMD_DRV_LOG(NOTICE, sc, "bad gzip prefix");
 		return -1;
 	}
 
@@ -11563,19 +11580,19 @@ static int ecore_gunzip(struct bnx2x_softc *sc, const uint8_t * zbuf, int len)
 
 	ret = inflateInit2(&zlib_stream, -MAX_WBITS);
 	if (ret != Z_OK) {
-		PMD_DRV_LOG(NOTICE, "zlib inflateInit2 error");
+		PMD_DRV_LOG(NOTICE, sc, "zlib inflateInit2 error");
 		return ret;
 	}
 
 	ret = inflate(&zlib_stream, Z_FINISH);
 	if ((ret != Z_STREAM_END) && (ret != Z_OK)) {
-		PMD_DRV_LOG(NOTICE, "zlib inflate error: %d %s", ret,
+		PMD_DRV_LOG(NOTICE, sc, "zlib inflate error: %d %s", ret,
 			    zlib_stream.msg);
 	}
 
 	sc->gz_outlen = zlib_stream.total_out;
 	if (sc->gz_outlen & 0x3) {
-		PMD_DRV_LOG(NOTICE, "firmware is not aligned. gz_outlen == %d",
+		PMD_DRV_LOG(NOTICE, sc, "firmware is not aligned. gz_outlen == %d",
 			    sc->gz_outlen);
 	}
 	sc->gz_outlen >>= 2;
@@ -11605,7 +11622,7 @@ ecore_storm_memset_struct(struct bnx2x_softc *sc, uint32_t addr, size_t size,
 	}
 }
 
-static const char *get_ext_phy_type(uint32_t ext_phy_type)
+__rte_unused static const char *get_ext_phy_type(uint32_t ext_phy_type)
 {
 	uint32_t phy_type_idx = ext_phy_type >> 8;
 	static const char *types[] =
@@ -11623,7 +11640,7 @@ static const char *get_ext_phy_type(uint32_t ext_phy_type)
 		return types[13];
 }
 
-static const char *get_state(uint32_t state)
+__rte_unused static const char *get_state(uint32_t state)
 {
 	uint32_t state_idx = state >> 12;
 	static const char *states[] = { "CLOSED", "OPENING_WAIT4_LOAD",
@@ -11639,7 +11656,7 @@ static const char *get_state(uint32_t state)
 		return states[0x10];
 }
 
-static const char *get_recovery_state(uint32_t state)
+__rte_unused static const char *get_recovery_state(uint32_t state)
 {
 	static const char *states[] = { "NONE", "DONE", "INIT",
 		"WAIT", "FAILED", "NIC_LOADING"
@@ -11647,7 +11664,7 @@ static const char *get_recovery_state(uint32_t state)
 	return states[state];
 }
 
-static const char *get_rx_mode(uint32_t mode)
+__rte_unused static const char *get_rx_mode(uint32_t mode)
 {
 	static const char *modes[] = { "NONE", "NORMAL", "ALLMULTI",
 		"PROMISC", "MAX_MULTICAST", "ERROR"
@@ -11662,7 +11679,7 @@ static const char *get_rx_mode(uint32_t mode)
 }
 
 #define BNX2X_INFO_STR_MAX 256
-static const char *get_bnx2x_flags(uint32_t flags)
+__rte_unused static const char *get_bnx2x_flags(uint32_t flags)
 {
 	int i;
 	static const char *flag[] = { "ONE_PORT ", "NO_ISCSI ",
@@ -11694,7 +11711,7 @@ void bnx2x_print_adapter_info(struct bnx2x_softc *sc)
 	int i = 0;
 	__rte_unused uint32_t ext_phy_type;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 	if (sc->link_vars.phy_flags & PHY_XGXS_FLAG)
 		ext_phy_type = ELINK_XGXS_EXT_PHY_TYPE(REG_RD(sc,
 							      sc->
@@ -11713,97 +11730,102 @@ void bnx2x_print_adapter_info(struct bnx2x_softc *sc)
 									 dev_info.port_hw_config
 									 [0].external_phy_config)));
 
-	PMD_INIT_LOG(DEBUG, "\n\n===================================\n");
+	PMD_DRV_LOG(INFO, sc, "\n\n===================================\n");
 	/* Hardware chip info. */
-	PMD_INIT_LOG(DEBUG, "%12s : %#08x", "ASIC", sc->devinfo.chip_id);
-	PMD_INIT_LOG(DEBUG, "%12s : %c%d", "Rev", (CHIP_REV(sc) >> 12) + 'A',
+	PMD_DRV_LOG(INFO, sc, "%12s : %#08x", "ASIC", sc->devinfo.chip_id);
+	PMD_DRV_LOG(INFO, sc, "%12s : %c%d", "Rev", (CHIP_REV(sc) >> 12) + 'A',
 		     (CHIP_METAL(sc) >> 4));
 
 	/* Bus info. */
-	PMD_INIT_LOG(DEBUG, "%12s : %d, ", "Bus PCIe", sc->devinfo.pcie_link_width);
+	PMD_DRV_LOG(INFO, sc,
+		    "%12s : %d, ", "Bus PCIe", sc->devinfo.pcie_link_width);
 	switch (sc->devinfo.pcie_link_speed) {
 	case 1:
-		PMD_INIT_LOG(DEBUG, "%23s", "2.5 Gbps");
+		PMD_DRV_LOG(INFO, sc, "%23s", "2.5 Gbps");
 		break;
 	case 2:
-		PMD_INIT_LOG(DEBUG, "%21s", "5 Gbps");
+		PMD_DRV_LOG(INFO, sc, "%21s", "5 Gbps");
 		break;
 	case 4:
-		PMD_INIT_LOG(DEBUG, "%21s", "8 Gbps");
+		PMD_DRV_LOG(INFO, sc, "%21s", "8 Gbps");
 		break;
 	default:
-		PMD_INIT_LOG(DEBUG, "%33s", "Unknown link speed");
+		PMD_DRV_LOG(INFO, sc, "%33s", "Unknown link speed");
 	}
 
 	/* Device features. */
-	PMD_INIT_LOG(DEBUG, "%12s : ", "Flags");
+	PMD_DRV_LOG(INFO, sc, "%12s : ", "Flags");
 
 	/* Miscellaneous flags. */
 	if (sc->devinfo.pcie_cap_flags & BNX2X_MSI_CAPABLE_FLAG) {
-		PMD_INIT_LOG(DEBUG, "%18s", "MSI");
+		PMD_DRV_LOG(INFO, sc, "%18s", "MSI");
 		i++;
 	}
 
 	if (sc->devinfo.pcie_cap_flags & BNX2X_MSIX_CAPABLE_FLAG) {
 		if (i > 0)
-			PMD_INIT_LOG(DEBUG, "|");
-		PMD_INIT_LOG(DEBUG, "%20s", "MSI-X");
+			PMD_DRV_LOG(INFO, sc, "|");
+		PMD_DRV_LOG(INFO, sc, "%20s", "MSI-X");
 		i++;
 	}
 
 	if (IS_PF(sc)) {
-		PMD_INIT_LOG(DEBUG, "%12s : ", "Queues");
+		PMD_DRV_LOG(INFO, sc, "%12s : ", "Queues");
 		switch (sc->sp->rss_rdata.rss_mode) {
 		case ETH_RSS_MODE_DISABLED:
-			PMD_INIT_LOG(DEBUG, "%19s", "None");
+			PMD_DRV_LOG(INFO, sc, "%19s", "None");
 			break;
 		case ETH_RSS_MODE_REGULAR:
-			PMD_INIT_LOG(DEBUG, "%18s : %d", "RSS", sc->num_queues);
+			PMD_DRV_LOG(INFO, sc,
+				    "%18s : %d", "RSS", sc->num_queues);
 			break;
 		default:
-			PMD_INIT_LOG(DEBUG, "%22s", "Unknown");
+			PMD_DRV_LOG(INFO, sc, "%22s", "Unknown");
 			break;
 		}
 	}
 
 	/* RTE and Driver versions */
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "DPDK",
-		     rte_version());
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "Driver",
-		     bnx2x_pmd_version());
+	PMD_DRV_LOG(INFO, sc, "%12s : %s", "DPDK",
+			rte_version());
+	PMD_DRV_LOG(INFO, sc, "%12s : %s", "Driver",
+			bnx2x_pmd_version());
 
 	/* Firmware versions and device features. */
-	PMD_INIT_LOG(DEBUG, "%12s : %d.%d.%d",
+	PMD_DRV_LOG(INFO, sc, "%12s : %d.%d.%d",
 		     "Firmware",
 		     BNX2X_5710_FW_MAJOR_VERSION,
 		     BNX2X_5710_FW_MINOR_VERSION,
 		     BNX2X_5710_FW_REVISION_VERSION);
-	PMD_INIT_LOG(DEBUG, "%12s : %s",
+	PMD_DRV_LOG(INFO, sc, "%12s : %s",
 		     "Bootcode", sc->devinfo.bc_ver_str);
 
-	PMD_INIT_LOG(DEBUG, "\n\n===================================\n");
-	PMD_INIT_LOG(DEBUG, "%12s : %u", "Bnx2x Func", sc->pcie_func);
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "Bnx2x Flags", get_bnx2x_flags(sc->flags));
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "DMAE Is",
+	PMD_DRV_LOG(INFO, sc, "\n\n===================================\n");
+	PMD_DRV_LOG(INFO, sc, "%12s : %u", "Bnx2x Func", sc->pcie_func);
+	PMD_DRV_LOG(INFO, sc,
+		    "%12s : %s", "Bnx2x Flags", get_bnx2x_flags(sc->flags));
+	PMD_DRV_LOG(INFO, sc, "%12s : %s", "DMAE Is",
 		     (sc->dmae_ready ? "Ready" : "Not Ready"));
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "OVLAN", (OVLAN(sc) ? "YES" : "NO"));
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "MF", (IS_MF(sc) ? "YES" : "NO"));
-	PMD_INIT_LOG(DEBUG, "%12s : %u", "MTU", sc->mtu);
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "PHY Type", get_ext_phy_type(ext_phy_type));
-	PMD_INIT_LOG(DEBUG, "%12s : %x:%x:%x:%x:%x:%x", "MAC Addr",
+	PMD_DRV_LOG(INFO, sc, "%12s : %s", "OVLAN", (OVLAN(sc) ? "YES" : "NO"));
+	PMD_DRV_LOG(INFO, sc, "%12s : %s", "MF", (IS_MF(sc) ? "YES" : "NO"));
+	PMD_DRV_LOG(INFO, sc, "%12s : %u", "MTU", sc->mtu);
+	PMD_DRV_LOG(INFO, sc,
+		    "%12s : %s", "PHY Type", get_ext_phy_type(ext_phy_type));
+	PMD_DRV_LOG(INFO, sc, "%12s : %x:%x:%x:%x:%x:%x", "MAC Addr",
 			sc->link_params.mac_addr[0],
 			sc->link_params.mac_addr[1],
 			sc->link_params.mac_addr[2],
 			sc->link_params.mac_addr[3],
 			sc->link_params.mac_addr[4],
 			sc->link_params.mac_addr[5]);
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "RX Mode", get_rx_mode(sc->rx_mode));
-	PMD_INIT_LOG(DEBUG, "%12s : %s", "State", get_state(sc->state));
+	PMD_DRV_LOG(INFO, sc, "%12s : %s", "RX Mode", get_rx_mode(sc->rx_mode));
+	PMD_DRV_LOG(INFO, sc, "%12s : %s", "State", get_state(sc->state));
 	if (sc->recovery_state)
-		PMD_INIT_LOG(DEBUG, "%12s : %s", "Recovery",
+		PMD_DRV_LOG(INFO, sc, "%12s : %s", "Recovery",
 			     get_recovery_state(sc->recovery_state));
-	PMD_INIT_LOG(DEBUG, "%12s : CQ = %lx,  EQ = %lx", "SPQ Left",
+	PMD_DRV_LOG(INFO, sc, "%12s : CQ = %lx,  EQ = %lx", "SPQ Left",
 		     sc->cq_spq_left, sc->eq_spq_left);
-	PMD_INIT_LOG(DEBUG, "%12s : %x", "Switch", sc->link_params.switch_cfg);
-	PMD_INIT_LOG(DEBUG, "\n\n===================================\n");
+	PMD_DRV_LOG(INFO, sc,
+		    "%12s : %x", "Switch", sc->link_params.switch_cfg);
+	PMD_DRV_LOG(INFO, sc, "\n\n===================================\n");
 }
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index 570930541a..ca7d1920b3 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -803,6 +803,10 @@ struct bnx2x_mf_info {
 
 /* Device information data structure. */
 struct bnx2x_devinfo {
+#if 1
+#define NAME_SIZE 128
+	char name[NAME_SIZE];
+#endif
 	/* PCIe info */
 	uint16_t vendor_id;
 	uint16_t device_id;
@@ -1418,7 +1422,7 @@ struct bnx2x_func_init_params {
 static inline void
 bnx2x_reg_write8(struct bnx2x_softc *sc, size_t offset, uint8_t val)
 {
-	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%02x",
+	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%02x",
 			       (unsigned long)offset, val);
 	*((volatile uint8_t*)
 	  ((uintptr_t)sc->bar[BAR0].base_addr + offset)) = val;
@@ -1429,10 +1433,10 @@ bnx2x_reg_write16(struct bnx2x_softc *sc, size_t offset, uint16_t val)
 {
 #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
 	if ((offset % 2) != 0)
-		PMD_DRV_LOG(NOTICE, "Unaligned 16-bit write to 0x%08lx",
+		PMD_DRV_LOG(NOTICE, sc, "Unaligned 16-bit write to 0x%08lx",
 			    (unsigned long)offset);
 #endif
-	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%04x",
+	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%04x",
 			       (unsigned long)offset, val);
 	*((volatile uint16_t*)
 	  ((uintptr_t)sc->bar[BAR0].base_addr + offset)) = val;
@@ -1443,11 +1447,11 @@ bnx2x_reg_write32(struct bnx2x_softc *sc, size_t offset, uint32_t val)
 {
 #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
 	if ((offset % 4) != 0)
-		PMD_DRV_LOG(NOTICE, "Unaligned 32-bit write to 0x%08lx",
+		PMD_DRV_LOG(NOTICE, sc, "Unaligned 32-bit write to 0x%08lx",
 			    (unsigned long)offset);
 #endif
 
-	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%08x",
+	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%08x",
 			       (unsigned long)offset, val);
 	*((volatile uint32_t*)
 	  ((uintptr_t)sc->bar[BAR0].base_addr + offset)) = val;
@@ -1460,7 +1464,7 @@ bnx2x_reg_read8(struct bnx2x_softc *sc, size_t offset)
 
 	val = (uint8_t)(*((volatile uint8_t*)
 			  ((uintptr_t)sc->bar[BAR0].base_addr + offset)));
-	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%02x",
+	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%02x",
 			       (unsigned long)offset, val);
 
 	return val;
@@ -1473,13 +1477,13 @@ bnx2x_reg_read16(struct bnx2x_softc *sc, size_t offset)
 
 #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
 	if ((offset % 2) != 0)
-		PMD_DRV_LOG(NOTICE, "Unaligned 16-bit read from 0x%08lx",
+		PMD_DRV_LOG(NOTICE, sc, "Unaligned 16-bit read from 0x%08lx",
 			    (unsigned long)offset);
 #endif
 
 	val = (uint16_t)(*((volatile uint16_t*)
 			   ((uintptr_t)sc->bar[BAR0].base_addr + offset)));
-	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%08x",
+	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%08x",
 			       (unsigned long)offset, val);
 
 	return val;
@@ -1492,13 +1496,13 @@ bnx2x_reg_read32(struct bnx2x_softc *sc, size_t offset)
 
 #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
 	if ((offset % 4) != 0)
-		PMD_DRV_LOG(NOTICE, "Unaligned 32-bit read from 0x%08lx",
+		PMD_DRV_LOG(NOTICE, sc, "Unaligned 32-bit read from 0x%08lx",
 			    (unsigned long)offset);
 #endif
 
 	val = (uint32_t)(*((volatile uint32_t*)
 			   ((uintptr_t)sc->bar[BAR0].base_addr + offset)));
-	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%08x",
+	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%08x",
 			       (unsigned long)offset, val);
 
 	return val;
@@ -1976,7 +1980,7 @@ bnx2x_set_rx_mode(struct bnx2x_softc *sc)
 			bnx2x_vf_set_rx_mode(sc);
 		}
 	} else {
-		PMD_DRV_LOG(NOTICE, "Card is not ready to change mode");
+		PMD_DRV_LOG(NOTICE, sc, "Card is not ready to change mode");
 	}
 }
 
@@ -1984,7 +1988,7 @@ static inline int pci_read(struct bnx2x_softc *sc, size_t addr,
 			   void *val, uint8_t size)
 {
 	if (rte_eal_pci_read_config(sc->pci_dev, val, size, addr) <= 0) {
-		PMD_DRV_LOG(ERR, "Can't read from PCI config space");
+		PMD_DRV_LOG(ERR, sc, "Can't read from PCI config space");
 		return ENXIO;
 	}
 
@@ -1997,7 +2001,7 @@ static inline int pci_write_word(struct bnx2x_softc *sc, size_t addr, off_t val)
 
 	if (rte_eal_pci_write_config(sc->pci_dev, &val16,
 				     sizeof(val16), addr) <= 0) {
-		PMD_DRV_LOG(ERR, "Can't write to PCI config space");
+		PMD_DRV_LOG(ERR, sc, "Can't write to PCI config space");
 		return ENXIO;
 	}
 
@@ -2009,7 +2013,7 @@ static inline int pci_write_long(struct bnx2x_softc *sc, size_t addr, off_t val)
 	uint32_t val32 = val;
 	if (rte_eal_pci_write_config(sc->pci_dev, &val32,
 				     sizeof(val32), addr) <= 0) {
-		PMD_DRV_LOG(ERR, "Can't write to PCI config space");
+		PMD_DRV_LOG(ERR, sc, "Can't write to PCI config space");
 		return ENXIO;
 	}
 
diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c
index a8aebbe395..794670f1ad 100644
--- a/drivers/net/bnx2x/bnx2x_ethdev.c
+++ b/drivers/net/bnx2x/bnx2x_ethdev.c
@@ -82,7 +82,7 @@ bnx2x_link_update(struct rte_eth_dev *dev)
 {
 	struct bnx2x_softc *sc = dev->data->dev_private;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 	bnx2x_link_status_update(sc);
 	mb();
 	dev->data->dev_link.link_speed = sc->link_vars.line_speed;
@@ -105,7 +105,7 @@ bnx2x_interrupt_action(struct rte_eth_dev *dev)
 	struct bnx2x_softc *sc = dev->data->dev_private;
 	uint32_t link_status;
 
-	PMD_DEBUG_PERIODIC_LOG(INFO, "Interrupt handled");
+	PMD_DEBUG_PERIODIC_LOG(INFO, sc, "Interrupt handled");
 
 	bnx2x_intr_legacy(sc, 0);
 
@@ -137,34 +137,34 @@ bnx2x_dev_configure(struct rte_eth_dev *dev)
 	struct bnx2x_softc *sc = dev->data->dev_private;
 	int mp_ncpus = sysconf(_SC_NPROCESSORS_CONF);
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	if (dev->data->dev_conf.rxmode.jumbo_frame)
 		sc->mtu = dev->data->dev_conf.rxmode.max_rx_pkt_len;
 
 	if (dev->data->nb_tx_queues > dev->data->nb_rx_queues) {
-		PMD_DRV_LOG(ERR, "The number of TX queues is greater than number of RX queues");
+		PMD_DRV_LOG(ERR, sc, "The number of TX queues is greater than number of RX queues");
 		return -EINVAL;
 	}
 
 	sc->num_queues = MAX(dev->data->nb_rx_queues, dev->data->nb_tx_queues);
 	if (sc->num_queues > mp_ncpus) {
-		PMD_DRV_LOG(ERR, "The number of queues is more than number of CPUs");
+		PMD_DRV_LOG(ERR, sc, "The number of queues is more than number of CPUs");
 		return -EINVAL;
 	}
 
-	PMD_DRV_LOG(DEBUG, "num_queues=%d, mtu=%d",
+	PMD_DRV_LOG(DEBUG, sc, "num_queues=%d, mtu=%d",
 		       sc->num_queues, sc->mtu);
 
 	/* allocate ilt */
 	if (bnx2x_alloc_ilt_mem(sc) != 0) {
-		PMD_DRV_LOG(ERR, "bnx2x_alloc_ilt_mem was failed");
+		PMD_DRV_LOG(ERR, sc, "bnx2x_alloc_ilt_mem was failed");
 		return -ENXIO;
 	}
 
 	/* allocate the host hardware/software hsi structures */
 	if (bnx2x_alloc_hsi_mem(sc) != 0) {
-		PMD_DRV_LOG(ERR, "bnx2x_alloc_hsi_mem was failed");
+		PMD_DRV_LOG(ERR, sc, "bnx2x_alloc_hsi_mem was failed");
 		bnx2x_free_ilt_mem(sc);
 		return -ENXIO;
 	}
@@ -178,11 +178,11 @@ bnx2x_dev_start(struct rte_eth_dev *dev)
 	struct bnx2x_softc *sc = dev->data->dev_private;
 	int ret = 0;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	ret = bnx2x_init(sc);
 	if (ret) {
-		PMD_DRV_LOG(DEBUG, "bnx2x_init failed (%d)", ret);
+		PMD_DRV_LOG(DEBUG, sc, "bnx2x_init failed (%d)", ret);
 		return -1;
 	}
 
@@ -191,12 +191,12 @@ bnx2x_dev_start(struct rte_eth_dev *dev)
 				bnx2x_interrupt_handler, (void *)dev);
 
 		if(rte_intr_enable(&(dev->pci_dev->intr_handle)))
-			PMD_DRV_LOG(ERR, "rte_intr_enable failed");
+			PMD_DRV_LOG(ERR, sc, "rte_intr_enable failed");
 	}
 
 	ret = bnx2x_dev_rx_init(dev);
 	if (ret != 0) {
-		PMD_DRV_LOG(DEBUG, "bnx2x_dev_rx_init returned error code");
+		PMD_DRV_LOG(DEBUG, sc, "bnx2x_dev_rx_init returned error code");
 		return -3;
 	}
 
@@ -212,7 +212,7 @@ bnx2x_dev_stop(struct rte_eth_dev *dev)
 	struct bnx2x_softc *sc = dev->data->dev_private;
 	int ret = 0;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	if (IS_PF(sc)) {
 		rte_intr_disable(&(dev->pci_dev->intr_handle));
@@ -222,7 +222,7 @@ bnx2x_dev_stop(struct rte_eth_dev *dev)
 
 	ret = bnx2x_nic_unload(sc, UNLOAD_NORMAL, FALSE);
 	if (ret) {
-		PMD_DRV_LOG(DEBUG, "bnx2x_nic_unload failed (%d)", ret);
+		PMD_DRV_LOG(DEBUG, sc, "bnx2x_nic_unload failed (%d)", ret);
 		return;
 	}
 
@@ -234,7 +234,7 @@ bnx2x_dev_close(struct rte_eth_dev *dev)
 {
 	struct bnx2x_softc *sc = dev->data->dev_private;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	if (IS_VF(sc))
 		bnx2x_vf_close(sc);
@@ -254,7 +254,7 @@ bnx2x_promisc_enable(struct rte_eth_dev *dev)
 {
 	struct bnx2x_softc *sc = dev->data->dev_private;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 	sc->rx_mode = BNX2X_RX_MODE_PROMISC;
 	if (rte_eth_allmulticast_get(dev->data->port_id) == 1)
 		sc->rx_mode = BNX2X_RX_MODE_ALLMULTI_PROMISC;
@@ -266,7 +266,7 @@ bnx2x_promisc_disable(struct rte_eth_dev *dev)
 {
 	struct bnx2x_softc *sc = dev->data->dev_private;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 	sc->rx_mode = BNX2X_RX_MODE_NORMAL;
 	if (rte_eth_allmulticast_get(dev->data->port_id) == 1)
 		sc->rx_mode = BNX2X_RX_MODE_ALLMULTI;
@@ -278,7 +278,7 @@ bnx2x_dev_allmulticast_enable(struct rte_eth_dev *dev)
 {
 	struct bnx2x_softc *sc = dev->data->dev_private;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 	sc->rx_mode = BNX2X_RX_MODE_ALLMULTI;
 	if (rte_eth_promiscuous_get(dev->data->port_id) == 1)
 		sc->rx_mode = BNX2X_RX_MODE_ALLMULTI_PROMISC;
@@ -290,7 +290,7 @@ bnx2x_dev_allmulticast_disable(struct rte_eth_dev *dev)
 {
 	struct bnx2x_softc *sc = dev->data->dev_private;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 	sc->rx_mode = BNX2X_RX_MODE_NORMAL;
 	if (rte_eth_promiscuous_get(dev->data->port_id) == 1)
 		sc->rx_mode = BNX2X_RX_MODE_PROMISC;
@@ -300,7 +300,9 @@ bnx2x_dev_allmulticast_disable(struct rte_eth_dev *dev)
 static int
 bnx2x_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete)
 {
-	PMD_INIT_FUNC_TRACE();
+	struct bnx2x_softc *sc = dev->data->dev_private;
+
+	PMD_INIT_FUNC_TRACE(sc);
 
 	int old_link_status = dev->data->dev_link.link_status;
 
@@ -319,7 +321,7 @@ bnx2xvf_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_comple
 
 	bnx2x_check_bull(sc);
 	if (sc->old_bulletin.valid_bitmap & (1 << CHANNEL_DOWN)) {
-		PMD_DRV_LOG(ERR, "PF indicated channel is down."
+		PMD_DRV_LOG(ERR, sc, "PF indicated channel is down."
 				"VF device is no longer operational");
 		dev->data->dev_link.link_status = ETH_LINK_DOWN;
 	}
@@ -335,7 +337,7 @@ bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	uint64_t brb_drops;
 	uint64_t brb_truncates;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	bnx2x_stats_handle(sc, STATS_EVENT_UPDATE);
 
@@ -520,27 +522,35 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
 {
 	int ret = 0;
 	struct rte_pci_device *pci_dev;
+	struct rte_pci_addr pci_addr;
 	struct bnx2x_softc *sc;
 
-	PMD_INIT_FUNC_TRACE();
-
-	eth_dev->dev_ops = is_vf ? &bnx2xvf_eth_dev_ops : &bnx2x_eth_dev_ops;
+	/* Extract key data structures */
+	sc = eth_dev->data->dev_private;
 	pci_dev = eth_dev->pci_dev;
+	pci_addr = pci_dev->addr;
+
+	snprintf(sc->devinfo.name, NAME_SIZE, PCI_SHORT_PRI_FMT ":dpdk-port-%u",
+		 pci_addr.bus, pci_addr.devid, pci_addr.function,
+		 eth_dev->data->port_id);
+
+	PMD_INIT_FUNC_TRACE(sc);
+
+	eth_dev->dev_ops = is_vf ? &bnx2xvf_eth_dev_ops : &bnx2x_eth_dev_ops;
 
 	rte_eth_copy_pci_info(eth_dev, pci_dev);
 
-	sc = eth_dev->data->dev_private;
 	sc->pcie_bus    = pci_dev->addr.bus;
 	sc->pcie_device = pci_dev->addr.devid;
 
-	if (is_vf)
-		sc->flags = BNX2X_IS_VF_FLAG;
-
 	sc->devinfo.vendor_id    = pci_dev->id.vendor_id;
 	sc->devinfo.device_id    = pci_dev->id.device_id;
 	sc->devinfo.subvendor_id = pci_dev->id.subsystem_vendor_id;
 	sc->devinfo.subdevice_id = pci_dev->id.subsystem_device_id;
 
+	if (is_vf)
+		sc->flags = BNX2X_IS_VF_FLAG;
+
 	sc->pcie_func = pci_dev->addr.function;
 	sc->bar[BAR0].base_addr = (void *)pci_dev->mem_resource[0].addr;
 	if (is_vf)
@@ -568,19 +578,19 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
 	sc->pci_dev = pci_dev;
 	ret = bnx2x_attach(sc);
 	if (ret) {
-		PMD_DRV_LOG(ERR, "bnx2x_attach failed (%d)", ret);
+		PMD_DRV_LOG(ERR, sc, "bnx2x_attach failed (%d)", ret);
 		return ret;
 	}
 
 	eth_dev->data->mac_addrs = (struct ether_addr *)sc->link_params.mac_addr;
 
-	PMD_DRV_LOG(INFO, "pcie_bus=%d, pcie_device=%d",
+	PMD_DRV_LOG(INFO, sc, "pcie_bus=%d, pcie_device=%d",
 			sc->pcie_bus, sc->pcie_device);
-	PMD_DRV_LOG(INFO, "bar0.addr=%p, bar1.addr=%p",
+	PMD_DRV_LOG(INFO, sc, "bar0.addr=%p, bar1.addr=%p",
 			sc->bar[BAR0].base_addr, sc->bar[BAR1].base_addr);
-	PMD_DRV_LOG(INFO, "port=%d, path=%d, vnic=%d, func=%d",
+	PMD_DRV_LOG(INFO, sc, "port=%d, path=%d, vnic=%d, func=%d",
 			PORT_ID(sc), PATH_ID(sc), VNIC_ID(sc), FUNC_ID(sc));
-	PMD_DRV_LOG(INFO, "portID=%d vendorID=0x%x deviceID=0x%x",
+	PMD_DRV_LOG(INFO, sc, "portID=%d vendorID=0x%x deviceID=0x%x",
 			eth_dev->data->port_id, pci_dev->id.vendor_id, pci_dev->id.device_id);
 
 	if (IS_VF(sc)) {
@@ -614,14 +624,16 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
 static int
 eth_bnx2x_dev_init(struct rte_eth_dev *eth_dev)
 {
-	PMD_INIT_FUNC_TRACE();
+	struct bnx2x_softc *sc = eth_dev->data->dev_private;
+	PMD_INIT_FUNC_TRACE(sc);
 	return bnx2x_common_dev_init(eth_dev, 0);
 }
 
 static int
 eth_bnx2xvf_dev_init(struct rte_eth_dev *eth_dev)
 {
-	PMD_INIT_FUNC_TRACE();
+	struct bnx2x_softc *sc = eth_dev->data->dev_private;
+	PMD_INIT_FUNC_TRACE(sc);
 	return bnx2x_common_dev_init(eth_dev, 1);
 }
 
diff --git a/drivers/net/bnx2x/bnx2x_logs.h b/drivers/net/bnx2x/bnx2x_logs.h
index dff014d7e1..7b6252fdfd 100644
--- a/drivers/net/bnx2x/bnx2x_logs.h
+++ b/drivers/net/bnx2x/bnx2x_logs.h
@@ -11,13 +11,14 @@
 #ifndef _PMD_LOGS_H_
 #define _PMD_LOGS_H_
 
-#define PMD_INIT_LOG(level, fmt, args...) \
-	RTE_LOG(level, PMD, "%s(): " fmt "\n", __func__, ##args)
+#define PMD_INIT_LOG(level, sc, fmt, args...) \
+	RTE_LOG(level, PMD, \
+	"[bnx2x_pmd: %s] %s() " fmt "\n", (sc)->devinfo.name, __func__, ##args)
 
 #ifdef RTE_LIBRTE_BNX2X_DEBUG_INIT
-#define PMD_INIT_FUNC_TRACE() PMD_INIT_LOG(DEBUG, " >>")
+#define PMD_INIT_FUNC_TRACE(sc) PMD_INIT_LOG(DEBUG, sc, " >>")
 #else
-#define PMD_INIT_FUNC_TRACE() do { } while(0)
+#define PMD_INIT_FUNC_TRACE(sc) do { (void)sc; } while(0)
 #endif
 
 #ifdef RTE_LIBRTE_BNX2X_DEBUG_RX
@@ -42,20 +43,22 @@
 #endif
 
 #ifdef RTE_LIBRTE_BNX2X_DEBUG
-#define PMD_DRV_LOG_RAW(level, fmt, args...) \
-	RTE_LOG(level, PMD, "%s(): " fmt, __func__, ## args)
+#define PMD_DRV_LOG_RAW(level, sc, fmt, args...) \
+	RTE_LOG(level, PMD, "[%s:%d(%s)] " fmt,	__func__, __LINE__, \
+		(sc)->devinfo.name ? (sc)->devinfo.name : "", ## args)
 #else
-#define PMD_DRV_LOG_RAW(level, fmt, args...) do { } while (0)
+#define PMD_DRV_LOG_RAW(level, sc, fmt, args...) do { } while (0)
 #endif
 
-#define PMD_DRV_LOG(level, fmt, args...) \
-	PMD_DRV_LOG_RAW(level, fmt "\n", ## args)
+#define PMD_DRV_LOG(level, sc, fmt, args...) \
+	PMD_DRV_LOG_RAW(level, sc, fmt "\n", ## args)
 
 #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
-#define PMD_DEBUG_PERIODIC_LOG(level, fmt, args...) \
-	RTE_LOG(level, PMD, "%s(): " fmt "\n", __func__, ## args)
+#define PMD_DEBUG_PERIODIC_LOG(level, sc, fmt, args...) \
+	RTE_LOG(level, PMD, "%s(%s): " fmt "\n", __func__, \
+		(sc)->devinfo.name ? (sc)->devinfo.name : "", ## args)
 #else
-#define PMD_DEBUG_PERIODIC_LOG(level, fmt, args...) do { } while(0)
+#define PMD_DEBUG_PERIODIC_LOG(level, sc, fmt, args...) do { } while (0)
 #endif
 
 
diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
index adf0309255..a9b8e565b2 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.c
+++ b/drivers/net/bnx2x/bnx2x_rxtx.c
@@ -78,7 +78,7 @@ bnx2x_dev_rx_queue_setup(struct rte_eth_dev *dev,
 	rxq = rte_zmalloc_socket("ethdev RX queue", sizeof(struct bnx2x_rx_queue),
 				 RTE_CACHE_LINE_SIZE, socket_id);
 	if (NULL == rxq) {
-		PMD_INIT_LOG(ERR, "rte_zmalloc for rxq failed!");
+		PMD_DRV_LOG(ERR, sc, "rte_zmalloc for rxq failed!");
 		return -ENOMEM;
 	}
 	rxq->sc = sc;
@@ -94,7 +94,7 @@ bnx2x_dev_rx_queue_setup(struct rte_eth_dev *dev,
 	sc->rx_ring_size = USABLE_RX_BD(rxq);
 	rxq->nb_cq_pages = RCQ_BD_PAGES(rxq);
 
-	PMD_INIT_LOG(DEBUG, "fp[%02d] req_bd=%u, usable_bd=%lu, "
+	PMD_DRV_LOG(DEBUG, sc, "fp[%02d] req_bd=%u, usable_bd=%lu, "
 		       "total_bd=%lu, rx_pages=%u, cq_pages=%u",
 		       queue_idx, nb_desc, (unsigned long)USABLE_RX_BD(rxq),
 		       (unsigned long)TOTAL_RX_BD(rxq), rxq->nb_rx_pages,
@@ -276,7 +276,7 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
 	txq->tx_free_thresh = min(txq->tx_free_thresh,
 				  txq->nb_tx_desc - BDS_PER_TX_PKT);
 
-	PMD_INIT_LOG(DEBUG, "fp[%02d] req_bd=%u, thresh=%u, usable_bd=%lu, "
+	PMD_DRV_LOG(DEBUG, sc, "fp[%02d] req_bd=%u, thresh=%u, usable_bd=%lu, "
 		     "total_bd=%lu, tx_pages=%u",
 		     queue_idx, nb_desc, txq->tx_free_thresh,
 		     (unsigned long)USABLE_TX_BD(txq),
@@ -302,7 +302,7 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
 		return -ENOMEM;
 	}
 
-	/* PMD_DRV_LOG(DEBUG, "sw_ring=%p hw_ring=%p dma_addr=0x%"PRIx64,
+	/* PMD_DRV_LOG(DEBUG, sc, "sw_ring=%p hw_ring=%p dma_addr=0x%"PRIx64,
 	   txq->sw_ring, txq->tx_ring, txq->tx_ring_phys_addr); */
 
 	/* Link TX pages */
@@ -311,7 +311,9 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
 		busaddr = txq->tx_ring_phys_addr + BNX2X_PAGE_SIZE * (i % txq->nb_tx_pages);
 		tx_n_bd->addr_hi = rte_cpu_to_le_32(U64_HI(busaddr));
 		tx_n_bd->addr_lo = rte_cpu_to_le_32(U64_LO(busaddr));
-		/* PMD_DRV_LOG(DEBUG, "link tx page %lu", (TOTAL_TX_BD_PER_PAGE * i - 1)); */
+		/* PMD_DRV_LOG(DEBUG, sc, "link tx page %lu",
+		 *          (TOTAL_TX_BD_PER_PAGE * i - 1));
+		 */
 	}
 
 	txq->queue_id = queue_idx;
@@ -461,9 +463,10 @@ bnx2x_dev_rx_init(struct rte_eth_dev *dev)
 void
 bnx2x_dev_clear_queues(struct rte_eth_dev *dev)
 {
+	struct bnx2x_softc *sc = dev->data->dev_private;
 	uint8_t i;
 
-	PMD_INIT_FUNC_TRACE();
+	PMD_INIT_FUNC_TRACE(sc);
 
 	for (i = 0; i < dev->data->nb_tx_queues; i++) {
 		struct bnx2x_tx_queue *txq = dev->data->tx_queues[i];
diff --git a/drivers/net/bnx2x/bnx2x_stats.c b/drivers/net/bnx2x/bnx2x_stats.c
index c489cbeef1..2a068acb7d 100644
--- a/drivers/net/bnx2x/bnx2x_stats.c
+++ b/drivers/net/bnx2x/bnx2x_stats.c
@@ -84,7 +84,7 @@ bnx2x_storm_stats_post(struct bnx2x_softc *sc)
 		sc->fw_stats_req->hdr.drv_stats_counter =
 			htole16(sc->stats_counter++);
 
-		PMD_DEBUG_PERIODIC_LOG(DEBUG,
+		PMD_DEBUG_PERIODIC_LOG(DEBUG, sc,
 				"sending statistics ramrod %d",
 				le16toh(sc->fw_stats_req->hdr.drv_stats_counter));
 
@@ -156,7 +156,7 @@ bnx2x_stats_comp(struct bnx2x_softc *sc)
 
 	while (*stats_comp != DMAE_COMP_VAL) {
 		if (!cnt) {
-			PMD_DRV_LOG(ERR, "Timeout waiting for stats finished");
+			PMD_DRV_LOG(ERR, sc, "Timeout waiting for stats finished");
 			break;
 		}
 
@@ -191,7 +191,7 @@ bnx2x_stats_pmf_update(struct bnx2x_softc *sc)
 	}
 	/* sanity */
 	if (!sc->port.pmf || !sc->port.port_stx) {
-		PMD_DRV_LOG(ERR, "BUG!");
+		PMD_DRV_LOG(ERR, sc, "BUG!");
 		return;
 	}
 
@@ -241,7 +241,7 @@ bnx2x_port_stats_init(struct bnx2x_softc *sc)
 
     /* sanity */
     if (!sc->link_vars.link_up || !sc->port.pmf) {
-	PMD_DRV_LOG(ERR, "BUG!");
+	PMD_DRV_LOG(ERR, sc, "BUG!");
 	return;
     }
 
@@ -465,7 +465,7 @@ bnx2x_func_stats_init(struct bnx2x_softc *sc)
 
     /* sanity */
     if (!sc->func_stx) {
-	PMD_DRV_LOG(ERR, "BUG!");
+	PMD_DRV_LOG(ERR, sc, "BUG!");
 	return;
     }
 
@@ -799,12 +799,12 @@ bnx2x_hw_stats_update(struct bnx2x_softc *sc)
 	break;
 
     case ELINK_MAC_TYPE_NONE: /* unreached */
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 	      "stats updated by DMAE but no MAC active");
 	return -1;
 
     default: /* unreached */
-	PMD_DRV_LOG(ERR, "stats update failed, unknown MAC type");
+	PMD_DRV_LOG(ERR, sc, "stats update failed, unknown MAC type");
     }
 
     ADD_EXTEND_64(pstats->brb_drop_hi, pstats->brb_drop_lo,
@@ -839,7 +839,7 @@ bnx2x_hw_stats_update(struct bnx2x_softc *sc)
 	nig_timer_max = SHMEM_RD(sc, port_mb[SC_PORT(sc)].stat_nig_timer);
 	if (nig_timer_max != estats->nig_timer_max) {
 	    estats->nig_timer_max = nig_timer_max;
-	    PMD_DRV_LOG(ERR, "invalid NIG timer max (%u)",
+	    PMD_DRV_LOG(ERR, sc, "invalid NIG timer max (%u)",
 		  estats->nig_timer_max);
 	}
     }
@@ -861,7 +861,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
 
     /* are storm stats valid? */
     if (le16toh(counters->xstats_counter) != cur_stats_counter) {
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 	      "stats not updated by xstorm, "
 	      "counter 0x%x != stats_counter 0x%x",
 	      le16toh(counters->xstats_counter), sc->stats_counter);
@@ -869,7 +869,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
     }
 
     if (le16toh(counters->ustats_counter) != cur_stats_counter) {
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 	      "stats not updated by ustorm, "
 	      "counter 0x%x != stats_counter 0x%x",
 	      le16toh(counters->ustats_counter), sc->stats_counter);
@@ -877,7 +877,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
     }
 
     if (le16toh(counters->cstats_counter) != cur_stats_counter) {
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 	      "stats not updated by cstorm, "
 	      "counter 0x%x != stats_counter 0x%x",
 	      le16toh(counters->cstats_counter), sc->stats_counter);
@@ -885,7 +885,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
     }
 
     if (le16toh(counters->tstats_counter) != cur_stats_counter) {
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 	      "stats not updated by tstorm, "
 	      "counter 0x%x != stats_counter 0x%x",
 	      le16toh(counters->tstats_counter), sc->stats_counter);
@@ -931,12 +931,13 @@ bnx2x_storm_stats_update(struct bnx2x_softc *sc)
 
 		uint32_t diff;
 
-		/* PMD_DRV_LOG(DEBUG,
+		/* PMD_DRV_LOG(DEBUG, sc,
 				"queue[%d]: ucast_sent 0x%x bcast_sent 0x%x mcast_sent 0x%x",
 				i, xclient->ucast_pkts_sent, xclient->bcast_pkts_sent,
 				xclient->mcast_pkts_sent);
 
-		PMD_DRV_LOG(DEBUG, "---------------"); */
+		PMD_DRV_LOG(DEBUG, sc, "---------------");
+		 */
 
 		UPDATE_QSTAT(tclient->rcv_bcast_bytes,
 				total_broadcast_bytes_received);
@@ -1290,7 +1291,7 @@ void bnx2x_stats_handle(struct bnx2x_softc *sc, enum bnx2x_stats_event event)
 	bnx2x_stats_stm[state][event].action(sc);
 
 	if (event != STATS_EVENT_UPDATE) {
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 				"state %d -> event %d -> state %d",
 				state, event, sc->stats_state);
 	}
@@ -1304,7 +1305,7 @@ bnx2x_port_stats_base_init(struct bnx2x_softc *sc)
 
     /* sanity */
     if (!sc->port.pmf || !sc->port.port_stx) {
-	PMD_DRV_LOG(ERR, "BUG!");
+	PMD_DRV_LOG(ERR, sc, "BUG!");
 	return;
     }
 
@@ -1476,7 +1477,7 @@ bnx2x_stats_init(struct bnx2x_softc *sc)
 		sc->func_stx = 0;
 	}
 
-	PMD_DRV_LOG(DEBUG, "port_stx 0x%x func_stx 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "port_stx 0x%x func_stx 0x%x",
 			sc->port.port_stx, sc->func_stx);
 
 	/* pmf should retrieve port statistics from SP on a non-init*/
diff --git a/drivers/net/bnx2x/bnx2x_vfpf.c b/drivers/net/bnx2x/bnx2x_vfpf.c
index 0ca0df8766..e58e9af810 100644
--- a/drivers/net/bnx2x/bnx2x_vfpf.c
+++ b/drivers/net/bnx2x/bnx2x_vfpf.c
@@ -40,12 +40,12 @@ bnx2x_check_bull(struct bnx2x_softc *sc)
 			if (bull->crc == bnx2x_vf_crc(bull))
 				break;
 
-			PMD_DRV_LOG(ERR, "bad crc on bulletin board. contained %x computed %x",
+			PMD_DRV_LOG(ERR, sc, "bad crc on bulletin board. contained %x computed %x",
 					bull->crc, bnx2x_vf_crc(bull));
 			++tries;
 		}
 		if (tries == BNX2X_VF_BULLETIN_TRIES) {
-			PMD_DRV_LOG(ERR, "pf to vf bulletin board crc was wrong %d consecutive times. Aborting",
+			PMD_DRV_LOG(ERR, sc, "pf to vf bulletin board crc was wrong %d consecutive times. Aborting",
 					tries);
 			return FALSE;
 		}
@@ -85,7 +85,7 @@ bnx2x_vf_prep(struct bnx2x_softc *sc, struct vf_first_tlv *first_tlv,
 
 	rte_spinlock_lock(&sc->vf2pf_lock);
 
-	PMD_DRV_LOG(DEBUG, "Preparing %d tlv for sending", type);
+	PMD_DRV_LOG(DEBUG, sc, "Preparing %d tlv for sending", type);
 
 	memset(mbox, 0, sizeof(struct bnx2x_vf_mbx_msg));
 
@@ -100,7 +100,7 @@ static void
 bnx2x_vf_finalize(struct bnx2x_softc *sc,
 		  __rte_unused struct vf_first_tlv *first_tlv)
 {
-	PMD_DRV_LOG(DEBUG, "done sending [%d] tlv over vf pf channel",
+	PMD_DRV_LOG(DEBUG, sc, "done sending [%d] tlv over vf pf channel",
 		    first_tlv->tl.type);
 
 	rte_spinlock_unlock(&sc->vf2pf_lock);
@@ -119,14 +119,14 @@ bnx2x_do_req4pf(struct bnx2x_softc *sc, phys_addr_t phys_addr)
 	uint8_t i;
 
 	if (*status) {
-		PMD_DRV_LOG(ERR, "status should be zero before message"
+		PMD_DRV_LOG(ERR, sc, "status should be zero before message"
 				 " to pf was sent");
 		return -EINVAL;
 	}
 
 	bnx2x_check_bull(sc);
 	if (sc->old_bulletin.valid_bitmap & (1 << CHANNEL_DOWN)) {
-		PMD_DRV_LOG(ERR, "channel is down. Aborting message sending");
+		PMD_DRV_LOG(ERR, sc, "channel is down. Aborting message sending");
 		return -EINVAL;
 	}
 
@@ -146,11 +146,11 @@ bnx2x_do_req4pf(struct bnx2x_softc *sc, phys_addr_t phys_addr)
 	}
 
 	if (!*status) {
-		PMD_DRV_LOG(ERR, "Response from PF timed out");
+		PMD_DRV_LOG(ERR, sc, "Response from PF timed out");
 		return -EAGAIN;
 	}
 
-	PMD_DRV_LOG(DEBUG, "Response from PF was received");
+	PMD_DRV_LOG(DEBUG, sc, "Response from PF was received");
 	return 0;
 }
 
@@ -198,7 +198,7 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
 	int rc;
 
 	do {
-		PMD_DRV_LOG(DEBUG, "trying to get resources");
+		PMD_DRV_LOG(DEBUG, sc, "trying to get resources");
 
 		rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
 		if (rc)
@@ -210,11 +210,11 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
 
 		/* check PF to request acceptance */
 		if (sc_resp->status == BNX2X_VF_STATUS_SUCCESS) {
-			PMD_DRV_LOG(DEBUG, "resources obtained successfully");
+			PMD_DRV_LOG(DEBUG, sc, "resources obtained successfully");
 			res_obtained = true;
 		} else if (sc_resp->status == BNX2X_VF_STATUS_NO_RESOURCES &&
 			   tries < BNX2X_VF_OBTAIN_MAX_TRIES) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 			   "PF cannot allocate requested amount of resources");
 
 			res_query = &sc->vf2pf_mbox->query[0].acquire.res_query;
@@ -230,7 +230,7 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
 
 			memset(&sc->vf2pf_mbox->resp, 0, sizeof(union resp_tlvs));
 		} else {
-			PMD_DRV_LOG(ERR, "Failed to get the requested "
+			PMD_DRV_LOG(ERR, sc, "Failed to get the requested "
 					 "amount of resources: %d.",
 					 sc_resp->status);
 			return -EINVAL;
@@ -299,7 +299,7 @@ int bnx2x_vf_get_resources(struct bnx2x_softc *sc, uint8_t tx_count, uint8_t rx_
 	sc->doorbell_size = sc_resp.db_size;
 	sc->flags |= BNX2X_NO_WOL_FLAG | BNX2X_NO_ISCSI_OOO_FLAG | BNX2X_NO_ISCSI_FLAG | BNX2X_NO_FCOE_FLAG;
 
-	PMD_DRV_LOG(DEBUG, "status block count = %d, base status block = %x",
+	PMD_DRV_LOG(DEBUG, sc, "status block count = %d, base status block = %x",
 		sc->igu_sb_cnt, sc->igu_base_sb);
 	strncpy(sc->fw_ver, sc_resp.fw_ver, sizeof(sc->fw_ver));
 
@@ -336,7 +336,7 @@ bnx2x_vf_close(struct bnx2x_softc *sc)
 
 		rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
 		if (rc || reply->status != BNX2X_VF_STATUS_SUCCESS)
-			PMD_DRV_LOG(ERR, "Failed to release VF");
+			PMD_DRV_LOG(ERR, sc, "Failed to release VF");
 
 		bnx2x_vf_finalize(sc, &query->first_tlv);
 	}
@@ -370,12 +370,12 @@ bnx2x_vf_init(struct bnx2x_softc *sc)
 	if (rc)
 		goto out;
 	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
-		PMD_DRV_LOG(ERR, "Failed to init VF");
+		PMD_DRV_LOG(ERR, sc, "Failed to init VF");
 		rc = -EINVAL;
 		goto out;
 	}
 
-	PMD_DRV_LOG(DEBUG, "VF was initialized");
+	PMD_DRV_LOG(DEBUG, sc, "VF was initialized");
 out:
 	bnx2x_vf_finalize(sc, &query->first_tlv);
 	return rc;
@@ -406,7 +406,7 @@ bnx2x_vf_unload(struct bnx2x_softc *sc)
 
 			rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
 			if (rc || reply->status != BNX2X_VF_STATUS_SUCCESS)
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Bad reply for vf_q %d teardown", i);
 
 			bnx2x_vf_finalize(sc, &query_op->first_tlv);
@@ -426,7 +426,7 @@ bnx2x_vf_unload(struct bnx2x_softc *sc)
 
 		rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
 		if (rc || reply->status != BNX2X_VF_STATUS_SUCCESS)
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "Bad reply from PF for close message");
 
 		bnx2x_vf_finalize(sc, &query->first_tlv);
@@ -453,7 +453,7 @@ bnx2x_vf_rx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
 
 	rxq = sc->rx_queues[fp->index];
 	if (!rxq) {
-		PMD_DRV_LOG(ERR, "RX queue %d is NULL", fp->index);
+		PMD_DRV_LOG(ERR, sc, "RX queue %d is NULL", fp->index);
 		return;
 	}
 
@@ -477,7 +477,7 @@ bnx2x_vf_tx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
 
 	txq = sc->tx_queues[fp->index];
 	if (!txq) {
-		PMD_DRV_LOG(ERR, "TX queue %d is NULL", fp->index);
+		PMD_DRV_LOG(ERR, sc, "TX queue %d is NULL", fp->index);
 		return;
 	}
 
@@ -514,7 +514,7 @@ bnx2x_vf_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, int lead
 	if (rc)
 		goto out;
 	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
-		PMD_DRV_LOG(ERR, "Failed to setup VF queue[%d]",
+		PMD_DRV_LOG(ERR, sc, "Failed to setup VF queue[%d]",
 				 fp->index);
 		rc = -EINVAL;
 	}
@@ -569,7 +569,7 @@ bnx2x_vf_set_mac(struct bnx2x_softc *sc, int set)
 	}
 
 	if (BNX2X_VF_STATUS_SUCCESS != reply->status) {
-		PMD_DRV_LOG(ERR, "Bad reply from PF for SET MAC message: %d",
+		PMD_DRV_LOG(ERR, sc, "Bad reply from PF for SET MAC message: %d",
 				reply->status);
 		rc = -EINVAL;
 	}
@@ -611,7 +611,7 @@ bnx2x_vf_config_rss(struct bnx2x_softc *sc,
 		goto out;
 
 	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
-		PMD_DRV_LOG(ERR, "Failed to configure RSS");
+		PMD_DRV_LOG(ERR, sc, "Failed to configure RSS");
 		rc = -EINVAL;
 	}
 out:
@@ -655,7 +655,7 @@ bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc)
 		query->rx_mask |= VFPF_RX_MASK_ACCEPT_BROADCAST;
 		break;
 	default:
-		PMD_DRV_LOG(ERR, "BAD rx mode (%d)", sc->rx_mode);
+		PMD_DRV_LOG(ERR, sc, "BAD rx mode (%d)", sc->rx_mode);
 		rc = -EINVAL;
 		goto out;
 	}
@@ -669,7 +669,7 @@ bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc)
 		goto out;
 
 	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
-		PMD_DRV_LOG(ERR, "Failed to set RX mode");
+		PMD_DRV_LOG(ERR, sc, "Failed to set RX mode");
 		rc = -EINVAL;
 	}
 
diff --git a/drivers/net/bnx2x/ecore_init.h b/drivers/net/bnx2x/ecore_init.h
index d25e2803a0..7a96be7bc5 100644
--- a/drivers/net/bnx2x/ecore_init.h
+++ b/drivers/net/bnx2x/ecore_init.h
@@ -743,7 +743,7 @@ static inline void ecore_disable_blocks_parity(struct bnx2x_softc *sc)
 		if (dis_mask) {
 			REG_WR(sc, ecore_blocks_parity_data[i].mask_addr,
 			       dis_mask);
-			ECORE_MSG("Setting parity mask "
+			ECORE_MSG(sc, "Setting parity mask "
 						 "for %s to\t\t0x%x",
 				    ecore_blocks_parity_data[i].name, dis_mask);
 		}
@@ -778,7 +778,7 @@ static inline void ecore_clear_blocks_parity(struct bnx2x_softc *sc)
 			reg_val = REG_RD(sc, ecore_blocks_parity_data[i].
 					 sts_clr_addr);
 			if (reg_val & reg_mask)
-				ECORE_MSG("Parity errors in %s: 0x%x",
+				ECORE_MSG(sc, "Parity errors in %s: 0x%x",
 					   ecore_blocks_parity_data[i].name,
 					   reg_val & reg_mask);
 		}
@@ -787,7 +787,7 @@ static inline void ecore_clear_blocks_parity(struct bnx2x_softc *sc)
 	/* Check if there were parity attentions in MCP */
 	reg_val = REG_RD(sc, MISC_REG_AEU_AFTER_INVERT_4_MCP);
 	if (reg_val & mcp_aeu_bits)
-		ECORE_MSG("Parity error in MCP: 0x%x",
+		ECORE_MSG(sc, "Parity error in MCP: 0x%x",
 			   reg_val & mcp_aeu_bits);
 
 	/* Clear parity attentions in MCP:
diff --git a/drivers/net/bnx2x/ecore_init_ops.h b/drivers/net/bnx2x/ecore_init_ops.h
index b6f9832431..474185bdf0 100644
--- a/drivers/net/bnx2x/ecore_init_ops.h
+++ b/drivers/net/bnx2x/ecore_init_ops.h
@@ -426,20 +426,20 @@ static void ecore_init_pxp_arb(struct bnx2x_softc *sc, int r_order,
 	uint32_t val, i;
 
 	if (r_order > MAX_RD_ORD) {
-		ECORE_MSG("read order of %d  order adjusted to %d",
+		ECORE_MSG(sc, "read order of %d  order adjusted to %d",
 			   r_order, MAX_RD_ORD);
 		r_order = MAX_RD_ORD;
 	}
 	if (w_order > MAX_WR_ORD) {
-		ECORE_MSG("write order of %d  order adjusted to %d",
+		ECORE_MSG(sc, "write order of %d  order adjusted to %d",
 			   w_order, MAX_WR_ORD);
 		w_order = MAX_WR_ORD;
 	}
 	if (CHIP_REV_IS_FPGA(sc)) {
-		ECORE_MSG("write order adjusted to 1 for FPGA");
+		ECORE_MSG(sc, "write order adjusted to 1 for FPGA");
 		w_order = 0;
 	}
-	ECORE_MSG("read order %d  write order %d", r_order, w_order);
+	ECORE_MSG(sc, "read order %d  write order %d", r_order, w_order);
 
 	for (i = 0; i < NUM_RD_Q-1; i++) {
 		REG_WR(sc, read_arb_addr[i].l, read_arb_data[i][r_order].l);
diff --git a/drivers/net/bnx2x/ecore_sp.c b/drivers/net/bnx2x/ecore_sp.c
index e6fecd88af..07376d85d9 100644
--- a/drivers/net/bnx2x/ecore_sp.c
+++ b/drivers/net/bnx2x/ecore_sp.c
@@ -55,14 +55,14 @@ ecore_exe_queue_init(struct bnx2x_softc *sc __rte_unused,
 	o->execute = exec;
 	o->get = get;
 
-	ECORE_MSG("Setup the execution queue with the chunk length of %d",
+	ECORE_MSG(sc, "Setup the execution queue with the chunk length of %d",
 		  exe_len);
 }
 
 static void ecore_exe_queue_free_elem(struct bnx2x_softc *sc __rte_unused,
 				      struct ecore_exeq_elem *elem)
 {
-	ECORE_MSG("Deleting an exe_queue element");
+	ECORE_MSG(sc, "Deleting an exe_queue element");
 	ECORE_FREE(sc, elem, sizeof(*elem));
 }
 
@@ -108,7 +108,7 @@ static int ecore_exe_queue_add(struct bnx2x_softc *sc,
 		/* Check if this request is ok */
 		rc = o->validate(sc, o->owner, elem);
 		if (rc) {
-			ECORE_MSG("Preamble failed: %d", rc);
+			ECORE_MSG(sc, "Preamble failed: %d", rc);
 			goto free_and_exit;
 		}
 	}
@@ -178,8 +178,8 @@ static int ecore_exe_queue_step(struct bnx2x_softc *sc,
 	 */
 	if (!ECORE_LIST_IS_EMPTY(&o->pending_comp)) {
 		if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, ramrod_flags)) {
-			ECORE_MSG
-			    ("RAMROD_DRV_CLR_ONLY requested: resetting a pending_comp list");
+			ECORE_MSG(sc,
+				  "RAMROD_DRV_CLR_ONLY requested: resetting a pending_comp list");
 			__ecore_exe_queue_reset_pending(sc, o);
 		} else {
 			return ECORE_PENDING;
@@ -242,7 +242,7 @@ static struct ecore_exeq_elem *ecore_exe_queue_alloc_elem(struct
 							  bnx2x_softc *sc
 							  __rte_unused)
 {
-	ECORE_MSG("Allocating a new exe_queue element");
+	ECORE_MSG(sc, "Allocating a new exe_queue element");
 	return ECORE_ZALLOC(sizeof(struct ecore_exeq_elem), GFP_ATOMIC, sc);
 }
 
@@ -292,14 +292,14 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state,
 	if (CHIP_REV_IS_EMUL(sc))
 		cnt *= 20;
 
-	ECORE_MSG("waiting for state to become %d", state);
+	ECORE_MSG(sc, "waiting for state to become %d", state);
 
 	ECORE_MIGHT_SLEEP();
 	while (cnt--) {
 		bnx2x_intr_legacy(sc, 1);
 		if (!ECORE_TEST_BIT(state, pstate)) {
 #ifdef ECORE_STOP_ON_ERROR
-			ECORE_MSG("exit  (cnt %d)", 5000 - cnt);
+			ECORE_MSG(sc, "exit  (cnt %d)", 5000 - cnt);
 #endif
 			return ECORE_SUCCESS;
 		}
@@ -311,7 +311,7 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state,
 	}
 
 	/* timeout! */
-	PMD_DRV_LOG(ERR, "timeout waiting for state %d", state);
+	PMD_DRV_LOG(ERR, sc, "timeout waiting for state %d", state);
 #ifdef ECORE_STOP_ON_ERROR
 	ecore_panic();
 #endif
@@ -372,11 +372,11 @@ static int __ecore_vlan_mac_h_write_trylock(struct bnx2x_softc *sc __rte_unused,
 					    struct ecore_vlan_mac_obj *o)
 {
 	if (o->head_reader) {
-		ECORE_MSG("vlan_mac_lock writer - There are readers; Busy");
+		ECORE_MSG(sc, "vlan_mac_lock writer - There are readers; Busy");
 		return ECORE_BUSY;
 	}
 
-	ECORE_MSG("vlan_mac_lock writer - Taken");
+	ECORE_MSG(sc, "vlan_mac_lock writer - Taken");
 	return ECORE_SUCCESS;
 }
 
@@ -396,13 +396,13 @@ static void __ecore_vlan_mac_h_exec_pending(struct bnx2x_softc *sc,
 	int rc;
 	unsigned long ramrod_flags = o->saved_ramrod_flags;
 
-	ECORE_MSG("vlan_mac_lock execute pending command with ramrod flags %lu",
+	ECORE_MSG(sc, "vlan_mac_lock execute pending command with ramrod flags %lu",
 		  ramrod_flags);
 	o->head_exe_request = FALSE;
 	o->saved_ramrod_flags = 0;
 	rc = ecore_exe_queue_step(sc, &o->exe_queue, &ramrod_flags);
 	if (rc != ECORE_SUCCESS) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "execution of pending commands failed with rc %d",
 			    rc);
 #ifdef ECORE_STOP_ON_ERROR
@@ -427,7 +427,7 @@ static void __ecore_vlan_mac_h_pend(struct bnx2x_softc *sc __rte_unused,
 {
 	o->head_exe_request = TRUE;
 	o->saved_ramrod_flags = ramrod_flags;
-	ECORE_MSG("Placing pending execution with ramrod flags %lu",
+	ECORE_MSG(sc, "Placing pending execution with ramrod flags %lu",
 		  ramrod_flags);
 }
 
@@ -448,8 +448,8 @@ static void __ecore_vlan_mac_h_write_unlock(struct bnx2x_softc *sc,
 	 * executed. If so, execute again. [Ad infinitum]
 	 */
 	while (o->head_exe_request) {
-		ECORE_MSG
-		    ("vlan_mac_lock - writer release encountered a pending request");
+		ECORE_MSG(sc,
+			  "vlan_mac_lock - writer release encountered a pending request");
 		__ecore_vlan_mac_h_exec_pending(sc, o);
 	}
 }
@@ -485,7 +485,8 @@ static int __ecore_vlan_mac_h_read_lock(struct bnx2x_softc *sc __rte_unused,
 {
 	/* If we got here, we're holding lock --> no WRITER exists */
 	o->head_reader++;
-	ECORE_MSG("vlan_mac_lock - locked reader - number %d", o->head_reader);
+	ECORE_MSG(sc,
+		  "vlan_mac_lock - locked reader - number %d", o->head_reader);
 
 	return ECORE_SUCCESS;
 }
@@ -524,14 +525,14 @@ static void __ecore_vlan_mac_h_read_unlock(struct bnx2x_softc *sc,
 					   struct ecore_vlan_mac_obj *o)
 {
 	if (!o->head_reader) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "Need to release vlan mac reader lock, but lock isn't taken");
 #ifdef ECORE_STOP_ON_ERROR
 		ecore_panic();
 #endif
 	} else {
 		o->head_reader--;
-		PMD_DRV_LOG(INFO,
+		PMD_DRV_LOG(INFO, sc,
 			    "vlan_mac_lock - decreased readers to %d",
 			    o->head_reader);
 	}
@@ -540,7 +541,7 @@ static void __ecore_vlan_mac_h_read_unlock(struct bnx2x_softc *sc,
 	 * was last - if so we need to execute the command.
 	 */
 	if (!o->head_reader && o->head_exe_request) {
-		PMD_DRV_LOG(INFO,
+		PMD_DRV_LOG(INFO, sc,
 			    "vlan_mac_lock - reader release encountered a pending request");
 
 		/* Writer release will do the trick */
@@ -583,10 +584,10 @@ static int ecore_get_n_elements(struct bnx2x_softc *sc,
 	uint8_t *next = base;
 	int counter = 0, read_lock;
 
-	ECORE_MSG("get_n_elements - taking vlan_mac_lock (reader)");
+	ECORE_MSG(sc, "get_n_elements - taking vlan_mac_lock (reader)");
 	read_lock = ecore_vlan_mac_h_read_lock(sc, o);
 	if (read_lock != ECORE_SUCCESS)
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "get_n_elements failed to get vlan mac reader lock; Access without lock");
 
 	/* traverse list */
@@ -595,15 +596,15 @@ static int ecore_get_n_elements(struct bnx2x_softc *sc,
 		if (counter < n) {
 			ECORE_MEMCPY(next, &pos->u, size);
 			counter++;
-			ECORE_MSG
-			    ("copied element number %d to address %p element was:",
+			    ECORE_MSG
+			    (sc, "copied element number %d to address %p element was:",
 			     counter, next);
 			next += stride + size;
 		}
 	}
 
 	if (read_lock == ECORE_SUCCESS) {
-		ECORE_MSG("get_n_elements - releasing vlan_mac_lock (reader)");
+		ECORE_MSG(sc, "get_n_elements - releasing vlan_mac_lock (reader)");
 		ecore_vlan_mac_h_read_unlock(sc, o);
 	}
 
@@ -617,7 +618,7 @@ static int ecore_check_mac_add(struct bnx2x_softc *sc __rte_unused,
 {
 	struct ecore_vlan_mac_registry_elem *pos;
 
-	ECORE_MSG("Checking MAC %02x:%02x:%02x:%02x:%02x:%02x for ADD command",
+	ECORE_MSG(sc, "Checking MAC %02x:%02x:%02x:%02x:%02x:%02x for ADD command",
 		  data->mac.mac[0], data->mac.mac[1], data->mac.mac[2],
 		  data->mac.mac[3], data->mac.mac[4], data->mac.mac[5]);
 
@@ -646,7 +647,7 @@ static struct ecore_vlan_mac_registry_elem *ecore_check_mac_del(struct bnx2x_sof
 {
 	struct ecore_vlan_mac_registry_elem *pos;
 
-	ECORE_MSG("Checking MAC %02x:%02x:%02x:%02x:%02x:%02x for DEL command",
+	ECORE_MSG(sc, "Checking MAC %02x:%02x:%02x:%02x:%02x:%02x for DEL command",
 		  data->mac.mac[0], data->mac.mac[1], data->mac.mac[2],
 		  data->mac.mac[3], data->mac.mac[4], data->mac.mac[5]);
 
@@ -724,7 +725,7 @@ static void ecore_set_mac_in_nig(struct bnx2x_softc *sc,
 	if (index > ECORE_LLH_CAM_MAX_PF_LINE)
 		return;
 
-	ECORE_MSG("Going to %s LLH configuration at entry %d",
+	ECORE_MSG(sc, "Going to %s LLH configuration at entry %d",
 		  (add ? "ADD" : "DELETE"), index);
 
 	if (add) {
@@ -840,7 +841,7 @@ static void ecore_set_one_mac_e2(struct bnx2x_softc *sc,
 	ecore_vlan_mac_set_cmd_hdr_e2(o, add, CLASSIFY_RULE_OPCODE_MAC,
 				      &rule_entry->mac.header);
 
-	ECORE_MSG("About to %s MAC %02x:%02x:%02x:%02x:%02x:%02x for Queue %d",
+	ECORE_MSG(sc, "About to %s MAC %02x:%02x:%02x:%02x:%02x:%02x for Queue %d",
 		  (add ? "add" : "delete"), mac[0], mac[1], mac[2], mac[3],
 		  mac[4], mac[5], raw->cl_id);
 
@@ -945,7 +946,7 @@ static void ecore_vlan_mac_set_rdata_e1x(struct bnx2x_softc *sc
 	ecore_vlan_mac_set_cfg_entry_e1x(o, add, opcode, mac, vlan_id,
 					 cfg_entry);
 
-	ECORE_MSG("%s MAC %02x:%02x:%02x:%02x:%02x:%02x CLID %d CAM offset %d",
+	ECORE_MSG(sc, "%s MAC %02x:%02x:%02x:%02x:%02x:%02x CLID %d CAM offset %d",
 		  (add ? "setting" : "clearing"),
 		  mac[0], mac[1], mac[2], mac[3], mac[4], mac[5],
 		  o->raw.cl_id, cam_offset);
@@ -1090,8 +1091,8 @@ static int ecore_validate_vlan_mac_add(struct bnx2x_softc *sc,
 	/* Check the registry */
 	rc = o->check_add(sc, o, &elem->cmd_data.vlan_mac.u);
 	if (rc) {
-		ECORE_MSG
-		    ("ADD command is not allowed considering current registry state.");
+		ECORE_MSG(sc,
+			  "ADD command is not allowed considering current registry state.");
 		return rc;
 	}
 
@@ -1099,7 +1100,7 @@ static int ecore_validate_vlan_mac_add(struct bnx2x_softc *sc,
 	 * MAC/VLAN/VLAN-MAC. Return an error if there is.
 	 */
 	if (exeq->get(exeq, elem)) {
-		ECORE_MSG("There is a pending ADD command already");
+		ECORE_MSG(sc, "There is a pending ADD command already");
 		return ECORE_EXISTS;
 	}
 
@@ -1138,8 +1139,8 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
 	 */
 	pos = o->check_del(sc, o, &elem->cmd_data.vlan_mac.u);
 	if (!pos) {
-		ECORE_MSG
-		    ("DEL command is not allowed considering current registry state");
+		ECORE_MSG(sc,
+			  "DEL command is not allowed considering current registry state");
 		return ECORE_EXISTS;
 	}
 
@@ -1151,13 +1152,13 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
 	/* Check for MOVE commands */
 	query_elem.cmd_data.vlan_mac.cmd = ECORE_VLAN_MAC_MOVE;
 	if (exeq->get(exeq, &query_elem)) {
-		PMD_DRV_LOG(ERR, "There is a pending MOVE command already");
+		PMD_DRV_LOG(ERR, sc, "There is a pending MOVE command already");
 		return ECORE_INVAL;
 	}
 
 	/* Check for DEL commands */
 	if (exeq->get(exeq, elem)) {
-		ECORE_MSG("There is a pending DEL command already");
+		ECORE_MSG(sc, "There is a pending DEL command already");
 		return ECORE_EXISTS;
 	}
 
@@ -1165,7 +1166,7 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
 	if (!(ECORE_TEST_BIT(ECORE_DONT_CONSUME_CAM_CREDIT,
 			     &elem->cmd_data.vlan_mac.vlan_mac_flags) ||
 	      o->put_credit(o))) {
-		PMD_DRV_LOG(ERR, "Failed to return a credit");
+		PMD_DRV_LOG(ERR, sc, "Failed to return a credit");
 		return ECORE_INVAL;
 	}
 
@@ -1198,8 +1199,8 @@ static int ecore_validate_vlan_mac_move(struct bnx2x_softc *sc,
 	 * state.
 	 */
 	if (!src_o->check_move(sc, src_o, dest_o, &elem->cmd_data.vlan_mac.u)) {
-		ECORE_MSG
-		    ("MOVE command is not allowed considering current registry state");
+		ECORE_MSG(sc,
+			  "MOVE command is not allowed considering current registry state");
 		return ECORE_INVAL;
 	}
 
@@ -1212,21 +1213,21 @@ static int ecore_validate_vlan_mac_move(struct bnx2x_softc *sc,
 	/* Check DEL on source */
 	query_elem.cmd_data.vlan_mac.cmd = ECORE_VLAN_MAC_DEL;
 	if (src_exeq->get(src_exeq, &query_elem)) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "There is a pending DEL command on the source queue already");
 		return ECORE_INVAL;
 	}
 
 	/* Check MOVE on source */
 	if (src_exeq->get(src_exeq, elem)) {
-		ECORE_MSG("There is a pending MOVE command already");
+		ECORE_MSG(sc, "There is a pending MOVE command already");
 		return ECORE_EXISTS;
 	}
 
 	/* Check ADD on destination */
 	query_elem.cmd_data.vlan_mac.cmd = ECORE_VLAN_MAC_ADD;
 	if (dest_exeq->get(dest_exeq, &query_elem)) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "There is a pending ADD command on the destination queue already");
 		return ECORE_INVAL;
 	}
@@ -1331,7 +1332,7 @@ static int __ecore_vlan_mac_execute_step(struct bnx2x_softc *sc,
 
 	ECORE_SPIN_LOCK_BH(&o->exe_queue.lock);
 
-	ECORE_MSG("vlan_mac_execute_step - trying to take writer lock");
+	ECORE_MSG(sc, "vlan_mac_execute_step - trying to take writer lock");
 	rc = __ecore_vlan_mac_h_write_trylock(sc, o);
 
 	if (rc != ECORE_SUCCESS) {
@@ -1428,17 +1429,17 @@ static int ecore_optimize_vlan_mac(struct bnx2x_softc *sc,
 				    &pos->cmd_data.vlan_mac.vlan_mac_flags)) {
 			if ((query.cmd_data.vlan_mac.cmd ==
 			     ECORE_VLAN_MAC_ADD) && !o->put_credit(o)) {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Failed to return the credit for the optimized ADD command");
 				return ECORE_INVAL;
 			} else if (!o->get_credit(o)) {	/* VLAN_MAC_DEL */
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Failed to recover the credit from the optimized DEL command");
 				return ECORE_INVAL;
 			}
 		}
 
-		ECORE_MSG("Optimizing %s command",
+		ECORE_MSG(sc, "Optimizing %s command",
 			  (elem->cmd_data.vlan_mac.cmd == ECORE_VLAN_MAC_ADD) ?
 			  "ADD" : "DEL");
 
@@ -1488,7 +1489,7 @@ static int ecore_vlan_mac_get_registry_elem(struct bnx2x_softc *sc,
 			return ECORE_INVAL;
 		}
 
-		ECORE_MSG("Got cam offset %d", reg_elem->cam_offset);
+		ECORE_MSG(sc, "Got cam offset %d", reg_elem->cam_offset);
 
 		/* Set a VLAN-MAC data */
 		ECORE_MEMCPY(&reg_elem->u, &elem->cmd_data.vlan_mac.u,
@@ -1697,8 +1698,8 @@ int ecore_config_vlan_mac(struct bnx2x_softc *sc,
 		rc = ECORE_PENDING;
 
 	if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, ramrod_flags)) {
-		ECORE_MSG
-		    ("RAMROD_DRV_CLR_ONLY requested: clearing a pending bit.");
+		ECORE_MSG(sc,
+			  "RAMROD_DRV_CLR_ONLY requested: clearing a pending bit.");
 		raw->clear_pending(raw);
 	}
 
@@ -1777,7 +1778,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
 		    *vlan_mac_flags) {
 			rc = exeq->remove(sc, exeq->owner, exeq_pos);
 			if (rc) {
-				PMD_DRV_LOG(ERR, "Failed to remove command");
+				PMD_DRV_LOG(ERR, sc, "Failed to remove command");
 				ECORE_SPIN_UNLOCK_BH(&exeq->lock);
 				return rc;
 			}
@@ -1802,7 +1803,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
 	ECORE_CLEAR_BIT_NA(RAMROD_EXEC, &p.ramrod_flags);
 	ECORE_CLEAR_BIT_NA(RAMROD_CONT, &p.ramrod_flags);
 
-	ECORE_MSG("vlan_mac_del_all -- taking vlan_mac_lock (reader)");
+	ECORE_MSG(sc, "vlan_mac_del_all -- taking vlan_mac_lock (reader)");
 	read_lock = ecore_vlan_mac_h_read_lock(sc, o);
 	if (read_lock != ECORE_SUCCESS)
 		return read_lock;
@@ -1814,7 +1815,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
 			ECORE_MEMCPY(&p.user_req.u, &pos->u, sizeof(pos->u));
 			rc = ecore_config_vlan_mac(sc, &p);
 			if (rc < 0) {
-				PMD_DRV_LOG(ERR,
+				PMD_DRV_LOG(ERR, sc,
 					    "Failed to add a new DEL command");
 				ecore_vlan_mac_h_read_unlock(sc, o);
 				return rc;
@@ -1822,7 +1823,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
 		}
 	}
 
-	ECORE_MSG("vlan_mac_del_all -- releasing vlan_mac_lock (reader)");
+	ECORE_MSG(sc, "vlan_mac_del_all -- releasing vlan_mac_lock (reader)");
 	ecore_vlan_mac_h_read_unlock(sc, o);
 
 	p.ramrod_flags = *ramrod_flags;
@@ -2009,7 +2010,7 @@ static int ecore_set_rx_mode_e1x(struct bnx2x_softc *sc,
 	    mac_filters->unmatched_unicast | mask :
 	    mac_filters->unmatched_unicast & ~mask;
 
-	ECORE_MSG("drop_ucast 0x%xdrop_mcast 0x%x accp_ucast 0x%x"
+	ECORE_MSG(sc, "drop_ucast 0x%xdrop_mcast 0x%x accp_ucast 0x%x"
 		  "accp_mcast 0x%xaccp_bcast 0x%x",
 		  mac_filters->ucast_drop_all, mac_filters->mcast_drop_all,
 		  mac_filters->ucast_accept_all, mac_filters->mcast_accept_all,
@@ -2155,8 +2156,8 @@ static int ecore_set_rx_mode_e2(struct bnx2x_softc *sc,
 	 */
 	ecore_rx_mode_set_rdata_hdr_e2(p->cid, &data->header, rule_idx);
 
-	ECORE_MSG
-	    ("About to configure %d rules, rx_accept_flags 0x%lx, tx_accept_flags 0x%lx",
+	    ECORE_MSG
+	    (sc, "About to configure %d rules, rx_accept_flags 0x%lx, tx_accept_flags 0x%lx",
 	     data->header.rule_cnt, p->rx_accept_flags, p->tx_accept_flags);
 
 	/* No need for an explicit memory barrier here as long we would
@@ -2209,7 +2210,7 @@ int ecore_config_rx_mode(struct bnx2x_softc *sc,
 				return rc;
 		}
 	} else {
-		ECORE_MSG("ERROR: config_rx_mode is NULL");
+		ECORE_MSG(sc, "ERROR: config_rx_mode is NULL");
 		return -1;
 	}
 
@@ -2290,7 +2291,7 @@ static int ecore_mcast_enqueue_cmd(struct bnx2x_softc *sc __rte_unused,
 	if (!new_cmd)
 		return ECORE_NOMEM;
 
-	ECORE_MSG("About to enqueue a new %d command. macs_list_len=%d",
+	ECORE_MSG(sc, "About to enqueue a new %d command. macs_list_len=%d",
 		  cmd, macs_list_len);
 
 	ECORE_LIST_INIT(&new_cmd->data.macs_head);
@@ -2326,7 +2327,7 @@ static int ecore_mcast_enqueue_cmd(struct bnx2x_softc *sc __rte_unused,
 
 	default:
 		ECORE_FREE(sc, new_cmd, total_sz);
-		PMD_DRV_LOG(ERR, "Unknown command: %d", cmd);
+		PMD_DRV_LOG(ERR, sc, "Unknown command: %d", cmd);
 		return ECORE_INVAL;
 	}
 
@@ -2438,11 +2439,11 @@ static void ecore_mcast_set_one_rule_e2(struct bnx2x_softc *sc __rte_unused,
 		break;
 
 	default:
-		PMD_DRV_LOG(ERR, "Unknown command: %d", cmd);
+		PMD_DRV_LOG(ERR, sc, "Unknown command: %d", cmd);
 		return;
 	}
 
-	ECORE_MSG("%s bin %d",
+	ECORE_MSG(sc, "%s bin %d",
 		  ((rx_tx_add_flag & ETH_MULTICAST_RULES_CMD_IS_ADD) ?
 		   "Setting" : "Clearing"), bin);
 
@@ -2477,7 +2478,7 @@ static int ecore_mcast_handle_restore_cmd_e2(struct bnx2x_softc *sc,
 
 		cnt++;
 
-		ECORE_MSG("About to configure a bin %d", cur_bin);
+		ECORE_MSG(sc, "About to configure a bin %d", cur_bin);
 
 		/* Break if we reached the maximum number
 		 * of rules.
@@ -2509,8 +2510,8 @@ static void ecore_mcast_hdl_pending_add_e2(struct bnx2x_softc *sc,
 
 		cnt++;
 
-		ECORE_MSG
-		    ("About to configure %02x:%02x:%02x:%02x:%02x:%02x mcast MAC",
+		    ECORE_MSG
+		    (sc, "About to configure %02x:%02x:%02x:%02x:%02x:%02x mcast MAC",
 		     pmac_pos->mac[0], pmac_pos->mac[1], pmac_pos->mac[2],
 		     pmac_pos->mac[3], pmac_pos->mac[4], pmac_pos->mac[5]);
 
@@ -2545,7 +2546,7 @@ static void ecore_mcast_hdl_pending_del_e2(struct bnx2x_softc *sc,
 
 		cmd_pos->data.macs_num--;
 
-		ECORE_MSG("Deleting MAC. %d left,cnt is %d",
+		ECORE_MSG(sc, "Deleting MAC. %d left,cnt is %d",
 			  cmd_pos->data.macs_num, cnt);
 
 		/* Break if we reached the maximum
@@ -2604,7 +2605,8 @@ static int ecore_mcast_handle_pending_cmds_e2(struct bnx2x_softc *sc, struct
 			break;
 
 		default:
-			PMD_DRV_LOG(ERR, "Unknown command: %d", cmd_pos->type);
+			PMD_DRV_LOG(ERR, sc,
+				    "Unknown command: %d", cmd_pos->type);
 			return ECORE_INVAL;
 		}
 
@@ -2641,8 +2643,8 @@ static void ecore_mcast_hdl_add(struct bnx2x_softc *sc,
 
 		cnt++;
 
-		ECORE_MSG
-		    ("About to configure %02x:%02x:%02x:%02x:%02x:%02x mcast MAC",
+		    ECORE_MSG
+		    (sc, "About to configure %02x:%02x:%02x:%02x:%02x:%02x mcast MAC",
 		     mlist_pos->mac[0], mlist_pos->mac[1], mlist_pos->mac[2],
 		     mlist_pos->mac[3], mlist_pos->mac[4], mlist_pos->mac[5]);
 	}
@@ -2662,7 +2664,8 @@ static void ecore_mcast_hdl_del(struct bnx2x_softc *sc,
 
 		cnt++;
 
-		ECORE_MSG("Deleting MAC. %d left", p->mcast_list_len - i - 1);
+		ECORE_MSG(sc,
+			  "Deleting MAC. %d left", p->mcast_list_len - i - 1);
 	}
 
 	*line_idx = cnt;
@@ -2688,7 +2691,7 @@ static int ecore_mcast_handle_current_cmd(struct bnx2x_softc *sc, struct
 	struct ecore_mcast_obj *o = p->mcast_obj;
 	int cnt = start_cnt;
 
-	ECORE_MSG("p->mcast_list_len=%d", p->mcast_list_len);
+	ECORE_MSG(sc, "p->mcast_list_len=%d", p->mcast_list_len);
 
 	switch (cmd) {
 	case ECORE_MCAST_CMD_ADD:
@@ -2704,7 +2707,7 @@ static int ecore_mcast_handle_current_cmd(struct bnx2x_softc *sc, struct
 		break;
 
 	default:
-		PMD_DRV_LOG(ERR, "Unknown command: %d", cmd);
+		PMD_DRV_LOG(ERR, sc, "Unknown command: %d", cmd);
 		return ECORE_INVAL;
 	}
 
@@ -2749,7 +2752,7 @@ static int ecore_mcast_validate_e2(__rte_unused struct bnx2x_softc *sc,
 		break;
 
 	default:
-		PMD_DRV_LOG(ERR, "Unknown command: %d", cmd);
+		PMD_DRV_LOG(ERR, sc, "Unknown command: %d", cmd);
 		return ECORE_INVAL;
 	}
 
@@ -2935,8 +2938,8 @@ static void ecore_mcast_hdl_add_e1h(struct bnx2x_softc *sc __rte_unused,
 		bit = ecore_mcast_bin_from_mac(mlist_pos->mac);
 		ECORE_57711_SET_MC_FILTER(mc_filter, bit);
 
-		ECORE_MSG
-		    ("About to configure %02x:%02x:%02x:%02x:%02x:%02x mcast MAC, bin %d",
+		    ECORE_MSG
+		    (sc, "About to configure %02x:%02x:%02x:%02x:%02x:%02x mcast MAC, bin %d",
 		     mlist_pos->mac[0], mlist_pos->mac[1], mlist_pos->mac[2],
 		     mlist_pos->mac[3], mlist_pos->mac[4], mlist_pos->mac[5],
 		     bit);
@@ -2956,7 +2959,7 @@ static void ecore_mcast_hdl_restore_e1h(struct bnx2x_softc *sc
 	for (bit = ecore_mcast_get_next_bin(o, 0);
 	     bit >= 0; bit = ecore_mcast_get_next_bin(o, bit + 1)) {
 		ECORE_57711_SET_MC_FILTER(mc_filter, bit);
-		ECORE_MSG("About to set bin %d", bit);
+		ECORE_MSG(sc, "About to set bin %d", bit);
 	}
 }
 
@@ -2987,7 +2990,7 @@ static int ecore_mcast_setup_e1h(struct bnx2x_softc *sc,
 			break;
 
 		case ECORE_MCAST_CMD_DEL:
-			ECORE_MSG("Invalidating multicast MACs configuration");
+			ECORE_MSG(sc, "Invalidating multicast MACs configuration");
 
 			/* clear the registry */
 			ECORE_MEMSET(o->registry.aprox_match.vec, 0,
@@ -2999,7 +3002,7 @@ static int ecore_mcast_setup_e1h(struct bnx2x_softc *sc,
 			break;
 
 		default:
-			PMD_DRV_LOG(ERR, "Unknown command: %d", cmd);
+			PMD_DRV_LOG(ERR, sc, "Unknown command: %d", cmd);
 			return ECORE_INVAL;
 		}
 
@@ -3050,8 +3053,8 @@ int ecore_config_mcast(struct bnx2x_softc *sc,
 	if ((!p->mcast_list_len) && (!o->check_sched(o)))
 		return ECORE_SUCCESS;
 
-	ECORE_MSG
-	    ("o->total_pending_num=%d p->mcast_list_len=%d o->max_cmd_len=%d",
+	    ECORE_MSG
+	    (sc, "o->total_pending_num=%d p->mcast_list_len=%d o->max_cmd_len=%d",
 	     o->total_pending_num, p->mcast_list_len, o->max_cmd_len);
 
 	/* Enqueue the current command to the pending list if we can't complete
@@ -3480,7 +3483,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
 
 	ECORE_MEMSET(data, 0, sizeof(*data));
 
-	ECORE_MSG("Configuring RSS");
+	ECORE_MSG(sc, "Configuring RSS");
 
 	/* Set an echo field */
 	data->echo = ECORE_CPU_TO_LE32((r->cid & ECORE_SWCID_MASK) |
@@ -3494,7 +3497,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
 
 	data->rss_mode = rss_mode;
 
-	ECORE_MSG("rss_mode=%d", rss_mode);
+	ECORE_MSG(sc, "rss_mode=%d", rss_mode);
 
 	/* RSS capabilities */
 	if (ECORE_TEST_BIT(ECORE_RSS_IPV4, &p->rss_flags))
@@ -3534,7 +3537,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
 	/* RSS engine ID */
 	data->rss_engine_id = o->engine_id;
 
-	ECORE_MSG("rss_engine_id=%d", data->rss_engine_id);
+	ECORE_MSG(sc, "rss_engine_id=%d", data->rss_engine_id);
 
 	/* Indirection table */
 	ECORE_MEMCPY(data->indirection_table, p->ind_table,
@@ -3629,15 +3632,15 @@ int ecore_queue_state_change(struct bnx2x_softc *sc,
 	/* Check that the requested transition is legal */
 	rc = o->check_transition(sc, o, params);
 	if (rc) {
-		PMD_DRV_LOG(ERR, "check transition returned an error. rc %d",
+		PMD_DRV_LOG(ERR, sc, "check transition returned an error. rc %d",
 			    rc);
 		return ECORE_INVAL;
 	}
 
 	/* Set "pending" bit */
-	ECORE_MSG("pending bit was=%lx", o->pending);
+	ECORE_MSG(sc, "pending bit was=%lx", o->pending);
 	pending_bit = o->set_pending(o, params);
-	ECORE_MSG("pending bit now=%lx", o->pending);
+	ECORE_MSG(sc, "pending bit now=%lx", o->pending);
 
 	/* Don't send a command if only driver cleanup was requested */
 	if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, &params->ramrod_flags))
@@ -3704,7 +3707,7 @@ static int ecore_queue_comp_cmd(struct bnx2x_softc *sc __rte_unused,
 	unsigned long cur_pending = o->pending;
 
 	if (!ECORE_TEST_AND_CLEAR_BIT(cmd, &cur_pending)) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "Bad MC reply %d for queue %d in state %d pending 0x%lx, next_state %d",
 			    cmd, o->cids[ECORE_PRIMARY_CID_INDEX], o->state,
 			    cur_pending, o->next_state);
@@ -3715,15 +3718,15 @@ static int ecore_queue_comp_cmd(struct bnx2x_softc *sc __rte_unused,
 		/* >= because tx only must always be smaller than cos since the
 		 * primary connection supports COS 0
 		 */
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "illegal value for next tx_only: %d. max cos was %d",
 			    o->next_tx_only, o->max_cos);
 
-	ECORE_MSG("Completing command %d for queue %d, setting state to %d",
+	ECORE_MSG(sc, "Completing command %d for queue %d, setting state to %d",
 		  cmd, o->cids[ECORE_PRIMARY_CID_INDEX], o->next_state);
 
 	if (o->next_tx_only)	/* print num tx-only if any exist */
-		ECORE_MSG("primary cid %d: num tx-only cons %d",
+		ECORE_MSG(sc, "primary cid %d: num tx-only cons %d",
 			  o->cids[ECORE_PRIMARY_CID_INDEX], o->next_tx_only);
 
 	o->state = o->next_state;
@@ -3784,7 +3787,7 @@ static void ecore_q_fill_init_general_data(struct bnx2x_softc *sc __rte_unused,
 	    ECORE_TEST_BIT(ECORE_Q_FLG_FCOE, flags) ?
 	    LLFC_TRAFFIC_TYPE_FCOE : LLFC_TRAFFIC_TYPE_NW;
 
-	ECORE_MSG("flags: active %d, cos %d, stats en %d",
+	ECORE_MSG(sc, "flags: active %d, cos %d, stats en %d",
 		  gen_data->activate_flg, gen_data->cos,
 		  gen_data->statistics_en_flg);
 }
@@ -3925,7 +3928,7 @@ static void ecore_q_fill_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queu
 	ecore_q_fill_init_tx_data(&cmd_params->params.tx_only.txq_params,
 				  &data->tx, &cmd_params->params.tx_only.flags);
 
-	ECORE_MSG("cid %d, tx bd page lo %x hi %x",
+	ECORE_MSG(sc, "cid %d, tx bd page lo %x hi %x",
 		  cmd_params->q_obj->cids[0],
 		  data->tx.tx_bd_page_base.lo, data->tx.tx_bd_page_base.hi);
 }
@@ -3975,9 +3978,9 @@ static int ecore_q_init(struct bnx2x_softc *sc,
 
 	/* Set CDU context validation values */
 	for (cos = 0; cos < o->max_cos; cos++) {
-		ECORE_MSG("setting context validation. cid %d, cos %d",
+		ECORE_MSG(sc, "setting context validation. cid %d, cos %d",
 			  o->cids[cos], cos);
-		ECORE_MSG("context pointer %p", init->cxts[cos]);
+		ECORE_MSG(sc, "context pointer %p", init->cxts[cos]);
 		ECORE_SET_CTX_VALIDATION(sc, init->cxts[cos], o->cids[cos]);
 	}
 
@@ -4061,15 +4064,15 @@ static int ecore_q_send_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queue
 
 	if (ECORE_TEST_BIT(ECORE_Q_TYPE_FWD, &o->type))
 		ramrod = RAMROD_CMD_ID_ETH_FORWARD_SETUP;
-	ECORE_MSG("sending forward tx-only ramrod");
+	ECORE_MSG(sc, "sending forward tx-only ramrod");
 
 	if (cid_index >= o->max_cos) {
-		PMD_DRV_LOG(ERR, "queue[%d]: cid_index (%d) is out of range",
+		PMD_DRV_LOG(ERR, sc, "queue[%d]: cid_index (%d) is out of range",
 			    o->cl_id, cid_index);
 		return ECORE_INVAL;
 	}
 
-	ECORE_MSG("parameters received: cos: %d sp-id: %d",
+	ECORE_MSG(sc, "parameters received: cos: %d sp-id: %d",
 		  tx_only_params->gen_params.cos,
 		  tx_only_params->gen_params.spcl_id);
 
@@ -4079,8 +4082,8 @@ static int ecore_q_send_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queue
 	/* Fill the ramrod data */
 	ecore_q_fill_setup_tx_only(sc, params, rdata);
 
-	ECORE_MSG
-	    ("sending tx-only ramrod: cid %d, client-id %d, sp-client id %d, cos %d",
+	    ECORE_MSG
+	    (sc, "sending tx-only ramrod: cid %d, client-id %d, sp-client id %d, cos %d",
 	     o->cids[cid_index], rdata->general.client_id,
 	     rdata->general.sp_client_id, rdata->general.cos);
 
@@ -4175,7 +4178,7 @@ static int ecore_q_send_update(struct bnx2x_softc *sc,
 	uint8_t cid_index = update_params->cid_index;
 
 	if (cid_index >= o->max_cos) {
-		PMD_DRV_LOG(ERR, "queue[%d]: cid_index (%d) is out of range",
+		PMD_DRV_LOG(ERR, sc, "queue[%d]: cid_index (%d) is out of range",
 			    o->cl_id, cid_index);
 		return ECORE_INVAL;
 	}
@@ -4269,7 +4272,7 @@ static int ecore_q_send_cfc_del(struct bnx2x_softc *sc,
 	uint8_t cid_idx = params->params.cfc_del.cid_index;
 
 	if (cid_idx >= o->max_cos) {
-		PMD_DRV_LOG(ERR, "queue[%d]: cid_index (%d) is out of range",
+		PMD_DRV_LOG(ERR, sc, "queue[%d]: cid_index (%d) is out of range",
 			    o->cl_id, cid_idx);
 		return ECORE_INVAL;
 	}
@@ -4285,7 +4288,7 @@ static int ecore_q_send_terminate(struct bnx2x_softc *sc, struct ecore_queue_sta
 	uint8_t cid_index = params->params.terminate.cid_index;
 
 	if (cid_index >= o->max_cos) {
-		PMD_DRV_LOG(ERR, "queue[%d]: cid_index (%d) is out of range",
+		PMD_DRV_LOG(ERR, sc, "queue[%d]: cid_index (%d) is out of range",
 			    o->cl_id, cid_index);
 		return ECORE_INVAL;
 	}
@@ -4329,7 +4332,7 @@ static int ecore_queue_send_cmd_cmn(struct bnx2x_softc *sc, struct ecore_queue_s
 	case ECORE_Q_CMD_EMPTY:
 		return ecore_q_send_empty(sc, params);
 	default:
-		PMD_DRV_LOG(ERR, "Unknown command: %d", params->cmd);
+		PMD_DRV_LOG(ERR, sc, "Unknown command: %d", params->cmd);
 		return ECORE_INVAL;
 	}
 }
@@ -4352,7 +4355,7 @@ static int ecore_queue_send_cmd_e1x(struct bnx2x_softc *sc,
 	case ECORE_Q_CMD_EMPTY:
 		return ecore_queue_send_cmd_cmn(sc, params);
 	default:
-		PMD_DRV_LOG(ERR, "Unknown command: %d", params->cmd);
+		PMD_DRV_LOG(ERR, sc, "Unknown command: %d", params->cmd);
 		return ECORE_INVAL;
 	}
 }
@@ -4375,7 +4378,7 @@ static int ecore_queue_send_cmd_e2(struct bnx2x_softc *sc,
 	case ECORE_Q_CMD_EMPTY:
 		return ecore_queue_send_cmd_cmn(sc, params);
 	default:
-		PMD_DRV_LOG(ERR, "Unknown command: %d", params->cmd);
+		PMD_DRV_LOG(ERR, sc, "Unknown command: %d", params->cmd);
 		return ECORE_INVAL;
 	}
 }
@@ -4418,7 +4421,7 @@ static int ecore_queue_chk_transition(struct bnx2x_softc *sc __rte_unused,
 	 * the previous one.
 	 */
 	if (o->pending) {
-		PMD_DRV_LOG(ERR, "Blocking transition since pending was %lx",
+		PMD_DRV_LOG(ERR, sc, "Blocking transition since pending was %lx",
 			    o->pending);
 		return ECORE_BUSY;
 	}
@@ -4545,19 +4548,19 @@ static int ecore_queue_chk_transition(struct bnx2x_softc *sc __rte_unused,
 
 		break;
 	default:
-		PMD_DRV_LOG(ERR, "Illegal state: %d", state);
+		PMD_DRV_LOG(ERR, sc, "Illegal state: %d", state);
 	}
 
 	/* Transition is assured */
 	if (next_state != ECORE_Q_STATE_MAX) {
-		ECORE_MSG("Good state transition: %d(%d)->%d",
+		ECORE_MSG(sc, "Good state transition: %d(%d)->%d",
 			  state, cmd, next_state);
 		o->next_state = next_state;
 		o->next_tx_only = next_tx_only;
 		return ECORE_SUCCESS;
 	}
 
-	ECORE_MSG("Bad state transition request: %d %d", state, cmd);
+	ECORE_MSG(sc, "Bad state transition request: %d %d", state, cmd);
 
 	return ECORE_INVAL;
 }
@@ -4608,18 +4611,18 @@ static int ecore_queue_chk_fwd_transition(struct bnx2x_softc *sc __rte_unused,
 
 		break;
 	default:
-		PMD_DRV_LOG(ERR, "Illegal state: %d", state);
+		PMD_DRV_LOG(ERR, sc, "Illegal state: %d", state);
 	}
 
 	/* Transition is assured */
 	if (next_state != ECORE_Q_STATE_MAX) {
-		ECORE_MSG("Good state transition: %d(%d)->%d",
+		ECORE_MSG(sc, "Good state transition: %d(%d)->%d",
 			  state, cmd, next_state);
 		o->next_state = next_state;
 		return ECORE_SUCCESS;
 	}
 
-	ECORE_MSG("Bad state transition request: %d %d", state, cmd);
+	ECORE_MSG(sc, "Bad state transition request: %d %d", state, cmd);
 	return ECORE_INVAL;
 }
 
@@ -4699,14 +4702,14 @@ ecore_func_state_change_comp(struct bnx2x_softc *sc __rte_unused,
 	unsigned long cur_pending = o->pending;
 
 	if (!ECORE_TEST_AND_CLEAR_BIT(cmd, &cur_pending)) {
-		PMD_DRV_LOG(ERR,
+		PMD_DRV_LOG(ERR, sc,
 			    "Bad MC reply %d for func %d in state %d pending 0x%lx, next_state %d",
 			    cmd, ECORE_FUNC_ID(sc), o->state, cur_pending,
 			    o->next_state);
 		return ECORE_INVAL;
 	}
 
-	ECORE_MSG("Completing command %d for func %d, setting state to %d",
+	ECORE_MSG(sc, "Completing command %d for func %d, setting state to %d",
 		  cmd, ECORE_FUNC_ID(sc), o->next_state);
 
 	o->state = o->next_state;
@@ -4829,18 +4832,19 @@ static int ecore_func_chk_transition(struct bnx2x_softc *sc __rte_unused,
 
 		break;
 	default:
-		PMD_DRV_LOG(ERR, "Unknown state: %d", state);
+		PMD_DRV_LOG(ERR, sc, "Unknown state: %d", state);
 	}
 
 	/* Transition is assured */
 	if (next_state != ECORE_F_STATE_MAX) {
-		ECORE_MSG("Good function state transition: %d(%d)->%d",
+		ECORE_MSG(sc, "Good function state transition: %d(%d)->%d",
 			  state, cmd, next_state);
 		o->next_state = next_state;
 		return ECORE_SUCCESS;
 	}
 
-	ECORE_MSG("Bad function state transition request: %d %d", state, cmd);
+	ECORE_MSG(sc,
+		  "Bad function state transition request: %d %d", state, cmd);
 
 	return ECORE_INVAL;
 }
@@ -4930,13 +4934,13 @@ static int ecore_func_hw_init(struct bnx2x_softc *sc,
 	const struct ecore_func_sp_drv_ops *drv = o->drv;
 	int rc = 0;
 
-	ECORE_MSG("function %d  load_code %x",
+	ECORE_MSG(sc, "function %d  load_code %x",
 		  ECORE_ABS_FUNC_ID(sc), load_code);
 
 	/* Prepare FW */
 	rc = drv->init_fw(sc);
 	if (rc) {
-		PMD_DRV_LOG(ERR, "Error loading firmware");
+		PMD_DRV_LOG(ERR, sc, "Error loading firmware");
 		goto init_err;
 	}
 
@@ -4967,7 +4971,7 @@ static int ecore_func_hw_init(struct bnx2x_softc *sc,
 
 		break;
 	default:
-		PMD_DRV_LOG(ERR, "Unknown load_code (0x%x) from MCP",
+		PMD_DRV_LOG(ERR, sc, "Unknown load_code (0x%x) from MCP",
 			    load_code);
 		rc = ECORE_INVAL;
 	}
@@ -5043,7 +5047,7 @@ static int ecore_func_hw_reset(struct bnx2x_softc *sc,
 	struct ecore_func_sp_obj *o = params->f_obj;
 	const struct ecore_func_sp_drv_ops *drv = o->drv;
 
-	ECORE_MSG("function %d  reset_phase %x", ECORE_ABS_FUNC_ID(sc),
+	ECORE_MSG(sc, "function %d  reset_phase %x", ECORE_ABS_FUNC_ID(sc),
 		  reset_phase);
 
 	switch (reset_phase) {
@@ -5057,7 +5061,7 @@ static int ecore_func_hw_reset(struct bnx2x_softc *sc,
 		ecore_func_reset_func(sc, drv);
 		break;
 	default:
-		PMD_DRV_LOG(ERR, "Unknown reset_phase (0x%x) from MCP",
+		PMD_DRV_LOG(ERR, sc, "Unknown reset_phase (0x%x) from MCP",
 			    reset_phase);
 		break;
 	}
@@ -5148,7 +5152,7 @@ static int ecore_func_send_afex_update(struct bnx2x_softc *sc, struct ecore_func
 	 *  read and we will have to put a full memory barrier there
 	 *  (inside ecore_sp_post()).
 	 */
-	ECORE_MSG("afex: sending func_update vif_id 0x%x dvlan 0x%x prio 0x%x",
+	ECORE_MSG(sc, "afex: sending func_update vif_id 0x%x dvlan 0x%x prio 0x%x",
 		  rdata->vif_id,
 		  rdata->afex_default_vlan, rdata->allowed_priorities);
 
@@ -5186,8 +5190,8 @@ inline int ecore_func_send_afex_viflists(struct bnx2x_softc *sc,
 	 *  (inside ecore_sp_post()).
 	 */
 
-	ECORE_MSG
-	    ("afex: ramrod lists, cmd 0x%x index 0x%x func_bit_map 0x%x func_to_clr 0x%x",
+	    ECORE_MSG
+	    (sc, "afex: ramrod lists, cmd 0x%x index 0x%x func_bit_map 0x%x func_to_clr 0x%x",
 	     rdata->afex_vif_list_command, rdata->vif_list_index,
 	     rdata->func_bit_map, rdata->func_to_clear);
 
@@ -5258,7 +5262,7 @@ static int ecore_func_send_cmd(struct bnx2x_softc *sc,
 	case ECORE_F_CMD_SWITCH_UPDATE:
 		return ecore_func_send_switch_update(sc, params);
 	default:
-		PMD_DRV_LOG(ERR, "Unknown command: %d", params->cmd);
+		PMD_DRV_LOG(ERR, sc, "Unknown command: %d", params->cmd);
 		return ECORE_INVAL;
 	}
 }
@@ -5319,7 +5323,7 @@ int ecore_func_state_change(struct bnx2x_softc *sc,
 		}
 		if (rc == ECORE_BUSY) {
 			ECORE_MUTEX_UNLOCK(&o->one_pending_mutex);
-			PMD_DRV_LOG(ERR,
+			PMD_DRV_LOG(ERR, sc,
 				    "timeout waiting for previous ramrod completion");
 			return rc;
 		}
diff --git a/drivers/net/bnx2x/ecore_sp.h b/drivers/net/bnx2x/ecore_sp.h
index 9c1f55dfda..b8fad246af 100644
--- a/drivers/net/bnx2x/ecore_sp.h
+++ b/drivers/net/bnx2x/ecore_sp.h
@@ -217,8 +217,8 @@ ECORE_CRC32_LE(uint32_t seed, uint8_t *mac, uint32_t len)
     } while (0)
 
 
-#define ECORE_MSG(m, ...) \
-	PMD_DRV_LOG(DEBUG, m, ##__VA_ARGS__)
+#define ECORE_MSG(sc, m, ...) \
+	PMD_DRV_LOG(DEBUG, sc, m, ##__VA_ARGS__)
 
 typedef struct _ecore_list_entry_t
 {
diff --git a/drivers/net/bnx2x/elink.c b/drivers/net/bnx2x/elink.c
index 89747104a4..95b4e75984 100644
--- a/drivers/net/bnx2x/elink.c
+++ b/drivers/net/bnx2x/elink.c
@@ -944,7 +944,7 @@ static int elink_check_lfa(struct elink_params *params)
 	 * to verify DCC bit is cleared in any case!
 	 */
 	if (additional_config & NO_LFA_DUE_TO_DCC_MASK) {
-		PMD_DRV_LOG(DEBUG, "No LFA due to DCC flap after clp exit");
+		PMD_DRV_LOG(DEBUG, sc, "No LFA due to DCC flap after clp exit");
 		REG_WR(sc, params->lfa_base +
 		       offsetof(struct shmem_lfa, additional_config),
 		       additional_config & ~NO_LFA_DUE_TO_DCC_MASK);
@@ -985,7 +985,7 @@ static int elink_check_lfa(struct elink_params *params)
 			   offsetof(struct shmem_lfa, req_duplex));
 	req_val = params->req_duplex[0] | (params->req_duplex[1] << 16);
 	if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
-		PMD_DRV_LOG(INFO, "Duplex mismatch %x vs. %x",
+		PMD_DRV_LOG(INFO, sc, "Duplex mismatch %x vs. %x",
 			    (saved_val & lfa_mask), (req_val & lfa_mask));
 		return LFA_DUPLEX_MISMATCH;
 	}
@@ -994,7 +994,7 @@ static int elink_check_lfa(struct elink_params *params)
 			   offsetof(struct shmem_lfa, req_flow_ctrl));
 	req_val = params->req_flow_ctrl[0] | (params->req_flow_ctrl[1] << 16);
 	if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
-		PMD_DRV_LOG(DEBUG, "Flow control mismatch %x vs. %x",
+		PMD_DRV_LOG(DEBUG, sc, "Flow control mismatch %x vs. %x",
 			    (saved_val & lfa_mask), (req_val & lfa_mask));
 		return LFA_FLOW_CTRL_MISMATCH;
 	}
@@ -1003,7 +1003,7 @@ static int elink_check_lfa(struct elink_params *params)
 			   offsetof(struct shmem_lfa, req_line_speed));
 	req_val = params->req_line_speed[0] | (params->req_line_speed[1] << 16);
 	if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
-		PMD_DRV_LOG(DEBUG, "Link speed mismatch %x vs. %x",
+		PMD_DRV_LOG(DEBUG, sc, "Link speed mismatch %x vs. %x",
 			    (saved_val & lfa_mask), (req_val & lfa_mask));
 		return LFA_LINK_SPEED_MISMATCH;
 	}
@@ -1014,7 +1014,7 @@ static int elink_check_lfa(struct elink_params *params)
 						     speed_cap_mask[cfg_idx]));
 
 		if (cur_speed_cap_mask != params->speed_cap_mask[cfg_idx]) {
-			PMD_DRV_LOG(DEBUG, "Speed Cap mismatch %x vs. %x",
+			PMD_DRV_LOG(DEBUG, sc, "Speed Cap mismatch %x vs. %x",
 				    cur_speed_cap_mask,
 				    params->speed_cap_mask[cfg_idx]);
 			return LFA_SPEED_CAP_MISMATCH;
@@ -1027,7 +1027,7 @@ static int elink_check_lfa(struct elink_params *params)
 	    REQ_FC_AUTO_ADV_MASK;
 
 	if ((uint16_t) cur_req_fc_auto_adv != params->req_fc_auto_adv) {
-		PMD_DRV_LOG(DEBUG, "Flow Ctrl AN mismatch %x vs. %x",
+		PMD_DRV_LOG(DEBUG, sc, "Flow Ctrl AN mismatch %x vs. %x",
 			    cur_req_fc_auto_adv, params->req_fc_auto_adv);
 		return LFA_FLOW_CTRL_MISMATCH;
 	}
@@ -1040,7 +1040,8 @@ static int elink_check_lfa(struct elink_params *params)
 	     (params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI)) ||
 	    ((eee_status & SHMEM_EEE_REQUESTED_BIT) ^
 	     (params->eee_mode & ELINK_EEE_MODE_ADV_LPI))) {
-		PMD_DRV_LOG(DEBUG, "EEE mismatch %x vs. %x", params->eee_mode,
+		PMD_DRV_LOG(DEBUG, sc,
+			    "EEE mismatch %x vs. %x", params->eee_mode,
 			    eee_status);
 		return LFA_EEE_MISMATCH;
 	}
@@ -1059,7 +1060,7 @@ static void elink_get_epio(struct bnx2x_softc *sc, uint32_t epio_pin,
 	*en = 0;
 	/* Sanity check */
 	if (epio_pin > 31) {
-		PMD_DRV_LOG(DEBUG, "Invalid EPIO pin %d to get", epio_pin);
+		PMD_DRV_LOG(DEBUG, sc, "Invalid EPIO pin %d to get", epio_pin);
 		return;
 	}
 
@@ -1077,10 +1078,10 @@ static void elink_set_epio(struct bnx2x_softc *sc, uint32_t epio_pin, uint32_t e
 
 	/* Sanity check */
 	if (epio_pin > 31) {
-		PMD_DRV_LOG(DEBUG, "Invalid EPIO pin %d to set", epio_pin);
+		PMD_DRV_LOG(DEBUG, sc, "Invalid EPIO pin %d to set", epio_pin);
 		return;
 	}
-	PMD_DRV_LOG(DEBUG, "Setting EPIO pin %d to %d", epio_pin, en);
+	PMD_DRV_LOG(DEBUG, sc, "Setting EPIO pin %d to %d", epio_pin, en);
 	epio_mask = 1 << epio_pin;
 	/* Set this EPIO to output */
 	gp_output = REG_RD(sc, MCP_REG_MCPR_GP_OUTPUTS);
@@ -1211,7 +1212,7 @@ static void elink_set_mdio_clk(struct bnx2x_softc *sc, uint32_t emac_base)
 	new_mode |= clc_cnt;
 	new_mode |= (EMAC_MDIO_MODE_CLAUSE_45);
 
-	PMD_DRV_LOG(DEBUG, "Changing emac_mode from 0x%x to 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "Changing emac_mode from 0x%x to 0x%x",
 		    cur_mode, new_mode);
 	REG_WR(sc, emac_base + EMAC_REG_EMAC_MDIO_MODE, new_mode);
 	DELAY(40);
@@ -1264,9 +1265,9 @@ static void elink_emac_init(struct elink_params *params)
 	timeout = 200;
 	do {
 		val = REG_RD(sc, emac_base + EMAC_REG_EMAC_MODE);
-		PMD_DRV_LOG(DEBUG, "EMAC reset reg is %u", val);
+		PMD_DRV_LOG(DEBUG, sc, "EMAC reset reg is %u", val);
 		if (!timeout) {
-			PMD_DRV_LOG(DEBUG, "EMAC timeout!");
+			PMD_DRV_LOG(DEBUG, sc, "EMAC timeout!");
 			return;
 		}
 		timeout--;
@@ -1329,7 +1330,7 @@ static void elink_umac_enable(struct elink_params *params,
 	REG_WR(sc, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET,
 	       (MISC_REGISTERS_RESET_REG_2_UMAC0 << params->port));
 
-	PMD_DRV_LOG(DEBUG, "enabling UMAC");
+	PMD_DRV_LOG(DEBUG, sc, "enabling UMAC");
 
 	/* This register opens the gate for the UMAC despite its name */
 	REG_WR(sc, NIG_REG_EGRESS_EMAC0_PORT + params->port * 4, 1);
@@ -1352,7 +1353,7 @@ static void elink_umac_enable(struct elink_params *params,
 		val |= (3 << 2);
 		break;
 	default:
-		PMD_DRV_LOG(DEBUG, "Invalid speed for UMAC %d",
+		PMD_DRV_LOG(DEBUG, sc, "Invalid speed for UMAC %d",
 			    vars->line_speed);
 		break;
 	}
@@ -1370,7 +1371,7 @@ static void elink_umac_enable(struct elink_params *params,
 
 	/* Configure UMAC for EEE */
 	if (vars->eee_status & SHMEM_EEE_ADV_STATUS_MASK) {
-		PMD_DRV_LOG(DEBUG, "configured UMAC for EEE");
+		PMD_DRV_LOG(DEBUG, sc, "configured UMAC for EEE");
 		REG_WR(sc, umac_base + UMAC_REG_UMAC_EEE_CTRL,
 		       UMAC_UMAC_EEE_CTRL_REG_EEE_EN);
 		REG_WR(sc, umac_base + UMAC_REG_EEE_WAKE_TIMER, 0x11);
@@ -1428,7 +1429,7 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
 	    is_port4mode &&
 	    (REG_RD(sc, MISC_REG_RESET_REG_2) &
 	     MISC_REGISTERS_RESET_REG_2_XMAC)) {
-		PMD_DRV_LOG(DEBUG, "XMAC already out of reset in 4-port mode");
+		PMD_DRV_LOG(DEBUG, sc, "XMAC already out of reset in 4-port mode");
 		return;
 	}
 
@@ -1440,7 +1441,7 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
 	REG_WR(sc, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET,
 	       MISC_REGISTERS_RESET_REG_2_XMAC);
 	if (is_port4mode) {
-		PMD_DRV_LOG(DEBUG, "Init XMAC to 2 ports x 10G per path");
+		PMD_DRV_LOG(DEBUG, sc, "Init XMAC to 2 ports x 10G per path");
 
 		/* Set the number of ports on the system side to up to 2 */
 		REG_WR(sc, MISC_REG_XMAC_CORE_PORT_MODE, 1);
@@ -1451,12 +1452,12 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
 		/* Set the number of ports on the system side to 1 */
 		REG_WR(sc, MISC_REG_XMAC_CORE_PORT_MODE, 0);
 		if (max_speed == ELINK_SPEED_10000) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Init XMAC to 10G x 1 port per path");
 			/* Set the number of ports on the Warp Core to 10G */
 			REG_WR(sc, MISC_REG_XMAC_PHY_PORT_MODE, 3);
 		} else {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Init XMAC to 20G x 2 ports per path");
 			/* Set the number of ports on the Warp Core to 20G */
 			REG_WR(sc, MISC_REG_XMAC_PHY_PORT_MODE, 1);
@@ -1489,7 +1490,7 @@ static void elink_set_xmac_rxtx(struct elink_params *params, uint8_t en)
 		       (pfc_ctrl & ~(1 << 1)));
 		REG_WR(sc, xmac_base + XMAC_REG_PFC_CTRL_HI,
 		       (pfc_ctrl | (1 << 1)));
-		PMD_DRV_LOG(DEBUG, "Disable XMAC on port %x", port);
+		PMD_DRV_LOG(DEBUG, sc, "Disable XMAC on port %x", port);
 		val = REG_RD(sc, xmac_base + XMAC_REG_CTRL);
 		if (en)
 			val |= (XMAC_CTRL_REG_TX_EN | XMAC_CTRL_REG_RX_EN);
@@ -1504,7 +1505,7 @@ static elink_status_t elink_xmac_enable(struct elink_params *params,
 {
 	uint32_t val, xmac_base;
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "enabling XMAC");
+	PMD_DRV_LOG(DEBUG, sc, "enabling XMAC");
 
 	xmac_base = (params->port) ? GRCBASE_XMAC1 : GRCBASE_XMAC0;
 
@@ -1541,7 +1542,7 @@ static elink_status_t elink_xmac_enable(struct elink_params *params,
 	elink_update_pfc_xmac(params, vars);
 
 	if (vars->eee_status & SHMEM_EEE_ADV_STATUS_MASK) {
-		PMD_DRV_LOG(DEBUG, "Setting XMAC for EEE");
+		PMD_DRV_LOG(DEBUG, sc, "Setting XMAC for EEE");
 		REG_WR(sc, xmac_base + XMAC_REG_EEE_TIMERS_HI, 0x1380008);
 		REG_WR(sc, xmac_base + XMAC_REG_EEE_CTRL, 0x1);
 	} else {
@@ -1577,7 +1578,7 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
 	uint32_t emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0;
 	uint32_t val;
 
-	PMD_DRV_LOG(DEBUG, "enabling EMAC");
+	PMD_DRV_LOG(DEBUG, sc, "enabling EMAC");
 
 	/* Disable BMAC */
 	REG_WR(sc, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR,
@@ -1591,14 +1592,14 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
 				      PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK) >>
 				     PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT);
 
-		PMD_DRV_LOG(DEBUG, "XGXS");
+		PMD_DRV_LOG(DEBUG, sc, "XGXS");
 		/* select the master lanes (out of 0-3) */
 		REG_WR(sc, NIG_REG_XGXS_LANE_SEL_P0 + port * 4, ser_lane);
 		/* select XGXS */
 		REG_WR(sc, NIG_REG_XGXS_SERDES0_MODE_SEL + port * 4, 1);
 
 	} else {		/* SerDes */
-		PMD_DRV_LOG(DEBUG, "SerDes");
+		PMD_DRV_LOG(DEBUG, sc, "SerDes");
 		/* select SerDes */
 		REG_WR(sc, NIG_REG_XGXS_SERDES0_MODE_SEL + port * 4, 0);
 	}
@@ -1644,7 +1645,7 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
 	 */
 	elink_cb_reg_write(sc, emac_base + EMAC_REG_RX_PFC_MODE, 0);
 	if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) {
-		PMD_DRV_LOG(DEBUG, "PFC is enabled");
+		PMD_DRV_LOG(DEBUG, sc, "PFC is enabled");
 		/* Enable PFC again */
 		elink_cb_reg_write(sc, emac_base + EMAC_REG_RX_PFC_MODE,
 				   EMAC_REG_RX_PFC_MODE_RX_EN |
@@ -1764,7 +1765,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
 	REG_WR_DMAE(sc, bmac_addr + BIGMAC2_REGISTER_TX_CONTROL, wb_data, 2);
 
 	if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) {
-		PMD_DRV_LOG(DEBUG, "PFC is enabled");
+		PMD_DRV_LOG(DEBUG, sc, "PFC is enabled");
 		/* Enable PFC RX & TX & STATS and set 8 COS  */
 		wb_data[0] = 0x0;
 		wb_data[0] |= (1 << 0);	/* RX */
@@ -1778,7 +1779,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
 		/* Clear the force Xon */
 		wb_data[0] &= ~(1 << 2);
 	} else {
-		PMD_DRV_LOG(DEBUG, "PFC is disabled");
+		PMD_DRV_LOG(DEBUG, sc, "PFC is disabled");
 		/* Disable PFC RX & TX & STATS and set 8 COS */
 		wb_data[0] = 0x8;
 		wb_data[1] = 0;
@@ -1804,7 +1805,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
 	val = 0x3;		/* Enable RX and TX */
 	if (is_lb) {
 		val |= 0x4;	/* Local loopback */
-		PMD_DRV_LOG(DEBUG, "enable bmac loopback");
+		PMD_DRV_LOG(DEBUG, sc, "enable bmac loopback");
 	}
 	/* When PFC enabled, Pass pause frames towards the NIG. */
 	if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED)
@@ -1898,7 +1899,7 @@ static void elink_update_pfc_nig(struct elink_params *params,
 
 	int set_pfc = params->feature_config_flags &
 	    ELINK_FEATURE_CONFIG_PFC_ENABLED;
-	PMD_DRV_LOG(DEBUG, "updating pfc nig parameters");
+	PMD_DRV_LOG(DEBUG, sc, "updating pfc nig parameters");
 
 	/* When NIG_LLH0_XCM_MASK_REG_LLHX_XCM_MASK_BCN bit is set
 	 * MAC control frames (that are not pause packets)
@@ -2010,7 +2011,7 @@ elink_status_t elink_update_pfc(struct elink_params *params,
 	if (!vars->link_up)
 		return elink_status;
 
-	PMD_DRV_LOG(DEBUG, "About to update PFC in BMAC");
+	PMD_DRV_LOG(DEBUG, sc, "About to update PFC in BMAC");
 
 	if (CHIP_IS_E3(sc)) {
 		if (vars->mac_type == ELINK_MAC_TYPE_XMAC)
@@ -2020,7 +2021,7 @@ elink_status_t elink_update_pfc(struct elink_params *params,
 		if ((val &
 		     (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << params->port))
 		    == 0) {
-			PMD_DRV_LOG(DEBUG, "About to update PFC in EMAC");
+			PMD_DRV_LOG(DEBUG, sc, "About to update PFC in EMAC");
 			elink_emac_enable(params, vars, 0);
 			return elink_status;
 		}
@@ -2049,7 +2050,7 @@ static elink_status_t elink_bmac1_enable(struct elink_params *params,
 	uint32_t wb_data[2];
 	uint32_t val;
 
-	PMD_DRV_LOG(DEBUG, "Enabling BigMAC1");
+	PMD_DRV_LOG(DEBUG, sc, "Enabling BigMAC1");
 
 	/* XGXS control */
 	wb_data[0] = 0x3c;
@@ -2068,7 +2069,7 @@ static elink_status_t elink_bmac1_enable(struct elink_params *params,
 	val = 0x3;
 	if (is_lb) {
 		val |= 0x4;
-		PMD_DRV_LOG(DEBUG, "enable bmac loopback");
+		PMD_DRV_LOG(DEBUG, sc, "enable bmac loopback");
 	}
 	wb_data[0] = val;
 	wb_data[1] = 0;
@@ -2109,7 +2110,7 @@ static elink_status_t elink_bmac2_enable(struct elink_params *params,
 	    NIG_REG_INGRESS_BMAC0_MEM;
 	uint32_t wb_data[2];
 
-	PMD_DRV_LOG(DEBUG, "Enabling BigMAC2");
+	PMD_DRV_LOG(DEBUG, sc, "Enabling BigMAC2");
 
 	wb_data[0] = 0;
 	wb_data[1] = 0;
@@ -2247,7 +2248,7 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
 	/* Wait for init credit */
 	init_crd = REG_RD(sc, PBF_REG_P0_INIT_CRD + port * 4);
 	crd = REG_RD(sc, PBF_REG_P0_CREDIT + port * 8);
-	PMD_DRV_LOG(DEBUG, "init_crd 0x%x  crd 0x%x", init_crd, crd);
+	PMD_DRV_LOG(DEBUG, sc, "init_crd 0x%x  crd 0x%x", init_crd, crd);
 
 	while ((init_crd != crd) && count) {
 		DELAY(1000 * 5);
@@ -2256,7 +2257,7 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
 	}
 	crd = REG_RD(sc, PBF_REG_P0_CREDIT + port * 8);
 	if (init_crd != crd) {
-		PMD_DRV_LOG(DEBUG, "BUG! init_crd 0x%x != crd 0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "BUG! init_crd 0x%x != crd 0x%x",
 			    init_crd, crd);
 		return ELINK_STATUS_ERROR;
 	}
@@ -2283,13 +2284,13 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
 			init_crd = thresh + 553 - 22;
 			break;
 		default:
-			PMD_DRV_LOG(DEBUG, "Invalid line_speed 0x%x",
+			PMD_DRV_LOG(DEBUG, sc, "Invalid line_speed 0x%x",
 				    line_speed);
 			return ELINK_STATUS_ERROR;
 		}
 	}
 	REG_WR(sc, PBF_REG_P0_INIT_CRD + port * 4, init_crd);
-	PMD_DRV_LOG(DEBUG, "PBF updated to speed %d credit %d",
+	PMD_DRV_LOG(DEBUG, sc, "PBF updated to speed %d credit %d",
 		    line_speed, init_crd);
 
 	/* Probe the credit changes */
@@ -2379,7 +2380,7 @@ static elink_status_t elink_cl22_write(struct bnx2x_softc *sc,
 		}
 	}
 	if (tmp & EMAC_MDIO_COMM_START_BUSY) {
-		PMD_DRV_LOG(DEBUG, "write phy register failed");
+		PMD_DRV_LOG(DEBUG, sc, "write phy register failed");
 		rc = ELINK_STATUS_TIMEOUT;
 	}
 	REG_WR(sc, phy->mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, mode);
@@ -2415,7 +2416,7 @@ static elink_status_t elink_cl22_read(struct bnx2x_softc *sc,
 		}
 	}
 	if (val & EMAC_MDIO_COMM_START_BUSY) {
-		PMD_DRV_LOG(DEBUG, "read phy register failed");
+		PMD_DRV_LOG(DEBUG, sc, "read phy register failed");
 
 		*ret_val = 0;
 		rc = ELINK_STATUS_TIMEOUT;
@@ -2456,7 +2457,7 @@ static elink_status_t elink_cl45_read(struct bnx2x_softc *sc,
 		}
 	}
 	if (val & EMAC_MDIO_COMM_START_BUSY) {
-		PMD_DRV_LOG(DEBUG, "read phy register failed");
+		PMD_DRV_LOG(DEBUG, sc, "read phy register failed");
 		elink_cb_event_log(sc, ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT);	// "MDC/MDIO access timeout"
 
 		*ret_val = 0;
@@ -2480,7 +2481,7 @@ static elink_status_t elink_cl45_read(struct bnx2x_softc *sc,
 			}
 		}
 		if (val & EMAC_MDIO_COMM_START_BUSY) {
-			PMD_DRV_LOG(DEBUG, "read phy register failed");
+			PMD_DRV_LOG(DEBUG, sc, "read phy register failed");
 			elink_cb_event_log(sc, ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT);	// "MDC/MDIO access timeout"
 
 			*ret_val = 0;
@@ -2532,7 +2533,7 @@ static elink_status_t elink_cl45_write(struct bnx2x_softc *sc,
 		}
 	}
 	if (tmp & EMAC_MDIO_COMM_START_BUSY) {
-		PMD_DRV_LOG(DEBUG, "write phy register failed");
+		PMD_DRV_LOG(DEBUG, sc, "write phy register failed");
 		elink_cb_event_log(sc, ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT);	// "MDC/MDIO access timeout"
 
 		rc = ELINK_STATUS_TIMEOUT;
@@ -2554,7 +2555,7 @@ static elink_status_t elink_cl45_write(struct bnx2x_softc *sc,
 			}
 		}
 		if (tmp & EMAC_MDIO_COMM_START_BUSY) {
-			PMD_DRV_LOG(DEBUG, "write phy register failed");
+			PMD_DRV_LOG(DEBUG, sc, "write phy register failed");
 			elink_cb_event_log(sc, ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT);	// "MDC/MDIO access timeout"
 
 			rc = ELINK_STATUS_TIMEOUT;
@@ -2677,7 +2678,7 @@ static elink_status_t elink_eee_set_timers(struct elink_params *params,
 	} else if ((params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI) &&
 		   (params->eee_mode & ELINK_EEE_MODE_OVERRIDE_NVRAM) &&
 		   (params->eee_mode & ELINK_EEE_MODE_OUTPUT_TIME)) {
-		PMD_DRV_LOG(DEBUG, "Error: Tx LPI is enabled with timer 0");
+		PMD_DRV_LOG(DEBUG, sc, "Error: Tx LPI is enabled with timer 0");
 		return ELINK_STATUS_ERROR;
 	}
 
@@ -2744,11 +2745,11 @@ static elink_status_t elink_eee_advertise(struct elink_phy *phy,
 	REG_WR(sc, MISC_REG_CPMU_LP_MASK_EXT_P0 + (params->port << 2), 0xfc20);
 
 	if (modes & SHMEM_EEE_10G_ADV) {
-		PMD_DRV_LOG(DEBUG, "Advertise 10GBase-T EEE");
+		PMD_DRV_LOG(DEBUG, sc, "Advertise 10GBase-T EEE");
 		val |= 0x8;
 	}
 	if (modes & SHMEM_EEE_1G_ADV) {
-		PMD_DRV_LOG(DEBUG, "Advertise 1GBase-T EEE");
+		PMD_DRV_LOG(DEBUG, sc, "Advertise 1GBase-T EEE");
 		val |= 0x4;
 	}
 
@@ -2788,7 +2789,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
 		if (adv & 0x2) {
 			if (vars->line_speed == ELINK_SPEED_100)
 				neg = 1;
-			PMD_DRV_LOG(DEBUG, "EEE negotiated - 100M");
+			PMD_DRV_LOG(DEBUG, sc, "EEE negotiated - 100M");
 		}
 	}
 	if (lp & 0x14) {
@@ -2796,7 +2797,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
 		if (adv & 0x14) {
 			if (vars->line_speed == ELINK_SPEED_1000)
 				neg = 1;
-			PMD_DRV_LOG(DEBUG, "EEE negotiated - 1G");
+			PMD_DRV_LOG(DEBUG, sc, "EEE negotiated - 1G");
 		}
 	}
 	if (lp & 0x68) {
@@ -2804,7 +2805,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
 		if (adv & 0x68) {
 			if (vars->line_speed == ELINK_SPEED_10000)
 				neg = 1;
-			PMD_DRV_LOG(DEBUG, "EEE negotiated - 10G");
+			PMD_DRV_LOG(DEBUG, sc, "EEE negotiated - 10G");
 		}
 	}
 
@@ -2812,7 +2813,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
 	vars->eee_status |= (lp_adv << SHMEM_EEE_LP_ADV_STATUS_SHIFT);
 
 	if (neg) {
-		PMD_DRV_LOG(DEBUG, "EEE is active");
+		PMD_DRV_LOG(DEBUG, sc, "EEE is active");
 		vars->eee_status |= SHMEM_EEE_ACTIVE_BIT;
 	}
 }
@@ -2842,7 +2843,7 @@ static void elink_bsc_module_sel(struct elink_params *params)
 				   e3_cmn_pin_cfg));
 	i2c_val[I2C_BSC0] = (sfp_ctrl & PORT_HW_CFG_E3_I2C_MUX0_MASK) > 0;
 	i2c_val[I2C_BSC1] = (sfp_ctrl & PORT_HW_CFG_E3_I2C_MUX1_MASK) > 0;
-	PMD_DRV_LOG(DEBUG, "Setting BSC switch");
+	PMD_DRV_LOG(DEBUG, sc, "Setting BSC switch");
 	for (idx = 0; idx < I2C_SWITCH_WIDTH; idx++)
 		elink_set_cfg_pin(sc, i2c_pins[idx], i2c_val[idx]);
 }
@@ -2858,7 +2859,7 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
 	elink_status_t rc = ELINK_STATUS_OK;
 
 	if (xfer_cnt > 16) {
-		PMD_DRV_LOG(DEBUG, "invalid xfer_cnt %d. Max is 16 bytes",
+		PMD_DRV_LOG(DEBUG, sc, "invalid xfer_cnt %d. Max is 16 bytes",
 			    xfer_cnt);
 		return ELINK_STATUS_ERROR;
 	}
@@ -2890,7 +2891,7 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
 		DELAY(10);
 		val = REG_RD(sc, MCP_REG_MCPR_IMC_COMMAND);
 		if (i++ > 1000) {
-			PMD_DRV_LOG(DEBUG, "wr 0 byte timed out after %d try",
+			PMD_DRV_LOG(DEBUG, sc, "wr 0 byte timed out after %d try",
 				    i);
 			rc = ELINK_STATUS_TIMEOUT;
 			break;
@@ -2914,7 +2915,8 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
 		DELAY(10);
 		val = REG_RD(sc, MCP_REG_MCPR_IMC_COMMAND);
 		if (i++ > 1000) {
-			PMD_DRV_LOG(DEBUG, "rd op timed out after %d try", i);
+			PMD_DRV_LOG(DEBUG, sc,
+				    "rd op timed out after %d try", i);
 			rc = ELINK_STATUS_TIMEOUT;
 			break;
 		}
@@ -3059,7 +3061,7 @@ static void elink_serdes_deassert(struct bnx2x_softc *sc, uint8_t port)
 {
 	uint32_t val;
 
-	PMD_DRV_LOG(DEBUG, "elink_serdes_deassert");
+	PMD_DRV_LOG(DEBUG, sc, "elink_serdes_deassert");
 
 	val = ELINK_SERDES_RESET_BITS << (port * 16);
 
@@ -3094,7 +3096,7 @@ static void elink_xgxs_deassert(struct elink_params *params)
 	struct bnx2x_softc *sc = params->sc;
 	uint8_t port;
 	uint32_t val;
-	PMD_DRV_LOG(DEBUG, "elink_xgxs_deassert");
+	PMD_DRV_LOG(DEBUG, sc, "elink_xgxs_deassert");
 	port = params->port;
 
 	val = ELINK_XGXS_RESET_BITS << (port * 16);
@@ -3145,7 +3147,7 @@ static void elink_calc_ieee_aneg_adv(struct elink_phy *phy,
 		*ieee_fc |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE;
 		break;
 	}
-	PMD_DRV_LOG(DEBUG, "ieee_fc = 0x%x", *ieee_fc);
+	PMD_DRV_LOG(DEBUG, params->sc, "ieee_fc = 0x%x", *ieee_fc);
 }
 
 static void set_phy_vars(struct elink_params *params, struct elink_vars *vars)
@@ -3179,7 +3181,7 @@ static void set_phy_vars(struct elink_params *params, struct elink_vars *vars)
 		    ELINK_SPEED_AUTO_NEG)
 			vars->link_status |= LINK_STATUS_AUTO_NEGOTIATE_ENABLED;
 
-		PMD_DRV_LOG(DEBUG, "req_flow_ctrl %x, req_line_speed %x,"
+		PMD_DRV_LOG(DEBUG, params->sc, "req_flow_ctrl %x, req_line_speed %x,"
 			    " speed_cap_mask %x",
 			    params->phy[actual_phy_idx].req_flow_ctrl,
 			    params->phy[actual_phy_idx].req_line_speed,
@@ -3210,7 +3212,7 @@ static void elink_ext_phy_set_pause(struct elink_params *params,
 	    MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) {
 		val |= MDIO_AN_REG_ADV_PAUSE_PAUSE;
 	}
-	PMD_DRV_LOG(DEBUG, "Ext phy AN advertize 0x%x", val);
+	PMD_DRV_LOG(DEBUG, sc, "Ext phy AN advertize 0x%x", val);
 	elink_cl45_write(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_ADV_PAUSE, val);
 }
 
@@ -3289,7 +3291,7 @@ static void elink_ext_phy_update_adv_fc(struct elink_phy *phy,
 	}
 	pause_result = (ld_pause & MDIO_AN_REG_ADV_PAUSE_MASK) >> 8;
 	pause_result |= (lp_pause & MDIO_AN_REG_ADV_PAUSE_MASK) >> 10;
-	PMD_DRV_LOG(DEBUG, "Ext PHY pause result 0x%x", pause_result);
+	PMD_DRV_LOG(DEBUG, sc, "Ext PHY pause result 0x%x", pause_result);
 	elink_pause_resolve(vars, pause_result);
 
 }
@@ -3358,7 +3360,7 @@ static void elink_warpcore_enable_AN_KR2(struct elink_phy *phy,
 		{MDIO_WC_DEVAD, MDIO_WC_REG_ETA_CL73_LD_BAM_CODE, 0x0157},
 		{MDIO_WC_DEVAD, MDIO_WC_REG_ETA_CL73_LD_UD_CODE, 0x0620}
 	};
-	PMD_DRV_LOG(DEBUG, "Enabling 20G-KR2");
+	PMD_DRV_LOG(DEBUG, sc, "Enabling 20G-KR2");
 
 	elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD,
 				 MDIO_WC_REG_CL49_USERB0_CTRL, (3 << 6));
@@ -3395,7 +3397,7 @@ static void elink_disable_kr2(struct elink_params *params,
 		{MDIO_WC_DEVAD, MDIO_WC_REG_ETA_CL73_LD_BAM_CODE, 0x0002},
 		{MDIO_WC_DEVAD, MDIO_WC_REG_ETA_CL73_LD_UD_CODE, 0x0000}
 	};
-	PMD_DRV_LOG(DEBUG, "Disabling 20G-KR2");
+	PMD_DRV_LOG(DEBUG, sc, "Disabling 20G-KR2");
 
 	for (i = 0; i < ARRAY_SIZE(reg_set); i++)
 		elink_cl45_write(sc, phy, reg_set[i].devad, reg_set[i].reg,
@@ -3411,7 +3413,7 @@ static void elink_warpcore_set_lpi_passthrough(struct elink_phy *phy,
 {
 	struct bnx2x_softc *sc = params->sc;
 
-	PMD_DRV_LOG(DEBUG, "Configure WC for LPI pass through");
+	PMD_DRV_LOG(DEBUG, sc, "Configure WC for LPI pass through");
 	elink_cl45_write(sc, phy, MDIO_WC_DEVAD,
 			 MDIO_WC_REG_EEE_COMBO_CONTROL0, 0x7c);
 	elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD,
@@ -3449,7 +3451,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
 		{MDIO_PMA_DEVAD, MDIO_WC_REG_PMD_KR_CONTROL, 0x2},
 		{MDIO_WC_DEVAD, MDIO_WC_REG_CL72_USERB0_CL72_TX_FIR_TAP, 0},
 	};
-	PMD_DRV_LOG(DEBUG, "Enable Auto Negotiation for KR");
+	PMD_DRV_LOG(DEBUG, sc, "Enable Auto Negotiation for KR");
 	/* Set to default registers that may be overriden by 10G force */
 	for (i = 0; i < ARRAY_SIZE(reg_set); i++)
 		elink_cl45_write(sc, phy, reg_set[i].devad, reg_set[i].reg,
@@ -3471,7 +3473,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
 
 		/* Enable CL37 1G Parallel Detect */
 		elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD, addr, 0x1);
-		PMD_DRV_LOG(DEBUG, "Advertize 1G");
+		PMD_DRV_LOG(DEBUG, sc, "Advertize 1G");
 	}
 	if (((vars->line_speed == ELINK_SPEED_AUTO_NEG) &&
 	     (phy->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) ||
@@ -3485,7 +3487,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
 		elink_cl45_write(sc, phy, MDIO_AN_DEVAD,
 				 MDIO_WC_REG_PAR_DET_10G_CTRL, 1);
 		elink_set_aer_mmd(params, phy);
-		PMD_DRV_LOG(DEBUG, "Advertize 10G");
+		PMD_DRV_LOG(DEBUG, sc, "Advertize 10G");
 	}
 
 	/* Set Transmit PMD settings */
@@ -3522,7 +3524,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
 		elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD,
 					 MDIO_WC_REG_DIGITAL6_MP5_NEXTPAGECTRL,
 					 1);
-		PMD_DRV_LOG(DEBUG, "Enable CL37 BAM on KR");
+		PMD_DRV_LOG(DEBUG, sc, "Enable CL37 BAM on KR");
 	}
 
 	/* Advertise pause */
@@ -3859,7 +3861,7 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
 		elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD,
 					 MDIO_WC_REG_COMBO_IEEE0_MIICTRL,
 					 0x1000);
-		PMD_DRV_LOG(DEBUG, "set SGMII AUTONEG");
+		PMD_DRV_LOG(DEBUG, sc, "set SGMII AUTONEG");
 	} else {
 		elink_cl45_read(sc, phy, MDIO_WC_DEVAD,
 				MDIO_WC_REG_COMBO_IEEE0_MIICTRL, &val16);
@@ -3874,7 +3876,7 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
 			val16 |= 0x0040;
 			break;
 		default:
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Speed not supported: 0x%x",
 				    phy->req_line_speed);
 			return;
@@ -3886,11 +3888,11 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
 		elink_cl45_write(sc, phy, MDIO_WC_DEVAD,
 				 MDIO_WC_REG_COMBO_IEEE0_MIICTRL, val16);
 
-		PMD_DRV_LOG(DEBUG, "set SGMII force speed %d",
+		PMD_DRV_LOG(DEBUG, sc, "set SGMII force speed %d",
 			    phy->req_line_speed);
 		elink_cl45_read(sc, phy, MDIO_WC_DEVAD,
 				MDIO_WC_REG_COMBO_IEEE0_MIICTRL, &val16);
-		PMD_DRV_LOG(DEBUG, "  (readback) %x", val16);
+		PMD_DRV_LOG(DEBUG, sc, "  (readback) %x", val16);
 	}
 
 	/* SGMII Slave mode and disable signal detect */
@@ -4001,7 +4003,7 @@ static elink_status_t elink_get_mod_abs_int_cfg(struct bnx2x_softc *sc,
 		 */
 		if ((cfg_pin < PIN_CFG_GPIO0_P0) ||
 		    (cfg_pin > PIN_CFG_GPIO3_P1)) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "No cfg pin %x for module detect indication",
 				    cfg_pin);
 			return ELINK_STATUS_ERROR;
@@ -4093,7 +4095,7 @@ static void elink_warpcore_config_runtime(struct elink_phy *phy,
 						 0x1200);
 
 				vars->rx_tx_asic_rst--;
-				PMD_DRV_LOG(DEBUG, "0x%x retry left",
+				PMD_DRV_LOG(DEBUG, sc, "0x%x retry left",
 					    vars->rx_tx_asic_rst);
 			}
 			break;
@@ -4115,10 +4117,10 @@ static void elink_warpcore_config_sfi(struct elink_phy *phy,
 	if ((params->req_line_speed[ELINK_LINK_CONFIG_IDX(ELINK_INT_PHY)] ==
 	     ELINK_SPEED_10000) &&
 	    (phy->media_type != ELINK_ETH_PHY_SFP_1G_FIBER)) {
-		PMD_DRV_LOG(DEBUG, "Setting 10G SFI");
+		PMD_DRV_LOG(DEBUG, params->sc, "Setting 10G SFI");
 		elink_warpcore_set_10G_XFI(phy, params, 0);
 	} else {
-		PMD_DRV_LOG(DEBUG, "Setting 1G Fiber");
+		PMD_DRV_LOG(DEBUG, params->sc, "Setting 1G Fiber");
 		elink_warpcore_set_sgmii_speed(phy, params, 1, 0);
 	}
 }
@@ -4135,7 +4137,7 @@ static void elink_sfp_e3_set_transmitter(struct elink_params *params,
 				  dev_info.port_hw_config[port].e3_sfp_ctrl)) &
 	    PORT_HW_CFG_E3_TX_LASER_MASK;
 	/* Set the !tx_en since this pin is DISABLE_TX_LASER */
-	PMD_DRV_LOG(DEBUG, "Setting WC TX to %d", tx_en);
+	PMD_DRV_LOG(DEBUG, sc, "Setting WC TX to %d", tx_en);
 
 	/* For 20G, the expected pin to be used is 3 pins after the current */
 	elink_set_cfg_pin(sc, cfg_pin, tx_en ^ 1);
@@ -4156,7 +4158,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
 					 dev_info.port_hw_config[params->port].
 					 default_cfg)) &
 			 PORT_HW_CFG_NET_SERDES_IF_MASK);
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "Begin Warpcore init, link_speed %d, "
 		    "serdes_net_if = 0x%x", vars->line_speed, serdes_net_if);
 	elink_set_aer_mmd(params, phy);
@@ -4167,7 +4169,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
 	     ((phy->req_line_speed == ELINK_SPEED_100) ||
 	      (phy->req_line_speed == ELINK_SPEED_10)))) {
 		vars->phy_flags |= PHY_SGMII_FLAG;
-		PMD_DRV_LOG(DEBUG, "Setting SGMII mode");
+		PMD_DRV_LOG(DEBUG, sc, "Setting SGMII mode");
 		elink_warpcore_clear_regs(phy, params, lane);
 		elink_warpcore_set_sgmii_speed(phy, params, 0, 1);
 	} else {
@@ -4177,7 +4179,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
 			if (params->loopback_mode != ELINK_LOOPBACK_EXT)
 				elink_warpcore_enable_AN_KR(phy, params, vars);
 			else {
-				PMD_DRV_LOG(DEBUG, "Setting KR 10G-Force");
+				PMD_DRV_LOG(DEBUG, sc, "Setting KR 10G-Force");
 				elink_warpcore_set_10G_KR(phy, params);
 			}
 			break;
@@ -4185,14 +4187,14 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
 		case PORT_HW_CFG_NET_SERDES_IF_XFI:
 			elink_warpcore_clear_regs(phy, params, lane);
 			if (vars->line_speed == ELINK_SPEED_10000) {
-				PMD_DRV_LOG(DEBUG, "Setting 10G XFI");
+				PMD_DRV_LOG(DEBUG, sc, "Setting 10G XFI");
 				elink_warpcore_set_10G_XFI(phy, params, 1);
 			} else {
 				if (ELINK_SINGLE_MEDIA_DIRECT(params)) {
-					PMD_DRV_LOG(DEBUG, "1G Fiber");
+					PMD_DRV_LOG(DEBUG, sc, "1G Fiber");
 					fiber_mode = 1;
 				} else {
-					PMD_DRV_LOG(DEBUG, "10/100/1G SGMII");
+					PMD_DRV_LOG(DEBUG, sc, "10/100/1G SGMII");
 					fiber_mode = 0;
 				}
 				elink_warpcore_set_sgmii_speed(phy,
@@ -4221,10 +4223,10 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
 
 		case PORT_HW_CFG_NET_SERDES_IF_DXGXS:
 			if (vars->line_speed != ELINK_SPEED_20000) {
-				PMD_DRV_LOG(DEBUG, "Speed not supported yet");
+				PMD_DRV_LOG(DEBUG, sc, "Speed not supported yet");
 				return 0;
 			}
-			PMD_DRV_LOG(DEBUG, "Setting 20G DXGXS");
+			PMD_DRV_LOG(DEBUG, sc, "Setting 20G DXGXS");
 			elink_warpcore_set_20G_DXGXS(sc, phy, lane);
 			/* Issue Module detection */
 
@@ -4234,12 +4236,12 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
 			if (!params->loopback_mode) {
 				elink_warpcore_enable_AN_KR(phy, params, vars);
 			} else {
-				PMD_DRV_LOG(DEBUG, "Setting KR 20G-Force");
+				PMD_DRV_LOG(DEBUG, sc, "Setting KR 20G-Force");
 				elink_warpcore_set_20G_force_KR2(phy, params);
 			}
 			break;
 		default:
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Unsupported Serdes Net Interface 0x%x",
 				    serdes_net_if);
 			return 0;
@@ -4248,7 +4250,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
 
 	/* Take lane out of reset after configuration is finished */
 	elink_warpcore_reset_lane(sc, phy, 0);
-	PMD_DRV_LOG(DEBUG, "Exit config init");
+	PMD_DRV_LOG(DEBUG, sc, "Exit config init");
 
 	return 0;
 }
@@ -4313,7 +4315,7 @@ static void elink_set_warpcore_loopback(struct elink_phy *phy,
 	struct bnx2x_softc *sc = params->sc;
 	uint16_t val16;
 	uint32_t lane;
-	PMD_DRV_LOG(DEBUG, "Setting Warpcore loopback type %x, speed %d",
+	PMD_DRV_LOG(DEBUG, sc, "Setting Warpcore loopback type %x, speed %d",
 		    params->loopback_mode, phy->req_line_speed);
 
 	if (phy->req_line_speed < ELINK_SPEED_10000 ||
@@ -4358,7 +4360,7 @@ static void elink_sync_link(struct elink_params *params,
 		vars->phy_flags |= PHY_PHYSICAL_LINK_FLAG;
 	vars->link_up = (vars->link_status & LINK_STATUS_LINK_UP);
 	if (vars->link_up) {
-		PMD_DRV_LOG(DEBUG, "phy link up");
+		PMD_DRV_LOG(DEBUG, sc, "phy link up");
 
 		vars->phy_link_up = 1;
 		vars->duplex = DUPLEX_FULL;
@@ -4436,7 +4438,7 @@ static void elink_sync_link(struct elink_params *params,
 				vars->mac_type = ELINK_MAC_TYPE_EMAC;
 		}
 	} else {		/* Link down */
-		PMD_DRV_LOG(DEBUG, "phy link down");
+		PMD_DRV_LOG(DEBUG, sc, "phy link down");
 
 		vars->phy_link_up = 0;
 
@@ -4493,7 +4495,7 @@ void elink_link_status_update(struct elink_params *params,
 	params->phy[ELINK_EXT_PHY2].media_type =
 	    (media_types & PORT_HW_CFG_MEDIA_TYPE_PHY2_MASK) >>
 	    PORT_HW_CFG_MEDIA_TYPE_PHY2_SHIFT;
-	PMD_DRV_LOG(DEBUG, "media_types = 0x%x", media_types);
+	PMD_DRV_LOG(DEBUG, sc, "media_types = 0x%x", media_types);
 
 	/* Sync AEU offset */
 	sync_offset = params->shmem_base +
@@ -4514,9 +4516,9 @@ void elink_link_status_update(struct elink_params *params,
 		vars->link_attr_sync = SHMEM2_RD(sc,
 						 link_attr_sync[params->port]);
 
-	PMD_DRV_LOG(DEBUG, "link_status 0x%x  phy_link_up %x int_mask 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "link_status 0x%x  phy_link_up %x int_mask 0x%x",
 		    vars->link_status, vars->phy_link_up, vars->aeu_int_mask);
-	PMD_DRV_LOG(DEBUG, "line_speed %x  duplex %x  flow_ctrl 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "line_speed %x  duplex %x  flow_ctrl 0x%x",
 		    vars->line_speed, vars->duplex, vars->flow_ctrl);
 }
 
@@ -4577,7 +4579,7 @@ static elink_status_t elink_reset_unicore(struct elink_params *params,
 	elink_cb_event_log(sc, ELINK_LOG_ID_PHY_UNINITIALIZED, params->port);	// "Warning: PHY was not initialized,"
 	// " Port %d",
 
-	PMD_DRV_LOG(DEBUG, "BUG! XGXS is still in reset!");
+	PMD_DRV_LOG(DEBUG, sc, "BUG! XGXS is still in reset!");
 	return ELINK_STATUS_ERROR;
 
 }
@@ -4636,7 +4638,7 @@ static void elink_set_parallel_detection(struct elink_phy *phy,
 		control2 |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN;
 	else
 		control2 &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN;
-	PMD_DRV_LOG(DEBUG, "phy->speed_cap_mask = 0x%x, control2 = 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "phy->speed_cap_mask = 0x%x, control2 = 0x%x",
 		    phy->speed_cap_mask, control2);
 	CL22_WR_OVER_CL45(sc, phy,
 			  MDIO_REG_BANK_SERDES_DIGITAL,
@@ -4644,7 +4646,7 @@ static void elink_set_parallel_detection(struct elink_phy *phy,
 
 	if ((phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) &&
 	    (phy->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) {
-		PMD_DRV_LOG(DEBUG, "XGXS");
+		PMD_DRV_LOG(DEBUG, sc, "XGXS");
 
 		CL22_WR_OVER_CL45(sc, phy,
 				  MDIO_REG_BANK_10G_PARALLEL_DETECT,
@@ -4797,7 +4799,7 @@ static void elink_program_serdes(struct elink_phy *phy,
 			  MDIO_REG_BANK_SERDES_DIGITAL,
 			  MDIO_SERDES_DIGITAL_MISC1, &reg_val);
 	/* Clearing the speed value before setting the right speed */
-	PMD_DRV_LOG(DEBUG, "MDIO_REG_BANK_SERDES_DIGITAL = 0x%x", reg_val);
+	PMD_DRV_LOG(DEBUG, sc, "MDIO_REG_BANK_SERDES_DIGITAL = 0x%x", reg_val);
 
 	reg_val &= ~(MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_MASK |
 		     MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL);
@@ -4865,7 +4867,7 @@ static void elink_restart_autoneg(struct elink_phy *phy,
 	struct bnx2x_softc *sc = params->sc;
 	uint16_t mii_control;
 
-	PMD_DRV_LOG(DEBUG, "elink_restart_autoneg");
+	PMD_DRV_LOG(DEBUG, sc, "elink_restart_autoneg");
 	/* Enable and restart BAM/CL37 aneg */
 
 	if (enable_cl73) {
@@ -4885,7 +4887,7 @@ static void elink_restart_autoneg(struct elink_phy *phy,
 		CL22_RD_OVER_CL45(sc, phy,
 				  MDIO_REG_BANK_COMBO_IEEE0,
 				  MDIO_COMBO_IEEE0_MII_CONTROL, &mii_control);
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "elink_restart_autoneg mii_control before = 0x%x",
 			    mii_control);
 		CL22_WR_OVER_CL45(sc, phy,
@@ -4944,7 +4946,7 @@ static void elink_initialize_sgmii_process(struct elink_phy *phy,
 			break;
 		default:
 			/* Invalid speed for SGMII */
-			PMD_DRV_LOG(DEBUG, "Invalid line_speed 0x%x",
+			PMD_DRV_LOG(DEBUG, sc, "Invalid line_speed 0x%x",
 				    vars->line_speed);
 			break;
 		}
@@ -4979,7 +4981,7 @@ static elink_status_t elink_direct_parallel_detect_used(struct elink_phy *phy,
 			  MDIO_REG_BANK_SERDES_DIGITAL,
 			  MDIO_SERDES_DIGITAL_A_1000X_STATUS2, &status2_1000x);
 	if (status2_1000x & MDIO_SERDES_DIGITAL_A_1000X_STATUS2_AN_DISABLED) {
-		PMD_DRV_LOG(DEBUG, "1G parallel detect link on port %d",
+		PMD_DRV_LOG(DEBUG, sc, "1G parallel detect link on port %d",
 			    params->port);
 		return ELINK_STATUS_ERROR;
 	}
@@ -4989,7 +4991,7 @@ static elink_status_t elink_direct_parallel_detect_used(struct elink_phy *phy,
 			  MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_STATUS, &pd_10g);
 
 	if (pd_10g & MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_STATUS_PD_LINK) {
-		PMD_DRV_LOG(DEBUG, "10G parallel detect link on port %d",
+		PMD_DRV_LOG(DEBUG, sc, "10G parallel detect link on port %d",
 			    params->port);
 		return ELINK_STATUS_ERROR;
 	}
@@ -5020,7 +5022,7 @@ static void elink_update_adv_fc(struct elink_phy *phy,
 				MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_MASK) >> 8;
 		pause_result |= (lp_pause &
 				 MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE_MASK) >> 10;
-		PMD_DRV_LOG(DEBUG, "pause_result CL73 0x%x", pause_result);
+		PMD_DRV_LOG(DEBUG, sc, "pause_result CL73 0x%x", pause_result);
 	} else {
 		CL22_RD_OVER_CL45(sc, phy,
 				  MDIO_REG_BANK_COMBO_IEEE0,
@@ -5033,7 +5035,7 @@ static void elink_update_adv_fc(struct elink_phy *phy,
 				MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK) >> 5;
 		pause_result |= (lp_pause &
 				 MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK) >> 7;
-		PMD_DRV_LOG(DEBUG, "pause_result CL37 0x%x", pause_result);
+		PMD_DRV_LOG(DEBUG, sc, "pause_result CL37 0x%x", pause_result);
 	}
 	elink_pause_resolve(vars, pause_result);
 
@@ -5062,7 +5064,7 @@ static void elink_flow_ctrl_resolve(struct elink_phy *phy,
 		}
 		elink_update_adv_fc(phy, params, vars, gp_status);
 	}
-	PMD_DRV_LOG(DEBUG, "flow_ctrl 0x%x", vars->flow_ctrl);
+	PMD_DRV_LOG(DEBUG, params->sc, "flow_ctrl 0x%x", vars->flow_ctrl);
 }
 
 static void elink_check_fallback_to_cl37(struct elink_phy *phy,
@@ -5070,13 +5072,13 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
 {
 	struct bnx2x_softc *sc = params->sc;
 	uint16_t rx_status, ustat_val, cl37_fsm_received;
-	PMD_DRV_LOG(DEBUG, "elink_check_fallback_to_cl37");
+	PMD_DRV_LOG(DEBUG, sc, "elink_check_fallback_to_cl37");
 	/* Step 1: Make sure signal is detected */
 	CL22_RD_OVER_CL45(sc, phy,
 			  MDIO_REG_BANK_RX0, MDIO_RX0_RX_STATUS, &rx_status);
 	if ((rx_status & MDIO_RX0_RX_STATUS_SIGDET) !=
 	    (MDIO_RX0_RX_STATUS_SIGDET)) {
-		PMD_DRV_LOG(DEBUG, "Signal is not detected. Restoring CL73."
+		PMD_DRV_LOG(DEBUG, sc, "Signal is not detected. Restoring CL73."
 			    "rx_status(0x80b0) = 0x%x", rx_status);
 		CL22_WR_OVER_CL45(sc, phy,
 				  MDIO_REG_BANK_CL73_IEEEB0,
@@ -5093,7 +5095,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
 	      MDIO_CL73_USERB0_CL73_USTAT1_AN_GOOD_CHECK_BAM37)) !=
 	    (MDIO_CL73_USERB0_CL73_USTAT1_LINK_STATUS_CHECK |
 	     MDIO_CL73_USERB0_CL73_USTAT1_AN_GOOD_CHECK_BAM37)) {
-		PMD_DRV_LOG(DEBUG, "CL73 state-machine is not stable. "
+		PMD_DRV_LOG(DEBUG, sc, "CL73 state-machine is not stable. "
 			    "ustat_val(0x8371) = 0x%x", ustat_val);
 		return;
 	}
@@ -5108,7 +5110,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
 	      MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_BRCM_OUI_MSG)) !=
 	    (MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_OVER1G_MSG |
 	     MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_BRCM_OUI_MSG)) {
-		PMD_DRV_LOG(DEBUG, "No CL37 FSM were received. "
+		PMD_DRV_LOG(DEBUG, sc, "No CL37 FSM were received. "
 			    "misc_rx_status(0x8330) = 0x%x", cl37_fsm_received);
 		return;
 	}
@@ -5124,7 +5126,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
 			  MDIO_CL73_IEEEB0_CL73_AN_CONTROL, 0);
 	/* Restart CL37 autoneg */
 	elink_restart_autoneg(phy, params, 0);
-	PMD_DRV_LOG(DEBUG, "Disabling CL73, and restarting CL37 autoneg");
+	PMD_DRV_LOG(DEBUG, sc, "Disabling CL73, and restarting CL37 autoneg");
 }
 
 static void elink_xgxs_an_resolve(struct elink_phy *phy,
@@ -5148,7 +5150,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
 	if (phy->req_line_speed == ELINK_SPEED_AUTO_NEG)
 		vars->link_status |= LINK_STATUS_AUTO_NEGOTIATE_ENABLED;
 	if (is_link_up) {
-		PMD_DRV_LOG(DEBUG, "phy link up");
+		PMD_DRV_LOG(DEBUG, params->sc, "phy link up");
 
 		vars->phy_link_up = 1;
 		vars->link_status |= LINK_STATUS_LINK_UP;
@@ -5189,7 +5191,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
 
 		case ELINK_GP_STATUS_5G:
 		case ELINK_GP_STATUS_6G:
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, params->sc,
 				    "link speed unsupported  gp_status 0x%x",
 				    speed_mask);
 			return ELINK_STATUS_ERROR;
@@ -5209,13 +5211,13 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
 			vars->link_status |= ELINK_LINK_20GTFD;
 			break;
 		default:
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, params->sc,
 				    "link speed unsupported gp_status 0x%x",
 				    speed_mask);
 			return ELINK_STATUS_ERROR;
 		}
 	} else {		/* link_down */
-		PMD_DRV_LOG(DEBUG, "phy link down");
+		PMD_DRV_LOG(DEBUG, params->sc, "phy link down");
 
 		vars->phy_link_up = 0;
 
@@ -5223,7 +5225,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
 		vars->flow_ctrl = ELINK_FLOW_CTRL_NONE;
 		vars->mac_type = ELINK_MAC_TYPE_NONE;
 	}
-	PMD_DRV_LOG(DEBUG, " phy_link_up %x line_speed %d",
+	PMD_DRV_LOG(DEBUG, params->sc, " phy_link_up %x line_speed %d",
 		    vars->phy_link_up, vars->line_speed);
 	return ELINK_STATUS_OK;
 }
@@ -5246,7 +5248,7 @@ static uint8_t elink_link_settings_status(struct elink_phy *phy,
 	if (gp_status & MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS)
 		link_up = 1;
 	speed_mask = gp_status & ELINK_GP_STATUS_SPEED_MASK;
-	PMD_DRV_LOG(DEBUG, "gp_status 0x%x, is_link_up %d, speed_mask 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "gp_status 0x%x, is_link_up %d, speed_mask 0x%x",
 		    gp_status, link_up, speed_mask);
 	rc = elink_get_link_speed_duplex(phy, params, vars, link_up, speed_mask,
 					 duplex);
@@ -5296,7 +5298,7 @@ static uint8_t elink_link_settings_status(struct elink_phy *phy,
 			    LINK_STATUS_LINK_PARTNER_10GXFD_CAPABLE;
 	}
 
-	PMD_DRV_LOG(DEBUG, "duplex %x  flow_ctrl 0x%x link_status 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "duplex %x  flow_ctrl 0x%x link_status 0x%x",
 		    vars->duplex, vars->flow_ctrl, vars->link_status);
 	return rc;
 }
@@ -5322,7 +5324,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
 		uint16_t temp_link_up;
 		elink_cl45_read(sc, phy, MDIO_WC_DEVAD, 1, &temp_link_up);
 		elink_cl45_read(sc, phy, MDIO_WC_DEVAD, 1, &link_up);
-		PMD_DRV_LOG(DEBUG, "PCS RX link status = 0x%x-->0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "PCS RX link status = 0x%x-->0x%x",
 			    temp_link_up, link_up);
 		link_up &= (1 << 2);
 		if (link_up)
@@ -5330,7 +5332,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
 	} else {
 		elink_cl45_read(sc, phy, MDIO_WC_DEVAD,
 				MDIO_WC_REG_GP2_STATUS_GP_2_1, &gp_status1);
-		PMD_DRV_LOG(DEBUG, "0x81d1 = 0x%x", gp_status1);
+		PMD_DRV_LOG(DEBUG, sc, "0x81d1 = 0x%x", gp_status1);
 		/* Check for either KR, 1G, or AN up. */
 		link_up = ((gp_status1 >> 8) |
 			   (gp_status1 >> 12) | (gp_status1)) & (1 << lane);
@@ -5400,7 +5402,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
 		elink_cl45_read(sc, phy, MDIO_WC_DEVAD,
 				MDIO_WC_REG_GP2_STATUS_GP_2_3, &gp_speed);
 	}
-	PMD_DRV_LOG(DEBUG, "lane %d gp_speed 0x%x", lane, gp_speed);
+	PMD_DRV_LOG(DEBUG, sc, "lane %d gp_speed 0x%x", lane, gp_speed);
 
 	if ((lane & 1) == 0)
 		gp_speed <<= 8;
@@ -5416,7 +5418,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
 	    (!(phy->flags & ELINK_FLAGS_WC_DUAL_MODE)))
 		vars->rx_tx_asic_rst = MAX_KR_LINK_RETRY;
 
-	PMD_DRV_LOG(DEBUG, "duplex %x  flow_ctrl 0x%x link_status 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "duplex %x  flow_ctrl 0x%x link_status 0x%x",
 		    vars->duplex, vars->flow_ctrl, vars->link_status);
 	return rc;
 }
@@ -5463,7 +5465,7 @@ static elink_status_t elink_emac_program(struct elink_params *params,
 	uint8_t port = params->port;
 	uint16_t mode = 0;
 
-	PMD_DRV_LOG(DEBUG, "setting link speed & duplex");
+	PMD_DRV_LOG(DEBUG, sc, "setting link speed & duplex");
 	elink_bits_dis(sc, GRCBASE_EMAC0 + port * 0x400 +
 		       EMAC_REG_EMAC_MODE,
 		       (EMAC_MODE_25G_MODE |
@@ -5487,7 +5489,8 @@ static elink_status_t elink_emac_program(struct elink_params *params,
 
 	default:
 		/* 10G not valid for EMAC */
-		PMD_DRV_LOG(DEBUG, "Invalid line_speed 0x%x", vars->line_speed);
+		PMD_DRV_LOG(DEBUG, sc,
+			    "Invalid line_speed 0x%x", vars->line_speed);
 		return ELINK_STATUS_ERROR;
 	}
 
@@ -5539,7 +5542,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
 		if (vars->line_speed != ELINK_SPEED_AUTO_NEG ||
 		    (ELINK_SINGLE_MEDIA_DIRECT(params) &&
 		     params->loopback_mode == ELINK_LOOPBACK_EXT)) {
-			PMD_DRV_LOG(DEBUG, "not SGMII, no AN");
+			PMD_DRV_LOG(DEBUG, params->sc, "not SGMII, no AN");
 
 			/* Disable autoneg */
 			elink_set_autoneg(phy, params, vars, 0);
@@ -5548,7 +5551,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
 			elink_program_serdes(phy, params, vars);
 
 		} else {	/* AN_mode */
-			PMD_DRV_LOG(DEBUG, "not SGMII, AN");
+			PMD_DRV_LOG(DEBUG, params->sc, "not SGMII, AN");
 
 			/* AN enabled */
 			elink_set_brcm_cl37_advertisement(phy, params);
@@ -5565,7 +5568,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
 		}
 
 	} else {		/* SGMII mode */
-		PMD_DRV_LOG(DEBUG, "SGMII");
+		PMD_DRV_LOG(DEBUG, params->sc, "SGMII");
 
 		elink_initialize_sgmii_process(phy, params, vars);
 	}
@@ -5634,7 +5637,7 @@ static uint16_t elink_wait_reset_complete(struct bnx2x_softc *sc,
 		elink_cb_event_log(sc, ELINK_LOG_ID_PHY_UNINITIALIZED, params->port);	// "Warning: PHY was not initialized,"
 	// " Port %d",
 
-	PMD_DRV_LOG(DEBUG, "control reg 0x%x (after %d ms)", ctrl, cnt);
+	PMD_DRV_LOG(DEBUG, sc, "control reg 0x%x (after %d ms)", ctrl, cnt);
 	return cnt;
 }
 
@@ -5652,35 +5655,35 @@ static void elink_link_int_enable(struct elink_params *params)
 	} else if (params->switch_cfg == ELINK_SWITCH_CFG_10G) {
 		mask = (ELINK_NIG_MASK_XGXS0_LINK10G |
 			ELINK_NIG_MASK_XGXS0_LINK_STATUS);
-		PMD_DRV_LOG(DEBUG, "enabled XGXS interrupt");
+		PMD_DRV_LOG(DEBUG, sc, "enabled XGXS interrupt");
 		if (!(ELINK_SINGLE_MEDIA_DIRECT(params)) &&
 		    params->phy[ELINK_INT_PHY].type !=
 		    PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE) {
 			mask |= ELINK_NIG_MASK_MI_INT;
-			PMD_DRV_LOG(DEBUG, "enabled external phy int");
+			PMD_DRV_LOG(DEBUG, sc, "enabled external phy int");
 		}
 
 	} else {		/* SerDes */
 		mask = ELINK_NIG_MASK_SERDES0_LINK_STATUS;
-		PMD_DRV_LOG(DEBUG, "enabled SerDes interrupt");
+		PMD_DRV_LOG(DEBUG, sc, "enabled SerDes interrupt");
 		if (!(ELINK_SINGLE_MEDIA_DIRECT(params)) &&
 		    params->phy[ELINK_INT_PHY].type !=
 		    PORT_HW_CFG_SERDES_EXT_PHY_TYPE_NOT_CONN) {
 			mask |= ELINK_NIG_MASK_MI_INT;
-			PMD_DRV_LOG(DEBUG, "enabled external phy int");
+			PMD_DRV_LOG(DEBUG, sc, "enabled external phy int");
 		}
 	}
 	elink_bits_en(sc, NIG_REG_MASK_INTERRUPT_PORT0 + port * 4, mask);
 
-	PMD_DRV_LOG(DEBUG, "port %x, is_xgxs %x, int_status 0x%x", port,
+	PMD_DRV_LOG(DEBUG, sc, "port %x, is_xgxs %x, int_status 0x%x", port,
 		    (params->switch_cfg == ELINK_SWITCH_CFG_10G),
 		    REG_RD(sc, NIG_REG_STATUS_INTERRUPT_PORT0 + port * 4));
-	PMD_DRV_LOG(DEBUG, " int_mask 0x%x, MI_INT %x, SERDES_LINK %x",
+	PMD_DRV_LOG(DEBUG, sc, " int_mask 0x%x, MI_INT %x, SERDES_LINK %x",
 		    REG_RD(sc, NIG_REG_MASK_INTERRUPT_PORT0 + port * 4),
 		    REG_RD(sc, NIG_REG_EMAC0_STATUS_MISC_MI_INT + port * 0x18),
 		    REG_RD(sc,
 			   NIG_REG_SERDES0_STATUS_LINK_STATUS + port * 0x3c));
-	PMD_DRV_LOG(DEBUG, " 10G %x, XGXS_LINK %x",
+	PMD_DRV_LOG(DEBUG, sc, " 10G %x, XGXS_LINK %x",
 		    REG_RD(sc, NIG_REG_XGXS0_STATUS_LINK10G + port * 0x68),
 		    REG_RD(sc, NIG_REG_XGXS0_STATUS_LINK_STATUS + port * 0x68));
 }
@@ -5696,7 +5699,7 @@ static void elink_rearm_latch_signal(struct bnx2x_softc *sc, uint8_t port,
 	 */
 	/* Read Latched signals */
 	latch_status = REG_RD(sc, NIG_REG_LATCH_STATUS_0 + port * 8);
-	PMD_DRV_LOG(DEBUG, "latch_status = 0x%x", latch_status);
+	PMD_DRV_LOG(DEBUG, sc, "latch_status = 0x%x", latch_status);
 	/* Handle only those with latched-signal=up. */
 	if (exp_mi_int)
 		elink_bits_en(sc,
@@ -5748,7 +5751,7 @@ static void elink_link_int_ack(struct elink_params *params,
 			} else
 				mask = ELINK_NIG_STATUS_SERDES0_LINK_STATUS;
 		}
-		PMD_DRV_LOG(DEBUG, "Ack link up interrupt with mask 0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "Ack link up interrupt with mask 0x%x",
 			    mask);
 		elink_bits_en(sc,
 			      NIG_REG_STATUS_INTERRUPT_PORT0 + port * 4, mask);
@@ -5811,7 +5814,7 @@ static void elink_set_xgxs_loopback(struct elink_phy *phy,
 	if (phy->req_line_speed != ELINK_SPEED_1000) {
 		uint32_t md_devad = 0;
 
-		PMD_DRV_LOG(DEBUG, "XGXS 10G loopback enable");
+		PMD_DRV_LOG(DEBUG, sc, "XGXS 10G loopback enable");
 
 		if (!CHIP_IS_E3(sc)) {
 			/* Change the uni_phy_addr in the nig */
@@ -5843,7 +5846,7 @@ static void elink_set_xgxs_loopback(struct elink_phy *phy,
 		}
 	} else {
 		uint16_t mii_ctrl;
-		PMD_DRV_LOG(DEBUG, "XGXS 1G loopback enable");
+		PMD_DRV_LOG(DEBUG, sc, "XGXS 1G loopback enable");
 		elink_cl45_read(sc, phy, 5,
 				(MDIO_REG_BANK_COMBO_IEEE0 +
 				 (MDIO_COMBO_IEEE0_MII_CONTROL & 0xf)),
@@ -5867,8 +5870,9 @@ elink_status_t elink_set_led(struct elink_params *params,
 	uint32_t tmp;
 	uint32_t emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0;
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "elink_set_led: port %x, mode %d", port, mode);
-	PMD_DRV_LOG(DEBUG, "speed 0x%x, hw_led_mode 0x%x", speed, hw_led_mode);
+	PMD_DRV_LOG(DEBUG, sc, "elink_set_led: port %x, mode %d", port, mode);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "speed 0x%x, hw_led_mode 0x%x", speed, hw_led_mode);
 	/* In case */
 	for (phy_idx = ELINK_EXT_PHY1; phy_idx < ELINK_MAX_PHYS; phy_idx++) {
 		if (params->phy[phy_idx].set_link_led) {
@@ -5987,7 +5991,8 @@ elink_status_t elink_set_led(struct elink_params *params,
 
 	default:
 		rc = ELINK_STATUS_ERROR;
-		PMD_DRV_LOG(DEBUG, "elink_set_led: Invalid led mode %d", mode);
+		PMD_DRV_LOG(DEBUG, sc,
+			    "elink_set_led: Invalid led mode %d", mode);
 		break;
 	}
 	return rc;
@@ -6054,7 +6059,7 @@ static elink_status_t elink_link_initialize(struct elink_params *params,
 			if (phy_index == ELINK_EXT_PHY2 &&
 			    (elink_phy_selection(params) ==
 			     PORT_HW_CFG_PHY_SELECTION_FIRST_PHY)) {
-				PMD_DRV_LOG(DEBUG,
+				PMD_DRV_LOG(DEBUG, sc,
 					    "Not initializing second phy");
 				continue;
 			}
@@ -6095,7 +6100,7 @@ static void elink_common_ext_link_reset(__rte_unused struct elink_phy *phy,
 			    MISC_REGISTERS_GPIO_OUTPUT_LOW, gpio_port);
 	elink_cb_gpio_write(sc, MISC_REGISTERS_GPIO_2,
 			    MISC_REGISTERS_GPIO_OUTPUT_LOW, gpio_port);
-	PMD_DRV_LOG(DEBUG, "reset external PHY");
+	PMD_DRV_LOG(DEBUG, sc, "reset external PHY");
 }
 
 static elink_status_t elink_update_link_down(struct elink_params *params,
@@ -6104,7 +6109,7 @@ static elink_status_t elink_update_link_down(struct elink_params *params,
 	struct bnx2x_softc *sc = params->sc;
 	uint8_t port = params->port;
 
-	PMD_DRV_LOG(DEBUG, "Port %x: Link is down", port);
+	PMD_DRV_LOG(DEBUG, sc, "Port %x: Link is down", port);
 	elink_set_led(params, vars, ELINK_LED_MODE_OFF, 0);
 	vars->phy_flags &= ~PHY_PHYSICAL_LINK_FLAG;
 	/* Indicate no mac active */
@@ -6165,7 +6170,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
 		if (link_10g) {
 			if (elink_xmac_enable(params, vars, 0) ==
 			    ELINK_STATUS_NO_LINK) {
-				PMD_DRV_LOG(DEBUG, "Found errors on XMAC");
+				PMD_DRV_LOG(DEBUG, sc, "Found errors on XMAC");
 				vars->link_up = 0;
 				vars->phy_flags |= PHY_HALF_OPEN_CONN_FLAG;
 				vars->link_status &= ~LINK_STATUS_LINK_UP;
@@ -6177,7 +6182,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
 
 		if ((vars->eee_status & SHMEM_EEE_ACTIVE_BIT) &&
 		    (vars->eee_status & SHMEM_EEE_LPI_REQUESTED_BIT)) {
-			PMD_DRV_LOG(DEBUG, "Enabling LPI assertion");
+			PMD_DRV_LOG(DEBUG, sc, "Enabling LPI assertion");
 			REG_WR(sc, MISC_REG_CPMU_LP_FW_ENABLE_P0 +
 			       (params->port << 2), 1);
 			REG_WR(sc, MISC_REG_CPMU_LP_DR_ENABLE, 1);
@@ -6189,7 +6194,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
 		if (link_10g) {
 			if (elink_bmac_enable(params, vars, 0, 1) ==
 			    ELINK_STATUS_NO_LINK) {
-				PMD_DRV_LOG(DEBUG, "Found errors on BMAC");
+				PMD_DRV_LOG(DEBUG, sc, "Found errors on BMAC");
 				vars->link_up = 0;
 				vars->phy_flags |= PHY_HALF_OPEN_CONN_FLAG;
 				vars->link_status &= ~LINK_STATUS_LINK_UP;
@@ -6274,19 +6279,19 @@ elink_status_t elink_link_update(struct elink_params * params,
 	if (USES_WARPCORE(sc))
 		elink_set_aer_mmd(params, &params->phy[ELINK_INT_PHY]);
 
-	PMD_DRV_LOG(DEBUG, "port %x, XGXS?%x, int_status 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "port %x, XGXS?%x, int_status 0x%x",
 		    port, (vars->phy_flags & PHY_XGXS_FLAG),
 		    REG_RD(sc, NIG_REG_STATUS_INTERRUPT_PORT0 + port * 4));
 
 	is_mi_int = (uint8_t) (REG_RD(sc, NIG_REG_EMAC0_STATUS_MISC_MI_INT +
 				      port * 0x18) > 0);
-	PMD_DRV_LOG(DEBUG, "int_mask 0x%x MI_INT %x, SERDES_LINK %x",
+	PMD_DRV_LOG(DEBUG, sc, "int_mask 0x%x MI_INT %x, SERDES_LINK %x",
 		    REG_RD(sc, NIG_REG_MASK_INTERRUPT_PORT0 + port * 4),
 		    is_mi_int,
 		    REG_RD(sc,
 			   NIG_REG_SERDES0_STATUS_LINK_STATUS + port * 0x3c));
 
-	PMD_DRV_LOG(DEBUG, " 10G %x, XGXS_LINK %x",
+	PMD_DRV_LOG(DEBUG, sc, " 10G %x, XGXS_LINK %x",
 		    REG_RD(sc, NIG_REG_XGXS0_STATUS_LINK10G + port * 0x68),
 		    REG_RD(sc, NIG_REG_XGXS0_STATUS_LINK_STATUS + port * 0x68));
 
@@ -6310,10 +6315,10 @@ elink_status_t elink_link_update(struct elink_params * params,
 		cur_link_up = phy->read_status(phy, params,
 					       &phy_vars[phy_index]);
 		if (cur_link_up) {
-			PMD_DRV_LOG(DEBUG, "phy in index %d link is up",
+			PMD_DRV_LOG(DEBUG, sc, "phy in index %d link is up",
 				    phy_index);
 		} else {
-			PMD_DRV_LOG(DEBUG, "phy in index %d link is down",
+			PMD_DRV_LOG(DEBUG, sc, "phy in index %d link is down",
 				    phy_index);
 			continue;
 		}
@@ -6346,7 +6351,7 @@ elink_status_t elink_link_update(struct elink_params * params,
 				 * to link up by itself (using configuration)
 				 * - DEFAULT should be overriden during initialiazation
 				 */
-				PMD_DRV_LOG(DEBUG, "Invalid link indication"
+				PMD_DRV_LOG(DEBUG, sc, "Invalid link indication"
 					    "mpc=0x%x. DISABLING LINK !!!",
 					    params->multi_phy_config);
 				ext_phy_link_up = 0;
@@ -6384,7 +6389,7 @@ elink_status_t elink_link_update(struct elink_params * params,
 		 */
 		if (active_external_phy == ELINK_EXT_PHY1) {
 			if (params->phy[ELINK_EXT_PHY2].phy_specific_func) {
-				PMD_DRV_LOG(DEBUG, "Disabling TX on EXT_PHY2");
+				PMD_DRV_LOG(DEBUG, sc, "Disabling TX on EXT_PHY2");
 				params->phy[ELINK_EXT_PHY2].
 				    phy_specific_func(&params->
 						      phy[ELINK_EXT_PHY2],
@@ -6402,7 +6407,7 @@ elink_status_t elink_link_update(struct elink_params * params,
 
 		vars->eee_status = phy_vars[active_external_phy].eee_status;
 
-		PMD_DRV_LOG(DEBUG, "Active external phy selected: %x",
+		PMD_DRV_LOG(DEBUG, sc, "Active external phy selected: %x",
 			    active_external_phy);
 	}
 
@@ -6416,7 +6421,7 @@ elink_status_t elink_link_update(struct elink_params * params,
 			break;
 		}
 	}
-	PMD_DRV_LOG(DEBUG, "vars->flow_ctrl = 0x%x, vars->link_status = 0x%x,"
+	PMD_DRV_LOG(DEBUG, sc, "vars->flow_ctrl = 0x%x, vars->link_status = 0x%x,"
 		    " ext_phy_line_speed = %d", vars->flow_ctrl,
 		    vars->link_status, ext_phy_line_speed);
 	/* Upon link speed change set the NIG into drain mode. Comes to
@@ -6427,7 +6432,7 @@ elink_status_t elink_link_update(struct elink_params * params,
 	if (vars->phy_link_up) {
 		if (!(ELINK_SINGLE_MEDIA_DIRECT(params)) && ext_phy_link_up &&
 		    (ext_phy_line_speed != vars->line_speed)) {
-			PMD_DRV_LOG(DEBUG, "Internal link speed %d is"
+			PMD_DRV_LOG(DEBUG, sc, "Internal link speed %d is"
 				    " different than the external"
 				    " link speed %d", vars->line_speed,
 				    ext_phy_line_speed);
@@ -6453,7 +6458,7 @@ elink_status_t elink_link_update(struct elink_params * params,
 	 * initialize it
 	 */
 	if (!(ELINK_SINGLE_MEDIA_DIRECT(params))) {
-		PMD_DRV_LOG(DEBUG, "ext_phy_link_up = %d, int_link_up = %d,"
+		PMD_DRV_LOG(DEBUG, sc, "ext_phy_link_up = %d, int_link_up = %d,"
 			    " init_preceding = %d", ext_phy_link_up,
 			    vars->phy_link_up,
 			    params->phy[ELINK_EXT_PHY1].flags &
@@ -6518,7 +6523,7 @@ static void elink_save_spirom_version(struct bnx2x_softc *sc,
 				      __rte_unused uint8_t port,
 				      uint32_t spirom_ver, uint32_t ver_addr)
 {
-	PMD_DRV_LOG(DEBUG, "FW version 0x%x:0x%x for port %d",
+	PMD_DRV_LOG(DEBUG, sc, "FW version 0x%x:0x%x for port %d",
 		    (uint16_t) (spirom_ver >> 16), (uint16_t) spirom_ver, port);
 
 	if (ver_addr)
@@ -6584,7 +6589,7 @@ static void elink_8073_resolve_fc(struct elink_phy *phy,
 				 MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) >> 7;
 
 		elink_pause_resolve(vars, pause_result);
-		PMD_DRV_LOG(DEBUG, "Ext PHY CL37 pause result 0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "Ext PHY CL37 pause result 0x%x",
 			    pause_result);
 	}
 }
@@ -6628,7 +6633,7 @@ static elink_status_t elink_8073_8727_external_rom_boot(struct bnx2x_softc *sc,
 	do {
 		count++;
 		if (count > 300) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "elink_8073_8727_external_rom_boot port %x:"
 				    "Download failed. fw version = 0x%x",
 				    port, fw_ver1);
@@ -6653,7 +6658,7 @@ static elink_status_t elink_8073_8727_external_rom_boot(struct bnx2x_softc *sc,
 			 MDIO_PMA_DEVAD, MDIO_PMA_REG_MISC_CTRL1, 0x0000);
 	elink_save_bnx2x_spirom_ver(sc, phy, port);
 
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "elink_8073_8727_external_rom_boot port %x:"
 		    "Download complete. fw version = 0x%x", port, fw_ver1);
 
@@ -6714,10 +6719,10 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
 		 * these bits indicate 2.5G or 1G link up).
 		 */
 		if (!(val & (1 << 14)) || !(val & (1 << 13))) {
-			PMD_DRV_LOG(DEBUG, "XAUI work-around not required");
+			PMD_DRV_LOG(DEBUG, sc, "XAUI work-around not required");
 			return ELINK_STATUS_OK;
 		} else if (!(val & (1 << 15))) {
-			PMD_DRV_LOG(DEBUG, "bit 15 went off");
+			PMD_DRV_LOG(DEBUG, sc, "bit 15 went off");
 			/* If bit 15 is 0, then poll Dev1, Reg $C841 until it's
 			 * MSB (bit15) goes to 1 (indicating that the XAUI
 			 * workaround has completed), then continue on with
@@ -6729,7 +6734,7 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
 						MDIO_PMA_REG_8073_XAUI_WA,
 						&val);
 				if (val & (1 << 15)) {
-					PMD_DRV_LOG(DEBUG,
+					PMD_DRV_LOG(DEBUG, sc,
 						    "XAUI workaround has completed");
 					return ELINK_STATUS_OK;
 				}
@@ -6739,7 +6744,7 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
 		}
 		DELAY(1000 * 3);
 	}
-	PMD_DRV_LOG(DEBUG, "Warning: XAUI work-around timeout !!!");
+	PMD_DRV_LOG(DEBUG, sc, "Warning: XAUI work-around timeout !!!");
 	return ELINK_STATUS_ERROR;
 }
 
@@ -6781,7 +6786,7 @@ static void elink_8073_set_pause_cl37(struct elink_params *params,
 	    MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) {
 		cl37_val |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH;
 	}
-	PMD_DRV_LOG(DEBUG, "Ext phy AN advertize cl37 0x%x", cl37_val);
+	PMD_DRV_LOG(DEBUG, sc, "Ext phy AN advertize cl37 0x%x", cl37_val);
 
 	elink_cl45_write(sc, phy,
 			 MDIO_AN_DEVAD, MDIO_AN_REG_CL37_FC_LD, cl37_val);
@@ -6812,7 +6817,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
 	struct bnx2x_softc *sc = params->sc;
 	uint16_t val = 0, tmp1;
 	uint8_t gpio_port;
-	PMD_DRV_LOG(DEBUG, "Init 8073");
+	PMD_DRV_LOG(DEBUG, sc, "Init 8073");
 
 	if (CHIP_IS_E2(sc))
 		gpio_port = SC_PATH(sc);
@@ -6833,12 +6838,12 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
 
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_RXSTAT, &tmp1);
 
-	PMD_DRV_LOG(DEBUG, "Before rom RX_ALARM(port1): 0x%x", tmp1);
+	PMD_DRV_LOG(DEBUG, sc, "Before rom RX_ALARM(port1): 0x%x", tmp1);
 
 	/* Swap polarity if required - Must be done only in non-1G mode */
 	if (params->lane_config & PORT_HW_CFG_SWAP_PHY_POLARITY_ENABLED) {
 		/* Configure the 8073 to swap _P and _N of the KR lines */
-		PMD_DRV_LOG(DEBUG, "Swapping polarity for the 8073");
+		PMD_DRV_LOG(DEBUG, sc, "Swapping polarity for the 8073");
 		/* 10G Rx/Tx and 1G Tx signal polarity swap */
 		elink_cl45_read(sc, phy,
 				MDIO_PMA_DEVAD,
@@ -6860,11 +6865,11 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
 				MDIO_AN_DEVAD, MDIO_AN_REG_8073_BAM, &val);
 		elink_cl45_write(sc, phy,
 				 MDIO_AN_DEVAD, MDIO_AN_REG_8073_BAM, val | 1);
-		PMD_DRV_LOG(DEBUG, "Enable CL37 BAM on KR");
+		PMD_DRV_LOG(DEBUG, sc, "Enable CL37 BAM on KR");
 	}
 	if (params->loopback_mode == ELINK_LOOPBACK_EXT) {
 		elink_807x_force_10G(sc, phy);
-		PMD_DRV_LOG(DEBUG, "Forced speed 10G on 807X");
+		PMD_DRV_LOG(DEBUG, sc, "Forced speed 10G on 807X");
 		return ELINK_STATUS_OK;
 	} else {
 		elink_cl45_write(sc, phy,
@@ -6890,7 +6895,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
 		    (PORT_HW_CFG_SPEED_CAPABILITY_D0_1G |
 		     PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G))
 			val |= (1 << 5);
-		PMD_DRV_LOG(DEBUG, "807x autoneg val = 0x%x", val);
+		PMD_DRV_LOG(DEBUG, sc, "807x autoneg val = 0x%x", val);
 	}
 
 	elink_cl45_write(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_ADV, val);
@@ -6904,13 +6909,13 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
 		elink_cl45_read(sc, phy,
 				MDIO_PMA_DEVAD, MDIO_PMA_REG_8073_CHIP_REV,
 				&phy_ver);
-		PMD_DRV_LOG(DEBUG, "Add 2.5G");
+		PMD_DRV_LOG(DEBUG, sc, "Add 2.5G");
 		if (phy_ver > 0)
 			tmp1 |= 1;
 		else
 			tmp1 &= 0xfffe;
 	} else {
-		PMD_DRV_LOG(DEBUG, "Disable 2.5G");
+		PMD_DRV_LOG(DEBUG, sc, "Disable 2.5G");
 		tmp1 &= 0xfffe;
 	}
 
@@ -6944,7 +6949,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
 	/* Restart autoneg */
 	DELAY(1000 * 500);
 	elink_cl45_write(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_CTRL, 0x1200);
-	PMD_DRV_LOG(DEBUG, "807x Autoneg Restart: Advertise 1G=%x, 10G=%x",
+	PMD_DRV_LOG(DEBUG, sc, "807x Autoneg Restart: Advertise 1G=%x, 10G=%x",
 		    ((val & (1 << 5)) > 0), ((val & (1 << 7)) > 0));
 	return ELINK_STATUS_OK;
 }
@@ -6961,12 +6966,12 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
 
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val1);
 
-	PMD_DRV_LOG(DEBUG, "8703 LASI status 0x%x", val1);
+	PMD_DRV_LOG(DEBUG, sc, "8703 LASI status 0x%x", val1);
 
 	/* Clear the interrupt LASI status register */
 	elink_cl45_read(sc, phy, MDIO_PCS_DEVAD, MDIO_PCS_REG_STATUS, &val2);
 	elink_cl45_read(sc, phy, MDIO_PCS_DEVAD, MDIO_PCS_REG_STATUS, &val1);
-	PMD_DRV_LOG(DEBUG, "807x PCS status 0x%x->0x%x", val2, val1);
+	PMD_DRV_LOG(DEBUG, sc, "807x PCS status 0x%x->0x%x", val2, val1);
 	/* Clear MSG-OUT */
 	elink_cl45_read(sc, phy,
 			MDIO_PMA_DEVAD, MDIO_PMA_REG_M8051_MSGOUT_REG, &val1);
@@ -6974,16 +6979,16 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
 	/* Check the LASI */
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_RXSTAT, &val2);
 
-	PMD_DRV_LOG(DEBUG, "KR 0x9003 0x%x", val2);
+	PMD_DRV_LOG(DEBUG, sc, "KR 0x9003 0x%x", val2);
 
 	/* Check the link status */
 	elink_cl45_read(sc, phy, MDIO_PCS_DEVAD, MDIO_PCS_REG_STATUS, &val2);
-	PMD_DRV_LOG(DEBUG, "KR PCS status 0x%x", val2);
+	PMD_DRV_LOG(DEBUG, sc, "KR PCS status 0x%x", val2);
 
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_STATUS, &val2);
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_STATUS, &val1);
 	link_up = ((val1 & 4) == 4);
-	PMD_DRV_LOG(DEBUG, "PMA_REG_STATUS=0x%x", val1);
+	PMD_DRV_LOG(DEBUG, sc, "PMA_REG_STATUS=0x%x", val1);
 
 	if (link_up && ((phy->req_line_speed != ELINK_SPEED_10000))) {
 		if (elink_8073_xaui_wa(sc, phy) != 0)
@@ -6997,7 +7002,7 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
 	/* Check the link status on 1.1.2 */
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_STATUS, &val2);
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_STATUS, &val1);
-	PMD_DRV_LOG(DEBUG, "KR PMA status 0x%x->0x%x,"
+	PMD_DRV_LOG(DEBUG, sc, "KR PMA status 0x%x->0x%x,"
 		    "an_link_status=0x%x", val2, val1, an1000_status);
 
 	link_up = (((val1 & 4) == 4) || (an1000_status & (1 << 1)));
@@ -7023,21 +7028,21 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
 	if ((link_status & (1 << 2)) && (!(link_status & (1 << 15)))) {
 		link_up = 1;
 		vars->line_speed = ELINK_SPEED_10000;
-		PMD_DRV_LOG(DEBUG, "port %x: External link up in 10G",
+		PMD_DRV_LOG(DEBUG, sc, "port %x: External link up in 10G",
 			    params->port);
 	} else if ((link_status & (1 << 1)) && (!(link_status & (1 << 14)))) {
 		link_up = 1;
 		vars->line_speed = ELINK_SPEED_2500;
-		PMD_DRV_LOG(DEBUG, "port %x: External link up in 2.5G",
+		PMD_DRV_LOG(DEBUG, sc, "port %x: External link up in 2.5G",
 			    params->port);
 	} else if ((link_status & (1 << 0)) && (!(link_status & (1 << 13)))) {
 		link_up = 1;
 		vars->line_speed = ELINK_SPEED_1000;
-		PMD_DRV_LOG(DEBUG, "port %x: External link up in 1G",
+		PMD_DRV_LOG(DEBUG, sc, "port %x: External link up in 1G",
 			    params->port);
 	} else {
 		link_up = 0;
-		PMD_DRV_LOG(DEBUG, "port %x: External link is down",
+		PMD_DRV_LOG(DEBUG, sc, "port %x: External link is down",
 			    params->port);
 	}
 
@@ -7052,7 +7057,7 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
 			 * when it`s in 10G mode.
 			 */
 			if (vars->line_speed == ELINK_SPEED_1000) {
-				PMD_DRV_LOG(DEBUG, "Swapping 1G polarity for"
+				PMD_DRV_LOG(DEBUG, sc, "Swapping 1G polarity for"
 					    "the 8073");
 				val1 |= (1 << 3);
 			} else
@@ -7091,7 +7096,7 @@ static void elink_8073_link_reset(__rte_unused struct elink_phy *phy,
 		gpio_port = SC_PATH(sc);
 	else
 		gpio_port = params->port;
-	PMD_DRV_LOG(DEBUG, "Setting 8073 port %d into low power mode",
+	PMD_DRV_LOG(DEBUG, sc, "Setting 8073 port %d into low power mode",
 		    gpio_port);
 	elink_cb_gpio_write(sc, MISC_REGISTERS_GPIO_2,
 			    MISC_REGISTERS_GPIO_OUTPUT_LOW, gpio_port);
@@ -7106,7 +7111,7 @@ static uint8_t elink_8705_config_init(struct elink_phy *phy,
 					     *vars)
 {
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "init 8705");
+	PMD_DRV_LOG(DEBUG, sc, "init 8705");
 	/* Restore normal power mode */
 	elink_cb_gpio_write(sc, MISC_REGISTERS_GPIO_2,
 			    MISC_REGISTERS_GPIO_OUTPUT_HIGH, params->port);
@@ -7134,21 +7139,21 @@ static uint8_t elink_8705_read_status(struct elink_phy *phy,
 	uint8_t link_up = 0;
 	uint16_t val1, rx_sd;
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "read status 8705");
+	PMD_DRV_LOG(DEBUG, sc, "read status 8705");
 	elink_cl45_read(sc, phy,
 			MDIO_WIS_DEVAD, MDIO_WIS_REG_LASI_STATUS, &val1);
-	PMD_DRV_LOG(DEBUG, "8705 LASI status 0x%x", val1);
+	PMD_DRV_LOG(DEBUG, sc, "8705 LASI status 0x%x", val1);
 
 	elink_cl45_read(sc, phy,
 			MDIO_WIS_DEVAD, MDIO_WIS_REG_LASI_STATUS, &val1);
-	PMD_DRV_LOG(DEBUG, "8705 LASI status 0x%x", val1);
+	PMD_DRV_LOG(DEBUG, sc, "8705 LASI status 0x%x", val1);
 
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_RX_SD, &rx_sd);
 
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, 0xc809, &val1);
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, 0xc809, &val1);
 
-	PMD_DRV_LOG(DEBUG, "8705 1.c809 val=0x%x", val1);
+	PMD_DRV_LOG(DEBUG, sc, "8705 1.c809 val=0x%x", val1);
 	link_up = ((rx_sd & 0x1) && (val1 & (1 << 9))
 		   && ((val1 & (1 << 8)) == 0));
 	if (link_up) {
@@ -7172,13 +7177,13 @@ static void elink_set_disable_pmd_transmit(struct elink_params *params,
 	if (pmd_dis) {
 		if (params->feature_config_flags &
 		    ELINK_FEATURE_CONFIG_BC_SUPPORTS_SFP_TX_DISABLED) {
-			PMD_DRV_LOG(DEBUG, "Disabling PMD transmitter");
+			PMD_DRV_LOG(DEBUG, sc, "Disabling PMD transmitter");
 		} else {
-			PMD_DRV_LOG(DEBUG, "NOT disabling PMD transmitter");
+			PMD_DRV_LOG(DEBUG, sc, "NOT disabling PMD transmitter");
 			return;
 		}
 	} else {
-		PMD_DRV_LOG(DEBUG, "Enabling PMD transmitter");
+		PMD_DRV_LOG(DEBUG, sc, "Enabling PMD transmitter");
 	}
 	elink_cl45_write(sc, phy,
 			 MDIO_PMA_DEVAD, MDIO_PMA_REG_TX_DISABLE, pmd_dis);
@@ -7212,7 +7217,7 @@ static void elink_sfp_e1e2_set_transmitter(struct elink_params *params,
 			    offsetof(struct shmem_region,
 				     dev_info.port_hw_config[port].sfp_ctrl)) &
 	    PORT_HW_CFG_TX_LASER_MASK;
-	PMD_DRV_LOG(DEBUG, "Setting transmitter tx_en=%x for port %x "
+	PMD_DRV_LOG(DEBUG, sc, "Setting transmitter tx_en=%x for port %x "
 		    "mode = %x", tx_en, port, tx_en_mode);
 	switch (tx_en_mode) {
 	case PORT_HW_CFG_TX_LASER_MDIO:
@@ -7248,7 +7253,8 @@ static void elink_sfp_e1e2_set_transmitter(struct elink_params *params,
 			break;
 		}
 	default:
-		PMD_DRV_LOG(DEBUG, "Invalid TX_LASER_MDIO 0x%x", tx_en_mode);
+		PMD_DRV_LOG(DEBUG, sc,
+			    "Invalid TX_LASER_MDIO 0x%x", tx_en_mode);
 		break;
 	}
 }
@@ -7257,7 +7263,7 @@ static void elink_sfp_set_transmitter(struct elink_params *params,
 				      struct elink_phy *phy, uint8_t tx_en)
 {
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "Setting SFP+ transmitter to %d", tx_en);
+	PMD_DRV_LOG(DEBUG, sc, "Setting SFP+ transmitter to %d", tx_en);
 	if (CHIP_IS_E3(sc))
 		elink_sfp_e3_set_transmitter(params, phy, tx_en);
 	else
@@ -7278,7 +7284,7 @@ static elink_status_t elink_8726_read_sfp_module_eeprom(struct elink_phy *phy,
 	uint16_t val = 0;
 	uint16_t i;
 	if (byte_cnt > ELINK_SFP_EEPROM_PAGE_SIZE) {
-		PMD_DRV_LOG(DEBUG, "Reading from eeprom is limited to 0xf");
+		PMD_DRV_LOG(DEBUG, sc, "Reading from eeprom is limited to 0xf");
 		return ELINK_STATUS_ERROR;
 	}
 	/* Set the read command byte count */
@@ -7309,7 +7315,7 @@ static elink_status_t elink_8726_read_sfp_module_eeprom(struct elink_phy *phy,
 
 	if ((val & MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK) !=
 	    MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_COMPLETE) {
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "Got bad status 0x%x when reading from SFP+ EEPROM",
 			    (val & MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK));
 		return ELINK_STATUS_ERROR;
@@ -7350,7 +7356,7 @@ static void elink_warpcore_power_module(struct elink_params *params,
 
 	if (pin_cfg == PIN_CFG_NA)
 		return;
-	PMD_DRV_LOG(DEBUG, "Setting SFP+ module power to %d using pin cfg %d",
+	PMD_DRV_LOG(DEBUG, sc, "Setting SFP+ module power to %d using pin cfg %d",
 		    power, pin_cfg);
 	/* Low ==> corresponding SFP+ module is powered
 	 * high ==> the SFP+ module is powered down
@@ -7375,7 +7381,7 @@ static elink_status_t elink_warpcore_read_sfp_module_eeprom(__rte_unused struct
 	struct bnx2x_softc *sc = params->sc;
 
 	if (byte_cnt > ELINK_SFP_EEPROM_PAGE_SIZE) {
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "Reading from eeprom is limited to 16 bytes");
 		return ELINK_STATUS_ERROR;
 	}
@@ -7417,7 +7423,7 @@ static elink_status_t elink_8727_read_sfp_module_eeprom(struct elink_phy *phy,
 	uint16_t val, i;
 
 	if (byte_cnt > ELINK_SFP_EEPROM_PAGE_SIZE) {
-		PMD_DRV_LOG(DEBUG, "Reading from eeprom is limited to 0xf");
+		PMD_DRV_LOG(DEBUG, sc, "Reading from eeprom is limited to 0xf");
 		return ELINK_STATUS_ERROR;
 	}
 
@@ -7471,7 +7477,7 @@ static elink_status_t elink_8727_read_sfp_module_eeprom(struct elink_phy *phy,
 
 	if ((val & MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK) !=
 	    MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_COMPLETE) {
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "Got bad status 0x%x when reading from SFP+ EEPROM",
 			    (val & MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK));
 		return ELINK_STATUS_TIMEOUT;
@@ -7512,7 +7518,8 @@ static elink_status_t elink_read_sfp_module_eeprom(struct elink_phy *phy,
 	read_sfp_module_eeprom_func_p read_func;
 
 	if ((dev_addr != 0xa0) && (dev_addr != 0xa2)) {
-		PMD_DRV_LOG(DEBUG, "invalid dev_addr 0x%x", dev_addr);
+		PMD_DRV_LOG(DEBUG, params->sc,
+			    "invalid dev_addr 0x%x", dev_addr);
 		return ELINK_STATUS_ERROR;
 	}
 
@@ -7558,7 +7565,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 					 ELINK_I2C_DEV_ADDR_A0,
 					 ELINK_SFP_EEPROM_CON_TYPE_ADDR,
 					 2, (uint8_t *) val) != 0) {
-		PMD_DRV_LOG(DEBUG, "Failed to read from SFP+ module EEPROM");
+		PMD_DRV_LOG(DEBUG, sc, "Failed to read from SFP+ module EEPROM");
 		return ELINK_STATUS_ERROR;
 	}
 
@@ -7577,7 +7584,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 							 1,
 							 &copper_module_type) !=
 			    0) {
-				PMD_DRV_LOG(DEBUG,
+				PMD_DRV_LOG(DEBUG, sc,
 					    "Failed to read copper-cable-type"
 					    " from SFP+ EEPROM");
 				return ELINK_STATUS_ERROR;
@@ -7585,7 +7592,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 
 			if (copper_module_type &
 			    ELINK_SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_ACTIVE) {
-				PMD_DRV_LOG(DEBUG,
+				PMD_DRV_LOG(DEBUG, sc,
 					    "Active Copper cable detected");
 				if (phy->type ==
 				    PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT)
@@ -7595,11 +7602,11 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 			} else if (copper_module_type &
 				   ELINK_SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_PASSIVE)
 			{
-				PMD_DRV_LOG(DEBUG,
+				PMD_DRV_LOG(DEBUG, sc,
 					    "Passive Copper cable detected");
 				*edc_mode = ELINK_EDC_MODE_PASSIVE_DAC;
 			} else {
-				PMD_DRV_LOG(DEBUG,
+				PMD_DRV_LOG(DEBUG, sc,
 					    "Unknown copper-cable-type 0x%x !!!",
 					    copper_module_type);
 				return ELINK_STATUS_ERROR;
@@ -7612,7 +7619,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 		if ((val[1] & (ELINK_SFP_EEPROM_COMP_CODE_SR_MASK |
 			       ELINK_SFP_EEPROM_COMP_CODE_LR_MASK |
 			       ELINK_SFP_EEPROM_COMP_CODE_LRM_MASK)) == 0) {
-			PMD_DRV_LOG(DEBUG, "1G SFP module detected");
+			PMD_DRV_LOG(DEBUG, sc, "1G SFP module detected");
 			gport = params->port;
 			phy->media_type = ELINK_ETH_PHY_SFP_1G_FIBER;
 			if (phy->req_line_speed != ELINK_SPEED_1000) {
@@ -7628,7 +7635,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 			}
 		} else {
 			int idx, cfg_idx = 0;
-			PMD_DRV_LOG(DEBUG, "10G Optic module detected");
+			PMD_DRV_LOG(DEBUG, sc, "10G Optic module detected");
 			for (idx = ELINK_INT_PHY; idx < ELINK_MAX_PHYS; idx++) {
 				if (params->phy[idx].type == phy->type) {
 					cfg_idx = ELINK_LINK_CONFIG_IDX(idx);
@@ -7640,7 +7647,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 		}
 		break;
 	default:
-		PMD_DRV_LOG(DEBUG, "Unable to determine module type 0x%x !!!",
+		PMD_DRV_LOG(DEBUG, sc, "Unable to determine module type 0x%x !!!",
 			    val[0]);
 		return ELINK_STATUS_ERROR;
 	}
@@ -7670,7 +7677,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 						 ELINK_SFP_EEPROM_OPTIONS_ADDR,
 						 ELINK_SFP_EEPROM_OPTIONS_SIZE,
 						 options) != 0) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Failed to read Option field from module EEPROM");
 			return ELINK_STATUS_ERROR;
 		}
@@ -7679,7 +7686,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
 		else
 			*edc_mode = ELINK_EDC_MODE_LIMITING;
 	}
-	PMD_DRV_LOG(DEBUG, "EDC mode is set to 0x%x", *edc_mode);
+	PMD_DRV_LOG(DEBUG, sc, "EDC mode is set to 0x%x", *edc_mode);
 	return ELINK_STATUS_OK;
 }
 
@@ -7701,7 +7708,7 @@ static elink_status_t elink_verify_sfp_module(struct elink_phy *phy,
 			      config));
 	if ((val & PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_MASK) ==
 	    PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_NO_ENFORCEMENT) {
-		PMD_DRV_LOG(DEBUG, "NOT enforcing module verification");
+		PMD_DRV_LOG(DEBUG, sc, "NOT enforcing module verification");
 		return ELINK_STATUS_OK;
 	}
 
@@ -7713,21 +7720,21 @@ static elink_status_t elink_verify_sfp_module(struct elink_phy *phy,
 		   ELINK_FEATURE_CONFIG_BC_SUPPORTS_OPT_MDL_VRFY) {
 		/* Use first phy request only in case of non-dual media */
 		if (ELINK_DUAL_MEDIA(params)) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "FW does not support OPT MDL verification");
 			return ELINK_STATUS_ERROR;
 		}
 		cmd = DRV_MSG_CODE_VRFY_FIRST_PHY_OPT_MDL;
 	} else {
 		/* No support in OPT MDL detection */
-		PMD_DRV_LOG(DEBUG, "FW does not support OPT MDL verification");
+		PMD_DRV_LOG(DEBUG, sc, "FW does not support OPT MDL verification");
 		return ELINK_STATUS_ERROR;
 	}
 
 	fw_cmd_param = ELINK_FW_PARAM_SET(phy->addr, phy->type, phy->mdio_ctrl);
 	fw_resp = elink_cb_fw_command(sc, cmd, fw_cmd_param);
 	if (fw_resp == FW_MSG_CODE_VRFY_OPT_MDL_SUCCESS) {
-		PMD_DRV_LOG(DEBUG, "Approved module");
+		PMD_DRV_LOG(DEBUG, sc, "Approved module");
 		return ELINK_STATUS_OK;
 	}
 
@@ -7783,7 +7790,7 @@ static elink_status_t elink_wait_for_sfp_module_initialized(struct elink_phy
 							  ELINK_I2C_DEV_ADDR_A0,
 							  1, 1, &val);
 		if (rc == 0) {
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, params->sc,
 				    "SFP+ module initialization took %d ms",
 				    timeout * 5);
 			return ELINK_STATUS_OK;
@@ -7834,17 +7841,18 @@ static elink_status_t elink_8726_set_limiting_mode(struct bnx2x_softc *sc,
 	elink_cl45_read(sc, phy,
 			MDIO_PMA_DEVAD,
 			MDIO_PMA_REG_ROM_VER2, &cur_limiting_mode);
-	PMD_DRV_LOG(DEBUG, "Current Limiting mode is 0x%x", cur_limiting_mode);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "Current Limiting mode is 0x%x", cur_limiting_mode);
 
 	if (edc_mode == ELINK_EDC_MODE_LIMITING) {
-		PMD_DRV_LOG(DEBUG, "Setting LIMITING MODE");
+		PMD_DRV_LOG(DEBUG, sc, "Setting LIMITING MODE");
 		elink_cl45_write(sc, phy,
 				 MDIO_PMA_DEVAD,
 				 MDIO_PMA_REG_ROM_VER2,
 				 ELINK_EDC_MODE_LIMITING);
 	} else {		/* LRM mode ( default ) */
 
-		PMD_DRV_LOG(DEBUG, "Setting LRM MODE");
+		PMD_DRV_LOG(DEBUG, sc, "Setting LRM MODE");
 
 		/* Changing to LRM mode takes quite few seconds. So do it only
 		 * if current mode is limiting (default is LRM)
@@ -7934,7 +7942,7 @@ static void elink_8727_specific_func(struct elink_phy *phy,
 				 val);
 		break;
 	default:
-		PMD_DRV_LOG(DEBUG, "Function 0x%x not supported by 8727",
+		PMD_DRV_LOG(DEBUG, sc, "Function 0x%x not supported by 8727",
 			    action);
 		return;
 	}
@@ -7962,14 +7970,14 @@ static void elink_set_e1e2_module_fault_led(struct elink_params *params,
 			uint8_t gpio_port = elink_get_gpio_port(params);
 			uint16_t gpio_pin = fault_led_gpio -
 			    PORT_HW_CFG_FAULT_MODULE_LED_GPIO0;
-			PMD_DRV_LOG(DEBUG, "Set fault module-detected led "
+			PMD_DRV_LOG(DEBUG, sc, "Set fault module-detected led "
 				    "pin %x port %x mode %x",
 				    gpio_pin, gpio_port, gpio_mode);
 			elink_cb_gpio_write(sc, gpio_pin, gpio_mode, gpio_port);
 		}
 		break;
 	default:
-		PMD_DRV_LOG(DEBUG, "Error: Invalid fault led mode 0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "Error: Invalid fault led mode 0x%x",
 			    fault_led_gpio);
 	}
 }
@@ -7985,7 +7993,7 @@ static void elink_set_e3_module_fault_led(struct elink_params *params,
 				   dev_info.port_hw_config[port].e3_sfp_ctrl)) &
 		   PORT_HW_CFG_E3_FAULT_MDL_LED_MASK) >>
 	    PORT_HW_CFG_E3_FAULT_MDL_LED_SHIFT;
-	PMD_DRV_LOG(DEBUG, "Setting Fault LED to %d using pin cfg %d",
+	PMD_DRV_LOG(DEBUG, sc, "Setting Fault LED to %d using pin cfg %d",
 		    gpio_mode, pin_cfg);
 	elink_set_cfg_pin(sc, pin_cfg, gpio_mode);
 }
@@ -7994,7 +8002,8 @@ static void elink_set_sfp_module_fault_led(struct elink_params *params,
 					   uint8_t gpio_mode)
 {
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "Setting SFP+ module fault LED to %d", gpio_mode);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "Setting SFP+ module fault LED to %d", gpio_mode);
 	if (CHIP_IS_E3(sc)) {
 		/* Low ==> if SFP+ module is supported otherwise
 		 * High ==> if SFP+ module is not on the approved vendor list
@@ -8021,7 +8030,7 @@ static void elink_warpcore_hw_reset(__rte_unused struct elink_phy *phy,
 static void elink_power_sfp_module(struct elink_params *params,
 				   struct elink_phy *phy, uint8_t power)
 {
-	PMD_DRV_LOG(DEBUG, "Setting SFP+ power to %x", power);
+	PMD_DRV_LOG(DEBUG, params->sc, "Setting SFP+ power to %x", power);
 
 	switch (phy->type) {
 	case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BNX2X8727:
@@ -8107,16 +8116,16 @@ static elink_status_t elink_sfp_module_detection(struct elink_phy *phy,
 				       config));
 	/* Enabled transmitter by default */
 	elink_sfp_set_transmitter(params, phy, 1);
-	PMD_DRV_LOG(DEBUG, "SFP+ module plugged in/out detected on port %d",
+	PMD_DRV_LOG(DEBUG, sc, "SFP+ module plugged in/out detected on port %d",
 		    params->port);
 	/* Power up module */
 	elink_power_sfp_module(params, phy, 1);
 	if (elink_get_edc_mode(phy, params, &edc_mode) != 0) {
-		PMD_DRV_LOG(DEBUG, "Failed to get valid module type");
+		PMD_DRV_LOG(DEBUG, sc, "Failed to get valid module type");
 		return ELINK_STATUS_ERROR;
 	} else if (elink_verify_sfp_module(phy, params) != 0) {
 		/* Check SFP+ module compatibility */
-		PMD_DRV_LOG(DEBUG, "Module verification failed!!");
+		PMD_DRV_LOG(DEBUG, sc, "Module verification failed!!");
 		rc = ELINK_STATUS_ERROR;
 		/* Turn on fault module-detected led */
 		elink_set_sfp_module_fault_led(params,
@@ -8125,7 +8134,7 @@ static elink_status_t elink_sfp_module_detection(struct elink_phy *phy,
 		/* Check if need to power down the SFP+ module */
 		if ((val & PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_MASK) ==
 		    PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_POWER_DOWN) {
-			PMD_DRV_LOG(DEBUG, "Shutdown SFP+ module!!");
+			PMD_DRV_LOG(DEBUG, sc, "Shutdown SFP+ module!!");
 			elink_power_sfp_module(params, phy, 0);
 			return rc;
 		}
@@ -8166,7 +8175,7 @@ void elink_handle_module_detect_int(struct elink_params *params)
 	if (elink_get_mod_abs_int_cfg(sc, params->shmem_base,
 				      params->port, &gpio_num, &gpio_port) ==
 	    ELINK_STATUS_ERROR) {
-		PMD_DRV_LOG(DEBUG, "Failed to get MOD_ABS interrupt config");
+		PMD_DRV_LOG(DEBUG, sc, "Failed to get MOD_ABS interrupt config");
 		return;
 	}
 
@@ -8206,7 +8215,7 @@ void elink_handle_module_detect_int(struct elink_params *params)
 				}
 			}
 		} else {
-			PMD_DRV_LOG(DEBUG, "SFP+ module is not initialized");
+			PMD_DRV_LOG(DEBUG, sc, "SFP+ module is not initialized");
 		}
 	} else {
 		elink_cb_gpio_int_write(sc, gpio_num,
@@ -8251,7 +8260,7 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
 	uint8_t link_up = 0;
 	uint16_t val1, val2, rx_sd, pcs_status;
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "XGXS 8706/8726");
+	PMD_DRV_LOG(DEBUG, sc, "XGXS 8706/8726");
 	/* Clear RX Alarm */
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_RXSTAT, &val2);
 
@@ -8261,7 +8270,8 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
 	/* Clear LASI indication */
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val1);
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val2);
-	PMD_DRV_LOG(DEBUG, "8706/8726 LASI status 0x%x--> 0x%x", val1, val2);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "8706/8726 LASI status 0x%x--> 0x%x", val1, val2);
 
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_RX_SD, &rx_sd);
 	elink_cl45_read(sc, phy,
@@ -8269,7 +8279,7 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
 	elink_cl45_read(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_LINK_STATUS, &val2);
 	elink_cl45_read(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_LINK_STATUS, &val2);
 
-	PMD_DRV_LOG(DEBUG, "8706/8726 rx_sd 0x%x pcs_status 0x%x 1Gbps"
+	PMD_DRV_LOG(DEBUG, sc, "8706/8726 rx_sd 0x%x pcs_status 0x%x 1Gbps"
 		    " link_status 0x%x", rx_sd, pcs_status, val2);
 	/* Link is up if both bit 0 of pmd_rx_sd and bit 0 of pcs_status
 	 * are set, or if the autoneg bit 1 is set
@@ -8323,7 +8333,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
 			break;
 		DELAY(1000 * 10);
 	}
-	PMD_DRV_LOG(DEBUG, "XGXS 8706 is initialized after %d ms", cnt);
+	PMD_DRV_LOG(DEBUG, sc, "XGXS 8706 is initialized after %d ms", cnt);
 	if ((params->feature_config_flags &
 	     ELINK_FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED)) {
 		uint8_t i;
@@ -8337,14 +8347,14 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
 			val &= ~0x7;
 			/* Set control bits according to configuration */
 			val |= (phy->rx_preemphasis[i] & 0x7);
-			PMD_DRV_LOG(DEBUG, "Setting RX Equalizer to BNX2X8706"
+			PMD_DRV_LOG(DEBUG, sc, "Setting RX Equalizer to BNX2X8706"
 				    " reg 0x%x <-- val 0x%x", reg, val);
 			elink_cl45_write(sc, phy, MDIO_XS_DEVAD, reg, val);
 		}
 	}
 	/* Force speed */
 	if (phy->req_line_speed == ELINK_SPEED_10000) {
-		PMD_DRV_LOG(DEBUG, "XGXS 8706 force 10Gbps");
+		PMD_DRV_LOG(DEBUG, sc, "XGXS 8706 force 10Gbps");
 
 		elink_cl45_write(sc, phy,
 				 MDIO_PMA_DEVAD,
@@ -8358,7 +8368,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
 		/* Force 1Gbps using autoneg with 1G advertisement */
 
 		/* Allow CL37 through CL73 */
-		PMD_DRV_LOG(DEBUG, "XGXS 8706 AutoNeg");
+		PMD_DRV_LOG(DEBUG, sc, "XGXS 8706 AutoNeg");
 		elink_cl45_write(sc, phy,
 				 MDIO_AN_DEVAD, MDIO_AN_REG_CL37_CL73, 0x040c);
 
@@ -8393,7 +8403,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
 	& PORT_HW_CFG_TX_LASER_MASK;
 
 	if (tx_en_mode == PORT_HW_CFG_TX_LASER_GPIO0) {
-		PMD_DRV_LOG(DEBUG, "Enabling TXONOFF_PWRDN_DIS");
+		PMD_DRV_LOG(DEBUG, sc, "Enabling TXONOFF_PWRDN_DIS");
 		elink_cl45_read(sc, phy,
 				MDIO_PMA_DEVAD, MDIO_PMA_REG_DIGITAL_CTRL,
 				&tmp1);
@@ -8420,7 +8430,7 @@ static void elink_8726_config_loopback(struct elink_phy *phy,
 				       struct elink_params *params)
 {
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "PMA/PMD ext_phy_loopback: 8726");
+	PMD_DRV_LOG(DEBUG, sc, "PMA/PMD ext_phy_loopback: 8726");
 	elink_cl45_write(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 0x0001);
 }
 
@@ -8472,7 +8482,7 @@ static uint8_t elink_8726_read_status(struct elink_phy *phy,
 				MDIO_PMA_DEVAD, MDIO_PMA_REG_PHY_IDENTIFIER,
 				&val1);
 		if (val1 & (1 << 15)) {
-			PMD_DRV_LOG(DEBUG, "Tx is disabled");
+			PMD_DRV_LOG(DEBUG, sc, "Tx is disabled");
 			link_up = 0;
 			vars->line_speed = 0;
 		}
@@ -8485,7 +8495,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
 				      struct elink_vars *vars)
 {
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "Initializing BNX2X8726");
+	PMD_DRV_LOG(DEBUG, sc, "Initializing BNX2X8726");
 
 	elink_cl45_write(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 1 << 15);
 	elink_wait_reset_complete(sc, phy, params);
@@ -8500,7 +8510,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
 	elink_sfp_module_detection(phy, params);
 
 	if (phy->req_line_speed == ELINK_SPEED_1000) {
-		PMD_DRV_LOG(DEBUG, "Setting 1G force");
+		PMD_DRV_LOG(DEBUG, sc, "Setting 1G force");
 		elink_cl45_write(sc, phy,
 				 MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 0x40);
 		elink_cl45_write(sc, phy,
@@ -8515,7 +8525,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
 		   ((phy->speed_cap_mask &
 		     PORT_HW_CFG_SPEED_CAPABILITY_D0_10G) !=
 		    PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) {
-		PMD_DRV_LOG(DEBUG, "Setting 1G clause37");
+		PMD_DRV_LOG(DEBUG, sc, "Setting 1G clause37");
 		/* Set Flow control */
 		elink_ext_phy_set_pause(params, phy, vars);
 		elink_cl45_write(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_ADV, 0x20);
@@ -8543,7 +8553,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
 	/* Set TX PreEmphasis if needed */
 	if ((params->feature_config_flags &
 	     ELINK_FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED)) {
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "Setting TX_CTRL1 0x%x, TX_CTRL2 0x%x",
 			    phy->tx_preemphasis[0], phy->tx_preemphasis[1]);
 		elink_cl45_write(sc, phy,
@@ -8565,7 +8575,7 @@ static void elink_8726_link_reset(struct elink_phy *phy,
 				  struct elink_params *params)
 {
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "elink_8726_link_reset port %d", params->port);
+	PMD_DRV_LOG(DEBUG, sc, "elink_8726_link_reset port %d", params->port);
 	/* Set serial boot control for external load */
 	elink_cl45_write(sc, phy,
 			 MDIO_PMA_DEVAD, MDIO_PMA_REG_GEN_CTRL, 0x0001);
@@ -8638,14 +8648,14 @@ static void elink_8727_config_speed(struct elink_phy *phy,
 	/* Set option 1G speed */
 	if ((phy->req_line_speed == ELINK_SPEED_1000) ||
 	    (phy->media_type == ELINK_ETH_PHY_SFP_1G_FIBER)) {
-		PMD_DRV_LOG(DEBUG, "Setting 1G force");
+		PMD_DRV_LOG(DEBUG, sc, "Setting 1G force");
 		elink_cl45_write(sc, phy,
 				 MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 0x40);
 		elink_cl45_write(sc, phy,
 				 MDIO_PMA_DEVAD, MDIO_PMA_REG_10G_CTRL2, 0xD);
 		elink_cl45_read(sc, phy,
 				MDIO_PMA_DEVAD, MDIO_PMA_REG_10G_CTRL2, &tmp1);
-		PMD_DRV_LOG(DEBUG, "1.7 = 0x%x", tmp1);
+		PMD_DRV_LOG(DEBUG, sc, "1.7 = 0x%x", tmp1);
 		/* Power down the XAUI until link is up in case of dual-media
 		 * and 1G
 		 */
@@ -8665,7 +8675,7 @@ static void elink_8727_config_speed(struct elink_phy *phy,
 		     PORT_HW_CFG_SPEED_CAPABILITY_D0_10G) !=
 		    PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) {
 
-		PMD_DRV_LOG(DEBUG, "Setting 1G clause37");
+		PMD_DRV_LOG(DEBUG, sc, "Setting 1G clause37");
 		elink_cl45_write(sc, phy,
 				 MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL, 0);
 		elink_cl45_write(sc, phy,
@@ -8699,7 +8709,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
 
 	elink_wait_reset_complete(sc, phy, params);
 
-	PMD_DRV_LOG(DEBUG, "Initializing BNX2X8727");
+	PMD_DRV_LOG(DEBUG, sc, "Initializing BNX2X8727");
 
 	elink_8727_specific_func(phy, params, ELINK_PHY_INIT);
 	/* Initially configure MOD_ABS to interrupt when module is
@@ -8732,7 +8742,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
 	/* Set TX PreEmphasis if needed */
 	if ((params->feature_config_flags &
 	     ELINK_FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED)) {
-		PMD_DRV_LOG(DEBUG, "Setting TX_CTRL1 0x%x, TX_CTRL2 0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "Setting TX_CTRL1 0x%x, TX_CTRL2 0x%x",
 			    phy->tx_preemphasis[0], phy->tx_preemphasis[1]);
 		elink_cl45_write(sc, phy,
 				 MDIO_PMA_DEVAD, MDIO_PMA_REG_8727_TX_CTRL1,
@@ -8754,7 +8764,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
 
 	if (tx_en_mode == PORT_HW_CFG_TX_LASER_GPIO0) {
 
-		PMD_DRV_LOG(DEBUG, "Enabling TXONOFF_PWRDN_DIS");
+		PMD_DRV_LOG(DEBUG, sc, "Enabling TXONOFF_PWRDN_DIS");
 		elink_cl45_read(sc, phy,
 				MDIO_PMA_DEVAD, MDIO_PMA_REG_8727_OPT_CFG_REG,
 				&tmp2);
@@ -8786,7 +8796,7 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
 	if (mod_abs & (1 << 8)) {
 
 		/* Module is absent */
-		PMD_DRV_LOG(DEBUG, "MOD_ABS indication show module is absent");
+		PMD_DRV_LOG(DEBUG, sc, "MOD_ABS indication show module is absent");
 		phy->media_type = ELINK_ETH_PHY_NOT_PRESENT;
 		/* 1. Set mod_abs to detect next module
 		 *    presence event
@@ -8811,7 +8821,7 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
 
 	} else {
 		/* Module is present */
-		PMD_DRV_LOG(DEBUG, "MOD_ABS indication show module is present");
+		PMD_DRV_LOG(DEBUG, sc, "MOD_ABS indication show module is present");
 		/* First disable transmitter, and if the module is ok, the
 		 * module_detection will enable it
 		 * 1. Set mod_abs to detect next module absent event ( bit 8)
@@ -8842,14 +8852,14 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
 		if (elink_wait_for_sfp_module_initialized(phy, params) == 0) {
 			elink_sfp_module_detection(phy, params);
 		} else {
-			PMD_DRV_LOG(DEBUG, "SFP+ module is not initialized");
+			PMD_DRV_LOG(DEBUG, sc, "SFP+ module is not initialized");
 		}
 
 		/* Reconfigure link speed based on module type limitations */
 		elink_8727_config_speed(phy, params);
 	}
 
-	PMD_DRV_LOG(DEBUG, "8727 RX_ALARM_STATUS 0x%x", rx_alarm_status);
+	PMD_DRV_LOG(DEBUG, sc, "8727 RX_ALARM_STATUS 0x%x", rx_alarm_status);
 	/* No need to check link status in case of module plugged in/out */
 }
 
@@ -8872,14 +8882,14 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
 	elink_cl45_read(sc, phy,
 			MDIO_PMA_DEVAD, MDIO_PMA_LASI_RXSTAT, &rx_alarm_status);
 	vars->line_speed = 0;
-	PMD_DRV_LOG(DEBUG, "8727 RX_ALARM_STATUS  0x%x", rx_alarm_status);
+	PMD_DRV_LOG(DEBUG, sc, "8727 RX_ALARM_STATUS  0x%x", rx_alarm_status);
 
 	elink_sfp_mask_fault(sc, phy, MDIO_PMA_LASI_TXSTAT,
 			     MDIO_PMA_LASI_TXCTRL);
 
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val1);
 
-	PMD_DRV_LOG(DEBUG, "8727 LASI status 0x%x", val1);
+	PMD_DRV_LOG(DEBUG, sc, "8727 LASI status 0x%x", val1);
 
 	/* Clear MSG-OUT */
 	elink_cl45_read(sc, phy,
@@ -8897,7 +8907,7 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
 		if ((val1 & (1 << 8)) == 0) {
 			if (!CHIP_IS_E1x(sc))
 				oc_port = SC_PATH(sc) + (params->port << 1);
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "8727 Power fault has been detected on port %d",
 				    oc_port);
 			elink_cb_event_log(sc, ELINK_LOG_ID_OVER_CURRENT, oc_port);	//"Error: Power fault on Port %d has "
@@ -8940,10 +8950,10 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
 	}
 
 	if (!(phy->flags & ELINK_FLAGS_SFP_NOT_APPROVED)) {
-		PMD_DRV_LOG(DEBUG, "Enabling 8727 TX laser");
+		PMD_DRV_LOG(DEBUG, sc, "Enabling 8727 TX laser");
 		elink_sfp_set_transmitter(params, phy, 1);
 	} else {
-		PMD_DRV_LOG(DEBUG, "Tx is disabled");
+		PMD_DRV_LOG(DEBUG, sc, "Tx is disabled");
 		return 0;
 	}
 
@@ -8957,16 +8967,16 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
 	if ((link_status & (1 << 2)) && (!(link_status & (1 << 15)))) {
 		link_up = 1;
 		vars->line_speed = ELINK_SPEED_10000;
-		PMD_DRV_LOG(DEBUG, "port %x: External link up in 10G",
+		PMD_DRV_LOG(DEBUG, sc, "port %x: External link up in 10G",
 			    params->port);
 	} else if ((link_status & (1 << 0)) && (!(link_status & (1 << 13)))) {
 		link_up = 1;
 		vars->line_speed = ELINK_SPEED_1000;
-		PMD_DRV_LOG(DEBUG, "port %x: External link up in 1G",
+		PMD_DRV_LOG(DEBUG, sc, "port %x: External link up in 1G",
 			    params->port);
 	} else {
 		link_up = 0;
-		PMD_DRV_LOG(DEBUG, "port %x: External link is down",
+		PMD_DRV_LOG(DEBUG, sc, "port %x: External link is down",
 			    params->port);
 	}
 
@@ -8986,7 +8996,7 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
 	if (link_up) {
 		elink_ext_phy_resolve_fc(phy, params, vars);
 		vars->duplex = DUPLEX_FULL;
-		PMD_DRV_LOG(DEBUG, "duplex = 0x%x", vars->duplex);
+		PMD_DRV_LOG(DEBUG, sc, "duplex = 0x%x", vars->duplex);
 	}
 
 	if ((ELINK_DUAL_MEDIA(params)) &&
@@ -9058,7 +9068,7 @@ static void elink_save_848xx_spirom_version(struct elink_phy *phy,
 			DELAY(5);
 		}
 		if (cnt == 100) {
-			PMD_DRV_LOG(DEBUG, "Unable to read 848xx "
+			PMD_DRV_LOG(DEBUG, sc, "Unable to read 848xx "
 				    "phy fw version(1)");
 			elink_save_spirom_version(sc, port, 0, phy->ver_addr);
 			return;
@@ -9075,7 +9085,7 @@ static void elink_save_848xx_spirom_version(struct elink_phy *phy,
 			DELAY(5);
 		}
 		if (cnt == 100) {
-			PMD_DRV_LOG(DEBUG, "Unable to read 848xx phy fw "
+			PMD_DRV_LOG(DEBUG, sc, "Unable to read 848xx phy fw "
 				    "version(2)");
 			elink_save_spirom_version(sc, port, 0, phy->ver_addr);
 			return;
@@ -9188,7 +9198,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
 		autoneg_val |= (1 << 9 | 1 << 12);
 		if (phy->req_duplex == DUPLEX_FULL)
 			an_1000_val |= (1 << 9);
-		PMD_DRV_LOG(DEBUG, "Advertising 1G");
+		PMD_DRV_LOG(DEBUG, sc, "Advertising 1G");
 	} else
 		an_1000_val &= ~((1 << 8) | (1 << 9));
 
@@ -9204,7 +9214,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
 			 */
 			autoneg_val |= (1 << 9 | 1 << 12);
 			an_10_100_val |= (1 << 8);
-			PMD_DRV_LOG(DEBUG, "Advertising 100M-FD");
+			PMD_DRV_LOG(DEBUG, sc, "Advertising 100M-FD");
 		}
 
 		if (phy->speed_cap_mask &
@@ -9213,7 +9223,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
 			 */
 			autoneg_val |= (1 << 9 | 1 << 12);
 			an_10_100_val |= (1 << 7);
-			PMD_DRV_LOG(DEBUG, "Advertising 100M-HD");
+			PMD_DRV_LOG(DEBUG, sc, "Advertising 100M-HD");
 		}
 
 		if ((phy->speed_cap_mask &
@@ -9221,7 +9231,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
 		    (phy->supported & ELINK_SUPPORTED_10baseT_Full)) {
 			an_10_100_val |= (1 << 6);
 			autoneg_val |= (1 << 9 | 1 << 12);
-			PMD_DRV_LOG(DEBUG, "Advertising 10M-FD");
+			PMD_DRV_LOG(DEBUG, sc, "Advertising 10M-FD");
 		}
 
 		if ((phy->speed_cap_mask &
@@ -9229,7 +9239,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
 		    (phy->supported & ELINK_SUPPORTED_10baseT_Half)) {
 			an_10_100_val |= (1 << 5);
 			autoneg_val |= (1 << 9 | 1 << 12);
-			PMD_DRV_LOG(DEBUG, "Advertising 10M-HD");
+			PMD_DRV_LOG(DEBUG, sc, "Advertising 10M-HD");
 		}
 	}
 
@@ -9244,7 +9254,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
 				 (1 << 15 | 1 << 9 | 7 << 0));
 		/* The PHY needs this set even for forced link. */
 		an_10_100_val |= (1 << 8) | (1 << 7);
-		PMD_DRV_LOG(DEBUG, "Setting 100M force");
+		PMD_DRV_LOG(DEBUG, sc, "Setting 100M force");
 	}
 	if ((phy->req_line_speed == ELINK_SPEED_10) &&
 	    (phy->supported &
@@ -9253,7 +9263,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
 		elink_cl45_write(sc, phy,
 				 MDIO_AN_DEVAD, MDIO_AN_REG_8481_AUX_CTRL,
 				 (1 << 15 | 1 << 9 | 7 << 0));
-		PMD_DRV_LOG(DEBUG, "Setting 10M force");
+		PMD_DRV_LOG(DEBUG, sc, "Setting 10M force");
 	}
 
 	elink_cl45_write(sc, phy,
@@ -9277,7 +9287,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
 	     (phy->speed_cap_mask &
 	      PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) ||
 	    (phy->req_line_speed == ELINK_SPEED_10000)) {
-		PMD_DRV_LOG(DEBUG, "Advertising 10G");
+		PMD_DRV_LOG(DEBUG, sc, "Advertising 10G");
 		/* Restart autoneg for 10G */
 
 		elink_cl45_read_or_write(sc, phy,
@@ -9333,7 +9343,7 @@ static elink_status_t elink_84833_cmd_hdlr(struct elink_phy *phy,
 		DELAY(1000 * 1);
 	}
 	if (idx >= PHY84833_CMDHDLR_WAIT) {
-		PMD_DRV_LOG(DEBUG, "FW cmd: FW not ready.");
+		PMD_DRV_LOG(DEBUG, sc, "FW cmd: FW not ready.");
 		return ELINK_STATUS_ERROR;
 	}
 
@@ -9355,7 +9365,7 @@ static elink_status_t elink_84833_cmd_hdlr(struct elink_phy *phy,
 	}
 	if ((idx >= PHY84833_CMDHDLR_WAIT) ||
 	    (val == PHY84833_STATUS_CMD_COMPLETE_ERROR)) {
-		PMD_DRV_LOG(DEBUG, "FW cmd failed.");
+		PMD_DRV_LOG(DEBUG, sc, "FW cmd failed.");
 		return ELINK_STATUS_ERROR;
 	}
 	/* Gather returning data */
@@ -9397,7 +9407,7 @@ static elink_status_t elink_84833_pair_swap_cfg(struct elink_phy *phy,
 				      PHY84833_CMD_SET_PAIR_SWAP, data,
 				      PHY84833_CMDHDLR_MAX_ARGS);
 	if (status == ELINK_STATUS_OK) {
-		PMD_DRV_LOG(DEBUG, "Pairswap OK, val=0x%x", data[1]);
+		PMD_DRV_LOG(DEBUG, sc, "Pairswap OK, val=0x%x", data[1]);
 	}
 
 	return status;
@@ -9473,7 +9483,8 @@ static void elink_84833_hw_reset_phy(struct elink_phy *phy,
 	elink_cb_gpio_mult_write(sc, reset_gpios,
 				 MISC_REGISTERS_GPIO_OUTPUT_LOW);
 	DELAY(10);
-	PMD_DRV_LOG(DEBUG, "84833 hw reset on pin values 0x%x", reset_gpios);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "84833 hw reset on pin values 0x%x", reset_gpios);
 }
 
 static elink_status_t elink_8483x_disable_eee(struct elink_phy *phy,
@@ -9483,13 +9494,13 @@ static elink_status_t elink_8483x_disable_eee(struct elink_phy *phy,
 	elink_status_t rc;
 	uint16_t cmd_args = 0;
 
-	PMD_DRV_LOG(DEBUG, "Don't Advertise 10GBase-T EEE");
+	PMD_DRV_LOG(DEBUG, params->sc, "Don't Advertise 10GBase-T EEE");
 
 	/* Prevent Phy from working in EEE and advertising it */
 	rc = elink_84833_cmd_hdlr(phy, params,
 				  PHY84833_CMD_SET_EEE_MODE, &cmd_args, 1);
 	if (rc != ELINK_STATUS_OK) {
-		PMD_DRV_LOG(DEBUG, "EEE disable failed.");
+		PMD_DRV_LOG(DEBUG, params->sc, "EEE disable failed.");
 		return rc;
 	}
 
@@ -9506,7 +9517,7 @@ static elink_status_t elink_8483x_enable_eee(struct elink_phy *phy,
 	rc = elink_84833_cmd_hdlr(phy, params,
 				  PHY84833_CMD_SET_EEE_MODE, &cmd_args, 1);
 	if (rc != ELINK_STATUS_OK) {
-		PMD_DRV_LOG(DEBUG, "EEE enable failed.");
+		PMD_DRV_LOG(DEBUG, params->sc, "EEE enable failed.");
 		return rc;
 	}
 
@@ -9599,7 +9610,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
 
 	elink_cl45_write(sc, phy, MDIO_CTL_DEVAD,
 			 MDIO_CTL_REG_84823_MEDIA, val);
-	PMD_DRV_LOG(DEBUG, "Multi_phy config = 0x%x, Media control = 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "Multi_phy config = 0x%x, Media control = 0x%x",
 		    params->multi_phy_config, val);
 
 	if ((phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BNX2X84833) ||
@@ -9615,7 +9626,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
 					  PHY84833_CMD_SET_EEE_MODE, cmd_args,
 					  PHY84833_CMDHDLR_MAX_ARGS);
 		if (rc != ELINK_STATUS_OK) {
-			PMD_DRV_LOG(DEBUG, "Cfg AutogrEEEn failed.");
+			PMD_DRV_LOG(DEBUG, sc, "Cfg AutogrEEEn failed.");
 		}
 	}
 	if (initialize) {
@@ -9652,7 +9663,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
 	    elink_eee_has_cap(params)) {
 		rc = elink_eee_initial_config(params, vars, SHMEM_EEE_10G_ADV);
 		if (rc != ELINK_STATUS_OK) {
-			PMD_DRV_LOG(DEBUG, "Failed to configure EEE timers");
+			PMD_DRV_LOG(DEBUG, sc, "Failed to configure EEE timers");
 			elink_8483x_disable_eee(phy, params, vars);
 			return rc;
 		}
@@ -9665,7 +9676,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
 		else
 			rc = elink_8483x_disable_eee(phy, params, vars);
 		if (rc != ELINK_STATUS_OK) {
-			PMD_DRV_LOG(DEBUG, "Failed to set EEE advertisement");
+			PMD_DRV_LOG(DEBUG, sc, "Failed to set EEE advertisement");
 			return rc;
 		}
 	} else {
@@ -9697,7 +9708,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
 	elink_cl45_read(sc, phy, MDIO_AN_DEVAD, 0xFFFA, &val1);
 	elink_cl45_read(sc, phy,
 			MDIO_PMA_DEVAD, MDIO_PMA_REG_8481_PMD_SIGNAL, &val2);
-	PMD_DRV_LOG(DEBUG, "BNX2X848xx: PMD_SIGNAL 1.a811 = 0x%x", val2);
+	PMD_DRV_LOG(DEBUG, sc, "BNX2X848xx: PMD_SIGNAL 1.a811 = 0x%x", val2);
 
 	/* Check link 10G */
 	if (val2 & (1 << 11)) {
@@ -9719,7 +9730,8 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
 				MDIO_AN_REG_8481_EXPANSION_REG_RD_RW,
 				&legacy_status);
 
-		PMD_DRV_LOG(DEBUG, "Legacy speed status = 0x%x", legacy_status);
+		PMD_DRV_LOG(DEBUG, sc,
+			    "Legacy speed status = 0x%x", legacy_status);
 		link_up = ((legacy_status & (1 << 11)) == (1 << 11));
 		legacy_speed = (legacy_status & (3 << 9));
 		if (legacy_speed == (0 << 9))
@@ -9749,7 +9761,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
 			else
 				vars->duplex = DUPLEX_HALF;
 
-			PMD_DRV_LOG(DEBUG,
+			PMD_DRV_LOG(DEBUG, sc,
 				    "Link is up in %dMbps, is_duplex_full= %d",
 				    vars->line_speed,
 				    (vars->duplex == DUPLEX_FULL));
@@ -9771,7 +9783,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
 		}
 	}
 	if (link_up) {
-		PMD_DRV_LOG(DEBUG, "BNX2X848x3: link speed is %d",
+		PMD_DRV_LOG(DEBUG, sc, "BNX2X848x3: link speed is %d",
 			    vars->line_speed);
 		elink_ext_phy_resolve_fc(phy, params, vars);
 
@@ -9888,7 +9900,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
 	switch (mode) {
 	case ELINK_LED_MODE_OFF:
 
-		PMD_DRV_LOG(DEBUG, "Port 0x%x: LED MODE OFF", port);
+		PMD_DRV_LOG(DEBUG, sc, "Port 0x%x: LED MODE OFF", port);
 
 		if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) ==
 		    SHARED_HW_CFG_LED_EXTPHY1) {
@@ -9918,7 +9930,8 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
 		break;
 	case ELINK_LED_MODE_FRONT_PANEL_OFF:
 
-		PMD_DRV_LOG(DEBUG, "Port 0x%x: LED MODE FRONT PANEL OFF", port);
+		PMD_DRV_LOG(DEBUG, sc,
+			    "Port 0x%x: LED MODE FRONT PANEL OFF", port);
 
 		if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) ==
 		    SHARED_HW_CFG_LED_EXTPHY1) {
@@ -9968,7 +9981,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
 		break;
 	case ELINK_LED_MODE_ON:
 
-		PMD_DRV_LOG(DEBUG, "Port 0x%x: LED MODE ON", port);
+		PMD_DRV_LOG(DEBUG, sc, "Port 0x%x: LED MODE ON", port);
 
 		if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) ==
 		    SHARED_HW_CFG_LED_EXTPHY1) {
@@ -10028,7 +10041,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
 
 	case ELINK_LED_MODE_OPER:
 
-		PMD_DRV_LOG(DEBUG, "Port 0x%x: LED MODE OPER", port);
+		PMD_DRV_LOG(DEBUG, sc, "Port 0x%x: LED MODE OPER", port);
 
 		if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) ==
 		    SHARED_HW_CFG_LED_EXTPHY1) {
@@ -10043,7 +10056,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
 			      >>
 			      MDIO_PMA_REG_8481_LINK_SIGNAL_LED4_ENABLE_SHIFT))
 			{
-				PMD_DRV_LOG(DEBUG, "Setting LINK_SIGNAL");
+				PMD_DRV_LOG(DEBUG, sc, "Setting LINK_SIGNAL");
 				elink_cl45_write(sc, phy,
 						 MDIO_PMA_DEVAD,
 						 MDIO_PMA_REG_8481_LINK_SIGNAL,
@@ -10156,7 +10169,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
 	uint16_t autoneg_val, an_1000_val, an_10_100_val, fc_val, temp;
 	uint32_t cfg_pin;
 
-	PMD_DRV_LOG(DEBUG, "54618SE cfg init");
+	PMD_DRV_LOG(DEBUG, sc, "54618SE cfg init");
 	DELAY(1000 * 1);
 
 	/* This works with E3 only, no need to check the chip
@@ -10229,7 +10242,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
 		autoneg_val |= (1 << 9 | 1 << 12);
 		if (phy->req_duplex == DUPLEX_FULL)
 			an_1000_val |= (1 << 9);
-		PMD_DRV_LOG(DEBUG, "Advertising 1G");
+		PMD_DRV_LOG(DEBUG, sc, "Advertising 1G");
 	} else
 		an_1000_val &= ~((1 << 8) | (1 << 9));
 
@@ -10242,25 +10255,25 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
 		    PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF) {
 			an_10_100_val |= (1 << 5);
 			autoneg_val |= (1 << 9 | 1 << 12);
-			PMD_DRV_LOG(DEBUG, "Advertising 10M-HD");
+			PMD_DRV_LOG(DEBUG, sc, "Advertising 10M-HD");
 		}
 		if (phy->speed_cap_mask &
 		    PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF) {
 			an_10_100_val |= (1 << 6);
 			autoneg_val |= (1 << 9 | 1 << 12);
-			PMD_DRV_LOG(DEBUG, "Advertising 10M-FD");
+			PMD_DRV_LOG(DEBUG, sc, "Advertising 10M-FD");
 		}
 		if (phy->speed_cap_mask &
 		    PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF) {
 			an_10_100_val |= (1 << 7);
 			autoneg_val |= (1 << 9 | 1 << 12);
-			PMD_DRV_LOG(DEBUG, "Advertising 100M-HD");
+			PMD_DRV_LOG(DEBUG, sc, "Advertising 100M-HD");
 		}
 		if (phy->speed_cap_mask &
 		    PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL) {
 			an_10_100_val |= (1 << 8);
 			autoneg_val |= (1 << 9 | 1 << 12);
-			PMD_DRV_LOG(DEBUG, "Advertising 100M-FD");
+			PMD_DRV_LOG(DEBUG, sc, "Advertising 100M-FD");
 		}
 	}
 
@@ -10269,12 +10282,12 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
 		autoneg_val |= (1 << 13);
 		/* Enabled AUTO-MDIX when autoneg is disabled */
 		elink_cl22_write(sc, phy, 0x18, (1 << 15 | 1 << 9 | 7 << 0));
-		PMD_DRV_LOG(DEBUG, "Setting 100M force");
+		PMD_DRV_LOG(DEBUG, sc, "Setting 100M force");
 	}
 	if (phy->req_line_speed == ELINK_SPEED_10) {
 		/* Enabled AUTO-MDIX when autoneg is disabled */
 		elink_cl22_write(sc, phy, 0x18, (1 << 15 | 1 << 9 | 7 << 0));
-		PMD_DRV_LOG(DEBUG, "Setting 10M force");
+		PMD_DRV_LOG(DEBUG, sc, "Setting 10M force");
 	}
 
 	if ((phy->flags & ELINK_FLAGS_EEE) && elink_eee_has_cap(params)) {
@@ -10289,7 +10302,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
 
 		rc = elink_eee_initial_config(params, vars, SHMEM_EEE_1G_ADV);
 		if (rc != ELINK_STATUS_OK) {
-			PMD_DRV_LOG(DEBUG, "Failed to configure EEE timers");
+			PMD_DRV_LOG(DEBUG, sc, "Failed to configure EEE timers");
 			elink_eee_disable(phy, params, vars);
 		} else if ((params->eee_mode & ELINK_EEE_MODE_ADV_LPI) &&
 			   (phy->req_duplex == DUPLEX_FULL) &&
@@ -10303,7 +10316,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
 			elink_eee_advertise(phy, params, vars,
 					    SHMEM_EEE_1G_ADV);
 		} else {
-			PMD_DRV_LOG(DEBUG, "Don't Advertise 1GBase-T EEE");
+			PMD_DRV_LOG(DEBUG, sc, "Don't Advertise 1GBase-T EEE");
 			elink_eee_disable(phy, params, vars);
 		}
 	} else {
@@ -10315,10 +10328,10 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
 			if (params->feature_config_flags &
 			    ELINK_FEATURE_CONFIG_AUTOGREEEN_ENABLED) {
 				temp = 6;
-				PMD_DRV_LOG(DEBUG, "Enabling Auto-GrEEEn");
+				PMD_DRV_LOG(DEBUG, sc, "Enabling Auto-GrEEEn");
 			} else {
 				temp = 0;
-				PMD_DRV_LOG(DEBUG, "Don't Adv. EEE");
+				PMD_DRV_LOG(DEBUG, sc, "Don't Adv. EEE");
 			}
 			elink_cl45_write(sc, phy, MDIO_AN_DEVAD,
 					 MDIO_AN_REG_EEE_ADV, temp);
@@ -10346,7 +10359,7 @@ static void elink_5461x_set_link_led(struct elink_phy *phy,
 	elink_cl22_read(sc, phy, MDIO_REG_GPHY_SHADOW, &temp);
 	temp &= 0xff00;
 
-	PMD_DRV_LOG(DEBUG, "54618x set link led (mode=%x)", mode);
+	PMD_DRV_LOG(DEBUG, sc, "54618x set link led (mode=%x)", mode);
 	switch (mode) {
 	case ELINK_LED_MODE_FRONT_PANEL_OFF:
 	case ELINK_LED_MODE_OFF:
@@ -10404,7 +10417,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
 
 	/* Get speed operation status */
 	elink_cl22_read(sc, phy, MDIO_REG_GPHY_AUX_STATUS, &legacy_status);
-	PMD_DRV_LOG(DEBUG, "54618SE read_status: 0x%x", legacy_status);
+	PMD_DRV_LOG(DEBUG, sc, "54618SE read_status: 0x%x", legacy_status);
 
 	/* Read status to clear the PHY interrupt. */
 	elink_cl22_read(sc, phy, MDIO_REG_INTR_STATUS, &val);
@@ -10436,7 +10449,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
 		} else		/* Should not happen */
 			vars->line_speed = 0;
 
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "Link is up in %dMbps, is_duplex_full= %d",
 			    vars->line_speed, (vars->duplex == DUPLEX_FULL));
 
@@ -10450,7 +10463,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
 			vars->link_status |=
 			    LINK_STATUS_PARALLEL_DETECTION_USED;
 
-		PMD_DRV_LOG(DEBUG, "BNX2X54618SE: link speed is %d",
+		PMD_DRV_LOG(DEBUG, sc, "BNX2X54618SE: link speed is %d",
 			    vars->line_speed);
 
 		elink_ext_phy_resolve_fc(phy, params, vars);
@@ -10498,7 +10511,7 @@ static void elink_54618se_config_loopback(struct elink_phy *phy,
 	uint16_t val;
 	uint32_t umac_base = params->port ? GRCBASE_UMAC1 : GRCBASE_UMAC0;
 
-	PMD_DRV_LOG(DEBUG, "2PMA/PMD ext_phy_loopback: 54618se");
+	PMD_DRV_LOG(DEBUG, sc, "2PMA/PMD ext_phy_loopback: 54618se");
 
 	/* Enable master/slave manual mmode and set to master */
 	/* mii write 9 [bits set 11 12] */
@@ -10549,7 +10562,7 @@ static uint8_t elink_7101_config_init(struct elink_phy *phy,
 {
 	uint16_t fw_ver1, fw_ver2, val;
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "Setting the SFX7101 LASI indication");
+	PMD_DRV_LOG(DEBUG, sc, "Setting the SFX7101 LASI indication");
 
 	/* Restore normal power mode */
 	elink_cb_gpio_write(sc, MISC_REGISTERS_GPIO_2,
@@ -10559,7 +10572,7 @@ static uint8_t elink_7101_config_init(struct elink_phy *phy,
 	elink_wait_reset_complete(sc, phy, params);
 
 	elink_cl45_write(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_CTRL, 0x1);
-	PMD_DRV_LOG(DEBUG, "Setting the SFX7101 LED to blink on traffic");
+	PMD_DRV_LOG(DEBUG, sc, "Setting the SFX7101 LED to blink on traffic");
 	elink_cl45_write(sc, phy,
 			 MDIO_PMA_DEVAD, MDIO_PMA_REG_7107_LED_CNTL, (1 << 3));
 
@@ -10590,10 +10603,10 @@ static uint8_t elink_7101_read_status(struct elink_phy *phy,
 	uint16_t val1, val2;
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val2);
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val1);
-	PMD_DRV_LOG(DEBUG, "10G-base-T LASI status 0x%x->0x%x", val2, val1);
+	PMD_DRV_LOG(DEBUG, sc, "10G-base-T LASI status 0x%x->0x%x", val2, val1);
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_STATUS, &val2);
 	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_STATUS, &val1);
-	PMD_DRV_LOG(DEBUG, "10G-base-T PMA status 0x%x->0x%x", val2, val1);
+	PMD_DRV_LOG(DEBUG, sc, "10G-base-T PMA status 0x%x->0x%x", val2, val1);
 	link_up = ((val1 & 4) == 4);
 	/* If link is up print the AN outcome of the SFX7101 PHY */
 	if (link_up) {
@@ -10602,7 +10615,7 @@ static uint8_t elink_7101_read_status(struct elink_phy *phy,
 				&val2);
 		vars->line_speed = ELINK_SPEED_10000;
 		vars->duplex = DUPLEX_FULL;
-		PMD_DRV_LOG(DEBUG, "SFX7101 AN status 0x%x->Master=%x",
+		PMD_DRV_LOG(DEBUG, sc, "SFX7101 AN status 0x%x->Master=%x",
 			    val2, (val2 & (1 << 14)));
 		elink_ext_phy_10G_an_resolve(sc, phy, vars);
 		elink_ext_phy_resolve_fc(phy, params, vars);
@@ -11209,7 +11222,7 @@ static uint32_t elink_get_ext_phy_config(struct bnx2x_softc *sc,
 						 external_phy_config2));
 		break;
 	default:
-		PMD_DRV_LOG(DEBUG, "Invalid phy_index %d", phy_index);
+		PMD_DRV_LOG(DEBUG, sc, "Invalid phy_index %d", phy_index);
 		return ELINK_STATUS_ERROR;
 	}
 
@@ -11232,7 +11245,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
 	    (REG_RD(sc, MISC_REG_CHIP_NUM) << 16) |
 	    ((REG_RD(sc, MISC_REG_CHIP_REV) & 0xf) << 12);
 
-	PMD_DRV_LOG(DEBUG, ":chip_id = 0x%x", chip_id);
+	PMD_DRV_LOG(DEBUG, sc, ":chip_id = 0x%x", chip_id);
 	if (USES_WARPCORE(sc)) {
 		uint32_t serdes_net_if;
 		phy_addr = REG_RD(sc, MISC_REG_WC0_CTRL_PHY_ADDR);
@@ -11309,7 +11322,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
 			phy->flags &= ~ELINK_FLAGS_TX_ERROR_CHECK;
 			break;
 		default:
-			PMD_DRV_LOG(DEBUG, "Unknown WC interface type 0x%x",
+			PMD_DRV_LOG(DEBUG, sc, "Unknown WC interface type 0x%x",
 				    serdes_net_if);
 			break;
 		}
@@ -11337,7 +11350,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
 			*phy = phy_xgxs;
 			break;
 		default:
-			PMD_DRV_LOG(DEBUG, "Invalid switch_cfg");
+			PMD_DRV_LOG(DEBUG, sc, "Invalid switch_cfg");
 			return ELINK_STATUS_ERROR;
 		}
 	}
@@ -11350,7 +11363,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
 	else
 		phy->def_md_devad = ELINK_DEFAULT_PHY_DEV_ADDR;
 
-	PMD_DRV_LOG(DEBUG, "Internal phy port=%d, addr=0x%x, mdio_ctl=0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "Internal phy port=%d, addr=0x%x, mdio_ctl=0x%x",
 		    port, phy->addr, phy->mdio_ctrl);
 
 	elink_populate_preemphasis(sc, shmem_base, phy, port, ELINK_INT_PHY);
@@ -11477,9 +11490,9 @@ static elink_status_t elink_populate_ext_phy(struct bnx2x_softc *sc,
 					    ELINK_SUPPORTED_100baseT_Full);
 	}
 
-	PMD_DRV_LOG(DEBUG, "phy_type 0x%x port %d found in index %d",
+	PMD_DRV_LOG(DEBUG, sc, "phy_type 0x%x port %d found in index %d",
 		    phy_type, port, phy_index);
-	PMD_DRV_LOG(DEBUG, "             addr=0x%x, mdio_ctl=0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "             addr=0x%x, mdio_ctl=0x%x",
 		    phy->addr, phy->mdio_ctrl);
 	return ELINK_STATUS_OK;
 }
@@ -11528,7 +11541,7 @@ static void elink_phy_def_cfg(struct elink_params *params,
 							 speed_capability_mask));
 	}
 
-	PMD_DRV_LOG(DEBUG,
+	PMD_DRV_LOG(DEBUG, sc,
 		    "Default config phy idx %x cfg 0x%x speed_cap_mask 0x%x",
 		    phy_index, link_config, phy->speed_cap_mask);
 
@@ -11617,7 +11630,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
 	struct bnx2x_softc *sc = params->sc;
 	struct elink_phy *phy;
 	params->num_phys = 0;
-	PMD_DRV_LOG(DEBUG, "Begin phy probe");
+	PMD_DRV_LOG(DEBUG, sc, "Begin phy probe");
 
 	phy_config_swapped = params->multi_phy_config &
 	    PORT_HW_CFG_PHY_SWAPPED_ENABLED;
@@ -11630,7 +11643,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
 			else if (phy_index == ELINK_EXT_PHY2)
 				actual_phy_idx = ELINK_EXT_PHY1;
 		}
-		PMD_DRV_LOG(DEBUG, "phy_config_swapped %x, phy_index %x,"
+		PMD_DRV_LOG(DEBUG, sc, "phy_config_swapped %x, phy_index %x,"
 			    " actual_phy_idx %x", phy_config_swapped,
 			    phy_index, actual_phy_idx);
 		phy = &params->phy[actual_phy_idx];
@@ -11638,7 +11651,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
 				       params->shmem2_base, params->port,
 				       phy) != ELINK_STATUS_OK) {
 			params->num_phys = 0;
-			PMD_DRV_LOG(DEBUG, "phy probe failed in phy index %d",
+			PMD_DRV_LOG(DEBUG, sc, "phy probe failed in phy index %d",
 				    phy_index);
 			for (phy_index = ELINK_INT_PHY;
 			     phy_index < ELINK_MAX_PHYS; phy_index++)
@@ -11679,7 +11692,8 @@ elink_status_t elink_phy_probe(struct elink_params * params)
 		params->num_phys++;
 	}
 
-	PMD_DRV_LOG(DEBUG, "End phy probe. #phys found %x", params->num_phys);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "End phy probe. #phys found %x", params->num_phys);
 	return ELINK_STATUS_OK;
 }
 
@@ -11849,7 +11863,7 @@ static elink_status_t elink_avoid_link_flap(struct elink_params *params,
 	for (phy_idx = ELINK_INT_PHY; phy_idx < params->num_phys; phy_idx++) {
 		struct elink_phy *phy = &params->phy[phy_idx];
 		if (phy->phy_specific_func) {
-			PMD_DRV_LOG(DEBUG, "Calling PHY specific func");
+			PMD_DRV_LOG(DEBUG, sc, "Calling PHY specific func");
 			phy->phy_specific_func(phy, params, ELINK_PHY_INIT);
 		}
 		if ((phy->media_type == ELINK_ETH_PHY_SFPP_10G_FIBER) ||
@@ -11969,12 +11983,13 @@ elink_status_t elink_phy_init(struct elink_params *params,
 {
 	int lfa_status;
 	struct bnx2x_softc *sc = params->sc;
-	PMD_DRV_LOG(DEBUG, "Phy Initialization started");
-	PMD_DRV_LOG(DEBUG, "(1) req_speed %d, req_flowctrl %d",
+	PMD_DRV_LOG(DEBUG, sc, "Phy Initialization started");
+	PMD_DRV_LOG(DEBUG, sc, "(1) req_speed %d, req_flowctrl %d",
 		    params->req_line_speed[0], params->req_flow_ctrl[0]);
-	PMD_DRV_LOG(DEBUG, "(2) req_speed %d, req_flowctrl %d",
+	PMD_DRV_LOG(DEBUG, sc, "(2) req_speed %d, req_flowctrl %d",
 		    params->req_line_speed[1], params->req_flow_ctrl[1]);
-	PMD_DRV_LOG(DEBUG, "req_adv_flow_ctrl 0x%x", params->req_fc_auto_adv);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "req_adv_flow_ctrl 0x%x", params->req_fc_auto_adv);
 	vars->link_status = 0;
 	vars->phy_link_up = 0;
 	vars->link_up = 0;
@@ -11991,11 +12006,13 @@ elink_status_t elink_phy_init(struct elink_params *params,
 	lfa_status = elink_check_lfa(params);
 
 	if (lfa_status == 0) {
-		PMD_DRV_LOG(DEBUG, "Link Flap Avoidance in progress");
+		PMD_DRV_LOG(DEBUG, sc,
+			    "Link Flap Avoidance in progress");
 		return elink_avoid_link_flap(params, vars);
 	}
 
-	PMD_DRV_LOG(DEBUG, "Cannot avoid link flap lfa_sta=0x%x", lfa_status);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "Cannot avoid link flap lfa_sta=0x%x", lfa_status);
 	elink_cannot_avoid_link_flap(params, vars, lfa_status);
 
 	/* Disable attentions */
@@ -12011,12 +12028,12 @@ elink_status_t elink_phy_init(struct elink_params *params,
 		vars->link_status |= LINK_STATUS_PFC_ENABLED;
 
 	if ((params->num_phys == 0) && !CHIP_REV_IS_SLOW(sc)) {
-		PMD_DRV_LOG(DEBUG, "No phy found for initialization !!");
+		PMD_DRV_LOG(DEBUG, sc, "No phy found for initialization !!");
 		return ELINK_STATUS_ERROR;
 	}
 	set_phy_vars(params, vars);
 
-	PMD_DRV_LOG(DEBUG, "Num of phys on board: %d", params->num_phys);
+	PMD_DRV_LOG(DEBUG, sc, "Num of phys on board: %d", params->num_phys);
 
 	switch (params->loopback_mode) {
 	case ELINK_LOOPBACK_BMAC:
@@ -12059,7 +12076,7 @@ static elink_status_t elink_link_reset(struct elink_params *params,
 {
 	struct bnx2x_softc *sc = params->sc;
 	uint8_t phy_index, port = params->port, clear_latch_ind = 0;
-	PMD_DRV_LOG(DEBUG, "Resetting the link of port %d", port);
+	PMD_DRV_LOG(DEBUG, sc, "Resetting the link of port %d", port);
 	/* Disable attentions */
 	vars->link_status = 0;
 	elink_update_mng(params, vars->link_status);
@@ -12237,7 +12254,7 @@ static elink_status_t elink_8073_common_init_phy(struct bnx2x_softc *sc,
 		if (elink_populate_phy(sc, phy_index, shmem_base, shmem2_base,
 				       port_of_path, &phy[port]) !=
 		    ELINK_STATUS_OK) {
-			PMD_DRV_LOG(DEBUG, "populate_phy failed");
+			PMD_DRV_LOG(DEBUG, sc, "populate_phy failed");
 			return ELINK_STATUS_ERROR;
 		}
 		/* Disable attentions */
@@ -12277,7 +12294,7 @@ static elink_status_t elink_8073_common_init_phy(struct bnx2x_softc *sc,
 		else
 			port_of_path = 0;
 
-		PMD_DRV_LOG(DEBUG, "Loading spirom for phy address 0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "Loading spirom for phy address 0x%x",
 			    phy_blk[port]->addr);
 		if (elink_8073_8727_external_rom_boot(sc, phy_blk[port],
 						      port_of_path))
@@ -12361,7 +12378,7 @@ static elink_status_t elink_8726_common_init_phy(struct bnx2x_softc *sc,
 		/* Extract the ext phy address for the port */
 		if (elink_populate_phy(sc, phy_index, shmem_base, shmem2_base,
 				       port, &phy) != ELINK_STATUS_OK) {
-			PMD_DRV_LOG(DEBUG, "populate phy failed");
+			PMD_DRV_LOG(DEBUG, sc, "populate phy failed");
 			return ELINK_STATUS_ERROR;
 		}
 
@@ -12481,7 +12498,7 @@ static elink_status_t elink_8727_common_init_phy(struct bnx2x_softc *sc,
 		if (elink_populate_phy(sc, phy_index, shmem_base, shmem2_base,
 				       port_of_path, &phy[port]) !=
 		    ELINK_STATUS_OK) {
-			PMD_DRV_LOG(DEBUG, "populate phy failed");
+			PMD_DRV_LOG(DEBUG, sc, "populate phy failed");
 			return ELINK_STATUS_ERROR;
 		}
 		/* disable attentions */
@@ -12512,7 +12529,7 @@ static elink_status_t elink_8727_common_init_phy(struct bnx2x_softc *sc,
 			port_of_path = port;
 		else
 			port_of_path = 0;
-		PMD_DRV_LOG(DEBUG, "Loading spirom for phy address 0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "Loading spirom for phy address 0x%x",
 			    phy_blk[port]->addr);
 		if (elink_8073_8727_external_rom_boot(sc, phy_blk[port],
 						      port_of_path))
@@ -12539,7 +12556,8 @@ static elink_status_t elink_84833_common_init_phy(struct bnx2x_softc *sc,
 	DELAY(10);
 	elink_cb_gpio_mult_write(sc, reset_gpios,
 				 MISC_REGISTERS_GPIO_OUTPUT_HIGH);
-	PMD_DRV_LOG(DEBUG, "84833 reset pulse on pin values 0x%x", reset_gpios);
+	PMD_DRV_LOG(DEBUG, sc,
+		    "84833 reset pulse on pin values 0x%x", reset_gpios);
 	return ELINK_STATUS_OK;
 }
 
@@ -12587,7 +12605,7 @@ static elink_status_t elink_ext_phy_common_init(struct bnx2x_softc *sc,
 		rc = ELINK_STATUS_ERROR;
 		break;
 	default:
-		PMD_DRV_LOG(DEBUG,
+		PMD_DRV_LOG(DEBUG, sc,
 			    "ext_phy 0x%x common init not required",
 			    ext_phy_type);
 		break;
@@ -12613,7 +12631,7 @@ elink_status_t elink_common_init_phy(struct bnx2x_softc * sc,
 
 	elink_set_mdio_clk(sc, GRCBASE_EMAC0);
 	elink_set_mdio_clk(sc, GRCBASE_EMAC1);
-	PMD_DRV_LOG(DEBUG, "Begin common phy init");
+	PMD_DRV_LOG(DEBUG, sc, "Begin common phy init");
 	if (CHIP_IS_E3(sc)) {
 		/* Enable EPIO */
 		val = REG_RD(sc, MISC_REG_GEN_PURP_HWG);
@@ -12624,7 +12642,7 @@ elink_status_t elink_common_init_phy(struct bnx2x_softc * sc,
 			 offsetof(struct shmem_region,
 				  port_mb[PORT_0].ext_phy_fw_version));
 	if (phy_ver) {
-		PMD_DRV_LOG(DEBUG, "Not doing common init; phy ver is 0x%x",
+		PMD_DRV_LOG(DEBUG, sc, "Not doing common init; phy ver is 0x%x",
 			    phy_ver);
 		return ELINK_STATUS_OK;
 	}
@@ -12696,15 +12714,15 @@ static uint8_t elink_analyze_link_error(struct elink_params *params,
 	/* If values differ */
 	switch (phy_flag) {
 	case PHY_HALF_OPEN_CONN_FLAG:
-		PMD_DRV_LOG(DEBUG, "Analyze Remote Fault");
+		PMD_DRV_LOG(DEBUG, sc, "Analyze Remote Fault");
 		break;
 	case PHY_SFP_TX_FAULT_FLAG:
-		PMD_DRV_LOG(DEBUG, "Analyze TX Fault");
+		PMD_DRV_LOG(DEBUG, sc, "Analyze TX Fault");
 		break;
 	default:
-		PMD_DRV_LOG(DEBUG, "Analyze UNKNOWN");
+		PMD_DRV_LOG(DEBUG, sc, "Analyze UNKNOWN");
 	}
-	PMD_DRV_LOG(DEBUG, "Link changed:[%x %x]->%x", vars->link_up,
+	PMD_DRV_LOG(DEBUG, sc, "Link changed:[%x %x]->%x", vars->link_up,
 		    old_status, status);
 
 	/* a. Update shmem->link_status accordingly
@@ -12830,7 +12848,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
 	    PORT_HW_CFG_E3_TX_FAULT_SHIFT;
 
 	if (elink_get_cfg_pin(sc, cfg_pin, &value)) {
-		PMD_DRV_LOG(DEBUG, "Failed to read pin 0x%02x", cfg_pin);
+		PMD_DRV_LOG(DEBUG, sc, "Failed to read pin 0x%02x", cfg_pin);
 		return;
 	}
 
@@ -12852,7 +12870,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
 
 		/* If module is unapproved, led should be on regardless */
 		if (!(phy->flags & ELINK_FLAGS_SFP_NOT_APPROVED)) {
-			PMD_DRV_LOG(DEBUG, "Change TX_Fault LED: ->%x",
+			PMD_DRV_LOG(DEBUG, sc, "Change TX_Fault LED: ->%x",
 				    led_mode);
 			elink_set_e3_module_fault_led(params, led_mode);
 		}
@@ -12862,7 +12880,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
 static void elink_kr2_recovery(struct elink_params *params,
 			       struct elink_vars *vars, struct elink_phy *phy)
 {
-	PMD_DRV_LOG(DEBUG, "KR2 recovery");
+	PMD_DRV_LOG(DEBUG, params->sc, "KR2 recovery");
 
 	elink_warpcore_enable_AN_KR2(phy, params, vars);
 	elink_warpcore_restart_AN_KR(phy, params);
@@ -12889,7 +12907,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
 	if (!sigdet) {
 		if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
 			elink_kr2_recovery(params, vars, phy);
-			PMD_DRV_LOG(DEBUG, "No sigdet");
+			PMD_DRV_LOG(DEBUG, sc, "No sigdet");
 		}
 		return;
 	}
@@ -12907,7 +12925,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
 	if (base_page == 0) {
 		if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
 			elink_kr2_recovery(params, vars, phy);
-			PMD_DRV_LOG(DEBUG, "No BP");
+			PMD_DRV_LOG(DEBUG, sc, "No BP");
 		}
 		return;
 	}
@@ -12923,7 +12941,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
 	/* In case KR2 is already disabled, check if we need to re-enable it */
 	if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
 		if (!not_kr2_device) {
-			PMD_DRV_LOG(DEBUG, "BP=0x%x, NP=0x%x", base_page,
+			PMD_DRV_LOG(DEBUG, sc, "BP=0x%x, NP=0x%x", base_page,
 				    next_page);
 			elink_kr2_recovery(params, vars, phy);
 		}
@@ -12932,7 +12950,8 @@ static void elink_check_kr2_wa(struct elink_params *params,
 	/* KR2 is enabled, but not KR2 device */
 	if (not_kr2_device) {
 		/* Disable KR2 on both lanes */
-		PMD_DRV_LOG(DEBUG, "BP=0x%x, NP=0x%x", base_page, next_page);
+		PMD_DRV_LOG(DEBUG, sc,
+			    "BP=0x%x, NP=0x%x", base_page, next_page);
 		elink_disable_kr2(params, vars, phy);
 		/* Restart AN on leading lane */
 		elink_warpcore_restart_AN_KR(phy, params);
@@ -12949,7 +12968,7 @@ void elink_period_func(struct elink_params *params, struct elink_vars *vars)
 			elink_set_aer_mmd(params, &params->phy[phy_idx]);
 			if (elink_check_half_open_conn(params, vars, 1) !=
 			    ELINK_STATUS_OK) {
-				PMD_DRV_LOG(DEBUG, "Fault detection failed");
+				PMD_DRV_LOG(DEBUG, sc, "Fault detection failed");
 			}
 			break;
 		}
@@ -12995,7 +13014,7 @@ uint8_t elink_fan_failure_det_req(struct bnx2x_softc *sc,
 		if (elink_populate_phy(sc, phy_index, shmem_base, shmem2_base,
 				       port, &phy)
 		    != ELINK_STATUS_OK) {
-			PMD_DRV_LOG(DEBUG, "populate phy failed");
+			PMD_DRV_LOG(DEBUG, sc, "populate phy failed");
 			return 0;
 		}
 		fan_failure_det_req |= (phy.flags &
@@ -13045,7 +13064,7 @@ void elink_init_mod_abs_int(struct bnx2x_softc *sc, struct elink_vars *vars,
 			if (elink_populate_phy(sc, phy_index, shmem_base,
 					       shmem2_base, port, &phy)
 			    != ELINK_STATUS_OK) {
-				PMD_DRV_LOG(DEBUG, "populate phy failed");
+				PMD_DRV_LOG(DEBUG, sc, "populate phy failed");
 				return;
 			}
 			if (phy.type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BNX2X8726) {
@@ -13075,7 +13094,7 @@ void elink_init_mod_abs_int(struct bnx2x_softc *sc, struct elink_vars *vars,
 		     dev_info.port_hw_config[port].aeu_int_mask);
 	REG_WR(sc, sync_offset, vars->aeu_int_mask);
 
-	PMD_DRV_LOG(DEBUG, "Setting MOD_ABS (GPIO%d_P%d) AEU to 0x%x",
+	PMD_DRV_LOG(DEBUG, sc, "Setting MOD_ABS (GPIO%d_P%d) AEU to 0x%x",
 		    gpio_num, gpio_port, vars->aeu_int_mask);
 
 	if (port == 0)
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.851636670 +0100
+++ 0010-net-bnx2x-fix-logging-to-include-device-name.patch	2018-10-15 12:48:34.553096017 +0100
@@ -1,19 +1,20 @@
-From ba7eeb035a5f442414f9dca6c12a9105a16576aa Mon Sep 17 00:00:00 2001
+From f21349b9047ebd6b3144ec7c6973241fc22e4970 Mon Sep 17 00:00:00 2001
 From: Rasesh Mody <rasesh.mody@cavium.com>
 Date: Sat, 29 Sep 2018 05:42:29 +0000
 Subject: [PATCH] net/bnx2x: fix logging to include device name
 
+[ upstream commit ba7eeb035a5f442414f9dca6c12a9105a16576aa ]
+
 Fix PMD logging scheme to include device name in the messages printed.
 
 Fixes: 540a211084a7 ("bnx2x: driver core")
-Cc: stable@dpdk.org
 
 Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
 ---
- drivers/net/bnx2x/bnx2x.c          | 754 ++++++++++++++--------------
+ drivers/net/bnx2x/bnx2x.c          | 764 +++++++++++++++--------------
  drivers/net/bnx2x/bnx2x.h          |  32 +-
- drivers/net/bnx2x/bnx2x_ethdev.c   |  90 ++--
- drivers/net/bnx2x/bnx2x_logs.h     |  25 +-
+ drivers/net/bnx2x/bnx2x_ethdev.c   |  84 ++--
+ drivers/net/bnx2x/bnx2x_logs.h     |  27 +-
  drivers/net/bnx2x/bnx2x_rxtx.c     |  15 +-
  drivers/net/bnx2x/bnx2x_stats.c    |  35 +-
  drivers/net/bnx2x/bnx2x_vfpf.c     |  50 +-
@@ -21,22 +22,22 @@
  drivers/net/bnx2x/ecore_init_ops.h |   8 +-
  drivers/net/bnx2x/ecore_sp.c       | 258 +++++-----
  drivers/net/bnx2x/ecore_sp.h       |   4 +-
- drivers/net/bnx2x/elink.c          | 761 +++++++++++++++--------------
- 12 files changed, 1052 insertions(+), 986 deletions(-)
+ drivers/net/bnx2x/elink.c          | 761 ++++++++++++++--------------
+ 12 files changed, 1056 insertions(+), 988 deletions(-)
 
 diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
-index 4904eaf381..93f8586b55 100644
+index f1de336224..0e68108496 100644
 --- a/drivers/net/bnx2x/bnx2x.c
 +++ b/drivers/net/bnx2x/bnx2x.c
-@@ -178,13 +178,14 @@ bnx2x_dma_alloc(struct bnx2x_softc *sc, size_t size, struct bnx2x_dma *dma,
+@@ -181,13 +181,14 @@ bnx2x_dma_alloc(struct bnx2x_softc *sc, size_t size, struct bnx2x_dma *dma,
  					SOCKET_ID_ANY,
- 					RTE_MEMZONE_IOVA_CONTIG, align);
+ 					0, align);
  	if (z == NULL) {
 -		PMD_DRV_LOG(ERR, "DMA alloc failed for %s", msg);
 +		PMD_DRV_LOG(ERR, sc, "DMA alloc failed for %s", msg);
  		return -ENOMEM;
  	}
- 	dma->paddr = (uint64_t) z->iova;
+ 	dma->paddr = (uint64_t) z->phys_addr;
  	dma->vaddr = z->addr;
  
 -	PMD_DRV_LOG(DEBUG, "%s: virt=%p phys=%" PRIx64, msg, dma->vaddr, dma->paddr);
@@ -45,7 +46,7 @@
  
  	return 0;
  }
-@@ -197,11 +198,11 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -200,11 +201,11 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	uint32_t hw_lock_control_reg;
  	int cnt;
  
@@ -59,7 +60,7 @@
  			    "resource 0x%x > HW_LOCK_MAX_RESOURCE_VALUE",
  			    resource);
  		return -1;
-@@ -217,7 +218,7 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -220,7 +221,7 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	/* validate the resource is not already taken */
  	lock_status = REG_RD(sc, hw_lock_control_reg);
  	if (lock_status & resource_bit) {
@@ -68,7 +69,7 @@
  			    "resource in use (status 0x%x bit 0x%x)",
  			    lock_status, resource_bit);
  		return -1;
-@@ -233,7 +234,7 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -236,7 +237,7 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  		DELAY(5000);
  	}
  
@@ -77,7 +78,7 @@
  	return -1;
  }
  
-@@ -244,11 +245,11 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -247,11 +248,11 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	int func = SC_FUNC(sc);
  	uint32_t hw_lock_control_reg;
  
@@ -91,7 +92,7 @@
  			    "resource 0x%x > HW_LOCK_MAX_RESOURCE_VALUE",
  			    resource);
  		return -1;
-@@ -264,7 +265,7 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -267,7 +268,7 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	/* validate the resource is currently taken */
  	lock_status = REG_RD(sc, hw_lock_control_reg);
  	if (!(lock_status & resource_bit)) {
@@ -100,7 +101,7 @@
  			    "resource not in use (status 0x%x bit 0x%x)",
  			    lock_status, resource_bit);
  		return -1;
-@@ -366,7 +367,7 @@ bnx2x_issue_dmae_with_comp(struct bnx2x_softc *sc, struct dmae_command *dmae)
+@@ -369,7 +370,7 @@ bnx2x_issue_dmae_with_comp(struct bnx2x_softc *sc, struct dmae_command *dmae)
  		if (!timeout ||
  		    (sc->recovery_state != BNX2X_RECOVERY_DONE &&
  		     sc->recovery_state != BNX2X_RECOVERY_NIC_LOADING)) {
@@ -109,7 +110,7 @@
  			return DMAE_TIMEOUT;
  		}
  
-@@ -375,7 +376,7 @@ bnx2x_issue_dmae_with_comp(struct bnx2x_softc *sc, struct dmae_command *dmae)
+@@ -378,7 +379,7 @@ bnx2x_issue_dmae_with_comp(struct bnx2x_softc *sc, struct dmae_command *dmae)
  	}
  
  	if (*wb_comp & DMAE_PCI_ERR_FLAG) {
@@ -118,7 +119,7 @@
  		return DMAE_PCI_ERROR;
  	}
  
-@@ -534,7 +535,7 @@ void
+@@ -537,7 +538,7 @@ void
  elink_cb_event_log(__rte_unused struct bnx2x_softc *sc,
  		   __rte_unused const elink_log_id_t elink_log_id, ...)
  {
@@ -127,7 +128,7 @@
  }
  
  static int bnx2x_set_spio(struct bnx2x_softc *sc, int spio, uint32_t mode)
-@@ -543,7 +544,7 @@ static int bnx2x_set_spio(struct bnx2x_softc *sc, int spio, uint32_t mode)
+@@ -546,7 +547,7 @@ static int bnx2x_set_spio(struct bnx2x_softc *sc, int spio, uint32_t mode)
  
  	/* Only 2 SPIOs are configurable */
  	if ((spio != MISC_SPIO_SPIO4) && (spio != MISC_SPIO_SPIO5)) {
@@ -136,7 +137,7 @@
  		return -1;
  	}
  
-@@ -593,7 +594,7 @@ static int bnx2x_gpio_read(struct bnx2x_softc *sc, int gpio_num, uint8_t port)
+@@ -596,7 +597,7 @@ static int bnx2x_gpio_read(struct bnx2x_softc *sc, int gpio_num, uint8_t port)
  	uint32_t gpio_reg;
  
  	if (gpio_num > MISC_REGISTERS_GPIO_3) {
@@ -145,7 +146,7 @@
  		return -1;
  	}
  
-@@ -618,7 +619,7 @@ bnx2x_gpio_write(struct bnx2x_softc *sc, int gpio_num, uint32_t mode, uint8_t po
+@@ -621,7 +622,7 @@ bnx2x_gpio_write(struct bnx2x_softc *sc, int gpio_num, uint32_t mode, uint8_t po
  	uint32_t gpio_reg;
  
  	if (gpio_num > MISC_REGISTERS_GPIO_3) {
@@ -154,7 +155,7 @@
  		return -1;
  	}
  
-@@ -687,7 +688,8 @@ bnx2x_gpio_mult_write(struct bnx2x_softc *sc, uint8_t pins, uint32_t mode)
+@@ -690,7 +691,8 @@ bnx2x_gpio_mult_write(struct bnx2x_softc *sc, uint8_t pins, uint32_t mode)
  		break;
  
  	default:
@@ -164,7 +165,7 @@
  		bnx2x_release_hw_lock(sc, HW_LOCK_RESOURCE_GPIO);
  		return -1;
  	}
-@@ -713,7 +715,7 @@ bnx2x_gpio_int_write(struct bnx2x_softc *sc, int gpio_num, uint32_t mode,
+@@ -716,7 +718,7 @@ bnx2x_gpio_int_write(struct bnx2x_softc *sc, int gpio_num, uint32_t mode,
  	uint32_t gpio_reg;
  
  	if (gpio_num > MISC_REGISTERS_GPIO_3) {
@@ -173,7 +174,7 @@
  		return -1;
  	}
  
-@@ -790,7 +792,7 @@ elink_cb_fw_command(struct bnx2x_softc *sc, uint32_t command, uint32_t param)
+@@ -793,7 +795,7 @@ elink_cb_fw_command(struct bnx2x_softc *sc, uint32_t command, uint32_t param)
  	SHMEM_WR(sc, func_mb[mb_idx].drv_mb_param, param);
  	SHMEM_WR(sc, func_mb[mb_idx].drv_mb_header, (command | seq));
  
@@ -182,7 +183,7 @@
  		    "wrote command 0x%08x to FW MB param 0x%08x",
  		    (command | seq), param);
  
-@@ -805,7 +807,7 @@ elink_cb_fw_command(struct bnx2x_softc *sc, uint32_t command, uint32_t param)
+@@ -808,7 +810,7 @@ elink_cb_fw_command(struct bnx2x_softc *sc, uint32_t command, uint32_t param)
  		rc &= FW_MSG_CODE_MASK;
  	} else {
  		/* Ruh-roh! */
@@ -191,7 +192,7 @@
  		rc = 0;
  	}
  
-@@ -1023,12 +1025,12 @@ bnx2x_sp_post(struct bnx2x_softc *sc, int command, int cid, uint32_t data_hi,
+@@ -1026,12 +1028,12 @@ bnx2x_sp_post(struct bnx2x_softc *sc, int command, int cid, uint32_t data_hi,
  
  	if (common) {
  		if (!atomic_load_acq_long(&sc->eq_spq_left)) {
@@ -206,7 +207,7 @@
  			return -1;
  		}
  	}
-@@ -1061,7 +1063,7 @@ bnx2x_sp_post(struct bnx2x_softc *sc, int command, int cid, uint32_t data_hi,
+@@ -1064,7 +1066,7 @@ bnx2x_sp_post(struct bnx2x_softc *sc, int command, int cid, uint32_t data_hi,
  		atomic_subtract_acq_long(&sc->cq_spq_left, 1);
  	}
  
@@ -215,7 +216,7 @@
  		    "SPQE[%x] (%x:%x) (cmd, common?) (%d,%d) hw_cid %x"
  		    "data (%x:%x) type(0x%x) left (CQ, EQ) (%lx,%lx)",
  		    sc->spq_prod_idx,
-@@ -1132,44 +1134,45 @@ bnx2x_sp_event(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
+@@ -1137,44 +1139,45 @@ bnx2x_sp_event(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
  	enum ecore_queue_cmd drv_cmd = ECORE_Q_CMD_MAX;
  	struct ecore_queue_sp_obj *q_obj = &BNX2X_SP_OBJ(sc, fp).q_obj;
  
@@ -269,7 +270,7 @@
  			    "ERROR: unexpected MC reply (%d)"
  			    "on fp[%d]", command, fp->index);
  		return;
-@@ -1191,7 +1194,7 @@ bnx2x_sp_event(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
+@@ -1196,7 +1199,7 @@ bnx2x_sp_event(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
  
  	atomic_add_acq_long(&sc->cq_spq_left, 1);
  
@@ -278,7 +279,7 @@
  		    atomic_load_acq_long(&sc->cq_spq_left));
  }
  
-@@ -1387,7 +1390,7 @@ bnx2x_del_all_macs(struct bnx2x_softc *sc, struct ecore_vlan_mac_obj *mac_obj,
+@@ -1392,7 +1395,7 @@ bnx2x_del_all_macs(struct bnx2x_softc *sc, struct ecore_vlan_mac_obj *mac_obj,
  
  	rc = mac_obj->delete_all(sc, mac_obj, &vlan_mac_flags, &ramrod_flags);
  	if (rc < 0)
@@ -287,7 +288,7 @@
  
  	return rc;
  }
-@@ -1538,13 +1541,13 @@ static int bnx2x_nic_load_no_mcp(struct bnx2x_softc *sc)
+@@ -1543,13 +1546,13 @@ static int bnx2x_nic_load_no_mcp(struct bnx2x_softc *sc)
  	int path = SC_PATH(sc);
  	int port = SC_PORT(sc);
  
@@ -303,7 +304,7 @@
  		    path, load_count[path][0], load_count[path][1],
  		    load_count[path][2]);
  	if (load_count[path][0] == 1)
-@@ -1561,12 +1564,12 @@ static int bnx2x_nic_unload_no_mcp(struct bnx2x_softc *sc)
+@@ -1566,12 +1569,12 @@ static int bnx2x_nic_unload_no_mcp(struct bnx2x_softc *sc)
  	int port = SC_PORT(sc);
  	int path = SC_PATH(sc);
  
@@ -318,7 +319,7 @@
  		    path, load_count[path][0], load_count[path][1],
  		    load_count[path][2]);
  	if (load_count[path][0] == 0) {
-@@ -1646,7 +1649,7 @@ static int bnx2x_func_wait_started(struct bnx2x_softc *sc)
+@@ -1651,7 +1654,7 @@ static int bnx2x_func_wait_started(struct bnx2x_softc *sc)
  		 */
  		struct ecore_func_state_params func_params = { NULL };
  
@@ -327,7 +328,7 @@
  			    "Forcing STARTED-->TX_STOPPED-->STARTED");
  
  		func_params.f_obj = &sc->func_obj;
-@@ -1670,7 +1673,7 @@ static int bnx2x_stop_queue(struct bnx2x_softc *sc, int index)
+@@ -1675,7 +1678,7 @@ static int bnx2x_stop_queue(struct bnx2x_softc *sc, int index)
  	struct ecore_queue_state_params q_params = { NULL };
  	int rc;
  
@@ -336,7 +337,7 @@
  
  	q_params.q_obj = &sc->sp_objs[fp->index].q_obj;
  	/* We want to wait for completion in this context */
-@@ -1721,7 +1724,7 @@ static uint8_t bnx2x_wait_sp_comp(struct bnx2x_softc *sc, unsigned long mask)
+@@ -1726,7 +1729,7 @@ static uint8_t bnx2x_wait_sp_comp(struct bnx2x_softc *sc, unsigned long mask)
  
  	tmp = atomic_load_acq_long(&sc->sp_state);
  	if (tmp & mask) {
@@ -345,7 +346,7 @@
  			    "sp_state 0x%lx, mask 0x%lx", tmp, mask);
  		return FALSE;
  	}
-@@ -1747,7 +1750,7 @@ static int bnx2x_func_stop(struct bnx2x_softc *sc)
+@@ -1752,7 +1755,7 @@ static int bnx2x_func_stop(struct bnx2x_softc *sc)
  	 */
  	rc = ecore_func_state_change(sc, &func_params);
  	if (rc) {
@@ -354,7 +355,7 @@
  			    "Running a dry transaction");
  		bnx2x_set_bit(RAMROD_DRV_CLR_ONLY, &func_params.ramrod_flags);
  		return ecore_func_state_change(sc, &func_params);
-@@ -1796,14 +1799,16 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
+@@ -1801,14 +1804,16 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
  	rc = bnx2x_del_all_macs(sc, &sc->sp_objs[0].mac_obj, ECORE_ETH_MAC,
  			      FALSE);
  	if (rc < 0) {
@@ -373,7 +374,7 @@
  	}
  
  	/* Disable LLH */
-@@ -1826,7 +1831,7 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
+@@ -1831,7 +1836,7 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
  	rparam.mcast_obj = &sc->mcast_obj;
  	rc = ecore_config_mcast(sc, &rparam, ECORE_MCAST_CMD_DEL);
  	if (rc < 0) {
@@ -382,7 +383,7 @@
  			    "Failed to send DEL MCAST command (%d)", rc);
  	}
  
-@@ -1843,7 +1848,7 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
+@@ -1848,7 +1853,7 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
  	 */
  	rc = bnx2x_func_wait_started(sc);
  	if (rc) {
@@ -391,7 +392,7 @@
  	}
  
  	/*
-@@ -1861,14 +1866,14 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
+@@ -1866,14 +1871,14 @@ bnx2x_chip_cleanup(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_li
  	 * very wrong has happen.
  	 */
  	if (!bnx2x_wait_sp_comp(sc, ~0x0UL)) {
@@ -408,7 +409,7 @@
  	}
  
  	/* disable HW interrupts */
-@@ -1877,7 +1882,7 @@ unload_error:
+@@ -1882,7 +1887,7 @@ unload_error:
  	/* Reset the chip */
  	rc = bnx2x_reset_hw(sc, reset_code);
  	if (rc) {
@@ -417,7 +418,7 @@
  	}
  
  	/* Report UNLOAD_DONE to MCP */
-@@ -1888,7 +1893,7 @@ static void bnx2x_disable_close_the_gate(struct bnx2x_softc *sc)
+@@ -1893,7 +1898,7 @@ static void bnx2x_disable_close_the_gate(struct bnx2x_softc *sc)
  {
  	uint32_t val;
  
@@ -426,7 +427,7 @@
  
  	val = REG_RD(sc, MISC_REG_AEU_GENERAL_MASK);
  	val &= ~(MISC_AEU_GENERAL_MASK_REG_AEU_PXP_CLOSE_MASK |
-@@ -1919,7 +1924,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
+@@ -1924,7 +1929,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
  	rc = mac_obj->delete_all(sc, &sc->sp_objs->mac_obj, &vlan_mac_flags,
  				 &ramrod_flags);
  	if (rc != 0) {
@@ -435,7 +436,7 @@
  	}
  
  	/* Cleanup UC list */
-@@ -1927,7 +1932,8 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
+@@ -1932,7 +1937,8 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
  	bnx2x_set_bit(ECORE_UC_LIST_MAC, &vlan_mac_flags);
  	rc = mac_obj->delete_all(sc, mac_obj, &vlan_mac_flags, &ramrod_flags);
  	if (rc != 0) {
@@ -445,7 +446,7 @@
  	}
  
  	/* Now clean mcast object... */
-@@ -1938,7 +1944,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
+@@ -1943,7 +1949,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
  	/* Add a DEL command... */
  	rc = ecore_config_mcast(sc, &rparam, ECORE_MCAST_CMD_DEL);
  	if (rc < 0) {
@@ -454,7 +455,7 @@
  			    "Failed to send DEL MCAST command (%d)", rc);
  	}
  
-@@ -1947,7 +1953,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
+@@ -1952,7 +1958,7 @@ static void bnx2x_squeeze_objects(struct bnx2x_softc *sc)
  	rc = ecore_config_mcast(sc, &rparam, ECORE_MCAST_CMD_CONT);
  	while (rc != 0) {
  		if (rc < 0) {
@@ -463,16 +464,16 @@
  				    "Failed to clean MCAST object (%d)", rc);
  			return;
  		}
-@@ -1964,7 +1970,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
+@@ -1969,7 +1975,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
  	uint8_t global = FALSE;
  	uint32_t val;
  
 -	PMD_DRV_LOG(DEBUG, "Starting NIC unload...");
 +	PMD_DRV_LOG(DEBUG, sc, "Starting NIC unload...");
  
- 	/* mark driver as unloaded in shmem2 */
- 	if (IS_PF(sc) && SHMEM2_HAS(sc, drv_capabilities_flag)) {
-@@ -1988,7 +1994,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
+ 	/* stop the periodic callout */
+ 	bnx2x_periodic_stop(sc);
+@@ -1996,7 +2002,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
  		bnx2x_release_leader_lock(sc);
  		mb();
  
@@ -481,7 +482,7 @@
  		return -1;
  	}
  
-@@ -2093,7 +2099,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
+@@ -2101,7 +2107,7 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link
  		bnx2x_disable_close_the_gate(sc);
  	}
  
@@ -490,7 +491,7 @@
  
  	return 0;
  }
-@@ -2241,7 +2247,7 @@ static void bnx2x_ilt_set_info(struct bnx2x_softc *sc)
+@@ -2249,7 +2255,7 @@ static void bnx2x_ilt_set_info(struct bnx2x_softc *sc)
  	struct ecore_ilt *ilt = sc->ilt;
  	uint16_t line = 0;
  
@@ -499,7 +500,7 @@
  
  	ilt->start_line = FUNC_ILT_BASE(SC_FUNC(sc));
  
-@@ -2395,7 +2401,7 @@ static int bnx2x_alloc_mem(struct bnx2x_softc *sc)
+@@ -2403,7 +2409,7 @@ static int bnx2x_alloc_mem(struct bnx2x_softc *sc)
  	bnx2x_alloc_ilt_lines_mem(sc);
  
  	if (ecore_ilt_mem_op(sc, ILT_MEMOP_ALLOC)) {
@@ -508,7 +509,7 @@
  		bnx2x_free_mem(sc);
  		return -1;
  	}
-@@ -2598,7 +2604,7 @@ static void bnx2x_set_pf_load(struct bnx2x_softc *sc)
+@@ -2606,7 +2612,7 @@ static void bnx2x_set_pf_load(struct bnx2x_softc *sc)
  
  	bnx2x_acquire_hw_lock(sc, HW_LOCK_RESOURCE_RECOVERY_REG);
  
@@ -517,7 +518,7 @@
  
  	val = REG_RD(sc, BNX2X_RECOVERY_GLOB_REG);
  
-@@ -2651,14 +2657,14 @@ static uint8_t bnx2x_clear_pf_load(struct bnx2x_softc *sc)
+@@ -2659,14 +2665,14 @@ static uint8_t bnx2x_clear_pf_load(struct bnx2x_softc *sc)
  /* send load requrest to mcp and analyze response */
  static int bnx2x_nic_load_request(struct bnx2x_softc *sc, uint32_t * load_code)
  {
@@ -534,7 +535,7 @@
  
  #ifdef BNX2X_PULSE
  	/* get the current FW pulse sequence */
-@@ -2677,13 +2683,13 @@ static int bnx2x_nic_load_request(struct bnx2x_softc *sc, uint32_t * load_code)
+@@ -2685,13 +2691,13 @@ static int bnx2x_nic_load_request(struct bnx2x_softc *sc, uint32_t * load_code)
  
  	/* if the MCP fails to respond we must abort */
  	if (!(*load_code)) {
@@ -550,7 +551,7 @@
  		return -1;
  	}
  
-@@ -2710,12 +2716,12 @@ static int bnx2x_nic_load_analyze_req(struct bnx2x_softc *sc, uint32_t load_code
+@@ -2718,12 +2724,12 @@ static int bnx2x_nic_load_analyze_req(struct bnx2x_softc *sc, uint32_t load_code
  
  		/* read loaded FW from chip */
  		loaded_fw = REG_RD(sc, XSEM_REG_PRAM);
@@ -565,7 +566,7 @@
  				    "FW 0x%08x already loaded (mine is 0x%08x)",
  				    loaded_fw, my_fw);
  			return -1;
-@@ -2730,7 +2736,7 @@ static void bnx2x_nic_load_pmf(struct bnx2x_softc *sc, uint32_t load_code)
+@@ -2738,7 +2744,7 @@ static void bnx2x_nic_load_pmf(struct bnx2x_softc *sc, uint32_t load_code)
  {
  	uint32_t ncsi_oem_data_addr;
  
@@ -574,7 +575,7 @@
  
  	if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
  	    (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) ||
-@@ -2745,7 +2751,7 @@ static void bnx2x_nic_load_pmf(struct bnx2x_softc *sc, uint32_t load_code)
+@@ -2753,7 +2759,7 @@ static void bnx2x_nic_load_pmf(struct bnx2x_softc *sc, uint32_t load_code)
  		sc->port.pmf = 0;
  	}
  
@@ -583,7 +584,7 @@
  
  	if (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) {
  		if (SHMEM2_HAS(sc, ncsi_oem_data_addr)) {
-@@ -2788,10 +2794,10 @@ static void bnx2x_read_mf_cfg(struct bnx2x_softc *sc)
+@@ -2796,10 +2802,10 @@ static void bnx2x_read_mf_cfg(struct bnx2x_softc *sc)
  
  	if (sc->devinfo.mf_info.mf_config[SC_VN(sc)] &
  	    FUNC_MF_CFG_FUNC_DISABLED) {
@@ -596,7 +597,7 @@
  		sc->flags &= ~BNX2X_MF_FUNC_DIS;
  	}
  }
-@@ -2812,7 +2818,7 @@ static int bnx2x_acquire_alr(struct bnx2x_softc *sc)
+@@ -2820,7 +2826,7 @@ static int bnx2x_acquire_alr(struct bnx2x_softc *sc)
  	}
  
  	if (!(val & (1L << 31))) {
@@ -605,7 +606,7 @@
  		return -1;
  	}
  
-@@ -2840,7 +2846,7 @@ static void bnx2x_fan_failure(struct bnx2x_softc *sc)
+@@ -2848,7 +2854,7 @@ static void bnx2x_fan_failure(struct bnx2x_softc *sc)
  		 ext_phy_config);
  
  	/* log the failure */
@@ -614,7 +615,7 @@
  		    "Fan Failure has caused the driver to shutdown "
  		    "the card to prevent permanent damage. "
  		    "Please contact OEM Support for assistance");
-@@ -2918,7 +2924,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
+@@ -2926,7 +2932,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
  	uint32_t cnt;
  
  	if (sc->attn_state & asserted) {
@@ -623,7 +624,7 @@
  	}
  
  	bnx2x_acquire_hw_lock(sc, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port);
-@@ -2950,45 +2956,45 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
+@@ -2958,45 +2964,45 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
  		}
  
  		if (asserted & ATTN_SW_TIMER_4_FUNC) {
@@ -679,7 +680,7 @@
  				REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_6, 0x0);
  			}
  		}
-@@ -3002,7 +3008,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
+@@ -3010,7 +3016,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
  		reg_addr = (BAR_IGU_INTMEM + IGU_CMD_ATTN_BIT_SET_UPPER * 8);
  	}
  
@@ -688,7 +689,7 @@
  		    asserted,
  		    (sc->devinfo.int_block == INT_BLOCK_HC) ? "HC" : "IGU",
  		    reg_addr);
-@@ -3024,7 +3030,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
+@@ -3032,7 +3038,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
  				 && (++cnt < MAX_IGU_ATTN_ACK_TO));
  
  			if (!igu_acked) {
@@ -697,7 +698,7 @@
  					    "Failed to verify IGU ack on time");
  			}
  
-@@ -3040,7 +3046,7 @@ static void
+@@ -3048,7 +3054,7 @@ static void
  bnx2x_print_next_block(__rte_unused struct bnx2x_softc *sc, __rte_unused int idx,
  		     __rte_unused const char *blk)
  {
@@ -706,7 +707,7 @@
  }
  
  static int
-@@ -3348,7 +3354,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
+@@ -3356,7 +3362,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
  	    (sig[2] & HW_PRTY_ASSERT_SET_2) ||
  	    (sig[3] & HW_PRTY_ASSERT_SET_3) ||
  	    (sig[4] & HW_PRTY_ASSERT_SET_4)) {
@@ -715,7 +716,7 @@
  			    "Parity error: HW block parity attention:"
  			    "[0]:0x%08x [1]:0x%08x [2]:0x%08x [3]:0x%08x [4]:0x%08x",
  			    (uint32_t) (sig[0] & HW_PRTY_ASSERT_SET_0),
-@@ -3358,7 +3364,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
+@@ -3366,7 +3372,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
  			    (uint32_t) (sig[4] & HW_PRTY_ASSERT_SET_4));
  
  		if (print)
@@ -724,7 +725,7 @@
  
  		par_num =
  		    bnx2x_check_blocks_with_parity0(sc, sig[0] &
-@@ -3382,7 +3388,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
+@@ -3390,7 +3396,7 @@ bnx2x_parity_attn(struct bnx2x_softc *sc, uint8_t * global, uint8_t print,
  						  par_num, print);
  
  		if (print)
@@ -733,7 +734,7 @@
  
  		return TRUE;
  	}
-@@ -3414,64 +3420,64 @@ static void bnx2x_attn_int_deasserted4(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3422,64 +3428,64 @@ static void bnx2x_attn_int_deasserted4(struct bnx2x_softc *sc, uint32_t attn)
  
  	if (attn & AEU_INPUTS_ATTN_BITS_PGLUE_HW_INTERRUPT) {
  		val = REG_RD(sc, PGLUE_B_REG_PGLUE_B_INT_STS_CLR);
@@ -816,7 +817,7 @@
  			    "ERROR: FATAL parity attention set4 0x%08x",
  			    (uint32_t) (attn &
  					(AEU_INPUTS_ATTN_BITS_PGLUE_PARITY_ERROR
-@@ -3594,11 +3600,11 @@ static void bnx2x_dcc_event(struct bnx2x_softc *sc, uint32_t dcc_event)
+@@ -3602,11 +3608,11 @@ static void bnx2x_dcc_event(struct bnx2x_softc *sc, uint32_t dcc_event)
   */
  		if (sc->devinfo.
  		    mf_info.mf_config[SC_VN(sc)] & FUNC_MF_CFG_FUNC_DISABLED) {
@@ -830,7 +831,7 @@
  			sc->flags &= ~BNX2X_MF_FUNC_DIS;
  			bnx2x_e1h_enable(sc);
  		}
-@@ -3653,7 +3659,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
+@@ -3661,7 +3667,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
  	last_idx =
  	    REG_RD8(sc, BAR_XSTRORM_INTMEM + XSTORM_ASSERT_LIST_INDEX_OFFSET);
  	if (last_idx)
@@ -839,7 +840,7 @@
  
  	/* print the asserts */
  	for (i = 0; i < STORM_ASSERT_ARRAY_SIZE; i++) {
-@@ -3675,7 +3681,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
+@@ -3683,7 +3689,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
  			   12);
  
  		if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) {
@@ -848,7 +849,7 @@
  				    "XSTORM_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x",
  				    i, row3, row2, row1, row0);
  			rc++;
-@@ -3688,7 +3694,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
+@@ -3696,7 +3702,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
  	last_idx =
  	    REG_RD8(sc, BAR_TSTRORM_INTMEM + TSTORM_ASSERT_LIST_INDEX_OFFSET);
  	if (last_idx) {
@@ -857,7 +858,7 @@
  	}
  
  	/* print the asserts */
-@@ -3711,7 +3717,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
+@@ -3719,7 +3725,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
  			   12);
  
  		if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) {
@@ -866,7 +867,7 @@
  				    "TSTORM_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x",
  				    i, row3, row2, row1, row0);
  			rc++;
-@@ -3724,7 +3730,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
+@@ -3732,7 +3738,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
  	last_idx =
  	    REG_RD8(sc, BAR_CSTRORM_INTMEM + CSTORM_ASSERT_LIST_INDEX_OFFSET);
  	if (last_idx) {
@@ -875,7 +876,7 @@
  	}
  
  	/* print the asserts */
-@@ -3747,7 +3753,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
+@@ -3755,7 +3761,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
  			   12);
  
  		if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) {
@@ -884,7 +885,7 @@
  				    "CSTORM_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x",
  				    i, row3, row2, row1, row0);
  			rc++;
-@@ -3760,7 +3766,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
+@@ -3768,7 +3774,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
  	last_idx =
  	    REG_RD8(sc, BAR_USTRORM_INTMEM + USTORM_ASSERT_LIST_INDEX_OFFSET);
  	if (last_idx) {
@@ -893,7 +894,7 @@
  	}
  
  	/* print the asserts */
-@@ -3783,7 +3789,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
+@@ -3791,7 +3797,7 @@ static int bnx2x_mc_assert(struct bnx2x_softc *sc)
  			   12);
  
  		if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) {
@@ -902,7 +903,7 @@
  				    "USTORM_ASSERT_INDEX 0x%x = 0x%08x 0x%08x 0x%08x 0x%08x",
  				    i, row3, row2, row1, row0);
  			rc++;
-@@ -3848,7 +3854,7 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3856,7 +3862,7 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
  
  		} else if (attn & BNX2X_MC_ASSERT_BITS) {
  
@@ -911,7 +912,7 @@
  			bnx2x_mc_assert(sc);
  			REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_10, 0);
  			REG_WR(sc, MISC_REG_AEU_GENERAL_ATTN_9, 0);
-@@ -3858,24 +3864,24 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3866,24 +3872,24 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
  
  		} else if (attn & BNX2X_MCP_ASSERT) {
  
@@ -941,7 +942,7 @@
  		}
  		REG_WR(sc, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0x7ff);
  	}
-@@ -3890,24 +3896,24 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3898,24 +3904,24 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
  
  	if (attn & AEU_INPUTS_ATTN_BITS_CFC_HW_INTERRUPT) {
  		val = REG_RD(sc, CFC_REG_CFC_INT_STS_CLR);
@@ -971,7 +972,7 @@
  		}
  	}
  #define PXP2_EOP_ERROR_BIT  PXP2_PXP2_INT_STS_CLR_0_REG_WR_PGLUE_EOP_ERROR
-@@ -3935,7 +3941,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3943,7 +3949,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
  				val0 = REG_RD(sc, PXP2_REG_PXP2_INT_STS_CLR_0);
  
  			/* print the register, since no one can restore it */
@@ -980,7 +981,7 @@
  				    "PXP2_REG_PXP2_INT_STS_CLR_0 0x%08x", val0);
  
  			/*
-@@ -3943,7 +3949,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3951,7 +3957,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
  			 * then notify
  			 */
  			if (val0 & PXP2_EOP_ERROR_BIT) {
@@ -989,7 +990,7 @@
  
  				/*
  				 * if only PXP2_PXP2_INT_STS_0_REG_WR_PGLUE_EOP_ERROR is
-@@ -3964,7 +3970,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3972,7 +3978,7 @@ static void bnx2x_attn_int_deasserted2(struct bnx2x_softc *sc, uint32_t attn)
  		val &= ~(attn & HW_INTERRUT_ASSERT_SET_2);
  		REG_WR(sc, reg_offset, val);
  
@@ -998,7 +999,7 @@
  			    "FATAL HW block attention set2 0x%x",
  			    (uint32_t) (attn & HW_INTERRUT_ASSERT_SET_2));
  		rte_panic("HW block attention set2");
-@@ -3979,10 +3985,10 @@ static void bnx2x_attn_int_deasserted1(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3987,10 +3993,10 @@ static void bnx2x_attn_int_deasserted1(struct bnx2x_softc *sc, uint32_t attn)
  
  	if (attn & AEU_INPUTS_ATTN_BITS_DOORBELLQ_HW_INTERRUPT) {
  		val = REG_RD(sc, DORQ_REG_DORQ_INT_STS_CLR);
@@ -1011,7 +1012,7 @@
  		}
  	}
  
-@@ -3994,7 +4000,7 @@ static void bnx2x_attn_int_deasserted1(struct bnx2x_softc *sc, uint32_t attn)
+@@ -4002,7 +4008,7 @@ static void bnx2x_attn_int_deasserted1(struct bnx2x_softc *sc, uint32_t attn)
  		val &= ~(attn & HW_INTERRUT_ASSERT_SET_1);
  		REG_WR(sc, reg_offset, val);
  
@@ -1020,7 +1021,7 @@
  			    "FATAL HW block attention set1 0x%08x",
  			    (uint32_t) (attn & HW_INTERRUT_ASSERT_SET_1));
  		rte_panic("HW block attention set1");
-@@ -4015,7 +4021,7 @@ static void bnx2x_attn_int_deasserted0(struct bnx2x_softc *sc, uint32_t attn)
+@@ -4023,7 +4029,7 @@ static void bnx2x_attn_int_deasserted0(struct bnx2x_softc *sc, uint32_t attn)
  		val &= ~AEU_INPUTS_ATTN_BITS_SPIO5;
  		REG_WR(sc, reg_offset, val);
  
@@ -1029,7 +1030,7 @@
  
  /* Fan failure attention */
  		elink_hw_reset_phy(&sc->link_params);
-@@ -4105,14 +4111,14 @@ static void bnx2x_attn_int_deasserted(struct bnx2x_softc *sc, uint32_t deasserte
+@@ -4113,14 +4119,14 @@ static void bnx2x_attn_int_deasserted(struct bnx2x_softc *sc, uint32_t deasserte
  	}
  
  	val = ~deasserted;
@@ -1046,7 +1047,7 @@
  	}
  
  	reg_addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 :
-@@ -4142,12 +4148,12 @@ static void bnx2x_attn_int(struct bnx2x_softc *sc)
+@@ -4150,12 +4156,12 @@ static void bnx2x_attn_int(struct bnx2x_softc *sc)
  	uint32_t asserted = attn_bits & ~attn_ack & ~attn_state;
  	uint32_t deasserted = ~attn_bits & attn_ack & attn_state;
  
@@ -1061,7 +1062,7 @@
  	}
  
  	/* handle bits that were raised */
-@@ -4204,7 +4210,7 @@ static void bnx2x_handle_mcast_eqe(struct bnx2x_softc *sc)
+@@ -4212,7 +4218,7 @@ static void bnx2x_handle_mcast_eqe(struct bnx2x_softc *sc)
  	if (sc->mcast_obj.check_pending(&sc->mcast_obj)) {
  		rc = ecore_config_mcast(sc, &rparam, ECORE_MCAST_CMD_CONT);
  		if (rc < 0) {
@@ -1070,7 +1071,7 @@
  				    "Failed to send pending mcast commands (%d)",
  				    rc);
  		}
-@@ -4224,17 +4230,17 @@ bnx2x_handle_classification_eqe(struct bnx2x_softc *sc, union event_ring_elem *e
+@@ -4232,17 +4238,17 @@ bnx2x_handle_classification_eqe(struct bnx2x_softc *sc, union event_ring_elem *e
  
  	switch (le32toh(elem->message.data.eth_event.echo) >> BNX2X_SWCID_SHIFT) {
  	case ECORE_FILTER_MAC_PENDING:
@@ -1091,7 +1092,7 @@
  			    elem->message.data.eth_event.echo);
  		return;
  	}
-@@ -4242,9 +4248,10 @@ bnx2x_handle_classification_eqe(struct bnx2x_softc *sc, union event_ring_elem *e
+@@ -4250,9 +4256,10 @@ bnx2x_handle_classification_eqe(struct bnx2x_softc *sc, union event_ring_elem *e
  	rc = vlan_mac_obj->complete(sc, vlan_mac_obj, elem, &ramrod_flags);
  
  	if (rc < 0) {
@@ -1104,7 +1105,7 @@
  	}
  }
  
-@@ -4308,7 +4315,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4316,7 +4323,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  /* handle eq element */
  		switch (opcode) {
  		case EVENT_RING_OPCODE_STAT_QUERY:
@@ -1113,7 +1114,7 @@
  				    sc->stats_comp++);
  			/* nothing to do with stats comp */
  			goto next_spqe;
-@@ -4316,7 +4323,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4324,7 +4331,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  		case EVENT_RING_OPCODE_CFC_DEL:
  			/* handle according to cid range */
  			/* we may want to verify here that the sc state is HALTING */
@@ -1122,7 +1123,7 @@
  				    cid);
  			q_obj = bnx2x_cid_to_q_obj(sc, cid);
  			if (q_obj->complete_cmd(sc, q_obj, ECORE_Q_CMD_CFC_DEL)) {
-@@ -4325,14 +4332,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4333,14 +4340,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  			goto next_spqe;
  
  		case EVENT_RING_OPCODE_STOP_TRAFFIC:
@@ -1139,7 +1140,7 @@
  			if (f_obj->complete_cmd
  			    (sc, f_obj, ECORE_F_CMD_TX_START)) {
  				break;
-@@ -4342,7 +4349,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4350,7 +4357,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  		case EVENT_RING_OPCODE_FUNCTION_UPDATE:
  			echo = elem->message.data.function_update_event.echo;
  			if (echo == SWITCH_UPDATE) {
@@ -1148,7 +1149,7 @@
  					    "got FUNC_SWITCH_UPDATE ramrod");
  				if (f_obj->complete_cmd(sc, f_obj,
  							ECORE_F_CMD_SWITCH_UPDATE))
-@@ -4350,7 +4357,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4358,7 +4365,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  					break;
  				}
  			} else {
@@ -1157,7 +1158,7 @@
  					    "AFEX: ramrod completed FUNCTION_UPDATE");
  				f_obj->complete_cmd(sc, f_obj,
  						    ECORE_F_CMD_AFEX_UPDATE);
-@@ -4366,14 +4373,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4374,14 +4381,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  			goto next_spqe;
  
  		case EVENT_RING_OPCODE_FUNCTION_START:
@@ -1174,7 +1175,7 @@
  			if (f_obj->complete_cmd(sc, f_obj, ECORE_F_CMD_STOP)) {
  				break;
  			}
-@@ -4385,7 +4392,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4393,7 +4400,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  		case (EVENT_RING_OPCODE_RSS_UPDATE_RULES | BNX2X_STATE_OPENING_WAITING_PORT):
  			cid =
  			    elem->message.data.eth_event.echo & BNX2X_SWCID_MASK;
@@ -1183,7 +1184,7 @@
  				    cid);
  			rss_raw->clear_pending(rss_raw);
  			break;
-@@ -4396,7 +4403,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4404,7 +4411,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES | BNX2X_STATE_OPEN):
  		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES | BNX2X_STATE_DIAG):
  		case (EVENT_RING_OPCODE_CLASSIFICATION_RULES | BNX2X_STATE_CLOSING_WAITING_HALT):
@@ -1192,7 +1193,7 @@
  				    "got (un)set mac ramrod");
  			bnx2x_handle_classification_eqe(sc, elem);
  			break;
-@@ -4404,7 +4411,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4412,7 +4419,7 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  		case (EVENT_RING_OPCODE_MULTICAST_RULES | BNX2X_STATE_OPEN):
  		case (EVENT_RING_OPCODE_MULTICAST_RULES | BNX2X_STATE_DIAG):
  		case (EVENT_RING_OPCODE_MULTICAST_RULES | BNX2X_STATE_CLOSING_WAITING_HALT):
@@ -1201,7 +1202,7 @@
  				    "got mcast ramrod");
  			bnx2x_handle_mcast_eqe(sc);
  			break;
-@@ -4412,14 +4419,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
+@@ -4420,14 +4427,14 @@ static void bnx2x_eq_int(struct bnx2x_softc *sc)
  		case (EVENT_RING_OPCODE_FILTERS_RULES | BNX2X_STATE_OPEN):
  		case (EVENT_RING_OPCODE_FILTERS_RULES | BNX2X_STATE_DIAG):
  		case (EVENT_RING_OPCODE_FILTERS_RULES | BNX2X_STATE_CLOSING_WAITING_HALT):
@@ -1218,7 +1219,7 @@
  				    elem->message.opcode, sc->state);
  		}
  
-@@ -4445,12 +4452,16 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
+@@ -4453,12 +4460,16 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
  	uint16_t status;
  	int rc = 0;
  
@@ -1236,7 +1237,7 @@
  		bnx2x_attn_int(sc);
  		status &= ~BNX2X_DEF_SB_ATT_IDX;
  		rc = 1;
-@@ -4459,7 +4470,7 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
+@@ -4467,7 +4478,7 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
  	/* SP events: STAT_QUERY and others */
  	if (status & BNX2X_DEF_SB_IDX) {
  /* handle EQ completions */
@@ -1245,7 +1246,7 @@
  		bnx2x_eq_int(sc);
  		bnx2x_ack_sb(sc, sc->igu_dsb_id, USTORM_ID,
  			   le16toh(sc->def_idx), IGU_INT_NOP, 1);
-@@ -4468,7 +4479,7 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
+@@ -4476,7 +4487,7 @@ static int bnx2x_handle_sp_tq(struct bnx2x_softc *sc)
  
  	/* if status is non zero then something went wrong */
  	if (unlikely(status)) {
@@ -1254,7 +1255,7 @@
  			    "Got an unknown SP interrupt! (0x%04x)", status);
  	}
  
-@@ -4484,7 +4495,8 @@ static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp, int scan_fp)
+@@ -4492,7 +4503,8 @@ static void bnx2x_handle_fp_tq(struct bnx2x_fastpath *fp, int scan_fp)
  	struct bnx2x_softc *sc = fp->sc;
  	uint8_t more_rx = FALSE;
  
@@ -1264,7 +1265,7 @@
  
  	/* update the fastpath index */
  	bnx2x_update_fp_sb_idx(fp);
-@@ -4534,7 +4546,7 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
+@@ -4542,7 +4554,7 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
  		return 0;
  	}
  
@@ -1273,7 +1274,7 @@
  	//bnx2x_dump_status_block(sc);
  
  	FOR_EACH_ETH_QUEUE(sc, i) {
-@@ -4552,7 +4564,7 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
+@@ -4560,7 +4572,7 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
  	}
  
  	if (unlikely(status)) {
@@ -1282,7 +1283,7 @@
  			    "Unexpected fastpath status (0x%08x)!", status);
  	}
  
-@@ -4588,7 +4600,7 @@ static void bnx2x_init_func_obj(struct bnx2x_softc *sc)
+@@ -4596,7 +4608,7 @@ static void bnx2x_init_func_obj(struct bnx2x_softc *sc)
  {
  	sc->dmae_ready = 0;
  
@@ -1291,7 +1292,7 @@
  
  	ecore_init_func_obj(sc,
  			    &sc->func_obj,
-@@ -4604,7 +4616,7 @@ static int bnx2x_init_hw(struct bnx2x_softc *sc, uint32_t load_code)
+@@ -4612,7 +4624,7 @@ static int bnx2x_init_hw(struct bnx2x_softc *sc, uint32_t load_code)
  	struct ecore_func_state_params func_params = { NULL };
  	int rc;
  
@@ -1300,7 +1301,7 @@
  
  	/* prepare the parameters for function state transitions */
  	bnx2x_set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
-@@ -5193,7 +5205,7 @@ static void bnx2x_init_internal(struct bnx2x_softc *sc, uint32_t load_code)
+@@ -5201,7 +5213,7 @@ static void bnx2x_init_internal(struct bnx2x_softc *sc, uint32_t load_code)
  		break;
  
  	default:
@@ -1309,7 +1310,7 @@
  			    load_code);
  		break;
  	}
-@@ -5284,7 +5296,7 @@ bnx2x_extract_max_cfg(__rte_unused struct bnx2x_softc *sc, uint32_t mf_cfg)
+@@ -5292,7 +5304,7 @@ bnx2x_extract_max_cfg(__rte_unused struct bnx2x_softc *sc, uint32_t mf_cfg)
  			    FUNC_MF_CFG_MAX_BW_SHIFT);
  
  	if (!max_cfg) {
@@ -1318,7 +1319,7 @@
  			    "Max BW configured to 0 - using 100 instead");
  		max_cfg = 100;
  	}
-@@ -5548,7 +5560,7 @@ static void bnx2x_igu_int_enable(struct bnx2x_softc *sc)
+@@ -5556,7 +5568,7 @@ static void bnx2x_igu_int_enable(struct bnx2x_softc *sc)
  
  	val |= IGU_PF_CONF_FUNC_EN;
  
@@ -1327,7 +1328,7 @@
  		    val, ((msix) ? "MSI-X" : ((msi) ? "MSI" : "INTx")));
  
  	REG_WR(sc, IGU_REG_PF_CONFIGURATION, val);
-@@ -5596,7 +5608,7 @@ static void bnx2x_hc_int_disable(struct bnx2x_softc *sc)
+@@ -5604,7 +5616,7 @@ static void bnx2x_hc_int_disable(struct bnx2x_softc *sc)
  
  	REG_WR(sc, addr, val);
  	if (REG_RD(sc, addr) != val) {
@@ -1336,7 +1337,7 @@
  	}
  }
  
-@@ -5607,14 +5619,14 @@ static void bnx2x_igu_int_disable(struct bnx2x_softc *sc)
+@@ -5615,14 +5627,14 @@ static void bnx2x_igu_int_disable(struct bnx2x_softc *sc)
  	val &= ~(IGU_PF_CONF_MSI_MSIX_EN |
  		 IGU_PF_CONF_INT_LINE_EN | IGU_PF_CONF_ATTN_BIT_EN);
  
@@ -1353,7 +1354,7 @@
  	}
  }
  
-@@ -5631,7 +5643,7 @@ static void bnx2x_nic_init(struct bnx2x_softc *sc, int load_code)
+@@ -5639,7 +5651,7 @@ static void bnx2x_nic_init(struct bnx2x_softc *sc, int load_code)
  {
  	int i;
  
@@ -1362,7 +1363,7 @@
  
  	for (i = 0; i < sc->num_queues; i++) {
  		bnx2x_init_eth_fp(sc, i);
-@@ -5761,7 +5773,7 @@ static int bnx2x_set_power_state(struct bnx2x_softc *sc, uint8_t state)
+@@ -5769,7 +5781,7 @@ static int bnx2x_set_power_state(struct bnx2x_softc *sc, uint8_t state)
  
  	/* If there is no power capability, silently succeed */
  	if (!(sc->devinfo.pcie_cap_flags & BNX2X_PM_CAPABLE_FLAG)) {
@@ -1371,7 +1372,7 @@
  		return 0;
  	}
  
-@@ -5806,7 +5818,7 @@ static int bnx2x_set_power_state(struct bnx2x_softc *sc, uint8_t state)
+@@ -5814,7 +5826,7 @@ static int bnx2x_set_power_state(struct bnx2x_softc *sc, uint8_t state)
  		break;
  
  	default:
@@ -1380,7 +1381,7 @@
  			    state);
  		return -1;
  	}
-@@ -5824,7 +5836,7 @@ static uint8_t bnx2x_trylock_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -5832,7 +5844,7 @@ static uint8_t bnx2x_trylock_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  
  	/* Validating that the resource is within range */
  	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
@@ -1389,7 +1390,7 @@
  			    "resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)",
  			    resource, HW_LOCK_MAX_RESOURCE_VALUE);
  		return FALSE;
-@@ -5844,7 +5856,7 @@ static uint8_t bnx2x_trylock_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -5852,7 +5864,7 @@ static uint8_t bnx2x_trylock_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  		return TRUE;
  	}
  
@@ -1398,7 +1399,7 @@
  
  	return FALSE;
  }
-@@ -5937,7 +5949,7 @@ static int bnx2x_er_poll_igu_vq(struct bnx2x_softc *sc)
+@@ -5945,7 +5957,7 @@ static int bnx2x_er_poll_igu_vq(struct bnx2x_softc *sc)
  	} while (cnt-- > 0);
  
  	if (cnt <= 0) {
@@ -1407,7 +1408,7 @@
  			    pend_bits);
  		return -1;
  	}
-@@ -6018,7 +6030,7 @@ static int bnx2x_init_shmem(struct bnx2x_softc *sc)
+@@ -6026,7 +6038,7 @@ static int bnx2x_init_shmem(struct bnx2x_softc *sc)
  
  	} while (cnt++ < (MCP_TIMEOUT / MCP_ONE_TIMEOUT));
  
@@ -1416,7 +1417,7 @@
  
  	return -1;
  }
-@@ -6173,7 +6185,7 @@ static int bnx2x_process_kill(struct bnx2x_softc *sc, uint8_t global)
+@@ -6181,7 +6193,7 @@ static int bnx2x_process_kill(struct bnx2x_softc *sc, uint8_t global)
  	} while (cnt-- > 0);
  
  	if (cnt <= 0) {
@@ -1425,7 +1426,7 @@
  			    "ERROR: Tetris buffer didn't get empty or there "
  			    "are still outstanding read requests after 1s! "
  			    "sr_cnt=0x%08x, blk_cnt=0x%08x, port_is_idle_0=0x%08x, "
-@@ -6246,14 +6258,14 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
+@@ -6254,14 +6266,14 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
  		load_code = bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_REQ,
  					   DRV_MSG_CODE_LOAD_REQ_WITH_LFA);
  		if (!load_code) {
@@ -1442,7 +1443,7 @@
  				    "MCP unexpected response, aborting");
  			rc = -1;
  			goto exit_leader_reset2;
-@@ -6261,7 +6273,7 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
+@@ -6269,7 +6281,7 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
  
  		load_code = bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
  		if (!load_code) {
@@ -1451,7 +1452,7 @@
  			rc = -1;
  			goto exit_leader_reset2;
  		}
-@@ -6269,7 +6281,7 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
+@@ -6277,7 +6289,7 @@ static int bnx2x_leader_reset(struct bnx2x_softc *sc)
  
  	/* try to recover after the failure */
  	if (bnx2x_process_kill(sc, global)) {
@@ -1460,7 +1461,7 @@
  			    SC_PATH(sc));
  		rc = -1;
  		goto exit_leader_reset2;
-@@ -6428,12 +6440,12 @@ bnx2x_pf_rx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
+@@ -6436,12 +6448,12 @@ bnx2x_pf_rx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
  	/* validate rings have enough entries to cross high thresholds */
  	if (sc->dropless_fc &&
  	    pause->bd_th_hi + FW_PREFETCH_CNT > sc->rx_ring_size) {
@@ -1475,7 +1476,7 @@
  	}
  
  	pause->pri_map = 1;
-@@ -6504,7 +6516,7 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
+@@ -6512,7 +6524,7 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
  	struct ecore_queue_setup_params *setup_params = &q_params.params.setup;
  	int rc;
  
@@ -1484,7 +1485,7 @@
  
  	bnx2x_ack_sb(sc, fp->igu_sb_id, USTORM_ID, 0, IGU_INT_ENABLE, 0);
  
-@@ -6522,11 +6534,11 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
+@@ -6530,11 +6542,11 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
  	/* Change the state to INIT */
  	rc = ecore_queue_state_change(sc, &q_params);
  	if (rc) {
@@ -1498,7 +1499,7 @@
  
  	/* now move the Queue to the SETUP state */
  	memset(setup_params, 0, sizeof(*setup_params));
-@@ -6550,7 +6562,7 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
+@@ -6558,7 +6570,7 @@ bnx2x_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, uint8_t lea
  	/* change the state to SETUP */
  	rc = ecore_queue_state_change(sc, &q_params);
  	if (rc) {
@@ -1507,7 +1508,7 @@
  		return rc;
  	}
  
-@@ -6678,11 +6690,11 @@ bnx2x_set_mac_one(struct bnx2x_softc *sc, uint8_t * mac,
+@@ -6686,11 +6698,11 @@ bnx2x_set_mac_one(struct bnx2x_softc *sc, uint8_t * mac,
  	rc = ecore_config_vlan_mac(sc, &ramrod_param);
  
  	if (rc == ECORE_EXISTS) {
@@ -1521,7 +1522,7 @@
  			    "%s MAC failed (%d)", (set ? "Set" : "Delete"), rc);
  	}
  
-@@ -6693,7 +6705,7 @@ static int bnx2x_set_eth_mac(struct bnx2x_softc *sc, uint8_t set)
+@@ -6701,7 +6713,7 @@ static int bnx2x_set_eth_mac(struct bnx2x_softc *sc, uint8_t set)
  {
  	unsigned long ramrod_flags = 0;
  
@@ -1530,7 +1531,7 @@
  
  	bnx2x_set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
  
-@@ -6877,7 +6889,7 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
+@@ -6885,7 +6897,7 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
  
  	if (bnx2x_test_bit(BNX2X_LINK_REPORT_LINK_DOWN,
  			 &cur_data.link_report_flags)) {
@@ -1539,7 +1540,7 @@
  	} else {
  		__rte_unused const char *duplex;
  		__rte_unused const char *flow;
-@@ -6917,7 +6929,7 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
+@@ -6925,7 +6937,7 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
  			flow = "none";
  		}
  
@@ -1548,7 +1549,7 @@
  			    "NIC Link is Up, %d Mbps %s duplex, Flow control: %s",
  			    cur_data.line_speed, duplex, flow);
  	}
-@@ -7058,7 +7070,7 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
+@@ -7080,7 +7092,7 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
  {
  	if ((sc->state != BNX2X_STATE_OPEN) ||
  	    (atomic_load_acq_long(&sc->periodic_flags) == PERIODIC_STOP)) {
@@ -1557,7 +1558,7 @@
  			    sc->state);
  		return;
  	}
-@@ -7095,7 +7107,7 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
+@@ -7117,7 +7129,7 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
  		if ((drv_pulse != mcp_pulse) &&
  		    (drv_pulse != ((mcp_pulse + 1) & MCP_PULSE_SEQ_MASK))) {
  			/* someone lost a heartbeat... */
@@ -1566,7 +1567,7 @@
  				    "drv_pulse (0x%x) != mcp_pulse (0x%x)",
  				    drv_pulse, mcp_pulse);
  		}
-@@ -7111,7 +7123,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7133,7 +7145,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  	uint32_t load_code = 0;
  	int i, rc = 0;
  
@@ -1575,7 +1576,7 @@
  
  	sc->state = BNX2X_STATE_OPENING_WAITING_LOAD;
  
-@@ -7165,7 +7177,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7187,7 +7199,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  				goto bnx2x_nic_load_error2;
  			}
  		} else {
@@ -1584,7 +1585,7 @@
  			load_code = bnx2x_nic_load_no_mcp(sc);
  		}
  
-@@ -7177,7 +7189,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7199,7 +7211,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  
  /* Initialize HW */
  		if (bnx2x_init_hw(sc, load_code) != 0) {
@@ -1593,7 +1594,7 @@
  			bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
  			sc->state = BNX2X_STATE_CLOSED;
  			rc = -ENXIO;
-@@ -7197,7 +7209,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7219,7 +7231,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  		sc->state = BNX2X_STATE_OPENING_WAITING_PORT;
  		rc = bnx2x_func_start(sc);
  		if (rc) {
@@ -1602,7 +1603,7 @@
  			bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
  			sc->state = BNX2X_STATE_ERROR;
  			goto bnx2x_nic_load_error3;
-@@ -7208,7 +7220,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7230,7 +7242,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  			load_code =
  			    bnx2x_fw_command(sc, DRV_MSG_CODE_LOAD_DONE, 0);
  			if (!load_code) {
@@ -1611,7 +1612,7 @@
  					    "MCP response failure, aborting");
  				sc->state = BNX2X_STATE_ERROR;
  				rc = -ENXIO;
-@@ -7219,7 +7231,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7241,7 +7253,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  
  	rc = bnx2x_setup_leading(sc);
  	if (rc) {
@@ -1620,7 +1621,7 @@
  		sc->state = BNX2X_STATE_ERROR;
  		goto bnx2x_nic_load_error3;
  	}
-@@ -7231,7 +7243,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7253,7 +7265,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  			rc = bnx2x_vf_setup_queue(sc, &sc->fp[i], FALSE);
  
  		if (rc) {
@@ -1629,7 +1630,7 @@
  			sc->state = BNX2X_STATE_ERROR;
  			goto bnx2x_nic_load_error3;
  		}
-@@ -7239,7 +7251,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7261,7 +7273,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  
  	rc = bnx2x_init_rss_pf(sc);
  	if (rc) {
@@ -1638,7 +1639,7 @@
  		sc->state = BNX2X_STATE_ERROR;
  		goto bnx2x_nic_load_error3;
  	}
-@@ -7255,7 +7267,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7277,7 +7289,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  	}
  
  	if (rc) {
@@ -1647,7 +1648,7 @@
  		sc->state = BNX2X_STATE_ERROR;
  		goto bnx2x_nic_load_error3;
  	}
-@@ -7307,13 +7319,13 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
+@@ -7329,13 +7341,13 @@ int bnx2x_nic_load(struct bnx2x_softc *sc)
  
  	/* wait for all pending SP commands to complete */
  	if (IS_PF(sc) && !bnx2x_wait_sp_comp(sc, ~0x0UL)) {
@@ -1663,7 +1664,7 @@
  
  	return 0;
  
-@@ -7362,7 +7374,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
+@@ -7384,7 +7396,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
  
  	/* Check if the driver is still running and bail out if it is. */
  	if (sc->state != BNX2X_STATE_CLOSED) {
@@ -1672,7 +1673,7 @@
  		rc = 0;
  		goto bnx2x_init_done;
  	}
-@@ -7400,7 +7412,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
+@@ -7422,7 +7434,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
  				     && (!global ||!other_load_status))
  				    && bnx2x_trylock_leader_lock(sc)
  				    && !bnx2x_leader_reset(sc)) {
@@ -1681,7 +1682,7 @@
  						    "Recovered during init");
  					break;
  				}
-@@ -7410,7 +7422,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
+@@ -7432,7 +7444,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
  
  				sc->recovery_state = BNX2X_RECOVERY_FAILED;
  
@@ -1690,7 +1691,7 @@
  					    "Recovery flow hasn't properly "
  					    "completed yet, try again later. "
  					    "If you still see this message after a "
-@@ -7429,7 +7441,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
+@@ -7451,7 +7463,7 @@ int bnx2x_init(struct bnx2x_softc *sc)
  bnx2x_init_done:
  
  	if (rc) {
@@ -1699,7 +1700,7 @@
  			    "stack notified driver is NOT running!");
  	}
  
-@@ -7461,7 +7473,7 @@ static void bnx2x_get_function_num(struct bnx2x_softc *sc)
+@@ -7483,7 +7495,7 @@ static void bnx2x_get_function_num(struct bnx2x_softc *sc)
  		sc->pfunc_abs = (sc->pfunc_rel | sc->path_id);
  	}
  
@@ -1708,7 +1709,7 @@
  		    "Relative function %d, Absolute function %d, Path %d",
  		    sc->pfunc_rel, sc->pfunc_abs, sc->path_id);
  }
-@@ -7498,14 +7510,14 @@ static uint32_t bnx2x_pcie_capability_read(struct bnx2x_softc *sc, int reg)
+@@ -7520,14 +7532,14 @@ static uint32_t bnx2x_pcie_capability_read(struct bnx2x_softc *sc, int reg)
  	/* ensure PCIe capability is enabled */
  	caps = pci_find_cap(sc, PCIY_EXPRESS, BNX2X_PCI_CAP);
  	if (NULL != caps) {
@@ -1725,7 +1726,7 @@
  
  	return 0;
  }
-@@ -7523,7 +7535,7 @@ static uint8_t bnx2x_is_pcie_pending(struct bnx2x_softc *sc)
+@@ -7545,7 +7557,7 @@ static uint8_t bnx2x_is_pcie_pending(struct bnx2x_softc *sc)
  */
  static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
  {
@@ -1734,7 +1735,7 @@
  
  	struct bnx2x_pci_cap *caps;
  	uint16_t link_status;
-@@ -7532,7 +7544,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
+@@ -7556,7 +7568,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
  	/* check if PCI Power Management is enabled */
  	caps = pci_find_cap(sc, PCIY_PMG, BNX2X_PCI_CAP);
  	if (NULL != caps) {
@@ -1743,7 +1744,7 @@
  			    "id=0x%04X type=0x%04X addr=0x%08X",
  			    caps->id, caps->type, caps->addr);
  
-@@ -7546,7 +7558,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
+@@ -7570,7 +7582,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
  	sc->devinfo.pcie_link_width =
  	    ((link_status & PCIM_LINK_STA_WIDTH) >> 4);
  
@@ -1752,7 +1753,7 @@
  		    sc->devinfo.pcie_link_speed, sc->devinfo.pcie_link_width);
  
  	sc->devinfo.pcie_cap_flags |= BNX2X_PCIE_CAPABLE_FLAG;
-@@ -7554,7 +7566,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
+@@ -7578,7 +7590,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
  	/* check if MSI capability is enabled */
  	caps = pci_find_cap(sc, PCIY_MSI, BNX2X_PCI_CAP);
  	if (NULL != caps) {
@@ -1761,7 +1762,7 @@
  
  		sc->devinfo.pcie_cap_flags |= BNX2X_MSI_CAPABLE_FLAG;
  		sc->devinfo.pcie_msi_cap_reg = caps->addr;
-@@ -7563,7 +7575,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
+@@ -7587,7 +7599,7 @@ static void bnx2x_probe_pci_caps(struct bnx2x_softc *sc)
  	/* check if MSI-X capability is enabled */
  	caps = pci_find_cap(sc, PCIY_MSIX, BNX2X_PCI_CAP);
  	if (NULL != caps) {
@@ -1770,7 +1771,7 @@
  
  		sc->devinfo.pcie_cap_flags |= BNX2X_MSIX_CAPABLE_FLAG;
  		sc->devinfo.pcie_msix_cap_reg = caps->addr;
-@@ -7583,7 +7595,7 @@ static int bnx2x_get_shmem_mf_cfg_info_sd(struct bnx2x_softc *sc)
+@@ -7607,7 +7619,7 @@ static int bnx2x_get_shmem_mf_cfg_info_sd(struct bnx2x_softc *sc)
  	mf_info->multi_vnics_mode = 1;
  
  	if (!VALID_OVLAN(mf_info->ext_id)) {
@@ -1779,7 +1780,7 @@
  		return 1;
  	}
  
-@@ -7707,14 +7719,14 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
+@@ -7731,14 +7743,14 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
  	/* various MF mode sanity checks... */
  
  	if (mf_info->mf_config[SC_VN(sc)] & FUNC_MF_CFG_FUNC_HIDE) {
@@ -1796,7 +1797,7 @@
  			    mf_info->vnics_per_port, mf_info->multi_vnics_mode);
  		return 1;
  	}
-@@ -7722,13 +7734,13 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
+@@ -7746,13 +7758,13 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
  	if (mf_info->mf_mode == MULTI_FUNCTION_SD) {
  /* vnic id > 0 must have valid ovlan in switch-dependent mode */
  		if ((SC_VN(sc) > 0) && !VALID_OVLAN(OVLAN(sc))) {
@@ -1812,7 +1813,7 @@
  				    "mf_mode=SD multi_vnics_mode=%d ovlan=%d",
  				    mf_info->multi_vnics_mode, OVLAN(sc));
  			return 1;
-@@ -7747,7 +7759,7 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
+@@ -7771,7 +7783,7 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
  			      && !VALID_OVLAN(ovlan1))
  			     || ((!mf_info->multi_vnics_mode)
  				 && VALID_OVLAN(ovlan1)))) {
@@ -1821,7 +1822,7 @@
  					    "mf_mode=SD function %d MF config "
  					    "mismatch, multi_vnics_mode=%d ovlan=%d",
  					    i, mf_info->multi_vnics_mode,
-@@ -7771,7 +7783,7 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
+@@ -7795,7 +7807,7 @@ static int bnx2x_check_valid_mf_cfg(struct bnx2x_softc *sc)
  				    && !(mf_cfg2 & FUNC_MF_CFG_FUNC_HIDE)
  				    && VALID_OVLAN(ovlan2)
  				    && (ovlan1 == ovlan2)) {
@@ -1830,7 +1831,7 @@
  						    "mf_mode=SD functions %d and %d "
  						    "have the same ovlan (%d)",
  						    i, j, ovlan1);
-@@ -7801,7 +7813,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
+@@ -7825,7 +7837,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
  	}
  
  	if (sc->devinfo.mf_cfg_base == SHMEM_MF_CFG_ADDR_NONE) {
@@ -1839,7 +1840,7 @@
  		return 1;
  	}
  
-@@ -7819,7 +7831,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
+@@ -7843,7 +7855,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
  		if (mac_upper != FUNC_MF_CFG_UPPERMAC_DEFAULT) {
  			mf_info->mf_mode = MULTI_FUNCTION_SI;
  		} else {
@@ -1848,7 +1849,7 @@
  				    "Invalid config for Switch Independent mode");
  		}
  
-@@ -7835,7 +7847,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
+@@ -7859,7 +7871,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
  		    FUNC_MF_CFG_E1HOV_TAG_DEFAULT) {
  			mf_info->mf_mode = MULTI_FUNCTION_SD;
  		} else {
@@ -1857,7 +1858,7 @@
  				    "Invalid config for Switch Dependent mode");
  		}
  
-@@ -7859,14 +7871,14 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
+@@ -7883,14 +7895,14 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
  		    (mac_upper != FUNC_MF_CFG_UPPERMAC_DEFAULT)) {
  			mf_info->mf_mode = MULTI_FUNCTION_AFEX;
  		} else {
@@ -1874,7 +1875,7 @@
  			    (val & SHARED_FEAT_CFG_FORCE_SF_MODE_MASK));
  
  		return 1;
-@@ -7898,7 +7910,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
+@@ -7922,7 +7934,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
  	if (mf_info->mf_mode == SINGLE_FUNCTION) {
  /* invalid MF config */
  		if (SC_VN(sc) >= 1) {
@@ -1883,7 +1884,7 @@
  			return 1;
  		}
  
-@@ -7927,7 +7939,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
+@@ -7951,7 +7963,7 @@ static int bnx2x_get_mf_cfg_info(struct bnx2x_softc *sc)
  
  	default:
  
@@ -1892,7 +1893,7 @@
  			    mf_info->mf_mode);
  		return 1;
  	}
-@@ -7955,7 +7967,7 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
+@@ -7979,7 +7991,7 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
  	int port;
  	uint32_t mac_hi, mac_lo, val;
  
@@ -1901,7 +1902,7 @@
  
  	port = SC_PORT(sc);
  	mac_hi = mac_lo = 0;
-@@ -8029,7 +8041,7 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
+@@ -8053,7 +8065,7 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
  
  	if ((mac_lo == 0) && (mac_hi == 0)) {
  		*sc->mac_addr_str = 0;
@@ -1910,7 +1911,7 @@
  	} else {
  		sc->link_params.mac_addr[0] = (uint8_t) (mac_hi >> 8);
  		sc->link_params.mac_addr[1] = (uint8_t) (mac_hi);
-@@ -8045,7 +8057,8 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
+@@ -8069,7 +8081,8 @@ static int bnx2x_get_shmem_info(struct bnx2x_softc *sc)
  			 sc->link_params.mac_addr[3],
  			 sc->link_params.mac_addr[4],
  			 sc->link_params.mac_addr[5]);
@@ -1920,7 +1921,7 @@
  	}
  
  	return 0;
-@@ -8060,24 +8073,24 @@ static void bnx2x_media_detect(struct bnx2x_softc *sc)
+@@ -8084,24 +8097,24 @@ static void bnx2x_media_detect(struct bnx2x_softc *sc)
  	case ELINK_ETH_PHY_XFP_FIBER:
  	case ELINK_ETH_PHY_KR:
  	case ELINK_ETH_PHY_CX4:
@@ -1950,7 +1951,7 @@
  		sc->media = 0;
  		break;
  	}
-@@ -8140,7 +8153,7 @@ static int bnx2x_get_igu_cam_info(struct bnx2x_softc *sc)
+@@ -8164,7 +8177,7 @@ static int bnx2x_get_igu_cam_info(struct bnx2x_softc *sc)
  	sc->igu_sb_cnt = min(sc->igu_sb_cnt, igu_sb_cnt);
  
  	if (igu_sb_cnt == 0) {
@@ -1959,7 +1960,7 @@
  		return -1;
  	}
  
-@@ -8177,7 +8190,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
+@@ -8201,7 +8214,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
  		sc->devinfo.chip_id |= 0x1;
  	}
  
@@ -1968,7 +1969,7 @@
  		    "chip_id=0x%08x (num=0x%04x rev=0x%01x metal=0x%02x bond=0x%01x)",
  		    sc->devinfo.chip_id,
  		    ((sc->devinfo.chip_id >> 16) & 0xffff),
-@@ -8188,7 +8201,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
+@@ -8212,7 +8225,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
  	val = (REG_RD(sc, 0x2874) & 0x55);
  	if ((sc->devinfo.chip_id & 0x1) || (CHIP_IS_E1H(sc) && (val == 0x55))) {
  		sc->flags |= BNX2X_ONE_PORT_FLAG;
@@ -1977,7 +1978,7 @@
  	}
  
  	/* set the doorbell size */
-@@ -8212,7 +8225,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
+@@ -8236,7 +8249,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
  		sc->devinfo.chip_port_mode =
  		    (val) ? CHIP_4_PORT_MODE : CHIP_2_PORT_MODE;
  
@@ -1986,7 +1987,7 @@
  	}
  
  	/* get the function and path info for the device */
-@@ -8227,7 +8240,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
+@@ -8251,7 +8264,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
  
  	if (!sc->devinfo.shmem_base) {
  /* this should ONLY prevent upcoming shmem reads */
@@ -1995,7 +1996,7 @@
  		sc->flags |= BNX2X_NO_MCP_FLAG;
  		return 0;
  	}
-@@ -8236,7 +8249,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
+@@ -8260,7 +8273,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
  	val = SHMEM_RD(sc, validity_map[SC_PORT(sc)]);
  	if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) !=
  	    (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) {
@@ -2004,7 +2005,7 @@
  			    val);
  		return 0;
  	}
-@@ -8249,7 +8262,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
+@@ -8273,7 +8286,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
  		 ((sc->devinfo.bc_ver >> 24) & 0xff),
  		 ((sc->devinfo.bc_ver >> 16) & 0xff),
  		 ((sc->devinfo.bc_ver >> 8) & 0xff));
@@ -2013,7 +2014,7 @@
  
  	/* get the bootcode shmem address */
  	sc->devinfo.mf_cfg_base = bnx2x_get_shmem_mf_cfg_base(sc);
-@@ -8304,7 +8317,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
+@@ -8328,7 +8341,7 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
  			}
  
  			if (REG_RD(sc, IGU_REG_RESET_MEMORIES)) {
@@ -2022,7 +2023,7 @@
  					    "FORCING IGU Normal Mode failed!!!");
  				bnx2x_release_hw_lock(sc, HW_LOCK_RESOURCE_RESET);
  				return -1;
-@@ -8312,10 +8325,10 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
+@@ -8336,10 +8349,10 @@ static int bnx2x_get_device_info(struct bnx2x_softc *sc)
  		}
  
  		if (val & IGU_BLOCK_CONFIGURATION_REG_BACKWARD_COMP_EN) {
@@ -2035,7 +2036,7 @@
  		}
  
  		rc = bnx2x_get_igu_cam_info(sc);
-@@ -8389,7 +8402,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
+@@ -8413,7 +8426,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
  	}
  
  	if (!(sc->port.supported[0] || sc->port.supported[1])) {
@@ -2044,7 +2045,7 @@
  			    "Invalid phy config in NVRAM (PHY1=0x%08x PHY2=0x%08x)",
  			    SHMEM_RD(sc,
  				     dev_info.port_hw_config
-@@ -8415,7 +8428,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
+@@ -8439,7 +8452,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
  				   NIG_REG_XGXS0_CTRL_PHY_ADDR + port * 0x18);
  			break;
  		default:
@@ -2053,7 +2054,7 @@
  				    "Invalid switch config in"
  				    "link_config=0x%08x",
  				    sc->port.link_config[0]);
-@@ -8423,7 +8436,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
+@@ -8447,7 +8460,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
  		}
  	}
  
@@ -2062,7 +2063,7 @@
  
  	/* mask what we support according to speed_cap_mask per configuration */
  	for (idx = 0; idx < cfg_size; idx++) {
-@@ -8476,7 +8489,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
+@@ -8500,7 +8513,7 @@ bnx2x_link_settings_supported(struct bnx2x_softc *sc, uint32_t switch_cfg)
  		}
  	}
  
@@ -2071,7 +2072,7 @@
  		    sc->port.supported[0], sc->port.supported[1]);
  }
  
-@@ -8535,7 +8548,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
+@@ -8559,7 +8572,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
  				sc->port.advertising[idx] |=
  				    (ADVERTISED_10baseT_Full | ADVERTISED_TP);
  			} else {
@@ -2080,7 +2081,7 @@
  					    "Invalid NVRAM config link_config=0x%08x "
  					    "speed_cap_mask=0x%08x",
  					    link_config,
-@@ -8555,7 +8568,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
+@@ -8579,7 +8592,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
  				sc->port.advertising[idx] |=
  				    (ADVERTISED_10baseT_Half | ADVERTISED_TP);
  			} else {
@@ -2089,7 +2090,7 @@
  					    "Invalid NVRAM config link_config=0x%08x "
  					    "speed_cap_mask=0x%08x",
  					    link_config,
-@@ -8574,7 +8587,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
+@@ -8598,7 +8611,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
  				sc->port.advertising[idx] |=
  				    (ADVERTISED_100baseT_Full | ADVERTISED_TP);
  			} else {
@@ -2098,7 +2099,7 @@
  					    "Invalid NVRAM config link_config=0x%08x "
  					    "speed_cap_mask=0x%08x",
  					    link_config,
-@@ -8594,7 +8607,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
+@@ -8618,7 +8631,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
  				sc->port.advertising[idx] |=
  				    (ADVERTISED_100baseT_Half | ADVERTISED_TP);
  			} else {
@@ -2107,7 +2108,7 @@
  					    "Invalid NVRAM config link_config=0x%08x "
  					    "speed_cap_mask=0x%08x",
  					    link_config,
-@@ -8612,7 +8625,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
+@@ -8636,7 +8649,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
  				sc->port.advertising[idx] |=
  				    (ADVERTISED_1000baseT_Full | ADVERTISED_TP);
  			} else {
@@ -2116,7 +2117,7 @@
  					    "Invalid NVRAM config link_config=0x%08x "
  					    "speed_cap_mask=0x%08x",
  					    link_config,
-@@ -8630,7 +8643,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
+@@ -8654,7 +8667,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
  				sc->port.advertising[idx] |=
  				    (ADVERTISED_2500baseX_Full | ADVERTISED_TP);
  			} else {
@@ -2125,7 +2126,7 @@
  					    "Invalid NVRAM config link_config=0x%08x "
  					    "speed_cap_mask=0x%08x",
  					    link_config,
-@@ -8649,7 +8662,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
+@@ -8673,7 +8686,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
  				    (ADVERTISED_10000baseT_Full |
  				     ADVERTISED_FIBRE);
  			} else {
@@ -2134,7 +2135,7 @@
  					    "Invalid NVRAM config link_config=0x%08x "
  					    "speed_cap_mask=0x%08x",
  					    link_config,
-@@ -8664,7 +8677,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
+@@ -8688,7 +8701,7 @@ static void bnx2x_link_settings_requested(struct bnx2x_softc *sc)
  			break;
  
  		default:
@@ -2143,7 +2144,7 @@
  				    "Invalid NVRAM config link_config=0x%08x "
  				    "speed_cap_mask=0x%08x", link_config,
  				    sc->link_params.speed_cap_mask[idx]);
-@@ -8695,7 +8708,7 @@ static void bnx2x_get_phy_info(struct bnx2x_softc *sc)
+@@ -8719,7 +8732,7 @@ static void bnx2x_get_phy_info(struct bnx2x_softc *sc)
  	uint8_t port = SC_PORT(sc);
  	uint32_t eee_mode;
  
@@ -2152,7 +2153,7 @@
  
  	/* shmem data already read in bnx2x_get_shmem_info() */
  
-@@ -8855,7 +8868,7 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc)
+@@ -8879,7 +8892,7 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc)
  		snprintf(buf, sizeof(buf), "fp_%d_sb", i);
  		if (bnx2x_dma_alloc(sc, sizeof(union bnx2x_host_hc_status_block),
  				  &fp->sb_dma, buf, RTE_CACHE_LINE_SIZE) != 0) {
@@ -2161,7 +2162,7 @@
  			return -1;
  		} else {
  			if (CHIP_IS_E2E3(sc)) {
-@@ -8945,7 +8958,7 @@ static int bnx2x_prev_mcp_done(struct bnx2x_softc *sc)
+@@ -8969,7 +8982,7 @@ static int bnx2x_prev_mcp_done(struct bnx2x_softc *sc)
  	uint32_t rc = bnx2x_fw_command(sc, DRV_MSG_CODE_UNLOAD_DONE,
  				     DRV_MSG_CODE_UNLOAD_SKIP_LINK_RESET);
  	if (!rc) {
@@ -2170,7 +2171,7 @@
  		return -1;
  	}
  
-@@ -8977,12 +8990,12 @@ static uint8_t bnx2x_prev_is_path_marked(struct bnx2x_softc *sc)
+@@ -9001,12 +9014,12 @@ static uint8_t bnx2x_prev_is_path_marked(struct bnx2x_softc *sc)
  	tmp = bnx2x_prev_path_get_entry(sc);
  	if (tmp) {
  		if (tmp->aer) {
@@ -2185,7 +2186,7 @@
  				    "Path %d/%d/%d was already cleaned from previous drivers",
  				    sc->pcie_bus, sc->pcie_device, SC_PATH(sc));
  		}
-@@ -9003,11 +9016,11 @@ static int bnx2x_prev_mark_path(struct bnx2x_softc *sc, uint8_t after_undi)
+@@ -9027,11 +9040,11 @@ static int bnx2x_prev_mark_path(struct bnx2x_softc *sc, uint8_t after_undi)
  	tmp = bnx2x_prev_path_get_entry(sc);
  	if (tmp) {
  		if (!tmp->aer) {
@@ -2199,7 +2200,7 @@
  				    "Removing AER indication from path %d/%d/%d",
  				    sc->pcie_bus, sc->pcie_device, SC_PATH(sc));
  			tmp->aer = 0;
-@@ -9023,7 +9036,7 @@ static int bnx2x_prev_mark_path(struct bnx2x_softc *sc, uint8_t after_undi)
+@@ -9047,7 +9060,7 @@ static int bnx2x_prev_mark_path(struct bnx2x_softc *sc, uint8_t after_undi)
  	tmp = rte_malloc("", sizeof(struct bnx2x_prev_list_node),
  			 RTE_CACHE_LINE_SIZE);
  	if (!tmp) {
@@ -2208,7 +2209,7 @@
  		return -1;
  	}
  
-@@ -9048,13 +9061,13 @@ static int bnx2x_do_flr(struct bnx2x_softc *sc)
+@@ -9072,13 +9085,13 @@ static int bnx2x_do_flr(struct bnx2x_softc *sc)
  
  	/* only E2 and onwards support FLR */
  	if (CHIP_IS_E1x(sc)) {
@@ -2224,7 +2225,7 @@
  			    "FLR not supported by BC_VER: 0x%08x",
  			    sc->devinfo.bc_ver);
  		return -1;
-@@ -9071,7 +9084,7 @@ static int bnx2x_do_flr(struct bnx2x_softc *sc)
+@@ -9095,7 +9108,7 @@ static int bnx2x_do_flr(struct bnx2x_softc *sc)
  		}
  	}
  
@@ -2233,7 +2234,7 @@
  		    "proceeding with reset anyway");
  
  clear:
-@@ -9219,7 +9232,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
+@@ -9243,7 +9256,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
  		if (reset_reg & MISC_REGISTERS_RESET_REG_1_RST_DORQ) {
  			tmp_reg = REG_RD(sc, DORQ_REG_NORM_CID_OFST);
  			if (tmp_reg == 0x7) {
@@ -2242,7 +2243,7 @@
  				prev_undi = TRUE;
  				/* clear the UNDI indication */
  				REG_WR(sc, DORQ_REG_NORM_CID_OFST, 0);
-@@ -9238,7 +9251,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
+@@ -9262,7 +9275,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
  				break;
  			}
  
@@ -2251,7 +2252,7 @@
  
  			/* reset timer as long as BRB actually gets emptied */
  			if (prev_brb > tmp_reg) {
-@@ -9256,7 +9269,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
+@@ -9280,7 +9293,7 @@ static int bnx2x_prev_unload_common(struct bnx2x_softc *sc)
  		}
  
  		if (!timer_count) {
@@ -2260,7 +2261,7 @@
  		}
  	}
  
-@@ -9311,7 +9324,7 @@ static int bnx2x_prev_unload_uncommon(struct bnx2x_softc *sc)
+@@ -9335,7 +9348,7 @@ static int bnx2x_prev_unload_uncommon(struct bnx2x_softc *sc)
  		return 0;
  	}
  
@@ -2269,7 +2270,7 @@
  
  	/* Close the MCP request, return failure */
  	rc = bnx2x_prev_mcp_done(sc);
-@@ -9358,7 +9371,7 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
+@@ -9382,7 +9395,7 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
  		/* Lock MCP using an unload request */
  		fw = bnx2x_fw_command(sc, DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS, 0);
  		if (!fw) {
@@ -2278,7 +2279,7 @@
  			rc = -1;
  			break;
  		}
-@@ -9378,7 +9391,7 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
+@@ -9402,7 +9415,7 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
  	} while (--time_counter);
  
  	if (!time_counter || rc) {
@@ -2287,7 +2288,7 @@
  		rc = -1;
  	}
  
-@@ -9395,7 +9408,7 @@ bnx2x_dcbx_set_state(struct bnx2x_softc *sc, uint8_t dcb_on, uint32_t dcbx_enabl
+@@ -9419,7 +9432,7 @@ bnx2x_dcbx_set_state(struct bnx2x_softc *sc, uint8_t dcb_on, uint32_t dcbx_enabl
  		sc->dcb_state = FALSE;
  		sc->dcbx_enabled = BNX2X_DCBX_ENABLED_INVALID;
  	}
@@ -2296,7 +2297,7 @@
  		    "DCB state [%s:%s]",
  		    dcb_on ? "ON" : "OFF",
  		    (dcbx_enabled == BNX2X_DCBX_ENABLED_OFF) ? "user-mode" :
-@@ -9428,7 +9441,7 @@ static void bnx2x_init_multi_cos(struct bnx2x_softc *sc)
+@@ -9452,7 +9465,7 @@ static void bnx2x_init_multi_cos(struct bnx2x_softc *sc)
  		if (cos < sc->max_cos) {
  			sc->prio_to_cos[pri] = cos;
  		} else {
@@ -2305,7 +2306,7 @@
  				    "Invalid COS %d for priority %d "
  				    "(max COS is %d), setting to 0", cos, pri,
  				    (sc->max_cos - 1));
-@@ -9449,7 +9462,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
+@@ -9473,7 +9486,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
  	cap = sc->pci_caps = rte_zmalloc("caps", sizeof(struct bnx2x_pci_cap),
  					 RTE_CACHE_LINE_SIZE);
  	if (!cap) {
@@ -2314,7 +2315,7 @@
  		return -ENOMEM;
  	}
  
-@@ -9460,7 +9473,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
+@@ -9484,7 +9497,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
  	pci_read(sc, PCIR_STATUS, &status, 2);
  	if (!(status & PCIM_STATUS_CAPPRESENT)) {
  #endif
@@ -2323,7 +2324,7 @@
  		return -1;
  	}
  
-@@ -9480,7 +9493,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
+@@ -9504,7 +9517,7 @@ static int bnx2x_pci_get_caps(struct bnx2x_softc *sc)
  					sizeof(struct bnx2x_pci_cap),
  					RTE_CACHE_LINE_SIZE);
  		if (!cap->next) {
@@ -2332,7 +2333,7 @@
  			return -ENOMEM;
  		}
  		cap = cap->next;
-@@ -9516,25 +9529,25 @@ void bnx2x_load_firmware(struct bnx2x_softc *sc)
+@@ -9540,25 +9553,25 @@ void bnx2x_load_firmware(struct bnx2x_softc *sc)
  		? FW_NAME_57711 : FW_NAME_57810;
  	f = open(fwname, O_RDONLY);
  	if (f < 0) {
@@ -2362,7 +2363,7 @@
  		close(f);
  		return;
  	}
-@@ -9542,10 +9555,11 @@ void bnx2x_load_firmware(struct bnx2x_softc *sc)
+@@ -9566,10 +9579,11 @@ void bnx2x_load_firmware(struct bnx2x_softc *sc)
  
  	sc->fw_len = st.st_size;
  	if (sc->fw_len < FW_HEADER_LEN) {
@@ -2376,7 +2377,7 @@
  }
  
  static void
-@@ -9612,11 +9626,11 @@ int bnx2x_attach(struct bnx2x_softc *sc)
+@@ -9636,11 +9650,11 @@ int bnx2x_attach(struct bnx2x_softc *sc)
  {
  	int rc;
  
@@ -2390,7 +2391,7 @@
  		return rc;
  	}
  
-@@ -9655,7 +9669,7 @@ int bnx2x_attach(struct bnx2x_softc *sc)
+@@ -9679,7 +9693,7 @@ int bnx2x_attach(struct bnx2x_softc *sc)
  
  		/* get device info and set params */
  		if (bnx2x_get_device_info(sc) != 0) {
@@ -2399,7 +2400,7 @@
  			return -ENXIO;
  		}
  
-@@ -9754,7 +9768,7 @@ bnx2x_igu_clear_sb_gen(struct bnx2x_softc *sc, uint8_t func, uint8_t idu_sb_id,
+@@ -9778,7 +9792,7 @@ bnx2x_igu_clear_sb_gen(struct bnx2x_softc *sc, uint8_t func, uint8_t idu_sb_id,
  
  	mb();
  
@@ -2408,7 +2409,7 @@
  		    ctl, igu_addr_ctl);
  	REG_WR(sc, igu_addr_ctl, ctl);
  
-@@ -9766,7 +9780,7 @@ bnx2x_igu_clear_sb_gen(struct bnx2x_softc *sc, uint8_t func, uint8_t idu_sb_id,
+@@ -9790,7 +9804,7 @@ bnx2x_igu_clear_sb_gen(struct bnx2x_softc *sc, uint8_t func, uint8_t idu_sb_id,
  	}
  
  	if (!(REG_RD(sc, igu_addr_ack) & sb_bit)) {
@@ -2417,7 +2418,7 @@
  			    "Unable to finish IGU cleanup: "
  			    "idu_sb_id %d offset %d bit %d (cnt %d)",
  			    idu_sb_id, idu_sb_id / 32, idu_sb_id % 32, cnt);
-@@ -9786,7 +9800,7 @@ static void bnx2x_reset_common(struct bnx2x_softc *sc)
+@@ -9810,7 +9824,7 @@ static void bnx2x_reset_common(struct bnx2x_softc *sc)
  {
  	uint32_t val = 0x1400;
  
@@ -2426,7 +2427,7 @@
  
  	/* reset_common */
  	REG_WR(sc, (GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR),
-@@ -9995,7 +10009,8 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
+@@ -10019,7 +10033,8 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
  	uint8_t abs_func_id;
  	uint32_t val;
  
@@ -2436,7 +2437,7 @@
  
  	/*
  	 * take the RESET lock to protect undi_unload flow from accessing
-@@ -10078,12 +10093,12 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
+@@ -10102,12 +10117,12 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
  
  	val = REG_RD(sc, PXP2_REG_RQ_CFG_DONE);
  	if (val != 1) {
@@ -2451,7 +2452,7 @@
  		return -1;
  	}
  
-@@ -10205,7 +10220,7 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
+@@ -10229,7 +10244,7 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
  		} while (factor-- && (val != 1));
  
  		if (val != 1) {
@@ -2460,7 +2461,7 @@
  			return -1;
  		}
  	}
-@@ -10343,7 +10358,7 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
+@@ -10367,7 +10382,7 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
  
  	if (sizeof(union cdu_context) != 1024) {
  /* we currently assume that a context is 1024 bytes */
@@ -2469,7 +2470,7 @@
  			    "please adjust the size of cdu_context(%ld)",
  			    (long)sizeof(union cdu_context));
  	}
-@@ -10405,17 +10420,17 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
+@@ -10429,17 +10444,17 @@ static int bnx2x_init_hw_common(struct bnx2x_softc *sc)
  	/* finish CFC init */
  	val = reg_poll(sc, CFC_REG_LL_INIT_DONE, 1, 100, 10);
  	if (val != 1) {
@@ -2490,7 +2491,7 @@
  		return -1;
  	}
  	REG_WR(sc, CFC_REG_DEBUG0, 0);
-@@ -10468,7 +10483,7 @@ static int bnx2x_init_hw_port(struct bnx2x_softc *sc)
+@@ -10492,7 +10507,7 @@ static int bnx2x_init_hw_port(struct bnx2x_softc *sc)
  	uint32_t low, high;
  	uint32_t val;
  
@@ -2499,7 +2500,7 @@
  
  	REG_WR(sc, NIG_REG_MASK_INTERRUPT_PORT0 + port * 4, 0);
  
-@@ -10695,7 +10710,7 @@ bnx2x_flr_clnup_poll_hw_counter(struct bnx2x_softc *sc, uint32_t reg,
+@@ -10719,7 +10734,7 @@ bnx2x_flr_clnup_poll_hw_counter(struct bnx2x_softc *sc, uint32_t reg,
  	uint32_t val = bnx2x_flr_clnup_reg_poll(sc, reg, 0, poll_cnt);
  
  	if (val != 0) {
@@ -2508,7 +2509,7 @@
  		return -1;
  	}
  
-@@ -10787,7 +10802,7 @@ bnx2x_send_final_clnup(struct bnx2x_softc *sc, uint8_t clnup_func,
+@@ -10811,7 +10826,7 @@ bnx2x_send_final_clnup(struct bnx2x_softc *sc, uint8_t clnup_func,
  	int ret = 0;
  
  	if (REG_RD(sc, comp_addr)) {
@@ -2517,7 +2518,7 @@
  			    "Cleanup complete was not 0 before sending");
  		return -1;
  	}
-@@ -10800,8 +10815,8 @@ bnx2x_send_final_clnup(struct bnx2x_softc *sc, uint8_t clnup_func,
+@@ -10824,8 +10839,8 @@ bnx2x_send_final_clnup(struct bnx2x_softc *sc, uint8_t clnup_func,
  	REG_WR(sc, XSDM_REG_OPERATION_GEN, op_gen_command);
  
  	if (bnx2x_flr_clnup_reg_poll(sc, comp_addr, 1, poll_cnt) != 1) {
@@ -2528,7 +2529,7 @@
  			    (REG_RD(sc, comp_addr)));
  		rte_panic("FLR cleanup failed");
  		return -1;
-@@ -10917,28 +10932,30 @@ static void bnx2x_hw_enable_status(struct bnx2x_softc *sc)
+@@ -10941,28 +10956,30 @@ static void bnx2x_hw_enable_status(struct bnx2x_softc *sc)
  	__rte_unused uint32_t val;
  
  	val = REG_RD(sc, CFC_REG_WEAK_ENABLE_PF);
@@ -2567,7 +2568,7 @@
  		    val);
  }
  
-@@ -10982,7 +10999,7 @@ static int bnx2x_pf_flr_clnup(struct bnx2x_softc *sc)
+@@ -11006,7 +11023,7 @@ static int bnx2x_pf_flr_clnup(struct bnx2x_softc *sc)
  
  	/* Verify no pending pci transactions */
  	if (bnx2x_is_pcie_pending(sc)) {
@@ -2576,7 +2577,7 @@
  	}
  
  	/* Debug */
-@@ -11009,13 +11026,13 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
+@@ -11033,13 +11050,13 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
  	int main_mem_width, rc;
  	uint32_t i;
  
@@ -2592,7 +2593,7 @@
  			return rc;
  		}
  	}
-@@ -11262,7 +11279,7 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
+@@ -11286,7 +11303,7 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
  
  		val = REG_RD(sc, main_mem_prty_clr);
  		if (val) {
@@ -2601,7 +2602,7 @@
  				    "Parity errors in HC block during function init (0x%x)!",
  				    val);
  		}
-@@ -11300,7 +11317,7 @@ static void bnx2x_link_reset(struct bnx2x_softc *sc)
+@@ -11324,7 +11341,7 @@ static void bnx2x_link_reset(struct bnx2x_softc *sc)
  		elink_lfa_reset(&sc->link_params, &sc->link_vars);
  	} else {
  		if (!CHIP_REV_IS_SLOW(sc)) {
@@ -2610,7 +2611,7 @@
  				    "Bootcode is missing - cannot reset link");
  		}
  	}
-@@ -11330,7 +11347,7 @@ static void bnx2x_reset_port(struct bnx2x_softc *sc)
+@@ -11354,7 +11371,7 @@ static void bnx2x_reset_port(struct bnx2x_softc *sc)
  	/* Check for BRB port occupancy */
  	val = REG_RD(sc, BRB1_REG_PORT_NUM_OCC_BLOCKS_0 + port * 4);
  	if (val) {
@@ -2619,7 +2620,7 @@
  			    "BRB1 is not empty, %d blocks are occupied", val);
  	}
  }
-@@ -11524,10 +11541,10 @@ static int ecore_gunzip(struct bnx2x_softc *sc, const uint8_t * zbuf, int len)
+@@ -11548,10 +11565,10 @@ static int ecore_gunzip(struct bnx2x_softc *sc, const uint8_t * zbuf, int len)
  	int ret;
  	int data_begin = cut_gzip_prefix(zbuf, len);
  
@@ -2632,7 +2633,7 @@
  		return -1;
  	}
  
-@@ -11539,19 +11556,19 @@ static int ecore_gunzip(struct bnx2x_softc *sc, const uint8_t * zbuf, int len)
+@@ -11563,19 +11580,19 @@ static int ecore_gunzip(struct bnx2x_softc *sc, const uint8_t * zbuf, int len)
  
  	ret = inflateInit2(&zlib_stream, -MAX_WBITS);
  	if (ret != Z_OK) {
@@ -2655,7 +2656,52 @@
  			    sc->gz_outlen);
  	}
  	sc->gz_outlen >>= 2;
-@@ -11670,7 +11687,7 @@ void bnx2x_print_adapter_info(struct bnx2x_softc *sc)
+@@ -11605,7 +11622,7 @@ ecore_storm_memset_struct(struct bnx2x_softc *sc, uint32_t addr, size_t size,
+ 	}
+ }
+ 
+-static const char *get_ext_phy_type(uint32_t ext_phy_type)
++__rte_unused static const char *get_ext_phy_type(uint32_t ext_phy_type)
+ {
+ 	uint32_t phy_type_idx = ext_phy_type >> 8;
+ 	static const char *types[] =
+@@ -11623,7 +11640,7 @@ static const char *get_ext_phy_type(uint32_t ext_phy_type)
+ 		return types[13];
+ }
+ 
+-static const char *get_state(uint32_t state)
++__rte_unused static const char *get_state(uint32_t state)
+ {
+ 	uint32_t state_idx = state >> 12;
+ 	static const char *states[] = { "CLOSED", "OPENING_WAIT4_LOAD",
+@@ -11639,7 +11656,7 @@ static const char *get_state(uint32_t state)
+ 		return states[0x10];
+ }
+ 
+-static const char *get_recovery_state(uint32_t state)
++__rte_unused static const char *get_recovery_state(uint32_t state)
+ {
+ 	static const char *states[] = { "NONE", "DONE", "INIT",
+ 		"WAIT", "FAILED", "NIC_LOADING"
+@@ -11647,7 +11664,7 @@ static const char *get_recovery_state(uint32_t state)
+ 	return states[state];
+ }
+ 
+-static const char *get_rx_mode(uint32_t mode)
++__rte_unused static const char *get_rx_mode(uint32_t mode)
+ {
+ 	static const char *modes[] = { "NONE", "NORMAL", "ALLMULTI",
+ 		"PROMISC", "MAX_MULTICAST", "ERROR"
+@@ -11662,7 +11679,7 @@ static const char *get_rx_mode(uint32_t mode)
+ }
+ 
+ #define BNX2X_INFO_STR_MAX 256
+-static const char *get_bnx2x_flags(uint32_t flags)
++__rte_unused static const char *get_bnx2x_flags(uint32_t flags)
+ {
+ 	int i;
+ 	static const char *flag[] = { "ONE_PORT ", "NO_ISCSI ",
+@@ -11694,7 +11711,7 @@ void bnx2x_print_adapter_info(struct bnx2x_softc *sc)
  	int i = 0;
  	__rte_unused uint32_t ext_phy_type;
  
@@ -2664,7 +2710,7 @@
  	if (sc->link_vars.phy_flags & PHY_XGXS_FLAG)
  		ext_phy_type = ELINK_XGXS_EXT_PHY_TYPE(REG_RD(sc,
  							      sc->
-@@ -11689,97 +11706,102 @@ void bnx2x_print_adapter_info(struct bnx2x_softc *sc)
+@@ -11713,97 +11730,102 @@ void bnx2x_print_adapter_info(struct bnx2x_softc *sc)
  									 dev_info.port_hw_config
  									 [0].external_phy_config)));
  
@@ -2805,7 +2851,7 @@
 +	PMD_DRV_LOG(INFO, sc, "\n\n===================================\n");
  }
 diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
-index 0f6024fba7..2d545f5141 100644
+index 570930541a..ca7d1920b3 100644
 --- a/drivers/net/bnx2x/bnx2x.h
 +++ b/drivers/net/bnx2x/bnx2x.h
 @@ -803,6 +803,10 @@ struct bnx2x_mf_info {
@@ -2826,9 +2872,9 @@
 -	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%02x",
 +	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%02x",
  			       (unsigned long)offset, val);
- 	rte_write8(val, ((uint8_t *)sc->bar[BAR0].base_addr + offset));
- }
-@@ -1428,10 +1432,10 @@ bnx2x_reg_write16(struct bnx2x_softc *sc, size_t offset, uint16_t val)
+ 	*((volatile uint8_t*)
+ 	  ((uintptr_t)sc->bar[BAR0].base_addr + offset)) = val;
+@@ -1429,10 +1433,10 @@ bnx2x_reg_write16(struct bnx2x_softc *sc, size_t offset, uint16_t val)
  {
  #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
  	if ((offset % 2) != 0)
@@ -2839,9 +2885,9 @@
 -	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%04x",
 +	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%04x",
  			       (unsigned long)offset, val);
- 	rte_write16(val, ((uint8_t *)sc->bar[BAR0].base_addr + offset));
- 
-@@ -1442,11 +1446,11 @@ bnx2x_reg_write32(struct bnx2x_softc *sc, size_t offset, uint32_t val)
+ 	*((volatile uint16_t*)
+ 	  ((uintptr_t)sc->bar[BAR0].base_addr + offset)) = val;
+@@ -1443,11 +1447,11 @@ bnx2x_reg_write32(struct bnx2x_softc *sc, size_t offset, uint32_t val)
  {
  #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
  	if ((offset % 4) != 0)
@@ -2853,18 +2899,18 @@
 -	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%08x",
 +	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%08x",
  			       (unsigned long)offset, val);
- 	rte_write32(val, ((uint8_t *)sc->bar[BAR0].base_addr + offset));
- }
-@@ -1457,7 +1461,7 @@ bnx2x_reg_read8(struct bnx2x_softc *sc, size_t offset)
- 	uint8_t val;
+ 	*((volatile uint32_t*)
+ 	  ((uintptr_t)sc->bar[BAR0].base_addr + offset)) = val;
+@@ -1460,7 +1464,7 @@ bnx2x_reg_read8(struct bnx2x_softc *sc, size_t offset)
  
- 	val = rte_read8((uint8_t *)sc->bar[BAR0].base_addr + offset);
+ 	val = (uint8_t)(*((volatile uint8_t*)
+ 			  ((uintptr_t)sc->bar[BAR0].base_addr + offset)));
 -	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%02x",
 +	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%02x",
  			       (unsigned long)offset, val);
  
  	return val;
-@@ -1470,12 +1474,12 @@ bnx2x_reg_read16(struct bnx2x_softc *sc, size_t offset)
+@@ -1473,13 +1477,13 @@ bnx2x_reg_read16(struct bnx2x_softc *sc, size_t offset)
  
  #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
  	if ((offset % 2) != 0)
@@ -2873,13 +2919,14 @@
  			    (unsigned long)offset);
  #endif
  
- 	val = rte_read16(((uint8_t *)sc->bar[BAR0].base_addr + offset));
+ 	val = (uint16_t)(*((volatile uint16_t*)
+ 			   ((uintptr_t)sc->bar[BAR0].base_addr + offset)));
 -	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%08x",
 +	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%08x",
  			       (unsigned long)offset, val);
  
  	return val;
-@@ -1488,12 +1492,12 @@ bnx2x_reg_read32(struct bnx2x_softc *sc, size_t offset)
+@@ -1492,13 +1496,13 @@ bnx2x_reg_read32(struct bnx2x_softc *sc, size_t offset)
  
  #ifdef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
  	if ((offset % 4) != 0)
@@ -2888,13 +2935,14 @@
  			    (unsigned long)offset);
  #endif
  
- 	val = rte_read32(((uint8_t *)sc->bar[BAR0].base_addr + offset));
+ 	val = (uint32_t)(*((volatile uint32_t*)
+ 			   ((uintptr_t)sc->bar[BAR0].base_addr + offset)));
 -	PMD_DEBUG_PERIODIC_LOG(DEBUG, "offset=0x%08lx val=0x%08x",
 +	PMD_DEBUG_PERIODIC_LOG(DEBUG, sc, "offset=0x%08lx val=0x%08x",
  			       (unsigned long)offset, val);
  
  	return val;
-@@ -1970,7 +1974,7 @@ bnx2x_set_rx_mode(struct bnx2x_softc *sc)
+@@ -1976,7 +1980,7 @@ bnx2x_set_rx_mode(struct bnx2x_softc *sc)
  			bnx2x_vf_set_rx_mode(sc);
  		}
  	} else {
@@ -2903,27 +2951,27 @@
  	}
  }
  
-@@ -1978,7 +1982,7 @@ static inline int pci_read(struct bnx2x_softc *sc, size_t addr,
+@@ -1984,7 +1988,7 @@ static inline int pci_read(struct bnx2x_softc *sc, size_t addr,
  			   void *val, uint8_t size)
  {
- 	if (rte_pci_read_config(sc->pci_dev, val, size, addr) <= 0) {
+ 	if (rte_eal_pci_read_config(sc->pci_dev, val, size, addr) <= 0) {
 -		PMD_DRV_LOG(ERR, "Can't read from PCI config space");
 +		PMD_DRV_LOG(ERR, sc, "Can't read from PCI config space");
  		return ENXIO;
  	}
  
-@@ -1991,7 +1995,7 @@ static inline int pci_write_word(struct bnx2x_softc *sc, size_t addr, off_t val)
+@@ -1997,7 +2001,7 @@ static inline int pci_write_word(struct bnx2x_softc *sc, size_t addr, off_t val)
  
- 	if (rte_pci_write_config(sc->pci_dev, &val16,
+ 	if (rte_eal_pci_write_config(sc->pci_dev, &val16,
  				     sizeof(val16), addr) <= 0) {
 -		PMD_DRV_LOG(ERR, "Can't write to PCI config space");
 +		PMD_DRV_LOG(ERR, sc, "Can't write to PCI config space");
  		return ENXIO;
  	}
  
-@@ -2003,7 +2007,7 @@ static inline int pci_write_long(struct bnx2x_softc *sc, size_t addr, off_t val)
+@@ -2009,7 +2013,7 @@ static inline int pci_write_long(struct bnx2x_softc *sc, size_t addr, off_t val)
  	uint32_t val32 = val;
- 	if (rte_pci_write_config(sc->pci_dev, &val32,
+ 	if (rte_eal_pci_write_config(sc->pci_dev, &val32,
  				     sizeof(val32), addr) <= 0) {
 -		PMD_DRV_LOG(ERR, "Can't write to PCI config space");
 +		PMD_DRV_LOG(ERR, sc, "Can't write to PCI config space");
@@ -2931,46 +2979,35 @@
  	}
  
 diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c
-index 575271a84d..ae2e60a060 100644
+index a8aebbe395..794670f1ad 100644
 --- a/drivers/net/bnx2x/bnx2x_ethdev.c
 +++ b/drivers/net/bnx2x/bnx2x_ethdev.c
-@@ -85,7 +85,7 @@ bnx2x_link_update(struct rte_eth_dev *dev)
+@@ -82,7 +82,7 @@ bnx2x_link_update(struct rte_eth_dev *dev)
+ {
  	struct bnx2x_softc *sc = dev->data->dev_private;
- 	struct rte_eth_link link;
  
 -	PMD_INIT_FUNC_TRACE();
 +	PMD_INIT_FUNC_TRACE(sc);
- 
  	bnx2x_link_status_update(sc);
- 	memset(&link, 0, sizeof(link));
-@@ -129,7 +129,7 @@ bnx2x_interrupt_handler(void *param)
- 	struct rte_eth_dev *dev = (struct rte_eth_dev *)param;
+ 	mb();
+ 	dev->data->dev_link.link_speed = sc->link_vars.line_speed;
+@@ -105,7 +105,7 @@ bnx2x_interrupt_action(struct rte_eth_dev *dev)
  	struct bnx2x_softc *sc = dev->data->dev_private;
+ 	uint32_t link_status;
  
 -	PMD_DEBUG_PERIODIC_LOG(INFO, "Interrupt handled");
 +	PMD_DEBUG_PERIODIC_LOG(INFO, sc, "Interrupt handled");
  
- 	bnx2x_interrupt_action(dev);
- 	rte_intr_enable(&sc->pci_dev->intr_handle);
-@@ -147,8 +147,8 @@ static void bnx2x_periodic_start(void *param)
- 		ret = rte_eal_alarm_set(BNX2X_SP_TIMER_PERIOD,
- 					bnx2x_periodic_start, (void *)dev);
- 		if (ret) {
--			PMD_DRV_LOG(ERR, "Unable to start periodic"
--					 " timer rc %d", ret);
-+			PMD_DRV_LOG(ERR, sc, "Unable to start periodic"
-+					     " timer rc %d", ret);
- 			assert(false && "Unable to start periodic timer");
- 		}
- 	}
-@@ -176,34 +176,34 @@ bnx2x_dev_configure(struct rte_eth_dev *dev)
+ 	bnx2x_intr_legacy(sc, 0);
  
+@@ -137,34 +137,34 @@ bnx2x_dev_configure(struct rte_eth_dev *dev)
+ 	struct bnx2x_softc *sc = dev->data->dev_private;
  	int mp_ncpus = sysconf(_SC_NPROCESSORS_CONF);
  
 -	PMD_INIT_FUNC_TRACE();
 +	PMD_INIT_FUNC_TRACE(sc);
  
- 	if (rxmode->offloads & DEV_RX_OFFLOAD_JUMBO_FRAME)
+ 	if (dev->data->dev_conf.rxmode.jumbo_frame)
  		sc->mtu = dev->data->dev_conf.rxmode.max_rx_pkt_len;
  
  	if (dev->data->nb_tx_queues > dev->data->nb_rx_queues) {
@@ -3004,17 +3041,13 @@
  		bnx2x_free_ilt_mem(sc);
  		return -ENXIO;
  	}
-@@ -217,7 +217,7 @@ bnx2x_dev_start(struct rte_eth_dev *dev)
+@@ -178,11 +178,11 @@ bnx2x_dev_start(struct rte_eth_dev *dev)
  	struct bnx2x_softc *sc = dev->data->dev_private;
  	int ret = 0;
  
 -	PMD_INIT_FUNC_TRACE();
 +	PMD_INIT_FUNC_TRACE(sc);
  
- 	/* start the periodic callout */
- 	if (sc->periodic_flags & PERIODIC_STOP)
-@@ -225,7 +225,7 @@ bnx2x_dev_start(struct rte_eth_dev *dev)
- 
  	ret = bnx2x_init(sc);
  	if (ret) {
 -		PMD_DRV_LOG(DEBUG, "bnx2x_init failed (%d)", ret);
@@ -3022,10 +3055,10 @@
  		return -1;
  	}
  
-@@ -234,12 +234,12 @@ bnx2x_dev_start(struct rte_eth_dev *dev)
+@@ -191,12 +191,12 @@ bnx2x_dev_start(struct rte_eth_dev *dev)
  				bnx2x_interrupt_handler, (void *)dev);
  
- 		if (rte_intr_enable(&sc->pci_dev->intr_handle))
+ 		if(rte_intr_enable(&(dev->pci_dev->intr_handle)))
 -			PMD_DRV_LOG(ERR, "rte_intr_enable failed");
 +			PMD_DRV_LOG(ERR, sc, "rte_intr_enable failed");
  	}
@@ -3037,7 +3070,7 @@
  		return -3;
  	}
  
-@@ -255,7 +255,7 @@ bnx2x_dev_stop(struct rte_eth_dev *dev)
+@@ -212,7 +212,7 @@ bnx2x_dev_stop(struct rte_eth_dev *dev)
  	struct bnx2x_softc *sc = dev->data->dev_private;
  	int ret = 0;
  
@@ -3045,8 +3078,8 @@
 +	PMD_INIT_FUNC_TRACE(sc);
  
  	if (IS_PF(sc)) {
- 		rte_intr_disable(&sc->pci_dev->intr_handle);
-@@ -268,7 +268,7 @@ bnx2x_dev_stop(struct rte_eth_dev *dev)
+ 		rte_intr_disable(&(dev->pci_dev->intr_handle));
+@@ -222,7 +222,7 @@ bnx2x_dev_stop(struct rte_eth_dev *dev)
  
  	ret = bnx2x_nic_unload(sc, UNLOAD_NORMAL, FALSE);
  	if (ret) {
@@ -3055,7 +3088,7 @@
  		return;
  	}
  
-@@ -280,7 +280,7 @@ bnx2x_dev_close(struct rte_eth_dev *dev)
+@@ -234,7 +234,7 @@ bnx2x_dev_close(struct rte_eth_dev *dev)
  {
  	struct bnx2x_softc *sc = dev->data->dev_private;
  
@@ -3064,7 +3097,7 @@
  
  	if (IS_VF(sc))
  		bnx2x_vf_close(sc);
-@@ -300,7 +300,7 @@ bnx2x_promisc_enable(struct rte_eth_dev *dev)
+@@ -254,7 +254,7 @@ bnx2x_promisc_enable(struct rte_eth_dev *dev)
  {
  	struct bnx2x_softc *sc = dev->data->dev_private;
  
@@ -3073,7 +3106,7 @@
  	sc->rx_mode = BNX2X_RX_MODE_PROMISC;
  	if (rte_eth_allmulticast_get(dev->data->port_id) == 1)
  		sc->rx_mode = BNX2X_RX_MODE_ALLMULTI_PROMISC;
-@@ -312,7 +312,7 @@ bnx2x_promisc_disable(struct rte_eth_dev *dev)
+@@ -266,7 +266,7 @@ bnx2x_promisc_disable(struct rte_eth_dev *dev)
  {
  	struct bnx2x_softc *sc = dev->data->dev_private;
  
@@ -3082,7 +3115,7 @@
  	sc->rx_mode = BNX2X_RX_MODE_NORMAL;
  	if (rte_eth_allmulticast_get(dev->data->port_id) == 1)
  		sc->rx_mode = BNX2X_RX_MODE_ALLMULTI;
-@@ -324,7 +324,7 @@ bnx2x_dev_allmulticast_enable(struct rte_eth_dev *dev)
+@@ -278,7 +278,7 @@ bnx2x_dev_allmulticast_enable(struct rte_eth_dev *dev)
  {
  	struct bnx2x_softc *sc = dev->data->dev_private;
  
@@ -3091,7 +3124,7 @@
  	sc->rx_mode = BNX2X_RX_MODE_ALLMULTI;
  	if (rte_eth_promiscuous_get(dev->data->port_id) == 1)
  		sc->rx_mode = BNX2X_RX_MODE_ALLMULTI_PROMISC;
-@@ -336,7 +336,7 @@ bnx2x_dev_allmulticast_disable(struct rte_eth_dev *dev)
+@@ -290,7 +290,7 @@ bnx2x_dev_allmulticast_disable(struct rte_eth_dev *dev)
  {
  	struct bnx2x_softc *sc = dev->data->dev_private;
  
@@ -3100,7 +3133,7 @@
  	sc->rx_mode = BNX2X_RX_MODE_NORMAL;
  	if (rte_eth_promiscuous_get(dev->data->port_id) == 1)
  		sc->rx_mode = BNX2X_RX_MODE_PROMISC;
-@@ -346,7 +346,9 @@ bnx2x_dev_allmulticast_disable(struct rte_eth_dev *dev)
+@@ -300,7 +300,9 @@ bnx2x_dev_allmulticast_disable(struct rte_eth_dev *dev)
  static int
  bnx2x_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete)
  {
@@ -3109,9 +3142,9 @@
 +
 +	PMD_INIT_FUNC_TRACE(sc);
  
- 	return bnx2x_link_update(dev);
- }
-@@ -361,7 +363,7 @@ bnx2xvf_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_comple
+ 	int old_link_status = dev->data->dev_link.link_status;
+ 
+@@ -319,7 +321,7 @@ bnx2xvf_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_comple
  
  	bnx2x_check_bull(sc);
  	if (sc->old_bulletin.valid_bitmap & (1 << CHANNEL_DOWN)) {
@@ -3120,7 +3153,7 @@
  				"VF device is no longer operational");
  		dev->data->dev_link.link_status = ETH_LINK_DOWN;
  	}
-@@ -377,7 +379,7 @@ bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+@@ -335,7 +337,7 @@ bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
  	uint64_t brb_drops;
  	uint64_t brb_truncates;
  
@@ -3129,7 +3162,7 @@
  
  	bnx2x_stats_handle(sc, STATS_EVENT_UPDATE);
  
-@@ -568,27 +570,35 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
+@@ -520,27 +522,35 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
  {
  	int ret = 0;
  	struct rte_pci_device *pci_dev;
@@ -3137,9 +3170,11 @@
  	struct bnx2x_softc *sc;
  
 -	PMD_INIT_FUNC_TRACE();
+-
+-	eth_dev->dev_ops = is_vf ? &bnx2xvf_eth_dev_ops : &bnx2x_eth_dev_ops;
 +	/* Extract key data structures */
 +	sc = eth_dev->data->dev_private;
-+	pci_dev = RTE_DEV_TO_PCI(eth_dev->device);
+ 	pci_dev = eth_dev->pci_dev;
 +	pci_addr = pci_dev->addr;
 +
 +	snprintf(sc->devinfo.name, NAME_SIZE, PCI_SHORT_PRI_FMT ":dpdk-port-%u",
@@ -3147,9 +3182,8 @@
 +		 eth_dev->data->port_id);
 +
 +	PMD_INIT_FUNC_TRACE(sc);
- 
- 	eth_dev->dev_ops = is_vf ? &bnx2xvf_eth_dev_ops : &bnx2x_eth_dev_ops;
--	pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
++
++	eth_dev->dev_ops = is_vf ? &bnx2xvf_eth_dev_ops : &bnx2x_eth_dev_ops;
  
  	rte_eth_copy_pci_info(eth_dev, pci_dev);
  
@@ -3171,7 +3205,7 @@
  	sc->pcie_func = pci_dev->addr.function;
  	sc->bar[BAR0].base_addr = (void *)pci_dev->mem_resource[0].addr;
  	if (is_vf)
-@@ -616,7 +626,7 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
+@@ -568,19 +578,19 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
  	sc->pci_dev = pci_dev;
  	ret = bnx2x_attach(sc);
  	if (ret) {
@@ -3180,18 +3214,6 @@
  		return ret;
  	}
  
-@@ -625,21 +635,21 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
- 		ret = rte_eal_alarm_set(BNX2X_SP_TIMER_PERIOD,
- 					bnx2x_periodic_start, (void *)eth_dev);
- 		if (ret) {
--			PMD_DRV_LOG(ERR, "Unable to start periodic"
--					  " timer rc %d", ret);
-+			PMD_DRV_LOG(ERR, sc, "Unable to start periodic"
-+					     " timer rc %d", ret);
- 			return -EINVAL;
- 		}
- 	}
- 
  	eth_dev->data->mac_addrs = (struct ether_addr *)sc->link_params.mac_addr;
  
 -	PMD_DRV_LOG(INFO, "pcie_bus=%d, pcie_device=%d",
@@ -3208,7 +3230,7 @@
  			eth_dev->data->port_id, pci_dev->id.vendor_id, pci_dev->id.device_id);
  
  	if (IS_VF(sc)) {
-@@ -679,14 +689,16 @@ out:
+@@ -614,14 +624,16 @@ bnx2x_common_dev_init(struct rte_eth_dev *eth_dev, int is_vf)
  static int
  eth_bnx2x_dev_init(struct rte_eth_dev *eth_dev)
  {
@@ -3228,35 +3250,41 @@
  }
  
 diff --git a/drivers/net/bnx2x/bnx2x_logs.h b/drivers/net/bnx2x/bnx2x_logs.h
-index 9e232a9b88..753bccdf41 100644
+index dff014d7e1..7b6252fdfd 100644
 --- a/drivers/net/bnx2x/bnx2x_logs.h
 +++ b/drivers/net/bnx2x/bnx2x_logs.h
-@@ -9,11 +9,11 @@
+@@ -11,13 +11,14 @@
+ #ifndef _PMD_LOGS_H_
  #define _PMD_LOGS_H_
  
- extern int bnx2x_logtype_init;
 -#define PMD_INIT_LOG(level, fmt, args...) \
--	rte_log(RTE_LOG_ ## level, bnx2x_logtype_init, \
--		"%s(): " fmt "\n", __func__, ##args)
+-	RTE_LOG(level, PMD, "%s(): " fmt "\n", __func__, ##args)
 +#define PMD_INIT_LOG(level, sc, fmt, args...) \
 +	RTE_LOG(level, PMD, \
 +	"[bnx2x_pmd: %s] %s() " fmt "\n", (sc)->devinfo.name, __func__, ##args)
  
+ #ifdef RTE_LIBRTE_BNX2X_DEBUG_INIT
 -#define PMD_INIT_FUNC_TRACE() PMD_INIT_LOG(DEBUG, " >>")
 +#define PMD_INIT_FUNC_TRACE(sc) PMD_INIT_LOG(DEBUG, sc, " >>")
+ #else
+-#define PMD_INIT_FUNC_TRACE() do { } while(0)
++#define PMD_INIT_FUNC_TRACE(sc) do { (void)sc; } while(0)
+ #endif
  
  #ifdef RTE_LIBRTE_BNX2X_DEBUG_RX
- #define PMD_RX_LOG(level, fmt, args...) \
-@@ -37,18 +37,19 @@ extern int bnx2x_logtype_init;
+@@ -42,20 +43,22 @@
  #endif
  
- extern int bnx2x_logtype_driver;
+ #ifdef RTE_LIBRTE_BNX2X_DEBUG
 -#define PMD_DRV_LOG_RAW(level, fmt, args...) \
--	rte_log(RTE_LOG_ ## level, bnx2x_logtype_driver, \
--		"%s(): " fmt, __func__, ## args)
+-	RTE_LOG(level, PMD, "%s(): " fmt, __func__, ## args)
 +#define PMD_DRV_LOG_RAW(level, sc, fmt, args...) \
 +	RTE_LOG(level, PMD, "[%s:%d(%s)] " fmt,	__func__, __LINE__, \
 +		(sc)->devinfo.name ? (sc)->devinfo.name : "", ## args)
+ #else
+-#define PMD_DRV_LOG_RAW(level, fmt, args...) do { } while (0)
++#define PMD_DRV_LOG_RAW(level, sc, fmt, args...) do { } while (0)
+ #endif
  
 -#define PMD_DRV_LOG(level, fmt, args...) \
 -	PMD_DRV_LOG_RAW(level, fmt "\n", ## args)
@@ -3274,12 +3302,12 @@
 +#define PMD_DEBUG_PERIODIC_LOG(level, sc, fmt, args...) do { } while (0)
  #endif
  
- #endif /* _PMD_LOGS_H_ */
+ 
 diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
-index d9a4127d94..589735ecd3 100644
+index adf0309255..a9b8e565b2 100644
 --- a/drivers/net/bnx2x/bnx2x_rxtx.c
 +++ b/drivers/net/bnx2x/bnx2x_rxtx.c
-@@ -76,7 +76,7 @@ bnx2x_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -78,7 +78,7 @@ bnx2x_dev_rx_queue_setup(struct rte_eth_dev *dev,
  	rxq = rte_zmalloc_socket("ethdev RX queue", sizeof(struct bnx2x_rx_queue),
  				 RTE_CACHE_LINE_SIZE, socket_id);
  	if (NULL == rxq) {
@@ -3288,7 +3316,7 @@
  		return -ENOMEM;
  	}
  	rxq->sc = sc;
-@@ -92,7 +92,7 @@ bnx2x_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -94,7 +94,7 @@ bnx2x_dev_rx_queue_setup(struct rte_eth_dev *dev,
  	sc->rx_ring_size = USABLE_RX_BD(rxq);
  	rxq->nb_cq_pages = RCQ_BD_PAGES(rxq);
  
@@ -3297,7 +3325,7 @@
  		       "total_bd=%lu, rx_pages=%u, cq_pages=%u",
  		       queue_idx, nb_desc, (unsigned long)USABLE_RX_BD(rxq),
  		       (unsigned long)TOTAL_RX_BD(rxq), rxq->nb_rx_pages,
-@@ -275,7 +275,7 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -276,7 +276,7 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
  	txq->tx_free_thresh = min(txq->tx_free_thresh,
  				  txq->nb_tx_desc - BDS_PER_TX_PKT);
  
@@ -3306,7 +3334,7 @@
  		     "total_bd=%lu, tx_pages=%u",
  		     queue_idx, nb_desc, txq->tx_free_thresh,
  		     (unsigned long)USABLE_TX_BD(txq),
-@@ -301,7 +301,7 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -302,7 +302,7 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
  		return -ENOMEM;
  	}
  
@@ -3315,7 +3343,7 @@
  	   txq->sw_ring, txq->tx_ring, txq->tx_ring_phys_addr); */
  
  	/* Link TX pages */
-@@ -310,7 +310,9 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -311,7 +311,9 @@ bnx2x_dev_tx_queue_setup(struct rte_eth_dev *dev,
  		busaddr = txq->tx_ring_phys_addr + BNX2X_PAGE_SIZE * (i % txq->nb_tx_pages);
  		tx_n_bd->addr_hi = rte_cpu_to_le_32(U64_HI(busaddr));
  		tx_n_bd->addr_lo = rte_cpu_to_le_32(U64_LO(busaddr));
@@ -3339,10 +3367,10 @@
  	for (i = 0; i < dev->data->nb_tx_queues; i++) {
  		struct bnx2x_tx_queue *txq = dev->data->tx_queues[i];
 diff --git a/drivers/net/bnx2x/bnx2x_stats.c b/drivers/net/bnx2x/bnx2x_stats.c
-index edc86ccc28..1cd972591a 100644
+index c489cbeef1..2a068acb7d 100644
 --- a/drivers/net/bnx2x/bnx2x_stats.c
 +++ b/drivers/net/bnx2x/bnx2x_stats.c
-@@ -82,7 +82,7 @@ bnx2x_storm_stats_post(struct bnx2x_softc *sc)
+@@ -84,7 +84,7 @@ bnx2x_storm_stats_post(struct bnx2x_softc *sc)
  		sc->fw_stats_req->hdr.drv_stats_counter =
  			htole16(sc->stats_counter++);
  
@@ -3351,7 +3379,7 @@
  				"sending statistics ramrod %d",
  				le16toh(sc->fw_stats_req->hdr.drv_stats_counter));
  
-@@ -154,7 +154,7 @@ bnx2x_stats_comp(struct bnx2x_softc *sc)
+@@ -156,7 +156,7 @@ bnx2x_stats_comp(struct bnx2x_softc *sc)
  
  	while (*stats_comp != DMAE_COMP_VAL) {
  		if (!cnt) {
@@ -3360,7 +3388,7 @@
  			break;
  		}
  
-@@ -189,7 +189,7 @@ bnx2x_stats_pmf_update(struct bnx2x_softc *sc)
+@@ -191,7 +191,7 @@ bnx2x_stats_pmf_update(struct bnx2x_softc *sc)
  	}
  	/* sanity */
  	if (!sc->port.pmf || !sc->port.port_stx) {
@@ -3369,7 +3397,7 @@
  		return;
  	}
  
-@@ -239,7 +239,7 @@ bnx2x_port_stats_init(struct bnx2x_softc *sc)
+@@ -241,7 +241,7 @@ bnx2x_port_stats_init(struct bnx2x_softc *sc)
  
      /* sanity */
      if (!sc->link_vars.link_up || !sc->port.pmf) {
@@ -3378,7 +3406,7 @@
  	return;
      }
  
-@@ -463,7 +463,7 @@ bnx2x_func_stats_init(struct bnx2x_softc *sc)
+@@ -465,7 +465,7 @@ bnx2x_func_stats_init(struct bnx2x_softc *sc)
  
      /* sanity */
      if (!sc->func_stx) {
@@ -3387,7 +3415,7 @@
  	return;
      }
  
-@@ -797,12 +797,12 @@ bnx2x_hw_stats_update(struct bnx2x_softc *sc)
+@@ -799,12 +799,12 @@ bnx2x_hw_stats_update(struct bnx2x_softc *sc)
  	break;
  
      case ELINK_MAC_TYPE_NONE: /* unreached */
@@ -3402,7 +3430,7 @@
      }
  
      ADD_EXTEND_64(pstats->brb_drop_hi, pstats->brb_drop_lo,
-@@ -837,7 +837,7 @@ bnx2x_hw_stats_update(struct bnx2x_softc *sc)
+@@ -839,7 +839,7 @@ bnx2x_hw_stats_update(struct bnx2x_softc *sc)
  	nig_timer_max = SHMEM_RD(sc, port_mb[SC_PORT(sc)].stat_nig_timer);
  	if (nig_timer_max != estats->nig_timer_max) {
  	    estats->nig_timer_max = nig_timer_max;
@@ -3411,7 +3439,7 @@
  		  estats->nig_timer_max);
  	}
      }
-@@ -859,7 +859,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
+@@ -861,7 +861,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
  
      /* are storm stats valid? */
      if (le16toh(counters->xstats_counter) != cur_stats_counter) {
@@ -3420,7 +3448,7 @@
  	      "stats not updated by xstorm, "
  	      "counter 0x%x != stats_counter 0x%x",
  	      le16toh(counters->xstats_counter), sc->stats_counter);
-@@ -867,7 +867,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
+@@ -869,7 +869,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
      }
  
      if (le16toh(counters->ustats_counter) != cur_stats_counter) {
@@ -3429,7 +3457,7 @@
  	      "stats not updated by ustorm, "
  	      "counter 0x%x != stats_counter 0x%x",
  	      le16toh(counters->ustats_counter), sc->stats_counter);
-@@ -875,7 +875,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
+@@ -877,7 +877,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
      }
  
      if (le16toh(counters->cstats_counter) != cur_stats_counter) {
@@ -3438,7 +3466,7 @@
  	      "stats not updated by cstorm, "
  	      "counter 0x%x != stats_counter 0x%x",
  	      le16toh(counters->cstats_counter), sc->stats_counter);
-@@ -883,7 +883,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
+@@ -885,7 +885,7 @@ bnx2x_storm_stats_validate_counters(struct bnx2x_softc *sc)
      }
  
      if (le16toh(counters->tstats_counter) != cur_stats_counter) {
@@ -3447,7 +3475,7 @@
  	      "stats not updated by tstorm, "
  	      "counter 0x%x != stats_counter 0x%x",
  	      le16toh(counters->tstats_counter), sc->stats_counter);
-@@ -929,12 +929,13 @@ bnx2x_storm_stats_update(struct bnx2x_softc *sc)
+@@ -931,12 +931,13 @@ bnx2x_storm_stats_update(struct bnx2x_softc *sc)
  
  		uint32_t diff;
  
@@ -3463,7 +3491,7 @@
  
  		UPDATE_QSTAT(tclient->rcv_bcast_bytes,
  				total_broadcast_bytes_received);
-@@ -1288,7 +1289,7 @@ void bnx2x_stats_handle(struct bnx2x_softc *sc, enum bnx2x_stats_event event)
+@@ -1290,7 +1291,7 @@ void bnx2x_stats_handle(struct bnx2x_softc *sc, enum bnx2x_stats_event event)
  	bnx2x_stats_stm[state][event].action(sc);
  
  	if (event != STATS_EVENT_UPDATE) {
@@ -3472,7 +3500,7 @@
  				"state %d -> event %d -> state %d",
  				state, event, sc->stats_state);
  	}
-@@ -1302,7 +1303,7 @@ bnx2x_port_stats_base_init(struct bnx2x_softc *sc)
+@@ -1304,7 +1305,7 @@ bnx2x_port_stats_base_init(struct bnx2x_softc *sc)
  
      /* sanity */
      if (!sc->port.pmf || !sc->port.port_stx) {
@@ -3481,7 +3509,7 @@
  	return;
      }
  
-@@ -1474,7 +1475,7 @@ bnx2x_stats_init(struct bnx2x_softc *sc)
+@@ -1476,7 +1477,7 @@ bnx2x_stats_init(struct bnx2x_softc *sc)
  		sc->func_stx = 0;
  	}
  
@@ -3491,10 +3519,10 @@
  
  	/* pmf should retrieve port statistics from SP on a non-init*/
 diff --git a/drivers/net/bnx2x/bnx2x_vfpf.c b/drivers/net/bnx2x/bnx2x_vfpf.c
-index 50099d46b1..048bf126f0 100644
+index 0ca0df8766..e58e9af810 100644
 --- a/drivers/net/bnx2x/bnx2x_vfpf.c
 +++ b/drivers/net/bnx2x/bnx2x_vfpf.c
-@@ -37,12 +37,12 @@ bnx2x_check_bull(struct bnx2x_softc *sc)
+@@ -40,12 +40,12 @@ bnx2x_check_bull(struct bnx2x_softc *sc)
  			if (bull->crc == bnx2x_vf_crc(bull))
  				break;
  
@@ -3509,7 +3537,7 @@
  					tries);
  			return FALSE;
  		}
-@@ -82,7 +82,7 @@ bnx2x_vf_prep(struct bnx2x_softc *sc, struct vf_first_tlv *first_tlv,
+@@ -85,7 +85,7 @@ bnx2x_vf_prep(struct bnx2x_softc *sc, struct vf_first_tlv *first_tlv,
  
  	rte_spinlock_lock(&sc->vf2pf_lock);
  
@@ -3518,7 +3546,7 @@
  
  	memset(mbox, 0, sizeof(struct bnx2x_vf_mbx_msg));
  
-@@ -97,7 +97,7 @@ static void
+@@ -100,7 +100,7 @@ static void
  bnx2x_vf_finalize(struct bnx2x_softc *sc,
  		  __rte_unused struct vf_first_tlv *first_tlv)
  {
@@ -3527,7 +3555,7 @@
  		    first_tlv->tl.type);
  
  	rte_spinlock_unlock(&sc->vf2pf_lock);
-@@ -116,14 +116,14 @@ bnx2x_do_req4pf(struct bnx2x_softc *sc, rte_iova_t phys_addr)
+@@ -119,14 +119,14 @@ bnx2x_do_req4pf(struct bnx2x_softc *sc, phys_addr_t phys_addr)
  	uint8_t i;
  
  	if (*status) {
@@ -3544,7 +3572,7 @@
  		return -EINVAL;
  	}
  
-@@ -143,11 +143,11 @@ bnx2x_do_req4pf(struct bnx2x_softc *sc, rte_iova_t phys_addr)
+@@ -146,11 +146,11 @@ bnx2x_do_req4pf(struct bnx2x_softc *sc, phys_addr_t phys_addr)
  	}
  
  	if (!*status) {
@@ -3558,7 +3586,7 @@
  	return 0;
  }
  
-@@ -195,7 +195,7 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
+@@ -198,7 +198,7 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
  	int rc;
  
  	do {
@@ -3567,7 +3595,7 @@
  
  		rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
  		if (rc)
-@@ -207,11 +207,11 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
+@@ -210,11 +210,11 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
  
  		/* check PF to request acceptance */
  		if (sc_resp->status == BNX2X_VF_STATUS_SUCCESS) {
@@ -3581,7 +3609,7 @@
  			   "PF cannot allocate requested amount of resources");
  
  			res_query = &sc->vf2pf_mbox->query[0].acquire.res_query;
-@@ -227,7 +227,7 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
+@@ -230,7 +230,7 @@ int bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
  
  			memset(&sc->vf2pf_mbox->resp, 0, sizeof(union resp_tlvs));
  		} else {
@@ -3590,7 +3618,7 @@
  					 "amount of resources: %d.",
  					 sc_resp->status);
  			return -EINVAL;
-@@ -296,7 +296,7 @@ int bnx2x_vf_get_resources(struct bnx2x_softc *sc, uint8_t tx_count, uint8_t rx_
+@@ -299,7 +299,7 @@ int bnx2x_vf_get_resources(struct bnx2x_softc *sc, uint8_t tx_count, uint8_t rx_
  	sc->doorbell_size = sc_resp.db_size;
  	sc->flags |= BNX2X_NO_WOL_FLAG | BNX2X_NO_ISCSI_OOO_FLAG | BNX2X_NO_ISCSI_FLAG | BNX2X_NO_FCOE_FLAG;
  
@@ -3599,7 +3627,7 @@
  		sc->igu_sb_cnt, sc->igu_base_sb);
  	strncpy(sc->fw_ver, sc_resp.fw_ver, sizeof(sc->fw_ver));
  
-@@ -333,7 +333,7 @@ bnx2x_vf_close(struct bnx2x_softc *sc)
+@@ -336,7 +336,7 @@ bnx2x_vf_close(struct bnx2x_softc *sc)
  
  		rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
  		if (rc || reply->status != BNX2X_VF_STATUS_SUCCESS)
@@ -3608,7 +3636,7 @@
  
  		bnx2x_vf_finalize(sc, &query->first_tlv);
  	}
-@@ -367,12 +367,12 @@ bnx2x_vf_init(struct bnx2x_softc *sc)
+@@ -370,12 +370,12 @@ bnx2x_vf_init(struct bnx2x_softc *sc)
  	if (rc)
  		goto out;
  	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
@@ -3623,7 +3651,7 @@
  out:
  	bnx2x_vf_finalize(sc, &query->first_tlv);
  	return rc;
-@@ -403,7 +403,7 @@ bnx2x_vf_unload(struct bnx2x_softc *sc)
+@@ -406,7 +406,7 @@ bnx2x_vf_unload(struct bnx2x_softc *sc)
  
  			rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
  			if (rc || reply->status != BNX2X_VF_STATUS_SUCCESS)
@@ -3632,7 +3660,7 @@
  					    "Bad reply for vf_q %d teardown", i);
  
  			bnx2x_vf_finalize(sc, &query_op->first_tlv);
-@@ -423,7 +423,7 @@ bnx2x_vf_unload(struct bnx2x_softc *sc)
+@@ -426,7 +426,7 @@ bnx2x_vf_unload(struct bnx2x_softc *sc)
  
  		rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
  		if (rc || reply->status != BNX2X_VF_STATUS_SUCCESS)
@@ -3641,7 +3669,7 @@
  				    "Bad reply from PF for close message");
  
  		bnx2x_vf_finalize(sc, &query->first_tlv);
-@@ -450,7 +450,7 @@ bnx2x_vf_rx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
+@@ -453,7 +453,7 @@ bnx2x_vf_rx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
  
  	rxq = sc->rx_queues[fp->index];
  	if (!rxq) {
@@ -3650,7 +3678,7 @@
  		return;
  	}
  
-@@ -474,7 +474,7 @@ bnx2x_vf_tx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
+@@ -477,7 +477,7 @@ bnx2x_vf_tx_q_prep(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
  
  	txq = sc->tx_queues[fp->index];
  	if (!txq) {
@@ -3659,7 +3687,7 @@
  		return;
  	}
  
-@@ -511,7 +511,7 @@ bnx2x_vf_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, int lead
+@@ -514,7 +514,7 @@ bnx2x_vf_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, int lead
  	if (rc)
  		goto out;
  	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
@@ -3668,7 +3696,7 @@
  				 fp->index);
  		rc = -EINVAL;
  	}
-@@ -566,7 +566,7 @@ bnx2x_vf_set_mac(struct bnx2x_softc *sc, int set)
+@@ -569,7 +569,7 @@ bnx2x_vf_set_mac(struct bnx2x_softc *sc, int set)
  	}
  
  	if (BNX2X_VF_STATUS_SUCCESS != reply->status) {
@@ -3677,7 +3705,7 @@
  				reply->status);
  		rc = -EINVAL;
  	}
-@@ -608,7 +608,7 @@ bnx2x_vf_config_rss(struct bnx2x_softc *sc,
+@@ -611,7 +611,7 @@ bnx2x_vf_config_rss(struct bnx2x_softc *sc,
  		goto out;
  
  	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
@@ -3686,7 +3714,7 @@
  		rc = -EINVAL;
  	}
  out:
-@@ -652,7 +652,7 @@ bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc)
+@@ -655,7 +655,7 @@ bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc)
  		query->rx_mask |= VFPF_RX_MASK_ACCEPT_BROADCAST;
  		break;
  	default:
@@ -3695,7 +3723,7 @@
  		rc = -EINVAL;
  		goto out;
  	}
-@@ -666,7 +666,7 @@ bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc)
+@@ -669,7 +669,7 @@ bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc)
  		goto out;
  
  	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
@@ -3705,10 +3733,10 @@
  	}
  
 diff --git a/drivers/net/bnx2x/ecore_init.h b/drivers/net/bnx2x/ecore_init.h
-index f2de07e5b8..97dfe69b59 100644
+index d25e2803a0..7a96be7bc5 100644
 --- a/drivers/net/bnx2x/ecore_init.h
 +++ b/drivers/net/bnx2x/ecore_init.h
-@@ -741,7 +741,7 @@ static inline void ecore_disable_blocks_parity(struct bnx2x_softc *sc)
+@@ -743,7 +743,7 @@ static inline void ecore_disable_blocks_parity(struct bnx2x_softc *sc)
  		if (dis_mask) {
  			REG_WR(sc, ecore_blocks_parity_data[i].mask_addr,
  			       dis_mask);
@@ -3717,7 +3745,7 @@
  						 "for %s to\t\t0x%x",
  				    ecore_blocks_parity_data[i].name, dis_mask);
  		}
-@@ -776,7 +776,7 @@ static inline void ecore_clear_blocks_parity(struct bnx2x_softc *sc)
+@@ -778,7 +778,7 @@ static inline void ecore_clear_blocks_parity(struct bnx2x_softc *sc)
  			reg_val = REG_RD(sc, ecore_blocks_parity_data[i].
  					 sts_clr_addr);
  			if (reg_val & reg_mask)
@@ -3726,7 +3754,7 @@
  					   ecore_blocks_parity_data[i].name,
  					   reg_val & reg_mask);
  		}
-@@ -785,7 +785,7 @@ static inline void ecore_clear_blocks_parity(struct bnx2x_softc *sc)
+@@ -787,7 +787,7 @@ static inline void ecore_clear_blocks_parity(struct bnx2x_softc *sc)
  	/* Check if there were parity attentions in MCP */
  	reg_val = REG_RD(sc, MISC_REG_AEU_AFTER_INVERT_4_MCP);
  	if (reg_val & mcp_aeu_bits)
@@ -3736,10 +3764,10 @@
  
  	/* Clear parity attentions in MCP:
 diff --git a/drivers/net/bnx2x/ecore_init_ops.h b/drivers/net/bnx2x/ecore_init_ops.h
-index 2b003afb0b..733ad1aa8a 100644
+index b6f9832431..474185bdf0 100644
 --- a/drivers/net/bnx2x/ecore_init_ops.h
 +++ b/drivers/net/bnx2x/ecore_init_ops.h
-@@ -424,20 +424,20 @@ static void ecore_init_pxp_arb(struct bnx2x_softc *sc, int r_order,
+@@ -426,20 +426,20 @@ static void ecore_init_pxp_arb(struct bnx2x_softc *sc, int r_order,
  	uint32_t val, i;
  
  	if (r_order > MAX_RD_ORD) {
@@ -3765,10 +3793,10 @@
  	for (i = 0; i < NUM_RD_Q-1; i++) {
  		REG_WR(sc, read_arb_addr[i].l, read_arb_data[i][r_order].l);
 diff --git a/drivers/net/bnx2x/ecore_sp.c b/drivers/net/bnx2x/ecore_sp.c
-index 0c8685c626..ab730abea2 100644
+index e6fecd88af..07376d85d9 100644
 --- a/drivers/net/bnx2x/ecore_sp.c
 +++ b/drivers/net/bnx2x/ecore_sp.c
-@@ -53,14 +53,14 @@ ecore_exe_queue_init(struct bnx2x_softc *sc __rte_unused,
+@@ -55,14 +55,14 @@ ecore_exe_queue_init(struct bnx2x_softc *sc __rte_unused,
  	o->execute = exec;
  	o->get = get;
  
@@ -3785,7 +3813,7 @@
  	ECORE_FREE(sc, elem, sizeof(*elem));
  }
  
-@@ -106,7 +106,7 @@ static int ecore_exe_queue_add(struct bnx2x_softc *sc,
+@@ -108,7 +108,7 @@ static int ecore_exe_queue_add(struct bnx2x_softc *sc,
  		/* Check if this request is ok */
  		rc = o->validate(sc, o->owner, elem);
  		if (rc) {
@@ -3794,7 +3822,7 @@
  			goto free_and_exit;
  		}
  	}
-@@ -176,8 +176,8 @@ static int ecore_exe_queue_step(struct bnx2x_softc *sc,
+@@ -178,8 +178,8 @@ static int ecore_exe_queue_step(struct bnx2x_softc *sc,
  	 */
  	if (!ECORE_LIST_IS_EMPTY(&o->pending_comp)) {
  		if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, ramrod_flags)) {
@@ -3805,7 +3833,7 @@
  			__ecore_exe_queue_reset_pending(sc, o);
  		} else {
  			return ECORE_PENDING;
-@@ -240,7 +240,7 @@ static struct ecore_exeq_elem *ecore_exe_queue_alloc_elem(struct
+@@ -242,7 +242,7 @@ static struct ecore_exeq_elem *ecore_exe_queue_alloc_elem(struct
  							  bnx2x_softc *sc
  							  __rte_unused)
  {
@@ -3814,7 +3842,7 @@
  	return ECORE_ZALLOC(sizeof(struct ecore_exeq_elem), GFP_ATOMIC, sc);
  }
  
-@@ -290,14 +290,14 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state,
+@@ -292,14 +292,14 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state,
  	if (CHIP_REV_IS_EMUL(sc))
  		cnt *= 20;
  
@@ -3831,7 +3859,7 @@
  #endif
  			return ECORE_SUCCESS;
  		}
-@@ -309,7 +309,7 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state,
+@@ -311,7 +311,7 @@ static int ecore_state_wait(struct bnx2x_softc *sc, int state,
  	}
  
  	/* timeout! */
@@ -3840,7 +3868,7 @@
  #ifdef ECORE_STOP_ON_ERROR
  	ecore_panic();
  #endif
-@@ -370,11 +370,11 @@ static int __ecore_vlan_mac_h_write_trylock(struct bnx2x_softc *sc __rte_unused,
+@@ -372,11 +372,11 @@ static int __ecore_vlan_mac_h_write_trylock(struct bnx2x_softc *sc __rte_unused,
  					    struct ecore_vlan_mac_obj *o)
  {
  	if (o->head_reader) {
@@ -3854,7 +3882,7 @@
  	return ECORE_SUCCESS;
  }
  
-@@ -394,13 +394,13 @@ static void __ecore_vlan_mac_h_exec_pending(struct bnx2x_softc *sc,
+@@ -396,13 +396,13 @@ static void __ecore_vlan_mac_h_exec_pending(struct bnx2x_softc *sc,
  	int rc;
  	unsigned long ramrod_flags = o->saved_ramrod_flags;
  
@@ -3870,7 +3898,7 @@
  			    "execution of pending commands failed with rc %d",
  			    rc);
  #ifdef ECORE_STOP_ON_ERROR
-@@ -425,7 +425,7 @@ static void __ecore_vlan_mac_h_pend(struct bnx2x_softc *sc __rte_unused,
+@@ -427,7 +427,7 @@ static void __ecore_vlan_mac_h_pend(struct bnx2x_softc *sc __rte_unused,
  {
  	o->head_exe_request = TRUE;
  	o->saved_ramrod_flags = ramrod_flags;
@@ -3879,7 +3907,7 @@
  		  ramrod_flags);
  }
  
-@@ -446,8 +446,8 @@ static void __ecore_vlan_mac_h_write_unlock(struct bnx2x_softc *sc,
+@@ -448,8 +448,8 @@ static void __ecore_vlan_mac_h_write_unlock(struct bnx2x_softc *sc,
  	 * executed. If so, execute again. [Ad infinitum]
  	 */
  	while (o->head_exe_request) {
@@ -3890,7 +3918,7 @@
  		__ecore_vlan_mac_h_exec_pending(sc, o);
  	}
  }
-@@ -483,7 +483,8 @@ static int __ecore_vlan_mac_h_read_lock(struct bnx2x_softc *sc __rte_unused,
+@@ -485,7 +485,8 @@ static int __ecore_vlan_mac_h_read_lock(struct bnx2x_softc *sc __rte_unused,
  {
  	/* If we got here, we're holding lock --> no WRITER exists */
  	o->head_reader++;
@@ -3900,7 +3928,7 @@
  
  	return ECORE_SUCCESS;
  }
-@@ -522,14 +523,14 @@ static void __ecore_vlan_mac_h_read_unlock(struct bnx2x_softc *sc,
+@@ -524,14 +525,14 @@ static void __ecore_vlan_mac_h_read_unlock(struct bnx2x_softc *sc,
  					   struct ecore_vlan_mac_obj *o)
  {
  	if (!o->head_reader) {
@@ -3917,7 +3945,7 @@
  			    "vlan_mac_lock - decreased readers to %d",
  			    o->head_reader);
  	}
-@@ -538,7 +539,7 @@ static void __ecore_vlan_mac_h_read_unlock(struct bnx2x_softc *sc,
+@@ -540,7 +541,7 @@ static void __ecore_vlan_mac_h_read_unlock(struct bnx2x_softc *sc,
  	 * was last - if so we need to execute the command.
  	 */
  	if (!o->head_reader && o->head_exe_request) {
@@ -3926,7 +3954,7 @@
  			    "vlan_mac_lock - reader release encountered a pending request");
  
  		/* Writer release will do the trick */
-@@ -581,10 +582,10 @@ static int ecore_get_n_elements(struct bnx2x_softc *sc,
+@@ -583,10 +584,10 @@ static int ecore_get_n_elements(struct bnx2x_softc *sc,
  	uint8_t *next = base;
  	int counter = 0, read_lock;
  
@@ -3939,7 +3967,7 @@
  			    "get_n_elements failed to get vlan mac reader lock; Access without lock");
  
  	/* traverse list */
-@@ -593,15 +594,15 @@ static int ecore_get_n_elements(struct bnx2x_softc *sc,
+@@ -595,15 +596,15 @@ static int ecore_get_n_elements(struct bnx2x_softc *sc,
  		if (counter < n) {
  			ECORE_MEMCPY(next, &pos->u, size);
  			counter++;
@@ -3958,7 +3986,7 @@
  		ecore_vlan_mac_h_read_unlock(sc, o);
  	}
  
-@@ -615,7 +616,7 @@ static int ecore_check_mac_add(struct bnx2x_softc *sc __rte_unused,
+@@ -617,7 +618,7 @@ static int ecore_check_mac_add(struct bnx2x_softc *sc __rte_unused,
  {
  	struct ecore_vlan_mac_registry_elem *pos;
  
@@ -3967,7 +3995,7 @@
  		  data->mac.mac[0], data->mac.mac[1], data->mac.mac[2],
  		  data->mac.mac[3], data->mac.mac[4], data->mac.mac[5]);
  
-@@ -644,7 +645,7 @@ static struct ecore_vlan_mac_registry_elem *ecore_check_mac_del(struct bnx2x_sof
+@@ -646,7 +647,7 @@ static struct ecore_vlan_mac_registry_elem *ecore_check_mac_del(struct bnx2x_sof
  {
  	struct ecore_vlan_mac_registry_elem *pos;
  
@@ -3976,7 +4004,7 @@
  		  data->mac.mac[0], data->mac.mac[1], data->mac.mac[2],
  		  data->mac.mac[3], data->mac.mac[4], data->mac.mac[5]);
  
-@@ -722,7 +723,7 @@ static void ecore_set_mac_in_nig(struct bnx2x_softc *sc,
+@@ -724,7 +725,7 @@ static void ecore_set_mac_in_nig(struct bnx2x_softc *sc,
  	if (index > ECORE_LLH_CAM_MAX_PF_LINE)
  		return;
  
@@ -3985,7 +4013,7 @@
  		  (add ? "ADD" : "DELETE"), index);
  
  	if (add) {
-@@ -838,7 +839,7 @@ static void ecore_set_one_mac_e2(struct bnx2x_softc *sc,
+@@ -840,7 +841,7 @@ static void ecore_set_one_mac_e2(struct bnx2x_softc *sc,
  	ecore_vlan_mac_set_cmd_hdr_e2(o, add, CLASSIFY_RULE_OPCODE_MAC,
  				      &rule_entry->mac.header);
  
@@ -3994,7 +4022,7 @@
  		  (add ? "add" : "delete"), mac[0], mac[1], mac[2], mac[3],
  		  mac[4], mac[5], raw->cl_id);
  
-@@ -943,7 +944,7 @@ static void ecore_vlan_mac_set_rdata_e1x(struct bnx2x_softc *sc
+@@ -945,7 +946,7 @@ static void ecore_vlan_mac_set_rdata_e1x(struct bnx2x_softc *sc
  	ecore_vlan_mac_set_cfg_entry_e1x(o, add, opcode, mac, vlan_id,
  					 cfg_entry);
  
@@ -4003,7 +4031,7 @@
  		  (add ? "setting" : "clearing"),
  		  mac[0], mac[1], mac[2], mac[3], mac[4], mac[5],
  		  o->raw.cl_id, cam_offset);
-@@ -1088,8 +1089,8 @@ static int ecore_validate_vlan_mac_add(struct bnx2x_softc *sc,
+@@ -1090,8 +1091,8 @@ static int ecore_validate_vlan_mac_add(struct bnx2x_softc *sc,
  	/* Check the registry */
  	rc = o->check_add(sc, o, &elem->cmd_data.vlan_mac.u);
  	if (rc) {
@@ -4014,7 +4042,7 @@
  		return rc;
  	}
  
-@@ -1097,7 +1098,7 @@ static int ecore_validate_vlan_mac_add(struct bnx2x_softc *sc,
+@@ -1099,7 +1100,7 @@ static int ecore_validate_vlan_mac_add(struct bnx2x_softc *sc,
  	 * MAC/VLAN/VLAN-MAC. Return an error if there is.
  	 */
  	if (exeq->get(exeq, elem)) {
@@ -4023,7 +4051,7 @@
  		return ECORE_EXISTS;
  	}
  
-@@ -1136,8 +1137,8 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
+@@ -1138,8 +1139,8 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
  	 */
  	pos = o->check_del(sc, o, &elem->cmd_data.vlan_mac.u);
  	if (!pos) {
@@ -4034,7 +4062,7 @@
  		return ECORE_EXISTS;
  	}
  
-@@ -1149,13 +1150,13 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
+@@ -1151,13 +1152,13 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
  	/* Check for MOVE commands */
  	query_elem.cmd_data.vlan_mac.cmd = ECORE_VLAN_MAC_MOVE;
  	if (exeq->get(exeq, &query_elem)) {
@@ -4050,7 +4078,7 @@
  		return ECORE_EXISTS;
  	}
  
-@@ -1163,7 +1164,7 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
+@@ -1165,7 +1166,7 @@ static int ecore_validate_vlan_mac_del(struct bnx2x_softc *sc,
  	if (!(ECORE_TEST_BIT(ECORE_DONT_CONSUME_CAM_CREDIT,
  			     &elem->cmd_data.vlan_mac.vlan_mac_flags) ||
  	      o->put_credit(o))) {
@@ -4059,7 +4087,7 @@
  		return ECORE_INVAL;
  	}
  
-@@ -1196,8 +1197,8 @@ static int ecore_validate_vlan_mac_move(struct bnx2x_softc *sc,
+@@ -1198,8 +1199,8 @@ static int ecore_validate_vlan_mac_move(struct bnx2x_softc *sc,
  	 * state.
  	 */
  	if (!src_o->check_move(sc, src_o, dest_o, &elem->cmd_data.vlan_mac.u)) {
@@ -4070,7 +4098,7 @@
  		return ECORE_INVAL;
  	}
  
-@@ -1210,21 +1211,21 @@ static int ecore_validate_vlan_mac_move(struct bnx2x_softc *sc,
+@@ -1212,21 +1213,21 @@ static int ecore_validate_vlan_mac_move(struct bnx2x_softc *sc,
  	/* Check DEL on source */
  	query_elem.cmd_data.vlan_mac.cmd = ECORE_VLAN_MAC_DEL;
  	if (src_exeq->get(src_exeq, &query_elem)) {
@@ -4095,7 +4123,7 @@
  			    "There is a pending ADD command on the destination queue already");
  		return ECORE_INVAL;
  	}
-@@ -1329,7 +1330,7 @@ static int __ecore_vlan_mac_execute_step(struct bnx2x_softc *sc,
+@@ -1331,7 +1332,7 @@ static int __ecore_vlan_mac_execute_step(struct bnx2x_softc *sc,
  
  	ECORE_SPIN_LOCK_BH(&o->exe_queue.lock);
  
@@ -4104,7 +4132,7 @@
  	rc = __ecore_vlan_mac_h_write_trylock(sc, o);
  
  	if (rc != ECORE_SUCCESS) {
-@@ -1426,17 +1427,17 @@ static int ecore_optimize_vlan_mac(struct bnx2x_softc *sc,
+@@ -1428,17 +1429,17 @@ static int ecore_optimize_vlan_mac(struct bnx2x_softc *sc,
  				    &pos->cmd_data.vlan_mac.vlan_mac_flags)) {
  			if ((query.cmd_data.vlan_mac.cmd ==
  			     ECORE_VLAN_MAC_ADD) && !o->put_credit(o)) {
@@ -4125,7 +4153,7 @@
  			  (elem->cmd_data.vlan_mac.cmd == ECORE_VLAN_MAC_ADD) ?
  			  "ADD" : "DEL");
  
-@@ -1486,7 +1487,7 @@ static int ecore_vlan_mac_get_registry_elem(struct bnx2x_softc *sc,
+@@ -1488,7 +1489,7 @@ static int ecore_vlan_mac_get_registry_elem(struct bnx2x_softc *sc,
  			return ECORE_INVAL;
  		}
  
@@ -4134,7 +4162,7 @@
  
  		/* Set a VLAN-MAC data */
  		ECORE_MEMCPY(&reg_elem->u, &elem->cmd_data.vlan_mac.u,
-@@ -1695,8 +1696,8 @@ int ecore_config_vlan_mac(struct bnx2x_softc *sc,
+@@ -1697,8 +1698,8 @@ int ecore_config_vlan_mac(struct bnx2x_softc *sc,
  		rc = ECORE_PENDING;
  
  	if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, ramrod_flags)) {
@@ -4145,7 +4173,7 @@
  		raw->clear_pending(raw);
  	}
  
-@@ -1775,7 +1776,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
+@@ -1777,7 +1778,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
  		    *vlan_mac_flags) {
  			rc = exeq->remove(sc, exeq->owner, exeq_pos);
  			if (rc) {
@@ -4154,7 +4182,7 @@
  				ECORE_SPIN_UNLOCK_BH(&exeq->lock);
  				return rc;
  			}
-@@ -1800,7 +1801,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
+@@ -1802,7 +1803,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
  	ECORE_CLEAR_BIT_NA(RAMROD_EXEC, &p.ramrod_flags);
  	ECORE_CLEAR_BIT_NA(RAMROD_CONT, &p.ramrod_flags);
  
@@ -4163,7 +4191,7 @@
  	read_lock = ecore_vlan_mac_h_read_lock(sc, o);
  	if (read_lock != ECORE_SUCCESS)
  		return read_lock;
-@@ -1812,7 +1813,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
+@@ -1814,7 +1815,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
  			ECORE_MEMCPY(&p.user_req.u, &pos->u, sizeof(pos->u));
  			rc = ecore_config_vlan_mac(sc, &p);
  			if (rc < 0) {
@@ -4172,7 +4200,7 @@
  					    "Failed to add a new DEL command");
  				ecore_vlan_mac_h_read_unlock(sc, o);
  				return rc;
-@@ -1820,7 +1821,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
+@@ -1822,7 +1823,7 @@ static int ecore_vlan_mac_del_all(struct bnx2x_softc *sc,
  		}
  	}
  
@@ -4181,7 +4209,7 @@
  	ecore_vlan_mac_h_read_unlock(sc, o);
  
  	p.ramrod_flags = *ramrod_flags;
-@@ -2007,7 +2008,7 @@ static int ecore_set_rx_mode_e1x(struct bnx2x_softc *sc,
+@@ -2009,7 +2010,7 @@ static int ecore_set_rx_mode_e1x(struct bnx2x_softc *sc,
  	    mac_filters->unmatched_unicast | mask :
  	    mac_filters->unmatched_unicast & ~mask;
  
@@ -4190,7 +4218,7 @@
  		  "accp_mcast 0x%xaccp_bcast 0x%x",
  		  mac_filters->ucast_drop_all, mac_filters->mcast_drop_all,
  		  mac_filters->ucast_accept_all, mac_filters->mcast_accept_all,
-@@ -2153,8 +2154,8 @@ static int ecore_set_rx_mode_e2(struct bnx2x_softc *sc,
+@@ -2155,8 +2156,8 @@ static int ecore_set_rx_mode_e2(struct bnx2x_softc *sc,
  	 */
  	ecore_rx_mode_set_rdata_hdr_e2(p->cid, &data->header, rule_idx);
  
@@ -4201,7 +4229,7 @@
  	     data->header.rule_cnt, p->rx_accept_flags, p->tx_accept_flags);
  
  	/* No need for an explicit memory barrier here as long we would
-@@ -2207,7 +2208,7 @@ int ecore_config_rx_mode(struct bnx2x_softc *sc,
+@@ -2209,7 +2210,7 @@ int ecore_config_rx_mode(struct bnx2x_softc *sc,
  				return rc;
  		}
  	} else {
@@ -4210,7 +4238,7 @@
  		return -1;
  	}
  
-@@ -2288,7 +2289,7 @@ static int ecore_mcast_enqueue_cmd(struct bnx2x_softc *sc __rte_unused,
+@@ -2290,7 +2291,7 @@ static int ecore_mcast_enqueue_cmd(struct bnx2x_softc *sc __rte_unused,
  	if (!new_cmd)
  		return ECORE_NOMEM;
  
@@ -4219,7 +4247,7 @@
  		  cmd, macs_list_len);
  
  	ECORE_LIST_INIT(&new_cmd->data.macs_head);
-@@ -2324,7 +2325,7 @@ static int ecore_mcast_enqueue_cmd(struct bnx2x_softc *sc __rte_unused,
+@@ -2326,7 +2327,7 @@ static int ecore_mcast_enqueue_cmd(struct bnx2x_softc *sc __rte_unused,
  
  	default:
  		ECORE_FREE(sc, new_cmd, total_sz);
@@ -4228,7 +4256,7 @@
  		return ECORE_INVAL;
  	}
  
-@@ -2436,11 +2437,11 @@ static void ecore_mcast_set_one_rule_e2(struct bnx2x_softc *sc __rte_unused,
+@@ -2438,11 +2439,11 @@ static void ecore_mcast_set_one_rule_e2(struct bnx2x_softc *sc __rte_unused,
  		break;
  
  	default:
@@ -4242,7 +4270,7 @@
  		  ((rx_tx_add_flag & ETH_MULTICAST_RULES_CMD_IS_ADD) ?
  		   "Setting" : "Clearing"), bin);
  
-@@ -2475,7 +2476,7 @@ static int ecore_mcast_handle_restore_cmd_e2(struct bnx2x_softc *sc,
+@@ -2477,7 +2478,7 @@ static int ecore_mcast_handle_restore_cmd_e2(struct bnx2x_softc *sc,
  
  		cnt++;
  
@@ -4251,7 +4279,7 @@
  
  		/* Break if we reached the maximum number
  		 * of rules.
-@@ -2507,8 +2508,8 @@ static void ecore_mcast_hdl_pending_add_e2(struct bnx2x_softc *sc,
+@@ -2509,8 +2510,8 @@ static void ecore_mcast_hdl_pending_add_e2(struct bnx2x_softc *sc,
  
  		cnt++;
  
@@ -4262,7 +4290,7 @@
  		     pmac_pos->mac[0], pmac_pos->mac[1], pmac_pos->mac[2],
  		     pmac_pos->mac[3], pmac_pos->mac[4], pmac_pos->mac[5]);
  
-@@ -2543,7 +2544,7 @@ static void ecore_mcast_hdl_pending_del_e2(struct bnx2x_softc *sc,
+@@ -2545,7 +2546,7 @@ static void ecore_mcast_hdl_pending_del_e2(struct bnx2x_softc *sc,
  
  		cmd_pos->data.macs_num--;
  
@@ -4271,7 +4299,7 @@
  			  cmd_pos->data.macs_num, cnt);
  
  		/* Break if we reached the maximum
-@@ -2602,7 +2603,8 @@ static int ecore_mcast_handle_pending_cmds_e2(struct bnx2x_softc *sc, struct
+@@ -2604,7 +2605,8 @@ static int ecore_mcast_handle_pending_cmds_e2(struct bnx2x_softc *sc, struct
  			break;
  
  		default:
@@ -4281,7 +4309,7 @@
  			return ECORE_INVAL;
  		}
  
-@@ -2639,8 +2641,8 @@ static void ecore_mcast_hdl_add(struct bnx2x_softc *sc,
+@@ -2641,8 +2643,8 @@ static void ecore_mcast_hdl_add(struct bnx2x_softc *sc,
  
  		cnt++;
  
@@ -4292,7 +4320,7 @@
  		     mlist_pos->mac[0], mlist_pos->mac[1], mlist_pos->mac[2],
  		     mlist_pos->mac[3], mlist_pos->mac[4], mlist_pos->mac[5]);
  	}
-@@ -2660,7 +2662,8 @@ static void ecore_mcast_hdl_del(struct bnx2x_softc *sc,
+@@ -2662,7 +2664,8 @@ static void ecore_mcast_hdl_del(struct bnx2x_softc *sc,
  
  		cnt++;
  
@@ -4302,7 +4330,7 @@
  	}
  
  	*line_idx = cnt;
-@@ -2686,7 +2689,7 @@ static int ecore_mcast_handle_current_cmd(struct bnx2x_softc *sc, struct
+@@ -2688,7 +2691,7 @@ static int ecore_mcast_handle_current_cmd(struct bnx2x_softc *sc, struct
  	struct ecore_mcast_obj *o = p->mcast_obj;
  	int cnt = start_cnt;
  
@@ -4311,7 +4339,7 @@
  
  	switch (cmd) {
  	case ECORE_MCAST_CMD_ADD:
-@@ -2702,7 +2705,7 @@ static int ecore_mcast_handle_current_cmd(struct bnx2x_softc *sc, struct
+@@ -2704,7 +2707,7 @@ static int ecore_mcast_handle_current_cmd(struct bnx2x_softc *sc, struct
  		break;
  
  	default:
@@ -4320,7 +4348,7 @@
  		return ECORE_INVAL;
  	}
  
-@@ -2747,7 +2750,7 @@ static int ecore_mcast_validate_e2(__rte_unused struct bnx2x_softc *sc,
+@@ -2749,7 +2752,7 @@ static int ecore_mcast_validate_e2(__rte_unused struct bnx2x_softc *sc,
  		break;
  
  	default:
@@ -4329,7 +4357,7 @@
  		return ECORE_INVAL;
  	}
  
-@@ -2933,8 +2936,8 @@ static void ecore_mcast_hdl_add_e1h(struct bnx2x_softc *sc __rte_unused,
+@@ -2935,8 +2938,8 @@ static void ecore_mcast_hdl_add_e1h(struct bnx2x_softc *sc __rte_unused,
  		bit = ecore_mcast_bin_from_mac(mlist_pos->mac);
  		ECORE_57711_SET_MC_FILTER(mc_filter, bit);
  
@@ -4340,7 +4368,7 @@
  		     mlist_pos->mac[0], mlist_pos->mac[1], mlist_pos->mac[2],
  		     mlist_pos->mac[3], mlist_pos->mac[4], mlist_pos->mac[5],
  		     bit);
-@@ -2954,7 +2957,7 @@ static void ecore_mcast_hdl_restore_e1h(struct bnx2x_softc *sc
+@@ -2956,7 +2959,7 @@ static void ecore_mcast_hdl_restore_e1h(struct bnx2x_softc *sc
  	for (bit = ecore_mcast_get_next_bin(o, 0);
  	     bit >= 0; bit = ecore_mcast_get_next_bin(o, bit + 1)) {
  		ECORE_57711_SET_MC_FILTER(mc_filter, bit);
@@ -4349,7 +4377,7 @@
  	}
  }
  
-@@ -2985,7 +2988,7 @@ static int ecore_mcast_setup_e1h(struct bnx2x_softc *sc,
+@@ -2987,7 +2990,7 @@ static int ecore_mcast_setup_e1h(struct bnx2x_softc *sc,
  			break;
  
  		case ECORE_MCAST_CMD_DEL:
@@ -4358,7 +4386,7 @@
  
  			/* clear the registry */
  			ECORE_MEMSET(o->registry.aprox_match.vec, 0,
-@@ -2997,7 +3000,7 @@ static int ecore_mcast_setup_e1h(struct bnx2x_softc *sc,
+@@ -2999,7 +3002,7 @@ static int ecore_mcast_setup_e1h(struct bnx2x_softc *sc,
  			break;
  
  		default:
@@ -4367,7 +4395,7 @@
  			return ECORE_INVAL;
  		}
  
-@@ -3048,8 +3051,8 @@ int ecore_config_mcast(struct bnx2x_softc *sc,
+@@ -3050,8 +3053,8 @@ int ecore_config_mcast(struct bnx2x_softc *sc,
  	if ((!p->mcast_list_len) && (!o->check_sched(o)))
  		return ECORE_SUCCESS;
  
@@ -4378,7 +4406,7 @@
  	     o->total_pending_num, p->mcast_list_len, o->max_cmd_len);
  
  	/* Enqueue the current command to the pending list if we can't complete
-@@ -3478,7 +3481,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
+@@ -3480,7 +3483,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
  
  	ECORE_MEMSET(data, 0, sizeof(*data));
  
@@ -4387,7 +4415,7 @@
  
  	/* Set an echo field */
  	data->echo = ECORE_CPU_TO_LE32((r->cid & ECORE_SWCID_MASK) |
-@@ -3492,7 +3495,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
+@@ -3494,7 +3497,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
  
  	data->rss_mode = rss_mode;
  
@@ -4396,7 +4424,7 @@
  
  	/* RSS capabilities */
  	if (ECORE_TEST_BIT(ECORE_RSS_IPV4, &p->rss_flags))
-@@ -3532,7 +3535,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
+@@ -3534,7 +3537,7 @@ static int ecore_setup_rss(struct bnx2x_softc *sc,
  	/* RSS engine ID */
  	data->rss_engine_id = o->engine_id;
  
@@ -4405,7 +4433,7 @@
  
  	/* Indirection table */
  	ECORE_MEMCPY(data->indirection_table, p->ind_table,
-@@ -3627,15 +3630,15 @@ int ecore_queue_state_change(struct bnx2x_softc *sc,
+@@ -3629,15 +3632,15 @@ int ecore_queue_state_change(struct bnx2x_softc *sc,
  	/* Check that the requested transition is legal */
  	rc = o->check_transition(sc, o, params);
  	if (rc) {
@@ -4424,7 +4452,7 @@
  
  	/* Don't send a command if only driver cleanup was requested */
  	if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, &params->ramrod_flags))
-@@ -3702,7 +3705,7 @@ static int ecore_queue_comp_cmd(struct bnx2x_softc *sc __rte_unused,
+@@ -3704,7 +3707,7 @@ static int ecore_queue_comp_cmd(struct bnx2x_softc *sc __rte_unused,
  	unsigned long cur_pending = o->pending;
  
  	if (!ECORE_TEST_AND_CLEAR_BIT(cmd, &cur_pending)) {
@@ -4433,7 +4461,7 @@
  			    "Bad MC reply %d for queue %d in state %d pending 0x%lx, next_state %d",
  			    cmd, o->cids[ECORE_PRIMARY_CID_INDEX], o->state,
  			    cur_pending, o->next_state);
-@@ -3713,15 +3716,15 @@ static int ecore_queue_comp_cmd(struct bnx2x_softc *sc __rte_unused,
+@@ -3715,15 +3718,15 @@ static int ecore_queue_comp_cmd(struct bnx2x_softc *sc __rte_unused,
  		/* >= because tx only must always be smaller than cos since the
  		 * primary connection supports COS 0
  		 */
@@ -4452,7 +4480,7 @@
  			  o->cids[ECORE_PRIMARY_CID_INDEX], o->next_tx_only);
  
  	o->state = o->next_state;
-@@ -3782,7 +3785,7 @@ static void ecore_q_fill_init_general_data(struct bnx2x_softc *sc __rte_unused,
+@@ -3784,7 +3787,7 @@ static void ecore_q_fill_init_general_data(struct bnx2x_softc *sc __rte_unused,
  	    ECORE_TEST_BIT(ECORE_Q_FLG_FCOE, flags) ?
  	    LLFC_TRAFFIC_TYPE_FCOE : LLFC_TRAFFIC_TYPE_NW;
  
@@ -4461,7 +4489,7 @@
  		  gen_data->activate_flg, gen_data->cos,
  		  gen_data->statistics_en_flg);
  }
-@@ -3923,7 +3926,7 @@ static void ecore_q_fill_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queu
+@@ -3925,7 +3928,7 @@ static void ecore_q_fill_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queu
  	ecore_q_fill_init_tx_data(&cmd_params->params.tx_only.txq_params,
  				  &data->tx, &cmd_params->params.tx_only.flags);
  
@@ -4470,7 +4498,7 @@
  		  cmd_params->q_obj->cids[0],
  		  data->tx.tx_bd_page_base.lo, data->tx.tx_bd_page_base.hi);
  }
-@@ -3973,9 +3976,9 @@ static int ecore_q_init(struct bnx2x_softc *sc,
+@@ -3975,9 +3978,9 @@ static int ecore_q_init(struct bnx2x_softc *sc,
  
  	/* Set CDU context validation values */
  	for (cos = 0; cos < o->max_cos; cos++) {
@@ -4482,7 +4510,7 @@
  		ECORE_SET_CTX_VALIDATION(sc, init->cxts[cos], o->cids[cos]);
  	}
  
-@@ -4059,15 +4062,15 @@ static int ecore_q_send_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queue
+@@ -4061,15 +4064,15 @@ static int ecore_q_send_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queue
  
  	if (ECORE_TEST_BIT(ECORE_Q_TYPE_FWD, &o->type))
  		ramrod = RAMROD_CMD_ID_ETH_FORWARD_SETUP;
@@ -4501,7 +4529,7 @@
  		  tx_only_params->gen_params.cos,
  		  tx_only_params->gen_params.spcl_id);
  
-@@ -4077,8 +4080,8 @@ static int ecore_q_send_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queue
+@@ -4079,8 +4082,8 @@ static int ecore_q_send_setup_tx_only(struct bnx2x_softc *sc, struct ecore_queue
  	/* Fill the ramrod data */
  	ecore_q_fill_setup_tx_only(sc, params, rdata);
  
@@ -4512,7 +4540,7 @@
  	     o->cids[cid_index], rdata->general.client_id,
  	     rdata->general.sp_client_id, rdata->general.cos);
  
-@@ -4173,7 +4176,7 @@ static int ecore_q_send_update(struct bnx2x_softc *sc,
+@@ -4175,7 +4178,7 @@ static int ecore_q_send_update(struct bnx2x_softc *sc,
  	uint8_t cid_index = update_params->cid_index;
  
  	if (cid_index >= o->max_cos) {
@@ -4521,7 +4549,7 @@
  			    o->cl_id, cid_index);
  		return ECORE_INVAL;
  	}
-@@ -4267,7 +4270,7 @@ static int ecore_q_send_cfc_del(struct bnx2x_softc *sc,
+@@ -4269,7 +4272,7 @@ static int ecore_q_send_cfc_del(struct bnx2x_softc *sc,
  	uint8_t cid_idx = params->params.cfc_del.cid_index;
  
  	if (cid_idx >= o->max_cos) {
@@ -4530,7 +4558,7 @@
  			    o->cl_id, cid_idx);
  		return ECORE_INVAL;
  	}
-@@ -4283,7 +4286,7 @@ static int ecore_q_send_terminate(struct bnx2x_softc *sc, struct ecore_queue_sta
+@@ -4285,7 +4288,7 @@ static int ecore_q_send_terminate(struct bnx2x_softc *sc, struct ecore_queue_sta
  	uint8_t cid_index = params->params.terminate.cid_index;
  
  	if (cid_index >= o->max_cos) {
@@ -4539,7 +4567,7 @@
  			    o->cl_id, cid_index);
  		return ECORE_INVAL;
  	}
-@@ -4327,7 +4330,7 @@ static int ecore_queue_send_cmd_cmn(struct bnx2x_softc *sc, struct ecore_queue_s
+@@ -4329,7 +4332,7 @@ static int ecore_queue_send_cmd_cmn(struct bnx2x_softc *sc, struct ecore_queue_s
  	case ECORE_Q_CMD_EMPTY:
  		return ecore_q_send_empty(sc, params);
  	default:
@@ -4548,7 +4576,7 @@
  		return ECORE_INVAL;
  	}
  }
-@@ -4350,7 +4353,7 @@ static int ecore_queue_send_cmd_e1x(struct bnx2x_softc *sc,
+@@ -4352,7 +4355,7 @@ static int ecore_queue_send_cmd_e1x(struct bnx2x_softc *sc,
  	case ECORE_Q_CMD_EMPTY:
  		return ecore_queue_send_cmd_cmn(sc, params);
  	default:
@@ -4557,7 +4585,7 @@
  		return ECORE_INVAL;
  	}
  }
-@@ -4373,7 +4376,7 @@ static int ecore_queue_send_cmd_e2(struct bnx2x_softc *sc,
+@@ -4375,7 +4378,7 @@ static int ecore_queue_send_cmd_e2(struct bnx2x_softc *sc,
  	case ECORE_Q_CMD_EMPTY:
  		return ecore_queue_send_cmd_cmn(sc, params);
  	default:
@@ -4566,7 +4594,7 @@
  		return ECORE_INVAL;
  	}
  }
-@@ -4416,7 +4419,7 @@ static int ecore_queue_chk_transition(struct bnx2x_softc *sc __rte_unused,
+@@ -4418,7 +4421,7 @@ static int ecore_queue_chk_transition(struct bnx2x_softc *sc __rte_unused,
  	 * the previous one.
  	 */
  	if (o->pending) {
@@ -4575,7 +4603,7 @@
  			    o->pending);
  		return ECORE_BUSY;
  	}
-@@ -4543,19 +4546,19 @@ static int ecore_queue_chk_transition(struct bnx2x_softc *sc __rte_unused,
+@@ -4545,19 +4548,19 @@ static int ecore_queue_chk_transition(struct bnx2x_softc *sc __rte_unused,
  
  		break;
  	default:
@@ -4598,7 +4626,7 @@
  
  	return ECORE_INVAL;
  }
-@@ -4606,18 +4609,18 @@ static int ecore_queue_chk_fwd_transition(struct bnx2x_softc *sc __rte_unused,
+@@ -4608,18 +4611,18 @@ static int ecore_queue_chk_fwd_transition(struct bnx2x_softc *sc __rte_unused,
  
  		break;
  	default:
@@ -4620,7 +4648,7 @@
  	return ECORE_INVAL;
  }
  
-@@ -4697,14 +4700,14 @@ ecore_func_state_change_comp(struct bnx2x_softc *sc __rte_unused,
+@@ -4699,14 +4702,14 @@ ecore_func_state_change_comp(struct bnx2x_softc *sc __rte_unused,
  	unsigned long cur_pending = o->pending;
  
  	if (!ECORE_TEST_AND_CLEAR_BIT(cmd, &cur_pending)) {
@@ -4637,7 +4665,7 @@
  		  cmd, ECORE_FUNC_ID(sc), o->next_state);
  
  	o->state = o->next_state;
-@@ -4827,18 +4830,19 @@ static int ecore_func_chk_transition(struct bnx2x_softc *sc __rte_unused,
+@@ -4829,18 +4832,19 @@ static int ecore_func_chk_transition(struct bnx2x_softc *sc __rte_unused,
  
  		break;
  	default:
@@ -4660,7 +4688,7 @@
  
  	return ECORE_INVAL;
  }
-@@ -4928,13 +4932,13 @@ static int ecore_func_hw_init(struct bnx2x_softc *sc,
+@@ -4930,13 +4934,13 @@ static int ecore_func_hw_init(struct bnx2x_softc *sc,
  	const struct ecore_func_sp_drv_ops *drv = o->drv;
  	int rc = 0;
  
@@ -4676,7 +4704,7 @@
  		goto init_err;
  	}
  
-@@ -4965,7 +4969,7 @@ static int ecore_func_hw_init(struct bnx2x_softc *sc,
+@@ -4967,7 +4971,7 @@ static int ecore_func_hw_init(struct bnx2x_softc *sc,
  
  		break;
  	default:
@@ -4685,7 +4713,7 @@
  			    load_code);
  		rc = ECORE_INVAL;
  	}
-@@ -5041,7 +5045,7 @@ static int ecore_func_hw_reset(struct bnx2x_softc *sc,
+@@ -5043,7 +5047,7 @@ static int ecore_func_hw_reset(struct bnx2x_softc *sc,
  	struct ecore_func_sp_obj *o = params->f_obj;
  	const struct ecore_func_sp_drv_ops *drv = o->drv;
  
@@ -4694,7 +4722,7 @@
  		  reset_phase);
  
  	switch (reset_phase) {
-@@ -5055,7 +5059,7 @@ static int ecore_func_hw_reset(struct bnx2x_softc *sc,
+@@ -5057,7 +5061,7 @@ static int ecore_func_hw_reset(struct bnx2x_softc *sc,
  		ecore_func_reset_func(sc, drv);
  		break;
  	default:
@@ -4703,7 +4731,7 @@
  			    reset_phase);
  		break;
  	}
-@@ -5146,7 +5150,7 @@ static int ecore_func_send_afex_update(struct bnx2x_softc *sc, struct ecore_func
+@@ -5148,7 +5152,7 @@ static int ecore_func_send_afex_update(struct bnx2x_softc *sc, struct ecore_func
  	 *  read and we will have to put a full memory barrier there
  	 *  (inside ecore_sp_post()).
  	 */
@@ -4712,7 +4740,7 @@
  		  rdata->vif_id,
  		  rdata->afex_default_vlan, rdata->allowed_priorities);
  
-@@ -5184,8 +5188,8 @@ inline int ecore_func_send_afex_viflists(struct bnx2x_softc *sc,
+@@ -5186,8 +5190,8 @@ inline int ecore_func_send_afex_viflists(struct bnx2x_softc *sc,
  	 *  (inside ecore_sp_post()).
  	 */
  
@@ -4723,7 +4751,7 @@
  	     rdata->afex_vif_list_command, rdata->vif_list_index,
  	     rdata->func_bit_map, rdata->func_to_clear);
  
-@@ -5256,7 +5260,7 @@ static int ecore_func_send_cmd(struct bnx2x_softc *sc,
+@@ -5258,7 +5262,7 @@ static int ecore_func_send_cmd(struct bnx2x_softc *sc,
  	case ECORE_F_CMD_SWITCH_UPDATE:
  		return ecore_func_send_switch_update(sc, params);
  	default:
@@ -4732,7 +4760,7 @@
  		return ECORE_INVAL;
  	}
  }
-@@ -5317,7 +5321,7 @@ int ecore_func_state_change(struct bnx2x_softc *sc,
+@@ -5319,7 +5323,7 @@ int ecore_func_state_change(struct bnx2x_softc *sc,
  		}
  		if (rc == ECORE_BUSY) {
  			ECORE_MUTEX_UNLOCK(&o->one_pending_mutex);
@@ -4742,10 +4770,10 @@
  			return rc;
  		}
 diff --git a/drivers/net/bnx2x/ecore_sp.h b/drivers/net/bnx2x/ecore_sp.h
-index 6b65a49676..f295bf5af5 100644
+index 9c1f55dfda..b8fad246af 100644
 --- a/drivers/net/bnx2x/ecore_sp.h
 +++ b/drivers/net/bnx2x/ecore_sp.h
-@@ -215,8 +215,8 @@ ECORE_CRC32_LE(uint32_t seed, uint8_t *mac, uint32_t len)
+@@ -217,8 +217,8 @@ ECORE_CRC32_LE(uint32_t seed, uint8_t *mac, uint32_t len)
      } while (0)
  
  
@@ -4757,10 +4785,10 @@
  typedef struct _ecore_list_entry_t
  {
 diff --git a/drivers/net/bnx2x/elink.c b/drivers/net/bnx2x/elink.c
-index b63fd23e5d..1f94476c5f 100644
+index 89747104a4..95b4e75984 100644
 --- a/drivers/net/bnx2x/elink.c
 +++ b/drivers/net/bnx2x/elink.c
-@@ -942,7 +942,7 @@ static int elink_check_lfa(struct elink_params *params)
+@@ -944,7 +944,7 @@ static int elink_check_lfa(struct elink_params *params)
  	 * to verify DCC bit is cleared in any case!
  	 */
  	if (additional_config & NO_LFA_DUE_TO_DCC_MASK) {
@@ -4769,7 +4797,7 @@
  		REG_WR(sc, params->lfa_base +
  		       offsetof(struct shmem_lfa, additional_config),
  		       additional_config & ~NO_LFA_DUE_TO_DCC_MASK);
-@@ -983,7 +983,7 @@ static int elink_check_lfa(struct elink_params *params)
+@@ -985,7 +985,7 @@ static int elink_check_lfa(struct elink_params *params)
  			   offsetof(struct shmem_lfa, req_duplex));
  	req_val = params->req_duplex[0] | (params->req_duplex[1] << 16);
  	if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
@@ -4778,7 +4806,7 @@
  			    (saved_val & lfa_mask), (req_val & lfa_mask));
  		return LFA_DUPLEX_MISMATCH;
  	}
-@@ -992,7 +992,7 @@ static int elink_check_lfa(struct elink_params *params)
+@@ -994,7 +994,7 @@ static int elink_check_lfa(struct elink_params *params)
  			   offsetof(struct shmem_lfa, req_flow_ctrl));
  	req_val = params->req_flow_ctrl[0] | (params->req_flow_ctrl[1] << 16);
  	if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
@@ -4787,7 +4815,7 @@
  			    (saved_val & lfa_mask), (req_val & lfa_mask));
  		return LFA_FLOW_CTRL_MISMATCH;
  	}
-@@ -1001,7 +1001,7 @@ static int elink_check_lfa(struct elink_params *params)
+@@ -1003,7 +1003,7 @@ static int elink_check_lfa(struct elink_params *params)
  			   offsetof(struct shmem_lfa, req_line_speed));
  	req_val = params->req_line_speed[0] | (params->req_line_speed[1] << 16);
  	if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
@@ -4796,7 +4824,7 @@
  			    (saved_val & lfa_mask), (req_val & lfa_mask));
  		return LFA_LINK_SPEED_MISMATCH;
  	}
-@@ -1012,7 +1012,7 @@ static int elink_check_lfa(struct elink_params *params)
+@@ -1014,7 +1014,7 @@ static int elink_check_lfa(struct elink_params *params)
  						     speed_cap_mask[cfg_idx]));
  
  		if (cur_speed_cap_mask != params->speed_cap_mask[cfg_idx]) {
@@ -4805,7 +4833,7 @@
  				    cur_speed_cap_mask,
  				    params->speed_cap_mask[cfg_idx]);
  			return LFA_SPEED_CAP_MISMATCH;
-@@ -1025,7 +1025,7 @@ static int elink_check_lfa(struct elink_params *params)
+@@ -1027,7 +1027,7 @@ static int elink_check_lfa(struct elink_params *params)
  	    REQ_FC_AUTO_ADV_MASK;
  
  	if ((uint16_t) cur_req_fc_auto_adv != params->req_fc_auto_adv) {
@@ -4814,7 +4842,7 @@
  			    cur_req_fc_auto_adv, params->req_fc_auto_adv);
  		return LFA_FLOW_CTRL_MISMATCH;
  	}
-@@ -1038,7 +1038,8 @@ static int elink_check_lfa(struct elink_params *params)
+@@ -1040,7 +1040,8 @@ static int elink_check_lfa(struct elink_params *params)
  	     (params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI)) ||
  	    ((eee_status & SHMEM_EEE_REQUESTED_BIT) ^
  	     (params->eee_mode & ELINK_EEE_MODE_ADV_LPI))) {
@@ -4824,7 +4852,7 @@
  			    eee_status);
  		return LFA_EEE_MISMATCH;
  	}
-@@ -1057,7 +1058,7 @@ static void elink_get_epio(struct bnx2x_softc *sc, uint32_t epio_pin,
+@@ -1059,7 +1060,7 @@ static void elink_get_epio(struct bnx2x_softc *sc, uint32_t epio_pin,
  	*en = 0;
  	/* Sanity check */
  	if (epio_pin > 31) {
@@ -4833,7 +4861,7 @@
  		return;
  	}
  
-@@ -1075,10 +1076,10 @@ static void elink_set_epio(struct bnx2x_softc *sc, uint32_t epio_pin, uint32_t e
+@@ -1077,10 +1078,10 @@ static void elink_set_epio(struct bnx2x_softc *sc, uint32_t epio_pin, uint32_t e
  
  	/* Sanity check */
  	if (epio_pin > 31) {
@@ -4846,7 +4874,7 @@
  	epio_mask = 1 << epio_pin;
  	/* Set this EPIO to output */
  	gp_output = REG_RD(sc, MCP_REG_MCPR_GP_OUTPUTS);
-@@ -1209,7 +1210,7 @@ static void elink_set_mdio_clk(struct bnx2x_softc *sc, uint32_t emac_base)
+@@ -1211,7 +1212,7 @@ static void elink_set_mdio_clk(struct bnx2x_softc *sc, uint32_t emac_base)
  	new_mode |= clc_cnt;
  	new_mode |= (EMAC_MDIO_MODE_CLAUSE_45);
  
@@ -4855,7 +4883,7 @@
  		    cur_mode, new_mode);
  	REG_WR(sc, emac_base + EMAC_REG_EMAC_MDIO_MODE, new_mode);
  	DELAY(40);
-@@ -1262,9 +1263,9 @@ static void elink_emac_init(struct elink_params *params)
+@@ -1264,9 +1265,9 @@ static void elink_emac_init(struct elink_params *params)
  	timeout = 200;
  	do {
  		val = REG_RD(sc, emac_base + EMAC_REG_EMAC_MODE);
@@ -4867,7 +4895,7 @@
  			return;
  		}
  		timeout--;
-@@ -1327,7 +1328,7 @@ static void elink_umac_enable(struct elink_params *params,
+@@ -1329,7 +1330,7 @@ static void elink_umac_enable(struct elink_params *params,
  	REG_WR(sc, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET,
  	       (MISC_REGISTERS_RESET_REG_2_UMAC0 << params->port));
  
@@ -4876,7 +4904,7 @@
  
  	/* This register opens the gate for the UMAC despite its name */
  	REG_WR(sc, NIG_REG_EGRESS_EMAC0_PORT + params->port * 4, 1);
-@@ -1350,7 +1351,7 @@ static void elink_umac_enable(struct elink_params *params,
+@@ -1352,7 +1353,7 @@ static void elink_umac_enable(struct elink_params *params,
  		val |= (3 << 2);
  		break;
  	default:
@@ -4885,7 +4913,7 @@
  			    vars->line_speed);
  		break;
  	}
-@@ -1368,7 +1369,7 @@ static void elink_umac_enable(struct elink_params *params,
+@@ -1370,7 +1371,7 @@ static void elink_umac_enable(struct elink_params *params,
  
  	/* Configure UMAC for EEE */
  	if (vars->eee_status & SHMEM_EEE_ADV_STATUS_MASK) {
@@ -4894,7 +4922,7 @@
  		REG_WR(sc, umac_base + UMAC_REG_UMAC_EEE_CTRL,
  		       UMAC_UMAC_EEE_CTRL_REG_EEE_EN);
  		REG_WR(sc, umac_base + UMAC_REG_EEE_WAKE_TIMER, 0x11);
-@@ -1426,7 +1427,7 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
+@@ -1428,7 +1429,7 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
  	    is_port4mode &&
  	    (REG_RD(sc, MISC_REG_RESET_REG_2) &
  	     MISC_REGISTERS_RESET_REG_2_XMAC)) {
@@ -4903,7 +4931,7 @@
  		return;
  	}
  
-@@ -1438,7 +1439,7 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
+@@ -1440,7 +1441,7 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
  	REG_WR(sc, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET,
  	       MISC_REGISTERS_RESET_REG_2_XMAC);
  	if (is_port4mode) {
@@ -4912,7 +4940,7 @@
  
  		/* Set the number of ports on the system side to up to 2 */
  		REG_WR(sc, MISC_REG_XMAC_CORE_PORT_MODE, 1);
-@@ -1449,12 +1450,12 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
+@@ -1451,12 +1452,12 @@ static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
  		/* Set the number of ports on the system side to 1 */
  		REG_WR(sc, MISC_REG_XMAC_CORE_PORT_MODE, 0);
  		if (max_speed == ELINK_SPEED_10000) {
@@ -4927,7 +4955,7 @@
  				    "Init XMAC to 20G x 2 ports per path");
  			/* Set the number of ports on the Warp Core to 20G */
  			REG_WR(sc, MISC_REG_XMAC_PHY_PORT_MODE, 1);
-@@ -1487,7 +1488,7 @@ static void elink_set_xmac_rxtx(struct elink_params *params, uint8_t en)
+@@ -1489,7 +1490,7 @@ static void elink_set_xmac_rxtx(struct elink_params *params, uint8_t en)
  		       (pfc_ctrl & ~(1 << 1)));
  		REG_WR(sc, xmac_base + XMAC_REG_PFC_CTRL_HI,
  		       (pfc_ctrl | (1 << 1)));
@@ -4936,7 +4964,7 @@
  		val = REG_RD(sc, xmac_base + XMAC_REG_CTRL);
  		if (en)
  			val |= (XMAC_CTRL_REG_TX_EN | XMAC_CTRL_REG_RX_EN);
-@@ -1502,7 +1503,7 @@ static elink_status_t elink_xmac_enable(struct elink_params *params,
+@@ -1504,7 +1505,7 @@ static elink_status_t elink_xmac_enable(struct elink_params *params,
  {
  	uint32_t val, xmac_base;
  	struct bnx2x_softc *sc = params->sc;
@@ -4945,7 +4973,7 @@
  
  	xmac_base = (params->port) ? GRCBASE_XMAC1 : GRCBASE_XMAC0;
  
-@@ -1539,7 +1540,7 @@ static elink_status_t elink_xmac_enable(struct elink_params *params,
+@@ -1541,7 +1542,7 @@ static elink_status_t elink_xmac_enable(struct elink_params *params,
  	elink_update_pfc_xmac(params, vars);
  
  	if (vars->eee_status & SHMEM_EEE_ADV_STATUS_MASK) {
@@ -4954,7 +4982,7 @@
  		REG_WR(sc, xmac_base + XMAC_REG_EEE_TIMERS_HI, 0x1380008);
  		REG_WR(sc, xmac_base + XMAC_REG_EEE_CTRL, 0x1);
  	} else {
-@@ -1575,7 +1576,7 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
+@@ -1577,7 +1578,7 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
  	uint32_t emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0;
  	uint32_t val;
  
@@ -4963,7 +4991,7 @@
  
  	/* Disable BMAC */
  	REG_WR(sc, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR,
-@@ -1589,14 +1590,14 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
+@@ -1591,14 +1592,14 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
  				      PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK) >>
  				     PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT);
  
@@ -4980,7 +5008,7 @@
  		/* select SerDes */
  		REG_WR(sc, NIG_REG_XGXS_SERDES0_MODE_SEL + port * 4, 0);
  	}
-@@ -1642,7 +1643,7 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
+@@ -1644,7 +1645,7 @@ static elink_status_t elink_emac_enable(struct elink_params *params,
  	 */
  	elink_cb_reg_write(sc, emac_base + EMAC_REG_RX_PFC_MODE, 0);
  	if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) {
@@ -4989,7 +5017,7 @@
  		/* Enable PFC again */
  		elink_cb_reg_write(sc, emac_base + EMAC_REG_RX_PFC_MODE,
  				   EMAC_REG_RX_PFC_MODE_RX_EN |
-@@ -1762,7 +1763,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
+@@ -1764,7 +1765,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
  	REG_WR_DMAE(sc, bmac_addr + BIGMAC2_REGISTER_TX_CONTROL, wb_data, 2);
  
  	if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) {
@@ -4998,7 +5026,7 @@
  		/* Enable PFC RX & TX & STATS and set 8 COS  */
  		wb_data[0] = 0x0;
  		wb_data[0] |= (1 << 0);	/* RX */
-@@ -1776,7 +1777,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
+@@ -1778,7 +1779,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
  		/* Clear the force Xon */
  		wb_data[0] &= ~(1 << 2);
  	} else {
@@ -5007,7 +5035,7 @@
  		/* Disable PFC RX & TX & STATS and set 8 COS */
  		wb_data[0] = 0x8;
  		wb_data[1] = 0;
-@@ -1802,7 +1803,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
+@@ -1804,7 +1805,7 @@ static void elink_update_pfc_bmac2(struct elink_params *params,
  	val = 0x3;		/* Enable RX and TX */
  	if (is_lb) {
  		val |= 0x4;	/* Local loopback */
@@ -5016,7 +5044,7 @@
  	}
  	/* When PFC enabled, Pass pause frames towards the NIG. */
  	if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED)
-@@ -1896,7 +1897,7 @@ static void elink_update_pfc_nig(struct elink_params *params,
+@@ -1898,7 +1899,7 @@ static void elink_update_pfc_nig(struct elink_params *params,
  
  	int set_pfc = params->feature_config_flags &
  	    ELINK_FEATURE_CONFIG_PFC_ENABLED;
@@ -5025,7 +5053,7 @@
  
  	/* When NIG_LLH0_XCM_MASK_REG_LLHX_XCM_MASK_BCN bit is set
  	 * MAC control frames (that are not pause packets)
-@@ -2008,7 +2009,7 @@ elink_status_t elink_update_pfc(struct elink_params *params,
+@@ -2010,7 +2011,7 @@ elink_status_t elink_update_pfc(struct elink_params *params,
  	if (!vars->link_up)
  		return elink_status;
  
@@ -5034,7 +5062,7 @@
  
  	if (CHIP_IS_E3(sc)) {
  		if (vars->mac_type == ELINK_MAC_TYPE_XMAC)
-@@ -2018,7 +2019,7 @@ elink_status_t elink_update_pfc(struct elink_params *params,
+@@ -2020,7 +2021,7 @@ elink_status_t elink_update_pfc(struct elink_params *params,
  		if ((val &
  		     (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << params->port))
  		    == 0) {
@@ -5043,7 +5071,7 @@
  			elink_emac_enable(params, vars, 0);
  			return elink_status;
  		}
-@@ -2047,7 +2048,7 @@ static elink_status_t elink_bmac1_enable(struct elink_params *params,
+@@ -2049,7 +2050,7 @@ static elink_status_t elink_bmac1_enable(struct elink_params *params,
  	uint32_t wb_data[2];
  	uint32_t val;
  
@@ -5052,7 +5080,7 @@
  
  	/* XGXS control */
  	wb_data[0] = 0x3c;
-@@ -2066,7 +2067,7 @@ static elink_status_t elink_bmac1_enable(struct elink_params *params,
+@@ -2068,7 +2069,7 @@ static elink_status_t elink_bmac1_enable(struct elink_params *params,
  	val = 0x3;
  	if (is_lb) {
  		val |= 0x4;
@@ -5061,7 +5089,7 @@
  	}
  	wb_data[0] = val;
  	wb_data[1] = 0;
-@@ -2107,7 +2108,7 @@ static elink_status_t elink_bmac2_enable(struct elink_params *params,
+@@ -2109,7 +2110,7 @@ static elink_status_t elink_bmac2_enable(struct elink_params *params,
  	    NIG_REG_INGRESS_BMAC0_MEM;
  	uint32_t wb_data[2];
  
@@ -5070,7 +5098,7 @@
  
  	wb_data[0] = 0;
  	wb_data[1] = 0;
-@@ -2245,7 +2246,7 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
+@@ -2247,7 +2248,7 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
  	/* Wait for init credit */
  	init_crd = REG_RD(sc, PBF_REG_P0_INIT_CRD + port * 4);
  	crd = REG_RD(sc, PBF_REG_P0_CREDIT + port * 8);
@@ -5079,7 +5107,7 @@
  
  	while ((init_crd != crd) && count) {
  		DELAY(1000 * 5);
-@@ -2254,7 +2255,7 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
+@@ -2256,7 +2257,7 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
  	}
  	crd = REG_RD(sc, PBF_REG_P0_CREDIT + port * 8);
  	if (init_crd != crd) {
@@ -5088,7 +5116,7 @@
  			    init_crd, crd);
  		return ELINK_STATUS_ERROR;
  	}
-@@ -2281,13 +2282,13 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
+@@ -2283,13 +2284,13 @@ static elink_status_t elink_pbf_update(struct elink_params *params,
  			init_crd = thresh + 553 - 22;
  			break;
  		default:
@@ -5104,7 +5132,7 @@
  		    line_speed, init_crd);
  
  	/* Probe the credit changes */
-@@ -2377,7 +2378,7 @@ static elink_status_t elink_cl22_write(struct bnx2x_softc *sc,
+@@ -2379,7 +2380,7 @@ static elink_status_t elink_cl22_write(struct bnx2x_softc *sc,
  		}
  	}
  	if (tmp & EMAC_MDIO_COMM_START_BUSY) {
@@ -5113,7 +5141,7 @@
  		rc = ELINK_STATUS_TIMEOUT;
  	}
  	REG_WR(sc, phy->mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, mode);
-@@ -2413,7 +2414,7 @@ static elink_status_t elink_cl22_read(struct bnx2x_softc *sc,
+@@ -2415,7 +2416,7 @@ static elink_status_t elink_cl22_read(struct bnx2x_softc *sc,
  		}
  	}
  	if (val & EMAC_MDIO_COMM_START_BUSY) {
@@ -5122,7 +5150,7 @@
  
  		*ret_val = 0;
  		rc = ELINK_STATUS_TIMEOUT;
-@@ -2454,7 +2455,7 @@ static elink_status_t elink_cl45_read(struct bnx2x_softc *sc,
+@@ -2456,7 +2457,7 @@ static elink_status_t elink_cl45_read(struct bnx2x_softc *sc,
  		}
  	}
  	if (val & EMAC_MDIO_COMM_START_BUSY) {
@@ -5131,7 +5159,7 @@
  		elink_cb_event_log(sc, ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT);	// "MDC/MDIO access timeout"
  
  		*ret_val = 0;
-@@ -2478,7 +2479,7 @@ static elink_status_t elink_cl45_read(struct bnx2x_softc *sc,
+@@ -2480,7 +2481,7 @@ static elink_status_t elink_cl45_read(struct bnx2x_softc *sc,
  			}
  		}
  		if (val & EMAC_MDIO_COMM_START_BUSY) {
@@ -5140,7 +5168,7 @@
  			elink_cb_event_log(sc, ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT);	// "MDC/MDIO access timeout"
  
  			*ret_val = 0;
-@@ -2530,7 +2531,7 @@ static elink_status_t elink_cl45_write(struct bnx2x_softc *sc,
+@@ -2532,7 +2533,7 @@ static elink_status_t elink_cl45_write(struct bnx2x_softc *sc,
  		}
  	}
  	if (tmp & EMAC_MDIO_COMM_START_BUSY) {
@@ -5149,7 +5177,7 @@
  		elink_cb_event_log(sc, ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT);	// "MDC/MDIO access timeout"
  
  		rc = ELINK_STATUS_TIMEOUT;
-@@ -2552,7 +2553,7 @@ static elink_status_t elink_cl45_write(struct bnx2x_softc *sc,
+@@ -2554,7 +2555,7 @@ static elink_status_t elink_cl45_write(struct bnx2x_softc *sc,
  			}
  		}
  		if (tmp & EMAC_MDIO_COMM_START_BUSY) {
@@ -5158,7 +5186,7 @@
  			elink_cb_event_log(sc, ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT);	// "MDC/MDIO access timeout"
  
  			rc = ELINK_STATUS_TIMEOUT;
-@@ -2675,7 +2676,7 @@ static elink_status_t elink_eee_set_timers(struct elink_params *params,
+@@ -2677,7 +2678,7 @@ static elink_status_t elink_eee_set_timers(struct elink_params *params,
  	} else if ((params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI) &&
  		   (params->eee_mode & ELINK_EEE_MODE_OVERRIDE_NVRAM) &&
  		   (params->eee_mode & ELINK_EEE_MODE_OUTPUT_TIME)) {
@@ -5167,7 +5195,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  
-@@ -2742,11 +2743,11 @@ static elink_status_t elink_eee_advertise(struct elink_phy *phy,
+@@ -2744,11 +2745,11 @@ static elink_status_t elink_eee_advertise(struct elink_phy *phy,
  	REG_WR(sc, MISC_REG_CPMU_LP_MASK_EXT_P0 + (params->port << 2), 0xfc20);
  
  	if (modes & SHMEM_EEE_10G_ADV) {
@@ -5181,7 +5209,7 @@
  		val |= 0x4;
  	}
  
-@@ -2786,7 +2787,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
+@@ -2788,7 +2789,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
  		if (adv & 0x2) {
  			if (vars->line_speed == ELINK_SPEED_100)
  				neg = 1;
@@ -5190,7 +5218,7 @@
  		}
  	}
  	if (lp & 0x14) {
-@@ -2794,7 +2795,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
+@@ -2796,7 +2797,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
  		if (adv & 0x14) {
  			if (vars->line_speed == ELINK_SPEED_1000)
  				neg = 1;
@@ -5199,7 +5227,7 @@
  		}
  	}
  	if (lp & 0x68) {
-@@ -2802,7 +2803,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
+@@ -2804,7 +2805,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
  		if (adv & 0x68) {
  			if (vars->line_speed == ELINK_SPEED_10000)
  				neg = 1;
@@ -5208,7 +5236,7 @@
  		}
  	}
  
-@@ -2810,7 +2811,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
+@@ -2812,7 +2813,7 @@ static void elink_eee_an_resolve(struct elink_phy *phy,
  	vars->eee_status |= (lp_adv << SHMEM_EEE_LP_ADV_STATUS_SHIFT);
  
  	if (neg) {
@@ -5217,7 +5245,7 @@
  		vars->eee_status |= SHMEM_EEE_ACTIVE_BIT;
  	}
  }
-@@ -2840,7 +2841,7 @@ static void elink_bsc_module_sel(struct elink_params *params)
+@@ -2842,7 +2843,7 @@ static void elink_bsc_module_sel(struct elink_params *params)
  				   e3_cmn_pin_cfg));
  	i2c_val[I2C_BSC0] = (sfp_ctrl & PORT_HW_CFG_E3_I2C_MUX0_MASK) > 0;
  	i2c_val[I2C_BSC1] = (sfp_ctrl & PORT_HW_CFG_E3_I2C_MUX1_MASK) > 0;
@@ -5226,7 +5254,7 @@
  	for (idx = 0; idx < I2C_SWITCH_WIDTH; idx++)
  		elink_set_cfg_pin(sc, i2c_pins[idx], i2c_val[idx]);
  }
-@@ -2856,7 +2857,7 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
+@@ -2858,7 +2859,7 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
  	elink_status_t rc = ELINK_STATUS_OK;
  
  	if (xfer_cnt > 16) {
@@ -5235,7 +5263,7 @@
  			    xfer_cnt);
  		return ELINK_STATUS_ERROR;
  	}
-@@ -2888,7 +2889,7 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
+@@ -2890,7 +2891,7 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
  		DELAY(10);
  		val = REG_RD(sc, MCP_REG_MCPR_IMC_COMMAND);
  		if (i++ > 1000) {
@@ -5244,7 +5272,7 @@
  				    i);
  			rc = ELINK_STATUS_TIMEOUT;
  			break;
-@@ -2912,7 +2913,8 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
+@@ -2914,7 +2915,8 @@ static elink_status_t elink_bsc_read(struct elink_params *params,
  		DELAY(10);
  		val = REG_RD(sc, MCP_REG_MCPR_IMC_COMMAND);
  		if (i++ > 1000) {
@@ -5254,7 +5282,7 @@
  			rc = ELINK_STATUS_TIMEOUT;
  			break;
  		}
-@@ -3057,7 +3059,7 @@ static void elink_serdes_deassert(struct bnx2x_softc *sc, uint8_t port)
+@@ -3059,7 +3061,7 @@ static void elink_serdes_deassert(struct bnx2x_softc *sc, uint8_t port)
  {
  	uint32_t val;
  
@@ -5263,7 +5291,7 @@
  
  	val = ELINK_SERDES_RESET_BITS << (port * 16);
  
-@@ -3092,7 +3094,7 @@ static void elink_xgxs_deassert(struct elink_params *params)
+@@ -3094,7 +3096,7 @@ static void elink_xgxs_deassert(struct elink_params *params)
  	struct bnx2x_softc *sc = params->sc;
  	uint8_t port;
  	uint32_t val;
@@ -5272,7 +5300,7 @@
  	port = params->port;
  
  	val = ELINK_XGXS_RESET_BITS << (port * 16);
-@@ -3143,7 +3145,7 @@ static void elink_calc_ieee_aneg_adv(struct elink_phy *phy,
+@@ -3145,7 +3147,7 @@ static void elink_calc_ieee_aneg_adv(struct elink_phy *phy,
  		*ieee_fc |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE;
  		break;
  	}
@@ -5281,7 +5309,7 @@
  }
  
  static void set_phy_vars(struct elink_params *params, struct elink_vars *vars)
-@@ -3177,7 +3179,7 @@ static void set_phy_vars(struct elink_params *params, struct elink_vars *vars)
+@@ -3179,7 +3181,7 @@ static void set_phy_vars(struct elink_params *params, struct elink_vars *vars)
  		    ELINK_SPEED_AUTO_NEG)
  			vars->link_status |= LINK_STATUS_AUTO_NEGOTIATE_ENABLED;
  
@@ -5290,7 +5318,7 @@
  			    " speed_cap_mask %x",
  			    params->phy[actual_phy_idx].req_flow_ctrl,
  			    params->phy[actual_phy_idx].req_line_speed,
-@@ -3208,7 +3210,7 @@ static void elink_ext_phy_set_pause(struct elink_params *params,
+@@ -3210,7 +3212,7 @@ static void elink_ext_phy_set_pause(struct elink_params *params,
  	    MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) {
  		val |= MDIO_AN_REG_ADV_PAUSE_PAUSE;
  	}
@@ -5299,7 +5327,7 @@
  	elink_cl45_write(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_ADV_PAUSE, val);
  }
  
-@@ -3287,7 +3289,7 @@ static void elink_ext_phy_update_adv_fc(struct elink_phy *phy,
+@@ -3289,7 +3291,7 @@ static void elink_ext_phy_update_adv_fc(struct elink_phy *phy,
  	}
  	pause_result = (ld_pause & MDIO_AN_REG_ADV_PAUSE_MASK) >> 8;
  	pause_result |= (lp_pause & MDIO_AN_REG_ADV_PAUSE_MASK) >> 10;
@@ -5308,7 +5336,7 @@
  	elink_pause_resolve(vars, pause_result);
  
  }
-@@ -3356,7 +3358,7 @@ static void elink_warpcore_enable_AN_KR2(struct elink_phy *phy,
+@@ -3358,7 +3360,7 @@ static void elink_warpcore_enable_AN_KR2(struct elink_phy *phy,
  		{MDIO_WC_DEVAD, MDIO_WC_REG_ETA_CL73_LD_BAM_CODE, 0x0157},
  		{MDIO_WC_DEVAD, MDIO_WC_REG_ETA_CL73_LD_UD_CODE, 0x0620}
  	};
@@ -5317,7 +5345,7 @@
  
  	elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD,
  				 MDIO_WC_REG_CL49_USERB0_CTRL, (3 << 6));
-@@ -3393,7 +3395,7 @@ static void elink_disable_kr2(struct elink_params *params,
+@@ -3395,7 +3397,7 @@ static void elink_disable_kr2(struct elink_params *params,
  		{MDIO_WC_DEVAD, MDIO_WC_REG_ETA_CL73_LD_BAM_CODE, 0x0002},
  		{MDIO_WC_DEVAD, MDIO_WC_REG_ETA_CL73_LD_UD_CODE, 0x0000}
  	};
@@ -5326,7 +5354,7 @@
  
  	for (i = 0; i < ARRAY_SIZE(reg_set); i++)
  		elink_cl45_write(sc, phy, reg_set[i].devad, reg_set[i].reg,
-@@ -3409,7 +3411,7 @@ static void elink_warpcore_set_lpi_passthrough(struct elink_phy *phy,
+@@ -3411,7 +3413,7 @@ static void elink_warpcore_set_lpi_passthrough(struct elink_phy *phy,
  {
  	struct bnx2x_softc *sc = params->sc;
  
@@ -5335,16 +5363,16 @@
  	elink_cl45_write(sc, phy, MDIO_WC_DEVAD,
  			 MDIO_WC_REG_EEE_COMBO_CONTROL0, 0x7c);
  	elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD,
-@@ -3447,7 +3449,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
+@@ -3449,7 +3451,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
  		{MDIO_PMA_DEVAD, MDIO_WC_REG_PMD_KR_CONTROL, 0x2},
  		{MDIO_WC_DEVAD, MDIO_WC_REG_CL72_USERB0_CL72_TX_FIR_TAP, 0},
  	};
 -	PMD_DRV_LOG(DEBUG, "Enable Auto Negotiation for KR");
 +	PMD_DRV_LOG(DEBUG, sc, "Enable Auto Negotiation for KR");
- 	/* Set to default registers that may be overridden by 10G force */
+ 	/* Set to default registers that may be overriden by 10G force */
  	for (i = 0; i < ARRAY_SIZE(reg_set); i++)
  		elink_cl45_write(sc, phy, reg_set[i].devad, reg_set[i].reg,
-@@ -3469,7 +3471,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
+@@ -3471,7 +3473,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
  
  		/* Enable CL37 1G Parallel Detect */
  		elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD, addr, 0x1);
@@ -5353,7 +5381,7 @@
  	}
  	if (((vars->line_speed == ELINK_SPEED_AUTO_NEG) &&
  	     (phy->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) ||
-@@ -3483,7 +3485,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
+@@ -3485,7 +3487,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
  		elink_cl45_write(sc, phy, MDIO_AN_DEVAD,
  				 MDIO_WC_REG_PAR_DET_10G_CTRL, 1);
  		elink_set_aer_mmd(params, phy);
@@ -5362,7 +5390,7 @@
  	}
  
  	/* Set Transmit PMD settings */
-@@ -3520,7 +3522,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
+@@ -3522,7 +3524,7 @@ static void elink_warpcore_enable_AN_KR(struct elink_phy *phy,
  		elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD,
  					 MDIO_WC_REG_DIGITAL6_MP5_NEXTPAGECTRL,
  					 1);
@@ -5371,7 +5399,7 @@
  	}
  
  	/* Advertise pause */
-@@ -3857,7 +3859,7 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
+@@ -3859,7 +3861,7 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
  		elink_cl45_read_or_write(sc, phy, MDIO_WC_DEVAD,
  					 MDIO_WC_REG_COMBO_IEEE0_MIICTRL,
  					 0x1000);
@@ -5380,7 +5408,7 @@
  	} else {
  		elink_cl45_read(sc, phy, MDIO_WC_DEVAD,
  				MDIO_WC_REG_COMBO_IEEE0_MIICTRL, &val16);
-@@ -3872,7 +3874,7 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
+@@ -3874,7 +3876,7 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
  			val16 |= 0x0040;
  			break;
  		default:
@@ -5389,7 +5417,7 @@
  				    "Speed not supported: 0x%x",
  				    phy->req_line_speed);
  			return;
-@@ -3884,11 +3886,11 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
+@@ -3886,11 +3888,11 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy,
  		elink_cl45_write(sc, phy, MDIO_WC_DEVAD,
  				 MDIO_WC_REG_COMBO_IEEE0_MIICTRL, val16);
  
@@ -5403,7 +5431,7 @@
  	}
  
  	/* SGMII Slave mode and disable signal detect */
-@@ -3999,7 +4001,7 @@ static elink_status_t elink_get_mod_abs_int_cfg(struct bnx2x_softc *sc,
+@@ -4001,7 +4003,7 @@ static elink_status_t elink_get_mod_abs_int_cfg(struct bnx2x_softc *sc,
  		 */
  		if ((cfg_pin < PIN_CFG_GPIO0_P0) ||
  		    (cfg_pin > PIN_CFG_GPIO3_P1)) {
@@ -5412,7 +5440,7 @@
  				    "No cfg pin %x for module detect indication",
  				    cfg_pin);
  			return ELINK_STATUS_ERROR;
-@@ -4091,7 +4093,7 @@ static void elink_warpcore_config_runtime(struct elink_phy *phy,
+@@ -4093,7 +4095,7 @@ static void elink_warpcore_config_runtime(struct elink_phy *phy,
  						 0x1200);
  
  				vars->rx_tx_asic_rst--;
@@ -5421,7 +5449,7 @@
  					    vars->rx_tx_asic_rst);
  			}
  			break;
-@@ -4113,10 +4115,10 @@ static void elink_warpcore_config_sfi(struct elink_phy *phy,
+@@ -4115,10 +4117,10 @@ static void elink_warpcore_config_sfi(struct elink_phy *phy,
  	if ((params->req_line_speed[ELINK_LINK_CONFIG_IDX(ELINK_INT_PHY)] ==
  	     ELINK_SPEED_10000) &&
  	    (phy->media_type != ELINK_ETH_PHY_SFP_1G_FIBER)) {
@@ -5434,7 +5462,7 @@
  		elink_warpcore_set_sgmii_speed(phy, params, 1, 0);
  	}
  }
-@@ -4133,7 +4135,7 @@ static void elink_sfp_e3_set_transmitter(struct elink_params *params,
+@@ -4135,7 +4137,7 @@ static void elink_sfp_e3_set_transmitter(struct elink_params *params,
  				  dev_info.port_hw_config[port].e3_sfp_ctrl)) &
  	    PORT_HW_CFG_E3_TX_LASER_MASK;
  	/* Set the !tx_en since this pin is DISABLE_TX_LASER */
@@ -5443,7 +5471,7 @@
  
  	/* For 20G, the expected pin to be used is 3 pins after the current */
  	elink_set_cfg_pin(sc, cfg_pin, tx_en ^ 1);
-@@ -4154,7 +4156,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
+@@ -4156,7 +4158,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
  					 dev_info.port_hw_config[params->port].
  					 default_cfg)) &
  			 PORT_HW_CFG_NET_SERDES_IF_MASK);
@@ -5452,7 +5480,7 @@
  		    "Begin Warpcore init, link_speed %d, "
  		    "serdes_net_if = 0x%x", vars->line_speed, serdes_net_if);
  	elink_set_aer_mmd(params, phy);
-@@ -4165,7 +4167,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
+@@ -4167,7 +4169,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
  	     ((phy->req_line_speed == ELINK_SPEED_100) ||
  	      (phy->req_line_speed == ELINK_SPEED_10)))) {
  		vars->phy_flags |= PHY_SGMII_FLAG;
@@ -5461,7 +5489,7 @@
  		elink_warpcore_clear_regs(phy, params, lane);
  		elink_warpcore_set_sgmii_speed(phy, params, 0, 1);
  	} else {
-@@ -4175,7 +4177,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
+@@ -4177,7 +4179,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
  			if (params->loopback_mode != ELINK_LOOPBACK_EXT)
  				elink_warpcore_enable_AN_KR(phy, params, vars);
  			else {
@@ -5470,7 +5498,7 @@
  				elink_warpcore_set_10G_KR(phy, params);
  			}
  			break;
-@@ -4183,14 +4185,14 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
+@@ -4185,14 +4187,14 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
  		case PORT_HW_CFG_NET_SERDES_IF_XFI:
  			elink_warpcore_clear_regs(phy, params, lane);
  			if (vars->line_speed == ELINK_SPEED_10000) {
@@ -5488,7 +5516,7 @@
  					fiber_mode = 0;
  				}
  				elink_warpcore_set_sgmii_speed(phy,
-@@ -4219,10 +4221,10 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
+@@ -4221,10 +4223,10 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
  
  		case PORT_HW_CFG_NET_SERDES_IF_DXGXS:
  			if (vars->line_speed != ELINK_SPEED_20000) {
@@ -5501,7 +5529,7 @@
  			elink_warpcore_set_20G_DXGXS(sc, phy, lane);
  			/* Issue Module detection */
  
-@@ -4232,12 +4234,12 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
+@@ -4234,12 +4236,12 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
  			if (!params->loopback_mode) {
  				elink_warpcore_enable_AN_KR(phy, params, vars);
  			} else {
@@ -5516,7 +5544,7 @@
  				    "Unsupported Serdes Net Interface 0x%x",
  				    serdes_net_if);
  			return 0;
-@@ -4246,7 +4248,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
+@@ -4248,7 +4250,7 @@ static uint8_t elink_warpcore_config_init(struct elink_phy *phy,
  
  	/* Take lane out of reset after configuration is finished */
  	elink_warpcore_reset_lane(sc, phy, 0);
@@ -5525,7 +5553,7 @@
  
  	return 0;
  }
-@@ -4311,7 +4313,7 @@ static void elink_set_warpcore_loopback(struct elink_phy *phy,
+@@ -4313,7 +4315,7 @@ static void elink_set_warpcore_loopback(struct elink_phy *phy,
  	struct bnx2x_softc *sc = params->sc;
  	uint16_t val16;
  	uint32_t lane;
@@ -5534,7 +5562,7 @@
  		    params->loopback_mode, phy->req_line_speed);
  
  	if (phy->req_line_speed < ELINK_SPEED_10000 ||
-@@ -4356,7 +4358,7 @@ static void elink_sync_link(struct elink_params *params,
+@@ -4358,7 +4360,7 @@ static void elink_sync_link(struct elink_params *params,
  		vars->phy_flags |= PHY_PHYSICAL_LINK_FLAG;
  	vars->link_up = (vars->link_status & LINK_STATUS_LINK_UP);
  	if (vars->link_up) {
@@ -5543,7 +5571,7 @@
  
  		vars->phy_link_up = 1;
  		vars->duplex = DUPLEX_FULL;
-@@ -4434,7 +4436,7 @@ static void elink_sync_link(struct elink_params *params,
+@@ -4436,7 +4438,7 @@ static void elink_sync_link(struct elink_params *params,
  				vars->mac_type = ELINK_MAC_TYPE_EMAC;
  		}
  	} else {		/* Link down */
@@ -5552,7 +5580,7 @@
  
  		vars->phy_link_up = 0;
  
-@@ -4491,7 +4493,7 @@ void elink_link_status_update(struct elink_params *params,
+@@ -4493,7 +4495,7 @@ void elink_link_status_update(struct elink_params *params,
  	params->phy[ELINK_EXT_PHY2].media_type =
  	    (media_types & PORT_HW_CFG_MEDIA_TYPE_PHY2_MASK) >>
  	    PORT_HW_CFG_MEDIA_TYPE_PHY2_SHIFT;
@@ -5561,7 +5589,7 @@
  
  	/* Sync AEU offset */
  	sync_offset = params->shmem_base +
-@@ -4512,9 +4514,9 @@ void elink_link_status_update(struct elink_params *params,
+@@ -4514,9 +4516,9 @@ void elink_link_status_update(struct elink_params *params,
  		vars->link_attr_sync = SHMEM2_RD(sc,
  						 link_attr_sync[params->port]);
  
@@ -5573,7 +5601,7 @@
  		    vars->line_speed, vars->duplex, vars->flow_ctrl);
  }
  
-@@ -4575,7 +4577,7 @@ static elink_status_t elink_reset_unicore(struct elink_params *params,
+@@ -4577,7 +4579,7 @@ static elink_status_t elink_reset_unicore(struct elink_params *params,
  	elink_cb_event_log(sc, ELINK_LOG_ID_PHY_UNINITIALIZED, params->port);	// "Warning: PHY was not initialized,"
  	// " Port %d",
  
@@ -5582,7 +5610,7 @@
  	return ELINK_STATUS_ERROR;
  
  }
-@@ -4634,7 +4636,7 @@ static void elink_set_parallel_detection(struct elink_phy *phy,
+@@ -4636,7 +4638,7 @@ static void elink_set_parallel_detection(struct elink_phy *phy,
  		control2 |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN;
  	else
  		control2 &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN;
@@ -5591,7 +5619,7 @@
  		    phy->speed_cap_mask, control2);
  	CL22_WR_OVER_CL45(sc, phy,
  			  MDIO_REG_BANK_SERDES_DIGITAL,
-@@ -4642,7 +4644,7 @@ static void elink_set_parallel_detection(struct elink_phy *phy,
+@@ -4644,7 +4646,7 @@ static void elink_set_parallel_detection(struct elink_phy *phy,
  
  	if ((phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) &&
  	    (phy->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) {
@@ -5600,7 +5628,7 @@
  
  		CL22_WR_OVER_CL45(sc, phy,
  				  MDIO_REG_BANK_10G_PARALLEL_DETECT,
-@@ -4795,7 +4797,7 @@ static void elink_program_serdes(struct elink_phy *phy,
+@@ -4797,7 +4799,7 @@ static void elink_program_serdes(struct elink_phy *phy,
  			  MDIO_REG_BANK_SERDES_DIGITAL,
  			  MDIO_SERDES_DIGITAL_MISC1, &reg_val);
  	/* Clearing the speed value before setting the right speed */
@@ -5609,7 +5637,7 @@
  
  	reg_val &= ~(MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_MASK |
  		     MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL);
-@@ -4863,7 +4865,7 @@ static void elink_restart_autoneg(struct elink_phy *phy,
+@@ -4865,7 +4867,7 @@ static void elink_restart_autoneg(struct elink_phy *phy,
  	struct bnx2x_softc *sc = params->sc;
  	uint16_t mii_control;
  
@@ -5618,7 +5646,7 @@
  	/* Enable and restart BAM/CL37 aneg */
  
  	if (enable_cl73) {
-@@ -4883,7 +4885,7 @@ static void elink_restart_autoneg(struct elink_phy *phy,
+@@ -4885,7 +4887,7 @@ static void elink_restart_autoneg(struct elink_phy *phy,
  		CL22_RD_OVER_CL45(sc, phy,
  				  MDIO_REG_BANK_COMBO_IEEE0,
  				  MDIO_COMBO_IEEE0_MII_CONTROL, &mii_control);
@@ -5627,7 +5655,7 @@
  			    "elink_restart_autoneg mii_control before = 0x%x",
  			    mii_control);
  		CL22_WR_OVER_CL45(sc, phy,
-@@ -4942,7 +4944,7 @@ static void elink_initialize_sgmii_process(struct elink_phy *phy,
+@@ -4944,7 +4946,7 @@ static void elink_initialize_sgmii_process(struct elink_phy *phy,
  			break;
  		default:
  			/* Invalid speed for SGMII */
@@ -5636,7 +5664,7 @@
  				    vars->line_speed);
  			break;
  		}
-@@ -4977,7 +4979,7 @@ static elink_status_t elink_direct_parallel_detect_used(struct elink_phy *phy,
+@@ -4979,7 +4981,7 @@ static elink_status_t elink_direct_parallel_detect_used(struct elink_phy *phy,
  			  MDIO_REG_BANK_SERDES_DIGITAL,
  			  MDIO_SERDES_DIGITAL_A_1000X_STATUS2, &status2_1000x);
  	if (status2_1000x & MDIO_SERDES_DIGITAL_A_1000X_STATUS2_AN_DISABLED) {
@@ -5645,7 +5673,7 @@
  			    params->port);
  		return ELINK_STATUS_ERROR;
  	}
-@@ -4987,7 +4989,7 @@ static elink_status_t elink_direct_parallel_detect_used(struct elink_phy *phy,
+@@ -4989,7 +4991,7 @@ static elink_status_t elink_direct_parallel_detect_used(struct elink_phy *phy,
  			  MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_STATUS, &pd_10g);
  
  	if (pd_10g & MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_STATUS_PD_LINK) {
@@ -5654,7 +5682,7 @@
  			    params->port);
  		return ELINK_STATUS_ERROR;
  	}
-@@ -5018,7 +5020,7 @@ static void elink_update_adv_fc(struct elink_phy *phy,
+@@ -5020,7 +5022,7 @@ static void elink_update_adv_fc(struct elink_phy *phy,
  				MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_MASK) >> 8;
  		pause_result |= (lp_pause &
  				 MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE_MASK) >> 10;
@@ -5663,7 +5691,7 @@
  	} else {
  		CL22_RD_OVER_CL45(sc, phy,
  				  MDIO_REG_BANK_COMBO_IEEE0,
-@@ -5031,7 +5033,7 @@ static void elink_update_adv_fc(struct elink_phy *phy,
+@@ -5033,7 +5035,7 @@ static void elink_update_adv_fc(struct elink_phy *phy,
  				MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK) >> 5;
  		pause_result |= (lp_pause &
  				 MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK) >> 7;
@@ -5672,7 +5700,7 @@
  	}
  	elink_pause_resolve(vars, pause_result);
  
-@@ -5060,7 +5062,7 @@ static void elink_flow_ctrl_resolve(struct elink_phy *phy,
+@@ -5062,7 +5064,7 @@ static void elink_flow_ctrl_resolve(struct elink_phy *phy,
  		}
  		elink_update_adv_fc(phy, params, vars, gp_status);
  	}
@@ -5681,7 +5709,7 @@
  }
  
  static void elink_check_fallback_to_cl37(struct elink_phy *phy,
-@@ -5068,13 +5070,13 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
+@@ -5070,13 +5072,13 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
  {
  	struct bnx2x_softc *sc = params->sc;
  	uint16_t rx_status, ustat_val, cl37_fsm_received;
@@ -5697,7 +5725,7 @@
  			    "rx_status(0x80b0) = 0x%x", rx_status);
  		CL22_WR_OVER_CL45(sc, phy,
  				  MDIO_REG_BANK_CL73_IEEEB0,
-@@ -5091,7 +5093,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
+@@ -5093,7 +5095,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
  	      MDIO_CL73_USERB0_CL73_USTAT1_AN_GOOD_CHECK_BAM37)) !=
  	    (MDIO_CL73_USERB0_CL73_USTAT1_LINK_STATUS_CHECK |
  	     MDIO_CL73_USERB0_CL73_USTAT1_AN_GOOD_CHECK_BAM37)) {
@@ -5706,7 +5734,7 @@
  			    "ustat_val(0x8371) = 0x%x", ustat_val);
  		return;
  	}
-@@ -5106,7 +5108,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
+@@ -5108,7 +5110,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
  	      MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_BRCM_OUI_MSG)) !=
  	    (MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_OVER1G_MSG |
  	     MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_BRCM_OUI_MSG)) {
@@ -5715,7 +5743,7 @@
  			    "misc_rx_status(0x8330) = 0x%x", cl37_fsm_received);
  		return;
  	}
-@@ -5122,7 +5124,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
+@@ -5124,7 +5126,7 @@ static void elink_check_fallback_to_cl37(struct elink_phy *phy,
  			  MDIO_CL73_IEEEB0_CL73_AN_CONTROL, 0);
  	/* Restart CL37 autoneg */
  	elink_restart_autoneg(phy, params, 0);
@@ -5724,7 +5752,7 @@
  }
  
  static void elink_xgxs_an_resolve(struct elink_phy *phy,
-@@ -5146,7 +5148,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
+@@ -5148,7 +5150,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
  	if (phy->req_line_speed == ELINK_SPEED_AUTO_NEG)
  		vars->link_status |= LINK_STATUS_AUTO_NEGOTIATE_ENABLED;
  	if (is_link_up) {
@@ -5733,7 +5761,7 @@
  
  		vars->phy_link_up = 1;
  		vars->link_status |= LINK_STATUS_LINK_UP;
-@@ -5187,7 +5189,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
+@@ -5189,7 +5191,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
  
  		case ELINK_GP_STATUS_5G:
  		case ELINK_GP_STATUS_6G:
@@ -5742,7 +5770,7 @@
  				    "link speed unsupported  gp_status 0x%x",
  				    speed_mask);
  			return ELINK_STATUS_ERROR;
-@@ -5207,13 +5209,13 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
+@@ -5209,13 +5211,13 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
  			vars->link_status |= ELINK_LINK_20GTFD;
  			break;
  		default:
@@ -5758,7 +5786,7 @@
  
  		vars->phy_link_up = 0;
  
-@@ -5221,7 +5223,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
+@@ -5223,7 +5225,7 @@ static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy,
  		vars->flow_ctrl = ELINK_FLOW_CTRL_NONE;
  		vars->mac_type = ELINK_MAC_TYPE_NONE;
  	}
@@ -5767,7 +5795,7 @@
  		    vars->phy_link_up, vars->line_speed);
  	return ELINK_STATUS_OK;
  }
-@@ -5244,7 +5246,7 @@ static uint8_t elink_link_settings_status(struct elink_phy *phy,
+@@ -5246,7 +5248,7 @@ static uint8_t elink_link_settings_status(struct elink_phy *phy,
  	if (gp_status & MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS)
  		link_up = 1;
  	speed_mask = gp_status & ELINK_GP_STATUS_SPEED_MASK;
@@ -5776,7 +5804,7 @@
  		    gp_status, link_up, speed_mask);
  	rc = elink_get_link_speed_duplex(phy, params, vars, link_up, speed_mask,
  					 duplex);
-@@ -5294,7 +5296,7 @@ static uint8_t elink_link_settings_status(struct elink_phy *phy,
+@@ -5296,7 +5298,7 @@ static uint8_t elink_link_settings_status(struct elink_phy *phy,
  			    LINK_STATUS_LINK_PARTNER_10GXFD_CAPABLE;
  	}
  
@@ -5785,7 +5813,7 @@
  		    vars->duplex, vars->flow_ctrl, vars->link_status);
  	return rc;
  }
-@@ -5320,7 +5322,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
+@@ -5322,7 +5324,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
  		uint16_t temp_link_up;
  		elink_cl45_read(sc, phy, MDIO_WC_DEVAD, 1, &temp_link_up);
  		elink_cl45_read(sc, phy, MDIO_WC_DEVAD, 1, &link_up);
@@ -5794,7 +5822,7 @@
  			    temp_link_up, link_up);
  		link_up &= (1 << 2);
  		if (link_up)
-@@ -5328,7 +5330,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
+@@ -5330,7 +5332,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
  	} else {
  		elink_cl45_read(sc, phy, MDIO_WC_DEVAD,
  				MDIO_WC_REG_GP2_STATUS_GP_2_1, &gp_status1);
@@ -5803,7 +5831,7 @@
  		/* Check for either KR, 1G, or AN up. */
  		link_up = ((gp_status1 >> 8) |
  			   (gp_status1 >> 12) | (gp_status1)) & (1 << lane);
-@@ -5398,7 +5400,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
+@@ -5400,7 +5402,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
  		elink_cl45_read(sc, phy, MDIO_WC_DEVAD,
  				MDIO_WC_REG_GP2_STATUS_GP_2_3, &gp_speed);
  	}
@@ -5812,7 +5840,7 @@
  
  	if ((lane & 1) == 0)
  		gp_speed <<= 8;
-@@ -5414,7 +5416,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
+@@ -5416,7 +5418,7 @@ static uint8_t elink_warpcore_read_status(struct elink_phy *phy,
  	    (!(phy->flags & ELINK_FLAGS_WC_DUAL_MODE)))
  		vars->rx_tx_asic_rst = MAX_KR_LINK_RETRY;
  
@@ -5821,7 +5849,7 @@
  		    vars->duplex, vars->flow_ctrl, vars->link_status);
  	return rc;
  }
-@@ -5461,7 +5463,7 @@ static elink_status_t elink_emac_program(struct elink_params *params,
+@@ -5463,7 +5465,7 @@ static elink_status_t elink_emac_program(struct elink_params *params,
  	uint8_t port = params->port;
  	uint16_t mode = 0;
  
@@ -5830,7 +5858,7 @@
  	elink_bits_dis(sc, GRCBASE_EMAC0 + port * 0x400 +
  		       EMAC_REG_EMAC_MODE,
  		       (EMAC_MODE_25G_MODE |
-@@ -5485,7 +5487,8 @@ static elink_status_t elink_emac_program(struct elink_params *params,
+@@ -5487,7 +5489,8 @@ static elink_status_t elink_emac_program(struct elink_params *params,
  
  	default:
  		/* 10G not valid for EMAC */
@@ -5840,7 +5868,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  
-@@ -5537,7 +5540,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
+@@ -5539,7 +5542,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
  		if (vars->line_speed != ELINK_SPEED_AUTO_NEG ||
  		    (ELINK_SINGLE_MEDIA_DIRECT(params) &&
  		     params->loopback_mode == ELINK_LOOPBACK_EXT)) {
@@ -5849,7 +5877,7 @@
  
  			/* Disable autoneg */
  			elink_set_autoneg(phy, params, vars, 0);
-@@ -5546,7 +5549,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
+@@ -5548,7 +5551,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
  			elink_program_serdes(phy, params, vars);
  
  		} else {	/* AN_mode */
@@ -5858,7 +5886,7 @@
  
  			/* AN enabled */
  			elink_set_brcm_cl37_advertisement(phy, params);
-@@ -5563,7 +5566,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
+@@ -5565,7 +5568,7 @@ static uint8_t elink_xgxs_config_init(struct elink_phy *phy,
  		}
  
  	} else {		/* SGMII mode */
@@ -5867,7 +5895,7 @@
  
  		elink_initialize_sgmii_process(phy, params, vars);
  	}
-@@ -5632,7 +5635,7 @@ static uint16_t elink_wait_reset_complete(struct bnx2x_softc *sc,
+@@ -5634,7 +5637,7 @@ static uint16_t elink_wait_reset_complete(struct bnx2x_softc *sc,
  		elink_cb_event_log(sc, ELINK_LOG_ID_PHY_UNINITIALIZED, params->port);	// "Warning: PHY was not initialized,"
  	// " Port %d",
  
@@ -5876,7 +5904,7 @@
  	return cnt;
  }
  
-@@ -5650,35 +5653,35 @@ static void elink_link_int_enable(struct elink_params *params)
+@@ -5652,35 +5655,35 @@ static void elink_link_int_enable(struct elink_params *params)
  	} else if (params->switch_cfg == ELINK_SWITCH_CFG_10G) {
  		mask = (ELINK_NIG_MASK_XGXS0_LINK10G |
  			ELINK_NIG_MASK_XGXS0_LINK_STATUS);
@@ -5919,7 +5947,7 @@
  		    REG_RD(sc, NIG_REG_XGXS0_STATUS_LINK10G + port * 0x68),
  		    REG_RD(sc, NIG_REG_XGXS0_STATUS_LINK_STATUS + port * 0x68));
  }
-@@ -5694,7 +5697,7 @@ static void elink_rearm_latch_signal(struct bnx2x_softc *sc, uint8_t port,
+@@ -5696,7 +5699,7 @@ static void elink_rearm_latch_signal(struct bnx2x_softc *sc, uint8_t port,
  	 */
  	/* Read Latched signals */
  	latch_status = REG_RD(sc, NIG_REG_LATCH_STATUS_0 + port * 8);
@@ -5928,7 +5956,7 @@
  	/* Handle only those with latched-signal=up. */
  	if (exp_mi_int)
  		elink_bits_en(sc,
-@@ -5746,7 +5749,7 @@ static void elink_link_int_ack(struct elink_params *params,
+@@ -5748,7 +5751,7 @@ static void elink_link_int_ack(struct elink_params *params,
  			} else
  				mask = ELINK_NIG_STATUS_SERDES0_LINK_STATUS;
  		}
@@ -5937,7 +5965,7 @@
  			    mask);
  		elink_bits_en(sc,
  			      NIG_REG_STATUS_INTERRUPT_PORT0 + port * 4, mask);
-@@ -5809,7 +5812,7 @@ static void elink_set_xgxs_loopback(struct elink_phy *phy,
+@@ -5811,7 +5814,7 @@ static void elink_set_xgxs_loopback(struct elink_phy *phy,
  	if (phy->req_line_speed != ELINK_SPEED_1000) {
  		uint32_t md_devad = 0;
  
@@ -5946,7 +5974,7 @@
  
  		if (!CHIP_IS_E3(sc)) {
  			/* Change the uni_phy_addr in the nig */
-@@ -5841,7 +5844,7 @@ static void elink_set_xgxs_loopback(struct elink_phy *phy,
+@@ -5843,7 +5846,7 @@ static void elink_set_xgxs_loopback(struct elink_phy *phy,
  		}
  	} else {
  		uint16_t mii_ctrl;
@@ -5955,7 +5983,7 @@
  		elink_cl45_read(sc, phy, 5,
  				(MDIO_REG_BANK_COMBO_IEEE0 +
  				 (MDIO_COMBO_IEEE0_MII_CONTROL & 0xf)),
-@@ -5865,8 +5868,9 @@ elink_status_t elink_set_led(struct elink_params *params,
+@@ -5867,8 +5870,9 @@ elink_status_t elink_set_led(struct elink_params *params,
  	uint32_t tmp;
  	uint32_t emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0;
  	struct bnx2x_softc *sc = params->sc;
@@ -5967,7 +5995,7 @@
  	/* In case */
  	for (phy_idx = ELINK_EXT_PHY1; phy_idx < ELINK_MAX_PHYS; phy_idx++) {
  		if (params->phy[phy_idx].set_link_led) {
-@@ -5986,7 +5990,8 @@ elink_status_t elink_set_led(struct elink_params *params,
+@@ -5987,7 +5991,8 @@ elink_status_t elink_set_led(struct elink_params *params,
  
  	default:
  		rc = ELINK_STATUS_ERROR;
@@ -5977,7 +6005,7 @@
  		break;
  	}
  	return rc;
-@@ -6053,7 +6058,7 @@ static elink_status_t elink_link_initialize(struct elink_params *params,
+@@ -6054,7 +6059,7 @@ static elink_status_t elink_link_initialize(struct elink_params *params,
  			if (phy_index == ELINK_EXT_PHY2 &&
  			    (elink_phy_selection(params) ==
  			     PORT_HW_CFG_PHY_SELECTION_FIRST_PHY)) {
@@ -5986,7 +6014,7 @@
  					    "Not initializing second phy");
  				continue;
  			}
-@@ -6094,7 +6099,7 @@ static void elink_common_ext_link_reset(__rte_unused struct elink_phy *phy,
+@@ -6095,7 +6100,7 @@ static void elink_common_ext_link_reset(__rte_unused struct elink_phy *phy,
  			    MISC_REGISTERS_GPIO_OUTPUT_LOW, gpio_port);
  	elink_cb_gpio_write(sc, MISC_REGISTERS_GPIO_2,
  			    MISC_REGISTERS_GPIO_OUTPUT_LOW, gpio_port);
@@ -5995,7 +6023,7 @@
  }
  
  static elink_status_t elink_update_link_down(struct elink_params *params,
-@@ -6103,7 +6108,7 @@ static elink_status_t elink_update_link_down(struct elink_params *params,
+@@ -6104,7 +6109,7 @@ static elink_status_t elink_update_link_down(struct elink_params *params,
  	struct bnx2x_softc *sc = params->sc;
  	uint8_t port = params->port;
  
@@ -6004,7 +6032,7 @@
  	elink_set_led(params, vars, ELINK_LED_MODE_OFF, 0);
  	vars->phy_flags &= ~PHY_PHYSICAL_LINK_FLAG;
  	/* Indicate no mac active */
-@@ -6164,7 +6169,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
+@@ -6165,7 +6170,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
  		if (link_10g) {
  			if (elink_xmac_enable(params, vars, 0) ==
  			    ELINK_STATUS_NO_LINK) {
@@ -6013,7 +6041,7 @@
  				vars->link_up = 0;
  				vars->phy_flags |= PHY_HALF_OPEN_CONN_FLAG;
  				vars->link_status &= ~LINK_STATUS_LINK_UP;
-@@ -6176,7 +6181,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
+@@ -6177,7 +6182,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
  
  		if ((vars->eee_status & SHMEM_EEE_ACTIVE_BIT) &&
  		    (vars->eee_status & SHMEM_EEE_LPI_REQUESTED_BIT)) {
@@ -6022,7 +6050,7 @@
  			REG_WR(sc, MISC_REG_CPMU_LP_FW_ENABLE_P0 +
  			       (params->port << 2), 1);
  			REG_WR(sc, MISC_REG_CPMU_LP_DR_ENABLE, 1);
-@@ -6188,7 +6193,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
+@@ -6189,7 +6194,7 @@ static elink_status_t elink_update_link_up(struct elink_params *params,
  		if (link_10g) {
  			if (elink_bmac_enable(params, vars, 0, 1) ==
  			    ELINK_STATUS_NO_LINK) {
@@ -6031,7 +6059,7 @@
  				vars->link_up = 0;
  				vars->phy_flags |= PHY_HALF_OPEN_CONN_FLAG;
  				vars->link_status &= ~LINK_STATUS_LINK_UP;
-@@ -6273,19 +6278,19 @@ elink_status_t elink_link_update(struct elink_params * params,
+@@ -6274,19 +6279,19 @@ elink_status_t elink_link_update(struct elink_params * params,
  	if (USES_WARPCORE(sc))
  		elink_set_aer_mmd(params, &params->phy[ELINK_INT_PHY]);
  
@@ -6054,7 +6082,7 @@
  		    REG_RD(sc, NIG_REG_XGXS0_STATUS_LINK10G + port * 0x68),
  		    REG_RD(sc, NIG_REG_XGXS0_STATUS_LINK_STATUS + port * 0x68));
  
-@@ -6309,10 +6314,10 @@ elink_status_t elink_link_update(struct elink_params * params,
+@@ -6310,10 +6315,10 @@ elink_status_t elink_link_update(struct elink_params * params,
  		cur_link_up = phy->read_status(phy, params,
  					       &phy_vars[phy_index]);
  		if (cur_link_up) {
@@ -6067,16 +6095,16 @@
  				    phy_index);
  			continue;
  		}
-@@ -6345,7 +6350,7 @@ elink_status_t elink_link_update(struct elink_params * params,
+@@ -6346,7 +6351,7 @@ elink_status_t elink_link_update(struct elink_params * params,
  				 * to link up by itself (using configuration)
- 				 * - DEFAULT should be overridden during initialization
+ 				 * - DEFAULT should be overriden during initialiazation
  				 */
 -				PMD_DRV_LOG(DEBUG, "Invalid link indication"
 +				PMD_DRV_LOG(DEBUG, sc, "Invalid link indication"
  					    "mpc=0x%x. DISABLING LINK !!!",
  					    params->multi_phy_config);
  				ext_phy_link_up = 0;
-@@ -6383,7 +6388,7 @@ elink_status_t elink_link_update(struct elink_params * params,
+@@ -6384,7 +6389,7 @@ elink_status_t elink_link_update(struct elink_params * params,
  		 */
  		if (active_external_phy == ELINK_EXT_PHY1) {
  			if (params->phy[ELINK_EXT_PHY2].phy_specific_func) {
@@ -6085,7 +6113,7 @@
  				params->phy[ELINK_EXT_PHY2].
  				    phy_specific_func(&params->
  						      phy[ELINK_EXT_PHY2],
-@@ -6401,7 +6406,7 @@ elink_status_t elink_link_update(struct elink_params * params,
+@@ -6402,7 +6407,7 @@ elink_status_t elink_link_update(struct elink_params * params,
  
  		vars->eee_status = phy_vars[active_external_phy].eee_status;
  
@@ -6094,7 +6122,7 @@
  			    active_external_phy);
  	}
  
-@@ -6415,7 +6420,7 @@ elink_status_t elink_link_update(struct elink_params * params,
+@@ -6416,7 +6421,7 @@ elink_status_t elink_link_update(struct elink_params * params,
  			break;
  		}
  	}
@@ -6103,7 +6131,7 @@
  		    " ext_phy_line_speed = %d", vars->flow_ctrl,
  		    vars->link_status, ext_phy_line_speed);
  	/* Upon link speed change set the NIG into drain mode. Comes to
-@@ -6426,7 +6431,7 @@ elink_status_t elink_link_update(struct elink_params * params,
+@@ -6427,7 +6432,7 @@ elink_status_t elink_link_update(struct elink_params * params,
  	if (vars->phy_link_up) {
  		if (!(ELINK_SINGLE_MEDIA_DIRECT(params)) && ext_phy_link_up &&
  		    (ext_phy_line_speed != vars->line_speed)) {
@@ -6112,7 +6140,7 @@
  				    " different than the external"
  				    " link speed %d", vars->line_speed,
  				    ext_phy_line_speed);
-@@ -6452,7 +6457,7 @@ elink_status_t elink_link_update(struct elink_params * params,
+@@ -6453,7 +6458,7 @@ elink_status_t elink_link_update(struct elink_params * params,
  	 * initialize it
  	 */
  	if (!(ELINK_SINGLE_MEDIA_DIRECT(params))) {
@@ -6121,7 +6149,7 @@
  			    " init_preceding = %d", ext_phy_link_up,
  			    vars->phy_link_up,
  			    params->phy[ELINK_EXT_PHY1].flags &
-@@ -6517,7 +6522,7 @@ static void elink_save_spirom_version(struct bnx2x_softc *sc,
+@@ -6518,7 +6523,7 @@ static void elink_save_spirom_version(struct bnx2x_softc *sc,
  				      __rte_unused uint8_t port,
  				      uint32_t spirom_ver, uint32_t ver_addr)
  {
@@ -6130,7 +6158,7 @@
  		    (uint16_t) (spirom_ver >> 16), (uint16_t) spirom_ver, port);
  
  	if (ver_addr)
-@@ -6583,7 +6588,7 @@ static void elink_8073_resolve_fc(struct elink_phy *phy,
+@@ -6584,7 +6589,7 @@ static void elink_8073_resolve_fc(struct elink_phy *phy,
  				 MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) >> 7;
  
  		elink_pause_resolve(vars, pause_result);
@@ -6139,7 +6167,7 @@
  			    pause_result);
  	}
  }
-@@ -6627,7 +6632,7 @@ static elink_status_t elink_8073_8727_external_rom_boot(struct bnx2x_softc *sc,
+@@ -6628,7 +6633,7 @@ static elink_status_t elink_8073_8727_external_rom_boot(struct bnx2x_softc *sc,
  	do {
  		count++;
  		if (count > 300) {
@@ -6148,7 +6176,7 @@
  				    "elink_8073_8727_external_rom_boot port %x:"
  				    "Download failed. fw version = 0x%x",
  				    port, fw_ver1);
-@@ -6652,7 +6657,7 @@ static elink_status_t elink_8073_8727_external_rom_boot(struct bnx2x_softc *sc,
+@@ -6653,7 +6658,7 @@ static elink_status_t elink_8073_8727_external_rom_boot(struct bnx2x_softc *sc,
  			 MDIO_PMA_DEVAD, MDIO_PMA_REG_MISC_CTRL1, 0x0000);
  	elink_save_bnx2x_spirom_ver(sc, phy, port);
  
@@ -6157,7 +6185,7 @@
  		    "elink_8073_8727_external_rom_boot port %x:"
  		    "Download complete. fw version = 0x%x", port, fw_ver1);
  
-@@ -6713,10 +6718,10 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
+@@ -6714,10 +6719,10 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
  		 * these bits indicate 2.5G or 1G link up).
  		 */
  		if (!(val & (1 << 14)) || !(val & (1 << 13))) {
@@ -6170,7 +6198,7 @@
  			/* If bit 15 is 0, then poll Dev1, Reg $C841 until it's
  			 * MSB (bit15) goes to 1 (indicating that the XAUI
  			 * workaround has completed), then continue on with
-@@ -6728,7 +6733,7 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
+@@ -6729,7 +6734,7 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
  						MDIO_PMA_REG_8073_XAUI_WA,
  						&val);
  				if (val & (1 << 15)) {
@@ -6179,7 +6207,7 @@
  						    "XAUI workaround has completed");
  					return ELINK_STATUS_OK;
  				}
-@@ -6738,7 +6743,7 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
+@@ -6739,7 +6744,7 @@ static elink_status_t elink_8073_xaui_wa(struct bnx2x_softc *sc,
  		}
  		DELAY(1000 * 3);
  	}
@@ -6188,7 +6216,7 @@
  	return ELINK_STATUS_ERROR;
  }
  
-@@ -6780,7 +6785,7 @@ static void elink_8073_set_pause_cl37(struct elink_params *params,
+@@ -6781,7 +6786,7 @@ static void elink_8073_set_pause_cl37(struct elink_params *params,
  	    MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) {
  		cl37_val |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH;
  	}
@@ -6197,7 +6225,7 @@
  
  	elink_cl45_write(sc, phy,
  			 MDIO_AN_DEVAD, MDIO_AN_REG_CL37_FC_LD, cl37_val);
-@@ -6811,7 +6816,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
+@@ -6812,7 +6817,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
  	struct bnx2x_softc *sc = params->sc;
  	uint16_t val = 0, tmp1;
  	uint8_t gpio_port;
@@ -6206,7 +6234,7 @@
  
  	if (CHIP_IS_E2(sc))
  		gpio_port = SC_PATH(sc);
-@@ -6832,12 +6837,12 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
+@@ -6833,12 +6838,12 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
  
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_RXSTAT, &tmp1);
  
@@ -6221,7 +6249,7 @@
  		/* 10G Rx/Tx and 1G Tx signal polarity swap */
  		elink_cl45_read(sc, phy,
  				MDIO_PMA_DEVAD,
-@@ -6859,11 +6864,11 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
+@@ -6860,11 +6865,11 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
  				MDIO_AN_DEVAD, MDIO_AN_REG_8073_BAM, &val);
  		elink_cl45_write(sc, phy,
  				 MDIO_AN_DEVAD, MDIO_AN_REG_8073_BAM, val | 1);
@@ -6235,7 +6263,7 @@
  		return ELINK_STATUS_OK;
  	} else {
  		elink_cl45_write(sc, phy,
-@@ -6889,7 +6894,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
+@@ -6890,7 +6895,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
  		    (PORT_HW_CFG_SPEED_CAPABILITY_D0_1G |
  		     PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G))
  			val |= (1 << 5);
@@ -6244,7 +6272,7 @@
  	}
  
  	elink_cl45_write(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_ADV, val);
-@@ -6903,13 +6908,13 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
+@@ -6904,13 +6909,13 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
  		elink_cl45_read(sc, phy,
  				MDIO_PMA_DEVAD, MDIO_PMA_REG_8073_CHIP_REV,
  				&phy_ver);
@@ -6260,7 +6288,7 @@
  		tmp1 &= 0xfffe;
  	}
  
-@@ -6943,7 +6948,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
+@@ -6944,7 +6949,7 @@ static uint8_t elink_8073_config_init(struct elink_phy *phy,
  	/* Restart autoneg */
  	DELAY(1000 * 500);
  	elink_cl45_write(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_CTRL, 0x1200);
@@ -6269,7 +6297,7 @@
  		    ((val & (1 << 5)) > 0), ((val & (1 << 7)) > 0));
  	return ELINK_STATUS_OK;
  }
-@@ -6960,12 +6965,12 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
+@@ -6961,12 +6966,12 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
  
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val1);
  
@@ -6284,7 +6312,7 @@
  	/* Clear MSG-OUT */
  	elink_cl45_read(sc, phy,
  			MDIO_PMA_DEVAD, MDIO_PMA_REG_M8051_MSGOUT_REG, &val1);
-@@ -6973,16 +6978,16 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
+@@ -6974,16 +6979,16 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
  	/* Check the LASI */
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_RXSTAT, &val2);
  
@@ -6304,7 +6332,7 @@
  
  	if (link_up && ((phy->req_line_speed != ELINK_SPEED_10000))) {
  		if (elink_8073_xaui_wa(sc, phy) != 0)
-@@ -6996,7 +7001,7 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
+@@ -6997,7 +7002,7 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
  	/* Check the link status on 1.1.2 */
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_STATUS, &val2);
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_STATUS, &val1);
@@ -6313,7 +6341,7 @@
  		    "an_link_status=0x%x", val2, val1, an1000_status);
  
  	link_up = (((val1 & 4) == 4) || (an1000_status & (1 << 1)));
-@@ -7022,21 +7027,21 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
+@@ -7023,21 +7028,21 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
  	if ((link_status & (1 << 2)) && (!(link_status & (1 << 15)))) {
  		link_up = 1;
  		vars->line_speed = ELINK_SPEED_10000;
@@ -6339,7 +6367,7 @@
  			    params->port);
  	}
  
-@@ -7051,7 +7056,7 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
+@@ -7052,7 +7057,7 @@ static uint8_t elink_8073_read_status(struct elink_phy *phy,
  			 * when it`s in 10G mode.
  			 */
  			if (vars->line_speed == ELINK_SPEED_1000) {
@@ -6348,7 +6376,7 @@
  					    "the 8073");
  				val1 |= (1 << 3);
  			} else
-@@ -7090,7 +7095,7 @@ static void elink_8073_link_reset(__rte_unused struct elink_phy *phy,
+@@ -7091,7 +7096,7 @@ static void elink_8073_link_reset(__rte_unused struct elink_phy *phy,
  		gpio_port = SC_PATH(sc);
  	else
  		gpio_port = params->port;
@@ -6357,7 +6385,7 @@
  		    gpio_port);
  	elink_cb_gpio_write(sc, MISC_REGISTERS_GPIO_2,
  			    MISC_REGISTERS_GPIO_OUTPUT_LOW, gpio_port);
-@@ -7105,7 +7110,7 @@ static uint8_t elink_8705_config_init(struct elink_phy *phy,
+@@ -7106,7 +7111,7 @@ static uint8_t elink_8705_config_init(struct elink_phy *phy,
  					     *vars)
  {
  	struct bnx2x_softc *sc = params->sc;
@@ -6366,7 +6394,7 @@
  	/* Restore normal power mode */
  	elink_cb_gpio_write(sc, MISC_REGISTERS_GPIO_2,
  			    MISC_REGISTERS_GPIO_OUTPUT_HIGH, params->port);
-@@ -7133,21 +7138,21 @@ static uint8_t elink_8705_read_status(struct elink_phy *phy,
+@@ -7134,21 +7139,21 @@ static uint8_t elink_8705_read_status(struct elink_phy *phy,
  	uint8_t link_up = 0;
  	uint16_t val1, rx_sd;
  	struct bnx2x_softc *sc = params->sc;
@@ -6392,7 +6420,7 @@
  	link_up = ((rx_sd & 0x1) && (val1 & (1 << 9))
  		   && ((val1 & (1 << 8)) == 0));
  	if (link_up) {
-@@ -7171,13 +7176,13 @@ static void elink_set_disable_pmd_transmit(struct elink_params *params,
+@@ -7172,13 +7177,13 @@ static void elink_set_disable_pmd_transmit(struct elink_params *params,
  	if (pmd_dis) {
  		if (params->feature_config_flags &
  		    ELINK_FEATURE_CONFIG_BC_SUPPORTS_SFP_TX_DISABLED) {
@@ -6409,7 +6437,7 @@
  	}
  	elink_cl45_write(sc, phy,
  			 MDIO_PMA_DEVAD, MDIO_PMA_REG_TX_DISABLE, pmd_dis);
-@@ -7211,7 +7216,7 @@ static void elink_sfp_e1e2_set_transmitter(struct elink_params *params,
+@@ -7212,7 +7217,7 @@ static void elink_sfp_e1e2_set_transmitter(struct elink_params *params,
  			    offsetof(struct shmem_region,
  				     dev_info.port_hw_config[port].sfp_ctrl)) &
  	    PORT_HW_CFG_TX_LASER_MASK;
@@ -6418,7 +6446,7 @@
  		    "mode = %x", tx_en, port, tx_en_mode);
  	switch (tx_en_mode) {
  	case PORT_HW_CFG_TX_LASER_MDIO:
-@@ -7247,7 +7252,8 @@ static void elink_sfp_e1e2_set_transmitter(struct elink_params *params,
+@@ -7248,7 +7253,8 @@ static void elink_sfp_e1e2_set_transmitter(struct elink_params *params,
  			break;
  		}
  	default:
@@ -6428,7 +6456,7 @@
  		break;
  	}
  }
-@@ -7256,7 +7262,7 @@ static void elink_sfp_set_transmitter(struct elink_params *params,
+@@ -7257,7 +7263,7 @@ static void elink_sfp_set_transmitter(struct elink_params *params,
  				      struct elink_phy *phy, uint8_t tx_en)
  {
  	struct bnx2x_softc *sc = params->sc;
@@ -6437,7 +6465,7 @@
  	if (CHIP_IS_E3(sc))
  		elink_sfp_e3_set_transmitter(params, phy, tx_en);
  	else
-@@ -7277,7 +7283,7 @@ static elink_status_t elink_8726_read_sfp_module_eeprom(struct elink_phy *phy,
+@@ -7278,7 +7284,7 @@ static elink_status_t elink_8726_read_sfp_module_eeprom(struct elink_phy *phy,
  	uint16_t val = 0;
  	uint16_t i;
  	if (byte_cnt > ELINK_SFP_EEPROM_PAGE_SIZE) {
@@ -6446,7 +6474,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  	/* Set the read command byte count */
-@@ -7308,7 +7314,7 @@ static elink_status_t elink_8726_read_sfp_module_eeprom(struct elink_phy *phy,
+@@ -7309,7 +7315,7 @@ static elink_status_t elink_8726_read_sfp_module_eeprom(struct elink_phy *phy,
  
  	if ((val & MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK) !=
  	    MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_COMPLETE) {
@@ -6455,7 +6483,7 @@
  			    "Got bad status 0x%x when reading from SFP+ EEPROM",
  			    (val & MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK));
  		return ELINK_STATUS_ERROR;
-@@ -7349,7 +7355,7 @@ static void elink_warpcore_power_module(struct elink_params *params,
+@@ -7350,7 +7356,7 @@ static void elink_warpcore_power_module(struct elink_params *params,
  
  	if (pin_cfg == PIN_CFG_NA)
  		return;
@@ -6464,7 +6492,7 @@
  		    power, pin_cfg);
  	/* Low ==> corresponding SFP+ module is powered
  	 * high ==> the SFP+ module is powered down
-@@ -7374,7 +7380,7 @@ static elink_status_t elink_warpcore_read_sfp_module_eeprom(__rte_unused struct
+@@ -7375,7 +7381,7 @@ static elink_status_t elink_warpcore_read_sfp_module_eeprom(__rte_unused struct
  	struct bnx2x_softc *sc = params->sc;
  
  	if (byte_cnt > ELINK_SFP_EEPROM_PAGE_SIZE) {
@@ -6473,7 +6501,7 @@
  			    "Reading from eeprom is limited to 16 bytes");
  		return ELINK_STATUS_ERROR;
  	}
-@@ -7416,7 +7422,7 @@ static elink_status_t elink_8727_read_sfp_module_eeprom(struct elink_phy *phy,
+@@ -7417,7 +7423,7 @@ static elink_status_t elink_8727_read_sfp_module_eeprom(struct elink_phy *phy,
  	uint16_t val, i;
  
  	if (byte_cnt > ELINK_SFP_EEPROM_PAGE_SIZE) {
@@ -6482,7 +6510,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  
-@@ -7470,7 +7476,7 @@ static elink_status_t elink_8727_read_sfp_module_eeprom(struct elink_phy *phy,
+@@ -7471,7 +7477,7 @@ static elink_status_t elink_8727_read_sfp_module_eeprom(struct elink_phy *phy,
  
  	if ((val & MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK) !=
  	    MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_COMPLETE) {
@@ -6491,7 +6519,7 @@
  			    "Got bad status 0x%x when reading from SFP+ EEPROM",
  			    (val & MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK));
  		return ELINK_STATUS_TIMEOUT;
-@@ -7511,7 +7517,8 @@ static elink_status_t elink_read_sfp_module_eeprom(struct elink_phy *phy,
+@@ -7512,7 +7518,8 @@ static elink_status_t elink_read_sfp_module_eeprom(struct elink_phy *phy,
  	read_sfp_module_eeprom_func_p read_func;
  
  	if ((dev_addr != 0xa0) && (dev_addr != 0xa2)) {
@@ -6501,7 +6529,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  
-@@ -7557,7 +7564,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7558,7 +7565,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  					 ELINK_I2C_DEV_ADDR_A0,
  					 ELINK_SFP_EEPROM_CON_TYPE_ADDR,
  					 2, (uint8_t *) val) != 0) {
@@ -6510,7 +6538,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  
-@@ -7576,7 +7583,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7577,7 +7584,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  							 1,
  							 &copper_module_type) !=
  			    0) {
@@ -6519,7 +6547,7 @@
  					    "Failed to read copper-cable-type"
  					    " from SFP+ EEPROM");
  				return ELINK_STATUS_ERROR;
-@@ -7584,7 +7591,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7585,7 +7592,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  
  			if (copper_module_type &
  			    ELINK_SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_ACTIVE) {
@@ -6528,7 +6556,7 @@
  					    "Active Copper cable detected");
  				if (phy->type ==
  				    PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT)
-@@ -7594,11 +7601,11 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7595,11 +7602,11 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  			} else if (copper_module_type &
  				   ELINK_SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_PASSIVE)
  			{
@@ -6542,7 +6570,7 @@
  					    "Unknown copper-cable-type 0x%x !!!",
  					    copper_module_type);
  				return ELINK_STATUS_ERROR;
-@@ -7611,7 +7618,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7612,7 +7619,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  		if ((val[1] & (ELINK_SFP_EEPROM_COMP_CODE_SR_MASK |
  			       ELINK_SFP_EEPROM_COMP_CODE_LR_MASK |
  			       ELINK_SFP_EEPROM_COMP_CODE_LRM_MASK)) == 0) {
@@ -6551,7 +6579,7 @@
  			gport = params->port;
  			phy->media_type = ELINK_ETH_PHY_SFP_1G_FIBER;
  			if (phy->req_line_speed != ELINK_SPEED_1000) {
-@@ -7627,7 +7634,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7628,7 +7635,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  			}
  		} else {
  			int idx, cfg_idx = 0;
@@ -6560,7 +6588,7 @@
  			for (idx = ELINK_INT_PHY; idx < ELINK_MAX_PHYS; idx++) {
  				if (params->phy[idx].type == phy->type) {
  					cfg_idx = ELINK_LINK_CONFIG_IDX(idx);
-@@ -7639,7 +7646,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7640,7 +7647,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  		}
  		break;
  	default:
@@ -6569,7 +6597,7 @@
  			    val[0]);
  		return ELINK_STATUS_ERROR;
  	}
-@@ -7669,7 +7676,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7670,7 +7677,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  						 ELINK_SFP_EEPROM_OPTIONS_ADDR,
  						 ELINK_SFP_EEPROM_OPTIONS_SIZE,
  						 options) != 0) {
@@ -6578,7 +6606,7 @@
  				    "Failed to read Option field from module EEPROM");
  			return ELINK_STATUS_ERROR;
  		}
-@@ -7678,7 +7685,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
+@@ -7679,7 +7686,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  		else
  			*edc_mode = ELINK_EDC_MODE_LIMITING;
  	}
@@ -6587,7 +6615,7 @@
  	return ELINK_STATUS_OK;
  }
  
-@@ -7700,7 +7707,7 @@ static elink_status_t elink_verify_sfp_module(struct elink_phy *phy,
+@@ -7701,7 +7708,7 @@ static elink_status_t elink_verify_sfp_module(struct elink_phy *phy,
  			      config));
  	if ((val & PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_MASK) ==
  	    PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_NO_ENFORCEMENT) {
@@ -6596,7 +6624,7 @@
  		return ELINK_STATUS_OK;
  	}
  
-@@ -7712,21 +7719,21 @@ static elink_status_t elink_verify_sfp_module(struct elink_phy *phy,
+@@ -7713,21 +7720,21 @@ static elink_status_t elink_verify_sfp_module(struct elink_phy *phy,
  		   ELINK_FEATURE_CONFIG_BC_SUPPORTS_OPT_MDL_VRFY) {
  		/* Use first phy request only in case of non-dual media */
  		if (ELINK_DUAL_MEDIA(params)) {
@@ -6621,7 +6649,7 @@
  		return ELINK_STATUS_OK;
  	}
  
-@@ -7782,7 +7789,7 @@ static elink_status_t elink_wait_for_sfp_module_initialized(struct elink_phy
+@@ -7783,7 +7790,7 @@ static elink_status_t elink_wait_for_sfp_module_initialized(struct elink_phy
  							  ELINK_I2C_DEV_ADDR_A0,
  							  1, 1, &val);
  		if (rc == 0) {
@@ -6630,7 +6658,7 @@
  				    "SFP+ module initialization took %d ms",
  				    timeout * 5);
  			return ELINK_STATUS_OK;
-@@ -7833,17 +7840,18 @@ static elink_status_t elink_8726_set_limiting_mode(struct bnx2x_softc *sc,
+@@ -7834,17 +7841,18 @@ static elink_status_t elink_8726_set_limiting_mode(struct bnx2x_softc *sc,
  	elink_cl45_read(sc, phy,
  			MDIO_PMA_DEVAD,
  			MDIO_PMA_REG_ROM_VER2, &cur_limiting_mode);
@@ -6652,7 +6680,7 @@
  
  		/* Changing to LRM mode takes quite few seconds. So do it only
  		 * if current mode is limiting (default is LRM)
-@@ -7933,7 +7941,7 @@ static void elink_8727_specific_func(struct elink_phy *phy,
+@@ -7934,7 +7942,7 @@ static void elink_8727_specific_func(struct elink_phy *phy,
  				 val);
  		break;
  	default:
@@ -6661,7 +6689,7 @@
  			    action);
  		return;
  	}
-@@ -7961,14 +7969,14 @@ static void elink_set_e1e2_module_fault_led(struct elink_params *params,
+@@ -7962,14 +7970,14 @@ static void elink_set_e1e2_module_fault_led(struct elink_params *params,
  			uint8_t gpio_port = elink_get_gpio_port(params);
  			uint16_t gpio_pin = fault_led_gpio -
  			    PORT_HW_CFG_FAULT_MODULE_LED_GPIO0;
@@ -6678,7 +6706,7 @@
  			    fault_led_gpio);
  	}
  }
-@@ -7984,7 +7992,7 @@ static void elink_set_e3_module_fault_led(struct elink_params *params,
+@@ -7985,7 +7993,7 @@ static void elink_set_e3_module_fault_led(struct elink_params *params,
  				   dev_info.port_hw_config[port].e3_sfp_ctrl)) &
  		   PORT_HW_CFG_E3_FAULT_MDL_LED_MASK) >>
  	    PORT_HW_CFG_E3_FAULT_MDL_LED_SHIFT;
@@ -6687,7 +6715,7 @@
  		    gpio_mode, pin_cfg);
  	elink_set_cfg_pin(sc, pin_cfg, gpio_mode);
  }
-@@ -7993,7 +8001,8 @@ static void elink_set_sfp_module_fault_led(struct elink_params *params,
+@@ -7994,7 +8002,8 @@ static void elink_set_sfp_module_fault_led(struct elink_params *params,
  					   uint8_t gpio_mode)
  {
  	struct bnx2x_softc *sc = params->sc;
@@ -6697,7 +6725,7 @@
  	if (CHIP_IS_E3(sc)) {
  		/* Low ==> if SFP+ module is supported otherwise
  		 * High ==> if SFP+ module is not on the approved vendor list
-@@ -8020,7 +8029,7 @@ static void elink_warpcore_hw_reset(__rte_unused struct elink_phy *phy,
+@@ -8021,7 +8030,7 @@ static void elink_warpcore_hw_reset(__rte_unused struct elink_phy *phy,
  static void elink_power_sfp_module(struct elink_params *params,
  				   struct elink_phy *phy, uint8_t power)
  {
@@ -6706,7 +6734,7 @@
  
  	switch (phy->type) {
  	case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BNX2X8727:
-@@ -8106,16 +8115,16 @@ static elink_status_t elink_sfp_module_detection(struct elink_phy *phy,
+@@ -8107,16 +8116,16 @@ static elink_status_t elink_sfp_module_detection(struct elink_phy *phy,
  				       config));
  	/* Enabled transmitter by default */
  	elink_sfp_set_transmitter(params, phy, 1);
@@ -6726,7 +6754,7 @@
  		rc = ELINK_STATUS_ERROR;
  		/* Turn on fault module-detected led */
  		elink_set_sfp_module_fault_led(params,
-@@ -8124,7 +8133,7 @@ static elink_status_t elink_sfp_module_detection(struct elink_phy *phy,
+@@ -8125,7 +8134,7 @@ static elink_status_t elink_sfp_module_detection(struct elink_phy *phy,
  		/* Check if need to power down the SFP+ module */
  		if ((val & PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_MASK) ==
  		    PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_POWER_DOWN) {
@@ -6735,7 +6763,7 @@
  			elink_power_sfp_module(params, phy, 0);
  			return rc;
  		}
-@@ -8165,7 +8174,7 @@ void elink_handle_module_detect_int(struct elink_params *params)
+@@ -8166,7 +8175,7 @@ void elink_handle_module_detect_int(struct elink_params *params)
  	if (elink_get_mod_abs_int_cfg(sc, params->shmem_base,
  				      params->port, &gpio_num, &gpio_port) ==
  	    ELINK_STATUS_ERROR) {
@@ -6744,7 +6772,7 @@
  		return;
  	}
  
-@@ -8205,7 +8214,7 @@ void elink_handle_module_detect_int(struct elink_params *params)
+@@ -8206,7 +8215,7 @@ void elink_handle_module_detect_int(struct elink_params *params)
  				}
  			}
  		} else {
@@ -6753,7 +6781,7 @@
  		}
  	} else {
  		elink_cb_gpio_int_write(sc, gpio_num,
-@@ -8250,7 +8259,7 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
+@@ -8251,7 +8260,7 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
  	uint8_t link_up = 0;
  	uint16_t val1, val2, rx_sd, pcs_status;
  	struct bnx2x_softc *sc = params->sc;
@@ -6762,7 +6790,7 @@
  	/* Clear RX Alarm */
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_RXSTAT, &val2);
  
-@@ -8260,7 +8269,8 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
+@@ -8261,7 +8270,8 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
  	/* Clear LASI indication */
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val1);
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val2);
@@ -6772,7 +6800,7 @@
  
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_RX_SD, &rx_sd);
  	elink_cl45_read(sc, phy,
-@@ -8268,7 +8278,7 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
+@@ -8269,7 +8279,7 @@ static uint8_t elink_8706_8726_read_status(struct elink_phy *phy,
  	elink_cl45_read(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_LINK_STATUS, &val2);
  	elink_cl45_read(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_LINK_STATUS, &val2);
  
@@ -6781,7 +6809,7 @@
  		    " link_status 0x%x", rx_sd, pcs_status, val2);
  	/* Link is up if both bit 0 of pmd_rx_sd and bit 0 of pcs_status
  	 * are set, or if the autoneg bit 1 is set
-@@ -8322,7 +8332,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
+@@ -8323,7 +8333,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
  			break;
  		DELAY(1000 * 10);
  	}
@@ -6790,7 +6818,7 @@
  	if ((params->feature_config_flags &
  	     ELINK_FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED)) {
  		uint8_t i;
-@@ -8336,14 +8346,14 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
+@@ -8337,14 +8347,14 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
  			val &= ~0x7;
  			/* Set control bits according to configuration */
  			val |= (phy->rx_preemphasis[i] & 0x7);
@@ -6807,7 +6835,7 @@
  
  		elink_cl45_write(sc, phy,
  				 MDIO_PMA_DEVAD,
-@@ -8357,7 +8367,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
+@@ -8358,7 +8368,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
  		/* Force 1Gbps using autoneg with 1G advertisement */
  
  		/* Allow CL37 through CL73 */
@@ -6816,7 +6844,7 @@
  		elink_cl45_write(sc, phy,
  				 MDIO_AN_DEVAD, MDIO_AN_REG_CL37_CL73, 0x040c);
  
-@@ -8392,7 +8402,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
+@@ -8393,7 +8403,7 @@ static uint8_t elink_8706_config_init(struct elink_phy *phy,
  	& PORT_HW_CFG_TX_LASER_MASK;
  
  	if (tx_en_mode == PORT_HW_CFG_TX_LASER_GPIO0) {
@@ -6825,7 +6853,7 @@
  		elink_cl45_read(sc, phy,
  				MDIO_PMA_DEVAD, MDIO_PMA_REG_DIGITAL_CTRL,
  				&tmp1);
-@@ -8419,7 +8429,7 @@ static void elink_8726_config_loopback(struct elink_phy *phy,
+@@ -8420,7 +8430,7 @@ static void elink_8726_config_loopback(struct elink_phy *phy,
  				       struct elink_params *params)
  {
  	struct bnx2x_softc *sc = params->sc;
@@ -6834,7 +6862,7 @@
  	elink_cl45_write(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 0x0001);
  }
  
-@@ -8471,7 +8481,7 @@ static uint8_t elink_8726_read_status(struct elink_phy *phy,
+@@ -8472,7 +8482,7 @@ static uint8_t elink_8726_read_status(struct elink_phy *phy,
  				MDIO_PMA_DEVAD, MDIO_PMA_REG_PHY_IDENTIFIER,
  				&val1);
  		if (val1 & (1 << 15)) {
@@ -6843,7 +6871,7 @@
  			link_up = 0;
  			vars->line_speed = 0;
  		}
-@@ -8484,7 +8494,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
+@@ -8485,7 +8495,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
  				      struct elink_vars *vars)
  {
  	struct bnx2x_softc *sc = params->sc;
@@ -6852,7 +6880,7 @@
  
  	elink_cl45_write(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 1 << 15);
  	elink_wait_reset_complete(sc, phy, params);
-@@ -8499,7 +8509,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
+@@ -8500,7 +8510,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
  	elink_sfp_module_detection(phy, params);
  
  	if (phy->req_line_speed == ELINK_SPEED_1000) {
@@ -6861,7 +6889,7 @@
  		elink_cl45_write(sc, phy,
  				 MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 0x40);
  		elink_cl45_write(sc, phy,
-@@ -8514,7 +8524,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
+@@ -8515,7 +8525,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
  		   ((phy->speed_cap_mask &
  		     PORT_HW_CFG_SPEED_CAPABILITY_D0_10G) !=
  		    PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) {
@@ -6870,7 +6898,7 @@
  		/* Set Flow control */
  		elink_ext_phy_set_pause(params, phy, vars);
  		elink_cl45_write(sc, phy, MDIO_AN_DEVAD, MDIO_AN_REG_ADV, 0x20);
-@@ -8542,7 +8552,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
+@@ -8543,7 +8553,7 @@ static uint8_t elink_8726_config_init(struct elink_phy *phy,
  	/* Set TX PreEmphasis if needed */
  	if ((params->feature_config_flags &
  	     ELINK_FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED)) {
@@ -6879,7 +6907,7 @@
  			    "Setting TX_CTRL1 0x%x, TX_CTRL2 0x%x",
  			    phy->tx_preemphasis[0], phy->tx_preemphasis[1]);
  		elink_cl45_write(sc, phy,
-@@ -8564,7 +8574,7 @@ static void elink_8726_link_reset(struct elink_phy *phy,
+@@ -8565,7 +8575,7 @@ static void elink_8726_link_reset(struct elink_phy *phy,
  				  struct elink_params *params)
  {
  	struct bnx2x_softc *sc = params->sc;
@@ -6888,7 +6916,7 @@
  	/* Set serial boot control for external load */
  	elink_cl45_write(sc, phy,
  			 MDIO_PMA_DEVAD, MDIO_PMA_REG_GEN_CTRL, 0x0001);
-@@ -8637,14 +8647,14 @@ static void elink_8727_config_speed(struct elink_phy *phy,
+@@ -8638,14 +8648,14 @@ static void elink_8727_config_speed(struct elink_phy *phy,
  	/* Set option 1G speed */
  	if ((phy->req_line_speed == ELINK_SPEED_1000) ||
  	    (phy->media_type == ELINK_ETH_PHY_SFP_1G_FIBER)) {
@@ -6905,7 +6933,7 @@
  		/* Power down the XAUI until link is up in case of dual-media
  		 * and 1G
  		 */
-@@ -8664,7 +8674,7 @@ static void elink_8727_config_speed(struct elink_phy *phy,
+@@ -8665,7 +8675,7 @@ static void elink_8727_config_speed(struct elink_phy *phy,
  		     PORT_HW_CFG_SPEED_CAPABILITY_D0_10G) !=
  		    PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) {
  
@@ -6914,7 +6942,7 @@
  		elink_cl45_write(sc, phy,
  				 MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL, 0);
  		elink_cl45_write(sc, phy,
-@@ -8698,7 +8708,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
+@@ -8699,7 +8709,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
  
  	elink_wait_reset_complete(sc, phy, params);
  
@@ -6923,7 +6951,7 @@
  
  	elink_8727_specific_func(phy, params, ELINK_PHY_INIT);
  	/* Initially configure MOD_ABS to interrupt when module is
-@@ -8731,7 +8741,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
+@@ -8732,7 +8742,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
  	/* Set TX PreEmphasis if needed */
  	if ((params->feature_config_flags &
  	     ELINK_FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED)) {
@@ -6932,7 +6960,7 @@
  			    phy->tx_preemphasis[0], phy->tx_preemphasis[1]);
  		elink_cl45_write(sc, phy,
  				 MDIO_PMA_DEVAD, MDIO_PMA_REG_8727_TX_CTRL1,
-@@ -8753,7 +8763,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
+@@ -8754,7 +8764,7 @@ static uint8_t elink_8727_config_init(struct elink_phy *phy,
  
  	if (tx_en_mode == PORT_HW_CFG_TX_LASER_GPIO0) {
  
@@ -6941,7 +6969,7 @@
  		elink_cl45_read(sc, phy,
  				MDIO_PMA_DEVAD, MDIO_PMA_REG_8727_OPT_CFG_REG,
  				&tmp2);
-@@ -8785,7 +8795,7 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
+@@ -8786,7 +8796,7 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
  	if (mod_abs & (1 << 8)) {
  
  		/* Module is absent */
@@ -6950,7 +6978,7 @@
  		phy->media_type = ELINK_ETH_PHY_NOT_PRESENT;
  		/* 1. Set mod_abs to detect next module
  		 *    presence event
-@@ -8810,7 +8820,7 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
+@@ -8811,7 +8821,7 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
  
  	} else {
  		/* Module is present */
@@ -6959,7 +6987,7 @@
  		/* First disable transmitter, and if the module is ok, the
  		 * module_detection will enable it
  		 * 1. Set mod_abs to detect next module absent event ( bit 8)
-@@ -8841,14 +8851,14 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
+@@ -8842,14 +8852,14 @@ static void elink_8727_handle_mod_abs(struct elink_phy *phy,
  		if (elink_wait_for_sfp_module_initialized(phy, params) == 0) {
  			elink_sfp_module_detection(phy, params);
  		} else {
@@ -6976,7 +7004,7 @@
  	/* No need to check link status in case of module plugged in/out */
  }
  
-@@ -8871,14 +8881,14 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
+@@ -8872,14 +8882,14 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
  	elink_cl45_read(sc, phy,
  			MDIO_PMA_DEVAD, MDIO_PMA_LASI_RXSTAT, &rx_alarm_status);
  	vars->line_speed = 0;
@@ -6993,7 +7021,7 @@
  
  	/* Clear MSG-OUT */
  	elink_cl45_read(sc, phy,
-@@ -8896,7 +8906,7 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
+@@ -8897,7 +8907,7 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
  		if ((val1 & (1 << 8)) == 0) {
  			if (!CHIP_IS_E1x(sc))
  				oc_port = SC_PATH(sc) + (params->port << 1);
@@ -7002,7 +7030,7 @@
  				    "8727 Power fault has been detected on port %d",
  				    oc_port);
  			elink_cb_event_log(sc, ELINK_LOG_ID_OVER_CURRENT, oc_port);	//"Error: Power fault on Port %d has "
-@@ -8939,10 +8949,10 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
+@@ -8940,10 +8950,10 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
  	}
  
  	if (!(phy->flags & ELINK_FLAGS_SFP_NOT_APPROVED)) {
@@ -7015,7 +7043,7 @@
  		return 0;
  	}
  
-@@ -8956,16 +8966,16 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
+@@ -8957,16 +8967,16 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
  	if ((link_status & (1 << 2)) && (!(link_status & (1 << 15)))) {
  		link_up = 1;
  		vars->line_speed = ELINK_SPEED_10000;
@@ -7035,7 +7063,7 @@
  			    params->port);
  	}
  
-@@ -8985,7 +8995,7 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
+@@ -8986,7 +8996,7 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
  	if (link_up) {
  		elink_ext_phy_resolve_fc(phy, params, vars);
  		vars->duplex = DUPLEX_FULL;
@@ -7044,7 +7072,7 @@
  	}
  
  	if ((ELINK_DUAL_MEDIA(params)) &&
-@@ -9057,7 +9067,7 @@ static void elink_save_848xx_spirom_version(struct elink_phy *phy,
+@@ -9058,7 +9068,7 @@ static void elink_save_848xx_spirom_version(struct elink_phy *phy,
  			DELAY(5);
  		}
  		if (cnt == 100) {
@@ -7053,7 +7081,7 @@
  				    "phy fw version(1)");
  			elink_save_spirom_version(sc, port, 0, phy->ver_addr);
  			return;
-@@ -9074,7 +9084,7 @@ static void elink_save_848xx_spirom_version(struct elink_phy *phy,
+@@ -9075,7 +9085,7 @@ static void elink_save_848xx_spirom_version(struct elink_phy *phy,
  			DELAY(5);
  		}
  		if (cnt == 100) {
@@ -7062,7 +7090,7 @@
  				    "version(2)");
  			elink_save_spirom_version(sc, port, 0, phy->ver_addr);
  			return;
-@@ -9187,7 +9197,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
+@@ -9188,7 +9198,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
  		autoneg_val |= (1 << 9 | 1 << 12);
  		if (phy->req_duplex == DUPLEX_FULL)
  			an_1000_val |= (1 << 9);
@@ -7071,7 +7099,7 @@
  	} else
  		an_1000_val &= ~((1 << 8) | (1 << 9));
  
-@@ -9203,7 +9213,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
+@@ -9204,7 +9214,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
  			 */
  			autoneg_val |= (1 << 9 | 1 << 12);
  			an_10_100_val |= (1 << 8);
@@ -7080,7 +7108,7 @@
  		}
  
  		if (phy->speed_cap_mask &
-@@ -9212,7 +9222,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
+@@ -9213,7 +9223,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
  			 */
  			autoneg_val |= (1 << 9 | 1 << 12);
  			an_10_100_val |= (1 << 7);
@@ -7089,7 +7117,7 @@
  		}
  
  		if ((phy->speed_cap_mask &
-@@ -9220,7 +9230,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
+@@ -9221,7 +9231,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
  		    (phy->supported & ELINK_SUPPORTED_10baseT_Full)) {
  			an_10_100_val |= (1 << 6);
  			autoneg_val |= (1 << 9 | 1 << 12);
@@ -7098,7 +7126,7 @@
  		}
  
  		if ((phy->speed_cap_mask &
-@@ -9228,7 +9238,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
+@@ -9229,7 +9239,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
  		    (phy->supported & ELINK_SUPPORTED_10baseT_Half)) {
  			an_10_100_val |= (1 << 5);
  			autoneg_val |= (1 << 9 | 1 << 12);
@@ -7107,7 +7135,7 @@
  		}
  	}
  
-@@ -9243,7 +9253,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
+@@ -9244,7 +9254,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
  				 (1 << 15 | 1 << 9 | 7 << 0));
  		/* The PHY needs this set even for forced link. */
  		an_10_100_val |= (1 << 8) | (1 << 7);
@@ -7116,7 +7144,7 @@
  	}
  	if ((phy->req_line_speed == ELINK_SPEED_10) &&
  	    (phy->supported &
-@@ -9252,7 +9262,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
+@@ -9253,7 +9263,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
  		elink_cl45_write(sc, phy,
  				 MDIO_AN_DEVAD, MDIO_AN_REG_8481_AUX_CTRL,
  				 (1 << 15 | 1 << 9 | 7 << 0));
@@ -7125,7 +7153,7 @@
  	}
  
  	elink_cl45_write(sc, phy,
-@@ -9276,7 +9286,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
+@@ -9277,7 +9287,7 @@ static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy,
  	     (phy->speed_cap_mask &
  	      PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) ||
  	    (phy->req_line_speed == ELINK_SPEED_10000)) {
@@ -7134,7 +7162,7 @@
  		/* Restart autoneg for 10G */
  
  		elink_cl45_read_or_write(sc, phy,
-@@ -9332,7 +9342,7 @@ static elink_status_t elink_84833_cmd_hdlr(struct elink_phy *phy,
+@@ -9333,7 +9343,7 @@ static elink_status_t elink_84833_cmd_hdlr(struct elink_phy *phy,
  		DELAY(1000 * 1);
  	}
  	if (idx >= PHY84833_CMDHDLR_WAIT) {
@@ -7143,7 +7171,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  
-@@ -9354,7 +9364,7 @@ static elink_status_t elink_84833_cmd_hdlr(struct elink_phy *phy,
+@@ -9355,7 +9365,7 @@ static elink_status_t elink_84833_cmd_hdlr(struct elink_phy *phy,
  	}
  	if ((idx >= PHY84833_CMDHDLR_WAIT) ||
  	    (val == PHY84833_STATUS_CMD_COMPLETE_ERROR)) {
@@ -7152,7 +7180,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  	/* Gather returning data */
-@@ -9396,7 +9406,7 @@ static elink_status_t elink_84833_pair_swap_cfg(struct elink_phy *phy,
+@@ -9397,7 +9407,7 @@ static elink_status_t elink_84833_pair_swap_cfg(struct elink_phy *phy,
  				      PHY84833_CMD_SET_PAIR_SWAP, data,
  				      PHY84833_CMDHDLR_MAX_ARGS);
  	if (status == ELINK_STATUS_OK) {
@@ -7161,7 +7189,7 @@
  	}
  
  	return status;
-@@ -9472,7 +9482,8 @@ static void elink_84833_hw_reset_phy(struct elink_phy *phy,
+@@ -9473,7 +9483,8 @@ static void elink_84833_hw_reset_phy(struct elink_phy *phy,
  	elink_cb_gpio_mult_write(sc, reset_gpios,
  				 MISC_REGISTERS_GPIO_OUTPUT_LOW);
  	DELAY(10);
@@ -7171,7 +7199,7 @@
  }
  
  static elink_status_t elink_8483x_disable_eee(struct elink_phy *phy,
-@@ -9482,13 +9493,13 @@ static elink_status_t elink_8483x_disable_eee(struct elink_phy *phy,
+@@ -9483,13 +9494,13 @@ static elink_status_t elink_8483x_disable_eee(struct elink_phy *phy,
  	elink_status_t rc;
  	uint16_t cmd_args = 0;
  
@@ -7187,7 +7215,7 @@
  		return rc;
  	}
  
-@@ -9505,7 +9516,7 @@ static elink_status_t elink_8483x_enable_eee(struct elink_phy *phy,
+@@ -9506,7 +9517,7 @@ static elink_status_t elink_8483x_enable_eee(struct elink_phy *phy,
  	rc = elink_84833_cmd_hdlr(phy, params,
  				  PHY84833_CMD_SET_EEE_MODE, &cmd_args, 1);
  	if (rc != ELINK_STATUS_OK) {
@@ -7196,7 +7224,7 @@
  		return rc;
  	}
  
-@@ -9598,7 +9609,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
+@@ -9599,7 +9610,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
  
  	elink_cl45_write(sc, phy, MDIO_CTL_DEVAD,
  			 MDIO_CTL_REG_84823_MEDIA, val);
@@ -7205,7 +7233,7 @@
  		    params->multi_phy_config, val);
  
  	if ((phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BNX2X84833) ||
-@@ -9614,7 +9625,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
+@@ -9615,7 +9626,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
  					  PHY84833_CMD_SET_EEE_MODE, cmd_args,
  					  PHY84833_CMDHDLR_MAX_ARGS);
  		if (rc != ELINK_STATUS_OK) {
@@ -7214,7 +7242,7 @@
  		}
  	}
  	if (initialize) {
-@@ -9651,7 +9662,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
+@@ -9652,7 +9663,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
  	    elink_eee_has_cap(params)) {
  		rc = elink_eee_initial_config(params, vars, SHMEM_EEE_10G_ADV);
  		if (rc != ELINK_STATUS_OK) {
@@ -7223,7 +7251,7 @@
  			elink_8483x_disable_eee(phy, params, vars);
  			return rc;
  		}
-@@ -9664,7 +9675,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
+@@ -9665,7 +9676,7 @@ static uint8_t elink_848x3_config_init(struct elink_phy *phy,
  		else
  			rc = elink_8483x_disable_eee(phy, params, vars);
  		if (rc != ELINK_STATUS_OK) {
@@ -7232,7 +7260,7 @@
  			return rc;
  		}
  	} else {
-@@ -9696,7 +9707,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
+@@ -9697,7 +9708,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
  	elink_cl45_read(sc, phy, MDIO_AN_DEVAD, 0xFFFA, &val1);
  	elink_cl45_read(sc, phy,
  			MDIO_PMA_DEVAD, MDIO_PMA_REG_8481_PMD_SIGNAL, &val2);
@@ -7241,7 +7269,7 @@
  
  	/* Check link 10G */
  	if (val2 & (1 << 11)) {
-@@ -9718,7 +9729,8 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
+@@ -9719,7 +9730,8 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
  				MDIO_AN_REG_8481_EXPANSION_REG_RD_RW,
  				&legacy_status);
  
@@ -7251,7 +7279,7 @@
  		link_up = ((legacy_status & (1 << 11)) == (1 << 11));
  		legacy_speed = (legacy_status & (3 << 9));
  		if (legacy_speed == (0 << 9))
-@@ -9748,7 +9760,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
+@@ -9749,7 +9761,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
  			else
  				vars->duplex = DUPLEX_HALF;
  
@@ -7260,7 +7288,7 @@
  				    "Link is up in %dMbps, is_duplex_full= %d",
  				    vars->line_speed,
  				    (vars->duplex == DUPLEX_FULL));
-@@ -9770,7 +9782,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
+@@ -9771,7 +9783,7 @@ static uint8_t elink_848xx_read_status(struct elink_phy *phy,
  		}
  	}
  	if (link_up) {
@@ -7269,7 +7297,7 @@
  			    vars->line_speed);
  		elink_ext_phy_resolve_fc(phy, params, vars);
  
-@@ -9887,7 +9899,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
+@@ -9888,7 +9900,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
  	switch (mode) {
  	case ELINK_LED_MODE_OFF:
  
@@ -7278,7 +7306,7 @@
  
  		if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) ==
  		    SHARED_HW_CFG_LED_EXTPHY1) {
-@@ -9917,7 +9929,8 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
+@@ -9918,7 +9930,8 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
  		break;
  	case ELINK_LED_MODE_FRONT_PANEL_OFF:
  
@@ -7288,7 +7316,7 @@
  
  		if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) ==
  		    SHARED_HW_CFG_LED_EXTPHY1) {
-@@ -9967,7 +9980,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
+@@ -9968,7 +9981,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
  		break;
  	case ELINK_LED_MODE_ON:
  
@@ -7297,7 +7325,7 @@
  
  		if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) ==
  		    SHARED_HW_CFG_LED_EXTPHY1) {
-@@ -10027,7 +10040,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
+@@ -10028,7 +10041,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
  
  	case ELINK_LED_MODE_OPER:
  
@@ -7306,7 +7334,7 @@
  
  		if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) ==
  		    SHARED_HW_CFG_LED_EXTPHY1) {
-@@ -10042,7 +10055,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
+@@ -10043,7 +10056,7 @@ static void elink_848xx_set_link_led(struct elink_phy *phy,
  			      >>
  			      MDIO_PMA_REG_8481_LINK_SIGNAL_LED4_ENABLE_SHIFT))
  			{
@@ -7315,7 +7343,7 @@
  				elink_cl45_write(sc, phy,
  						 MDIO_PMA_DEVAD,
  						 MDIO_PMA_REG_8481_LINK_SIGNAL,
-@@ -10155,7 +10168,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
+@@ -10156,7 +10169,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
  	uint16_t autoneg_val, an_1000_val, an_10_100_val, fc_val, temp;
  	uint32_t cfg_pin;
  
@@ -7324,7 +7352,7 @@
  	DELAY(1000 * 1);
  
  	/* This works with E3 only, no need to check the chip
-@@ -10228,7 +10241,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
+@@ -10229,7 +10242,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
  		autoneg_val |= (1 << 9 | 1 << 12);
  		if (phy->req_duplex == DUPLEX_FULL)
  			an_1000_val |= (1 << 9);
@@ -7333,7 +7361,7 @@
  	} else
  		an_1000_val &= ~((1 << 8) | (1 << 9));
  
-@@ -10241,25 +10254,25 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
+@@ -10242,25 +10255,25 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
  		    PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF) {
  			an_10_100_val |= (1 << 5);
  			autoneg_val |= (1 << 9 | 1 << 12);
@@ -7363,7 +7391,7 @@
  		}
  	}
  
-@@ -10268,12 +10281,12 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
+@@ -10269,12 +10282,12 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
  		autoneg_val |= (1 << 13);
  		/* Enabled AUTO-MDIX when autoneg is disabled */
  		elink_cl22_write(sc, phy, 0x18, (1 << 15 | 1 << 9 | 7 << 0));
@@ -7378,7 +7406,7 @@
  	}
  
  	if ((phy->flags & ELINK_FLAGS_EEE) && elink_eee_has_cap(params)) {
-@@ -10288,7 +10301,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
+@@ -10289,7 +10302,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
  
  		rc = elink_eee_initial_config(params, vars, SHMEM_EEE_1G_ADV);
  		if (rc != ELINK_STATUS_OK) {
@@ -7387,7 +7415,7 @@
  			elink_eee_disable(phy, params, vars);
  		} else if ((params->eee_mode & ELINK_EEE_MODE_ADV_LPI) &&
  			   (phy->req_duplex == DUPLEX_FULL) &&
-@@ -10302,7 +10315,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
+@@ -10303,7 +10316,7 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
  			elink_eee_advertise(phy, params, vars,
  					    SHMEM_EEE_1G_ADV);
  		} else {
@@ -7396,7 +7424,7 @@
  			elink_eee_disable(phy, params, vars);
  		}
  	} else {
-@@ -10314,10 +10327,10 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
+@@ -10315,10 +10328,10 @@ static uint8_t elink_54618se_config_init(struct elink_phy *phy,
  			if (params->feature_config_flags &
  			    ELINK_FEATURE_CONFIG_AUTOGREEEN_ENABLED) {
  				temp = 6;
@@ -7409,7 +7437,7 @@
  			}
  			elink_cl45_write(sc, phy, MDIO_AN_DEVAD,
  					 MDIO_AN_REG_EEE_ADV, temp);
-@@ -10345,7 +10358,7 @@ static void elink_5461x_set_link_led(struct elink_phy *phy,
+@@ -10346,7 +10359,7 @@ static void elink_5461x_set_link_led(struct elink_phy *phy,
  	elink_cl22_read(sc, phy, MDIO_REG_GPHY_SHADOW, &temp);
  	temp &= 0xff00;
  
@@ -7418,7 +7446,7 @@
  	switch (mode) {
  	case ELINK_LED_MODE_FRONT_PANEL_OFF:
  	case ELINK_LED_MODE_OFF:
-@@ -10403,7 +10416,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
+@@ -10404,7 +10417,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
  
  	/* Get speed operation status */
  	elink_cl22_read(sc, phy, MDIO_REG_GPHY_AUX_STATUS, &legacy_status);
@@ -7427,7 +7455,7 @@
  
  	/* Read status to clear the PHY interrupt. */
  	elink_cl22_read(sc, phy, MDIO_REG_INTR_STATUS, &val);
-@@ -10435,7 +10448,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
+@@ -10436,7 +10449,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
  		} else		/* Should not happen */
  			vars->line_speed = 0;
  
@@ -7436,7 +7464,7 @@
  			    "Link is up in %dMbps, is_duplex_full= %d",
  			    vars->line_speed, (vars->duplex == DUPLEX_FULL));
  
-@@ -10449,7 +10462,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
+@@ -10450,7 +10463,7 @@ static uint8_t elink_54618se_read_status(struct elink_phy *phy,
  			vars->link_status |=
  			    LINK_STATUS_PARALLEL_DETECTION_USED;
  
@@ -7445,7 +7473,7 @@
  			    vars->line_speed);
  
  		elink_ext_phy_resolve_fc(phy, params, vars);
-@@ -10497,7 +10510,7 @@ static void elink_54618se_config_loopback(struct elink_phy *phy,
+@@ -10498,7 +10511,7 @@ static void elink_54618se_config_loopback(struct elink_phy *phy,
  	uint16_t val;
  	uint32_t umac_base = params->port ? GRCBASE_UMAC1 : GRCBASE_UMAC0;
  
@@ -7454,7 +7482,7 @@
  
  	/* Enable master/slave manual mmode and set to master */
  	/* mii write 9 [bits set 11 12] */
-@@ -10548,7 +10561,7 @@ static uint8_t elink_7101_config_init(struct elink_phy *phy,
+@@ -10549,7 +10562,7 @@ static uint8_t elink_7101_config_init(struct elink_phy *phy,
  {
  	uint16_t fw_ver1, fw_ver2, val;
  	struct bnx2x_softc *sc = params->sc;
@@ -7463,7 +7491,7 @@
  
  	/* Restore normal power mode */
  	elink_cb_gpio_write(sc, MISC_REGISTERS_GPIO_2,
-@@ -10558,7 +10571,7 @@ static uint8_t elink_7101_config_init(struct elink_phy *phy,
+@@ -10559,7 +10572,7 @@ static uint8_t elink_7101_config_init(struct elink_phy *phy,
  	elink_wait_reset_complete(sc, phy, params);
  
  	elink_cl45_write(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_CTRL, 0x1);
@@ -7472,7 +7500,7 @@
  	elink_cl45_write(sc, phy,
  			 MDIO_PMA_DEVAD, MDIO_PMA_REG_7107_LED_CNTL, (1 << 3));
  
-@@ -10589,10 +10602,10 @@ static uint8_t elink_7101_read_status(struct elink_phy *phy,
+@@ -10590,10 +10603,10 @@ static uint8_t elink_7101_read_status(struct elink_phy *phy,
  	uint16_t val1, val2;
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val2);
  	elink_cl45_read(sc, phy, MDIO_PMA_DEVAD, MDIO_PMA_LASI_STAT, &val1);
@@ -7485,7 +7513,7 @@
  	link_up = ((val1 & 4) == 4);
  	/* If link is up print the AN outcome of the SFX7101 PHY */
  	if (link_up) {
-@@ -10601,7 +10614,7 @@ static uint8_t elink_7101_read_status(struct elink_phy *phy,
+@@ -10602,7 +10615,7 @@ static uint8_t elink_7101_read_status(struct elink_phy *phy,
  				&val2);
  		vars->line_speed = ELINK_SPEED_10000;
  		vars->duplex = DUPLEX_FULL;
@@ -7494,7 +7522,7 @@
  			    val2, (val2 & (1 << 14)));
  		elink_ext_phy_10G_an_resolve(sc, phy, vars);
  		elink_ext_phy_resolve_fc(phy, params, vars);
-@@ -11208,7 +11221,7 @@ static uint32_t elink_get_ext_phy_config(struct bnx2x_softc *sc,
+@@ -11209,7 +11222,7 @@ static uint32_t elink_get_ext_phy_config(struct bnx2x_softc *sc,
  						 external_phy_config2));
  		break;
  	default:
@@ -7503,7 +7531,7 @@
  		return ELINK_STATUS_ERROR;
  	}
  
-@@ -11231,7 +11244,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
+@@ -11232,7 +11245,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
  	    (REG_RD(sc, MISC_REG_CHIP_NUM) << 16) |
  	    ((REG_RD(sc, MISC_REG_CHIP_REV) & 0xf) << 12);
  
@@ -7512,7 +7540,7 @@
  	if (USES_WARPCORE(sc)) {
  		uint32_t serdes_net_if;
  		phy_addr = REG_RD(sc, MISC_REG_WC0_CTRL_PHY_ADDR);
-@@ -11308,7 +11321,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
+@@ -11309,7 +11322,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
  			phy->flags &= ~ELINK_FLAGS_TX_ERROR_CHECK;
  			break;
  		default:
@@ -7521,7 +7549,7 @@
  				    serdes_net_if);
  			break;
  		}
-@@ -11336,7 +11349,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
+@@ -11337,7 +11350,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
  			*phy = phy_xgxs;
  			break;
  		default:
@@ -7530,7 +7558,7 @@
  			return ELINK_STATUS_ERROR;
  		}
  	}
-@@ -11349,7 +11362,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
+@@ -11350,7 +11363,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc,
  	else
  		phy->def_md_devad = ELINK_DEFAULT_PHY_DEV_ADDR;
  
@@ -7539,7 +7567,7 @@
  		    port, phy->addr, phy->mdio_ctrl);
  
  	elink_populate_preemphasis(sc, shmem_base, phy, port, ELINK_INT_PHY);
-@@ -11476,9 +11489,9 @@ static elink_status_t elink_populate_ext_phy(struct bnx2x_softc *sc,
+@@ -11477,9 +11490,9 @@ static elink_status_t elink_populate_ext_phy(struct bnx2x_softc *sc,
  					    ELINK_SUPPORTED_100baseT_Full);
  	}
  
@@ -7551,7 +7579,7 @@
  		    phy->addr, phy->mdio_ctrl);
  	return ELINK_STATUS_OK;
  }
-@@ -11527,7 +11540,7 @@ static void elink_phy_def_cfg(struct elink_params *params,
+@@ -11528,7 +11541,7 @@ static void elink_phy_def_cfg(struct elink_params *params,
  							 speed_capability_mask));
  	}
  
@@ -7560,7 +7588,7 @@
  		    "Default config phy idx %x cfg 0x%x speed_cap_mask 0x%x",
  		    phy_index, link_config, phy->speed_cap_mask);
  
-@@ -11618,7 +11631,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
+@@ -11617,7 +11630,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
  	struct bnx2x_softc *sc = params->sc;
  	struct elink_phy *phy;
  	params->num_phys = 0;
@@ -7569,7 +7597,7 @@
  
  	phy_config_swapped = params->multi_phy_config &
  	    PORT_HW_CFG_PHY_SWAPPED_ENABLED;
-@@ -11631,7 +11644,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
+@@ -11630,7 +11643,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
  			else if (phy_index == ELINK_EXT_PHY2)
  				actual_phy_idx = ELINK_EXT_PHY1;
  		}
@@ -7578,7 +7606,7 @@
  			    " actual_phy_idx %x", phy_config_swapped,
  			    phy_index, actual_phy_idx);
  		phy = &params->phy[actual_phy_idx];
-@@ -11639,7 +11652,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
+@@ -11638,7 +11651,7 @@ elink_status_t elink_phy_probe(struct elink_params * params)
  				       params->shmem2_base, params->port,
  				       phy) != ELINK_STATUS_OK) {
  			params->num_phys = 0;
@@ -7587,7 +7615,7 @@
  				    phy_index);
  			for (phy_index = ELINK_INT_PHY;
  			     phy_index < ELINK_MAX_PHYS; phy_index++)
-@@ -11680,7 +11693,8 @@ elink_status_t elink_phy_probe(struct elink_params * params)
+@@ -11679,7 +11692,8 @@ elink_status_t elink_phy_probe(struct elink_params * params)
  		params->num_phys++;
  	}
  
@@ -7597,7 +7625,7 @@
  	return ELINK_STATUS_OK;
  }
  
-@@ -11850,7 +11864,7 @@ static elink_status_t elink_avoid_link_flap(struct elink_params *params,
+@@ -11849,7 +11863,7 @@ static elink_status_t elink_avoid_link_flap(struct elink_params *params,
  	for (phy_idx = ELINK_INT_PHY; phy_idx < params->num_phys; phy_idx++) {
  		struct elink_phy *phy = &params->phy[phy_idx];
  		if (phy->phy_specific_func) {
@@ -7606,7 +7634,7 @@
  			phy->phy_specific_func(phy, params, ELINK_PHY_INIT);
  		}
  		if ((phy->media_type == ELINK_ETH_PHY_SFPP_10G_FIBER) ||
-@@ -11970,12 +11984,13 @@ elink_status_t elink_phy_init(struct elink_params *params,
+@@ -11969,12 +11983,13 @@ elink_status_t elink_phy_init(struct elink_params *params,
  {
  	int lfa_status;
  	struct bnx2x_softc *sc = params->sc;
@@ -7624,7 +7652,7 @@
  	vars->link_status = 0;
  	vars->phy_link_up = 0;
  	vars->link_up = 0;
-@@ -11992,11 +12007,13 @@ elink_status_t elink_phy_init(struct elink_params *params,
+@@ -11991,11 +12006,13 @@ elink_status_t elink_phy_init(struct elink_params *params,
  	lfa_status = elink_check_lfa(params);
  
  	if (lfa_status == 0) {
@@ -7640,7 +7668,7 @@
  	elink_cannot_avoid_link_flap(params, vars, lfa_status);
  
  	/* Disable attentions */
-@@ -12012,12 +12029,12 @@ elink_status_t elink_phy_init(struct elink_params *params,
+@@ -12011,12 +12028,12 @@ elink_status_t elink_phy_init(struct elink_params *params,
  		vars->link_status |= LINK_STATUS_PFC_ENABLED;
  
  	if ((params->num_phys == 0) && !CHIP_REV_IS_SLOW(sc)) {
@@ -7655,7 +7683,7 @@
  
  	switch (params->loopback_mode) {
  	case ELINK_LOOPBACK_BMAC:
-@@ -12060,7 +12077,7 @@ static elink_status_t elink_link_reset(struct elink_params *params,
+@@ -12059,7 +12076,7 @@ static elink_status_t elink_link_reset(struct elink_params *params,
  {
  	struct bnx2x_softc *sc = params->sc;
  	uint8_t phy_index, port = params->port, clear_latch_ind = 0;
@@ -7664,7 +7692,7 @@
  	/* Disable attentions */
  	vars->link_status = 0;
  	elink_update_mng(params, vars->link_status);
-@@ -12238,7 +12255,7 @@ static elink_status_t elink_8073_common_init_phy(struct bnx2x_softc *sc,
+@@ -12237,7 +12254,7 @@ static elink_status_t elink_8073_common_init_phy(struct bnx2x_softc *sc,
  		if (elink_populate_phy(sc, phy_index, shmem_base, shmem2_base,
  				       port_of_path, &phy[port]) !=
  		    ELINK_STATUS_OK) {
@@ -7673,7 +7701,7 @@
  			return ELINK_STATUS_ERROR;
  		}
  		/* Disable attentions */
-@@ -12278,7 +12295,7 @@ static elink_status_t elink_8073_common_init_phy(struct bnx2x_softc *sc,
+@@ -12277,7 +12294,7 @@ static elink_status_t elink_8073_common_init_phy(struct bnx2x_softc *sc,
  		else
  			port_of_path = 0;
  
@@ -7682,7 +7710,7 @@
  			    phy_blk[port]->addr);
  		if (elink_8073_8727_external_rom_boot(sc, phy_blk[port],
  						      port_of_path))
-@@ -12362,7 +12379,7 @@ static elink_status_t elink_8726_common_init_phy(struct bnx2x_softc *sc,
+@@ -12361,7 +12378,7 @@ static elink_status_t elink_8726_common_init_phy(struct bnx2x_softc *sc,
  		/* Extract the ext phy address for the port */
  		if (elink_populate_phy(sc, phy_index, shmem_base, shmem2_base,
  				       port, &phy) != ELINK_STATUS_OK) {
@@ -7691,7 +7719,7 @@
  			return ELINK_STATUS_ERROR;
  		}
  
-@@ -12482,7 +12499,7 @@ static elink_status_t elink_8727_common_init_phy(struct bnx2x_softc *sc,
+@@ -12481,7 +12498,7 @@ static elink_status_t elink_8727_common_init_phy(struct bnx2x_softc *sc,
  		if (elink_populate_phy(sc, phy_index, shmem_base, shmem2_base,
  				       port_of_path, &phy[port]) !=
  		    ELINK_STATUS_OK) {
@@ -7700,7 +7728,7 @@
  			return ELINK_STATUS_ERROR;
  		}
  		/* disable attentions */
-@@ -12513,7 +12530,7 @@ static elink_status_t elink_8727_common_init_phy(struct bnx2x_softc *sc,
+@@ -12512,7 +12529,7 @@ static elink_status_t elink_8727_common_init_phy(struct bnx2x_softc *sc,
  			port_of_path = port;
  		else
  			port_of_path = 0;
@@ -7709,7 +7737,7 @@
  			    phy_blk[port]->addr);
  		if (elink_8073_8727_external_rom_boot(sc, phy_blk[port],
  						      port_of_path))
-@@ -12540,7 +12557,8 @@ static elink_status_t elink_84833_common_init_phy(struct bnx2x_softc *sc,
+@@ -12539,7 +12556,8 @@ static elink_status_t elink_84833_common_init_phy(struct bnx2x_softc *sc,
  	DELAY(10);
  	elink_cb_gpio_mult_write(sc, reset_gpios,
  				 MISC_REGISTERS_GPIO_OUTPUT_HIGH);
@@ -7719,7 +7747,7 @@
  	return ELINK_STATUS_OK;
  }
  
-@@ -12588,7 +12606,7 @@ static elink_status_t elink_ext_phy_common_init(struct bnx2x_softc *sc,
+@@ -12587,7 +12605,7 @@ static elink_status_t elink_ext_phy_common_init(struct bnx2x_softc *sc,
  		rc = ELINK_STATUS_ERROR;
  		break;
  	default:
@@ -7728,7 +7756,7 @@
  			    "ext_phy 0x%x common init not required",
  			    ext_phy_type);
  		break;
-@@ -12614,7 +12632,7 @@ elink_status_t elink_common_init_phy(struct bnx2x_softc * sc,
+@@ -12613,7 +12631,7 @@ elink_status_t elink_common_init_phy(struct bnx2x_softc * sc,
  
  	elink_set_mdio_clk(sc, GRCBASE_EMAC0);
  	elink_set_mdio_clk(sc, GRCBASE_EMAC1);
@@ -7737,7 +7765,7 @@
  	if (CHIP_IS_E3(sc)) {
  		/* Enable EPIO */
  		val = REG_RD(sc, MISC_REG_GEN_PURP_HWG);
-@@ -12625,7 +12643,7 @@ elink_status_t elink_common_init_phy(struct bnx2x_softc * sc,
+@@ -12624,7 +12642,7 @@ elink_status_t elink_common_init_phy(struct bnx2x_softc * sc,
  			 offsetof(struct shmem_region,
  				  port_mb[PORT_0].ext_phy_fw_version));
  	if (phy_ver) {
@@ -7746,7 +7774,7 @@
  			    phy_ver);
  		return ELINK_STATUS_OK;
  	}
-@@ -12697,15 +12715,15 @@ static uint8_t elink_analyze_link_error(struct elink_params *params,
+@@ -12696,15 +12714,15 @@ static uint8_t elink_analyze_link_error(struct elink_params *params,
  	/* If values differ */
  	switch (phy_flag) {
  	case PHY_HALF_OPEN_CONN_FLAG:
@@ -7766,7 +7794,7 @@
  		    old_status, status);
  
  	/* a. Update shmem->link_status accordingly
-@@ -12831,7 +12849,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
+@@ -12830,7 +12848,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
  	    PORT_HW_CFG_E3_TX_FAULT_SHIFT;
  
  	if (elink_get_cfg_pin(sc, cfg_pin, &value)) {
@@ -7775,7 +7803,7 @@
  		return;
  	}
  
-@@ -12853,7 +12871,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
+@@ -12852,7 +12870,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
  
  		/* If module is unapproved, led should be on regardless */
  		if (!(phy->flags & ELINK_FLAGS_SFP_NOT_APPROVED)) {
@@ -7784,7 +7812,7 @@
  				    led_mode);
  			elink_set_e3_module_fault_led(params, led_mode);
  		}
-@@ -12863,7 +12881,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
+@@ -12862,7 +12880,7 @@ static void elink_sfp_tx_fault_detection(struct elink_phy *phy,
  static void elink_kr2_recovery(struct elink_params *params,
  			       struct elink_vars *vars, struct elink_phy *phy)
  {
@@ -7793,7 +7821,7 @@
  
  	elink_warpcore_enable_AN_KR2(phy, params, vars);
  	elink_warpcore_restart_AN_KR(phy, params);
-@@ -12890,7 +12908,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
+@@ -12889,7 +12907,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
  	if (!sigdet) {
  		if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
  			elink_kr2_recovery(params, vars, phy);
@@ -7802,7 +7830,7 @@
  		}
  		return;
  	}
-@@ -12908,7 +12926,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
+@@ -12907,7 +12925,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
  	if (base_page == 0) {
  		if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
  			elink_kr2_recovery(params, vars, phy);
@@ -7811,7 +7839,7 @@
  		}
  		return;
  	}
-@@ -12924,7 +12942,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
+@@ -12923,7 +12941,7 @@ static void elink_check_kr2_wa(struct elink_params *params,
  	/* In case KR2 is already disabled, check if we need to re-enable it */
  	if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
  		if (!not_kr2_device) {
@@ -7820,7 +7848,7 @@
  				    next_page);
  			elink_kr2_recovery(params, vars, phy);
  		}
-@@ -12933,7 +12951,8 @@ static void elink_check_kr2_wa(struct elink_params *params,
+@@ -12932,7 +12950,8 @@ static void elink_check_kr2_wa(struct elink_params *params,
  	/* KR2 is enabled, but not KR2 device */
  	if (not_kr2_device) {
  		/* Disable KR2 on both lanes */
@@ -7830,7 +7858,7 @@
  		elink_disable_kr2(params, vars, phy);
  		/* Restart AN on leading lane */
  		elink_warpcore_restart_AN_KR(phy, params);
-@@ -12950,7 +12969,7 @@ void elink_period_func(struct elink_params *params, struct elink_vars *vars)
+@@ -12949,7 +12968,7 @@ void elink_period_func(struct elink_params *params, struct elink_vars *vars)
  			elink_set_aer_mmd(params, &params->phy[phy_idx]);
  			if (elink_check_half_open_conn(params, vars, 1) !=
  			    ELINK_STATUS_OK) {
@@ -7839,7 +7867,7 @@
  			}
  			break;
  		}
-@@ -12996,7 +13015,7 @@ uint8_t elink_fan_failure_det_req(struct bnx2x_softc *sc,
+@@ -12995,7 +13014,7 @@ uint8_t elink_fan_failure_det_req(struct bnx2x_softc *sc,
  		if (elink_populate_phy(sc, phy_index, shmem_base, shmem2_base,
  				       port, &phy)
  		    != ELINK_STATUS_OK) {
@@ -7848,7 +7876,7 @@
  			return 0;
  		}
  		fan_failure_det_req |= (phy.flags &
-@@ -13046,7 +13065,7 @@ void elink_init_mod_abs_int(struct bnx2x_softc *sc, struct elink_vars *vars,
+@@ -13045,7 +13064,7 @@ void elink_init_mod_abs_int(struct bnx2x_softc *sc, struct elink_vars *vars,
  			if (elink_populate_phy(sc, phy_index, shmem_base,
  					       shmem2_base, port, &phy)
  			    != ELINK_STATUS_OK) {
@@ -7857,7 +7885,7 @@
  				return;
  			}
  			if (phy.type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BNX2X8726) {
-@@ -13076,7 +13095,7 @@ void elink_init_mod_abs_int(struct bnx2x_softc *sc, struct elink_vars *vars,
+@@ -13075,7 +13094,7 @@ void elink_init_mod_abs_int(struct bnx2x_softc *sc, struct elink_vars *vars,
  		     dev_info.port_hw_config[port].aeu_int_mask);
  	REG_WR(sc, sync_offset, vars->aeu_int_mask);
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnx2x: fix to disable further interrupts' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (8 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix logging to include device name' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix call to link handling periodic function' " Luca Boccassi
                       ` (13 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Rasesh Mody; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 1e70ff7a4616ba0d58148a1d6b3dd5e3b41d19a9 Mon Sep 17 00:00:00 2001
From: Rasesh Mody <rasesh.mody@cavium.com>
Date: Sat, 29 Sep 2018 05:42:39 +0000
Subject: [PATCH] net/bnx2x: fix to disable further interrupts

[ upstream commit 29822ca5cce2613e6de5b0972fc340e856f201c5 ]

Fix to disable further fastpath/slowpath interrupts. These will be
enabled again by their respective handlers

Fixes: 540a211084a7 ("bnx2x: driver core")

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/bnx2x/bnx2x.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 0e68108496..167b046ea9 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -4561,12 +4561,18 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
 		fp = &sc->fp[i];
 		mask = (0x2 << (fp->index + CNIC_SUPPORT(sc)));
 		if (status & mask) {
+		/* acknowledge and disable further fastpath interrupts */
+			bnx2x_ack_sb(sc, fp->igu_sb_id, USTORM_ID,
+				     0, IGU_INT_DISABLE, 0);
 			bnx2x_handle_fp_tq(fp, scan_fp);
 			status &= ~mask;
 		}
 	}
 
 	if (unlikely(status & 0x1)) {
+		/* acknowledge and disable further slowpath interrupts */
+		bnx2x_ack_sb(sc, sc->igu_dsb_id, USTORM_ID,
+			     0, IGU_INT_DISABLE, 0);
 		rc = bnx2x_handle_sp_tq(sc);
 		status &= ~0x1;
 	}
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.903609135 +0100
+++ 0011-net-bnx2x-fix-to-disable-further-interrupts.patch	2018-10-15 12:48:34.561096017 +0100
@@ -1,13 +1,14 @@
-From 29822ca5cce2613e6de5b0972fc340e856f201c5 Mon Sep 17 00:00:00 2001
+From 1e70ff7a4616ba0d58148a1d6b3dd5e3b41d19a9 Mon Sep 17 00:00:00 2001
 From: Rasesh Mody <rasesh.mody@cavium.com>
 Date: Sat, 29 Sep 2018 05:42:39 +0000
 Subject: [PATCH] net/bnx2x: fix to disable further interrupts
 
+[ upstream commit 29822ca5cce2613e6de5b0972fc340e856f201c5 ]
+
 Fix to disable further fastpath/slowpath interrupts. These will be
 enabled again by their respective handlers
 
 Fixes: 540a211084a7 ("bnx2x: driver core")
-Cc: stable@dpdk.org
 
 Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
 ---
@@ -15,10 +16,10 @@
  1 file changed, 6 insertions(+)
 
 diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
-index 93f8586b55..0225bea9ae 100644
+index 0e68108496..167b046ea9 100644
 --- a/drivers/net/bnx2x/bnx2x.c
 +++ b/drivers/net/bnx2x/bnx2x.c
-@@ -4553,12 +4553,18 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
+@@ -4561,12 +4561,18 @@ int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp)
  		fp = &sc->fp[i];
  		mask = (0x2 << (fp->index + CNIC_SUPPORT(sc)));
  		if (status & mask) {

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnx2x: fix call to link handling periodic function' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (9 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix to disable further interrupts' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix to add PHY lock' " Luca Boccassi
                       ` (12 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Rasesh Mody; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 87a99237fe9f9d2d00ce55c7d45670cda37edc69 Mon Sep 17 00:00:00 2001
From: Rasesh Mody <rasesh.mody@cavium.com>
Date: Sat, 29 Sep 2018 05:42:40 +0000
Subject: [PATCH] net/bnx2x: fix call to link handling periodic function

[ upstream commit 0f6ebeee2402441b20e45ea27f0ff2a4fc2c165f ]

If link handling periodic function is allowed to be called in interrupt
context, the periodic function can get called too frequently and exhaust
the retry credits to check link status.

This change makes sure link handling periodic function is not called in
interrupt context.

Fixes: 540a211084a7 ("bnx2x: driver core")

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/bnx2x/bnx2x_ethdev.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c
index 794670f1ad..d3733f7a35 100644
--- a/drivers/net/bnx2x/bnx2x_ethdev.c
+++ b/drivers/net/bnx2x/bnx2x_ethdev.c
@@ -122,8 +122,11 @@ static __rte_unused void
 bnx2x_interrupt_handler(__rte_unused struct rte_intr_handle *handle, void *param)
 {
 	struct rte_eth_dev *dev = (struct rte_eth_dev *)param;
+	struct bnx2x_softc *sc = dev->data->dev_private;
 
+	atomic_store_rel_long(&sc->periodic_flags, PERIODIC_STOP);
 	bnx2x_interrupt_action(dev);
+	atomic_store_rel_long(&sc->periodic_flags, PERIODIC_GO);
 	rte_intr_enable(&(dev->pci_dev->intr_handle));
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.930601744 +0100
+++ 0012-net-bnx2x-fix-call-to-link-handling-periodic-functio.patch	2018-10-15 12:48:34.561096017 +0100
@@ -1,8 +1,10 @@
-From 0f6ebeee2402441b20e45ea27f0ff2a4fc2c165f Mon Sep 17 00:00:00 2001
+From 87a99237fe9f9d2d00ce55c7d45670cda37edc69 Mon Sep 17 00:00:00 2001
 From: Rasesh Mody <rasesh.mody@cavium.com>
 Date: Sat, 29 Sep 2018 05:42:40 +0000
 Subject: [PATCH] net/bnx2x: fix call to link handling periodic function
 
+[ upstream commit 0f6ebeee2402441b20e45ea27f0ff2a4fc2c165f ]
+
 If link handling periodic function is allowed to be called in interrupt
 context, the periodic function can get called too frequently and exhaust
 the retry credits to check link status.
@@ -11,25 +13,26 @@
 interrupt context.
 
 Fixes: 540a211084a7 ("bnx2x: driver core")
-Cc: stable@dpdk.org
 
 Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
 ---
- drivers/net/bnx2x/bnx2x_ethdev.c | 2 ++
- 1 file changed, 2 insertions(+)
+ drivers/net/bnx2x/bnx2x_ethdev.c | 3 +++
+ 1 file changed, 3 insertions(+)
 
 diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c
-index ae2e60a060..0057843b5d 100644
+index 794670f1ad..d3733f7a35 100644
 --- a/drivers/net/bnx2x/bnx2x_ethdev.c
 +++ b/drivers/net/bnx2x/bnx2x_ethdev.c
-@@ -131,7 +131,9 @@ bnx2x_interrupt_handler(void *param)
- 
- 	PMD_DEBUG_PERIODIC_LOG(INFO, sc, "Interrupt handled");
+@@ -122,8 +122,11 @@ static __rte_unused void
+ bnx2x_interrupt_handler(__rte_unused struct rte_intr_handle *handle, void *param)
+ {
+ 	struct rte_eth_dev *dev = (struct rte_eth_dev *)param;
++	struct bnx2x_softc *sc = dev->data->dev_private;
  
 +	atomic_store_rel_long(&sc->periodic_flags, PERIODIC_STOP);
  	bnx2x_interrupt_action(dev);
 +	atomic_store_rel_long(&sc->periodic_flags, PERIODIC_GO);
- 	rte_intr_enable(&sc->pci_dev->intr_handle);
+ 	rte_intr_enable(&(dev->pci_dev->intr_handle));
  }
  
 -- 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnx2x: fix to add PHY lock' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (10 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix call to link handling periodic function' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: fix uninitialized pointer access in Tx' " Luca Boccassi
                       ` (11 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Rasesh Mody; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From f82658ea867b14c69abdfb7c72a380352f8633cd Mon Sep 17 00:00:00 2001
From: Rasesh Mody <rasesh.mody@cavium.com>
Date: Sat, 29 Sep 2018 05:42:41 +0000
Subject: [PATCH] net/bnx2x: fix to add PHY lock

[ upstream commit a9b58b15ed5186fae34fe20faf74be339632bebc ]

This patch adds phy_lock, acquire/release the lock when performing
PHY transactions. Without this fix driver can run into synchronization
issues with management FW when modifying PHY settings.

Fixes: 540a211084a7 ("bnx2x: driver core")

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/bnx2x/bnx2x.c     | 59 ++++++++++++++++++++++++++++++-----
 drivers/net/bnx2x/bnx2x.h     |  7 +++++
 drivers/net/bnx2x/ecore_reg.h |  1 +
 3 files changed, 60 insertions(+), 7 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 167b046ea9..92abdbbd49 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -114,6 +114,7 @@ static void bnx2x_pf_disable(struct bnx2x_softc *sc);
 static void bnx2x_update_rx_prod(struct bnx2x_softc *sc,
 				 struct bnx2x_fastpath *fp,
 				 uint16_t rx_bd_prod, uint16_t rx_cq_prod);
+static void bnx2x_link_report_locked(struct bnx2x_softc *sc);
 static void bnx2x_link_report(struct bnx2x_softc *sc);
 void bnx2x_link_status_update(struct bnx2x_softc *sc);
 static int bnx2x_alloc_mem(struct bnx2x_softc *sc);
@@ -201,7 +202,8 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	uint32_t hw_lock_control_reg;
 	int cnt;
 
-	PMD_INIT_FUNC_TRACE(sc);
+	if (resource)
+		PMD_INIT_FUNC_TRACE(sc);
 
 	/* validate the resource is within range */
 	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
@@ -237,7 +239,8 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 		DELAY(5000);
 	}
 
-	PMD_DRV_LOG(NOTICE, sc, "Resource lock timeout!");
+	PMD_DRV_LOG(NOTICE, sc, "Resource 0x%x resource_bit 0x%x lock timeout!",
+		    resource, resource_bit);
 	return -1;
 }
 
@@ -248,13 +251,14 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	int func = SC_FUNC(sc);
 	uint32_t hw_lock_control_reg;
 
-	PMD_INIT_FUNC_TRACE(sc);
+	if (resource)
+		PMD_INIT_FUNC_TRACE(sc);
 
 	/* validate the resource is within range */
 	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
 		PMD_DRV_LOG(NOTICE, sc,
-			    "resource 0x%x > HW_LOCK_MAX_RESOURCE_VALUE",
-			    resource);
+			    "(resource 0x%x > HW_LOCK_MAX_RESOURCE_VALUE)"
+			    " resource_bit 0x%x", resource, resource_bit);
 		return -1;
 	}
 
@@ -278,6 +282,18 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	return 0;
 }
 
+static void bnx2x_acquire_phy_lock(struct bnx2x_softc *sc)
+{
+	BNX2X_PHY_LOCK(sc);
+	bnx2x_acquire_hw_lock(sc, HW_LOCK_RESOURCE_MDIO);
+}
+
+static void bnx2x_release_phy_lock(struct bnx2x_softc *sc)
+{
+	bnx2x_release_hw_lock(sc, HW_LOCK_RESOURCE_MDIO);
+	BNX2X_PHY_UNLOCK(sc);
+}
+
 /* copy command into DMAE command memory and set DMAE command Go */
 void bnx2x_post_dmae(struct bnx2x_softc *sc, struct dmae_command *dmae, int idx)
 {
@@ -2911,7 +2927,7 @@ static void bnx2x_link_attn(struct bnx2x_softc *sc)
 		}
 	}
 
-	bnx2x_link_report(sc);
+	bnx2x_link_report_locked(sc);
 
 	if (IS_MF(sc)) {
 		bnx2x_link_sync_notify(sc);
@@ -2950,6 +2966,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
 	if (asserted & ATTN_HARD_WIRED_MASK) {
 		if (asserted & ATTN_NIG_FOR_FUNC) {
 
+			bnx2x_acquire_phy_lock(sc);
 			/* save nig interrupt mask */
 			nig_mask = REG_RD(sc, nig_int_mask_addr);
 
@@ -3047,6 +3064,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
 
 		REG_WR(sc, nig_int_mask_addr, nig_mask);
 
+		bnx2x_release_phy_lock(sc);
 	}
 }
 
@@ -3846,8 +3864,10 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
 			if (sc->link_vars.periodic_flags &
 			    ELINK_PERIODIC_FLAGS_LINK_EVENT) {
 				/* sync with link */
+				bnx2x_acquire_phy_lock(sc);
 				sc->link_vars.periodic_flags &=
 				    ~ELINK_PERIODIC_FLAGS_LINK_EVENT;
+				bnx2x_release_phy_lock(sc);
 				if (IS_MF(sc)) {
 					bnx2x_link_sync_notify(sc);
 				}
@@ -4037,7 +4057,9 @@ static void bnx2x_attn_int_deasserted0(struct bnx2x_softc *sc, uint32_t attn)
 	}
 
 	if ((attn & sc->link_vars.aeu_int_mask) && sc->port.pmf) {
+		bnx2x_acquire_phy_lock(sc);
 		elink_handle_module_detect_int(&sc->link_params);
+		bnx2x_release_phy_lock(sc);
 	}
 
 	if (attn & HW_INTERRUT_ASSERT_SET_0) {
@@ -6875,7 +6897,7 @@ bnx2x_fill_report_data(struct bnx2x_softc *sc, struct bnx2x_link_report_data *da
 }
 
 /* report link status to OS, should be called under phy_lock */
-static void bnx2x_link_report(struct bnx2x_softc *sc)
+static void bnx2x_link_report_locked(struct bnx2x_softc *sc)
 {
 	struct bnx2x_link_report_data cur_data;
 
@@ -6896,8 +6918,13 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
 		return;
 	}
 
+	PMD_DRV_LOG(INFO, sc, "Change in link status : cur_data = %lx, last_reported_link = %lx\n",
+		    cur_data.link_report_flags,
+		    sc->last_reported_link.link_report_flags);
+
 	sc->link_cnt++;
 
+	PMD_DRV_LOG(INFO, sc, "link status change count = %x\n", sc->link_cnt);
 	/* report new link params and remember the state for the next time */
 	(void)rte_memcpy(&sc->last_reported_link, &cur_data, sizeof(cur_data));
 
@@ -6949,6 +6976,14 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
 	}
 }
 
+static void
+bnx2x_link_report(struct bnx2x_softc *sc)
+{
+	bnx2x_acquire_phy_lock(sc);
+	bnx2x_link_report_locked(sc);
+	bnx2x_release_phy_lock(sc);
+}
+
 void bnx2x_link_status_update(struct bnx2x_softc *sc)
 {
 	if (sc->state != BNX2X_STATE_OPEN) {
@@ -7037,6 +7072,8 @@ static int bnx2x_initial_phy_init(struct bnx2x_softc *sc, int load_mode)
 
 	bnx2x_set_requested_fc(sc);
 
+	bnx2x_acquire_phy_lock(sc);
+
 	if (load_mode == LOAD_DIAG) {
 		lp->loopback_mode = ELINK_LOOPBACK_XGXS;
 /* Prefer doing PHY loopback at 10G speed, if possible */
@@ -7056,6 +7093,8 @@ static int bnx2x_initial_phy_init(struct bnx2x_softc *sc, int load_mode)
 
 	rc = elink_phy_init(&sc->link_params, &sc->link_vars);
 
+	bnx2x_release_phy_lock(sc);
+
 	bnx2x_calc_fc_adv(sc);
 
 	if (sc->link_vars.link_up) {
@@ -7110,7 +7149,9 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
  */
 		mb();
 		if (sc->port.pmf) {
+			bnx2x_acquire_phy_lock(sc);
 			elink_period_func(&sc->link_params, &sc->link_vars);
+			bnx2x_release_phy_lock(sc);
 		}
 	}
 #ifdef BNX2X_PULSE
@@ -9864,8 +9905,10 @@ static void bnx2x_common_init_phy(struct bnx2x_softc *sc)
 		shmem2_base[1] = SHMEM2_RD(sc, other_shmem2_base_addr);
 	}
 
+	bnx2x_acquire_phy_lock(sc);
 	elink_common_init_phy(sc, shmem_base, shmem2_base,
 			      sc->devinfo.chip_id, 0);
+	bnx2x_release_phy_lock(sc);
 }
 
 static void bnx2x_pf_disable(struct bnx2x_softc *sc)
@@ -11344,7 +11387,9 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
 static void bnx2x_link_reset(struct bnx2x_softc *sc)
 {
 	if (!BNX2X_NOMCP(sc)) {
+		bnx2x_acquire_phy_lock(sc);
 		elink_lfa_reset(&sc->link_params, &sc->link_vars);
+		bnx2x_release_phy_lock(sc);
 	} else {
 		if (!CHIP_REV_IS_SLOW(sc)) {
 			PMD_DRV_LOG(WARNING, sc,
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index ca7d1920b3..5dfd2f8e47 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -725,6 +725,13 @@ struct bnx2x_port {
 
     uint32_t    phy_addr;
 
+	/* Used to synchronize phy accesses. */
+	rte_spinlock_t	phy_mtx;
+	char		phy_mtx_name[32];
+
+#define BNX2X_PHY_LOCK(sc)          rte_spinlock_lock(&sc->port.phy_mtx)
+#define BNX2X_PHY_UNLOCK(sc)        rte_spinlock_unlock(&sc->port.phy_mtx)
+
     /*
      * MCP scratchpad address for port specific statistics.
      * The device is responsible for writing statistcss
diff --git a/drivers/net/bnx2x/ecore_reg.h b/drivers/net/bnx2x/ecore_reg.h
index d8203b453d..33cea4eb9a 100644
--- a/drivers/net/bnx2x/ecore_reg.h
+++ b/drivers/net/bnx2x/ecore_reg.h
@@ -1969,6 +1969,7 @@
 #define HW_LOCK_MAX_RESOURCE_VALUE		 31
 #define HW_LOCK_RESOURCE_DRV_FLAGS		 10
 #define HW_LOCK_RESOURCE_GPIO			 1
+#define HW_LOCK_RESOURCE_MDIO			 0
 #define HW_LOCK_RESOURCE_NVRAM			 12
 #define HW_LOCK_RESOURCE_PORT0_ATT_MASK		 3
 #define HW_LOCK_RESOURCE_RECOVERY_LEADER_0	 8
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.949727686 +0100
+++ 0013-net-bnx2x-fix-to-add-PHY-lock.patch	2018-10-15 12:48:34.573096016 +0100
@@ -1,14 +1,15 @@
-From a9b58b15ed5186fae34fe20faf74be339632bebc Mon Sep 17 00:00:00 2001
+From f82658ea867b14c69abdfb7c72a380352f8633cd Mon Sep 17 00:00:00 2001
 From: Rasesh Mody <rasesh.mody@cavium.com>
 Date: Sat, 29 Sep 2018 05:42:41 +0000
 Subject: [PATCH] net/bnx2x: fix to add PHY lock
 
+[ upstream commit a9b58b15ed5186fae34fe20faf74be339632bebc ]
+
 This patch adds phy_lock, acquire/release the lock when performing
 PHY transactions. Without this fix driver can run into synchronization
 issues with management FW when modifying PHY settings.
 
 Fixes: 540a211084a7 ("bnx2x: driver core")
-Cc: stable@dpdk.org
 
 Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
 ---
@@ -18,10 +19,10 @@
  3 files changed, 60 insertions(+), 7 deletions(-)
 
 diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
-index 0225bea9ae..279759366a 100644
+index 167b046ea9..92abdbbd49 100644
 --- a/drivers/net/bnx2x/bnx2x.c
 +++ b/drivers/net/bnx2x/bnx2x.c
-@@ -112,6 +112,7 @@ static void bnx2x_pf_disable(struct bnx2x_softc *sc);
+@@ -114,6 +114,7 @@ static void bnx2x_pf_disable(struct bnx2x_softc *sc);
  static void bnx2x_update_rx_prod(struct bnx2x_softc *sc,
  				 struct bnx2x_fastpath *fp,
  				 uint16_t rx_bd_prod, uint16_t rx_cq_prod);
@@ -29,7 +30,7 @@
  static void bnx2x_link_report(struct bnx2x_softc *sc);
  void bnx2x_link_status_update(struct bnx2x_softc *sc);
  static int bnx2x_alloc_mem(struct bnx2x_softc *sc);
-@@ -198,7 +199,8 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -201,7 +202,8 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	uint32_t hw_lock_control_reg;
  	int cnt;
  
@@ -39,7 +40,7 @@
  
  	/* validate the resource is within range */
  	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
-@@ -234,7 +236,8 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -237,7 +239,8 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  		DELAY(5000);
  	}
  
@@ -49,7 +50,7 @@
  	return -1;
  }
  
-@@ -245,13 +248,14 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -248,13 +251,14 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	int func = SC_FUNC(sc);
  	uint32_t hw_lock_control_reg;
  
@@ -67,7 +68,7 @@
  		return -1;
  	}
  
-@@ -275,6 +279,18 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -278,6 +282,18 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	return 0;
  }
  
@@ -86,7 +87,7 @@
  /* copy command into DMAE command memory and set DMAE command Go */
  void bnx2x_post_dmae(struct bnx2x_softc *sc, struct dmae_command *dmae, int idx)
  {
-@@ -2903,7 +2919,7 @@ static void bnx2x_link_attn(struct bnx2x_softc *sc)
+@@ -2911,7 +2927,7 @@ static void bnx2x_link_attn(struct bnx2x_softc *sc)
  		}
  	}
  
@@ -95,7 +96,7 @@
  
  	if (IS_MF(sc)) {
  		bnx2x_link_sync_notify(sc);
-@@ -2942,6 +2958,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
+@@ -2950,6 +2966,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
  	if (asserted & ATTN_HARD_WIRED_MASK) {
  		if (asserted & ATTN_NIG_FOR_FUNC) {
  
@@ -103,7 +104,7 @@
  			/* save nig interrupt mask */
  			nig_mask = REG_RD(sc, nig_int_mask_addr);
  
-@@ -3039,6 +3056,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
+@@ -3047,6 +3064,7 @@ static void bnx2x_attn_int_asserted(struct bnx2x_softc *sc, uint32_t asserted)
  
  		REG_WR(sc, nig_int_mask_addr, nig_mask);
  
@@ -111,7 +112,7 @@
  	}
  }
  
-@@ -3838,8 +3856,10 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
+@@ -3846,8 +3864,10 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x_softc *sc, uint32_t attn)
  			if (sc->link_vars.periodic_flags &
  			    ELINK_PERIODIC_FLAGS_LINK_EVENT) {
  				/* sync with link */
@@ -122,7 +123,7 @@
  				if (IS_MF(sc)) {
  					bnx2x_link_sync_notify(sc);
  				}
-@@ -4029,7 +4049,9 @@ static void bnx2x_attn_int_deasserted0(struct bnx2x_softc *sc, uint32_t attn)
+@@ -4037,7 +4057,9 @@ static void bnx2x_attn_int_deasserted0(struct bnx2x_softc *sc, uint32_t attn)
  	}
  
  	if ((attn & sc->link_vars.aeu_int_mask) && sc->port.pmf) {
@@ -132,7 +133,7 @@
  	}
  
  	if (attn & HW_INTERRUT_ASSERT_SET_0) {
-@@ -6867,7 +6889,7 @@ bnx2x_fill_report_data(struct bnx2x_softc *sc, struct bnx2x_link_report_data *da
+@@ -6875,7 +6897,7 @@ bnx2x_fill_report_data(struct bnx2x_softc *sc, struct bnx2x_link_report_data *da
  }
  
  /* report link status to OS, should be called under phy_lock */
@@ -141,7 +142,7 @@
  {
  	struct bnx2x_link_report_data cur_data;
  
-@@ -6888,8 +6910,13 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
+@@ -6896,8 +6918,13 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
  		return;
  	}
  
@@ -153,9 +154,9 @@
  
 +	PMD_DRV_LOG(INFO, sc, "link status change count = %x\n", sc->link_cnt);
  	/* report new link params and remember the state for the next time */
- 	rte_memcpy(&sc->last_reported_link, &cur_data, sizeof(cur_data));
+ 	(void)rte_memcpy(&sc->last_reported_link, &cur_data, sizeof(cur_data));
  
-@@ -6941,6 +6968,14 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
+@@ -6949,6 +6976,14 @@ static void bnx2x_link_report(struct bnx2x_softc *sc)
  	}
  }
  
@@ -170,7 +171,7 @@
  void bnx2x_link_status_update(struct bnx2x_softc *sc)
  {
  	if (sc->state != BNX2X_STATE_OPEN) {
-@@ -7019,6 +7054,8 @@ static int bnx2x_initial_phy_init(struct bnx2x_softc *sc, int load_mode)
+@@ -7037,6 +7072,8 @@ static int bnx2x_initial_phy_init(struct bnx2x_softc *sc, int load_mode)
  
  	bnx2x_set_requested_fc(sc);
  
@@ -179,7 +180,7 @@
  	if (load_mode == LOAD_DIAG) {
  		lp->loopback_mode = ELINK_LOOPBACK_XGXS;
  /* Prefer doing PHY loopback at 10G speed, if possible */
-@@ -7038,6 +7075,8 @@ static int bnx2x_initial_phy_init(struct bnx2x_softc *sc, int load_mode)
+@@ -7056,6 +7093,8 @@ static int bnx2x_initial_phy_init(struct bnx2x_softc *sc, int load_mode)
  
  	rc = elink_phy_init(&sc->link_params, &sc->link_vars);
  
@@ -188,7 +189,7 @@
  	bnx2x_calc_fc_adv(sc);
  
  	if (sc->link_vars.link_up) {
-@@ -7088,7 +7127,9 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
+@@ -7110,7 +7149,9 @@ void bnx2x_periodic_callout(struct bnx2x_softc *sc)
   */
  		mb();
  		if (sc->port.pmf) {
@@ -198,7 +199,7 @@
  		}
  	}
  #ifdef BNX2X_PULSE
-@@ -9840,8 +9881,10 @@ static void bnx2x_common_init_phy(struct bnx2x_softc *sc)
+@@ -9864,8 +9905,10 @@ static void bnx2x_common_init_phy(struct bnx2x_softc *sc)
  		shmem2_base[1] = SHMEM2_RD(sc, other_shmem2_base_addr);
  	}
  
@@ -209,7 +210,7 @@
  }
  
  static void bnx2x_pf_disable(struct bnx2x_softc *sc)
-@@ -11320,7 +11363,9 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
+@@ -11344,7 +11387,9 @@ static int bnx2x_init_hw_func(struct bnx2x_softc *sc)
  static void bnx2x_link_reset(struct bnx2x_softc *sc)
  {
  	if (!BNX2X_NOMCP(sc)) {
@@ -220,7 +221,7 @@
  		if (!CHIP_REV_IS_SLOW(sc)) {
  			PMD_DRV_LOG(WARNING, sc,
 diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
-index 1cc5a6b42c..74780725b9 100644
+index ca7d1920b3..5dfd2f8e47 100644
 --- a/drivers/net/bnx2x/bnx2x.h
 +++ b/drivers/net/bnx2x/bnx2x.h
 @@ -725,6 +725,13 @@ struct bnx2x_port {
@@ -238,10 +239,10 @@
       * MCP scratchpad address for port specific statistics.
       * The device is responsible for writing statistcss
 diff --git a/drivers/net/bnx2x/ecore_reg.h b/drivers/net/bnx2x/ecore_reg.h
-index ae8a93bb49..d69e857bf7 100644
+index d8203b453d..33cea4eb9a 100644
 --- a/drivers/net/bnx2x/ecore_reg.h
 +++ b/drivers/net/bnx2x/ecore_reg.h
-@@ -1967,6 +1967,7 @@
+@@ -1969,6 +1969,7 @@
  #define HW_LOCK_MAX_RESOURCE_VALUE		 31
  #define HW_LOCK_RESOURCE_DRV_FLAGS		 10
  #define HW_LOCK_RESOURCE_GPIO			 1

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnxt: fix uninitialized pointer access in Tx' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (11 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix to add PHY lock' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: set MAC filtering as outer for non tunnel frames' " Luca Boccassi
                       ` (10 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Somnath Kotur; +Cc: Ajit Khaparde, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 921f95806c08955aaee433f9e7aaa85b6847193d Mon Sep 17 00:00:00 2001
From: Somnath Kotur <somnath.kotur@broadcom.com>
Date: Fri, 28 Sep 2018 18:59:53 -0700
Subject: [PATCH] net/bnxt: fix uninitialized pointer access in Tx

[ upstream commit 63d086a52f0120523f3a33878d3ca0072b2de879 ]

bnxt_start_xmit() was attempting to access an uninitialized ptr - txbd1
which would lead to segmentation fault.
Fix to initialize ptr to NULL and check for the same before access.

Fixes: f10258e39ec2 ("net/bnxt: fix HW Tx checksum offload check")

Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt_txr.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c
index ff24e23238..f1e1616bca 100644
--- a/drivers/net/bnxt/bnxt_txr.c
+++ b/drivers/net/bnxt/bnxt_txr.c
@@ -146,7 +146,7 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,
 {
 	struct bnxt_tx_ring_info *txr = txq->tx_ring;
 	struct tx_bd_long *txbd;
-	struct tx_bd_long_hi *txbd1;
+	struct tx_bd_long_hi *txbd1 = NULL;
 	uint32_t vlan_tag_flags, cfa_action;
 	bool long_bd = false;
 	uint16_t last_prod = 0;
@@ -313,7 +313,8 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,
 	}
 
 	txbd->flags_type |= TX_BD_LONG_FLAGS_PACKET_END;
-	txbd1->lflags = rte_cpu_to_le_32(txbd1->lflags);
+	if (txbd1)
+		txbd1->lflags = rte_cpu_to_le_32(txbd1->lflags);
 
 	txr->tx_prod = RING_NEXT(txr->tx_ring_struct, txr->tx_prod);
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.979601163 +0100
+++ 0014-net-bnxt-fix-uninitialized-pointer-access-in-Tx.patch	2018-10-15 12:48:34.577096017 +0100
@@ -1,14 +1,15 @@
-From 63d086a52f0120523f3a33878d3ca0072b2de879 Mon Sep 17 00:00:00 2001
+From 921f95806c08955aaee433f9e7aaa85b6847193d Mon Sep 17 00:00:00 2001
 From: Somnath Kotur <somnath.kotur@broadcom.com>
 Date: Fri, 28 Sep 2018 18:59:53 -0700
 Subject: [PATCH] net/bnxt: fix uninitialized pointer access in Tx
 
+[ upstream commit 63d086a52f0120523f3a33878d3ca0072b2de879 ]
+
 bnxt_start_xmit() was attempting to access an uninitialized ptr - txbd1
 which would lead to segmentation fault.
 Fix to initialize ptr to NULL and check for the same before access.
 
 Fixes: f10258e39ec2 ("net/bnxt: fix HW Tx checksum offload check")
-Cc: stable@dpdk.org
 
 Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
 Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
@@ -17,10 +18,10 @@
  1 file changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c
-index 67bb35e06d..39be7bdfad 100644
+index ff24e23238..f1e1616bca 100644
 --- a/drivers/net/bnxt/bnxt_txr.c
 +++ b/drivers/net/bnxt/bnxt_txr.c
-@@ -120,7 +120,7 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,
+@@ -146,7 +146,7 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,
  {
  	struct bnxt_tx_ring_info *txr = txq->tx_ring;
  	struct tx_bd_long *txbd;
@@ -29,7 +30,7 @@
  	uint32_t vlan_tag_flags, cfa_action;
  	bool long_bd = false;
  	uint16_t last_prod = 0;
-@@ -295,7 +295,8 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,
+@@ -313,7 +313,8 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,
  	}
  
  	txbd->flags_type |= TX_BD_LONG_FLAGS_PACKET_END;

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnxt: set MAC filtering as outer for non tunnel frames' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (12 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: fix uninitialized pointer access in Tx' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: set a VNIC as default only once' " Luca Boccassi
                       ` (9 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Ajit Khaparde; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From bb03213c3fc4f262675430d162ab6de813e16dc8 Mon Sep 17 00:00:00 2001
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date: Fri, 28 Sep 2018 19:00:02 -0700
Subject: [PATCH] net/bnxt: set MAC filtering as outer for non tunnel frames

[ upstream commit 50d3c51baecc5906cd72de549cc99b5c283aee96 ]

We need to set HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST bit in
L2_FILTER_ALLOC for filtering non-tunnel packets based on outermost MAC.

Fixes: f92735db1e4c ("net/bnxt: add L2 filter alloc/init/free")

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt_hwrm.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index d65e28bec8..f4e4e23fcd 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -232,6 +232,8 @@ int bnxt_hwrm_set_filter(struct bnxt *bp,
 	HWRM_PREP(req, CFA_L2_FILTER_ALLOC, -1, resp);
 
 	req.flags = rte_cpu_to_le_32(filter->flags);
+	req.flags |=
+	rte_cpu_to_le_32(HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST);
 
 	enables = filter->enables |
 	      HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_DST_ID;
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:34.998522733 +0100
+++ 0015-net-bnxt-set-MAC-filtering-as-outer-for-non-tunnel-f.patch	2018-10-15 12:48:34.577096017 +0100
@@ -1,13 +1,14 @@
-From 50d3c51baecc5906cd72de549cc99b5c283aee96 Mon Sep 17 00:00:00 2001
+From bb03213c3fc4f262675430d162ab6de813e16dc8 Mon Sep 17 00:00:00 2001
 From: Ajit Khaparde <ajit.khaparde@broadcom.com>
 Date: Fri, 28 Sep 2018 19:00:02 -0700
 Subject: [PATCH] net/bnxt: set MAC filtering as outer for non tunnel frames
 
+[ upstream commit 50d3c51baecc5906cd72de549cc99b5c283aee96 ]
+
 We need to set HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST bit in
 L2_FILTER_ALLOC for filtering non-tunnel packets based on outermost MAC.
 
 Fixes: f92735db1e4c ("net/bnxt: add L2 filter alloc/init/free")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
 ---
@@ -15,11 +16,11 @@
  1 file changed, 2 insertions(+)
 
 diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
-index 51fe3a4c2e..b605659edb 100644
+index d65e28bec8..f4e4e23fcd 100644
 --- a/drivers/net/bnxt/bnxt_hwrm.c
 +++ b/drivers/net/bnxt/bnxt_hwrm.c
-@@ -383,6 +383,8 @@ int bnxt_hwrm_set_l2_filter(struct bnxt *bp,
- 	HWRM_PREP(req, CFA_L2_FILTER_ALLOC, BNXT_USE_CHIMP_MB);
+@@ -232,6 +232,8 @@ int bnxt_hwrm_set_filter(struct bnxt *bp,
+ 	HWRM_PREP(req, CFA_L2_FILTER_ALLOC, -1, resp);
  
  	req.flags = rte_cpu_to_le_32(filter->flags);
 +	req.flags |=

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnxt: set a VNIC as default only once' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (13 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: set MAC filtering as outer for non tunnel frames' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: remove excess log messages' " Luca Boccassi
                       ` (8 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Ajit Khaparde; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 83b150cc0296971f1fb8e1e93165771891f8dca1 Mon Sep 17 00:00:00 2001
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date: Fri, 28 Sep 2018 19:00:03 -0700
Subject: [PATCH] net/bnxt: set a VNIC as default only once

[ upstream commit 5bf10cdb67db5ee7308cc752b51f0f12dcdcb0e8 ]

If a vnic is configured as default and the setting has not changed,
there is no need to issue this setting again to the FW.

Fixes: db678d5c2b54 ("net/bnxt: add HWRM VNIC configure")

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt.h      | 1 +
 drivers/net/bnxt/bnxt_hwrm.c | 9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index b934605efa..dc867b12e8 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -132,6 +132,7 @@ struct bnxt {
 	uint32_t		flags;
 #define BNXT_FLAG_REGISTERED	(1 << 0)
 #define BNXT_FLAG_VF		(1 << 1)
+#define BNXT_FLAG_DFLT_VNIC_SET	(1 << 12)
 #define BNXT_PF(bp)		(!((bp)->flags & BNXT_FLAG_VF))
 #define BNXT_VF(bp)		((bp)->flags & BNXT_FLAG_VF)
 #define BNXT_NPAR_ENABLED(bp)	((bp)->port_partition_type)
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index f4e4e23fcd..b86a7e227f 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -900,8 +900,11 @@ int bnxt_hwrm_vnic_cfg(struct bnxt *bp, struct bnxt_vnic_info *vnic)
 	req.lb_rule = rte_cpu_to_le_16(0xffff);
 	req.mru = rte_cpu_to_le_16(bp->eth_dev->data->mtu + ETHER_HDR_LEN +
 				   ETHER_CRC_LEN + VLAN_TAG_SIZE);
-	if (vnic->func_default)
+	/* Configure default VNIC only once. */
+	if (vnic->func_default && !(bp->flags & BNXT_FLAG_DFLT_VNIC_SET)) {
 		req.flags = 1;
+		bp->flags |= BNXT_FLAG_DFLT_VNIC_SET;
+	}
 	if (vnic->vlan_strip)
 		req.flags |=
 		    rte_cpu_to_le_32(HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE);
@@ -978,6 +981,10 @@ int bnxt_hwrm_vnic_free(struct bnxt *bp, struct bnxt_vnic_info *vnic)
 	HWRM_CHECK_RESULT;
 
 	vnic->fw_vnic_id = INVALID_HW_RING_ID;
+	/* Configure default VNIC again if necessary. */
+	if (vnic->func_default && (bp->flags & BNXT_FLAG_DFLT_VNIC_SET))
+		bp->flags &= ~BNXT_FLAG_DFLT_VNIC_SET;
+
 	return rc;
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.019644089 +0100
+++ 0016-net-bnxt-set-a-VNIC-as-default-only-once.patch	2018-10-15 12:48:34.577096017 +0100
@@ -1,13 +1,14 @@
-From 5bf10cdb67db5ee7308cc752b51f0f12dcdcb0e8 Mon Sep 17 00:00:00 2001
+From 83b150cc0296971f1fb8e1e93165771891f8dca1 Mon Sep 17 00:00:00 2001
 From: Ajit Khaparde <ajit.khaparde@broadcom.com>
 Date: Fri, 28 Sep 2018 19:00:03 -0700
 Subject: [PATCH] net/bnxt: set a VNIC as default only once
 
+[ upstream commit 5bf10cdb67db5ee7308cc752b51f0f12dcdcb0e8 ]
+
 If a vnic is configured as default and the setting has not changed,
 there is no need to issue this setting again to the FW.
 
 Fixes: db678d5c2b54 ("net/bnxt: add HWRM VNIC configure")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
 ---
@@ -16,37 +17,36 @@
  2 files changed, 9 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
-index 75b7215ce4..f75b0ad3c5 100644
+index b934605efa..dc867b12e8 100644
 --- a/drivers/net/bnxt/bnxt.h
 +++ b/drivers/net/bnxt/bnxt.h
-@@ -261,6 +261,7 @@ struct bnxt {
- #define BNXT_FLAG_EXT_TX_PORT_STATS	(1 << 9)
- #define BNXT_FLAG_KONG_MB_EN	(1 << 10)
- #define BNXT_FLAG_TRUSTED_VF_EN	(1 << 11)
+@@ -132,6 +132,7 @@ struct bnxt {
+ 	uint32_t		flags;
+ #define BNXT_FLAG_REGISTERED	(1 << 0)
+ #define BNXT_FLAG_VF		(1 << 1)
 +#define BNXT_FLAG_DFLT_VNIC_SET	(1 << 12)
- #define BNXT_FLAG_NEW_RM	(1 << 30)
- #define BNXT_FLAG_INIT_DONE	(1 << 31)
  #define BNXT_PF(bp)		(!((bp)->flags & BNXT_FLAG_VF))
+ #define BNXT_VF(bp)		((bp)->flags & BNXT_FLAG_VF)
+ #define BNXT_NPAR_ENABLED(bp)	((bp)->port_partition_type)
 diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
-index b605659edb..38698e214c 100644
+index f4e4e23fcd..b86a7e227f 100644
 --- a/drivers/net/bnxt/bnxt_hwrm.c
 +++ b/drivers/net/bnxt/bnxt_hwrm.c
-@@ -1460,9 +1460,12 @@ int bnxt_hwrm_vnic_cfg(struct bnxt *bp, struct bnxt_vnic_info *vnic)
- 	req.cos_rule = rte_cpu_to_le_16(vnic->cos_rule);
- 	req.lb_rule = rte_cpu_to_le_16(vnic->lb_rule);
- 	req.mru = rte_cpu_to_le_16(vnic->mru);
+@@ -900,8 +900,11 @@ int bnxt_hwrm_vnic_cfg(struct bnxt *bp, struct bnxt_vnic_info *vnic)
+ 	req.lb_rule = rte_cpu_to_le_16(0xffff);
+ 	req.mru = rte_cpu_to_le_16(bp->eth_dev->data->mtu + ETHER_HDR_LEN +
+ 				   ETHER_CRC_LEN + VLAN_TAG_SIZE);
 -	if (vnic->func_default)
 +	/* Configure default VNIC only once. */
 +	if (vnic->func_default && !(bp->flags & BNXT_FLAG_DFLT_VNIC_SET)) {
- 		req.flags |=
- 		    rte_cpu_to_le_32(HWRM_VNIC_CFG_INPUT_FLAGS_DEFAULT);
+ 		req.flags = 1;
 +		bp->flags |= BNXT_FLAG_DFLT_VNIC_SET;
 +	}
  	if (vnic->vlan_strip)
  		req.flags |=
  		    rte_cpu_to_le_32(HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE);
-@@ -1600,6 +1603,10 @@ int bnxt_hwrm_vnic_free(struct bnxt *bp, struct bnxt_vnic_info *vnic)
- 	HWRM_UNLOCK();
+@@ -978,6 +981,10 @@ int bnxt_hwrm_vnic_free(struct bnxt *bp, struct bnxt_vnic_info *vnic)
+ 	HWRM_CHECK_RESULT;
  
  	vnic->fw_vnic_id = INVALID_HW_RING_ID;
 +	/* Configure default VNIC again if necessary. */

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnxt: remove excess log messages' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (14 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: set a VNIC as default only once' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: reduce polling interval for valid bit' " Luca Boccassi
                       ` (7 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Ajit Khaparde; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 4f2b1c7cbe65b129120f3502cb09a87a1d2bc560 Mon Sep 17 00:00:00 2001
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date: Fri, 28 Sep 2018 19:00:05 -0700
Subject: [PATCH] net/bnxt: remove excess log messages

[ upstream commit 6f93b2aa2da8a1b0d1c5149e88b6428ac00296a5 ]

When the firmware version and the driver HWRM version do not match,
we are logging some messages. These messages unnecessarily clutter
the logs and can add to the noise. We are logging the HWRM version
and the firmware version anyway. The difference in version numbers
can be gleaned from that. Removing the remaining log messages.

Fixes: 804e746c7b73 ("net/bnxt: add hardware resource manager init code")

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt_hwrm.c | 20 --------------------
 1 file changed, 20 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index b86a7e227f..a644fb9c91 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -381,7 +381,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
 	int rc = 0;
 	struct hwrm_ver_get_input req = {.req_type = 0 };
 	struct hwrm_ver_get_output *resp = bp->hwrm_cmd_resp_addr;
-	uint32_t my_version;
 	uint32_t fw_version;
 	uint16_t max_resp_len;
 	char type[RTE_MEMZONE_NAMESIZE];
@@ -407,10 +406,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
 	RTE_LOG(INFO, PMD, "Driver HWRM version: %d.%d.%d\n",
 		HWRM_VERSION_MAJOR, HWRM_VERSION_MINOR, HWRM_VERSION_UPDATE);
 
-	my_version = HWRM_VERSION_MAJOR << 16;
-	my_version |= HWRM_VERSION_MINOR << 8;
-	my_version |= HWRM_VERSION_UPDATE;
-
 	fw_version = resp->hwrm_intf_maj << 16;
 	fw_version |= resp->hwrm_intf_min << 8;
 	fw_version |= resp->hwrm_intf_upd;
@@ -421,21 +416,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
 		goto error;
 	}
 
-	if (my_version != fw_version) {
-		RTE_LOG(INFO, PMD, "BNXT Driver/HWRM API mismatch.\n");
-		if (my_version < fw_version) {
-			RTE_LOG(INFO, PMD,
-				"Firmware API version is newer than driver.\n");
-			RTE_LOG(INFO, PMD,
-				"The driver may be missing features.\n");
-		} else {
-			RTE_LOG(INFO, PMD,
-				"Firmware API version is older than driver.\n");
-			RTE_LOG(INFO, PMD,
-				"Not all driver features may be functional.\n");
-		}
-	}
-
 	if (bp->max_req_len > resp->max_req_win_len) {
 		RTE_LOG(ERR, PMD, "Unsupported request length\n");
 		rc = -EINVAL;
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.040780720 +0100
+++ 0017-net-bnxt-remove-excess-log-messages.patch	2018-10-15 12:48:34.581096017 +0100
@@ -1,8 +1,10 @@
-From 6f93b2aa2da8a1b0d1c5149e88b6428ac00296a5 Mon Sep 17 00:00:00 2001
+From 4f2b1c7cbe65b129120f3502cb09a87a1d2bc560 Mon Sep 17 00:00:00 2001
 From: Ajit Khaparde <ajit.khaparde@broadcom.com>
 Date: Fri, 28 Sep 2018 19:00:05 -0700
 Subject: [PATCH] net/bnxt: remove excess log messages
 
+[ upstream commit 6f93b2aa2da8a1b0d1c5149e88b6428ac00296a5 ]
+
 When the firmware version and the driver HWRM version do not match,
 we are logging some messages. These messages unnecessarily clutter
 the logs and can add to the noise. We are logging the HWRM version
@@ -10,7 +12,6 @@
 can be gleaned from that. Removing the remaining log messages.
 
 Fixes: 804e746c7b73 ("net/bnxt: add hardware resource manager init code")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
 ---
@@ -18,10 +19,10 @@
  1 file changed, 20 deletions(-)
 
 diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
-index 38698e214c..76e443ec18 100644
+index b86a7e227f..a644fb9c91 100644
 --- a/drivers/net/bnxt/bnxt_hwrm.c
 +++ b/drivers/net/bnxt/bnxt_hwrm.c
-@@ -789,7 +789,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
+@@ -381,7 +381,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
  	int rc = 0;
  	struct hwrm_ver_get_input req = {.req_type = 0 };
  	struct hwrm_ver_get_output *resp = bp->hwrm_cmd_resp_addr;
@@ -29,38 +30,38 @@
  	uint32_t fw_version;
  	uint16_t max_resp_len;
  	char type[RTE_MEMZONE_NAMESIZE];
-@@ -817,10 +816,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
- 	PMD_DRV_LOG(INFO, "Driver HWRM version: %d.%d.%d\n",
+@@ -407,10 +406,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
+ 	RTE_LOG(INFO, PMD, "Driver HWRM version: %d.%d.%d\n",
  		HWRM_VERSION_MAJOR, HWRM_VERSION_MINOR, HWRM_VERSION_UPDATE);
  
 -	my_version = HWRM_VERSION_MAJOR << 16;
 -	my_version |= HWRM_VERSION_MINOR << 8;
 -	my_version |= HWRM_VERSION_UPDATE;
 -
- 	fw_version = resp->hwrm_intf_maj_8b << 16;
- 	fw_version |= resp->hwrm_intf_min_8b << 8;
- 	fw_version |= resp->hwrm_intf_upd_8b;
-@@ -832,21 +827,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
+ 	fw_version = resp->hwrm_intf_maj << 16;
+ 	fw_version |= resp->hwrm_intf_min << 8;
+ 	fw_version |= resp->hwrm_intf_upd;
+@@ -421,21 +416,6 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
  		goto error;
  	}
  
 -	if (my_version != fw_version) {
--		PMD_DRV_LOG(INFO, "BNXT Driver/HWRM API mismatch.\n");
+-		RTE_LOG(INFO, PMD, "BNXT Driver/HWRM API mismatch.\n");
 -		if (my_version < fw_version) {
--			PMD_DRV_LOG(INFO,
+-			RTE_LOG(INFO, PMD,
 -				"Firmware API version is newer than driver.\n");
--			PMD_DRV_LOG(INFO,
+-			RTE_LOG(INFO, PMD,
 -				"The driver may be missing features.\n");
 -		} else {
--			PMD_DRV_LOG(INFO,
+-			RTE_LOG(INFO, PMD,
 -				"Firmware API version is older than driver.\n");
--			PMD_DRV_LOG(INFO,
+-			RTE_LOG(INFO, PMD,
 -				"Not all driver features may be functional.\n");
 -		}
 -	}
 -
  	if (bp->max_req_len > resp->max_req_win_len) {
- 		PMD_DRV_LOG(ERR, "Unsupported request length\n");
+ 		RTE_LOG(ERR, PMD, "Unsupported request length\n");
  		rc = -EINVAL;
 -- 
 2.19.1

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnxt: reduce polling interval for valid bit' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (15 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: remove excess log messages' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix csum parse-tunnel command invocation' " Luca Boccassi
                       ` (6 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Xiaoxin Peng; +Cc: Ajit Khaparde, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 0590058e6f7d6bbc6cb3a8de21be174db1014f72 Mon Sep 17 00:00:00 2001
From: Xiaoxin Peng <xiaoxin.peng@broadcom.com>
Date: Fri, 28 Sep 2018 19:00:06 -0700
Subject: [PATCH] net/bnxt: reduce polling interval for valid bit

[ upstream commit a830900063768646a70e5aef1c23ba2530fbc323 ]

Change polling interval for valid bit in bnxt_hwrm_send_message
Poll every 1us instead of 600us.

Fixes: 804e746c7b73 ("net/bnxt: add hardware resource manager init code")

Signed-off-by: Xiaoxin Peng <xiaoxin.peng@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt_hwrm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index a644fb9c91..dd99c578bd 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -50,7 +50,7 @@
 #include "bnxt_vnic.h"
 #include "hsi_struct_def_dpdk.h"
 
-#define HWRM_CMD_TIMEOUT		2000
+#define HWRM_CMD_TIMEOUT		6000000
 
 /*
  * HWRM Functions (sent to HWRM)
@@ -97,7 +97,7 @@ static int bnxt_hwrm_send_message_locked(struct bnxt *bp, void *msg,
 			if (*valid == HWRM_RESP_VALID_KEY)
 				break;
 		}
-		rte_delay_us(600);
+		rte_delay_us(1);
 	}
 
 	if (i >= HWRM_CMD_TIMEOUT) {
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.062242283 +0100
+++ 0018-net-bnxt-reduce-polling-interval-for-valid-bit.patch	2018-10-15 12:48:34.581096017 +0100
@@ -1,13 +1,14 @@
-From a830900063768646a70e5aef1c23ba2530fbc323 Mon Sep 17 00:00:00 2001
+From 0590058e6f7d6bbc6cb3a8de21be174db1014f72 Mon Sep 17 00:00:00 2001
 From: Xiaoxin Peng <xiaoxin.peng@broadcom.com>
 Date: Fri, 28 Sep 2018 19:00:06 -0700
 Subject: [PATCH] net/bnxt: reduce polling interval for valid bit
 
+[ upstream commit a830900063768646a70e5aef1c23ba2530fbc323 ]
+
 Change polling interval for valid bit in bnxt_hwrm_send_message
 Poll every 1us instead of 600us.
 
 Fixes: 804e746c7b73 ("net/bnxt: add hardware resource manager init code")
-Cc: stable@dpdk.org
 
 Signed-off-by: Xiaoxin Peng <xiaoxin.peng@broadcom.com>
 Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
@@ -16,19 +17,19 @@
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
-index 76e443ec18..999976054d 100644
+index a644fb9c91..dd99c578bd 100644
 --- a/drivers/net/bnxt/bnxt_hwrm.c
 +++ b/drivers/net/bnxt/bnxt_hwrm.c
-@@ -26,7 +26,7 @@
- 
- #include <rte_io.h>
+@@ -50,7 +50,7 @@
+ #include "bnxt_vnic.h"
+ #include "hsi_struct_def_dpdk.h"
  
--#define HWRM_CMD_TIMEOUT		10000
+-#define HWRM_CMD_TIMEOUT		2000
 +#define HWRM_CMD_TIMEOUT		6000000
- #define HWRM_SPEC_CODE_1_8_3		0x10803
- #define HWRM_VERSION_1_9_1		0x10901
  
-@@ -135,7 +135,7 @@ static int bnxt_hwrm_send_message(struct bnxt *bp, void *msg,
+ /*
+  * HWRM Functions (sent to HWRM)
+@@ -97,7 +97,7 @@ static int bnxt_hwrm_send_message_locked(struct bnxt *bp, void *msg,
  			if (*valid == HWRM_RESP_VALID_KEY)
  				break;
  		}

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'app/testpmd: fix csum parse-tunnel command invocation' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (16 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: reduce polling interval for valid bit' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix displaying RSS hash functions' " Luca Boccassi
                       ` (5 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Jerin Jacob; +Cc: Bernard Iremonger, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From a648fad2b0d5ad47e23bba7831892235b0b8474d Mon Sep 17 00:00:00 2001
From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Date: Tue, 2 Oct 2018 19:05:47 +0530
Subject: [PATCH] app/testpmd: fix csum parse-tunnel command invocation

[ upstream commit 5b48cd159536b70a943ae8246c2f717183818b19 ]

Based on the documentation and help print, the sub command
for csum suppose to be "parse-tunnel" instead of "parse_tunnel".

Fixes: 64fc36064dc3 ("app/testpmd: add csum parse-tunnel command")

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
 app/test-pmd/cmdline.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 7dbe2456a5..27e3757330 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -3501,7 +3501,7 @@ cmdline_parse_token_string_t cmd_csum_tunnel_csum =
 				csum, "csum");
 cmdline_parse_token_string_t cmd_csum_tunnel_parse =
 	TOKEN_STRING_INITIALIZER(struct cmd_csum_tunnel_result,
-				parse, "parse_tunnel");
+				parse, "parse-tunnel");
 cmdline_parse_token_string_t cmd_csum_tunnel_onoff =
 	TOKEN_STRING_INITIALIZER(struct cmd_csum_tunnel_result,
 				onoff, "on#off");
@@ -3513,7 +3513,7 @@ cmdline_parse_inst_t cmd_csum_tunnel = {
 	.f = cmd_csum_tunnel_parsed,
 	.data = NULL,
 	.help_str = "enable/disable parsing of tunnels for csum engine: "
-	"csum parse_tunnel on|off <tx-port>",
+	"csum parse-tunnel on|off <tx-port>",
 	.tokens = {
 		(void *)&cmd_csum_tunnel_csum,
 		(void *)&cmd_csum_tunnel_parse,
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.083064102 +0100
+++ 0019-app-testpmd-fix-csum-parse-tunnel-command-invocation.patch	2018-10-15 12:48:34.589096016 +0100
@@ -1,13 +1,14 @@
-From 5b48cd159536b70a943ae8246c2f717183818b19 Mon Sep 17 00:00:00 2001
+From a648fad2b0d5ad47e23bba7831892235b0b8474d Mon Sep 17 00:00:00 2001
 From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
 Date: Tue, 2 Oct 2018 19:05:47 +0530
 Subject: [PATCH] app/testpmd: fix csum parse-tunnel command invocation
 
+[ upstream commit 5b48cd159536b70a943ae8246c2f717183818b19 ]
+
 Based on the documentation and help print, the sub command
 for csum suppose to be "parse-tunnel" instead of "parse_tunnel".
 
 Fixes: 64fc36064dc3 ("app/testpmd: add csum parse-tunnel command")
-Cc: stable@dpdk.org
 
 Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
 Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
@@ -16,10 +17,10 @@
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
-index 0c5399dc46..3376a665cf 100644
+index 7dbe2456a5..27e3757330 100644
 --- a/app/test-pmd/cmdline.c
 +++ b/app/test-pmd/cmdline.c
-@@ -4367,7 +4367,7 @@ cmdline_parse_token_string_t cmd_csum_tunnel_csum =
+@@ -3501,7 +3501,7 @@ cmdline_parse_token_string_t cmd_csum_tunnel_csum =
  				csum, "csum");
  cmdline_parse_token_string_t cmd_csum_tunnel_parse =
  	TOKEN_STRING_INITIALIZER(struct cmd_csum_tunnel_result,
@@ -28,15 +29,15 @@
  cmdline_parse_token_string_t cmd_csum_tunnel_onoff =
  	TOKEN_STRING_INITIALIZER(struct cmd_csum_tunnel_result,
  				onoff, "on#off");
-@@ -4378,7 +4378,7 @@ cmdline_parse_token_num_t cmd_csum_tunnel_portid =
- cmdline_parse_inst_t cmd_csum_tunnel = {
+@@ -3513,7 +3513,7 @@ cmdline_parse_inst_t cmd_csum_tunnel = {
  	.f = cmd_csum_tunnel_parsed,
  	.data = NULL,
--	.help_str = "csum parse_tunnel on|off <port_id>: "
-+	.help_str = "csum parse-tunnel on|off <port_id>: "
- 		"Enable/Disable parsing of tunnels for csum engine",
+ 	.help_str = "enable/disable parsing of tunnels for csum engine: "
+-	"csum parse_tunnel on|off <tx-port>",
++	"csum parse-tunnel on|off <tx-port>",
  	.tokens = {
  		(void *)&cmd_csum_tunnel_csum,
+ 		(void *)&cmd_csum_tunnel_parse,
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'app/testpmd: fix displaying RSS hash functions' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (17 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix csum parse-tunnel command invocation' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'doc: add VFIO in ENA guide' " Luca Boccassi
                       ` (4 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: Bernard Iremonger, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From fd126c9f6d8535549005e2f312d895b6c1cca939 Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Thu, 4 Oct 2018 20:24:44 +0100
Subject: [PATCH] app/testpmd: fix displaying RSS hash functions

[ upstream commit 5b4557ec8d16859215fafe9e24d3fb7722f43b8a ]

Command shouldn't ask RSS hash functions as argument to get supported
RSS hash function, those values will be overwritten by PMD anyway.

To display configured RSS hash functions
"show port (port_id) rss-hash"

To display configured RSS hash functions and hash key
"show port (port_id) rss-hash key"

Fixes: 8205e241b2b0 ("app/testpmd: add missing type to RSS hash commands")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
 app/test-pmd/cmdline.c                      | 30 ++++-----------------
 app/test-pmd/config.c                       | 11 ++------
 app/test-pmd/testpmd.h                      |  3 +--
 doc/guides/testpmd_app_ug/testpmd_funcs.rst |  2 +-
 4 files changed, 9 insertions(+), 37 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 27e3757330..4c63eb5de6 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -190,11 +190,8 @@ static void cmd_help_long_parsed(void *parsed_result,
 			" by masks on port X. size is used to indicate the"
 			" hardware supported reta size\n\n"
 
-			"show port rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|"
-			"ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|"
-			"ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex [key]\n"
-			"    Display the RSS hash functions and RSS hash key"
-			" of port X\n\n"
+			"show port (port_id) rss-hash [key]\n"
+			"    Display the RSS hash functions and RSS hash key of port\n\n"
 
 			"clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)\n"
 			"    Clear information for port_id, or all.\n\n"
@@ -2109,8 +2106,7 @@ static void cmd_showport_rss_hash_parsed(void *parsed_result,
 {
 	struct cmd_showport_rss_hash *res = parsed_result;
 
-	port_rss_hash_conf_show(res->port_id, res->rss_type,
-				show_rss_key != NULL);
+	port_rss_hash_conf_show(res->port_id, show_rss_key != NULL);
 }
 
 cmdline_parse_token_string_t cmd_showport_rss_hash_show =
@@ -2122,29 +2118,18 @@ cmdline_parse_token_num_t cmd_showport_rss_hash_port_id =
 cmdline_parse_token_string_t cmd_showport_rss_hash_rss_hash =
 	TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, rss_hash,
 				 "rss-hash");
-cmdline_parse_token_string_t cmd_showport_rss_hash_rss_hash_info =
-	TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, rss_type,
-				 "ipv4#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#"
-				 "ipv4-other#ipv6#ipv6-frag#ipv6-tcp#ipv6-udp#"
-				 "ipv6-sctp#ipv6-other#l2-payload#ipv6-ex#"
-				 "ipv6-tcp-ex#ipv6-udp-ex");
 cmdline_parse_token_string_t cmd_showport_rss_hash_rss_key =
 	TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, key, "key");
 
 cmdline_parse_inst_t cmd_showport_rss_hash = {
 	.f = cmd_showport_rss_hash_parsed,
 	.data = NULL,
-	.help_str =
-		"show port X rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|"
-		"ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|"
-		"ipv6-sctp|ipv6-other|l2-payload|"
-		"ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex (X = port number)\n",
+	.help_str = "show port <port_id> rss-hash",
 	.tokens = {
 		(void *)&cmd_showport_rss_hash_show,
 		(void *)&cmd_showport_rss_hash_port,
 		(void *)&cmd_showport_rss_hash_port_id,
 		(void *)&cmd_showport_rss_hash_rss_hash,
-		(void *)&cmd_showport_rss_hash_rss_hash_info,
 		NULL,
 	},
 };
@@ -2152,17 +2137,12 @@ cmdline_parse_inst_t cmd_showport_rss_hash = {
 cmdline_parse_inst_t cmd_showport_rss_hash_key = {
 	.f = cmd_showport_rss_hash_parsed,
 	.data = (void *)1,
-	.help_str =
-		"show port X rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|"
-		"ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|"
-		"ipv6-sctp|ipv6-other|l2-payload|"
-		"ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex key (X = port number)\n",
+	.help_str = "show port <port_id> rss-hash key",
 	.tokens = {
 		(void *)&cmd_showport_rss_hash_show,
 		(void *)&cmd_showport_rss_hash_port,
 		(void *)&cmd_showport_rss_hash_port_id,
 		(void *)&cmd_showport_rss_hash_rss_hash,
-		(void *)&cmd_showport_rss_hash_rss_hash_info,
 		(void *)&cmd_showport_rss_hash_rss_key,
 		NULL,
 	},
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 130ff14803..f427a83069 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -1004,9 +1004,9 @@ port_rss_reta_info(portid_t port_id,
  * key of the port.
  */
 void
-port_rss_hash_conf_show(portid_t port_id, char rss_info[], int show_rss_key)
+port_rss_hash_conf_show(portid_t port_id, int show_rss_key)
 {
-	struct rte_eth_rss_conf rss_conf;
+	struct rte_eth_rss_conf rss_conf = {0};
 	uint8_t rss_key[RSS_HASH_KEY_LENGTH];
 	uint64_t rss_hf;
 	uint8_t i;
@@ -1017,7 +1017,6 @@ port_rss_hash_conf_show(portid_t port_id, char rss_info[], int show_rss_key)
 	if (port_id_is_invalid(port_id, ENABLED_WARN))
 		return;
 
-	memset(&dev_info, 0, sizeof(dev_info));
 	rte_eth_dev_info_get(port_id, &dev_info);
 	if (dev_info.hash_key_size > 0 &&
 			dev_info.hash_key_size <= sizeof(rss_key))
@@ -1027,12 +1026,6 @@ port_rss_hash_conf_show(portid_t port_id, char rss_info[], int show_rss_key)
 		return;
 	}
 
-	rss_conf.rss_hf = 0;
-	for (i = 0; i < RTE_DIM(rss_type_table); i++) {
-		if (!strcmp(rss_info, rss_type_table[i].str))
-			rss_conf.rss_hf = rss_type_table[i].rss_type;
-	}
-
 	/* Get RSS hash key if asked to display it */
 	rss_conf.rss_key = (show_rss_key) ? rss_key : NULL;
 	rss_conf.rss_key_len = hash_key_size;
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index aad598e56c..b52a19d9d4 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -579,8 +579,7 @@ int set_queue_rate_limit(portid_t port_id, uint16_t queue_idx, uint16_t rate);
 int set_vf_rate_limit(portid_t port_id, uint16_t vf, uint16_t rate,
 				uint64_t q_msk);
 
-void port_rss_hash_conf_show(portid_t port_id, char rss_info[],
-			     int show_rss_key);
+void port_rss_hash_conf_show(portid_t port_id, int show_rss_key);
 void port_rss_hash_key_update(portid_t port_id, char rss_type[],
 			      uint8_t *hash_key, uint hash_key_len);
 void get_syn_filter(uint8_t port_id);
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index a906974f72..45280c1c4c 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -201,7 +201,7 @@ show port rss-hash
 
 Display the RSS hash functions and RSS hash key of a port::
 
-   testpmd> show port (port_id) rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex [key]
+   testpmd> show port (port_id) rss-hash [key]
 
 clear port
 ~~~~~~~~~~
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.115444338 +0100
+++ 0020-app-testpmd-fix-displaying-RSS-hash-functions.patch	2018-10-15 12:48:34.601096017 +0100
@@ -1,8 +1,10 @@
-From 5b4557ec8d16859215fafe9e24d3fb7722f43b8a Mon Sep 17 00:00:00 2001
+From fd126c9f6d8535549005e2f312d895b6c1cca939 Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Thu, 4 Oct 2018 20:24:44 +0100
 Subject: [PATCH] app/testpmd: fix displaying RSS hash functions
 
+[ upstream commit 5b4557ec8d16859215fafe9e24d3fb7722f43b8a ]
+
 Command shouldn't ask RSS hash functions as argument to get supported
 RSS hash function, those values will be overwritten by PMD anyway.
 
@@ -13,22 +15,21 @@
 "show port (port_id) rss-hash key"
 
 Fixes: 8205e241b2b0 ("app/testpmd: add missing type to RSS hash commands")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
 ---
- app/test-pmd/cmdline.c                      | 28 ++++-----------------
+ app/test-pmd/cmdline.c                      | 30 ++++-----------------
  app/test-pmd/config.c                       | 11 ++------
  app/test-pmd/testpmd.h                      |  3 +--
  doc/guides/testpmd_app_ug/testpmd_funcs.rst |  2 +-
- 4 files changed, 9 insertions(+), 35 deletions(-)
+ 4 files changed, 9 insertions(+), 37 deletions(-)
 
 diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
-index 3376a665cf..6a769bb82a 100644
+index 27e3757330..4c63eb5de6 100644
 --- a/app/test-pmd/cmdline.c
 +++ b/app/test-pmd/cmdline.c
-@@ -175,11 +175,8 @@ static void cmd_help_long_parsed(void *parsed_result,
+@@ -190,11 +190,8 @@ static void cmd_help_long_parsed(void *parsed_result,
  			" by masks on port X. size is used to indicate the"
  			" hardware supported reta size\n\n"
  
@@ -42,7 +43,7 @@
  
  			"clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)\n"
  			"    Clear information for port_id, or all.\n\n"
-@@ -2904,8 +2901,7 @@ static void cmd_showport_rss_hash_parsed(void *parsed_result,
+@@ -2109,8 +2106,7 @@ static void cmd_showport_rss_hash_parsed(void *parsed_result,
  {
  	struct cmd_showport_rss_hash *res = parsed_result;
  
@@ -52,7 +53,7 @@
  }
  
  cmdline_parse_token_string_t cmd_showport_rss_hash_show =
-@@ -2917,28 +2913,18 @@ cmdline_parse_token_num_t cmd_showport_rss_hash_port_id =
+@@ -2122,29 +2118,18 @@ cmdline_parse_token_num_t cmd_showport_rss_hash_port_id =
  cmdline_parse_token_string_t cmd_showport_rss_hash_rss_hash =
  	TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, rss_hash,
  				 "rss-hash");
@@ -68,10 +69,11 @@
  cmdline_parse_inst_t cmd_showport_rss_hash = {
  	.f = cmd_showport_rss_hash_parsed,
  	.data = NULL,
--	.help_str = "show port <port_id> rss-hash "
--		"ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|"
--		"ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|"
--		"l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex",
+-	.help_str =
+-		"show port X rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|"
+-		"ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|"
+-		"ipv6-sctp|ipv6-other|l2-payload|"
+-		"ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex (X = port number)\n",
 +	.help_str = "show port <port_id> rss-hash",
  	.tokens = {
  		(void *)&cmd_showport_rss_hash_show,
@@ -82,14 +84,15 @@
  		NULL,
  	},
  };
-@@ -2946,16 +2932,12 @@ cmdline_parse_inst_t cmd_showport_rss_hash = {
+@@ -2152,17 +2137,12 @@ cmdline_parse_inst_t cmd_showport_rss_hash = {
  cmdline_parse_inst_t cmd_showport_rss_hash_key = {
  	.f = cmd_showport_rss_hash_parsed,
  	.data = (void *)1,
--	.help_str = "show port <port_id> rss-hash "
--		"ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|"
--		"ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|"
--		"l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex key",
+-	.help_str =
+-		"show port X rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|"
+-		"ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|"
+-		"ipv6-sctp|ipv6-other|l2-payload|"
+-		"ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex key (X = port number)\n",
 +	.help_str = "show port <port_id> rss-hash key",
  	.tokens = {
  		(void *)&cmd_showport_rss_hash_show,
@@ -101,10 +104,10 @@
  		NULL,
  	},
 diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
-index 057457a814..5bd14bce06 100644
+index 130ff14803..f427a83069 100644
 --- a/app/test-pmd/config.c
 +++ b/app/test-pmd/config.c
-@@ -1679,9 +1679,9 @@ port_rss_reta_info(portid_t port_id,
+@@ -1004,9 +1004,9 @@ port_rss_reta_info(portid_t port_id,
   * key of the port.
   */
  void
@@ -116,7 +119,7 @@
  	uint8_t rss_key[RSS_HASH_KEY_LENGTH];
  	uint64_t rss_hf;
  	uint8_t i;
-@@ -1692,7 +1692,6 @@ port_rss_hash_conf_show(portid_t port_id, char rss_info[], int show_rss_key)
+@@ -1017,7 +1017,6 @@ port_rss_hash_conf_show(portid_t port_id, char rss_info[], int show_rss_key)
  	if (port_id_is_invalid(port_id, ENABLED_WARN))
  		return;
  
@@ -124,12 +127,12 @@
  	rte_eth_dev_info_get(port_id, &dev_info);
  	if (dev_info.hash_key_size > 0 &&
  			dev_info.hash_key_size <= sizeof(rss_key))
-@@ -1702,12 +1701,6 @@ port_rss_hash_conf_show(portid_t port_id, char rss_info[], int show_rss_key)
+@@ -1027,12 +1026,6 @@ port_rss_hash_conf_show(portid_t port_id, char rss_info[], int show_rss_key)
  		return;
  	}
  
 -	rss_conf.rss_hf = 0;
--	for (i = 0; rss_type_table[i].str; i++) {
+-	for (i = 0; i < RTE_DIM(rss_type_table); i++) {
 -		if (!strcmp(rss_info, rss_type_table[i].str))
 -			rss_conf.rss_hf = rss_type_table[i].rss_type;
 -	}
@@ -138,10 +141,10 @@
  	rss_conf.rss_key = (show_rss_key) ? rss_key : NULL;
  	rss_conf.rss_key_len = hash_key_size;
 diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
-index ae6a5bd4ef..3cd4bbb3e8 100644
+index aad598e56c..b52a19d9d4 100644
 --- a/app/test-pmd/testpmd.h
 +++ b/app/test-pmd/testpmd.h
-@@ -716,8 +716,7 @@ int set_queue_rate_limit(portid_t port_id, uint16_t queue_idx, uint16_t rate);
+@@ -579,8 +579,7 @@ int set_queue_rate_limit(portid_t port_id, uint16_t queue_idx, uint16_t rate);
  int set_vf_rate_limit(portid_t port_id, uint16_t vf, uint16_t rate,
  				uint64_t q_msk);
  
@@ -150,12 +153,12 @@
 +void port_rss_hash_conf_show(portid_t port_id, int show_rss_key);
  void port_rss_hash_key_update(portid_t port_id, char rss_type[],
  			      uint8_t *hash_key, uint hash_key_len);
- int rx_queue_id_is_invalid(queueid_t rxq_id);
+ void get_syn_filter(uint8_t port_id);
 diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
-index 3a73000a6c..9ef2aca9ba 100644
+index a906974f72..45280c1c4c 100644
 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
 +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
-@@ -231,7 +231,7 @@ show port rss-hash
+@@ -201,7 +201,7 @@ show port rss-hash
  
  Display the RSS hash functions and RSS hash key of a port::
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'doc: add VFIO in ENA guide' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (18 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix displaying RSS hash functions' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix duplicate exit' " Luca Boccassi
                       ` (3 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Rafal Kozik; +Cc: Zorik Machulsky, Michal Krawczyk, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 19b650abdc9bb1f7eac08a8d7fcf78c8e8cf55b2 Mon Sep 17 00:00:00 2001
From: Rafal Kozik <rk@semihalf.com>
Date: Wed, 10 Oct 2018 14:08:15 +0200
Subject: [PATCH] doc: add VFIO in ENA guide

[ upstream commit 4d0155db76da10b4e549b5b8814962748bcf2192 ]

Add instruction how to bind ENA to VFIO-PCI driver.

Fixes: cf8a122c296a ("ena: introduce documentation")

Signed-off-by: Zorik Machulsky <zorik@amazon.com>
Signed-off-by: Rafal Kozik <rk@semihalf.com>
Acked-by: Michal Krawczyk <mk@semihalf.com>
---
 doc/guides/nics/ena.rst          | 15 ++++++++++++---
 doc/guides/nics/features/ena.ini |  1 +
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/doc/guides/nics/ena.rst b/doc/guides/nics/ena.rst
index 073b35ae2a..9062d7bf03 100644
--- a/doc/guides/nics/ena.rst
+++ b/doc/guides/nics/ena.rst
@@ -187,11 +187,20 @@ Prerequisites
 -------------
 
 #. Prepare the system as recommended by DPDK suite.  This includes environment
-   variables, hugepages configuration, tool-chains and configuration
+   variables, hugepages configuration, tool-chains and configuration.
 
-#. Insert igb_uio kernel module using the command 'modprobe igb_uio'
+#. ENA PMD can operate with ``vfio-pci`` or ``igb_uio`` driver.
 
-#. Bind the intended ENA device to igb_uio module
+#. Insert ``vfio-pci`` or ``igb_uio`` kernel module using the command
+   ``modprobe vfio-pci`` or ``modprobe igb_uio`` respectively.
+
+#. For ``vfio-pci`` users only:
+   Please make sure that ``IOMMU`` is enabled in your system,
+   or use ``vfio`` driver in ``noiommu`` mode::
+
+     echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
+
+#. Bind the intended ENA device to ``vfio-pci`` or ``igb_uio`` module.
 
 
 At this point the system should be ready to run DPDK applications. Once the
diff --git a/doc/guides/nics/features/ena.ini b/doc/guides/nics/features/ena.ini
index 74969fd068..d607fcc321 100644
--- a/doc/guides/nics/features/ena.ini
+++ b/doc/guides/nics/features/ena.ini
@@ -22,5 +22,6 @@ Inner L4 checksum    = Y
 Basic stats          = Y
 Extended stats       = Y
 Linux UIO            = Y
+Linux VFIO           = Y
 x86-32               = Y
 x86-64               = Y
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.152218755 +0100
+++ 0021-doc-add-VFIO-in-ENA-guide.patch	2018-10-15 12:48:34.601096017 +0100
@@ -1,12 +1,13 @@
-From 4d0155db76da10b4e549b5b8814962748bcf2192 Mon Sep 17 00:00:00 2001
+From 19b650abdc9bb1f7eac08a8d7fcf78c8e8cf55b2 Mon Sep 17 00:00:00 2001
 From: Rafal Kozik <rk@semihalf.com>
 Date: Wed, 10 Oct 2018 14:08:15 +0200
 Subject: [PATCH] doc: add VFIO in ENA guide
 
+[ upstream commit 4d0155db76da10b4e549b5b8814962748bcf2192 ]
+
 Add instruction how to bind ENA to VFIO-PCI driver.
 
 Fixes: cf8a122c296a ("ena: introduce documentation")
-Cc: stable@dpdk.org
 
 Signed-off-by: Zorik Machulsky <zorik@amazon.com>
 Signed-off-by: Rafal Kozik <rk@semihalf.com>
@@ -17,7 +18,7 @@
  2 files changed, 13 insertions(+), 3 deletions(-)
 
 diff --git a/doc/guides/nics/ena.rst b/doc/guides/nics/ena.rst
-index d19912e9b0..695960d4c9 100644
+index 073b35ae2a..9062d7bf03 100644
 --- a/doc/guides/nics/ena.rst
 +++ b/doc/guides/nics/ena.rst
 @@ -187,11 +187,20 @@ Prerequisites
@@ -45,10 +46,10 @@
  
  At this point the system should be ready to run DPDK applications. Once the
 diff --git a/doc/guides/nics/features/ena.ini b/doc/guides/nics/features/ena.ini
-index 691c1e3d37..aa6f05a714 100644
+index 74969fd068..d607fcc321 100644
 --- a/doc/guides/nics/features/ena.ini
 +++ b/doc/guides/nics/features/ena.ini
-@@ -23,5 +23,6 @@ Inner L4 checksum    = Y
+@@ -22,5 +22,6 @@ Inner L4 checksum    = Y
  Basic stats          = Y
  Extended stats       = Y
  Linux UIO            = Y

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'app/testpmd: fix duplicate exit' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (19 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'doc: add VFIO in ENA guide' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                       ` (2 subsequent siblings)
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Brian Archbold; +Cc: Bernard Iremonger, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 895cdcac16fd85ed71e3df18d571729bf19b3e58 Mon Sep 17 00:00:00 2001
From: Brian Archbold <brian.archbold@intel.com>
Date: Wed, 22 Aug 2018 07:05:06 +0100
Subject: [PATCH] app/testpmd: fix duplicate exit

[ upstream commit 27c7031e0b49abbaf13ea4c4a809a07b9282422d ]

In interactive mode, when the "quit" command is issued, pmd_test_exit()
is being called twice, once through the "quit" command and the other
after termination of prompt.

Remove duplicated exit routine by removing call from "quit" command.

Steps to reproduce:
- Run testpmd in interactive mode.
- type "quit".

Fixes: af75078fece3 ("first public release")

Signed-off-by: Brian Archbold <brian.archbold@intel.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
 app/test-pmd/cmdline.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 4c63eb5de6..7590d1bde8 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -6221,7 +6221,6 @@ static void cmd_quit_parsed(__attribute__((unused)) void *parsed_result,
 			    struct cmdline *cl,
 			    __attribute__((unused)) void *data)
 {
-	pmd_test_exit();
 	cmdline_quit(cl);
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.170617512 +0100
+++ 0022-app-testpmd-fix-duplicate-exit.patch	2018-10-15 12:48:34.613096016 +0100
@@ -1,8 +1,10 @@
-From 27c7031e0b49abbaf13ea4c4a809a07b9282422d Mon Sep 17 00:00:00 2001
+From 895cdcac16fd85ed71e3df18d571729bf19b3e58 Mon Sep 17 00:00:00 2001
 From: Brian Archbold <brian.archbold@intel.com>
 Date: Wed, 22 Aug 2018 07:05:06 +0100
 Subject: [PATCH] app/testpmd: fix duplicate exit
 
+[ upstream commit 27c7031e0b49abbaf13ea4c4a809a07b9282422d ]
+
 In interactive mode, when the "quit" command is issued, pmd_test_exit()
 is being called twice, once through the "quit" command and the other
 after termination of prompt.
@@ -14,7 +16,6 @@
 - type "quit".
 
 Fixes: af75078fece3 ("first public release")
-Cc: stable@dpdk.org
 
 Signed-off-by: Brian Archbold <brian.archbold@intel.com>
 Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
@@ -23,10 +24,10 @@
  1 file changed, 1 deletion(-)
 
 diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
-index 1b40e3fa89..dd5616d354 100644
+index 4c63eb5de6..7590d1bde8 100644
 --- a/app/test-pmd/cmdline.c
 +++ b/app/test-pmd/cmdline.c
-@@ -7670,7 +7670,6 @@ static void cmd_quit_parsed(__attribute__((unused)) void *parsed_result,
+@@ -6221,7 +6221,6 @@ static void cmd_quit_parsed(__attribute__((unused)) void *parsed_result,
  			    struct cmdline *cl,
  			    __attribute__((unused)) void *data)
  {

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (20 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix duplicate exit' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-15 11:51     ` [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' " Luca Boccassi
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Luca Boccassi; +Cc: Wei Zhao, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From f1335e795d69004b68910181960daa71bed77d82 Mon Sep 17 00:00:00 2001
From: Luca Boccassi <bluca@debian.org>
Date: Fri, 27 Jul 2018 18:26:07 +0100
Subject: [PATCH] net/e1000: do not error out if Rx drop enable is set

[ upstream commit d7812ffd83588c724d2f291f2030c9994f9d1113 ]

rx_drop_en is an optimization that does nothing on single-queue
devices like e1000. Do not force applications that do not care to
select per-devices optimizations flags by returning an error, just
log it and carry on.

Fixes: 805803445a02 ("e1000: support EM devices (also known as e1000/e1000e)")

Signed-off-by: Luca Boccassi <bluca@debian.org>
Acked-by: Wei Zhao <wei.zhao1@intel.com>
---
 drivers/net/e1000/em_rxtx.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/net/e1000/em_rxtx.c b/drivers/net/e1000/em_rxtx.c
index 41f51c0f7b..371bb62029 100644
--- a/drivers/net/e1000/em_rxtx.c
+++ b/drivers/net/e1000/em_rxtx.c
@@ -1323,12 +1323,13 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev,
 	}
 
 	/*
-	 * EM devices don't support drop_en functionality
+	 * EM devices don't support drop_en functionality.
+	 * It's an optimization that does nothing on single-queue devices,
+	 * so just log the issue and carry on.
 	 */
 	if (rx_conf->rx_drop_en) {
-		PMD_INIT_LOG(ERR, "drop_en functionality not supported by "
+		PMD_INIT_LOG(NOTICE, "drop_en functionality not supported by "
 			     "device");
-		return -EINVAL;
 	}
 
 	/* Free memory prior to re-allocation if needed. */
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.200698010 +0100
+++ 0023-net-e1000-do-not-error-out-if-Rx-drop-enable-is-set.patch	2018-10-15 12:48:34.613096016 +0100
@@ -1,15 +1,16 @@
-From d7812ffd83588c724d2f291f2030c9994f9d1113 Mon Sep 17 00:00:00 2001
+From f1335e795d69004b68910181960daa71bed77d82 Mon Sep 17 00:00:00 2001
 From: Luca Boccassi <bluca@debian.org>
 Date: Fri, 27 Jul 2018 18:26:07 +0100
 Subject: [PATCH] net/e1000: do not error out if Rx drop enable is set
 
+[ upstream commit d7812ffd83588c724d2f291f2030c9994f9d1113 ]
+
 rx_drop_en is an optimization that does nothing on single-queue
 devices like e1000. Do not force applications that do not care to
 select per-devices optimizations flags by returning an error, just
 log it and carry on.
 
 Fixes: 805803445a02 ("e1000: support EM devices (also known as e1000/e1000e)")
-Cc: stable@dpdk.org
 
 Signed-off-by: Luca Boccassi <bluca@debian.org>
 Acked-by: Wei Zhao <wei.zhao1@intel.com>
@@ -18,10 +19,10 @@
  1 file changed, 4 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/net/e1000/em_rxtx.c b/drivers/net/e1000/em_rxtx.c
-index 087e68304c..a9cd765186 100644
+index 41f51c0f7b..371bb62029 100644
 --- a/drivers/net/e1000/em_rxtx.c
 +++ b/drivers/net/e1000/em_rxtx.c
-@@ -1417,12 +1417,13 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -1323,12 +1323,13 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev,
  	}
  
  	/*

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (21 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
@ 2018-10-15 11:51     ` Luca Boccassi
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
  23 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-15 11:51 UTC (permalink / raw)
  To: Vivek Sharma; +Cc: Cristian Dumitrescu, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/17/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From c9e733e77b3207b70133b42a83207c7991d4dcb8 Mon Sep 17 00:00:00 2001
From: Vivek Sharma <vivek.sharma@caviumnetworks.com>
Date: Tue, 25 Sep 2018 09:53:06 +0000
Subject: [PATCH] eal: use correct data type for bitmap slab operations

[ upstream commit bed70e5deb1bc927c5adb375d15c1d32c6c137d8 ]

Currently, slab operations use unsigned long data type for 64-bit slab
related operations. On target 'i686-native-linuxapp-gcc', unsigned long
is 32-bit and thus, slab operations breaks on this target. Changing slab
operations to use unsigned long long for correct functioning on
all targets.

Fixes: de3cfa2c9823 ("sched: initial import")
Fixes: 693f715da45c ("remove extra parentheses in return statement")

Signed-off-by: Vivek Sharma <vivek.sharma@caviumnetworks.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
---
 lib/librte_sched/rte_bitmap.h | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/lib/librte_sched/rte_bitmap.h b/lib/librte_sched/rte_bitmap.h
index bbf4da94be..6828a7c3b0 100644
--- a/lib/librte_sched/rte_bitmap.h
+++ b/lib/librte_sched/rte_bitmap.h
@@ -116,7 +116,7 @@ __rte_bitmap_index1_inc(struct rte_bitmap *bmp)
 static inline uint64_t
 __rte_bitmap_mask1_get(struct rte_bitmap *bmp)
 {
-	return (~1lu) << bmp->offset1;
+	return (~1llu) << bmp->offset1;
 }
 
 static inline void
@@ -345,7 +345,7 @@ rte_bitmap_get(struct rte_bitmap *bmp, uint32_t pos)
 	index2 = pos >> RTE_BITMAP_SLAB_BIT_SIZE_LOG2;
 	offset2 = pos & RTE_BITMAP_SLAB_BIT_MASK;
 	slab2 = bmp->array2 + index2;
-	return (*slab2) & (1lu << offset2);
+	return (*slab2) & (1llu << offset2);
 }
 
 /**
@@ -370,8 +370,8 @@ rte_bitmap_set(struct rte_bitmap *bmp, uint32_t pos)
 	slab2 = bmp->array2 + index2;
 	slab1 = bmp->array1 + index1;
 
-	*slab2 |= 1lu << offset2;
-	*slab1 |= 1lu << offset1;
+	*slab2 |= 1llu << offset2;
+	*slab1 |= 1llu << offset1;
 }
 
 /**
@@ -398,7 +398,7 @@ rte_bitmap_set_slab(struct rte_bitmap *bmp, uint32_t pos, uint64_t slab)
 	slab1 = bmp->array1 + index1;
 
 	*slab2 |= slab;
-	*slab1 |= 1lu << offset1;
+	*slab1 |= 1llu << offset1;
 }
 
 static inline uint64_t
@@ -436,7 +436,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
 	slab2 = bmp->array2 + index2;
 
 	/* Return if array2 slab is not all-zeros */
-	*slab2 &= ~(1lu << offset2);
+	*slab2 &= ~(1llu << offset2);
 	if (*slab2){
 		return;
 	}
@@ -452,7 +452,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
 	index1 = pos >> (RTE_BITMAP_SLAB_BIT_SIZE_LOG2 + RTE_BITMAP_CL_BIT_SIZE_LOG2);
 	offset1 = (pos >> RTE_BITMAP_CL_BIT_SIZE_LOG2) & RTE_BITMAP_SLAB_BIT_MASK;
 	slab1 = bmp->array1 + index1;
-	*slab1 &= ~(1lu << offset1);
+	*slab1 &= ~(1llu << offset1);
 
 	return;
 }
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-15 12:48:35.220885343 +0100
+++ 0024-eal-use-correct-data-type-for-bitmap-slab-operations.patch	2018-10-15 12:48:34.617096016 +0100
@@ -1,8 +1,10 @@
-From bed70e5deb1bc927c5adb375d15c1d32c6c137d8 Mon Sep 17 00:00:00 2001
+From c9e733e77b3207b70133b42a83207c7991d4dcb8 Mon Sep 17 00:00:00 2001
 From: Vivek Sharma <vivek.sharma@caviumnetworks.com>
 Date: Tue, 25 Sep 2018 09:53:06 +0000
 Subject: [PATCH] eal: use correct data type for bitmap slab operations
 
+[ upstream commit bed70e5deb1bc927c5adb375d15c1d32c6c137d8 ]
+
 Currently, slab operations use unsigned long data type for 64-bit slab
 related operations. On target 'i686-native-linuxapp-gcc', unsigned long
 is 32-bit and thus, slab operations breaks on this target. Changing slab
@@ -11,20 +13,18 @@
 
 Fixes: de3cfa2c9823 ("sched: initial import")
 Fixes: 693f715da45c ("remove extra parentheses in return statement")
-Cc: stable@dpdk.org
 
 Signed-off-by: Vivek Sharma <vivek.sharma@caviumnetworks.com>
 Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
 ---
- lib/librte_eal/common/include/rte_bitmap.h | 14 +++++++-------
- test/test/test_bitmap.c                    | 18 ++++++++++++++++++
- 2 files changed, 25 insertions(+), 7 deletions(-)
-
-diff --git a/lib/librte_eal/common/include/rte_bitmap.h b/lib/librte_eal/common/include/rte_bitmap.h
-index d9facc642d..7a36ce73c6 100644
---- a/lib/librte_eal/common/include/rte_bitmap.h
-+++ b/lib/librte_eal/common/include/rte_bitmap.h
-@@ -88,7 +88,7 @@ __rte_bitmap_index1_inc(struct rte_bitmap *bmp)
+ lib/librte_sched/rte_bitmap.h | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/lib/librte_sched/rte_bitmap.h b/lib/librte_sched/rte_bitmap.h
+index bbf4da94be..6828a7c3b0 100644
+--- a/lib/librte_sched/rte_bitmap.h
++++ b/lib/librte_sched/rte_bitmap.h
+@@ -116,7 +116,7 @@ __rte_bitmap_index1_inc(struct rte_bitmap *bmp)
  static inline uint64_t
  __rte_bitmap_mask1_get(struct rte_bitmap *bmp)
  {
@@ -33,7 +33,7 @@
  }
  
  static inline void
-@@ -317,7 +317,7 @@ rte_bitmap_get(struct rte_bitmap *bmp, uint32_t pos)
+@@ -345,7 +345,7 @@ rte_bitmap_get(struct rte_bitmap *bmp, uint32_t pos)
  	index2 = pos >> RTE_BITMAP_SLAB_BIT_SIZE_LOG2;
  	offset2 = pos & RTE_BITMAP_SLAB_BIT_MASK;
  	slab2 = bmp->array2 + index2;
@@ -42,7 +42,7 @@
  }
  
  /**
-@@ -342,8 +342,8 @@ rte_bitmap_set(struct rte_bitmap *bmp, uint32_t pos)
+@@ -370,8 +370,8 @@ rte_bitmap_set(struct rte_bitmap *bmp, uint32_t pos)
  	slab2 = bmp->array2 + index2;
  	slab1 = bmp->array1 + index1;
  
@@ -53,7 +53,7 @@
  }
  
  /**
-@@ -370,7 +370,7 @@ rte_bitmap_set_slab(struct rte_bitmap *bmp, uint32_t pos, uint64_t slab)
+@@ -398,7 +398,7 @@ rte_bitmap_set_slab(struct rte_bitmap *bmp, uint32_t pos, uint64_t slab)
  	slab1 = bmp->array1 + index1;
  
  	*slab2 |= slab;
@@ -62,7 +62,7 @@
  }
  
  static inline uint64_t
-@@ -408,7 +408,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
+@@ -436,7 +436,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
  	slab2 = bmp->array2 + index2;
  
  	/* Return if array2 slab is not all-zeros */
@@ -71,7 +71,7 @@
  	if (*slab2){
  		return;
  	}
-@@ -424,7 +424,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
+@@ -452,7 +452,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
  	index1 = pos >> (RTE_BITMAP_SLAB_BIT_SIZE_LOG2 + RTE_BITMAP_CL_BIT_SIZE_LOG2);
  	offset1 = (pos >> RTE_BITMAP_CL_BIT_SIZE_LOG2) & RTE_BITMAP_SLAB_BIT_MASK;
  	slab1 = bmp->array1 + index1;
@@ -80,42 +80,6 @@
  
  	return;
  }
-diff --git a/test/test/test_bitmap.c b/test/test/test_bitmap.c
-index c3169e9d55..95c5184882 100644
---- a/test/test/test_bitmap.c
-+++ b/test/test/test_bitmap.c
-@@ -101,6 +101,7 @@ test_bitmap_slab_set_get(struct rte_bitmap *bmp)
- static int
- test_bitmap_set_get_clear(struct rte_bitmap *bmp)
- {
-+	uint64_t val;
- 	int i;
- 
- 	rte_bitmap_reset(bmp);
-@@ -124,6 +125,23 @@ test_bitmap_set_get_clear(struct rte_bitmap *bmp)
- 		}
- 	}
- 
-+	rte_bitmap_reset(bmp);
-+
-+	/* Alternate slab set test */
-+	for (i = 0; i < MAX_BITS; i++) {
-+		if (i % RTE_BITMAP_SLAB_BIT_SIZE)
-+			rte_bitmap_set(bmp, i);
-+	}
-+
-+	for (i = 0; i < MAX_BITS; i++) {
-+		val = rte_bitmap_get(bmp, i);
-+		if (((i % RTE_BITMAP_SLAB_BIT_SIZE) && !val) ||
-+		    (!(i % RTE_BITMAP_SLAB_BIT_SIZE) && val)) {
-+			printf("Failed to get set bit.\n");
-+			return TEST_FAILED;
-+		}
-+	}
-+
- 	return TEST_SUCCESS;
- }
- 
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' has been queued to LTS release 16.11.9
  2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
                       ` (22 preceding siblings ...)
  2018-10-15 11:51     ` [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' " Luca Boccassi
@ 2018-10-29 12:53     ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' " Luca Boccassi
                         ` (18 more replies)
  23 siblings, 19 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Luca Boccassi; +Cc: Wei Zhao, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From f1335e795d69004b68910181960daa71bed77d82 Mon Sep 17 00:00:00 2001
From: Luca Boccassi <bluca@debian.org>
Date: Fri, 27 Jul 2018 18:26:07 +0100
Subject: [PATCH] net/e1000: do not error out if Rx drop enable is set

[ upstream commit d7812ffd83588c724d2f291f2030c9994f9d1113 ]

rx_drop_en is an optimization that does nothing on single-queue
devices like e1000. Do not force applications that do not care to
select per-devices optimizations flags by returning an error, just
log it and carry on.

Fixes: 805803445a02 ("e1000: support EM devices (also known as e1000/e1000e)")

Signed-off-by: Luca Boccassi <bluca@debian.org>
Acked-by: Wei Zhao <wei.zhao1@intel.com>
---
 drivers/net/e1000/em_rxtx.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/net/e1000/em_rxtx.c b/drivers/net/e1000/em_rxtx.c
index 41f51c0f7..371bb6202 100644
--- a/drivers/net/e1000/em_rxtx.c
+++ b/drivers/net/e1000/em_rxtx.c
@@ -1323,12 +1323,13 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev,
 	}
 
 	/*
-	 * EM devices don't support drop_en functionality
+	 * EM devices don't support drop_en functionality.
+	 * It's an optimization that does nothing on single-queue devices,
+	 * so just log the issue and carry on.
 	 */
 	if (rx_conf->rx_drop_en) {
-		PMD_INIT_LOG(ERR, "drop_en functionality not supported by "
+		PMD_INIT_LOG(NOTICE, "drop_en functionality not supported by "
 			     "device");
-		return -EINVAL;
 	}
 
 	/* Free memory prior to re-allocation if needed. */
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.494019792 +0000
+++ 0001-net-e1000-do-not-error-out-if-Rx-drop-enable-is-set.patch	2018-10-29 12:48:14.426417982 +0000
@@ -1,15 +1,16 @@
-From d7812ffd83588c724d2f291f2030c9994f9d1113 Mon Sep 17 00:00:00 2001
+From f1335e795d69004b68910181960daa71bed77d82 Mon Sep 17 00:00:00 2001
 From: Luca Boccassi <bluca@debian.org>
 Date: Fri, 27 Jul 2018 18:26:07 +0100
 Subject: [PATCH] net/e1000: do not error out if Rx drop enable is set
 
+[ upstream commit d7812ffd83588c724d2f291f2030c9994f9d1113 ]
+
 rx_drop_en is an optimization that does nothing on single-queue
 devices like e1000. Do not force applications that do not care to
 select per-devices optimizations flags by returning an error, just
 log it and carry on.
 
 Fixes: 805803445a02 ("e1000: support EM devices (also known as e1000/e1000e)")
-Cc: stable@dpdk.org
 
 Signed-off-by: Luca Boccassi <bluca@debian.org>
 Acked-by: Wei Zhao <wei.zhao1@intel.com>
@@ -18,10 +19,10 @@
  1 file changed, 4 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/net/e1000/em_rxtx.c b/drivers/net/e1000/em_rxtx.c
-index 087e68304..a9cd76518 100644
+index 41f51c0f7..371bb6202 100644
 --- a/drivers/net/e1000/em_rxtx.c
 +++ b/drivers/net/e1000/em_rxtx.c
-@@ -1417,12 +1417,13 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -1323,12 +1323,13 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev,
  	}
  
  	/*

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'vhost: fix payload size of reply' " Luca Boccassi
                         ` (17 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Vivek Sharma; +Cc: Cristian Dumitrescu, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From c9e733e77b3207b70133b42a83207c7991d4dcb8 Mon Sep 17 00:00:00 2001
From: Vivek Sharma <vivek.sharma@caviumnetworks.com>
Date: Tue, 25 Sep 2018 09:53:06 +0000
Subject: [PATCH] eal: use correct data type for bitmap slab operations

[ upstream commit bed70e5deb1bc927c5adb375d15c1d32c6c137d8 ]

Currently, slab operations use unsigned long data type for 64-bit slab
related operations. On target 'i686-native-linuxapp-gcc', unsigned long
is 32-bit and thus, slab operations breaks on this target. Changing slab
operations to use unsigned long long for correct functioning on
all targets.

Fixes: de3cfa2c9823 ("sched: initial import")
Fixes: 693f715da45c ("remove extra parentheses in return statement")

Signed-off-by: Vivek Sharma <vivek.sharma@caviumnetworks.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
---
 lib/librte_sched/rte_bitmap.h | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/lib/librte_sched/rte_bitmap.h b/lib/librte_sched/rte_bitmap.h
index bbf4da94b..6828a7c3b 100644
--- a/lib/librte_sched/rte_bitmap.h
+++ b/lib/librte_sched/rte_bitmap.h
@@ -116,7 +116,7 @@ __rte_bitmap_index1_inc(struct rte_bitmap *bmp)
 static inline uint64_t
 __rte_bitmap_mask1_get(struct rte_bitmap *bmp)
 {
-	return (~1lu) << bmp->offset1;
+	return (~1llu) << bmp->offset1;
 }
 
 static inline void
@@ -345,7 +345,7 @@ rte_bitmap_get(struct rte_bitmap *bmp, uint32_t pos)
 	index2 = pos >> RTE_BITMAP_SLAB_BIT_SIZE_LOG2;
 	offset2 = pos & RTE_BITMAP_SLAB_BIT_MASK;
 	slab2 = bmp->array2 + index2;
-	return (*slab2) & (1lu << offset2);
+	return (*slab2) & (1llu << offset2);
 }
 
 /**
@@ -370,8 +370,8 @@ rte_bitmap_set(struct rte_bitmap *bmp, uint32_t pos)
 	slab2 = bmp->array2 + index2;
 	slab1 = bmp->array1 + index1;
 
-	*slab2 |= 1lu << offset2;
-	*slab1 |= 1lu << offset1;
+	*slab2 |= 1llu << offset2;
+	*slab1 |= 1llu << offset1;
 }
 
 /**
@@ -398,7 +398,7 @@ rte_bitmap_set_slab(struct rte_bitmap *bmp, uint32_t pos, uint64_t slab)
 	slab1 = bmp->array1 + index1;
 
 	*slab2 |= slab;
-	*slab1 |= 1lu << offset1;
+	*slab1 |= 1llu << offset1;
 }
 
 static inline uint64_t
@@ -436,7 +436,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
 	slab2 = bmp->array2 + index2;
 
 	/* Return if array2 slab is not all-zeros */
-	*slab2 &= ~(1lu << offset2);
+	*slab2 &= ~(1llu << offset2);
 	if (*slab2){
 		return;
 	}
@@ -452,7 +452,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
 	index1 = pos >> (RTE_BITMAP_SLAB_BIT_SIZE_LOG2 + RTE_BITMAP_CL_BIT_SIZE_LOG2);
 	offset1 = (pos >> RTE_BITMAP_CL_BIT_SIZE_LOG2) & RTE_BITMAP_SLAB_BIT_MASK;
 	slab1 = bmp->array1 + index1;
-	*slab1 &= ~(1lu << offset1);
+	*slab1 &= ~(1llu << offset1);
 
 	return;
 }
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.513736056 +0000
+++ 0002-eal-use-correct-data-type-for-bitmap-slab-operations.patch	2018-10-29 12:48:14.430417982 +0000
@@ -1,8 +1,10 @@
-From bed70e5deb1bc927c5adb375d15c1d32c6c137d8 Mon Sep 17 00:00:00 2001
+From c9e733e77b3207b70133b42a83207c7991d4dcb8 Mon Sep 17 00:00:00 2001
 From: Vivek Sharma <vivek.sharma@caviumnetworks.com>
 Date: Tue, 25 Sep 2018 09:53:06 +0000
 Subject: [PATCH] eal: use correct data type for bitmap slab operations
 
+[ upstream commit bed70e5deb1bc927c5adb375d15c1d32c6c137d8 ]
+
 Currently, slab operations use unsigned long data type for 64-bit slab
 related operations. On target 'i686-native-linuxapp-gcc', unsigned long
 is 32-bit and thus, slab operations breaks on this target. Changing slab
@@ -11,20 +13,18 @@
 
 Fixes: de3cfa2c9823 ("sched: initial import")
 Fixes: 693f715da45c ("remove extra parentheses in return statement")
-Cc: stable@dpdk.org
 
 Signed-off-by: Vivek Sharma <vivek.sharma@caviumnetworks.com>
 Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
 ---
- lib/librte_eal/common/include/rte_bitmap.h | 14 +++++++-------
- test/test/test_bitmap.c                    | 18 ++++++++++++++++++
- 2 files changed, 25 insertions(+), 7 deletions(-)
-
-diff --git a/lib/librte_eal/common/include/rte_bitmap.h b/lib/librte_eal/common/include/rte_bitmap.h
-index d9facc642..7a36ce73c 100644
---- a/lib/librte_eal/common/include/rte_bitmap.h
-+++ b/lib/librte_eal/common/include/rte_bitmap.h
-@@ -88,7 +88,7 @@ __rte_bitmap_index1_inc(struct rte_bitmap *bmp)
+ lib/librte_sched/rte_bitmap.h | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/lib/librte_sched/rte_bitmap.h b/lib/librte_sched/rte_bitmap.h
+index bbf4da94b..6828a7c3b 100644
+--- a/lib/librte_sched/rte_bitmap.h
++++ b/lib/librte_sched/rte_bitmap.h
+@@ -116,7 +116,7 @@ __rte_bitmap_index1_inc(struct rte_bitmap *bmp)
  static inline uint64_t
  __rte_bitmap_mask1_get(struct rte_bitmap *bmp)
  {
@@ -33,7 +33,7 @@
  }
  
  static inline void
-@@ -317,7 +317,7 @@ rte_bitmap_get(struct rte_bitmap *bmp, uint32_t pos)
+@@ -345,7 +345,7 @@ rte_bitmap_get(struct rte_bitmap *bmp, uint32_t pos)
  	index2 = pos >> RTE_BITMAP_SLAB_BIT_SIZE_LOG2;
  	offset2 = pos & RTE_BITMAP_SLAB_BIT_MASK;
  	slab2 = bmp->array2 + index2;
@@ -42,7 +42,7 @@
  }
  
  /**
-@@ -342,8 +342,8 @@ rte_bitmap_set(struct rte_bitmap *bmp, uint32_t pos)
+@@ -370,8 +370,8 @@ rte_bitmap_set(struct rte_bitmap *bmp, uint32_t pos)
  	slab2 = bmp->array2 + index2;
  	slab1 = bmp->array1 + index1;
  
@@ -53,7 +53,7 @@
  }
  
  /**
-@@ -370,7 +370,7 @@ rte_bitmap_set_slab(struct rte_bitmap *bmp, uint32_t pos, uint64_t slab)
+@@ -398,7 +398,7 @@ rte_bitmap_set_slab(struct rte_bitmap *bmp, uint32_t pos, uint64_t slab)
  	slab1 = bmp->array1 + index1;
  
  	*slab2 |= slab;
@@ -62,7 +62,7 @@
  }
  
  static inline uint64_t
-@@ -408,7 +408,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
+@@ -436,7 +436,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
  	slab2 = bmp->array2 + index2;
  
  	/* Return if array2 slab is not all-zeros */
@@ -71,7 +71,7 @@
  	if (*slab2){
  		return;
  	}
-@@ -424,7 +424,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
+@@ -452,7 +452,7 @@ rte_bitmap_clear(struct rte_bitmap *bmp, uint32_t pos)
  	index1 = pos >> (RTE_BITMAP_SLAB_BIT_SIZE_LOG2 + RTE_BITMAP_CL_BIT_SIZE_LOG2);
  	offset1 = (pos >> RTE_BITMAP_CL_BIT_SIZE_LOG2) & RTE_BITMAP_SLAB_BIT_MASK;
  	slab1 = bmp->array1 + index1;
@@ -80,42 +80,6 @@
  
  	return;
  }
-diff --git a/test/test/test_bitmap.c b/test/test/test_bitmap.c
-index c3169e9d5..95c518488 100644
---- a/test/test/test_bitmap.c
-+++ b/test/test/test_bitmap.c
-@@ -101,6 +101,7 @@ test_bitmap_slab_set_get(struct rte_bitmap *bmp)
- static int
- test_bitmap_set_get_clear(struct rte_bitmap *bmp)
- {
-+	uint64_t val;
- 	int i;
- 
- 	rte_bitmap_reset(bmp);
-@@ -124,6 +125,23 @@ test_bitmap_set_get_clear(struct rte_bitmap *bmp)
- 		}
- 	}
- 
-+	rte_bitmap_reset(bmp);
-+
-+	/* Alternate slab set test */
-+	for (i = 0; i < MAX_BITS; i++) {
-+		if (i % RTE_BITMAP_SLAB_BIT_SIZE)
-+			rte_bitmap_set(bmp, i);
-+	}
-+
-+	for (i = 0; i < MAX_BITS; i++) {
-+		val = rte_bitmap_get(bmp, i);
-+		if (((i % RTE_BITMAP_SLAB_BIT_SIZE) && !val) ||
-+		    (!(i % RTE_BITMAP_SLAB_BIT_SIZE) && val)) {
-+			printf("Failed to get set bit.\n");
-+			return TEST_FAILED;
-+		}
-+	}
-+
- 	return TEST_SUCCESS;
- }
- 
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'vhost: fix payload size of reply' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 13:12         ` Ilya Maximets
  2018-10-29 12:53       ` [dpdk-stable] patch 'kvargs: fix processing a null list' " Luca Boccassi
                         ` (16 subsequent siblings)
  18 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Maxime Coquelin; +Cc: Ilya Maximets, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 2fb95d184bf2b7715c9e2696059d41fd044a2d88 Mon Sep 17 00:00:00 2001
From: Maxime Coquelin <maxime.coquelin@redhat.com>
Date: Fri, 12 Oct 2018 14:40:32 +0200
Subject: [PATCH] vhost: fix payload size of reply

[ upstream commit 57b4d90b5893db2678ca3e28c50e1fcd37bb9b91 ]

QEMU doesn't expect any payload for the reply of
VHOST_USER_SET_LOG_BASE request, so don't send any.
Note that the Vhost-user specification isn't clear about
it and would need to be fixed.

Fixes: 54f9e32305d4 ("vhost: handle dirty pages logging request")

Reported-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Acked-by: Ilya Maximets <i.maximets@samsung.com>
---
 lib/librte_vhost/vhost_user.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index f3b286e72..a88f19aae 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -911,6 +911,12 @@ vhost_user_set_log_base(struct virtio_net *dev, struct VhostUserMsg *msg)
 	dev->log_base = dev->log_addr + off;
 	dev->log_size = size;
 
+	/*
+	 * The spec is not clear about it (yet), but QEMU doesn't expect
+	 * any payload in the reply.
+	 */
+	msg->size = 0;
+
 	return 0;
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.532685254 +0000
+++ 0003-vhost-fix-payload-size-of-reply.patch	2018-10-29 12:48:14.430417982 +0000
@@ -1,40 +1,41 @@
-From 57b4d90b5893db2678ca3e28c50e1fcd37bb9b91 Mon Sep 17 00:00:00 2001
+From 2fb95d184bf2b7715c9e2696059d41fd044a2d88 Mon Sep 17 00:00:00 2001
 From: Maxime Coquelin <maxime.coquelin@redhat.com>
 Date: Fri, 12 Oct 2018 14:40:32 +0200
 Subject: [PATCH] vhost: fix payload size of reply
 
+[ upstream commit 57b4d90b5893db2678ca3e28c50e1fcd37bb9b91 ]
+
 QEMU doesn't expect any payload for the reply of
 VHOST_USER_SET_LOG_BASE request, so don't send any.
 Note that the Vhost-user specification isn't clear about
 it and would need to be fixed.
 
 Fixes: 54f9e32305d4 ("vhost: handle dirty pages logging request")
-Cc: stable@dpdk.org
 
 Reported-by: Ilya Maximets <i.maximets@samsung.com>
 Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
 Acked-by: Ilya Maximets <i.maximets@samsung.com>
 ---
- lib/librte_vhost/vhost_user.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
+ lib/librte_vhost/vhost_user.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
-index a7729990d..1ef02c943 100644
+index f3b286e72..a88f19aae 100644
 --- a/lib/librte_vhost/vhost_user.c
 +++ b/lib/librte_vhost/vhost_user.c
-@@ -1286,7 +1286,11 @@ vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg)
+@@ -911,6 +911,12 @@ vhost_user_set_log_base(struct virtio_net *dev, struct VhostUserMsg *msg)
  	dev->log_base = dev->log_addr + off;
  	dev->log_size = size;
  
--	msg->size = sizeof(msg->payload.u64);
 +	/*
 +	 * The spec is not clear about it (yet), but QEMU doesn't expect
 +	 * any payload in the reply.
 +	 */
 +	msg->size = 0;
- 
- 	return VH_RESULT_REPLY;
++
+ 	return 0;
  }
+ 
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'kvargs: fix processing a null list' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' " Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'vhost: fix payload size of reply' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'test/hash: fix bucket size in perf test' " Luca Boccassi
                         ` (15 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: Olivier Matz, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From c547a6a0841ab3d1d2c547b719a539916b4b766a Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Tue, 23 Oct 2018 18:01:40 +0200
Subject: [PATCH] kvargs: fix processing a null list

[ upstream commit 25495407cbda028f7f6d5cce38f78e609cf970e1 ]

In the doxygen description of rte_kvargs_process(), it is said:
	If *kvlist* is NULL function does nothing.
It has been added by mistake here instead of rte_kvargs_free().
Anyway, null list should be correctly handled in both functions.

Comments are fixed in both functions and NULL handling is added
to rte_kvargs_process().

Fixes: c34af7424e09 ("kvargs: fix freeing behaviour for null")

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
---
 lib/librte_kvargs/rte_kvargs.c | 3 +++
 lib/librte_kvargs/rte_kvargs.h | 7 +++----
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c
index 5504c6df3..476b8c1d1 100644
--- a/lib/librte_kvargs/rte_kvargs.c
+++ b/lib/librte_kvargs/rte_kvargs.c
@@ -160,6 +160,9 @@ rte_kvargs_process(const struct rte_kvargs *kvlist,
 	const struct rte_kvargs_pair *pair;
 	unsigned i;
 
+	if (kvlist == NULL)
+		return 0;
+
 	for (i = 0; i < kvlist->count; i++) {
 		pair = &kvlist->pairs[i];
 		if (key_match == NULL || strcmp(pair->key, key_match) == 0) {
diff --git a/lib/librte_kvargs/rte_kvargs.h b/lib/librte_kvargs/rte_kvargs.h
index ae9ae79f2..83363a8db 100644
--- a/lib/librte_kvargs/rte_kvargs.h
+++ b/lib/librte_kvargs/rte_kvargs.h
@@ -106,7 +106,7 @@ struct rte_kvargs *rte_kvargs_parse(const char *args, const char *valid_keys[]);
  * rte_kvargs_parse().
  *
  * @param kvlist
- *   The rte_kvargs structure
+ *   The rte_kvargs structure. No error if NULL.
  */
 void rte_kvargs_free(struct rte_kvargs *kvlist);
 
@@ -115,11 +115,10 @@ void rte_kvargs_free(struct rte_kvargs *kvlist);
  *
  * For each key/value association that matches the given key, calls the
  * handler function with the for a given arg_name passing the value on the
- * dictionary for that key and a given extra argument. If *kvlist* is NULL
- * function does nothing.
+ * dictionary for that key and a given extra argument.
  *
  * @param kvlist
- *   The rte_kvargs structure
+ *   The rte_kvargs structure. No error if NULL.
  * @param key_match
  *   The key on which the handler should be called, or NULL to process handler
  *   on all associations
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.550518315 +0000
+++ 0004-kvargs-fix-processing-a-null-list.patch	2018-10-29 12:48:14.434417982 +0000
@@ -1,8 +1,10 @@
-From 25495407cbda028f7f6d5cce38f78e609cf970e1 Mon Sep 17 00:00:00 2001
+From c547a6a0841ab3d1d2c547b719a539916b4b766a Mon Sep 17 00:00:00 2001
 From: Thomas Monjalon <thomas@monjalon.net>
 Date: Tue, 23 Oct 2018 18:01:40 +0200
 Subject: [PATCH] kvargs: fix processing a null list
 
+[ upstream commit 25495407cbda028f7f6d5cce38f78e609cf970e1 ]
+
 In the doxygen description of rte_kvargs_process(), it is said:
 	If *kvlist* is NULL function does nothing.
 It has been added by mistake here instead of rte_kvargs_free().
@@ -12,7 +14,6 @@
 to rte_kvargs_process().
 
 Fixes: c34af7424e09 ("kvargs: fix freeing behaviour for null")
-Cc: stable@dpdk.org
 
 Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
 Acked-by: Olivier Matz <olivier.matz@6wind.com>
@@ -22,10 +23,10 @@
  2 files changed, 6 insertions(+), 4 deletions(-)
 
 diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c
-index a28f76945..7ec1ea57f 100644
+index 5504c6df3..476b8c1d1 100644
 --- a/lib/librte_kvargs/rte_kvargs.c
 +++ b/lib/librte_kvargs/rte_kvargs.c
-@@ -120,6 +120,9 @@ rte_kvargs_process(const struct rte_kvargs *kvlist,
+@@ -160,6 +160,9 @@ rte_kvargs_process(const struct rte_kvargs *kvlist,
  	const struct rte_kvargs_pair *pair;
  	unsigned i;
  
@@ -36,10 +37,10 @@
  		pair = &kvlist->pairs[i];
  		if (key_match == NULL || strcmp(pair->key, key_match) == 0) {
 diff --git a/lib/librte_kvargs/rte_kvargs.h b/lib/librte_kvargs/rte_kvargs.h
-index fc041956e..1946195de 100644
+index ae9ae79f2..83363a8db 100644
 --- a/lib/librte_kvargs/rte_kvargs.h
 +++ b/lib/librte_kvargs/rte_kvargs.h
-@@ -110,7 +110,7 @@ struct rte_kvargs *rte_kvargs_parse_delim(const char *args,
+@@ -106,7 +106,7 @@ struct rte_kvargs *rte_kvargs_parse(const char *args, const char *valid_keys[]);
   * rte_kvargs_parse().
   *
   * @param kvlist
@@ -48,7 +49,7 @@
   */
  void rte_kvargs_free(struct rte_kvargs *kvlist);
  
-@@ -119,11 +119,10 @@ void rte_kvargs_free(struct rte_kvargs *kvlist);
+@@ -115,11 +115,10 @@ void rte_kvargs_free(struct rte_kvargs *kvlist);
   *
   * For each key/value association that matches the given key, calls the
   * handler function with the for a given arg_name passing the value on the

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'test/hash: fix bucket size in perf test' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (2 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'kvargs: fix processing a null list' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'hash: fix key store element alignment' " Luca Boccassi
                         ` (14 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Yipeng Wang; +Cc: Bruce Richardson, Honnappa Nagarahalli, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 84a8bcf5118a58ab7b8c3c5912d13f3b650ae4cc Mon Sep 17 00:00:00 2001
From: Yipeng Wang <yipeng1.wang@intel.com>
Date: Fri, 28 Sep 2018 07:11:05 -0700
Subject: [PATCH] test/hash: fix bucket size in perf test

[ upstream commit b772a15eb84ce616114880a20ad6ad91bb8970fc ]

The bucket size was changed from 4 to 8 but the corresponding
perf test was not changed accordingly.

In the test, the bucket size and number of buckets are used
to map to the underneath rte_hash structure. They are used
to test performance of two conditions: keys in primary
buckets only and keys in both primary and secondary buckets.

Although there is no functional issue with bucket size set
to 4, it mismatches the underneath rte_hash structure,
which may affect code readability and future extension.

Fixes: 58017c98ed53 ("hash: add vectorized comparison")

Signed-off-by: Yipeng Wang <yipeng1.wang@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
---
 app/test/test_hash_perf.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/test/test_hash_perf.c b/app/test/test_hash_perf.c
index c0051b20f..b0514b104 100644
--- a/app/test/test_hash_perf.c
+++ b/app/test/test_hash_perf.c
@@ -49,7 +49,8 @@
 #define MAX_ENTRIES (1 << 19)
 #define KEYS_TO_ADD (MAX_ENTRIES * 3 / 4) /* 75% table utilization */
 #define NUM_LOOKUPS (KEYS_TO_ADD * 5) /* Loop among keys added, several times */
-#define BUCKET_SIZE 4
+/* BUCKET_SIZE should be same as RTE_HASH_BUCKET_ENTRIES in rte_hash library */
+#define BUCKET_SIZE 8
 #define NUM_BUCKETS (MAX_ENTRIES / BUCKET_SIZE)
 #define MAX_KEYSIZE 64
 #define NUM_KEYSIZES 10
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.568269644 +0000
+++ 0005-test-hash-fix-bucket-size-in-perf-test.patch	2018-10-29 12:48:14.434417982 +0000
@@ -1,8 +1,10 @@
-From b772a15eb84ce616114880a20ad6ad91bb8970fc Mon Sep 17 00:00:00 2001
+From 84a8bcf5118a58ab7b8c3c5912d13f3b650ae4cc Mon Sep 17 00:00:00 2001
 From: Yipeng Wang <yipeng1.wang@intel.com>
 Date: Fri, 28 Sep 2018 07:11:05 -0700
 Subject: [PATCH] test/hash: fix bucket size in perf test
 
+[ upstream commit b772a15eb84ce616114880a20ad6ad91bb8970fc ]
+
 The bucket size was changed from 4 to 8 but the corresponding
 perf test was not changed accordingly.
 
@@ -16,20 +18,19 @@
 which may affect code readability and future extension.
 
 Fixes: 58017c98ed53 ("hash: add vectorized comparison")
-Cc: stable@dpdk.org
 
 Signed-off-by: Yipeng Wang <yipeng1.wang@intel.com>
 Acked-by: Bruce Richardson <bruce.richardson@intel.com>
 Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
 ---
- test/test/test_hash_perf.c | 3 ++-
+ app/test/test_hash_perf.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
-diff --git a/test/test/test_hash_perf.c b/test/test/test_hash_perf.c
-index 33dcb9fcf..fe116326d 100644
---- a/test/test/test_hash_perf.c
-+++ b/test/test/test_hash_perf.c
-@@ -20,7 +20,8 @@
+diff --git a/app/test/test_hash_perf.c b/app/test/test_hash_perf.c
+index c0051b20f..b0514b104 100644
+--- a/app/test/test_hash_perf.c
++++ b/app/test/test_hash_perf.c
+@@ -49,7 +49,8 @@
  #define MAX_ENTRIES (1 << 19)
  #define KEYS_TO_ADD (MAX_ENTRIES * 3 / 4) /* 75% table utilization */
  #define NUM_LOOKUPS (KEYS_TO_ADD * 5) /* Loop among keys added, several times */

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'hash: fix key store element alignment' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (3 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'test/hash: fix bucket size in perf test' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix build on Linux 4.19' " Luca Boccassi
                         ` (13 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Honnappa Nagarahalli
  Cc: Gavin Hu, Ola Liljedahl, Steve Capper, Yipeng Wang,
	Bruce Richardson, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 92e21e2bfb1b8dacc4aeb19514090ccb194bff60 Mon Sep 17 00:00:00 2001
From: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Date: Fri, 26 Oct 2018 00:37:31 -0500
Subject: [PATCH] hash: fix key store element alignment

[ upstream commit dbdbc4a2e9c4b67247ef2f6556debe7522b5d2e4 ]

Fix the key store array element alignment such that every array
element is aligned on KEY_ALIGNMENT boundary. This is required to
make 'pdata' in 'struct rte_hash_key' align on its natural boundary
for atomic load/store.

Fixes: 473d1bebce43 ("hash: allow to store data in hash table")

Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Gavin Hu <gavin.hu@arm.com>
Reviewed-by: Ola Liljedahl <ola.liljedahl@arm.com>
Reviewed-by: Steve Capper <steve.capper@arm.com>
Reviewed-by: Yipeng Wang <yipeng1.wang@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
 lib/librte_hash/rte_cuckoo_hash.c | 4 +++-
 lib/librte_hash/rte_cuckoo_hash.h | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c
index 049ff9884..5aaa6ccd0 100644
--- a/lib/librte_hash/rte_cuckoo_hash.c
+++ b/lib/librte_hash/rte_cuckoo_hash.c
@@ -212,7 +212,9 @@ rte_hash_create(const struct rte_hash_parameters *params)
 		goto err_unlock;
 	}
 
-	const uint32_t key_entry_size = sizeof(struct rte_hash_key) + params->key_len;
+	const uint32_t key_entry_size =
+		RTE_ALIGN(sizeof(struct rte_hash_key) + params->key_len,
+			  KEY_ALIGNMENT);
 	const uint64_t key_tbl_size = (uint64_t) key_entry_size * num_key_slots;
 
 	k = rte_zmalloc_socket(NULL, key_tbl_size,
diff --git a/lib/librte_hash/rte_cuckoo_hash.h b/lib/librte_hash/rte_cuckoo_hash.h
index 1b8ffed8e..dae3f4a3c 100644
--- a/lib/librte_hash/rte_cuckoo_hash.h
+++ b/lib/librte_hash/rte_cuckoo_hash.h
@@ -161,7 +161,7 @@ struct rte_hash_key {
 	};
 	/* Variable key size */
 	char key[0];
-} __attribute__((aligned(KEY_ALIGNMENT)));
+};
 
 /* All different signature compare functions */
 enum rte_hash_sig_compare_function {
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.585131127 +0000
+++ 0006-hash-fix-key-store-element-alignment.patch	2018-10-29 12:48:14.438417982 +0000
@@ -1,15 +1,16 @@
-From dbdbc4a2e9c4b67247ef2f6556debe7522b5d2e4 Mon Sep 17 00:00:00 2001
+From 92e21e2bfb1b8dacc4aeb19514090ccb194bff60 Mon Sep 17 00:00:00 2001
 From: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
 Date: Fri, 26 Oct 2018 00:37:31 -0500
 Subject: [PATCH] hash: fix key store element alignment
 
+[ upstream commit dbdbc4a2e9c4b67247ef2f6556debe7522b5d2e4 ]
+
 Fix the key store array element alignment such that every array
 element is aligned on KEY_ALIGNMENT boundary. This is required to
 make 'pdata' in 'struct rte_hash_key' align on its natural boundary
 for atomic load/store.
 
 Fixes: 473d1bebce43 ("hash: allow to store data in hash table")
-Cc: stable@dpdk.org
 
 Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
 Reviewed-by: Gavin Hu <gavin.hu@arm.com>
@@ -23,11 +24,11 @@
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c
-index e08739370..d79ba68fd 100644
+index 049ff9884..5aaa6ccd0 100644
 --- a/lib/librte_hash/rte_cuckoo_hash.c
 +++ b/lib/librte_hash/rte_cuckoo_hash.c
-@@ -279,7 +279,9 @@ rte_hash_create(const struct rte_hash_parameters *params)
- 			rte_ring_sp_enqueue(r_ext, (void *)((uintptr_t) i));
+@@ -212,7 +212,9 @@ rte_hash_create(const struct rte_hash_parameters *params)
+ 		goto err_unlock;
  	}
  
 -	const uint32_t key_entry_size = sizeof(struct rte_hash_key) + params->key_len;
@@ -38,10 +39,10 @@
  
  	k = rte_zmalloc_socket(NULL, key_tbl_size,
 diff --git a/lib/librte_hash/rte_cuckoo_hash.h b/lib/librte_hash/rte_cuckoo_hash.h
-index ff9518184..601b2ce78 100644
+index 1b8ffed8e..dae3f4a3c 100644
 --- a/lib/librte_hash/rte_cuckoo_hash.h
 +++ b/lib/librte_hash/rte_cuckoo_hash.h
-@@ -123,7 +123,7 @@ struct rte_hash_key {
+@@ -161,7 +161,7 @@ struct rte_hash_key {
  	};
  	/* Variable key size */
  	char key[0];

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'kni: fix build on Linux 4.19' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (4 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'hash: fix key store element alignment' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix kernel FIFO synchronization' " Luca Boccassi
                         ` (12 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 6cc6f74aae02c67c993f0409cbe754b7f9c959c9 Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Wed, 24 Oct 2018 12:10:10 +0100
Subject: [PATCH] kni: fix build on Linux 4.19
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

[ upstream commit a9460a0b2efb80a913d8770dc188e816b227622f ]

The build error observed with Linux kernel 4.19 when KNI ethtool
support enabled (CONFIG_RTE_KNI_KMOD_ETHTOOL=y)

.../build/build/kernel/linux/kni/kni_ethtool.c:193:3:
   error: ‘struct ethtool_ops’ has no member named ‘get_settings’;
  .get_settings  = kni_get_settings,
   ^~~~~~~~~~~~

.../build/build/kernel/linux/kni/kni_ethtool.c:194:3:
   error: ‘struct ethtool_ops’ has no member named ‘set_settings’;
  .set_settings  = kni_set_settings,
   ^~~~~~~~~~~~

With kernel 4.19 ethtool_ops `get_settings` & `set_settings` are
replaced with `get_link_ksettings` & `set_link_ksettings`
Commit 9b3004953503 ("ethtool: drop get_settings and set_settings callbacks")

This fix practically removes `get_settings` & `set_settings` support
for the kernel versions that have the new ethtool_ops without
implementing the new ones.

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c  |  8 ++++++++
 lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h      |  2 ++
 .../linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c         |  8 ++++++++
 lib/librte_eal/linuxapp/kni/kni_ethtool.c              | 10 ++++++++++
 4 files changed, 28 insertions(+)

diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c
index 1110bef87..272f3096a 100644
--- a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c
+++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c
@@ -150,6 +150,7 @@ static const char igb_gstrings_test[][ETH_GSTRING_LEN] = {
 #define IGB_TEST_LEN (sizeof(igb_gstrings_test) / ETH_GSTRING_LEN)
 #endif /* ETHTOOL_TEST */
 
+#ifndef ETHTOOL_GLINKSETTINGS
 static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
 {
 	struct igb_adapter *adapter = netdev_priv(netdev);
@@ -274,7 +275,9 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
 #endif /* ETH_TP_MDI_X */
 	return 0;
 }
+#endif
 
+#ifndef ETHTOOL_SLINKSETTINGS
 static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
 {
 	struct igb_adapter *adapter = netdev_priv(netdev);
@@ -379,6 +382,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
 	clear_bit(__IGB_RESETTING, &adapter->state);
 	return 0;
 }
+#endif
 
 static u32 igb_get_link(struct net_device *netdev)
 {
@@ -2752,8 +2756,12 @@ static int igb_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
 #endif /* ETHTOOL_GRXRINGS */
 
 static const struct ethtool_ops igb_ethtool_ops = {
+#ifndef ETHTOOL_GLINKSETTINGS
 	.get_settings           = igb_get_settings,
+#endif
+#ifndef ETHTOOL_SLINKSETTINGS
 	.set_settings           = igb_set_settings,
+#endif
 	.get_drvinfo            = igb_get_drvinfo,
 	.get_regs_len           = igb_get_regs_len,
 	.get_regs               = igb_get_regs,
diff --git a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h
index 59415469c..cc3f8ea41 100644
--- a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h
+++ b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h
@@ -905,8 +905,10 @@ s32 ixgbe_dcb_hw_ets(struct ixgbe_hw *hw, struct ieee_ets *ets, int max_frame);
 #endif /* CONFIG_DCB */
 
 extern void ixgbe_clean_rx_ring(struct ixgbe_ring *rx_ring);
+#ifndef ETHTOOL_GLINKSETTINGS
 extern int ixgbe_get_settings(struct net_device *netdev,
 			      struct ethtool_cmd *ecmd);
+#endif
 extern int ixgbe_write_uc_addr_list(struct ixgbe_adapter *adapter,
 			    struct net_device *netdev, unsigned int vfn);
 extern void ixgbe_full_sync_mac_table(struct ixgbe_adapter *adapter);
diff --git a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c
index bc3cb2f48..8e3f25875 100644
--- a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c
+++ b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c
@@ -173,6 +173,7 @@ static const char ixgbe_gstrings_test[][ETH_GSTRING_LEN] = {
 #define IXGBE_TEST_LEN	(sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN)
 #endif /* ETHTOOL_TEST */
 
+#ifndef ETHTOOL_GLINKSETTINGS
 int ixgbe_get_settings(struct net_device *netdev,
 		       struct ethtool_cmd *ecmd)
 {
@@ -362,7 +363,9 @@ int ixgbe_get_settings(struct net_device *netdev,
 
 	return 0;
 }
+#endif
 
+#ifndef ETHTOOL_SLINKSETTINGS
 static int ixgbe_set_settings(struct net_device *netdev,
 			      struct ethtool_cmd *ecmd)
 {
@@ -406,6 +409,7 @@ static int ixgbe_set_settings(struct net_device *netdev,
 	}
 	return err;
 }
+#endif
 
 static void ixgbe_get_pauseparam(struct net_device *netdev,
 				 struct ethtool_pauseparam *pause)
@@ -2830,8 +2834,12 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
 #endif /* ETHTOOL_GRXRINGS */
 //static
 struct ethtool_ops ixgbe_ethtool_ops = {
+#ifndef ETHTOOL_GLINKSETTINGS
 	.get_settings		= ixgbe_get_settings,
+#endif
+#ifndef ETHTOOL_SLINKSETTINGS
 	.set_settings		= ixgbe_set_settings,
+#endif
 	.get_drvinfo		= ixgbe_get_drvinfo,
 	.get_regs_len		= ixgbe_get_regs_len,
 	.get_regs		= ixgbe_get_regs,
diff --git a/lib/librte_eal/linuxapp/kni/kni_ethtool.c b/lib/librte_eal/linuxapp/kni/kni_ethtool.c
index 0c88589c9..8174e98db 100644
--- a/lib/librte_eal/linuxapp/kni/kni_ethtool.c
+++ b/lib/librte_eal/linuxapp/kni/kni_ethtool.c
@@ -46,6 +46,8 @@ kni_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
 	priv->lad_dev->ethtool_ops->get_drvinfo(priv->lad_dev, info);
 }
 
+/* ETHTOOL_GLINKSETTINGS replaces ETHTOOL_GSET */
+#ifndef ETHTOOL_GLINKSETTINGS
 static int
 kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
 {
@@ -53,7 +55,10 @@ kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
 
 	return priv->lad_dev->ethtool_ops->get_settings(priv->lad_dev, ecmd);
 }
+#endif
 
+/* ETHTOOL_SLINKSETTINGS replaces ETHTOOL_SSET */
+#ifndef ETHTOOL_SLINKSETTINGS
 static int
 kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
 {
@@ -61,6 +66,7 @@ kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
 
 	return priv->lad_dev->ethtool_ops->set_settings(priv->lad_dev, ecmd);
 }
+#endif
 
 static void
 kni_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
@@ -209,8 +215,12 @@ kni_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats,
 struct ethtool_ops kni_ethtool_ops = {
 	.begin			= kni_check_if_running,
 	.get_drvinfo		= kni_get_drvinfo,
+#ifndef ETHTOOL_GLINKSETTINGS
 	.get_settings		= kni_get_settings,
+#endif
+#ifndef ETHTOOL_SLINKSETTINGS
 	.set_settings		= kni_set_settings,
+#endif
 	.get_regs_len		= kni_get_regs_len,
 	.get_regs		= kni_get_regs,
 	.get_wol		= kni_get_wol,
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.603230045 +0000
+++ 0007-kni-fix-build-on-Linux-4.19.patch	2018-10-29 12:48:14.442417982 +0000
@@ -1,4 +1,4 @@
-From a9460a0b2efb80a913d8770dc188e816b227622f Mon Sep 17 00:00:00 2001
+From 6cc6f74aae02c67c993f0409cbe754b7f9c959c9 Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Wed, 24 Oct 2018 12:10:10 +0100
 Subject: [PATCH] kni: fix build on Linux 4.19
@@ -6,6 +6,8 @@
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
+[ upstream commit a9460a0b2efb80a913d8770dc188e816b227622f ]
+
 The build error observed with Linux kernel 4.19 when KNI ethtool
 support enabled (CONFIG_RTE_KNI_KMOD_ETHTOOL=y)
 
@@ -29,17 +31,17 @@
 
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 ---
- kernel/linux/kni/ethtool/igb/igb_ethtool.c     |  8 ++++++++
- kernel/linux/kni/ethtool/ixgbe/ixgbe.h         |  2 ++
- kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.c |  8 ++++++++
- kernel/linux/kni/kni_ethtool.c                 | 10 ++++++++++
+ lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c  |  8 ++++++++
+ lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h      |  2 ++
+ .../linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c         |  8 ++++++++
+ lib/librte_eal/linuxapp/kni/kni_ethtool.c              | 10 ++++++++++
  4 files changed, 28 insertions(+)
 
-diff --git a/kernel/linux/kni/ethtool/igb/igb_ethtool.c b/kernel/linux/kni/ethtool/igb/igb_ethtool.c
-index 002f75c48..b6bddc025 100644
---- a/kernel/linux/kni/ethtool/igb/igb_ethtool.c
-+++ b/kernel/linux/kni/ethtool/igb/igb_ethtool.c
-@@ -135,6 +135,7 @@ static const char igb_gstrings_test[][ETH_GSTRING_LEN] = {
+diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c
+index 1110bef87..272f3096a 100644
+--- a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c
++++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c
+@@ -150,6 +150,7 @@ static const char igb_gstrings_test[][ETH_GSTRING_LEN] = {
  #define IGB_TEST_LEN (sizeof(igb_gstrings_test) / ETH_GSTRING_LEN)
  #endif /* ETHTOOL_TEST */
  
@@ -47,7 +49,7 @@
  static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
  {
  	struct igb_adapter *adapter = netdev_priv(netdev);
-@@ -259,7 +260,9 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+@@ -274,7 +275,9 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
  #endif /* ETH_TP_MDI_X */
  	return 0;
  }
@@ -57,7 +59,7 @@
  static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
  {
  	struct igb_adapter *adapter = netdev_priv(netdev);
-@@ -364,6 +367,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+@@ -379,6 +382,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
  	clear_bit(__IGB_RESETTING, &adapter->state);
  	return 0;
  }
@@ -65,7 +67,7 @@
  
  static u32 igb_get_link(struct net_device *netdev)
  {
-@@ -2737,8 +2741,12 @@ static int igb_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
+@@ -2752,8 +2756,12 @@ static int igb_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
  #endif /* ETHTOOL_GRXRINGS */
  
  static const struct ethtool_ops igb_ethtool_ops = {
@@ -78,11 +80,11 @@
  	.get_drvinfo            = igb_get_drvinfo,
  	.get_regs_len           = igb_get_regs_len,
  	.get_regs               = igb_get_regs,
-diff --git a/kernel/linux/kni/ethtool/ixgbe/ixgbe.h b/kernel/linux/kni/ethtool/ixgbe/ixgbe.h
-index 6ff941334..cc15ec6ab 100644
---- a/kernel/linux/kni/ethtool/ixgbe/ixgbe.h
-+++ b/kernel/linux/kni/ethtool/ixgbe/ixgbe.h
-@@ -890,8 +890,10 @@ s32 ixgbe_dcb_hw_ets(struct ixgbe_hw *hw, struct ieee_ets *ets, int max_frame);
+diff --git a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h
+index 59415469c..cc3f8ea41 100644
+--- a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h
++++ b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe.h
+@@ -905,8 +905,10 @@ s32 ixgbe_dcb_hw_ets(struct ixgbe_hw *hw, struct ieee_ets *ets, int max_frame);
  #endif /* CONFIG_DCB */
  
  extern void ixgbe_clean_rx_ring(struct ixgbe_ring *rx_ring);
@@ -93,11 +95,11 @@
  extern int ixgbe_write_uc_addr_list(struct ixgbe_adapter *adapter,
  			    struct net_device *netdev, unsigned int vfn);
  extern void ixgbe_full_sync_mac_table(struct ixgbe_adapter *adapter);
-diff --git a/kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.c b/kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.c
-index 44cdc9f20..f2ded19e9 100644
---- a/kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.c
-+++ b/kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.c
-@@ -158,6 +158,7 @@ static const char ixgbe_gstrings_test[][ETH_GSTRING_LEN] = {
+diff --git a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c
+index bc3cb2f48..8e3f25875 100644
+--- a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c
++++ b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c
+@@ -173,6 +173,7 @@ static const char ixgbe_gstrings_test[][ETH_GSTRING_LEN] = {
  #define IXGBE_TEST_LEN	(sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN)
  #endif /* ETHTOOL_TEST */
  
@@ -105,7 +107,7 @@
  int ixgbe_get_settings(struct net_device *netdev,
  		       struct ethtool_cmd *ecmd)
  {
-@@ -347,7 +348,9 @@ int ixgbe_get_settings(struct net_device *netdev,
+@@ -362,7 +363,9 @@ int ixgbe_get_settings(struct net_device *netdev,
  
  	return 0;
  }
@@ -115,7 +117,7 @@
  static int ixgbe_set_settings(struct net_device *netdev,
  			      struct ethtool_cmd *ecmd)
  {
-@@ -391,6 +394,7 @@ static int ixgbe_set_settings(struct net_device *netdev,
+@@ -406,6 +409,7 @@ static int ixgbe_set_settings(struct net_device *netdev,
  	}
  	return err;
  }
@@ -123,7 +125,7 @@
  
  static void ixgbe_get_pauseparam(struct net_device *netdev,
  				 struct ethtool_pauseparam *pause)
-@@ -2815,8 +2819,12 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
+@@ -2830,8 +2834,12 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
  #endif /* ETHTOOL_GRXRINGS */
  //static
  struct ethtool_ops ixgbe_ethtool_ops = {
@@ -136,11 +138,11 @@
  	.get_drvinfo		= ixgbe_get_drvinfo,
  	.get_regs_len		= ixgbe_get_regs_len,
  	.get_regs		= ixgbe_get_regs,
-diff --git a/kernel/linux/kni/kni_ethtool.c b/kernel/linux/kni/kni_ethtool.c
-index a44e7d949..b1c84f8f0 100644
---- a/kernel/linux/kni/kni_ethtool.c
-+++ b/kernel/linux/kni/kni_ethtool.c
-@@ -27,6 +27,8 @@ kni_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
+diff --git a/lib/librte_eal/linuxapp/kni/kni_ethtool.c b/lib/librte_eal/linuxapp/kni/kni_ethtool.c
+index 0c88589c9..8174e98db 100644
+--- a/lib/librte_eal/linuxapp/kni/kni_ethtool.c
++++ b/lib/librte_eal/linuxapp/kni/kni_ethtool.c
+@@ -46,6 +46,8 @@ kni_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
  	priv->lad_dev->ethtool_ops->get_drvinfo(priv->lad_dev, info);
  }
  
@@ -149,7 +151,7 @@
  static int
  kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
  {
-@@ -34,7 +36,10 @@ kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
+@@ -53,7 +55,10 @@ kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
  
  	return priv->lad_dev->ethtool_ops->get_settings(priv->lad_dev, ecmd);
  }
@@ -160,7 +162,7 @@
  static int
  kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
  {
-@@ -42,6 +47,7 @@ kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
+@@ -61,6 +66,7 @@ kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
  
  	return priv->lad_dev->ethtool_ops->set_settings(priv->lad_dev, ecmd);
  }
@@ -168,7 +170,7 @@
  
  static void
  kni_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
-@@ -190,8 +196,12 @@ kni_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats,
+@@ -209,8 +215,12 @@ kni_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats,
  struct ethtool_ops kni_ethtool_ops = {
  	.begin			= kni_check_if_running,
  	.get_drvinfo		= kni_get_drvinfo,

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'kni: fix kernel FIFO synchronization' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (5 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix build on Linux 4.19' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'test/kni: check module dependency' " Luca Boccassi
                         ` (11 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Phil Yang; +Cc: Honnappa Nagarahalli, Gavin Hu, Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 20b679d293476cef90725fbd4b0ea912dfa78a78 Mon Sep 17 00:00:00 2001
From: Phil Yang <phil.yang@arm.com>
Date: Mon, 8 Oct 2018 17:11:45 +0800
Subject: [PATCH] kni: fix kernel FIFO synchronization

[ upstream commit 711859cd0d076c7abc0c96ce637129a03280645f ]

Adding memory barrier to make sure the values being synced
before updating fifo_write in kni_fifo_put and fifo_read in
kni_fifo_get.

Fixes: 3fc5ca2f6352 ("kni: initial import")

Signed-off-by: Phil Yang <phil.yang@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Gavin Hu <gavin.hu@arm.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 .../eal/include/exec-env/rte_kni_common.h        |  1 +
 lib/librte_eal/linuxapp/kni/kni_fifo.h           | 16 ++++++++++------
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
index 09713b0c2..1dc161c2b 100644
--- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
+++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
@@ -61,6 +61,7 @@
 
 #ifdef __KERNEL__
 #include <linux/if.h>
+#include <asm/barrier.h>
 #define RTE_STD_C11
 #else
 #include <rte_common.h>
diff --git a/lib/librte_eal/linuxapp/kni/kni_fifo.h b/lib/librte_eal/linuxapp/kni/kni_fifo.h
index 025ec1c94..7f1d32c54 100644
--- a/lib/librte_eal/linuxapp/kni/kni_fifo.h
+++ b/lib/librte_eal/linuxapp/kni/kni_fifo.h
@@ -35,7 +35,7 @@ kni_fifo_put(struct rte_kni_fifo *fifo, void **data, uint32_t num)
 {
 	uint32_t i = 0;
 	uint32_t fifo_write = fifo->write;
-	uint32_t fifo_read = fifo->read;
+	uint32_t fifo_read = smp_load_acquire(&fifo->read);
 	uint32_t new_write = fifo_write;
 
 	for (i = 0; i < num; i++) {
@@ -46,7 +46,7 @@ kni_fifo_put(struct rte_kni_fifo *fifo, void **data, uint32_t num)
 		fifo->buffer[fifo_write] = data[i];
 		fifo_write = new_write;
 	}
-	fifo->write = fifo_write;
+	smp_store_release(&fifo->write, fifo_write);
 
 	return i;
 }
@@ -59,7 +59,7 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
 {
 	uint32_t i = 0;
 	uint32_t new_read = fifo->read;
-	uint32_t fifo_write = fifo->write;
+	uint32_t fifo_write = smp_load_acquire(&fifo->write);
 
 	for (i = 0; i < num; i++) {
 		if (new_read == fifo_write)
@@ -68,7 +68,7 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
 		data[i] = fifo->buffer[new_read];
 		new_read = (new_read + 1) & (fifo->len - 1);
 	}
-	fifo->read = new_read;
+	smp_store_release(&fifo->read, new_read);
 
 	return i;
 }
@@ -79,7 +79,9 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
 static inline uint32_t
 kni_fifo_count(struct rte_kni_fifo *fifo)
 {
-	return (fifo->len + fifo->write - fifo->read) & (fifo->len - 1);
+	uint32_t fifo_write = smp_load_acquire(&fifo->write);
+	uint32_t fifo_read = smp_load_acquire(&fifo->read);
+	return (fifo->len + fifo_write - fifo_read) & (fifo->len - 1);
 }
 
 /**
@@ -88,7 +90,9 @@ kni_fifo_count(struct rte_kni_fifo *fifo)
 static inline uint32_t
 kni_fifo_free_count(struct rte_kni_fifo *fifo)
 {
-	return (fifo->read - fifo->write - 1) & (fifo->len - 1);
+	uint32_t fifo_write = smp_load_acquire(&fifo->write);
+	uint32_t fifo_read = smp_load_acquire(&fifo->read);
+	return (fifo_read - fifo_write - 1) & (fifo->len - 1);
 }
 
 #ifdef RTE_KNI_VHOST
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.625349364 +0000
+++ 0008-kni-fix-kernel-FIFO-synchronization.patch	2018-10-29 12:48:14.446417982 +0000
@@ -1,29 +1,42 @@
-From 711859cd0d076c7abc0c96ce637129a03280645f Mon Sep 17 00:00:00 2001
+From 20b679d293476cef90725fbd4b0ea912dfa78a78 Mon Sep 17 00:00:00 2001
 From: Phil Yang <phil.yang@arm.com>
 Date: Mon, 8 Oct 2018 17:11:45 +0800
 Subject: [PATCH] kni: fix kernel FIFO synchronization
 
+[ upstream commit 711859cd0d076c7abc0c96ce637129a03280645f ]
+
 Adding memory barrier to make sure the values being synced
 before updating fifo_write in kni_fifo_put and fifo_read in
 kni_fifo_get.
 
 Fixes: 3fc5ca2f6352 ("kni: initial import")
-Cc: stable@dpdk.org
 
 Signed-off-by: Phil Yang <phil.yang@arm.com>
 Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
 Reviewed-by: Gavin Hu <gavin.hu@arm.com>
 Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
 ---
- kernel/linux/kni/kni_fifo.h                      | 16 ++++++++++------
  .../eal/include/exec-env/rte_kni_common.h        |  1 +
+ lib/librte_eal/linuxapp/kni/kni_fifo.h           | 16 ++++++++++------
  2 files changed, 11 insertions(+), 6 deletions(-)
 
-diff --git a/kernel/linux/kni/kni_fifo.h b/kernel/linux/kni/kni_fifo.h
-index 9a4762de2..2cb3a4a7b 100644
---- a/kernel/linux/kni/kni_fifo.h
-+++ b/kernel/linux/kni/kni_fifo.h
-@@ -16,7 +16,7 @@ kni_fifo_put(struct rte_kni_fifo *fifo, void **data, uint32_t num)
+diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
+index 09713b0c2..1dc161c2b 100644
+--- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
++++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
+@@ -61,6 +61,7 @@
+ 
+ #ifdef __KERNEL__
+ #include <linux/if.h>
++#include <asm/barrier.h>
+ #define RTE_STD_C11
+ #else
+ #include <rte_common.h>
+diff --git a/lib/librte_eal/linuxapp/kni/kni_fifo.h b/lib/librte_eal/linuxapp/kni/kni_fifo.h
+index 025ec1c94..7f1d32c54 100644
+--- a/lib/librte_eal/linuxapp/kni/kni_fifo.h
++++ b/lib/librte_eal/linuxapp/kni/kni_fifo.h
+@@ -35,7 +35,7 @@ kni_fifo_put(struct rte_kni_fifo *fifo, void **data, uint32_t num)
  {
  	uint32_t i = 0;
  	uint32_t fifo_write = fifo->write;
@@ -32,7 +45,7 @@
  	uint32_t new_write = fifo_write;
  
  	for (i = 0; i < num; i++) {
-@@ -27,7 +27,7 @@ kni_fifo_put(struct rte_kni_fifo *fifo, void **data, uint32_t num)
+@@ -46,7 +46,7 @@ kni_fifo_put(struct rte_kni_fifo *fifo, void **data, uint32_t num)
  		fifo->buffer[fifo_write] = data[i];
  		fifo_write = new_write;
  	}
@@ -41,7 +54,7 @@
  
  	return i;
  }
-@@ -40,7 +40,7 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
+@@ -59,7 +59,7 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
  {
  	uint32_t i = 0;
  	uint32_t new_read = fifo->read;
@@ -50,7 +63,7 @@
  
  	for (i = 0; i < num; i++) {
  		if (new_read == fifo_write)
-@@ -49,7 +49,7 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
+@@ -68,7 +68,7 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
  		data[i] = fifo->buffer[new_read];
  		new_read = (new_read + 1) & (fifo->len - 1);
  	}
@@ -59,7 +72,7 @@
  
  	return i;
  }
-@@ -60,7 +60,9 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
+@@ -79,7 +79,9 @@ kni_fifo_get(struct rte_kni_fifo *fifo, void **data, uint32_t num)
  static inline uint32_t
  kni_fifo_count(struct rte_kni_fifo *fifo)
  {
@@ -70,7 +83,7 @@
  }
  
  /**
-@@ -69,7 +71,9 @@ kni_fifo_count(struct rte_kni_fifo *fifo)
+@@ -88,7 +90,9 @@ kni_fifo_count(struct rte_kni_fifo *fifo)
  static inline uint32_t
  kni_fifo_free_count(struct rte_kni_fifo *fifo)
  {
@@ -80,19 +93,7 @@
 +	return (fifo_read - fifo_write - 1) & (fifo->len - 1);
  }
  
- #endif /* _KNI_FIFO_H_ */
-diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
-index cfa9448bd..58e8533be 100644
---- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
-+++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
-@@ -8,6 +8,7 @@
- 
- #ifdef __KERNEL__
- #include <linux/if.h>
-+#include <asm/barrier.h>
- #define RTE_STD_C11
- #else
- #include <rte_common.h>
+ #ifdef RTE_KNI_VHOST
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'test/kni: check module dependency' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (6 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix kernel FIFO synchronization' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'hash: remove unnecessary pause' " Luca Boccassi
                         ` (10 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Naga Suresh Somarowthu; +Cc: Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 4761c9cab239f8d7961e762f9cdda91700272cd2 Mon Sep 17 00:00:00 2001
From: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
Date: Fri, 14 Sep 2018 14:57:02 +0100
Subject: [PATCH] test/kni: check module dependency

[ upstream commit ee1caebc4dea6ae59ef60d2e3cc75338c213207d ]

Check the prerequisites to run the test
1.checked whether the rte_kni module is loaded, if not fail testcase
2.checked whether the rte_kni module is loaded with loop back mode,
  if not skip packet forwarding testcase and log
3.Disabled the test in freebsd as test is not supported

Fixes: 5233e5924a ("app/test: update kni")

Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 app/test/test_kni.c | 48 +++++++++++++++++++++++++++++++++++----------
 1 file changed, 38 insertions(+), 10 deletions(-)

diff --git a/app/test/test_kni.c b/app/test/test_kni.c
index db17fdf30..c6e34d40f 100644
--- a/app/test/test_kni.c
+++ b/app/test/test_kni.c
@@ -36,6 +36,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <sys/wait.h>
+#include <dirent.h>
 
 #include "test.h"
 
@@ -57,6 +58,8 @@
 
 #define IFCONFIG      "/sbin/ifconfig "
 #define TEST_KNI_PORT "test_kni_port"
+#define KNI_MODULE_PATH "/sys/module/rte_kni"
+#define KNI_MODULE_PARAM_LO KNI_MODULE_PATH"/parameters/lo_mode"
 #define KNI_TEST_MAX_PORTS 4
 /* The threshold number of mbufs to be transmitted or received. */
 #define KNI_NUM_MBUF_THRESHOLD 100
@@ -472,13 +475,28 @@ static int
 test_kni(void)
 {
 	int ret = -1;
-	uint8_t nb_ports, port_id;
+	uint8_t port_id;
 	struct rte_kni *kni;
 	struct rte_mempool *mp;
 	struct rte_kni_conf conf;
 	struct rte_eth_dev_info info;
 	struct rte_kni_ops ops;
 
+	FILE *fd;
+	DIR *dir;
+	char buf[16];
+
+	dir = opendir(KNI_MODULE_PATH);
+	if (!dir) {
+		if (errno == ENOENT) {
+			printf("Cannot run UT due to missing rte_kni module\n");
+			return -1;
+		}
+		printf("opendir: %s", strerror(errno));
+		return -1;
+	}
+	closedir(dir);
+
 	/* Initialize KNI subsytem */
 	rte_kni_init(KNI_TEST_MAX_PORTS);
 
@@ -493,12 +511,6 @@ test_kni(void)
 		return -1;
 	}
 
-	nb_ports = rte_eth_dev_count();
-	if (nb_ports == 0) {
-		printf("no supported nic port found\n");
-		return -1;
-	}
-
 	/* configuring port 0 for the test is enough */
 	port_id = 0;
 	ret = rte_eth_dev_configure(port_id, 1, 1, &port_conf);
@@ -527,9 +539,25 @@ test_kni(void)
 	rte_eth_promiscuous_enable(port_id);
 
 	/* basic test of kni processing */
-	ret = test_kni_processing(port_id, mp);
-	if (ret < 0)
-		goto fail;
+	fd = fopen(KNI_MODULE_PARAM_LO, "r");
+	if (fd == NULL) {
+		printf("fopen: %s", strerror(errno));
+		return -1;
+	}
+	memset(&buf, 0, sizeof(buf));
+	if (fgets(buf, sizeof(buf), fd)) {
+		if (!strncmp(buf, "lo_mode_fifo", strlen("lo_mode_fifo")) ||
+			!strncmp(buf, "lo_mode_fifo_skb",
+				  strlen("lo_mode_fifo_skb"))) {
+			ret = test_kni_processing(port_id, mp);
+			if (ret < 0) {
+				fclose(fd);
+				goto fail;
+			}
+		} else
+			printf("test_kni_processing skipped because of missing rte_kni module lo_mode argument\n");
+	}
+	fclose(fd);
 
 	/* test of allocating KNI with NULL mempool pointer */
 	memset(&info, 0, sizeof(info));
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.642845895 +0000
+++ 0009-test-kni-check-module-dependency.patch	2018-10-29 12:48:14.446417982 +0000
@@ -1,8 +1,10 @@
-From ee1caebc4dea6ae59ef60d2e3cc75338c213207d Mon Sep 17 00:00:00 2001
+From 4761c9cab239f8d7961e762f9cdda91700272cd2 Mon Sep 17 00:00:00 2001
 From: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
 Date: Fri, 14 Sep 2018 14:57:02 +0100
 Subject: [PATCH] test/kni: check module dependency
 
+[ upstream commit ee1caebc4dea6ae59ef60d2e3cc75338c213207d ]
+
 Check the prerequisites to run the test
 1.checked whether the rte_kni module is loaded, if not fail testcase
 2.checked whether the rte_kni module is loaded with loop back mode,
@@ -10,19 +12,18 @@
 3.Disabled the test in freebsd as test is not supported
 
 Fixes: 5233e5924a ("app/test: update kni")
-Cc: stable@dpdk.org
 
 Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
 Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
 ---
- test/test/test_kni.c | 49 ++++++++++++++++++++++++++++++++++----------
- 1 file changed, 38 insertions(+), 11 deletions(-)
+ app/test/test_kni.c | 48 +++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 38 insertions(+), 10 deletions(-)
 
-diff --git a/test/test/test_kni.c b/test/test/test_kni.c
-index e38206905..f3c19b5a0 100644
---- a/test/test/test_kni.c
-+++ b/test/test/test_kni.c
-@@ -7,10 +7,11 @@
+diff --git a/app/test/test_kni.c b/app/test/test_kni.c
+index db17fdf30..c6e34d40f 100644
+--- a/app/test/test_kni.c
++++ b/app/test/test_kni.c
+@@ -36,6 +36,7 @@
  #include <unistd.h>
  #include <string.h>
  #include <sys/wait.h>
@@ -30,12 +31,7 @@
  
  #include "test.h"
  
--#ifndef RTE_LIBRTE_KNI
-+#if !defined(RTE_EXEC_ENV_LINUXAPP) || !defined(RTE_LIBRTE_KNI)
- 
- static int
- test_kni(void)
-@@ -40,6 +41,8 @@ test_kni(void)
+@@ -57,6 +58,8 @@
  
  #define IFCONFIG      "/sbin/ifconfig "
  #define TEST_KNI_PORT "test_kni_port"
@@ -44,19 +40,18 @@
  #define KNI_TEST_MAX_PORTS 4
  /* The threshold number of mbufs to be transmitted or received. */
  #define KNI_NUM_MBUF_THRESHOLD 100
-@@ -530,7 +533,7 @@ static int
+@@ -472,13 +475,28 @@ static int
  test_kni(void)
  {
  	int ret = -1;
--	uint16_t nb_ports, port_id;
-+	uint16_t port_id;
+-	uint8_t nb_ports, port_id;
++	uint8_t port_id;
  	struct rte_kni *kni;
  	struct rte_mempool *mp;
  	struct rte_kni_conf conf;
-@@ -538,6 +541,20 @@ test_kni(void)
+ 	struct rte_eth_dev_info info;
  	struct rte_kni_ops ops;
- 	const struct rte_pci_device *pci_dev;
- 	const struct rte_bus *bus;
+ 
 +	FILE *fd;
 +	DIR *dir;
 +	char buf[16];
@@ -71,14 +66,15 @@
 +		return -1;
 +	}
 +	closedir(dir);
- 
++
  	/* Initialize KNI subsytem */
  	rte_kni_init(KNI_TEST_MAX_PORTS);
-@@ -553,12 +570,6 @@ test_kni(void)
+ 
+@@ -493,12 +511,6 @@ test_kni(void)
  		return -1;
  	}
  
--	nb_ports = rte_eth_dev_count_avail();
+-	nb_ports = rte_eth_dev_count();
 -	if (nb_ports == 0) {
 -		printf("no supported nic port found\n");
 -		return -1;
@@ -87,7 +83,7 @@
  	/* configuring port 0 for the test is enough */
  	port_id = 0;
  	ret = rte_eth_dev_configure(port_id, 1, 1, &port_conf);
-@@ -587,9 +598,25 @@ test_kni(void)
+@@ -527,9 +539,25 @@ test_kni(void)
  	rte_eth_promiscuous_enable(port_id);
  
  	/* basic test of kni processing */

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'hash: remove unnecessary pause' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (7 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'test/kni: check module dependency' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix build on Linux < 3.14' " Luca Boccassi
                         ` (9 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Yipeng Wang; +Cc: Bruce Richardson, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 4992ddc0bf16e7d290542bc8258b07b844707e69 Mon Sep 17 00:00:00 2001
From: Yipeng Wang <yipeng1.wang@intel.com>
Date: Fri, 26 Oct 2018 02:53:41 -0700
Subject: [PATCH] hash: remove unnecessary pause

[ upstream commit 2d28bb5ddd0fb7c3bed44f3f3fbc7a7bc449ea7a ]

There is a rte_pause in hash table reset function.
Since the loop is not a polling loop on shared
data structure, the rte_pause is not needed.

Fixes: b26473ff8f4a ("hash: add reset function")

Signed-off-by: Yipeng Wang <yipeng1.wang@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
 lib/librte_hash/rte_cuckoo_hash.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c
index 5aaa6ccd0..2414c7f2d 100644
--- a/lib/librte_hash/rte_cuckoo_hash.c
+++ b/lib/librte_hash/rte_cuckoo_hash.c
@@ -407,7 +407,7 @@ rte_hash_reset(struct rte_hash *h)
 
 	/* clear the free ring */
 	while (rte_ring_dequeue(h->free_slots, &ptr) == 0)
-		rte_pause();
+		continue;
 
 	/* Repopulate the free slots ring. Entry zero is reserved for key misses */
 	if (h->hw_trans_mem_support)
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.660503844 +0000
+++ 0010-hash-remove-unnecessary-pause.patch	2018-10-29 12:48:14.446417982 +0000
@@ -1,50 +1,35 @@
-From 2d28bb5ddd0fb7c3bed44f3f3fbc7a7bc449ea7a Mon Sep 17 00:00:00 2001
+From 4992ddc0bf16e7d290542bc8258b07b844707e69 Mon Sep 17 00:00:00 2001
 From: Yipeng Wang <yipeng1.wang@intel.com>
 Date: Fri, 26 Oct 2018 02:53:41 -0700
 Subject: [PATCH] hash: remove unnecessary pause
 
+[ upstream commit 2d28bb5ddd0fb7c3bed44f3f3fbc7a7bc449ea7a ]
+
 There is a rte_pause in hash table reset function.
 Since the loop is not a polling loop on shared
 data structure, the rte_pause is not needed.
 
 Fixes: b26473ff8f4a ("hash: add reset function")
-Cc: stable@dpdk.org
 
 Signed-off-by: Yipeng Wang <yipeng1.wang@intel.com>
 Acked-by: Bruce Richardson <bruce.richardson@intel.com>
 ---
- lib/librte_hash/rte_cuckoo_hash.c | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
+ lib/librte_hash/rte_cuckoo_hash.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c
-index 0648a2294..5ddcccd87 100644
+index 5aaa6ccd0..2414c7f2d 100644
 --- a/lib/librte_hash/rte_cuckoo_hash.c
 +++ b/lib/librte_hash/rte_cuckoo_hash.c
-@@ -27,7 +27,6 @@
- #include <rte_spinlock.h>
- #include <rte_ring.h>
- #include <rte_compat.h>
--#include <rte_pause.h>
- 
- #include "rte_hash.h"
- #include "rte_cuckoo_hash.h"
-@@ -574,14 +573,14 @@ rte_hash_reset(struct rte_hash *h)
+@@ -407,7 +407,7 @@ rte_hash_reset(struct rte_hash *h)
  
  	/* clear the free ring */
  	while (rte_ring_dequeue(h->free_slots, &ptr) == 0)
 -		rte_pause();
 +		continue;
  
- 	/* clear free extendable bucket ring and memory */
- 	if (h->ext_table_support) {
- 		memset(h->buckets_ext, 0, h->num_buckets *
- 						sizeof(struct rte_hash_bucket));
- 		while (rte_ring_dequeue(h->free_ext_bkts, &ptr) == 0)
--			rte_pause();
-+			continue;
- 	}
- 
  	/* Repopulate the free slots ring. Entry zero is reserved for key misses */
+ 	if (h->hw_trans_mem_support)
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'kni: fix build on Linux < 3.14' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (8 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'hash: remove unnecessary pause' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: keep promiscuous on if allmulticast is enabled' " Luca Boccassi
                         ` (8 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 19bdb06486c269ad840e036109aded6e27c186dd Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 26 Oct 2018 23:23:36 +0200
Subject: [PATCH] kni: fix build on Linux < 3.14
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

[ upstream commit c6c36fe28a7bfd8ca21784b2b8b62241f89de06e ]

The atomic functions smp_load_acquire() and smp_store_release()
were introduced in Linux 3.14. Older kernels miss the functions:

kni_fifo.h:19:2: error:
	implicit declaration of function ‘smp_load_acquire’
kni_fifo.h:30:2: error:
	implicit declaration of function ‘smp_store_release’

The fallback is to drop the atomic barrier, as it was before
the commit below.

Fixes: 711859cd0d07 ("kni: fix kernel FIFO synchronization")

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 lib/librte_eal/linuxapp/kni/kni_fifo.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/lib/librte_eal/linuxapp/kni/kni_fifo.h b/lib/librte_eal/linuxapp/kni/kni_fifo.h
index 7f1d32c54..208d34bf0 100644
--- a/lib/librte_eal/linuxapp/kni/kni_fifo.h
+++ b/lib/librte_eal/linuxapp/kni/kni_fifo.h
@@ -27,6 +27,14 @@
 
 #include <exec-env/rte_kni_common.h>
 
+/* Skip some memory barriers on Linux < 3.14 */
+#ifndef smp_load_acquire
+#define smp_load_acquire(a) (*(a))
+#endif
+#ifndef smp_store_release
+#define smp_store_release(a, b) *(a) = (b)
+#endif
+
 /**
  * Adds num elements into the fifo. Return the number actually written
  */
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.678246093 +0000
+++ 0011-kni-fix-build-on-Linux-3.14.patch	2018-10-29 12:48:14.446417982 +0000
@@ -1,4 +1,4 @@
-From c6c36fe28a7bfd8ca21784b2b8b62241f89de06e Mon Sep 17 00:00:00 2001
+From 19bdb06486c269ad840e036109aded6e27c186dd Mon Sep 17 00:00:00 2001
 From: Thomas Monjalon <thomas@monjalon.net>
 Date: Fri, 26 Oct 2018 23:23:36 +0200
 Subject: [PATCH] kni: fix build on Linux < 3.14
@@ -6,6 +6,8 @@
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
+[ upstream commit c6c36fe28a7bfd8ca21784b2b8b62241f89de06e ]
+
 The atomic functions smp_load_acquire() and smp_store_release()
 were introduced in Linux 3.14. Older kernels miss the functions:
 
@@ -21,14 +23,14 @@
 
 Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
 ---
- kernel/linux/kni/kni_fifo.h | 8 ++++++++
+ lib/librte_eal/linuxapp/kni/kni_fifo.h | 8 ++++++++
  1 file changed, 8 insertions(+)
 
-diff --git a/kernel/linux/kni/kni_fifo.h b/kernel/linux/kni/kni_fifo.h
-index 2cb3a4a7b..3f4781c2e 100644
---- a/kernel/linux/kni/kni_fifo.h
-+++ b/kernel/linux/kni/kni_fifo.h
-@@ -8,6 +8,14 @@
+diff --git a/lib/librte_eal/linuxapp/kni/kni_fifo.h b/lib/librte_eal/linuxapp/kni/kni_fifo.h
+index 7f1d32c54..208d34bf0 100644
+--- a/lib/librte_eal/linuxapp/kni/kni_fifo.h
++++ b/lib/librte_eal/linuxapp/kni/kni_fifo.h
+@@ -27,6 +27,14 @@
  
  #include <exec-env/rte_kni_common.h>
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e: keep promiscuous on if allmulticast is enabled' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (9 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix build on Linux < 3.14' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: enable loopback function for X722 MAC' " Luca Boccassi
                         ` (7 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Huaibin Wang; +Cc: Laurent Hardy, Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 89e87d547ca6760be0349ad569003f467360c1d8 Mon Sep 17 00:00:00 2001
From: Huaibin Wang <huaibin.wang@6wind.com>
Date: Fri, 19 Oct 2018 11:45:21 +0200
Subject: [PATCH] net/i40e: keep promiscuous on if allmulticast is enabled

[ upstream commit 815037b92b3437754183fb256a967a7e82d3820a ]

Promisc should not be disabled if the all multicast mode is enabled.
Patch keeps the promiscuous on if all multicast mode is on, this
behavior is also consistent with the implementation done on ixgbe
pmd.

Signed-off-by: Huaibin Wang <huaibin.wang@6wind.com>
Signed-off-by: Laurent Hardy <laurent.hardy@6wind.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 2ce0e7025..f98be9429 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -2085,6 +2085,10 @@ i40e_dev_promiscuous_disable(struct rte_eth_dev *dev)
 	if (status != I40E_SUCCESS)
 		PMD_DRV_LOG(ERR, "Failed to disable unicast promiscuous");
 
+	/* must remain in all_multicast mode */
+	if (dev->data->all_multicast == 1)
+		return;
+
 	status = i40e_aq_set_vsi_multicast_promiscuous(hw, vsi->seid,
 							false, NULL);
 	if (status != I40E_SUCCESS)
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.695908377 +0000
+++ 0012-net-i40e-keep-promiscuous-on-if-allmulticast-is-enab.patch	2018-10-29 12:48:14.454417982 +0000
@@ -1,15 +1,15 @@
-From 815037b92b3437754183fb256a967a7e82d3820a Mon Sep 17 00:00:00 2001
+From 89e87d547ca6760be0349ad569003f467360c1d8 Mon Sep 17 00:00:00 2001
 From: Huaibin Wang <huaibin.wang@6wind.com>
 Date: Fri, 19 Oct 2018 11:45:21 +0200
 Subject: [PATCH] net/i40e: keep promiscuous on if allmulticast is enabled
 
+[ upstream commit 815037b92b3437754183fb256a967a7e82d3820a ]
+
 Promisc should not be disabled if the all multicast mode is enabled.
 Patch keeps the promiscuous on if all multicast mode is on, this
 behavior is also consistent with the implementation done on ixgbe
 pmd.
 
-Cc: stable@dpdk.org
-
 Signed-off-by: Huaibin Wang <huaibin.wang@6wind.com>
 Signed-off-by: Laurent Hardy <laurent.hardy@6wind.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>
@@ -18,10 +18,10 @@
  1 file changed, 4 insertions(+)
 
 diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
-index f7a685c8c..6c503debc 100644
+index 2ce0e7025..f98be9429 100644
 --- a/drivers/net/i40e/i40e_ethdev.c
 +++ b/drivers/net/i40e/i40e_ethdev.c
-@@ -2587,6 +2587,10 @@ i40e_dev_promiscuous_disable(struct rte_eth_dev *dev)
+@@ -2085,6 +2085,10 @@ i40e_dev_promiscuous_disable(struct rte_eth_dev *dev)
  	if (status != I40E_SUCCESS)
  		PMD_DRV_LOG(ERR, "Failed to disable unicast promiscuous");
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e: enable loopback function for X722 MAC' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (10 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: keep promiscuous on if allmulticast is enabled' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: update Tx offload mask' " Luca Boccassi
                         ` (6 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Haiyue Wang; +Cc: Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From c4ba88a06b7cef17dc8db6705e423988080ff8ed Mon Sep 17 00:00:00 2001
From: Haiyue Wang <haiyue.wang@intel.com>
Date: Mon, 22 Oct 2018 15:47:41 +0800
Subject: [PATCH] net/i40e: enable loopback function for X722 MAC

[ upstream commit 2c6d4f0338efc2134efc55a574f73ac481b323b4 ]

In FVL, there was an issue and it didn't support the loopback function
before FW 5.0. For FPK (X722) it should work.

So it needs to distinguish between the devices by checking MAC type.

Fixes: 689bba33272d ("i40e: add VEB switching support")
Fixes: bce83974ba2c ("net/i40e: set Tx loopback from PF")

Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index f98be9429..52974a3a9 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -4593,7 +4593,7 @@ i40e_enable_pf_lb(struct i40e_pf *pf)
 	int ret;
 
 	/* Use the FW API if FW >= v5.0 */
-	if (hw->aq.fw_maj_ver < 5) {
+	if (hw->aq.fw_maj_ver < 5 && hw->mac.type != I40E_MAC_X722) {
 		PMD_INIT_LOG(ERR, "FW < v5.0, cannot enable loopback");
 		return;
 	}
@@ -4862,7 +4862,7 @@ i40e_vsi_setup(struct i40e_pf *pf,
 		ctxt.flags = I40E_AQ_VSI_TYPE_VF;
 
 		/* Use the VEB configuration if FW >= v5.0 */
-		if (hw->aq.fw_maj_ver >= 5) {
+		if (hw->aq.fw_maj_ver >= 5 || hw->mac.type == I40E_MAC_X722) {
 			/* Configure switch ID */
 			ctxt.info.valid_sections |=
 			rte_cpu_to_le_16(I40E_AQ_VSI_PROP_SWITCH_VALID);
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.722219560 +0000
+++ 0013-net-i40e-enable-loopback-function-for-X722-MAC.patch	2018-10-29 12:48:14.466417981 +0000
@@ -1,8 +1,10 @@
-From 2c6d4f0338efc2134efc55a574f73ac481b323b4 Mon Sep 17 00:00:00 2001
+From c4ba88a06b7cef17dc8db6705e423988080ff8ed Mon Sep 17 00:00:00 2001
 From: Haiyue Wang <haiyue.wang@intel.com>
 Date: Mon, 22 Oct 2018 15:47:41 +0800
 Subject: [PATCH] net/i40e: enable loopback function for X722 MAC
 
+[ upstream commit 2c6d4f0338efc2134efc55a574f73ac481b323b4 ]
+
 In FVL, there was an issue and it didn't support the loopback function
 before FW 5.0. For FPK (X722) it should work.
 
@@ -10,20 +12,18 @@
 
 Fixes: 689bba33272d ("i40e: add VEB switching support")
 Fixes: bce83974ba2c ("net/i40e: set Tx loopback from PF")
-Cc: stable@dpdk.org
 
 Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>
 ---
- drivers/net/i40e/i40e_ethdev.c  | 4 ++--
- drivers/net/i40e/rte_pmd_i40e.c | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
+ drivers/net/i40e/i40e_ethdev.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
-index 48aca1aca..1c779068a 100644
+index f98be9429..52974a3a9 100644
 --- a/drivers/net/i40e/i40e_ethdev.c
 +++ b/drivers/net/i40e/i40e_ethdev.c
-@@ -5372,7 +5372,7 @@ i40e_enable_pf_lb(struct i40e_pf *pf)
+@@ -4593,7 +4593,7 @@ i40e_enable_pf_lb(struct i40e_pf *pf)
  	int ret;
  
  	/* Use the FW API if FW >= v5.0 */
@@ -32,7 +32,7 @@
  		PMD_INIT_LOG(ERR, "FW < v5.0, cannot enable loopback");
  		return;
  	}
-@@ -5643,7 +5643,7 @@ i40e_vsi_setup(struct i40e_pf *pf,
+@@ -4862,7 +4862,7 @@ i40e_vsi_setup(struct i40e_pf *pf,
  		ctxt.flags = I40E_AQ_VSI_TYPE_VF;
  
  		/* Use the VEB configuration if FW >= v5.0 */
@@ -41,19 +41,6 @@
  			/* Configure switch ID */
  			ctxt.info.valid_sections |=
  			rte_cpu_to_le_16(I40E_AQ_VSI_PROP_SWITCH_VALID);
-diff --git a/drivers/net/i40e/rte_pmd_i40e.c b/drivers/net/i40e/rte_pmd_i40e.c
-index bba62b1c5..7ce5d02fa 100644
---- a/drivers/net/i40e/rte_pmd_i40e.c
-+++ b/drivers/net/i40e/rte_pmd_i40e.c
-@@ -338,7 +338,7 @@ i40e_vsi_set_tx_loopback(struct i40e_vsi *vsi, uint8_t on)
- 	hw = I40E_VSI_TO_HW(vsi);
- 
- 	/* Use the FW API if FW >= v5.0 */
--	if (hw->aq.fw_maj_ver < 5) {
-+	if (hw->aq.fw_maj_ver < 5 && hw->mac.type != I40E_MAC_X722) {
- 		PMD_INIT_LOG(ERR, "FW < v5.0, cannot enable loopback");
- 		return -ENOTSUP;
- 	}
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e: update Tx offload mask' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (11 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: enable loopback function for X722 MAC' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/ixgbe: " Luca Boccassi
                         ` (5 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Beilei Xing; +Cc: Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From c70507ce48a6a96ff8df2203b088c2c490178b42 Mon Sep 17 00:00:00 2001
From: Beilei Xing <beilei.xing@intel.com>
Date: Tue, 23 Oct 2018 14:14:31 +0800
Subject: [PATCH] net/i40e: update Tx offload mask

[ upstream commit e4845bb4a68513c477dd35fcdcb086681788be7d ]

Tx offload mask is updated in following commit:
commit 1037ed842c37 ("mbuf: fix Tx offload mask").

Currently, the new added offload flags are not supported in PMD
and application will fail to call PMD transmit prepare function.
This patch updates PMD Tx offload mask.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/i40e/i40e_rxtx.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c
index 777ffc215..2c56c1ac2 100644
--- a/drivers/net/i40e/i40e_rxtx.c
+++ b/drivers/net/i40e/i40e_rxtx.c
@@ -74,6 +74,10 @@
 #define I40E_TXD_CMD (I40E_TX_DESC_CMD_EOP | I40E_TX_DESC_CMD_RS)
 
 #define I40E_TX_CKSUM_OFFLOAD_MASK (		 \
+		PKT_TX_OUTER_IPV4 |		 \
+		PKT_TX_OUTER_IPV6 |		 \
+		PKT_TX_IPV4 |			 \
+		PKT_TX_IPV6 |			 \
 		PKT_TX_IP_CKSUM |		 \
 		PKT_TX_L4_MASK |		 \
 		PKT_TX_TCP_SEG |		 \
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.749830564 +0000
+++ 0014-net-i40e-update-Tx-offload-mask.patch	2018-10-29 12:48:14.466417981 +0000
@@ -1,8 +1,10 @@
-From e4845bb4a68513c477dd35fcdcb086681788be7d Mon Sep 17 00:00:00 2001
+From c70507ce48a6a96ff8df2203b088c2c490178b42 Mon Sep 17 00:00:00 2001
 From: Beilei Xing <beilei.xing@intel.com>
 Date: Tue, 23 Oct 2018 14:14:31 +0800
 Subject: [PATCH] net/i40e: update Tx offload mask
 
+[ upstream commit e4845bb4a68513c477dd35fcdcb086681788be7d ]
+
 Tx offload mask is updated in following commit:
 commit 1037ed842c37 ("mbuf: fix Tx offload mask").
 
@@ -10,8 +12,6 @@
 and application will fail to call PMD transmit prepare function.
 This patch updates PMD Tx offload mask.
 
-Cc: stable@dpdk.org
-
 Signed-off-by: Beilei Xing <beilei.xing@intel.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>
 ---
@@ -19,20 +19,20 @@
  1 file changed, 4 insertions(+)
 
 diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c
-index b15dd67ad..8bfa25178 100644
+index 777ffc215..2c56c1ac2 100644
 --- a/drivers/net/i40e/i40e_rxtx.c
 +++ b/drivers/net/i40e/i40e_rxtx.c
-@@ -55,6 +55,10 @@
- 		PKT_TX_OUTER_IP_CKSUM)
+@@ -74,6 +74,10 @@
+ #define I40E_TXD_CMD (I40E_TX_DESC_CMD_EOP | I40E_TX_DESC_CMD_RS)
  
- #define I40E_TX_OFFLOAD_MASK (  \
-+		PKT_TX_OUTER_IPV4 |	\
-+		PKT_TX_OUTER_IPV6 |	\
-+		PKT_TX_IPV4 |		\
-+		PKT_TX_IPV6 |		\
- 		PKT_TX_IP_CKSUM |       \
- 		PKT_TX_L4_MASK |        \
- 		PKT_TX_OUTER_IP_CKSUM | \
+ #define I40E_TX_CKSUM_OFFLOAD_MASK (		 \
++		PKT_TX_OUTER_IPV4 |		 \
++		PKT_TX_OUTER_IPV6 |		 \
++		PKT_TX_IPV4 |			 \
++		PKT_TX_IPV6 |			 \
+ 		PKT_TX_IP_CKSUM |		 \
+ 		PKT_TX_L4_MASK |		 \
+ 		PKT_TX_TCP_SEG |		 \
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/ixgbe: update Tx offload mask' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (12 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: update Tx offload mask' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/ena: fix passing RSS hash to mbuf' " Luca Boccassi
                         ` (4 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Zhirun Yan; +Cc: Xiaolong Ye, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 7ed945f3a189cae493662c6f4b403efa3ce88677 Mon Sep 17 00:00:00 2001
From: Zhirun Yan <zhirun.yan@intel.com>
Date: Thu, 25 Oct 2018 14:58:40 +0000
Subject: [PATCH] net/ixgbe: update Tx offload mask

[ upstream commit aa1e69aebb12a57038f7ed5664605b7bcccbbe20 ]

Tx offload mask is updated in following commit: commit 1037ed842c37
("mbuf: fix Tx offload mask"). Currently, the new added offload
flags are not supported in PMD and application will fail to call
PMD transmit prepare function.

This patch updates IXGBE_TX_OFFFLOAD_MASK.

Fixes: 1037ed842c37 ("mbuf: fix Tx offload mask")

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
---
 drivers/net/ixgbe/ixgbe_rxtx.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
index 8b18b5302..55afb5393 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx.c
@@ -81,6 +81,10 @@
 
 /* Bit Mask to indicate what bits required for building TX context */
 #define IXGBE_TX_OFFLOAD_MASK (			 \
+		PKT_TX_OUTER_IPV6 |		 \
+		PKT_TX_OUTER_IPV4 |		 \
+		PKT_TX_IPV6 |			 \
+		PKT_TX_IPV4 |			 \
 		PKT_TX_VLAN_PKT |		 \
 		PKT_TX_IP_CKSUM |		 \
 		PKT_TX_L4_MASK |		 \
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.769128535 +0000
+++ 0015-net-ixgbe-update-Tx-offload-mask.patch	2018-10-29 12:48:14.470417981 +0000
@@ -1,8 +1,10 @@
-From aa1e69aebb12a57038f7ed5664605b7bcccbbe20 Mon Sep 17 00:00:00 2001
+From 7ed945f3a189cae493662c6f4b403efa3ce88677 Mon Sep 17 00:00:00 2001
 From: Zhirun Yan <zhirun.yan@intel.com>
 Date: Thu, 25 Oct 2018 14:58:40 +0000
 Subject: [PATCH] net/ixgbe: update Tx offload mask
 
+[ upstream commit aa1e69aebb12a57038f7ed5664605b7bcccbbe20 ]
+
 Tx offload mask is updated in following commit: commit 1037ed842c37
 ("mbuf: fix Tx offload mask"). Currently, the new added offload
 flags are not supported in PMD and application will fail to call
@@ -11,7 +13,6 @@
 This patch updates IXGBE_TX_OFFFLOAD_MASK.
 
 Fixes: 1037ed842c37 ("mbuf: fix Tx offload mask")
-Cc: stable@dpdk.org
 
 Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
 Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
@@ -20,11 +21,11 @@
  1 file changed, 4 insertions(+)
 
 diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
-index 9e2fbba3e..2f0262ae1 100644
+index 8b18b5302..55afb5393 100644
 --- a/drivers/net/ixgbe/ixgbe_rxtx.c
 +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
-@@ -58,6 +58,10 @@
- #endif
+@@ -81,6 +81,10 @@
+ 
  /* Bit Mask to indicate what bits required for building TX context */
  #define IXGBE_TX_OFFLOAD_MASK (			 \
 +		PKT_TX_OUTER_IPV6 |		 \

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/ena: fix passing RSS hash to mbuf' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (13 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/ixgbe: " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'doc: fix typo in testpmd guide' " Luca Boccassi
                         ` (3 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Stewart Allen; +Cc: Michal Krawczyk, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 39056a59cce5a62b22beac75a3754431381da06f Mon Sep 17 00:00:00 2001
From: Stewart Allen <allenste@amazon.com>
Date: Thu, 25 Oct 2018 19:59:22 +0200
Subject: [PATCH] net/ena: fix passing RSS hash to mbuf

[ upstream commit e5df9f33db00eb9d322abaefff30da74fd0e625d ]

The driver was passing to the mbuf Rx queue ID instead of hash received
from the device. Now, the RSS hash from the Rx descriptor is being set.

Fixes: 1173fca25af9 ("ena: add polling-mode driver")

Signed-off-by: Stewart Allen <allenste@amazon.com>
Acked-by: Michal Krawczyk <mk@semihalf.com>
---
 drivers/net/ena/ena_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
index 1511c6a0d..7de63e6c3 100644
--- a/drivers/net/ena/ena_ethdev.c
+++ b/drivers/net/ena/ena_ethdev.c
@@ -1553,7 +1553,7 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 
 		/* fill mbuf attributes if any */
 		ena_rx_mbuf_prepare(mbuf_head, &ena_rx_ctx);
-		mbuf_head->hash.rss = (uint32_t)rx_ring->id;
+		mbuf_head->hash.rss = ena_rx_ctx.hash;
 
 		/* pass to DPDK application head mbuf */
 		rx_pkts[recv_idx] = mbuf_head;
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.790123432 +0000
+++ 0016-net-ena-fix-passing-RSS-hash-to-mbuf.patch	2018-10-29 12:48:14.474417981 +0000
@@ -1,13 +1,14 @@
-From e5df9f33db00eb9d322abaefff30da74fd0e625d Mon Sep 17 00:00:00 2001
+From 39056a59cce5a62b22beac75a3754431381da06f Mon Sep 17 00:00:00 2001
 From: Stewart Allen <allenste@amazon.com>
 Date: Thu, 25 Oct 2018 19:59:22 +0200
 Subject: [PATCH] net/ena: fix passing RSS hash to mbuf
 
+[ upstream commit e5df9f33db00eb9d322abaefff30da74fd0e625d ]
+
 The driver was passing to the mbuf Rx queue ID instead of hash received
 from the device. Now, the RSS hash from the Rx descriptor is being set.
 
 Fixes: 1173fca25af9 ("ena: add polling-mode driver")
-Cc: stable@dpdk.org
 
 Signed-off-by: Stewart Allen <allenste@amazon.com>
 Acked-by: Michal Krawczyk <mk@semihalf.com>
@@ -16,10 +17,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
-index 186ab0e6b..191153a8f 100644
+index 1511c6a0d..7de63e6c3 100644
 --- a/drivers/net/ena/ena_ethdev.c
 +++ b/drivers/net/ena/ena_ethdev.c
-@@ -1910,7 +1910,7 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
+@@ -1553,7 +1553,7 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
  
  		/* fill mbuf attributes if any */
  		ena_rx_mbuf_prepare(mbuf_head, &ena_rx_ctx);

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'doc: fix typo in testpmd guide' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (14 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'net/ena: fix passing RSS hash to mbuf' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'ip_frag: fix overflow in key comparison' " Luca Boccassi
                         ` (2 subsequent siblings)
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Yong Wang; +Cc: Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 3a497df18c5eabfcfb3b2b9e43a958024c719690 Mon Sep 17 00:00:00 2001
From: Yong Wang <wang.yong19@zte.com.cn>
Date: Fri, 26 Oct 2018 06:27:03 -0400
Subject: [PATCH] doc: fix typo in testpmd guide

[ upstream commit 153ccd050c8de4e9cc1589daee4d136434a0be61 ]

The forwarding mode mac_swap should be macswap in testpmd guide.

Fixes: e76d7a768ce0 ("doc: fix syntax in testpmd user guide")

Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 doc/guides/testpmd_app_ug/run_app.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst
index ac7d45828..65d542245 100644
--- a/doc/guides/testpmd_app_ug/run_app.rst
+++ b/doc/guides/testpmd_app_ug/run_app.rst
@@ -337,7 +337,7 @@ The commandline options are:
 
        io (the default)
        mac
-       mac_swap
+       macswap
        flowgen
        rxonly
        txonly
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.808364299 +0000
+++ 0017-doc-fix-typo-in-testpmd-guide.patch	2018-10-29 12:48:14.474417981 +0000
@@ -1,12 +1,13 @@
-From 153ccd050c8de4e9cc1589daee4d136434a0be61 Mon Sep 17 00:00:00 2001
+From 3a497df18c5eabfcfb3b2b9e43a958024c719690 Mon Sep 17 00:00:00 2001
 From: Yong Wang <wang.yong19@zte.com.cn>
 Date: Fri, 26 Oct 2018 06:27:03 -0400
 Subject: [PATCH] doc: fix typo in testpmd guide
 
+[ upstream commit 153ccd050c8de4e9cc1589daee4d136434a0be61 ]
+
 The forwarding mode mac_swap should be macswap in testpmd guide.
 
 Fixes: e76d7a768ce0 ("doc: fix syntax in testpmd user guide")
-Cc: stable@dpdk.org
 
 Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
 Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
@@ -15,10 +16,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst
-index 21924c359..851df65da 100644
+index ac7d45828..65d542245 100644
 --- a/doc/guides/testpmd_app_ug/run_app.rst
 +++ b/doc/guides/testpmd_app_ug/run_app.rst
-@@ -332,7 +332,7 @@ The commandline options are:
+@@ -337,7 +337,7 @@ The commandline options are:
  
         io (the default)
         mac

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'ip_frag: fix overflow in key comparison' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (15 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'doc: fix typo in testpmd guide' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'eal/linux: fix memory leak of logid' " Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'fix global variable issues' " Luca Boccassi
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Li Han; +Cc: Konstantin Ananyev, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 70279544fa63fa39d374b71446b253b492af66c5 Mon Sep 17 00:00:00 2001
From: Li Han <han.li1@zte.com.cn>
Date: Wed, 1 Aug 2018 22:01:03 -0400
Subject: [PATCH] ip_frag: fix overflow in key comparison

[ upstream commit 8721e07478c6edc9565645047742f79c654cfd1b ]

in struct ip_frag_key,src_dst[] type is uint64_t.
but "val" which to store the calc restult ,type is uint32_t.
we may lost high 32 bit key. and function return value is int,
but it won't return < 0.

Signed-off-by: Li Han <han.li1@zte.com.cn>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 lib/librte_ip_frag/ip_frag_common.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/librte_ip_frag/ip_frag_common.h b/lib/librte_ip_frag/ip_frag_common.h
index 835e4f93f..ffba1b49b 100644
--- a/lib/librte_ip_frag/ip_frag_common.h
+++ b/lib/librte_ip_frag/ip_frag_common.h
@@ -98,10 +98,11 @@ ip_frag_key_invalidate(struct ip_frag_key * key)
 }
 
 /* compare two keys */
-static inline int
+static inline uint64_t
 ip_frag_key_cmp(const struct ip_frag_key * k1, const struct ip_frag_key * k2)
 {
-	uint32_t i, val;
+	uint32_t i;
+	uint64_t val;
 	val = k1->id ^ k2->id;
 	for (i = 0; i < k1->key_len; i++)
 		val |= k1->src_dst[i] ^ k2->src_dst[i];
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.825564651 +0000
+++ 0018-ip_frag-fix-overflow-in-key-comparison.patch	2018-10-29 12:48:14.474417981 +0000
@@ -1,8 +1,10 @@
-From 8721e07478c6edc9565645047742f79c654cfd1b Mon Sep 17 00:00:00 2001
+From 70279544fa63fa39d374b71446b253b492af66c5 Mon Sep 17 00:00:00 2001
 From: Li Han <han.li1@zte.com.cn>
 Date: Wed, 1 Aug 2018 22:01:03 -0400
 Subject: [PATCH] ip_frag: fix overflow in key comparison
 
+[ upstream commit 8721e07478c6edc9565645047742f79c654cfd1b ]
+
 in struct ip_frag_key,src_dst[] type is uint64_t.
 but "val" which to store the calc restult ,type is uint32_t.
 we may lost high 32 bit key. and function return value is int,
@@ -15,10 +17,10 @@
  1 file changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/lib/librte_ip_frag/ip_frag_common.h b/lib/librte_ip_frag/ip_frag_common.h
-index 0fdcc7d0f..0f62e2e16 100644
+index 835e4f93f..ffba1b49b 100644
 --- a/lib/librte_ip_frag/ip_frag_common.h
 +++ b/lib/librte_ip_frag/ip_frag_common.h
-@@ -75,10 +75,11 @@ ip_frag_key_invalidate(struct ip_frag_key * key)
+@@ -98,10 +98,11 @@ ip_frag_key_invalidate(struct ip_frag_key * key)
  }
  
  /* compare two keys */

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'eal/linux: fix memory leak of logid' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (16 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'ip_frag: fix overflow in key comparison' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-10-29 12:53       ` [dpdk-stable] patch 'fix global variable issues' " Luca Boccassi
  18 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Ziye Yang; +Cc: Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 51c1aeccc92da6948d496ff1fc486581dfcd0eb0 Mon Sep 17 00:00:00 2001
From: Ziye Yang <ziye.yang@intel.com>
Date: Wed, 12 Sep 2018 09:31:50 +0800
Subject: [PATCH] eal/linux: fix memory leak of logid

[ upstream commit e4f2c1421d8036a4778c43bf25201ef5fb37ad6f ]

This patch is used to fix the memory leak issue of logid.
We use the ASAN test in SPDK when integrating DPDK and
find this memory leak issue.

Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id")

Signed-off-by: Ziye Yang <ziye.yang@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 59ed78823..bbd6284e7 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -746,7 +746,8 @@ rte_eal_init(int argc, char **argv)
 	int i, fctret, ret;
 	pthread_t thread_id;
 	static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0);
-	const char *logid;
+	const char *p;
+	static char logid[PATH_MAX];
 	char cpuset[RTE_CPU_AFFINITY_STR_LEN];
 	char thread_name[RTE_MAX_THREAD_NAME_LEN];
 
@@ -756,9 +757,8 @@ rte_eal_init(int argc, char **argv)
 	if (!rte_atomic32_test_and_set(&run_once))
 		return -1;
 
-	logid = strrchr(argv[0], '/');
-	logid = strdup(logid ? logid + 1: argv[0]);
-
+	p = strrchr(argv[0], '/');
+	strlcpy(logid, p ? p + 1 : argv[0], sizeof(logid));
 	thread_id = pthread_self();
 
 	eal_log_level_parse(argc, argv);
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.841749286 +0000
+++ 0019-eal-linux-fix-memory-leak-of-logid.patch	2018-10-29 12:48:14.474417981 +0000
@@ -1,14 +1,15 @@
-From e4f2c1421d8036a4778c43bf25201ef5fb37ad6f Mon Sep 17 00:00:00 2001
+From 51c1aeccc92da6948d496ff1fc486581dfcd0eb0 Mon Sep 17 00:00:00 2001
 From: Ziye Yang <ziye.yang@intel.com>
 Date: Wed, 12 Sep 2018 09:31:50 +0800
 Subject: [PATCH] eal/linux: fix memory leak of logid
 
+[ upstream commit e4f2c1421d8036a4778c43bf25201ef5fb37ad6f ]
+
 This patch is used to fix the memory leak issue of logid.
 We use the ASAN test in SPDK when integrating DPDK and
 find this memory leak issue.
 
 Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ziye Yang <ziye.yang@intel.com>
 Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
@@ -17,10 +18,10 @@
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
-index 7b11375f4..67116eee2 100644
+index 59ed78823..bbd6284e7 100644
 --- a/lib/librte_eal/linuxapp/eal/eal.c
 +++ b/lib/librte_eal/linuxapp/eal/eal.c
-@@ -825,7 +825,8 @@ rte_eal_init(int argc, char **argv)
+@@ -746,7 +746,8 @@ rte_eal_init(int argc, char **argv)
  	int i, fctret, ret;
  	pthread_t thread_id;
  	static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0);
@@ -30,9 +31,9 @@
  	char cpuset[RTE_CPU_AFFINITY_STR_LEN];
  	char thread_name[RTE_MAX_THREAD_NAME_LEN];
  
-@@ -842,9 +843,8 @@ rte_eal_init(int argc, char **argv)
+@@ -756,9 +757,8 @@ rte_eal_init(int argc, char **argv)
+ 	if (!rte_atomic32_test_and_set(&run_once))
  		return -1;
- 	}
  
 -	logid = strrchr(argv[0], '/');
 -	logid = strdup(logid ? logid + 1: argv[0]);
@@ -41,7 +42,7 @@
 +	strlcpy(logid, p ? p + 1 : argv[0], sizeof(logid));
  	thread_id = pthread_self();
  
- 	eal_reset_internal_config(&internal_config);
+ 	eal_log_level_parse(argc, argv);
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'fix global variable issues' has been queued to LTS release 16.11.9
  2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
                         ` (17 preceding siblings ...)
  2018-10-29 12:53       ` [dpdk-stable] patch 'eal/linux: fix memory leak of logid' " Luca Boccassi
@ 2018-10-29 12:53       ` Luca Boccassi
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
  18 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 12:53 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: Nikhil Rao, Jerin Jacob, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/31/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 66198f20f7d95c8c7bd9f2319fe2317ca479ec79 Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Sun, 28 Oct 2018 23:57:40 +0000
Subject: [PATCH] fix global variable issues

[ upstream commit 9757358342a089e9d3e770cc3e4b4b1289d65abe ]

Various fixes related to the global variable usage.

Fixes: 43e610bb8565 ("compress/octeontx: introduce octeontx zip PMD")
Fixes: c378f084d6e3 ("compress/octeontx: add device setup ops")
Fixes: b43ebc65aada ("compress/octeontx: create private xform")
Fixes: b1ce8ebd97ba ("eventdev: add PMD callbacks for eth Rx adapter")
Fixes: 3810ae435783 ("eventdev: add interrupt driven queues to Rx adapter")
Fixes: fefed3d1e62c ("enic: new driver")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: Nikhil Rao <nikhil.rao@intel.com>
Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 drivers/net/enic/enic_ethdev.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
index b18591552..31614f3fd 100644
--- a/drivers/net/enic/enic_ethdev.c
+++ b/drivers/net/enic/enic_ethdev.c
@@ -650,7 +650,6 @@ static int enic_check_devargs(struct rte_eth_dev *dev)
 	return 0;
 }
 
-struct enic *enicpmd_list_head = NULL;
 /* Initialize the driver
  * It returns 0 on success.
  */
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-10-29 12:48:14.859370773 +0000
+++ 0020-fix-global-variable-issues.patch	2018-10-29 12:48:14.474417981 +0000
@@ -1,8 +1,10 @@
-From 9757358342a089e9d3e770cc3e4b4b1289d65abe Mon Sep 17 00:00:00 2001
+From 66198f20f7d95c8c7bd9f2319fe2317ca479ec79 Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Sun, 28 Oct 2018 23:57:40 +0000
 Subject: [PATCH] fix global variable issues
 
+[ upstream commit 9757358342a089e9d3e770cc3e4b4b1289d65abe ]
+
 Various fixes related to the global variable usage.
 
 Fixes: 43e610bb8565 ("compress/octeontx: introduce octeontx zip PMD")
@@ -11,96 +13,19 @@
 Fixes: b1ce8ebd97ba ("eventdev: add PMD callbacks for eth Rx adapter")
 Fixes: 3810ae435783 ("eventdev: add interrupt driven queues to Rx adapter")
 Fixes: fefed3d1e62c ("enic: new driver")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 Reviewed-by: Nikhil Rao <nikhil.rao@intel.com>
 Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
 ---
- drivers/compress/octeontx/include/zip_regs.h   | 4 ++--
- drivers/compress/octeontx/otx_zip.h            | 6 +++---
- drivers/event/octeontx/ssovf_evdev.c           | 3 +--
- drivers/net/enic/enic_ethdev.c                 | 1 -
- lib/librte_eventdev/rte_event_eth_rx_adapter.c | 1 -
- lib/librte_eventdev/rte_eventdev_pmd.h         | 4 ++--
- 6 files changed, 8 insertions(+), 11 deletions(-)
-
-diff --git a/drivers/compress/octeontx/include/zip_regs.h b/drivers/compress/octeontx/include/zip_regs.h
-index 1e74db433..04c3d75e9 100644
---- a/drivers/compress/octeontx/include/zip_regs.h
-+++ b/drivers/compress/octeontx/include/zip_regs.h
-@@ -12,12 +12,12 @@
-  * ZIP compression coding Enumeration
-  * Enumerates ZIP_INST_S[CC].
-  */
--enum {
-+enum zip_cc {
- 	ZIP_CC_DEFAULT = 0,
- 	ZIP_CC_DYN_HUFF,
- 	ZIP_CC_FIXED_HUFF,
- 	ZIP_CC_LZS
--} zip_cc;
-+};
- 
- /**
-  * Register (NCB) zip_vq#_ena
-diff --git a/drivers/compress/octeontx/otx_zip.h b/drivers/compress/octeontx/otx_zip.h
-index 99a38d005..3abefd1dc 100644
---- a/drivers/compress/octeontx/otx_zip.h
-+++ b/drivers/compress/octeontx/otx_zip.h
-@@ -79,7 +79,7 @@ int octtx_zip_logtype_driver;
- 	ZIP_PMD_LOG(ERR, fmt, ## args)
- 
- /* resources required to process stream */
--enum {
-+enum NUM_BUFS_PER_STREAM {
- 	RES_BUF = 0,
- 	CMD_BUF,
- 	HASH_CTX_BUF,
-@@ -88,7 +88,7 @@ enum {
- 	OUT_DATA_BUF,
- 	HISTORY_DATA_BUF,
- 	MAX_BUFS_PER_STREAM
--} NUM_BUFS_PER_STREAM;
-+};
- 
- struct zip_stream;
- struct zipvf_qp;
-@@ -106,7 +106,7 @@ struct zip_stream {
- 	comp_func_t func;
- 	/* function to process comp operation */
- 	void *bufs[MAX_BUFS_PER_STREAM];
--} _rte_cache_aligned;
-+} __rte_cache_aligned;
- 
- 
- /**
-diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
-index c5e891cdb..a273d4c96 100644
---- a/drivers/event/octeontx/ssovf_evdev.c
-+++ b/drivers/event/octeontx/ssovf_evdev.c
-@@ -455,7 +455,6 @@ ssovf_eth_rx_adapter_queue_del(const struct rte_eventdev *dev,
- 	const struct octeontx_nic *nic = eth_dev->data->dev_private;
- 	pki_del_qos_t pki_qos;
- 	RTE_SET_USED(dev);
--	RTE_SET_USED(rx_queue_id);
- 
- 	ret = strncmp(eth_dev->data->name, "eth_octeontx", 12);
- 	if (ret)
-@@ -467,7 +466,7 @@ ssovf_eth_rx_adapter_queue_del(const struct rte_eventdev *dev,
- 	ret = octeontx_pki_port_delete_qos(nic->port_id, &pki_qos);
- 	if (ret < 0)
- 		ssovf_log_err("Failed to delete QOS port=%d, q=%d",
--				nic->port_id, queue_conf->ev.queue_id);
-+				nic->port_id, rx_queue_id);
- 	return ret;
- }
- 
+ drivers/net/enic/enic_ethdev.c | 1 -
+ 1 file changed, 1 deletion(-)
+
 diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
-index 1a129f414..996bb5542 100644
+index b18591552..31614f3fd 100644
 --- a/drivers/net/enic/enic_ethdev.c
 +++ b/drivers/net/enic/enic_ethdev.c
-@@ -1030,7 +1030,6 @@ static int enic_check_devargs(struct rte_eth_dev *dev)
+@@ -650,7 +650,6 @@ static int enic_check_devargs(struct rte_eth_dev *dev)
  	return 0;
  }
  
@@ -108,40 +33,6 @@
  /* Initialize the driver
   * It returns 0 on success.
   */
-diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.c b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
-index 870ac8c3b..71d008cd1 100644
---- a/lib/librte_eventdev/rte_event_eth_rx_adapter.c
-+++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
-@@ -1125,7 +1125,6 @@ rxa_poll(struct rte_event_eth_rx_adapter *rx_adapter)
- 	wrr_pos = rx_adapter->wrr_pos;
- 	max_nb_rx = rx_adapter->max_nb_rx;
- 	buf = &rx_adapter->event_enqueue_buffer;
--	stats = &rx_adapter->stats;
- 
- 	/* Iterate through a WRR sequence */
- 	for (num_queue = 0; num_queue < rx_adapter->wrr_len; num_queue++) {
-diff --git a/lib/librte_eventdev/rte_eventdev_pmd.h b/lib/librte_eventdev/rte_eventdev_pmd.h
-index 792fb3a23..aa6e52c63 100644
---- a/lib/librte_eventdev/rte_eventdev_pmd.h
-+++ b/lib/librte_eventdev/rte_eventdev_pmd.h
-@@ -467,7 +467,7 @@ typedef int (*eventdev_eth_rx_adapter_caps_get_t)
- 					const struct rte_eth_dev *eth_dev,
- 					uint32_t *caps);
- 
--struct rte_event_eth_rx_adapter_queue_conf *queue_conf;
-+struct rte_event_eth_rx_adapter_queue_conf;
- 
- /**
-  * Retrieve the event device's timer adapter capabilities, as well as the ops
-@@ -592,7 +592,7 @@ typedef int (*eventdev_eth_rx_adapter_stop_t)
- 					(const struct rte_eventdev *dev,
- 					const struct rte_eth_dev *eth_dev);
- 
--struct rte_event_eth_rx_adapter_stats *stats;
-+struct rte_event_eth_rx_adapter_stats;
- 
- /**
-  * Retrieve ethernet Rx adapter statistics.
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'vhost: fix payload size of reply' has been queued to LTS release 16.11.9
  2018-10-29 12:53       ` [dpdk-stable] patch 'vhost: fix payload size of reply' " Luca Boccassi
@ 2018-10-29 13:12         ` Ilya Maximets
  2018-10-29 16:32           ` Luca Boccassi
  0 siblings, 1 reply; 118+ messages in thread
From: Ilya Maximets @ 2018-10-29 13:12 UTC (permalink / raw)
  To: Luca Boccassi, Maxime Coquelin; +Cc: dpdk stable

Hi,
I'm not sure if we need to backport this change because
sending the payload doesn't cause any issues in current
QEMU implementation.
Anyway, If you want to do that, the change should be done
like this (and some comments merge will be needed):

---
diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index 04c92ceb3..44b792420 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -1114,7 +1114,7 @@ vhost_user_msg_handler(int vid, int fd)
                vhost_user_set_log_base(dev, &msg);
 
                /* it needs a reply */
-               msg.size = sizeof(msg.payload.u64);
+               msg.size = 0;
                send_vhost_message(fd, &msg);
                break;
        case VHOST_USER_SET_LOG_FD:
---

This is because before commit
e951355ffcae ("vhost: make message handling functions prepare the reply")
replies was handled in-place by the caller function.

Best regards, Ilya Maximets.

On 29.10.2018 15:53, Luca Boccassi wrote:
> Hi,
> 
> FYI, your patch has been queued to LTS release 16.11.9
> 
> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> It will be pushed if I get no objections before 10/31/18. So please
> shout if anyone has objections.
> 
> Also note that after the patch there's a diff of the upstream commit vs the patch applied
> to the branch. If the code is different (ie: not only metadata diffs), due for example to
> a change in context or macro names, please double check it.
> 
> Thanks.
> 
> Luca Boccassi
> 
> ---
>>From 2fb95d184bf2b7715c9e2696059d41fd044a2d88 Mon Sep 17 00:00:00 2001
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Date: Fri, 12 Oct 2018 14:40:32 +0200
> Subject: [PATCH] vhost: fix payload size of reply
> 
> [ upstream commit 57b4d90b5893db2678ca3e28c50e1fcd37bb9b91 ]
> 
> QEMU doesn't expect any payload for the reply of
> VHOST_USER_SET_LOG_BASE request, so don't send any.
> Note that the Vhost-user specification isn't clear about
> it and would need to be fixed.
> 
> Fixes: 54f9e32305d4 ("vhost: handle dirty pages logging request")
> 
> Reported-by: Ilya Maximets <i.maximets@samsung.com>
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> Acked-by: Ilya Maximets <i.maximets@samsung.com>
> ---
>  lib/librte_vhost/vhost_user.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
> index f3b286e72..a88f19aae 100644
> --- a/lib/librte_vhost/vhost_user.c
> +++ b/lib/librte_vhost/vhost_user.c
> @@ -911,6 +911,12 @@ vhost_user_set_log_base(struct virtio_net *dev, struct VhostUserMsg *msg)
>  	dev->log_base = dev->log_addr + off;
>  	dev->log_size = size;
>  
> +	/*
> +	 * The spec is not clear about it (yet), but QEMU doesn't expect
> +	 * any payload in the reply.
> +	 */
> +	msg->size = 0;
> +
>  	return 0;
>  }
>  
> 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'vhost: fix payload size of reply' has been queued to LTS release 16.11.9
  2018-10-29 13:12         ` Ilya Maximets
@ 2018-10-29 16:32           ` Luca Boccassi
  0 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-10-29 16:32 UTC (permalink / raw)
  To: Ilya Maximets, Maxime Coquelin; +Cc: dpdk stable

Great, thanks for the heads-up, I've changed as suggested.

On Mon, 2018-10-29 at 16:12 +0300, Ilya Maximets wrote:
> Hi,
> I'm not sure if we need to backport this change because
> sending the payload doesn't cause any issues in current
> QEMU implementation.
> Anyway, If you want to do that, the change should be done
> like this (and some comments merge will be needed):
> 
> ---
> diff --git a/lib/librte_vhost/vhost_user.c
> b/lib/librte_vhost/vhost_user.c
> index 04c92ceb3..44b792420 100644
> --- a/lib/librte_vhost/vhost_user.c
> +++ b/lib/librte_vhost/vhost_user.c
> @@ -1114,7 +1114,7 @@ vhost_user_msg_handler(int vid, int fd)
>                 vhost_user_set_log_base(dev, &msg);
>  
>                 /* it needs a reply */
> -               msg.size = sizeof(msg.payload.u64);
> +               msg.size = 0;
>                 send_vhost_message(fd, &msg);
>                 break;
>         case VHOST_USER_SET_LOG_FD:
> ---
> 
> This is because before commit
> e951355ffcae ("vhost: make message handling functions prepare the
> reply")
> replies was handled in-place by the caller function.
> 
> Best regards, Ilya Maximets.
> 
> On 29.10.2018 15:53, Luca Boccassi wrote:
> > Hi,
> > 
> > FYI, your patch has been queued to LTS release 16.11.9
> > 
> > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable
> > yet.
> > It will be pushed if I get no objections before 10/31/18. So please
> > shout if anyone has objections.
> > 
> > Also note that after the patch there's a diff of the upstream
> > commit vs the patch applied
> > to the branch. If the code is different (ie: not only metadata
> > diffs), due for example to
> > a change in context or macro names, please double check it.
> > 
> > Thanks.
> > 
> > Luca Boccassi
> > 
> > ---
> > > From 2fb95d184bf2b7715c9e2696059d41fd044a2d88 Mon Sep 17 00:00:00
> > > 2001
> > 
> > From: Maxime Coquelin <maxime.coquelin@redhat.com>
> > Date: Fri, 12 Oct 2018 14:40:32 +0200
> > Subject: [PATCH] vhost: fix payload size of reply
> > 
> > [ upstream commit 57b4d90b5893db2678ca3e28c50e1fcd37bb9b91 ]
> > 
> > QEMU doesn't expect any payload for the reply of
> > VHOST_USER_SET_LOG_BASE request, so don't send any.
> > Note that the Vhost-user specification isn't clear about
> > it and would need to be fixed.
> > 
> > Fixes: 54f9e32305d4 ("vhost: handle dirty pages logging request")
> > 
> > Reported-by: Ilya Maximets <i.maximets@samsung.com>
> > Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> > Acked-by: Ilya Maximets <i.maximets@samsung.com>
> > ---
> >  lib/librte_vhost/vhost_user.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> > 
> > diff --git a/lib/librte_vhost/vhost_user.c
> > b/lib/librte_vhost/vhost_user.c
> > index f3b286e72..a88f19aae 100644
> > --- a/lib/librte_vhost/vhost_user.c
> > +++ b/lib/librte_vhost/vhost_user.c
> > @@ -911,6 +911,12 @@ vhost_user_set_log_base(struct virtio_net
> > *dev, struct VhostUserMsg *msg)
> >  	dev->log_base = dev->log_addr + off;
> >  	dev->log_size = size;
> >  
> > +	/*
> > +	 * The spec is not clear about it (yet), but QEMU doesn't
> > expect
> > +	 * any payload in the reply.
> > +	 */
> > +	msg->size = 0;
> > +
> >  	return 0;
> >  }
> >  
> > 

-- 
Kind regards,
Luca Boccassi

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' has been queued to LTS release 16.11.9
  2018-10-29 12:53       ` [dpdk-stable] patch 'fix global variable issues' " Luca Boccassi
@ 2018-11-08 18:00         ` Luca Boccassi
  2018-11-08 18:00           ` [dpdk-stable] patch 'eal/linux: handle UIO read failure in interrupt handler' " Luca Boccassi
                             ` (14 more replies)
  0 siblings, 15 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:00 UTC (permalink / raw)
  To: Luca Boccassi; +Cc: Brian Russell, Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 6c9fa4d84e9982b2754c7c7424f4c4306c623299 Mon Sep 17 00:00:00 2001
From: Luca Boccassi <bluca@debian.org>
Date: Wed, 31 Oct 2018 18:39:43 +0000
Subject: [PATCH] net/virtio: register/unregister intr handler on start/stop

[ upstream commit f9b0d1902caf893493b5e07763ecf817c34fc75c ]

Register and unregister the virtio interrupt handler when the device is
started and stopped. This allows a virtio device to be hotplugged or
unplugged.

Fixes: c1f86306a026 ("virtio: add new driver")

Signed-off-by: Brian Russell <brussell@brocade.com>
Signed-off-by: Luca Boccassi <bluca@debian.org>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 drivers/net/virtio/virtio_ethdev.c | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 5a27ab772..6f950f0f4 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -1394,11 +1394,6 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
 	if (ret < 0)
 		return ret;
 
-	/* Setup interrupt callback  */
-	if (eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
-		rte_intr_callback_register(&pci_dev->intr_handle,
-			virtio_interrupt_handler, eth_dev);
-
 	return 0;
 }
 
@@ -1423,11 +1418,6 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
 	rte_free(eth_dev->data->mac_addrs);
 	eth_dev->data->mac_addrs = NULL;
 
-	/* reset interrupt callback  */
-	if (eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
-		rte_intr_callback_unregister(&pci_dev->intr_handle,
-						virtio_interrupt_handler,
-						eth_dev);
 	rte_eal_pci_unmap_device(pci_dev);
 
 	PMD_INIT_LOG(DEBUG, "dev_uninit completed");
@@ -1538,6 +1528,12 @@ virtio_dev_start(struct rte_eth_dev *dev)
 			return -ENOTSUP;
 		}
 
+		/* Setup interrupt callback  */
+		if (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
+			rte_intr_callback_register(&dev->pci_dev->intr_handle,
+						   virtio_interrupt_handler,
+						   dev);
+
 		if (rte_intr_enable(&dev->pci_dev->intr_handle) < 0) {
 			PMD_DRV_LOG(ERR, "interrupt enable failed");
 			return -EIO;
@@ -1645,9 +1641,17 @@ virtio_dev_stop(struct rte_eth_dev *dev)
 
 	PMD_INIT_LOG(DEBUG, "stop");
 
-	if (dev->data->dev_conf.intr_conf.lsc)
+	if (dev->data->dev_conf.intr_conf.lsc) {
 		rte_intr_disable(&dev->pci_dev->intr_handle);
 
+		/* Reset interrupt callback  */
+		if (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) {
+			rte_intr_callback_unregister(&dev->pci_dev->intr_handle,
+						     virtio_interrupt_handler,
+						     dev);
+		}
+	}
+
 	hw->started = 0;
 	memset(&link, 0, sizeof(link));
 	virtio_dev_atomic_write_link_status(dev, &link);
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.086297561 +0000
+++ 0001-net-virtio-register-unregister-intr-handler-on-start.patch	2018-11-08 17:59:30.044751011 +0000
@@ -1,14 +1,15 @@
-From f9b0d1902caf893493b5e07763ecf817c34fc75c Mon Sep 17 00:00:00 2001
+From 6c9fa4d84e9982b2754c7c7424f4c4306c623299 Mon Sep 17 00:00:00 2001
 From: Luca Boccassi <bluca@debian.org>
 Date: Wed, 31 Oct 2018 18:39:43 +0000
 Subject: [PATCH] net/virtio: register/unregister intr handler on start/stop
 
+[ upstream commit f9b0d1902caf893493b5e07763ecf817c34fc75c ]
+
 Register and unregister the virtio interrupt handler when the device is
 started and stopped. This allows a virtio device to be hotplugged or
 unplugged.
 
 Fixes: c1f86306a026 ("virtio: add new driver")
-Cc: stable@dpdk.org
 
 Signed-off-by: Brian Russell <brussell@brocade.com>
 Signed-off-by: Luca Boccassi <bluca@debian.org>
@@ -18,57 +19,57 @@
  1 file changed, 15 insertions(+), 11 deletions(-)
 
 diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
-index 10a7e3fcc..da8717726 100644
+index 5a27ab772..6f950f0f4 100644
 --- a/drivers/net/virtio/virtio_ethdev.c
 +++ b/drivers/net/virtio/virtio_ethdev.c
-@@ -1679,11 +1679,6 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
+@@ -1394,11 +1394,6 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
  	if (ret < 0)
- 		goto out;
+ 		return ret;
  
 -	/* Setup interrupt callback  */
 -	if (eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
--		rte_intr_callback_register(eth_dev->intr_handle,
+-		rte_intr_callback_register(&pci_dev->intr_handle,
 -			virtio_interrupt_handler, eth_dev);
 -
  	return 0;
+ }
  
- out:
-@@ -1706,11 +1701,6 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
- 	eth_dev->tx_pkt_burst = NULL;
- 	eth_dev->rx_pkt_burst = NULL;
+@@ -1423,11 +1418,6 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
+ 	rte_free(eth_dev->data->mac_addrs);
+ 	eth_dev->data->mac_addrs = NULL;
  
 -	/* reset interrupt callback  */
 -	if (eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
--		rte_intr_callback_unregister(eth_dev->intr_handle,
+-		rte_intr_callback_unregister(&pci_dev->intr_handle,
 -						virtio_interrupt_handler,
 -						eth_dev);
- 	if (eth_dev->device)
- 		rte_pci_unmap_device(RTE_ETH_DEV_TO_PCI(eth_dev));
+ 	rte_eal_pci_unmap_device(pci_dev);
  
-@@ -1969,6 +1959,12 @@ virtio_dev_start(struct rte_eth_dev *dev)
- 	    dev->data->dev_conf.intr_conf.rxq) {
- 		virtio_intr_disable(dev);
+ 	PMD_INIT_LOG(DEBUG, "dev_uninit completed");
+@@ -1538,6 +1528,12 @@ virtio_dev_start(struct rte_eth_dev *dev)
+ 			return -ENOTSUP;
+ 		}
  
 +		/* Setup interrupt callback  */
 +		if (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
-+			rte_intr_callback_register(dev->intr_handle,
++			rte_intr_callback_register(&dev->pci_dev->intr_handle,
 +						   virtio_interrupt_handler,
 +						   dev);
 +
- 		if (virtio_intr_enable(dev) < 0) {
+ 		if (rte_intr_enable(&dev->pci_dev->intr_handle) < 0) {
  			PMD_DRV_LOG(ERR, "interrupt enable failed");
  			return -EIO;
-@@ -2078,9 +2074,17 @@ virtio_dev_stop(struct rte_eth_dev *dev)
+@@ -1645,9 +1641,17 @@ virtio_dev_stop(struct rte_eth_dev *dev)
+ 
  	PMD_INIT_LOG(DEBUG, "stop");
  
- 	rte_spinlock_lock(&hw->state_lock);
--	if (intr_conf->lsc || intr_conf->rxq)
-+	if (intr_conf->lsc || intr_conf->rxq) {
- 		virtio_intr_disable(dev);
+-	if (dev->data->dev_conf.intr_conf.lsc)
++	if (dev->data->dev_conf.intr_conf.lsc) {
+ 		rte_intr_disable(&dev->pci_dev->intr_handle);
  
 +		/* Reset interrupt callback  */
 +		if (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) {
-+			rte_intr_callback_unregister(dev->intr_handle,
++			rte_intr_callback_unregister(&dev->pci_dev->intr_handle,
 +						     virtio_interrupt_handler,
 +						     dev);
 +		}
@@ -76,7 +77,7 @@
 +
  	hw->started = 0;
  	memset(&link, 0, sizeof(link));
- 	rte_eth_linkstatus_set(dev, &link);
+ 	virtio_dev_atomic_write_link_status(dev, &link);
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'eal/linux: handle UIO read failure in interrupt handler' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
@ 2018-11-08 18:00           ` Luca Boccassi
  2018-11-08 18:00           ` [dpdk-stable] patch 'mk: disable gcc AVX512F support' " Luca Boccassi
                             ` (13 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:00 UTC (permalink / raw)
  To: Luca Boccassi; +Cc: Brian Russell, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From e8861c76c1613cb7eb785ff9b23e80f617f6994b Mon Sep 17 00:00:00 2001
From: Luca Boccassi <bluca@debian.org>
Date: Wed, 31 Oct 2018 18:39:45 +0000
Subject: [PATCH] eal/linux: handle UIO read failure in interrupt handler

[ upstream commit 349ac52bbc5264d774c7e28c62c4e3941055b9c4 ]

If a device is unplugged while an interrupt is pending, the
read call to the uio device to remove it from the poll wait list
can fail resulting in it being continually polled forever. This
change checks for the read failing and if so, unregisters the device
as an interrupt source and causes the wait list to be rebuilt.

This race has been reported and observed in production.

Fixes: 0a45657a6794 ("pci: rework interrupt handling")

Signed-off-by: Brian Russell <brussell@brocade.com>
Signed-off-by: Luca Boccassi <bluca@debian.org>
---
 lib/librte_eal/linuxapp/eal/eal_interrupts.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
index 7f739140a..cce69285b 100644
--- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c
+++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
@@ -647,7 +647,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
 {
 	int n, bytes_read;
 	struct rte_intr_source *src;
-	struct rte_intr_callback *cb;
+	struct rte_intr_callback *cb, *next;
 	union rte_intr_read_buffer buf;
 	struct rte_intr_callback active_cb;
 
@@ -713,6 +713,23 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
 					"descriptor %d: %s\n",
 					events[n].data.fd,
 					strerror(errno));
+				/*
+				 * The device is unplugged or buggy, remove
+				 * it as an interrupt source and return to
+				 * force the wait list to be rebuilt.
+				 */
+				rte_spinlock_lock(&intr_lock);
+				TAILQ_REMOVE(&intr_sources, src, next);
+				rte_spinlock_unlock(&intr_lock);
+
+				for (cb = TAILQ_FIRST(&src->callbacks); cb;
+							cb = next) {
+					next = TAILQ_NEXT(cb, next);
+					TAILQ_REMOVE(&src->callbacks, cb, next);
+					free(cb);
+				}
+				free(src);
+				return -1;
 			} else if (bytes_read == 0)
 				RTE_LOG(ERR, EAL, "Read nothing from file "
 					"descriptor %d\n", events[n].data.fd);
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.105047182 +0000
+++ 0002-eal-linux-handle-UIO-read-failure-in-interrupt-handl.patch	2018-11-08 17:59:30.044751011 +0000
@@ -1,8 +1,10 @@
-From 349ac52bbc5264d774c7e28c62c4e3941055b9c4 Mon Sep 17 00:00:00 2001
+From e8861c76c1613cb7eb785ff9b23e80f617f6994b Mon Sep 17 00:00:00 2001
 From: Luca Boccassi <bluca@debian.org>
 Date: Wed, 31 Oct 2018 18:39:45 +0000
 Subject: [PATCH] eal/linux: handle UIO read failure in interrupt handler
 
+[ upstream commit 349ac52bbc5264d774c7e28c62c4e3941055b9c4 ]
+
 If a device is unplugged while an interrupt is pending, the
 read call to the uio device to remove it from the poll wait list
 can fail resulting in it being continually polled forever. This
@@ -12,7 +14,6 @@
 This race has been reported and observed in production.
 
 Fixes: 0a45657a6794 ("pci: rework interrupt handling")
-Cc: stable@dpdk.org
 
 Signed-off-by: Brian Russell <brussell@brocade.com>
 Signed-off-by: Luca Boccassi <bluca@debian.org>
@@ -21,11 +22,11 @@
  1 file changed, 18 insertions(+), 1 deletion(-)
 
 diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
-index 39252a887..cbac451e1 100644
+index 7f739140a..cce69285b 100644
 --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c
 +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
-@@ -700,7 +700,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
- 	bool call = false;
+@@ -647,7 +647,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
+ {
  	int n, bytes_read;
  	struct rte_intr_source *src;
 -	struct rte_intr_callback *cb;
@@ -33,7 +34,7 @@
  	union rte_intr_read_buffer buf;
  	struct rte_intr_callback active_cb;
  
-@@ -780,6 +780,23 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
+@@ -713,6 +713,23 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds)
  					"descriptor %d: %s\n",
  					events[n].data.fd,
  					strerror(errno));

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'mk: disable gcc AVX512F support' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
  2018-11-08 18:00           ` [dpdk-stable] patch 'eal/linux: handle UIO read failure in interrupt handler' " Luca Boccassi
@ 2018-11-08 18:00           ` Luca Boccassi
  2018-11-09  6:52             ` Christian Ehrhardt
  2018-11-08 18:01           ` [dpdk-stable] patch 'eal: fix build with gcc 9.0' " Luca Boccassi
                             ` (12 subsequent siblings)
  14 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:00 UTC (permalink / raw)
  To: Yongseok Koh; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 8dbda3ba255c6045ffe3eb73f1d8e1f67186c22b Mon Sep 17 00:00:00 2001
From: Yongseok Koh <yskoh@mellanox.com>
Date: Sat, 3 Nov 2018 01:06:32 +0000
Subject: [PATCH] mk: disable gcc AVX512F support

[ upstream commit 8d07c82b239f7782be0d3afbb626390e2cb0c8f5 ]

This is a workaround to prevent a crash, which might be caused by
optimization of newer gcc (7.3.0) on Intel Skylake.

This disables AVX512F support of gcc by adding -mno-avx512f if it is
disabled in DPDK (CONFIG_RTE_ENABLE_AVX512=n).

This does not apply to the meson build as that doesn't have such an option
but always enable AVX512F whenever supported.

Bugzilla ID: 97

Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
---
 mk/rte.cpuflags.mk | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk
index 8bbccb9ed..c7027a0fe 100644
--- a/mk/rte.cpuflags.mk
+++ b/mk/rte.cpuflags.mk
@@ -91,6 +91,11 @@ endif
 
 ifneq ($(filter $(AUTO_CPUFLAGS),__AVX512F__),)
 CPUFLAGS += AVX512F
+else
+# disable AVX512F support of gcc as a workaround for Bug 97
+ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
+MACHINE_CFLAGS += -mno-avx512f
+endif
 endif
 
 # IBM Power CPU flags
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.124667578 +0000
+++ 0003-mk-disable-gcc-AVX512F-support.patch	2018-11-08 17:59:30.048751011 +0000
@@ -1,8 +1,10 @@
-From 8d07c82b239f7782be0d3afbb626390e2cb0c8f5 Mon Sep 17 00:00:00 2001
+From 8dbda3ba255c6045ffe3eb73f1d8e1f67186c22b Mon Sep 17 00:00:00 2001
 From: Yongseok Koh <yskoh@mellanox.com>
 Date: Sat, 3 Nov 2018 01:06:32 +0000
 Subject: [PATCH] mk: disable gcc AVX512F support
 
+[ upstream commit 8d07c82b239f7782be0d3afbb626390e2cb0c8f5 ]
+
 This is a workaround to prevent a crash, which might be caused by
 optimization of newer gcc (7.3.0) on Intel Skylake.
 
@@ -13,7 +15,6 @@
 but always enable AVX512F whenever supported.
 
 Bugzilla ID: 97
-Cc: stable@dpdk.org
 
 Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
 ---
@@ -21,12 +22,12 @@
  1 file changed, 5 insertions(+)
 
 diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk
-index 43ed84155..c3291b17a 100644
+index 8bbccb9ed..c7027a0fe 100644
 --- a/mk/rte.cpuflags.mk
 +++ b/mk/rte.cpuflags.mk
-@@ -68,6 +68,11 @@ endif
+@@ -91,6 +91,11 @@ endif
+ 
  ifneq ($(filter $(AUTO_CPUFLAGS),__AVX512F__),)
- ifeq ($(CONFIG_RTE_ENABLE_AVX512),y)
  CPUFLAGS += AVX512F
 +else
 +# disable AVX512F support of gcc as a workaround for Bug 97
@@ -34,8 +35,8 @@
 +MACHINE_CFLAGS += -mno-avx512f
 +endif
  endif
- endif
  
+ # IBM Power CPU flags
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'eal: fix build with gcc 9.0' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
  2018-11-08 18:00           ` [dpdk-stable] patch 'eal/linux: handle UIO read failure in interrupt handler' " Luca Boccassi
  2018-11-08 18:00           ` [dpdk-stable] patch 'mk: disable gcc AVX512F support' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'net/vhost: fix parameters string' " Luca Boccassi
                             ` (11 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 4bef71f921bc177eb53b4c19c75dc368a1ccb33c Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Fri, 2 Nov 2018 19:06:06 +0000
Subject: [PATCH] eal: fix build with gcc 9.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

[ upstream commit 3370975b994d793a89812031d86534916067dd67 ]

build error:
In function ‘eal_plugin_add’,
    .../lib/librte_eal/common/eal_common_options.c:225:2:
    error: ‘strncpy’ output may be truncated copying 4095 bytes from a
           string of length 4095 [-Werror=stringop-truncation]
    strncpy(solib->name, path, PATH_MAX-1);

strncpy may result a not null-terminated string,
replaced it with strlcpy

Fixes: f9a08f650211 ("eal: add support for shared object drivers")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 lib/librte_eal/common/eal_common_options.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
index 6ca8af17e..2dc86509b 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -179,7 +179,7 @@ eal_plugin_add(const char *path)
 		return -1;
 	}
 	memset(solib, 0, sizeof(*solib));
-	strncpy(solib->name, path, PATH_MAX-1);
+	strlcpy(solib->name, path, PATH_MAX-1);
 	solib->name[PATH_MAX-1] = 0;
 	TAILQ_INSERT_TAIL(&solib_list, solib, next);
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.141904587 +0000
+++ 0004-eal-fix-build-with-gcc-9.0.patch	2018-11-08 17:59:30.048751011 +0000
@@ -1,4 +1,4 @@
-From 3370975b994d793a89812031d86534916067dd67 Mon Sep 17 00:00:00 2001
+From 4bef71f921bc177eb53b4c19c75dc368a1ccb33c Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Fri, 2 Nov 2018 19:06:06 +0000
 Subject: [PATCH] eal: fix build with gcc 9.0
@@ -6,6 +6,8 @@
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
+[ upstream commit 3370975b994d793a89812031d86534916067dd67 ]
+
 build error:
 In function ‘eal_plugin_add’,
     .../lib/librte_eal/common/eal_common_options.c:225:2:
@@ -17,7 +19,6 @@
 replaced it with strlcpy
 
 Fixes: f9a08f650211 ("eal: add support for shared object drivers")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 ---
@@ -25,10 +26,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
-index b82f3ddd1..e31eca5c0 100644
+index 6ca8af17e..2dc86509b 100644
 --- a/lib/librte_eal/common/eal_common_options.c
 +++ b/lib/librte_eal/common/eal_common_options.c
-@@ -222,7 +222,7 @@ eal_plugin_add(const char *path)
+@@ -179,7 +179,7 @@ eal_plugin_add(const char *path)
  		return -1;
  	}
  	memset(solib, 0, sizeof(*solib));

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/vhost: fix parameters string' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (2 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'eal: fix build with gcc 9.0' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'net/virtio-user: do not reset owner when driver resets' " Luca Boccassi
                             ` (10 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Tiwei Bie; +Cc: Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 8ff27b743b657dc60f2c7a749de3bf7cb9d8238b Mon Sep 17 00:00:00 2001
From: Tiwei Bie <tiwei.bie@intel.com>
Date: Thu, 25 Oct 2018 17:46:59 +0800
Subject: [PATCH] net/vhost: fix parameters string

[ upstream commit 1a7a39eb3d380b6f49ad9d1e29a01bcfb306cba4 ]

Add the missing params to the param string.

Fixes: 39cac2adcad0 ("net/vhost: add client option")
Fixes: 4ce97c6f6b4f ("net/vhost: add an option to enable dequeue zero copy")
Fixes: 447e0d379756 ("net/vhost: add parameter to enable IOMMU feature")
Fixes: 6d6e95cec455 ("net/vhost: add parameter to enable postcopy")

Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 drivers/net/vhost/rte_eth_vhost.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index 12922df64..5858e5362 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -1248,4 +1248,6 @@ RTE_PMD_REGISTER_VDEV(net_vhost, pmd_vhost_drv);
 RTE_PMD_REGISTER_ALIAS(net_vhost, eth_vhost);
 RTE_PMD_REGISTER_PARAM_STRING(net_vhost,
 	"iface=<ifc> "
-	"queues=<int>");
+	"queues=<int> "
+	"client=<0|1> "
+	"dequeue-zero-copy=<0|1> ");
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.160910328 +0000
+++ 0005-net-vhost-fix-parameters-string.patch	2018-11-08 17:59:30.048751011 +0000
@@ -1,39 +1,35 @@
-From 1a7a39eb3d380b6f49ad9d1e29a01bcfb306cba4 Mon Sep 17 00:00:00 2001
+From 8ff27b743b657dc60f2c7a749de3bf7cb9d8238b Mon Sep 17 00:00:00 2001
 From: Tiwei Bie <tiwei.bie@intel.com>
 Date: Thu, 25 Oct 2018 17:46:59 +0800
 Subject: [PATCH] net/vhost: fix parameters string
 
+[ upstream commit 1a7a39eb3d380b6f49ad9d1e29a01bcfb306cba4 ]
+
 Add the missing params to the param string.
 
 Fixes: 39cac2adcad0 ("net/vhost: add client option")
 Fixes: 4ce97c6f6b4f ("net/vhost: add an option to enable dequeue zero copy")
 Fixes: 447e0d379756 ("net/vhost: add parameter to enable IOMMU feature")
 Fixes: 6d6e95cec455 ("net/vhost: add parameter to enable postcopy")
-Cc: stable@dpdk.org
 
 Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
 ---
- drivers/net/vhost/rte_eth_vhost.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
+ drivers/net/vhost/rte_eth_vhost.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
-index b38a4b6b1..42bdfcbd5 100644
+index 12922df64..5858e5362 100644
 --- a/drivers/net/vhost/rte_eth_vhost.c
 +++ b/drivers/net/vhost/rte_eth_vhost.c
-@@ -1467,7 +1467,11 @@ RTE_PMD_REGISTER_VDEV(net_vhost, pmd_vhost_drv);
+@@ -1248,4 +1248,6 @@ RTE_PMD_REGISTER_VDEV(net_vhost, pmd_vhost_drv);
  RTE_PMD_REGISTER_ALIAS(net_vhost, eth_vhost);
  RTE_PMD_REGISTER_PARAM_STRING(net_vhost,
  	"iface=<ifc> "
 -	"queues=<int>");
 +	"queues=<int> "
 +	"client=<0|1> "
-+	"dequeue-zero-copy=<0|1> "
-+	"iommu-support=<0|1> "
-+	"postcopy-support=<0|1>");
- 
- RTE_INIT(vhost_init_log)
- {
++	"dequeue-zero-copy=<0|1> ");
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/virtio-user: do not reset owner when driver resets' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (3 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'net/vhost: fix parameters string' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'net: fix build with pedantic' " Luca Boccassi
                             ` (9 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Tiwei Bie; +Cc: Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 4af6a676730e9fbebf916c17fce4bb41f7e52250 Mon Sep 17 00:00:00 2001
From: Tiwei Bie <tiwei.bie@intel.com>
Date: Mon, 29 Oct 2018 13:28:05 +0800
Subject: [PATCH] net/virtio-user: do not reset owner when driver resets

[ upstream commit 74dc6746a0f195907ec487df7de18a856108482f ]

When driver resets the device, virtio-user just needs to send
GET_VRING_BASE messages to stop the vhost backend, and that's
what QEMU does. With this change, we won't need to set owner
when starting virtio-user device anymore. This will help us to
get rid of below error message on startup:

vhost_kernel_ioctl(): VHOST_SET_OWNER failed: Device or resource busy

Fixes: bce7e9050f9b ("net/virtio-user: fix start with kernel vhost")
Fixes: 0d6a8752ac9d ("net/virtio-user: fix crash as features change")

Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 drivers/net/virtio/virtio_user/virtio_user_dev.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
index 8bb155d8c..3e6787a04 100644
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
@@ -142,9 +142,6 @@ virtio_user_start_device(struct virtio_user_dev *dev)
 	uint64_t features;
 	int ret;
 
-	/* Do not check return as already done in init, or reset in stop */
-	vhost_user_sock(dev->vhostfd, VHOST_USER_SET_OWNER, NULL);
-
 	/* Step 0: tell vhost to create queues */
 	if (virtio_user_queue_setup(dev, virtio_user_create_queue) < 0)
 		goto error;
@@ -185,6 +182,7 @@ error:
 
 int virtio_user_stop_device(struct virtio_user_dev *dev)
 {
+	struct vhost_vring_state state;
 	uint32_t i;
 
 	for (i = 0; i < dev->max_queue_pairs * 2; ++i) {
@@ -195,6 +193,17 @@ int virtio_user_stop_device(struct virtio_user_dev *dev)
 	for (i = 0; i < dev->max_queue_pairs; ++i)
 		vhost_user_enable_queue_pair(dev->vhostfd, i, 0);
 
+	/* Stop the backend. */
+	for (i = 0; i < dev->max_queue_pairs * 2; ++i) {
+		state.index = i;
+		if (vhost_user_sock(dev->vhostfd, VHOST_USER_GET_VRING_BASE,
+					   &state) < 0) {
+			PMD_DRV_LOG(ERR, "get_vring_base failed, index=%u\n",
+				    i);
+			return -1;
+		}
+	}
+
 	return 0;
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.179161135 +0000
+++ 0006-net-virtio-user-do-not-reset-owner-when-driver-reset.patch	2018-11-08 17:59:30.048751011 +0000
@@ -1,8 +1,10 @@
-From 74dc6746a0f195907ec487df7de18a856108482f Mon Sep 17 00:00:00 2001
+From 4af6a676730e9fbebf916c17fce4bb41f7e52250 Mon Sep 17 00:00:00 2001
 From: Tiwei Bie <tiwei.bie@intel.com>
 Date: Mon, 29 Oct 2018 13:28:05 +0800
 Subject: [PATCH] net/virtio-user: do not reset owner when driver resets
 
+[ upstream commit 74dc6746a0f195907ec487df7de18a856108482f ]
+
 When driver resets the device, virtio-user just needs to send
 GET_VRING_BASE messages to stop the vhost backend, and that's
 what QEMU does. With this change, we won't need to set owner
@@ -13,67 +15,53 @@
 
 Fixes: bce7e9050f9b ("net/virtio-user: fix start with kernel vhost")
 Fixes: 0d6a8752ac9d ("net/virtio-user: fix crash as features change")
-Cc: stable@dpdk.org
 
 Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
 ---
- .../net/virtio/virtio_user/virtio_user_dev.c  | 22 ++++++++++++-------
- 1 file changed, 14 insertions(+), 8 deletions(-)
+ drivers/net/virtio/virtio_user/virtio_user_dev.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
-index 0e3563051..0eb0f244b 100644
+index 8bb155d8c..3e6787a04 100644
 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
 +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
-@@ -134,9 +134,6 @@ virtio_user_start_device(struct virtio_user_dev *dev)
- 	if (is_vhost_user_by_type(dev->path) && dev->vhostfd < 0)
- 		goto error;
+@@ -142,9 +142,6 @@ virtio_user_start_device(struct virtio_user_dev *dev)
+ 	uint64_t features;
+ 	int ret;
  
 -	/* Do not check return as already done in init, or reset in stop */
--	dev->ops->send_request(dev, VHOST_USER_SET_OWNER, NULL);
+-	vhost_user_sock(dev->vhostfd, VHOST_USER_SET_OWNER, NULL);
 -
  	/* Step 0: tell vhost to create queues */
  	if (virtio_user_queue_setup(dev, virtio_user_create_queue) < 0)
  		goto error;
-@@ -181,7 +178,9 @@ error:
+@@ -185,6 +182,7 @@ error:
  
  int virtio_user_stop_device(struct virtio_user_dev *dev)
  {
 +	struct vhost_vring_state state;
  	uint32_t i;
-+	int error = 0;
  
- 	pthread_mutex_lock(&dev->mutex);
- 	if (!dev->started)
-@@ -190,16 +189,23 @@ int virtio_user_stop_device(struct virtio_user_dev *dev)
+ 	for (i = 0; i < dev->max_queue_pairs * 2; ++i) {
+@@ -195,6 +193,17 @@ int virtio_user_stop_device(struct virtio_user_dev *dev)
  	for (i = 0; i < dev->max_queue_pairs; ++i)
- 		dev->ops->enable_qp(dev, i, 0);
+ 		vhost_user_enable_queue_pair(dev->vhostfd, i, 0);
  
--	if (dev->ops->send_request(dev, VHOST_USER_RESET_OWNER, NULL) < 0) {
--		PMD_DRV_LOG(INFO, "Failed to reset the device\n");
--		pthread_mutex_unlock(&dev->mutex);
--		return -1;
 +	/* Stop the backend. */
 +	for (i = 0; i < dev->max_queue_pairs * 2; ++i) {
 +		state.index = i;
-+		if (dev->ops->send_request(dev, VHOST_USER_GET_VRING_BASE,
++		if (vhost_user_sock(dev->vhostfd, VHOST_USER_GET_VRING_BASE,
 +					   &state) < 0) {
 +			PMD_DRV_LOG(ERR, "get_vring_base failed, index=%u\n",
 +				    i);
-+			error = -1;
-+			goto out;
++			return -1;
 +		}
- 	}
++	}
 +
- 	dev->started = false;
- out:
- 	pthread_mutex_unlock(&dev->mutex);
- 
--	return 0;
-+	return error;
+ 	return 0;
  }
  
- static inline void
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net: fix build with pedantic' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (4 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'net/virtio-user: do not reset owner when driver resets' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'net/igb: update Tx offload mask' " Luca Boccassi
                             ` (8 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Shahaf Shuler; +Cc: Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 80f92131f535471341435317acf0b3cab7f75fdb Mon Sep 17 00:00:00 2001
From: Shahaf Shuler <shahafs@mellanox.com>
Date: Thu, 1 Nov 2018 14:46:45 +0200
Subject: [PATCH] net: fix build with pedantic

[ upstream commit be685863a9ea636bf7924f0a8034bb4c21fb1402 ]

The following error popped when compiling with -pedantic:

In file included from
 drivers/net/mlx5/mlx5_flow_dv.c:28:0:
 include/rte_gre.h:20:2:
 error: type of bit-field 'res2' is a GCC  extension [-Werror=pedantic]
 uint16_t res2:4; /**< Reserved */

Fixing by adding the __extension__ attribute.

Fixes: 894f71a3805d ("net: add GRE header structure")

Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 lib/librte_net/rte_gre.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/librte_net/rte_gre.h b/lib/librte_net/rte_gre.h
index 46568ff57..8a3414cfb 100644
--- a/lib/librte_net/rte_gre.h
+++ b/lib/librte_net/rte_gre.h
@@ -43,6 +43,7 @@ extern "C" {
 /**
  * GRE Header
  */
+__extension__
 struct gre_hdr {
 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
 	uint16_t res2:4; /**< Reserved */
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.196603205 +0000
+++ 0007-net-fix-build-with-pedantic.patch	2018-11-08 17:59:30.052751010 +0000
@@ -1,8 +1,10 @@
-From be685863a9ea636bf7924f0a8034bb4c21fb1402 Mon Sep 17 00:00:00 2001
+From 80f92131f535471341435317acf0b3cab7f75fdb Mon Sep 17 00:00:00 2001
 From: Shahaf Shuler <shahafs@mellanox.com>
 Date: Thu, 1 Nov 2018 14:46:45 +0200
 Subject: [PATCH] net: fix build with pedantic
 
+[ upstream commit be685863a9ea636bf7924f0a8034bb4c21fb1402 ]
+
 The following error popped when compiling with -pedantic:
 
 In file included from
@@ -14,7 +16,6 @@
 Fixing by adding the __extension__ attribute.
 
 Fixes: 894f71a3805d ("net: add GRE header structure")
-Cc: stable@dpdk.org
 
 Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
 Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
@@ -23,10 +24,10 @@
  1 file changed, 1 insertion(+)
 
 diff --git a/lib/librte_net/rte_gre.h b/lib/librte_net/rte_gre.h
-index 69499bb82..05aa9d143 100644
+index 46568ff57..8a3414cfb 100644
 --- a/lib/librte_net/rte_gre.h
 +++ b/lib/librte_net/rte_gre.h
-@@ -15,6 +15,7 @@ extern "C" {
+@@ -43,6 +43,7 @@ extern "C" {
  /**
   * GRE Header
   */

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/igb: update Tx offload mask' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (5 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'net: fix build with pedantic' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'ip_frag: check fragment length of incoming packet' " Luca Boccassi
                             ` (7 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Zhirun Yan; +Cc: Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 1a230ad585b73a817ece26cc2615c312ec686362 Mon Sep 17 00:00:00 2001
From: Zhirun Yan <zhirun.yan@intel.com>
Date: Mon, 5 Nov 2018 12:56:44 +0000
Subject: [PATCH] net/igb: update Tx offload mask

[ upstream commit ac60b2de4f551be7486292cd8c555f4dd955944a ]

Tx offload mask is updated in following commit 1037ed842c37
("mbuf: fix Tx offload mask") Currently, the new added offload
flags are not supported in PMD and application will fail to call
PMD transmit prepare function.

This patch updates IGB_TX_OFFFLOAD_MASK.

Fixes: 1037ed842c37 ("mbuf: fix Tx offload mask")

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 drivers/net/e1000/igb_rxtx.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c
index 556d46058..4d1127712 100644
--- a/drivers/net/e1000/igb_rxtx.c
+++ b/drivers/net/e1000/igb_rxtx.c
@@ -73,6 +73,10 @@
 
 /* Bit Mask to indicate what bits required for building TX context */
 #define IGB_TX_OFFLOAD_MASK (			 \
+		PKT_TX_OUTER_IPV6 |	 \
+		PKT_TX_OUTER_IPV4 |	 \
+		PKT_TX_IPV6 |		 \
+		PKT_TX_IPV4 |		 \
 		PKT_TX_VLAN_PKT |		 \
 		PKT_TX_IP_CKSUM |		 \
 		PKT_TX_L4_MASK |		 \
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.213143310 +0000
+++ 0008-net-igb-update-Tx-offload-mask.patch	2018-11-08 17:59:30.056751011 +0000
@@ -1,8 +1,10 @@
-From ac60b2de4f551be7486292cd8c555f4dd955944a Mon Sep 17 00:00:00 2001
+From 1a230ad585b73a817ece26cc2615c312ec686362 Mon Sep 17 00:00:00 2001
 From: Zhirun Yan <zhirun.yan@intel.com>
 Date: Mon, 5 Nov 2018 12:56:44 +0000
 Subject: [PATCH] net/igb: update Tx offload mask
 
+[ upstream commit ac60b2de4f551be7486292cd8c555f4dd955944a ]
+
 Tx offload mask is updated in following commit 1037ed842c37
 ("mbuf: fix Tx offload mask") Currently, the new added offload
 flags are not supported in PMD and application will fail to call
@@ -11,7 +13,6 @@
 This patch updates IGB_TX_OFFFLOAD_MASK.
 
 Fixes: 1037ed842c37 ("mbuf: fix Tx offload mask")
-Cc: stable@dpdk.org
 
 Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
 Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
@@ -20,11 +21,11 @@
  1 file changed, 4 insertions(+)
 
 diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c
-index 25ff5f68f..ab0a80e15 100644
+index 556d46058..4d1127712 100644
 --- a/drivers/net/e1000/igb_rxtx.c
 +++ b/drivers/net/e1000/igb_rxtx.c
-@@ -50,6 +50,10 @@
- #endif
+@@ -73,6 +73,10 @@
+ 
  /* Bit Mask to indicate what bits required for building TX context */
  #define IGB_TX_OFFLOAD_MASK (			 \
 +		PKT_TX_OUTER_IPV6 |	 \

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'ip_frag: check fragment length of incoming packet' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (6 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'net/igb: update Tx offload mask' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'ip_frag: use key length for key comparison' " Luca Boccassi
                             ` (6 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Konstantin Ananyev; +Cc: Ryan E Hall, Alexander V Gutkin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 98b8b5d86b13e3b54c5145a3355acf68967fe954 Mon Sep 17 00:00:00 2001
From: Konstantin Ananyev <konstantin.ananyev@intel.com>
Date: Mon, 5 Nov 2018 12:18:57 +0000
Subject: [PATCH] ip_frag: check fragment length of incoming packet

[ upstream commit 7f0983ee331c9f08dabdb5b7f555ddf399003dcf ]

Under some conditions ill-formed fragments might cause
reassembly code to corrupt mbufs and/or crash.
Let say the following fragments sequence:
<ofs=0,len=100, flags=MF>
<ofs=96,len=100, flags=MF>
<ofs=200,len=0,flags=MF>
<ofs=200,len=100,flags=0>
can trigger the problem.
To overcome such situation, added check that fragment length
of incoming value is greater than zero.

Fixes: 601e279df074 ("ip_frag: move fragmentation/reassembly headers into a library")
Fixes: 4f1a8f633862 ("ip_frag: add IPv6 reassembly")

Reported-by: Ryan E Hall <ryan.e.hall@intel.com>
Reported-by: Alexander V Gutkin <alexander.v.gutkin@intel.com>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 lib/librte_ip_frag/rte_ipv4_reassembly.c | 22 +++++++++++++------
 lib/librte_ip_frag/rte_ipv6_reassembly.c | 28 +++++++++++++++++-------
 2 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/lib/librte_ip_frag/rte_ipv4_reassembly.c b/lib/librte_ip_frag/rte_ipv4_reassembly.c
index 847ea0d63..ede2ae090 100644
--- a/lib/librte_ip_frag/rte_ipv4_reassembly.c
+++ b/lib/librte_ip_frag/rte_ipv4_reassembly.c
@@ -65,8 +65,11 @@ ipv4_frag_reassemble(struct ip_frag_pkt *fp)
 			/* previous fragment found. */
 			if(fp->frags[i].ofs + fp->frags[i].len == ofs) {
 
+				RTE_ASSERT(curr_idx != i);
+
 				/* adjust start of the last fragment data. */
-				rte_pktmbuf_adj(m, (uint16_t)(m->l2_len + m->l3_len));
+				rte_pktmbuf_adj(m,
+					(uint16_t)(m->l2_len + m->l3_len));
 				rte_pktmbuf_chain(fp->frags[i].mb, m);
 
 				/* this mbuf should not be accessed directly */
@@ -125,14 +128,14 @@ ipv4_frag_reassemble(struct ip_frag_pkt *fp)
  */
 struct rte_mbuf *
 rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
-		struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms,
-		struct ipv4_hdr *ip_hdr)
+	struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms,
+	struct ipv4_hdr *ip_hdr)
 {
 	struct ip_frag_pkt *fp;
 	struct ip_frag_key key;
 	const unaligned_uint64_t *psd;
-	uint16_t ip_len;
 	uint16_t flag_offset, ip_ofs, ip_flag;
+	int32_t ip_len;
 
 	flag_offset = rte_be_to_cpu_16(ip_hdr->fragment_offset);
 	ip_ofs = (uint16_t)(flag_offset & IPV4_HDR_OFFSET_MASK);
@@ -145,12 +148,11 @@ rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
 	key.key_len = IPV4_KEYLEN;
 
 	ip_ofs *= IPV4_HDR_OFFSET_UNITS;
-	ip_len = (uint16_t)(rte_be_to_cpu_16(ip_hdr->total_length) -
-		mb->l3_len);
+	ip_len = rte_be_to_cpu_16(ip_hdr->total_length) - mb->l3_len;
 
 	IP_FRAG_LOG(DEBUG, "%s:%d:\n"
 		"mbuf: %p, tms: %" PRIu64
-		", key: <%" PRIx64 ", %#x>, ofs: %u, len: %u, flags: %#x\n"
+		", key: <%" PRIx64 ", %#x>, ofs: %u, len: %d, flags: %#x\n"
 		"tbl: %p, max_cycles: %" PRIu64 ", entry_mask: %#x, "
 		"max_entries: %u, use_entries: %u\n\n",
 		__func__, __LINE__,
@@ -158,6 +160,12 @@ rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
 		tbl, tbl->max_cycles, tbl->entry_mask, tbl->max_entries,
 		tbl->use_entries);
 
+	/* check that fragment length is greater then zero. */
+	if (ip_len <= 0) {
+		IP_FRAG_MBUF2DR(dr, mb);
+		return NULL;
+	}
+
 	/* try to find/add entry into the fragment's table. */
 	if ((fp = ip_frag_find(tbl, dr, &key, tms)) == NULL) {
 		IP_FRAG_MBUF2DR(dr, mb);
diff --git a/lib/librte_ip_frag/rte_ipv6_reassembly.c b/lib/librte_ip_frag/rte_ipv6_reassembly.c
index d9b5d6903..9f080d6e9 100644
--- a/lib/librte_ip_frag/rte_ipv6_reassembly.c
+++ b/lib/librte_ip_frag/rte_ipv6_reassembly.c
@@ -88,8 +88,11 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
 			/* previous fragment found. */
 			if (fp->frags[i].ofs + fp->frags[i].len == ofs) {
 
+				RTE_ASSERT(curr_idx != i);
+
 				/* adjust start of the last fragment data. */
-				rte_pktmbuf_adj(m, (uint16_t)(m->l2_len + m->l3_len));
+				rte_pktmbuf_adj(m,
+					(uint16_t)(m->l2_len + m->l3_len));
 				rte_pktmbuf_chain(fp->frags[i].mb, m);
 
 				/* this mbuf should not be accessed directly */
@@ -164,12 +167,13 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
 #define FRAG_OFFSET(x) (rte_cpu_to_be_16(x) >> 3)
 struct rte_mbuf *
 rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
-		struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms,
-		struct ipv6_hdr *ip_hdr, struct ipv6_extension_fragment *frag_hdr)
+	struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms,
+	struct ipv6_hdr *ip_hdr, struct ipv6_extension_fragment *frag_hdr)
 {
 	struct ip_frag_pkt *fp;
 	struct ip_frag_key key;
-	uint16_t ip_len, ip_ofs;
+	uint16_t ip_ofs;
+	int32_t ip_len;
 
 	rte_memcpy(&key.src_dst[0], ip_hdr->src_addr, 16);
 	rte_memcpy(&key.src_dst[2], ip_hdr->dst_addr, 16);
@@ -180,15 +184,17 @@ rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
 	ip_ofs = FRAG_OFFSET(frag_hdr->frag_data) * 8;
 
 	/*
-	 * as per RFC2460, payload length contains all extension headers as well.
-	 * since we don't support anything but frag headers, this is what we remove
-	 * from the payload len.
+	 * as per RFC2460, payload length contains all extension headers
+	 * as well.
+	 * since we don't support anything but frag headers,
+	 * this is what we remove from the payload len.
 	 */
 	ip_len = rte_be_to_cpu_16(ip_hdr->payload_len) - sizeof(*frag_hdr);
 
 	IP_FRAG_LOG(DEBUG, "%s:%d:\n"
 		"mbuf: %p, tms: %" PRIu64
-		", key: <" IPv6_KEY_BYTES_FMT ", %#x>, ofs: %u, len: %u, flags: %#x\n"
+		", key: <" IPv6_KEY_BYTES_FMT ", %#x>, "
+		"ofs: %u, len: %d, flags: %#x\n"
 		"tbl: %p, max_cycles: %" PRIu64 ", entry_mask: %#x, "
 		"max_entries: %u, use_entries: %u\n\n",
 		__func__, __LINE__,
@@ -197,6 +203,12 @@ rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
 		tbl, tbl->max_cycles, tbl->entry_mask, tbl->max_entries,
 		tbl->use_entries);
 
+	/* check that fragment length is greater then zero. */
+	if (ip_len <= 0) {
+		IP_FRAG_MBUF2DR(dr, mb);
+		return NULL;
+	}
+
 	/* try to find/add entry into the fragment's table. */
 	fp = ip_frag_find(tbl, dr, &key, tms);
 	if (fp == NULL) {
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.232489867 +0000
+++ 0009-ip_frag-check-fragment-length-of-incoming-packet.patch	2018-11-08 17:59:30.056751011 +0000
@@ -1,8 +1,10 @@
-From 7f0983ee331c9f08dabdb5b7f555ddf399003dcf Mon Sep 17 00:00:00 2001
+From 98b8b5d86b13e3b54c5145a3355acf68967fe954 Mon Sep 17 00:00:00 2001
 From: Konstantin Ananyev <konstantin.ananyev@intel.com>
 Date: Mon, 5 Nov 2018 12:18:57 +0000
 Subject: [PATCH] ip_frag: check fragment length of incoming packet
 
+[ upstream commit 7f0983ee331c9f08dabdb5b7f555ddf399003dcf ]
+
 Under some conditions ill-formed fragments might cause
 reassembly code to corrupt mbufs and/or crash.
 Let say the following fragments sequence:
@@ -16,7 +18,6 @@
 
 Fixes: 601e279df074 ("ip_frag: move fragmentation/reassembly headers into a library")
 Fixes: 4f1a8f633862 ("ip_frag: add IPv6 reassembly")
-Cc: stable@dpdk.org
 
 Reported-by: Ryan E Hall <ryan.e.hall@intel.com>
 Reported-by: Alexander V Gutkin <alexander.v.gutkin@intel.com>
@@ -27,10 +28,10 @@
  2 files changed, 35 insertions(+), 15 deletions(-)
 
 diff --git a/lib/librte_ip_frag/rte_ipv4_reassembly.c b/lib/librte_ip_frag/rte_ipv4_reassembly.c
-index 4956b99ea..1029b7abc 100644
+index 847ea0d63..ede2ae090 100644
 --- a/lib/librte_ip_frag/rte_ipv4_reassembly.c
 +++ b/lib/librte_ip_frag/rte_ipv4_reassembly.c
-@@ -36,8 +36,11 @@ ipv4_frag_reassemble(struct ip_frag_pkt *fp)
+@@ -65,8 +65,11 @@ ipv4_frag_reassemble(struct ip_frag_pkt *fp)
  			/* previous fragment found. */
  			if(fp->frags[i].ofs + fp->frags[i].len == ofs) {
  
@@ -43,7 +44,7 @@
  				rte_pktmbuf_chain(fp->frags[i].mb, m);
  
  				/* this mbuf should not be accessed directly */
-@@ -96,14 +99,14 @@ ipv4_frag_reassemble(struct ip_frag_pkt *fp)
+@@ -125,14 +128,14 @@ ipv4_frag_reassemble(struct ip_frag_pkt *fp)
   */
  struct rte_mbuf *
  rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
@@ -61,7 +62,7 @@
  
  	flag_offset = rte_be_to_cpu_16(ip_hdr->fragment_offset);
  	ip_ofs = (uint16_t)(flag_offset & IPV4_HDR_OFFSET_MASK);
-@@ -116,12 +119,11 @@ rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
+@@ -145,12 +148,11 @@ rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
  	key.key_len = IPV4_KEYLEN;
  
  	ip_ofs *= IPV4_HDR_OFFSET_UNITS;
@@ -76,7 +77,7 @@
  		"tbl: %p, max_cycles: %" PRIu64 ", entry_mask: %#x, "
  		"max_entries: %u, use_entries: %u\n\n",
  		__func__, __LINE__,
-@@ -129,6 +131,12 @@ rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
+@@ -158,6 +160,12 @@ rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
  		tbl, tbl->max_cycles, tbl->entry_mask, tbl->max_entries,
  		tbl->use_entries);
  
@@ -90,10 +91,10 @@
  	if ((fp = ip_frag_find(tbl, dr, &key, tms)) == NULL) {
  		IP_FRAG_MBUF2DR(dr, mb);
 diff --git a/lib/librte_ip_frag/rte_ipv6_reassembly.c b/lib/librte_ip_frag/rte_ipv6_reassembly.c
-index db249fe60..855e3f740 100644
+index d9b5d6903..9f080d6e9 100644
 --- a/lib/librte_ip_frag/rte_ipv6_reassembly.c
 +++ b/lib/librte_ip_frag/rte_ipv6_reassembly.c
-@@ -59,8 +59,11 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
+@@ -88,8 +88,11 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
  			/* previous fragment found. */
  			if (fp->frags[i].ofs + fp->frags[i].len == ofs) {
  
@@ -106,7 +107,7 @@
  				rte_pktmbuf_chain(fp->frags[i].mb, m);
  
  				/* this mbuf should not be accessed directly */
-@@ -135,12 +138,13 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
+@@ -164,12 +167,13 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
  #define FRAG_OFFSET(x) (rte_cpu_to_be_16(x) >> 3)
  struct rte_mbuf *
  rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
@@ -123,7 +124,7 @@
  
  	rte_memcpy(&key.src_dst[0], ip_hdr->src_addr, 16);
  	rte_memcpy(&key.src_dst[2], ip_hdr->dst_addr, 16);
-@@ -151,15 +155,17 @@ rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
+@@ -180,15 +184,17 @@ rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
  	ip_ofs = FRAG_OFFSET(frag_hdr->frag_data) * 8;
  
  	/*
@@ -145,7 +146,7 @@
  		"tbl: %p, max_cycles: %" PRIu64 ", entry_mask: %#x, "
  		"max_entries: %u, use_entries: %u\n\n",
  		__func__, __LINE__,
-@@ -168,6 +174,12 @@ rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
+@@ -197,6 +203,12 @@ rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
  		tbl, tbl->max_cycles, tbl->entry_mask, tbl->max_entries,
  		tbl->use_entries);
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'ip_frag: use key length for key comparison' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (7 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'ip_frag: check fragment length of incoming packet' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' " Luca Boccassi
                             ` (5 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Konstantin Ananyev; +Cc: Ryan E Hall, Alexander V Gutkin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From bbf8160d6cd6e37e3089a8e3b9aafe16aa93ec39 Mon Sep 17 00:00:00 2001
From: Konstantin Ananyev <konstantin.ananyev@intel.com>
Date: Mon, 5 Nov 2018 12:18:58 +0000
Subject: [PATCH] ip_frag: use key length for key comparison

[ upstream commit b8d5dfd4a5f006794d85f93fc97134460ffbdfdf ]

Right now reassembly code relies on src_dst[] being all zeroes to
determine is it  free/occupied entry in the fragments table.
This is suboptimal and error prone - user can crash DPDK ip_reassembly
app by something like the following scapy script:
x=Ether(src=...,dst=...)/IP(dst='0.0.0.0',src='0.0.0.0',id=0)/('X'*1000)
frags=fragment(x, fragsize=500)
sendp(frags, iface=...)
To overcome that issue and reduce overhead of
'key invalidate'  and 'key is empty' operations -
add key_len into keys comparision procedure.

Fixes: 4f1a8f633862 ("ip_frag: add IPv6 reassembly")

Reported-by: Ryan E Hall <ryan.e.hall@intel.com>
Reported-by: Alexander V Gutkin <alexander.v.gutkin@intel.com>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 lib/librte_ip_frag/ip_frag_common.h | 14 ++++----------
 lib/librte_ip_frag/rte_ip_frag.h    | 14 +++++++++++---
 2 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/lib/librte_ip_frag/ip_frag_common.h b/lib/librte_ip_frag/ip_frag_common.h
index ffba1b49b..5382a3e3f 100644
--- a/lib/librte_ip_frag/ip_frag_common.h
+++ b/lib/librte_ip_frag/ip_frag_common.h
@@ -81,20 +81,14 @@ struct rte_mbuf *ipv6_frag_reassemble(struct ip_frag_pkt *fp);
 static inline int
 ip_frag_key_is_empty(const struct ip_frag_key * key)
 {
-	uint32_t i;
-	for (i = 0; i < RTE_MIN(key->key_len, RTE_DIM(key->src_dst)); i++)
-		if (key->src_dst[i] != 0)
-			return 0;
-	return 1;
+	return (key->key_len == 0);
 }
 
-/* empty the key */
+/* invalidate the key */
 static inline void
 ip_frag_key_invalidate(struct ip_frag_key * key)
 {
-	uint32_t i;
-	for (i = 0; i < key->key_len; i++)
-		key->src_dst[i] = 0;
+	key->key_len = 0;
 }
 
 /* compare two keys */
@@ -103,7 +97,7 @@ ip_frag_key_cmp(const struct ip_frag_key * k1, const struct ip_frag_key * k2)
 {
 	uint32_t i;
 	uint64_t val;
-	val = k1->id ^ k2->id;
+	val = k1->id_key_len ^ k2->id_key_len;
 	for (i = 0; i < k1->key_len; i++)
 		val |= k1->src_dst[i] ^ k2->src_dst[i];
 	return val;
diff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/librte_ip_frag/rte_ip_frag.h
index 6708906d3..e13486ac7 100644
--- a/lib/librte_ip_frag/rte_ip_frag.h
+++ b/lib/librte_ip_frag/rte_ip_frag.h
@@ -72,9 +72,17 @@ struct ip_frag {
 
 /** @internal <src addr, dst_addr, id> to uniquely indetify fragmented datagram. */
 struct ip_frag_key {
-	uint64_t src_dst[4];      /**< src address, first 8 bytes used for IPv4 */
-	uint32_t id;           /**< dst address */
-	uint32_t key_len;      /**< src/dst key length */
+	uint64_t src_dst[4];
+	/**< src and dst address, only first 8 bytes used for IPv4 */
+	RTE_STD_C11
+	union {
+		uint64_t id_key_len; /**< combined for easy fetch */
+		__extension__
+		struct {
+			uint32_t id;       /**< packet id */
+			uint32_t key_len;  /**< src/dst key length */
+		};
+	};
 };
 
 /**
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.250110095 +0000
+++ 0010-ip_frag-use-key-length-for-key-comparison.patch	2018-11-08 17:59:30.056751011 +0000
@@ -1,8 +1,10 @@
-From b8d5dfd4a5f006794d85f93fc97134460ffbdfdf Mon Sep 17 00:00:00 2001
+From bbf8160d6cd6e37e3089a8e3b9aafe16aa93ec39 Mon Sep 17 00:00:00 2001
 From: Konstantin Ananyev <konstantin.ananyev@intel.com>
 Date: Mon, 5 Nov 2018 12:18:58 +0000
 Subject: [PATCH] ip_frag: use key length for key comparison
 
+[ upstream commit b8d5dfd4a5f006794d85f93fc97134460ffbdfdf ]
+
 Right now reassembly code relies on src_dst[] being all zeroes to
 determine is it  free/occupied entry in the fragments table.
 This is suboptimal and error prone - user can crash DPDK ip_reassembly
@@ -15,7 +17,6 @@
 add key_len into keys comparision procedure.
 
 Fixes: 4f1a8f633862 ("ip_frag: add IPv6 reassembly")
-Cc: stable@dpdk.org
 
 Reported-by: Ryan E Hall <ryan.e.hall@intel.com>
 Reported-by: Alexander V Gutkin <alexander.v.gutkin@intel.com>
@@ -26,10 +27,10 @@
  2 files changed, 15 insertions(+), 13 deletions(-)
 
 diff --git a/lib/librte_ip_frag/ip_frag_common.h b/lib/librte_ip_frag/ip_frag_common.h
-index 0f62e2e16..a17a74076 100644
+index ffba1b49b..5382a3e3f 100644
 --- a/lib/librte_ip_frag/ip_frag_common.h
 +++ b/lib/librte_ip_frag/ip_frag_common.h
-@@ -58,20 +58,14 @@ struct rte_mbuf *ipv6_frag_reassemble(struct ip_frag_pkt *fp);
+@@ -81,20 +81,14 @@ struct rte_mbuf *ipv6_frag_reassemble(struct ip_frag_pkt *fp);
  static inline int
  ip_frag_key_is_empty(const struct ip_frag_key * key)
  {
@@ -53,7 +54,7 @@
  }
  
  /* compare two keys */
-@@ -80,7 +74,7 @@ ip_frag_key_cmp(const struct ip_frag_key * k1, const struct ip_frag_key * k2)
+@@ -103,7 +97,7 @@ ip_frag_key_cmp(const struct ip_frag_key * k1, const struct ip_frag_key * k2)
  {
  	uint32_t i;
  	uint64_t val;
@@ -63,12 +64,12 @@
  		val |= k1->src_dst[i] ^ k2->src_dst[i];
  	return val;
 diff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/librte_ip_frag/rte_ip_frag.h
-index 7f425f610..a4ccaf9d1 100644
+index 6708906d3..e13486ac7 100644
 --- a/lib/librte_ip_frag/rte_ip_frag.h
 +++ b/lib/librte_ip_frag/rte_ip_frag.h
-@@ -44,9 +44,17 @@ struct ip_frag {
+@@ -72,9 +72,17 @@ struct ip_frag {
  
- /** @internal <src addr, dst_addr, id> to uniquely identify fragmented datagram. */
+ /** @internal <src addr, dst_addr, id> to uniquely indetify fragmented datagram. */
  struct ip_frag_key {
 -	uint64_t src_dst[4];      /**< src address, first 8 bytes used for IPv4 */
 -	uint32_t id;           /**< dst address */

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (8 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'ip_frag: use key length for key comparison' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-12 18:35             ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'bus/pci: fix config r/w access' " Luca Boccassi
                             ` (4 subsequent siblings)
  14 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Alejandro Lucero; +Cc: Anatoly Burakov, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 0df09603d47c1e38140b747baa8b712e70f5df51 Mon Sep 17 00:00:00 2001
From: Alejandro Lucero <alejandro.lucero@netronome.com>
Date: Thu, 25 Oct 2018 11:49:28 +0100
Subject: [PATCH] bus/pci: compare kernel driver instead of interrupt handler

[ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]

Invoking the right pci read/write functions is based on interrupt
handler type. However, this is not configured for secondary processes
precluding to use those functions.

This patch fixes the issue using the driver name the device is bound
to instead.

Fixes: 632b2d1deeed ("eal: provide functions to access PCI config")

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 lib/librte_eal/linuxapp/eal/eal_pci.c | 33 ++++++++++++---------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index 02ec24150..85c7b3139 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -36,6 +36,7 @@
 
 #include <rte_log.h>
 #include <rte_pci.h>
+#include <rte_ethdev.h>
 #include <rte_eal_memconfig.h>
 #include <rte_malloc.h>
 #include <rte_devargs.h>
@@ -526,23 +527,21 @@ error:
 int rte_eal_pci_read_config(const struct rte_pci_device *device,
 			    void *buf, size_t len, off_t offset)
 {
+	char devname[RTE_ETH_NAME_MAX_LEN] = "";
 	const struct rte_intr_handle *intr_handle = &device->intr_handle;
 
-	switch (intr_handle->type) {
-	case RTE_INTR_HANDLE_UIO:
-	case RTE_INTR_HANDLE_UIO_INTX:
+	switch (device->kdrv) {
+	case RTE_KDRV_IGB_UIO:
 		return pci_uio_read_config(intr_handle, buf, len, offset);
-
 #ifdef VFIO_PRESENT
-	case RTE_INTR_HANDLE_VFIO_MSIX:
-	case RTE_INTR_HANDLE_VFIO_MSI:
-	case RTE_INTR_HANDLE_VFIO_LEGACY:
+	case RTE_KDRV_VFIO:
 		return pci_vfio_read_config(intr_handle, buf, len, offset);
 #endif
 	default:
+		rte_eal_pci_device_name(&device->addr, devname,
+				    RTE_ETH_NAME_MAX_LEN);
 		RTE_LOG(ERR, EAL,
-			"Unknown handle type of fd %d\n",
-					intr_handle->fd);
+			"Unknown driver type for %s\n", devname);
 		return -1;
 	}
 }
@@ -551,23 +550,21 @@ int rte_eal_pci_read_config(const struct rte_pci_device *device,
 int rte_eal_pci_write_config(const struct rte_pci_device *device,
 			     const void *buf, size_t len, off_t offset)
 {
+	char devname[RTE_ETH_NAME_MAX_LEN] = "";
 	const struct rte_intr_handle *intr_handle = &device->intr_handle;
 
-	switch (intr_handle->type) {
-	case RTE_INTR_HANDLE_UIO:
-	case RTE_INTR_HANDLE_UIO_INTX:
+	switch (device->kdrv) {
+	case RTE_KDRV_IGB_UIO:
 		return pci_uio_write_config(intr_handle, buf, len, offset);
-
 #ifdef VFIO_PRESENT
-	case RTE_INTR_HANDLE_VFIO_MSIX:
-	case RTE_INTR_HANDLE_VFIO_MSI:
-	case RTE_INTR_HANDLE_VFIO_LEGACY:
+	case RTE_KDRV_VFIO:
 		return pci_vfio_write_config(intr_handle, buf, len, offset);
 #endif
 	default:
+		rte_eal_pci_device_name(&device->addr, devname,
+				    RTE_ETH_NAME_MAX_LEN);
 		RTE_LOG(ERR, EAL,
-			"Unknown handle type of fd %d\n",
-					intr_handle->fd);
+			"Unknown driver type for %s\n", devname);
 		return -1;
 	}
 }
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.267313264 +0000
+++ 0011-bus-pci-compare-kernel-driver-instead-of-interrupt-h.patch	2018-11-08 17:59:30.060751011 +0000
@@ -1,8 +1,10 @@
-From 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 Mon Sep 17 00:00:00 2001
+From 0df09603d47c1e38140b747baa8b712e70f5df51 Mon Sep 17 00:00:00 2001
 From: Alejandro Lucero <alejandro.lucero@netronome.com>
 Date: Thu, 25 Oct 2018 11:49:28 +0100
 Subject: [PATCH] bus/pci: compare kernel driver instead of interrupt handler
 
+[ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]
+
 Invoking the right pci read/write functions is based on interrupt
 handler type. However, this is not configured for secondary processes
 precluding to use those functions.
@@ -11,23 +13,30 @@
 to instead.
 
 Fixes: 632b2d1deeed ("eal: provide functions to access PCI config")
-Cc: stable@dpdk.org
 
 Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
 Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
 ---
- drivers/bus/pci/linux/pci.c | 32 ++++++++++++++------------------
- 1 file changed, 14 insertions(+), 18 deletions(-)
+ lib/librte_eal/linuxapp/eal/eal_pci.c | 33 ++++++++++++---------------
+ 1 file changed, 15 insertions(+), 18 deletions(-)
 
-diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c
-index d5faa893d..45c24ef7e 100644
---- a/drivers/bus/pci/linux/pci.c
-+++ b/drivers/bus/pci/linux/pci.c
-@@ -674,23 +674,21 @@ rte_pci_get_iommu_class(void)
- int rte_pci_read_config(const struct rte_pci_device *device,
- 		void *buf, size_t len, off_t offset)
+diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
+index 02ec24150..85c7b3139 100644
+--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
++++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
+@@ -36,6 +36,7 @@
+ 
+ #include <rte_log.h>
+ #include <rte_pci.h>
++#include <rte_ethdev.h>
+ #include <rte_eal_memconfig.h>
+ #include <rte_malloc.h>
+ #include <rte_devargs.h>
+@@ -526,23 +527,21 @@ error:
+ int rte_eal_pci_read_config(const struct rte_pci_device *device,
+ 			    void *buf, size_t len, off_t offset)
  {
-+	char devname[RTE_DEV_NAME_MAX_LEN] = "";
++	char devname[RTE_ETH_NAME_MAX_LEN] = "";
  	const struct rte_intr_handle *intr_handle = &device->intr_handle;
  
 -	switch (intr_handle->type) {
@@ -45,8 +54,8 @@
  		return pci_vfio_read_config(intr_handle, buf, len, offset);
  #endif
  	default:
-+		rte_pci_device_name(&device->addr, devname,
-+				    RTE_DEV_NAME_MAX_LEN);
++		rte_eal_pci_device_name(&device->addr, devname,
++				    RTE_ETH_NAME_MAX_LEN);
  		RTE_LOG(ERR, EAL,
 -			"Unknown handle type of fd %d\n",
 -					intr_handle->fd);
@@ -54,11 +63,11 @@
  		return -1;
  	}
  }
-@@ -699,23 +697,21 @@ int rte_pci_read_config(const struct rte_pci_device *device,
- int rte_pci_write_config(const struct rte_pci_device *device,
- 		const void *buf, size_t len, off_t offset)
+@@ -551,23 +550,21 @@ int rte_eal_pci_read_config(const struct rte_pci_device *device,
+ int rte_eal_pci_write_config(const struct rte_pci_device *device,
+ 			     const void *buf, size_t len, off_t offset)
  {
-+	char devname[RTE_DEV_NAME_MAX_LEN] = "";
++	char devname[RTE_ETH_NAME_MAX_LEN] = "";
  	const struct rte_intr_handle *intr_handle = &device->intr_handle;
  
 -	switch (intr_handle->type) {
@@ -76,8 +85,8 @@
  		return pci_vfio_write_config(intr_handle, buf, len, offset);
  #endif
  	default:
-+		rte_pci_device_name(&device->addr, devname,
-+				    RTE_DEV_NAME_MAX_LEN);
++		rte_eal_pci_device_name(&device->addr, devname,
++				    RTE_ETH_NAME_MAX_LEN);
  		RTE_LOG(ERR, EAL,
 -			"Unknown handle type of fd %d\n",
 -					intr_handle->fd);

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'bus/pci: fix config r/w access' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (9 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:18             ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'test/hash: fix build' " Luca Boccassi
                             ` (3 subsequent siblings)
  14 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Fan Zhang; +Cc: Thomas Monjalon, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 939e666bc0796940ae91535002e1a1c9196eae02 Mon Sep 17 00:00:00 2001
From: Fan Zhang <roy.fan.zhang@intel.com>
Date: Thu, 1 Nov 2018 12:10:09 +0000
Subject: [PATCH] bus/pci: fix config r/w access

The recent change to rte_pci_read/write_config() missed
uio_pci_generic case.

Fixes: 630deed612ca ("bus/pci: compare kernel driver instead of interrupt handler")
Cc: stable@dpdk.org

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
(cherry picked from commit a38eafedda1de14c9fd7219e769e89e4aec92a45)
---
 lib/librte_eal/linuxapp/eal/eal_pci.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index 85c7b3139..84975dedf 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -532,6 +532,7 @@ int rte_eal_pci_read_config(const struct rte_pci_device *device,
 
 	switch (device->kdrv) {
 	case RTE_KDRV_IGB_UIO:
+	case RTE_KDRV_UIO_GENERIC:
 		return pci_uio_read_config(intr_handle, buf, len, offset);
 #ifdef VFIO_PRESENT
 	case RTE_KDRV_VFIO:
@@ -555,6 +556,7 @@ int rte_eal_pci_write_config(const struct rte_pci_device *device,
 
 	switch (device->kdrv) {
 	case RTE_KDRV_IGB_UIO:
+	case RTE_KDRV_UIO_GENERIC:
 		return pci_uio_write_config(intr_handle, buf, len, offset);
 #ifdef VFIO_PRESENT
 	case RTE_KDRV_VFIO:
-- 
2.19.1

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'test/hash: fix build' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (10 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'bus/pci: fix config r/w access' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'igb_uio: issue FLR during open and release of device file' " Luca Boccassi
                             ` (2 subsequent siblings)
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Dharmik Thakkar; +Cc: Honnappa Nagarahalli, Gavin Hu, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 9cabaa9961be492d42e1a8b0c047b1b8397eb417 Mon Sep 17 00:00:00 2001
From: Dharmik Thakkar <dharmik.thakkar@arm.com>
Date: Fri, 26 Oct 2018 16:43:03 -0500
Subject: [PATCH] test/hash: fix build
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

[ upstream commit 57ed574e263444928b793fff0d287121112fba84 ]

Enable print_key_info() function compilation always.

Compilation error message:
'test_hash.c: In function ‘print_key_info’:
test_hash.c:90:15: error: cast discards ‘const’ qualifier from pointer
target type [-Werror=cast-qual]
  uint8_t *p = (uint8_t *)key;
               ^
cc1: all warnings being treated as errors'

Fixes: af75078fece36 ("first public release")

Suggested-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Signed-off-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Gavin Hu <gavin.hu@arm.com>
---
 app/test/test_hash.c | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/app/test/test_hash.c b/app/test/test_hash.c
index 2c87efe69..c55ec0da4 100644
--- a/app/test/test_hash.c
+++ b/app/test/test_hash.c
@@ -110,29 +110,23 @@ static uint32_t pseudo_hash(__attribute__((unused)) const void *keys,
 	return 3;
 }
 
+#define UNIT_TEST_HASH_VERBOSE	0
 /*
  * Print out result of unit test hash operation.
  */
-#if defined(UNIT_TEST_HASH_VERBOSE)
 static void print_key_info(const char *msg, const struct flow_key *key,
 								int32_t pos)
 {
-	uint8_t *p = (uint8_t *)key;
-	unsigned i;
+	if (UNIT_TEST_HASH_VERBOSE) {
+		const uint8_t *p = (const uint8_t *)key;
+		unsigned int i;
 
-	printf("%s key:0x", msg);
-	for (i = 0; i < sizeof(struct flow_key); i++) {
-		printf("%02X", p[i]);
+		printf("%s key:0x", msg);
+		for (i = 0; i < sizeof(struct flow_key); i++)
+			printf("%02X", p[i]);
+		printf(" @ pos %d\n", pos);
 	}
-	printf(" @ pos %d\n", pos);
 }
-#else
-static void print_key_info(__attribute__((unused)) const char *msg,
-		__attribute__((unused)) const struct flow_key *key,
-		__attribute__((unused)) int32_t pos)
-{
-}
-#endif
 
 /* Keys used by unit test functions */
 static struct flow_key keys[5] = { {
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.300565359 +0000
+++ 0013-test-hash-fix-build.patch	2018-11-08 17:59:30.060751011 +0000
@@ -1,4 +1,4 @@
-From 57ed574e263444928b793fff0d287121112fba84 Mon Sep 17 00:00:00 2001
+From 9cabaa9961be492d42e1a8b0c047b1b8397eb417 Mon Sep 17 00:00:00 2001
 From: Dharmik Thakkar <dharmik.thakkar@arm.com>
 Date: Fri, 26 Oct 2018 16:43:03 -0500
 Subject: [PATCH] test/hash: fix build
@@ -6,6 +6,8 @@
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
+[ upstream commit 57ed574e263444928b793fff0d287121112fba84 ]
+
 Enable print_key_info() function compilation always.
 
 Compilation error message:
@@ -17,21 +19,20 @@
 cc1: all warnings being treated as errors'
 
 Fixes: af75078fece36 ("first public release")
-Cc: stable@dpdk.org
 
 Suggested-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
 Signed-off-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
 Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
 Reviewed-by: Gavin Hu <gavin.hu@arm.com>
 ---
- test/test/test_hash.c | 22 ++++++++--------------
+ app/test/test_hash.c | 22 ++++++++--------------
  1 file changed, 8 insertions(+), 14 deletions(-)
 
-diff --git a/test/test/test_hash.c b/test/test/test_hash.c
-index 6d06eb24c..fe607fadf 100644
---- a/test/test/test_hash.c
-+++ b/test/test/test_hash.c
-@@ -80,29 +80,23 @@ static uint32_t pseudo_hash(__attribute__((unused)) const void *keys,
+diff --git a/app/test/test_hash.c b/app/test/test_hash.c
+index 2c87efe69..c55ec0da4 100644
+--- a/app/test/test_hash.c
++++ b/app/test/test_hash.c
+@@ -110,29 +110,23 @@ static uint32_t pseudo_hash(__attribute__((unused)) const void *keys,
  	return 3;
  }
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'igb_uio: issue FLR during open and release of device file' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (11 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'test/hash: fix build' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-08 18:16             ` Luca Boccassi
  2018-11-08 18:01           ` [dpdk-stable] patch 'igb_uio: fix unexpected removal for hot-unplug' " Luca Boccassi
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
  14 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Shijith Thotton; +Cc: Jianfeng Tan, Ferruh Yigit, Gregory Etelson, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 11bb826270d6feb3e810aec77a9252cf65b559a9 Mon Sep 17 00:00:00 2001
From: Shijith Thotton <shijith.thotton@caviumnetworks.com>
Date: Fri, 7 Jul 2017 16:43:51 +0530
Subject: [PATCH] igb_uio: issue FLR during open and release of device file

[ upstream commit b58eedfc7dd57eef6d12e2c654a52c834f36084a ]

Set UIO info device file operations open and release. Call pci reset
function inside open and release to clear device state at start and end.
Copied this behaviour from vfio_pci kernel module code. With this patch,
it is not mandatory to issue FLR by PMD's during init and close.

Bus master enable and disable are added in open and release respectively
to take care of device DMA.

Signed-off-by: Shijith Thotton <shijith.thotton@caviumnetworks.com>
Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Gregory Etelson <gregory@weka.io>
---
 lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 33 +++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
index 9f00f07ab..4be89ef86 100644
--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
@@ -170,6 +170,37 @@ igbuio_pci_irqhandler(int irq, struct uio_info *info)
 	return IRQ_HANDLED;
 }
 
+/**
+ * This gets called while opening uio device file.
+ */
+static int
+igbuio_pci_open(struct uio_info *info, struct inode *inode)
+{
+	struct rte_uio_pci_dev *udev = info->priv;
+	struct pci_dev *dev = udev->pdev;
+
+	pci_reset_function(dev);
+
+	/* set bus master, which was cleared by the reset function */
+	pci_set_master(dev);
+
+	return 0;
+}
+
+static int
+igbuio_pci_release(struct uio_info *info, struct inode *inode)
+{
+	struct rte_uio_pci_dev *udev = info->priv;
+	struct pci_dev *dev = udev->pdev;
+
+	/* stop the device from further DMA */
+	pci_clear_master(dev);
+
+	pci_reset_function(dev);
+
+	return 0;
+}
+
 #ifdef CONFIG_XEN_DOM0
 static int
 igbuio_dom0_mmap_phys(struct uio_info *info, struct vm_area_struct *vma)
@@ -370,6 +401,8 @@ igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	udev->info.version = "0.1";
 	udev->info.handler = igbuio_pci_irqhandler;
 	udev->info.irqcontrol = igbuio_pci_irqcontrol;
+	udev->info.open = igbuio_pci_open;
+	udev->info.release = igbuio_pci_release;
 #ifdef CONFIG_XEN_DOM0
 	/* check if the driver run on Xen Dom0 */
 	if (xen_initial_domain())
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.319286385 +0000
+++ 0014-igb_uio-issue-FLR-during-open-and-release-of-device-.patch	2018-11-08 17:59:30.064751011 +0000
@@ -1,8 +1,10 @@
-From b58eedfc7dd57eef6d12e2c654a52c834f36084a Mon Sep 17 00:00:00 2001
+From 11bb826270d6feb3e810aec77a9252cf65b559a9 Mon Sep 17 00:00:00 2001
 From: Shijith Thotton <shijith.thotton@caviumnetworks.com>
 Date: Fri, 7 Jul 2017 16:43:51 +0530
 Subject: [PATCH] igb_uio: issue FLR during open and release of device file
 
+[ upstream commit b58eedfc7dd57eef6d12e2c654a52c834f36084a ]
+
 Set UIO info device file operations open and release. Call pci reset
 function inside open and release to clear device state at start and end.
 Copied this behaviour from vfio_pci kernel module code. With this patch,
@@ -20,7 +22,7 @@
  1 file changed, 33 insertions(+)
 
 diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
-index b9d427c51..07a19a315 100644
+index 9f00f07ab..4be89ef86 100644
 --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
 +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
 @@ -170,6 +170,37 @@ igbuio_pci_irqhandler(int irq, struct uio_info *info)
@@ -61,7 +63,7 @@
  #ifdef CONFIG_XEN_DOM0
  static int
  igbuio_dom0_mmap_phys(struct uio_info *info, struct vm_area_struct *vma)
-@@ -372,6 +403,8 @@ igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
+@@ -370,6 +401,8 @@ igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
  	udev->info.version = "0.1";
  	udev->info.handler = igbuio_pci_irqhandler;
  	udev->info.irqcontrol = igbuio_pci_irqcontrol;

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'igb_uio: fix unexpected removal for hot-unplug' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (12 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'igb_uio: issue FLR during open and release of device file' " Luca Boccassi
@ 2018-11-08 18:01           ` Luca Boccassi
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
  14 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:01 UTC (permalink / raw)
  To: Jeff Guo; +Cc: Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 1fab71698f322c95bff494a06a3d739ef506ea47 Mon Sep 17 00:00:00 2001
From: Jeff Guo <jia.guo@intel.com>
Date: Thu, 18 Oct 2018 14:27:15 +0800
Subject: [PATCH] igb_uio: fix unexpected removal for hot-unplug

[ upstream commit 70efa4116420b6f7a0734711dd603d3024366c79 ]

When a device is hot-unplugged, pci_remove will be invoked unexpectedly
before pci_release, it will caused kernel hung issue which will throw the
error info of "Trying to free already-free IRQ XXX". And on the other hand,
if pci_remove before pci_release, the interrupt will not got chance to be
disabled. So this patch aim to fix this issue by adding pci_release call
in pci_remove, it will gurranty that all pci clean up will be done before
pci removal.

Signed-off-by: Jeff Guo <jia.guo@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
index 4be89ef86..e88e38873 100644
--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
@@ -493,6 +493,8 @@ igbuio_pci_remove(struct pci_dev *dev)
 {
 	struct rte_uio_pci_dev *udev = pci_get_drvdata(dev);
 
+	igbuio_pci_release(&udev->info, NULL);
+
 	sysfs_remove_group(&dev->dev.kobj, &dev_attr_grp);
 	uio_unregister_device(&udev->info);
 	igbuio_pci_release_iomem(&udev->info);
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-08 17:59:30.336224655 +0000
+++ 0015-igb_uio-fix-unexpected-removal-for-hot-unplug.patch	2018-11-08 17:59:30.064751011 +0000
@@ -1,8 +1,10 @@
-From 70efa4116420b6f7a0734711dd603d3024366c79 Mon Sep 17 00:00:00 2001
+From 1fab71698f322c95bff494a06a3d739ef506ea47 Mon Sep 17 00:00:00 2001
 From: Jeff Guo <jia.guo@intel.com>
 Date: Thu, 18 Oct 2018 14:27:15 +0800
 Subject: [PATCH] igb_uio: fix unexpected removal for hot-unplug
 
+[ upstream commit 70efa4116420b6f7a0734711dd603d3024366c79 ]
+
 When a device is hot-unplugged, pci_remove will be invoked unexpectedly
 before pci_release, it will caused kernel hung issue which will throw the
 error info of "Trying to free already-free IRQ XXX". And on the other hand,
@@ -14,14 +16,14 @@
 Signed-off-by: Jeff Guo <jia.guo@intel.com>
 Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
 ---
- kernel/linux/igb_uio/igb_uio.c | 2 ++
+ lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/kernel/linux/igb_uio/igb_uio.c b/kernel/linux/igb_uio/igb_uio.c
-index fede66cf2..3cf394bdf 100644
---- a/kernel/linux/igb_uio/igb_uio.c
-+++ b/kernel/linux/igb_uio/igb_uio.c
-@@ -570,6 +570,8 @@ igbuio_pci_remove(struct pci_dev *dev)
+diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+index 4be89ef86..e88e38873 100644
+--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
++++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+@@ -493,6 +493,8 @@ igbuio_pci_remove(struct pci_dev *dev)
  {
  	struct rte_uio_pci_dev *udev = pci_get_drvdata(dev);
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'igb_uio: issue FLR during open and release of device file' has been queued to LTS release 16.11.9
  2018-11-08 18:01           ` [dpdk-stable] patch 'igb_uio: issue FLR during open and release of device file' " Luca Boccassi
@ 2018-11-08 18:16             ` Luca Boccassi
  2018-11-09  9:32               ` Shijith Thotton
  2018-11-09 14:26               ` [dpdk-stable] patch 'igb_uio: remove device reset in open' " Luca Boccassi
  0 siblings, 2 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:16 UTC (permalink / raw)
  To: Shijith Thotton
  Cc: Jianfeng Tan, Ferruh Yigit, Gregory Etelson, dpdk stable, Jeff Guo

On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
> Hi,
> 
> FYI, your patch has been queued to LTS release 16.11.9
> 
> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> It will be pushed if I get no objections before 11/10/18. So please
> shout if anyone has objections.
> 
> Also note that after the patch there's a diff of the upstream commit
> vs the patch applied
> to the branch. If the code is different (ie: not only metadata
> diffs), due for example to
> a change in context or macro names, please double check it.
> 
> Thanks.
> 
> Luca Boccassi
> 
> ---
> From 11bb826270d6feb3e810aec77a9252cf65b559a9 Mon Sep 17 00:00:00
> 2001
> From: Shijith Thotton <shijith.thotton@caviumnetworks.com>
> Date: Fri, 7 Jul 2017 16:43:51 +0530
> Subject: [PATCH] igb_uio: issue FLR during open and release of device
> file
> 
> [ upstream commit b58eedfc7dd57eef6d12e2c654a52c834f36084a ]
> 
> Set UIO info device file operations open and release. Call pci reset
> function inside open and release to clear device state at start and
> end.
> Copied this behaviour from vfio_pci kernel module code. With this
> patch,
> it is not mandatory to issue FLR by PMD's during init and close.
> 
> Bus master enable and disable are added in open and release
> respectively
> to take care of device DMA.
> 
> Signed-off-by: Shijith Thotton <shijith.thotton@caviumnetworks.com>
> Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Acked-by: Gregory Etelson <gregory@weka.io>
> ---
>  lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 33
> +++++++++++++++++++++++
>  1 file changed, 33 insertions(+)
> 
> diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
> b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
> index 9f00f07ab..4be89ef86 100644
> --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
> +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
> @@ -170,6 +170,37 @@ igbuio_pci_irqhandler(int irq, struct uio_info
> *info)
>  	return IRQ_HANDLED;
>  }
>  
> +/**
> + * This gets called while opening uio device file.
> + */
> +static int
> +igbuio_pci_open(struct uio_info *info, struct inode *inode)
> +{
> +	struct rte_uio_pci_dev *udev = info->priv;
> +	struct pci_dev *dev = udev->pdev;
> +
> +	pci_reset_function(dev);
> +
> +	/* set bus master, which was cleared by the reset function
> */
> +	pci_set_master(dev);
> +
> +	return 0;
> +}
> +
> +static int
> +igbuio_pci_release(struct uio_info *info, struct inode *inode)
> +{
> +	struct rte_uio_pci_dev *udev = info->priv;
> +	struct pci_dev *dev = udev->pdev;
> +
> +	/* stop the device from further DMA */
> +	pci_clear_master(dev);
> +
> +	pci_reset_function(dev);
> +
> +	return 0;
> +}
> +
>  #ifdef CONFIG_XEN_DOM0
>  static int
>  igbuio_dom0_mmap_phys(struct uio_info *info, struct vm_area_struct
> *vma)
> @@ -370,6 +401,8 @@ igbuio_pci_probe(struct pci_dev *dev, const
> struct pci_device_id *id)
>  	udev->info.version = "0.1";
>  	udev->info.handler = igbuio_pci_irqhandler;
>  	udev->info.irqcontrol = igbuio_pci_irqcontrol;
> +	udev->info.open = igbuio_pci_open;
> +	udev->info.release = igbuio_pci_release;
>  #ifdef CONFIG_XEN_DOM0
>  	/* check if the driver run on Xen Dom0 */
>  	if (xen_initial_domain())

Hi,

I've picked up b58eedfc7dd57eef6d12e2c654a52c834f36084a as it is a
prerequisite for 70efa4116420b6f7a0734711dd603d3024366c79 as far as I
can see, let me know if I should not or do it differently please.

Thanks!

-- 
Kind regards,
Luca Boccassi

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'bus/pci: fix config r/w access' has been queued to LTS release 16.11.9
  2018-11-08 18:01           ` [dpdk-stable] patch 'bus/pci: fix config r/w access' " Luca Boccassi
@ 2018-11-08 18:18             ` Luca Boccassi
  0 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-08 18:18 UTC (permalink / raw)
  To: Fan Zhang; +Cc: Thomas Monjalon, dpdk stable

On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
> Hi,
> 
> FYI, your patch has been queued to LTS release 16.11.9
> 
> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> It will be pushed if I get no objections before 11/10/18. So please
> shout if anyone has objections.
> 
> Also note that after the patch there's a diff of the upstream commit
> vs the patch applied
> to the branch. If the code is different (ie: not only metadata
> diffs), due for example to
> a change in context or macro names, please double check it.
> 
> Thanks.
> 
> Luca Boccassi
> 
> ---
> From 939e666bc0796940ae91535002e1a1c9196eae02 Mon Sep 17 00:00:00
> 2001
> From: Fan Zhang <roy.fan.zhang@intel.com>
> Date: Thu, 1 Nov 2018 12:10:09 +0000
> Subject: [PATCH] bus/pci: fix config r/w access
> 
> The recent change to rte_pci_read/write_config() missed
> uio_pci_generic case.
> 
> Fixes: 630deed612ca ("bus/pci: compare kernel driver instead of
> interrupt handler")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> (cherry picked from commit a38eafedda1de14c9fd7219e769e89e4aec92a45)

I got the header wrong as it was a manual cherry-pick, already fixed,
sorry.

-- 
Kind regards,
Luca Boccassi

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'mk: disable gcc AVX512F support' has been queued to LTS release 16.11.9
  2018-11-08 18:00           ` [dpdk-stable] patch 'mk: disable gcc AVX512F support' " Luca Boccassi
@ 2018-11-09  6:52             ` Christian Ehrhardt
  2018-11-09 10:48               ` Luca Boccassi
  0 siblings, 1 reply; 118+ messages in thread
From: Christian Ehrhardt @ 2018-11-09  6:52 UTC (permalink / raw)
  To: Luca Boccassi; +Cc: yskoh, stable

On Thu, Nov 8, 2018 at 7:01 PM Luca Boccassi <bluca@debian.org> wrote:
>
> Hi,
>
> FYI, your patch has been queued to LTS release 16.11.9
>
> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> It will be pushed if I get no objections before 11/10/18. So please
> shout if anyone has objections.
>
> Also note that after the patch there's a diff of the upstream commit vs the patch applied
> to the branch. If the code is different (ie: not only metadata diffs), due for example to
> a change in context or macro names, please double check it.
>
> Thanks.
>
> Luca Boccassi

Hi Luca,
please be aware of the still ongoing discussion on this patch, see
full thread around
http://mails.dpdk.org/archives/dev/2018-November/118121.html


> ---
> From 8dbda3ba255c6045ffe3eb73f1d8e1f67186c22b Mon Sep 17 00:00:00 2001
> From: Yongseok Koh <yskoh@mellanox.com>
> Date: Sat, 3 Nov 2018 01:06:32 +0000
> Subject: [PATCH] mk: disable gcc AVX512F support
>
> [ upstream commit 8d07c82b239f7782be0d3afbb626390e2cb0c8f5 ]
>
> This is a workaround to prevent a crash, which might be caused by
> optimization of newer gcc (7.3.0) on Intel Skylake.
>
> This disables AVX512F support of gcc by adding -mno-avx512f if it is
> disabled in DPDK (CONFIG_RTE_ENABLE_AVX512=n).
>
> This does not apply to the meson build as that doesn't have such an option
> but always enable AVX512F whenever supported.
>
> Bugzilla ID: 97
>
> Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
> ---
>  mk/rte.cpuflags.mk | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk
> index 8bbccb9ed..c7027a0fe 100644
> --- a/mk/rte.cpuflags.mk
> +++ b/mk/rte.cpuflags.mk
> @@ -91,6 +91,11 @@ endif
>
>  ifneq ($(filter $(AUTO_CPUFLAGS),__AVX512F__),)
>  CPUFLAGS += AVX512F
> +else
> +# disable AVX512F support of gcc as a workaround for Bug 97
> +ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
> +MACHINE_CFLAGS += -mno-avx512f
> +endif
>  endif
>
>  # IBM Power CPU flags
> --
> 2.19.1
>
> ---
>   Diff of the applied patch vs upstream commit (please double-check if non-empty:
> ---
> --- -   2018-11-08 17:59:30.124667578 +0000
> +++ 0003-mk-disable-gcc-AVX512F-support.patch   2018-11-08 17:59:30.048751011 +0000
> @@ -1,8 +1,10 @@
> -From 8d07c82b239f7782be0d3afbb626390e2cb0c8f5 Mon Sep 17 00:00:00 2001
> +From 8dbda3ba255c6045ffe3eb73f1d8e1f67186c22b Mon Sep 17 00:00:00 2001
>  From: Yongseok Koh <yskoh@mellanox.com>
>  Date: Sat, 3 Nov 2018 01:06:32 +0000
>  Subject: [PATCH] mk: disable gcc AVX512F support
>
> +[ upstream commit 8d07c82b239f7782be0d3afbb626390e2cb0c8f5 ]
> +
>  This is a workaround to prevent a crash, which might be caused by
>  optimization of newer gcc (7.3.0) on Intel Skylake.
>
> @@ -13,7 +15,6 @@
>  but always enable AVX512F whenever supported.
>
>  Bugzilla ID: 97
> -Cc: stable@dpdk.org
>
>  Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
>  ---
> @@ -21,12 +22,12 @@
>   1 file changed, 5 insertions(+)
>
>  diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk
> -index 43ed84155..c3291b17a 100644
> +index 8bbccb9ed..c7027a0fe 100644
>  --- a/mk/rte.cpuflags.mk
>  +++ b/mk/rte.cpuflags.mk
> -@@ -68,6 +68,11 @@ endif
> +@@ -91,6 +91,11 @@ endif
> +
>   ifneq ($(filter $(AUTO_CPUFLAGS),__AVX512F__),)
> - ifeq ($(CONFIG_RTE_ENABLE_AVX512),y)
>   CPUFLAGS += AVX512F
>  +else
>  +# disable AVX512F support of gcc as a workaround for Bug 97
> @@ -34,8 +35,8 @@
>  +MACHINE_CFLAGS += -mno-avx512f
>  +endif
>   endif
> - endif
>
> + # IBM Power CPU flags
>  --
>  2.19.1
>


-- 
Christian Ehrhardt
Software Engineer, Ubuntu Server
Canonical Ltd

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'igb_uio: issue FLR during open and release of device file' has been queued to LTS release 16.11.9
  2018-11-08 18:16             ` Luca Boccassi
@ 2018-11-09  9:32               ` Shijith Thotton
  2018-11-09 10:43                 ` Luca Boccassi
  2018-11-09 14:26               ` [dpdk-stable] patch 'igb_uio: remove device reset in open' " Luca Boccassi
  1 sibling, 1 reply; 118+ messages in thread
From: Shijith Thotton @ 2018-11-09  9:32 UTC (permalink / raw)
  To: Luca Boccassi
  Cc: Jianfeng Tan, Ferruh Yigit, Gregory Etelson, dpdk stable, Jeff Guo



On 11/08/2018 11:46 PM, Luca Boccassi wrote:
> External Email
> 
> On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
>> Hi,
>>
>> FYI, your patch has been queued to LTS release 16.11.9
>>
>> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
>> It will be pushed if I get no objections before 11/10/18. So please
>> shout if anyone has objections.
>>
>> Also note that after the patch there's a diff of the upstream commit
>> vs the patch applied
>> to the branch. If the code is different (ie: not only metadata
>> diffs), due for example to
>> a change in context or macro names, please double check it.
>>
>> Thanks.
>>
>> Luca Boccassi
>>
>> ---
>>  From 11bb826270d6feb3e810aec77a9252cf65b559a9 Mon Sep 17 00:00:00
>> 2001
>> From: Shijith Thotton <shijith.thotton@caviumnetworks.com>
>> Date: Fri, 7 Jul 2017 16:43:51 +0530
>> Subject: [PATCH] igb_uio: issue FLR during open and release of device
>> file
>>
>> [ upstream commit b58eedfc7dd57eef6d12e2c654a52c834f36084a ]
>>
>> Set UIO info device file operations open and release. Call pci reset
>> function inside open and release to clear device state at start and
>> end.
>> Copied this behaviour from vfio_pci kernel module code. With this
>> patch,
>> it is not mandatory to issue FLR by PMD's during init and close.
>>
>> Bus master enable and disable are added in open and release
>> respectively
>> to take care of device DMA.
>>
>> Signed-off-by: Shijith Thotton <shijith.thotton@caviumnetworks.com>
>> Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
>> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> Acked-by: Gregory Etelson <gregory@weka.io>
>> ---
>>   lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 33
>> +++++++++++++++++++++++
>>   1 file changed, 33 insertions(+)
>>
>> diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
>> b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
>> index 9f00f07ab..4be89ef86 100644
>> --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
>> +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
>> @@ -170,6 +170,37 @@ igbuio_pci_irqhandler(int irq, struct uio_info
>> *info)
>>        return IRQ_HANDLED;
>>   }
>>
>> +/**
>> + * This gets called while opening uio device file.
>> + */
>> +static int
>> +igbuio_pci_open(struct uio_info *info, struct inode *inode)
>> +{
>> +     struct rte_uio_pci_dev *udev = info->priv;
>> +     struct pci_dev *dev = udev->pdev;
>> +
>> +     pci_reset_function(dev);
>> +
>> +     /* set bus master, which was cleared by the reset function
>> */
>> +     pci_set_master(dev);
>> +
>> +     return 0;
>> +}
>> +
>> +static int
>> +igbuio_pci_release(struct uio_info *info, struct inode *inode)
>> +{
>> +     struct rte_uio_pci_dev *udev = info->priv;
>> +     struct pci_dev *dev = udev->pdev;
>> +
>> +     /* stop the device from further DMA */
>> +     pci_clear_master(dev);
>> +
>> +     pci_reset_function(dev);
>> +
>> +     return 0;
>> +}
>> +
>>   #ifdef CONFIG_XEN_DOM0
>>   static int
>>   igbuio_dom0_mmap_phys(struct uio_info *info, struct vm_area_struct
>> *vma)
>> @@ -370,6 +401,8 @@ igbuio_pci_probe(struct pci_dev *dev, const
>> struct pci_device_id *id)
>>        udev->info.version = "0.1";
>>        udev->info.handler = igbuio_pci_irqhandler;
>>        udev->info.irqcontrol = igbuio_pci_irqcontrol;
>> +     udev->info.open = igbuio_pci_open;
>> +     udev->info.release = igbuio_pci_release;
>>   #ifdef CONFIG_XEN_DOM0
>>        /* check if the driver run on Xen Dom0 */
>>        if (xen_initial_domain())
> 
> Hi,
> 
> I've picked up b58eedfc7dd57eef6d12e2c654a52c834f36084a as it is a
> prerequisite for 70efa4116420b6f7a0734711dd603d3024366c79 as far as I
> can see, let me know if I should not or do it differently please.
> 

Hi Luca,

Above patch was fixed in following two patches. Please pick them as well.

369db3a igb_uio: remove device reset in release
f73b38e igb_uio: remove device reset in open

Thanks,
Shijith

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'igb_uio: issue FLR during open and release of device file' has been queued to LTS release 16.11.9
  2018-11-09  9:32               ` Shijith Thotton
@ 2018-11-09 10:43                 ` Luca Boccassi
  0 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-09 10:43 UTC (permalink / raw)
  To: Shijith Thotton
  Cc: Jianfeng Tan, Ferruh Yigit, Gregory Etelson, dpdk stable, Jeff Guo

On Fri, 2018-11-09 at 09:32 +0000, Shijith Thotton wrote:
> 
> On 11/08/2018 11:46 PM, Luca Boccassi wrote:
> > External Email
> > 
> > On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
> > > Hi,
> > > 
> > > FYI, your patch has been queued to LTS release 16.11.9
> > > 
> > > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable
> > > yet.
> > > It will be pushed if I get no objections before 11/10/18. So
> > > please
> > > shout if anyone has objections.
> > > 
> > > Also note that after the patch there's a diff of the upstream
> > > commit
> > > vs the patch applied
> > > to the branch. If the code is different (ie: not only metadata
> > > diffs), due for example to
> > > a change in context or macro names, please double check it.
> > > 
> > > Thanks.
> > > 
> > > Luca Boccassi
> > > 
> > > ---
> > >  From 11bb826270d6feb3e810aec77a9252cf65b559a9 Mon Sep 17
> > > 00:00:00
> > > 2001
> > > From: Shijith Thotton <shijith.thotton@caviumnetworks.com>
> > > Date: Fri, 7 Jul 2017 16:43:51 +0530
> > > Subject: [PATCH] igb_uio: issue FLR during open and release of
> > > device
> > > file
> > > 
> > > [ upstream commit b58eedfc7dd57eef6d12e2c654a52c834f36084a ]
> > > 
> > > Set UIO info device file operations open and release. Call pci
> > > reset
> > > function inside open and release to clear device state at start
> > > and
> > > end.
> > > Copied this behaviour from vfio_pci kernel module code. With this
> > > patch,
> > > it is not mandatory to issue FLR by PMD's during init and close.
> > > 
> > > Bus master enable and disable are added in open and release
> > > respectively
> > > to take care of device DMA.
> > > 
> > > Signed-off-by: Shijith Thotton <shijith.thotton@caviumnetworks.co
> > > m>
> > > Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
> > > Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
> > > Acked-by: Gregory Etelson <gregory@weka.io>
> > > ---
> > >   lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 33
> > > +++++++++++++++++++++++
> > >   1 file changed, 33 insertions(+)
> > > 
> > > diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
> > > b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
> > > index 9f00f07ab..4be89ef86 100644
> > > --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
> > > +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
> > > @@ -170,6 +170,37 @@ igbuio_pci_irqhandler(int irq, struct
> > > uio_info
> > > *info)
> > >        return IRQ_HANDLED;
> > >   }
> > > 
> > > +/**
> > > + * This gets called while opening uio device file.
> > > + */
> > > +static int
> > > +igbuio_pci_open(struct uio_info *info, struct inode *inode)
> > > +{
> > > +     struct rte_uio_pci_dev *udev = info->priv;
> > > +     struct pci_dev *dev = udev->pdev;
> > > +
> > > +     pci_reset_function(dev);
> > > +
> > > +     /* set bus master, which was cleared by the reset function
> > > */
> > > +     pci_set_master(dev);
> > > +
> > > +     return 0;
> > > +}
> > > +
> > > +static int
> > > +igbuio_pci_release(struct uio_info *info, struct inode *inode)
> > > +{
> > > +     struct rte_uio_pci_dev *udev = info->priv;
> > > +     struct pci_dev *dev = udev->pdev;
> > > +
> > > +     /* stop the device from further DMA */
> > > +     pci_clear_master(dev);
> > > +
> > > +     pci_reset_function(dev);
> > > +
> > > +     return 0;
> > > +}
> > > +
> > >   #ifdef CONFIG_XEN_DOM0
> > >   static int
> > >   igbuio_dom0_mmap_phys(struct uio_info *info, struct
> > > vm_area_struct
> > > *vma)
> > > @@ -370,6 +401,8 @@ igbuio_pci_probe(struct pci_dev *dev, const
> > > struct pci_device_id *id)
> > >        udev->info.version = "0.1";
> > >        udev->info.handler = igbuio_pci_irqhandler;
> > >        udev->info.irqcontrol = igbuio_pci_irqcontrol;
> > > +     udev->info.open = igbuio_pci_open;
> > > +     udev->info.release = igbuio_pci_release;
> > >   #ifdef CONFIG_XEN_DOM0
> > >        /* check if the driver run on Xen Dom0 */
> > >        if (xen_initial_domain())
> > 
> > Hi,
> > 
> > I've picked up b58eedfc7dd57eef6d12e2c654a52c834f36084a as it is a
> > prerequisite for 70efa4116420b6f7a0734711dd603d3024366c79 as far as
> > I
> > can see, let me know if I should not or do it differently please.
> > 
> 
> Hi Luca,
> 
> Above patch was fixed in following two patches. Please pick them as
> well.
> 
> 369db3a igb_uio: remove device reset in release
> f73b38e igb_uio: remove device reset in open
> 
> Thanks,
> Shijith

Done, thank you for bringing that up.

-- 
Kind regards,
Luca Boccassi

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'mk: disable gcc AVX512F support' has been queued to LTS release 16.11.9
  2018-11-09  6:52             ` Christian Ehrhardt
@ 2018-11-09 10:48               ` Luca Boccassi
  0 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-09 10:48 UTC (permalink / raw)
  To: Christian Ehrhardt; +Cc: yskoh, stable

On Fri, 2018-11-09 at 07:52 +0100, Christian Ehrhardt wrote:
> On Thu, Nov 8, 2018 at 7:01 PM Luca Boccassi <bluca@debian.org>
> wrote:
> > 
> > Hi,
> > 
> > FYI, your patch has been queued to LTS release 16.11.9
> > 
> > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable
> > yet.
> > It will be pushed if I get no objections before 11/10/18. So please
> > shout if anyone has objections.
> > 
> > Also note that after the patch there's a diff of the upstream
> > commit vs the patch applied
> > to the branch. If the code is different (ie: not only metadata
> > diffs), due for example to
> > a change in context or macro names, please double check it.
> > 
> > Thanks.
> > 
> > Luca Boccassi
> 
> Hi Luca,
> please be aware of the still ongoing discussion on this patch, see
> full thread around
> http://mails.dpdk.org/archives/dev/2018-November/118121.html

Hi,

Yes I've been following, thanks for the heads up (curiously, on my Kaby
Lake machine which is newer than Skylake, avx512f is disabled by
default by both GCC 6.x and 8.x)

-- 
Kind regards,
Luca Boccassi

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'igb_uio: remove device reset in open' has been queued to LTS release 16.11.9
  2018-11-08 18:16             ` Luca Boccassi
  2018-11-09  9:32               ` Shijith Thotton
@ 2018-11-09 14:26               ` Luca Boccassi
  2018-11-09 14:26                 ` [dpdk-stable] patch 'igb_uio: remove device reset in release' " Luca Boccassi
  1 sibling, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-11-09 14:26 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: Harish Patil, Shijith Thotton, Jingjing Wu, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/11/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 278a18a19d7f15aba9c291c6fa7c27e307df976a Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Fri, 20 Oct 2017 17:55:11 +0100
Subject: [PATCH] igb_uio: remove device reset in open

[ upstream commit f73b38e9245d77d4d6b5861f8d203c0bf5120b15 ]

Remove device reset during application start, the reset for application
exit still there.

Reset in open removed because of following comments:
1- Device reset not completed when VF driver loaded, which cause VF PMD
   initialization error.
   Adding delay can solve the issue but will increase driver load time.

2- Reset will be issues all devices unconditionally, not very efficient
   way.

Fixes: b58eedfc7dd5 ("igb_uio: issue FLR during open and release of device file")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Tested-by: Harish Patil <harish.patil@cavium.com>
Tested-by: Shijith Thotton <shijith.thotton@caviumnetworks.com>
Tested-by: Jingjing Wu <jingjing.wu@intel.com>
---
 lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
index 4be89ef86..bedfa6eae 100644
--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
@@ -179,8 +179,6 @@ igbuio_pci_open(struct uio_info *info, struct inode *inode)
 	struct rte_uio_pci_dev *udev = info->priv;
 	struct pci_dev *dev = udev->pdev;
 
-	pci_reset_function(dev);
-
 	/* set bus master, which was cleared by the reset function */
 	pci_set_master(dev);
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-09 14:24:58.312257299 +0000
+++ 0002-igb_uio-remove-device-reset-in-open.patch	2018-11-09 14:24:58.269726115 +0000
@@ -1,8 +1,10 @@
-From f73b38e9245d77d4d6b5861f8d203c0bf5120b15 Mon Sep 17 00:00:00 2001
+From 278a18a19d7f15aba9c291c6fa7c27e307df976a Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Fri, 20 Oct 2017 17:55:11 +0100
 Subject: [PATCH] igb_uio: remove device reset in open
 
+[ upstream commit f73b38e9245d77d4d6b5861f8d203c0bf5120b15 ]
+
 Remove device reset during application start, the reset for application
 exit still there.
 
@@ -15,7 +17,6 @@
    way.
 
 Fixes: b58eedfc7dd5 ("igb_uio: issue FLR during open and release of device file")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 Tested-by: Harish Patil <harish.patil@cavium.com>
@@ -26,12 +27,12 @@
  1 file changed, 2 deletions(-)
 
 diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
-index f7ef82554..fd320d87d 100644
+index 4be89ef86..bedfa6eae 100644
 --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
 +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
-@@ -336,8 +336,6 @@ igbuio_pci_open(struct uio_info *info, struct inode *inode)
+@@ -179,8 +179,6 @@ igbuio_pci_open(struct uio_info *info, struct inode *inode)
+ 	struct rte_uio_pci_dev *udev = info->priv;
  	struct pci_dev *dev = udev->pdev;
- 	int err;
  
 -	pci_reset_function(dev);
 -

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'igb_uio: remove device reset in release' has been queued to LTS release 16.11.9
  2018-11-09 14:26               ` [dpdk-stable] patch 'igb_uio: remove device reset in open' " Luca Boccassi
@ 2018-11-09 14:26                 ` Luca Boccassi
  0 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-09 14:26 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/11/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From ff54889c4394f7ca772dc637ba3b516af8de1356 Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Tue, 7 Nov 2017 22:29:13 +0000
Subject: [PATCH] igb_uio: remove device reset in release

[ upstream commit 369db3ae8e91cf637ec1abddbf667be5e35753fe ]

More error reported for device reset in release() [1],
when device pass-through to the guest, host kernel crash on guest exit.

Removing the reset completely.

This is close to reverting commit b58eedfc7dd5 [2], taking into account
previous fix to remove reset in open as well [3], but not exactly same.

With latest code, interrupts are enabled in uio open() callback and
disabled in uio release() callback, so when a DPDK application exit
device interrupts are disabled. Previously interrupts were only enabled
once in igb_uio module insert and disabled in module removal.

Also with latest code device set as bus master in open() and master
cleared in release(), clearing bus master should prevent further DMA
which was one of the target of the initial patch.

The initial intention was also to reset the device to be sure it has
been left in proper state, but currently that part is missing because of
reported problem(s).

Still igb_uio should be safer comparing to the pre b58eedfc7dd5 state.

[1]
http://dpdk.org/ml/archives/dev/2017-November/081459.html

[2]
b58eedfc7dd5 ("igb_uio: issue FLR during open and release of device file")

[3]
f73b38e9245d ("igb_uio: remove device reset in open")

Fixes: e3a64deae2d5 ("igb_uio: prevent reset for bnx2x devices")
Fixes: b58eedfc7dd5 ("igb_uio: issue FLR during open and release of device file")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
index bedfa6eae..b12351791 100644
--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
@@ -194,8 +194,6 @@ igbuio_pci_release(struct uio_info *info, struct inode *inode)
 	/* stop the device from further DMA */
 	pci_clear_master(dev);
 
-	pci_reset_function(dev);
-
 	return 0;
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-09 14:24:58.331809139 +0000
+++ 0003-igb_uio-remove-device-reset-in-release.patch	2018-11-09 14:24:58.273726112 +0000
@@ -1,8 +1,10 @@
-From 369db3ae8e91cf637ec1abddbf667be5e35753fe Mon Sep 17 00:00:00 2001
+From ff54889c4394f7ca772dc637ba3b516af8de1356 Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Tue, 7 Nov 2017 22:29:13 +0000
 Subject: [PATCH] igb_uio: remove device reset in release
 
+[ upstream commit 369db3ae8e91cf637ec1abddbf667be5e35753fe ]
+
 More error reported for device reset in release() [1],
 when device pass-through to the guest, host kernel crash on guest exit.
 
@@ -37,63 +39,21 @@
 
 Fixes: e3a64deae2d5 ("igb_uio: prevent reset for bnx2x devices")
 Fixes: b58eedfc7dd5 ("igb_uio: issue FLR during open and release of device file")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 ---
- lib/librte_eal/linuxapp/igb_uio/compat.h  | 19 -------------------
- lib/librte_eal/linuxapp/igb_uio/igb_uio.c |  8 --------
- 2 files changed, 27 deletions(-)
-
-diff --git a/lib/librte_eal/linuxapp/igb_uio/compat.h b/lib/librte_eal/linuxapp/igb_uio/compat.h
-index c8b2c9de3..ce456d4bb 100644
---- a/lib/librte_eal/linuxapp/igb_uio/compat.h
-+++ b/lib/librte_eal/linuxapp/igb_uio/compat.h
-@@ -132,22 +132,3 @@ static bool pci_check_and_mask_intx(struct pci_dev *pdev)
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0)
- #define HAVE_PCI_MSI_MASK_IRQ 1
- #endif
--
--#define BROADCOM_PCI_VENDOR_ID 0x14E4
--static const struct pci_device_id no_reset_pci_tbl[] = {
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x164f) }, /* 57711 */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x168a) }, /* 57800 */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x168e) }, /* 57810 */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x163d) }, /* 57811 */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x168d) }, /* 57840_OBS */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16a1) }, /* 57840_4_10 */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16a2) }, /* 57840_2_20 */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16ae) }, /* 57810_MF */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x163e) }, /* 57811_MF */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16a4) }, /* 57840_MF */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16a9) }, /* 57800_VF */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16af) }, /* 57810_VF */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x163f) }, /* 57811_VF */
--	{ PCI_DEVICE(BROADCOM_PCI_VENDOR_ID, 0x16ad) }, /* 57840_VF */
--	{ 0 },
--};
+ lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 2 --
+ 1 file changed, 2 deletions(-)
+
 diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
-index 037e02267..a3a98c173 100644
+index bedfa6eae..b12351791 100644
 --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
 +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
-@@ -348,11 +348,6 @@ igbuio_pci_open(struct uio_info *info, struct inode *inode)
- 	return 0;
- }
- 
--static bool is_device_excluded_from_reset(struct pci_dev *pdev)
--{
--	return !!pci_match_id(no_reset_pci_tbl, pdev);
--}
--
- static int
- igbuio_pci_release(struct uio_info *info, struct inode *inode)
- {
-@@ -365,9 +360,6 @@ igbuio_pci_release(struct uio_info *info, struct inode *inode)
+@@ -194,8 +194,6 @@ igbuio_pci_release(struct uio_info *info, struct inode *inode)
  	/* stop the device from further DMA */
  	pci_clear_master(dev);
  
--	if (!is_device_excluded_from_reset(dev))
--		pci_reset_function(dev);
+-	pci_reset_function(dev);
 -
  	return 0;
  }

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' has been queued to LTS release 16.11.9
  2018-11-08 18:01           ` [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' " Luca Boccassi
@ 2018-11-12 18:35             ` Luca Boccassi
  2018-11-14 10:02               ` Alejandro Lucero
  0 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-11-12 18:35 UTC (permalink / raw)
  To: Alejandro Lucero; +Cc: Anatoly Burakov, dpdk stable

On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
> Hi,
> 
> FYI, your patch has been queued to LTS release 16.11.9
> 
> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> It will be pushed if I get no objections before 11/10/18. So please
> shout if anyone has objections.
> 
> Also note that after the patch there's a diff of the upstream commit
> vs the patch applied
> to the branch. If the code is different (ie: not only metadata
> diffs), due for example to
> a change in context or macro names, please double check it.
> 
> Thanks.
> 
> Luca Boccassi
> 
> ---
> From 0df09603d47c1e38140b747baa8b712e70f5df51 Mon Sep 17 00:00:00
> 2001
> From: Alejandro Lucero <alejandro.lucero@netronome.com>
> Date: Thu, 25 Oct 2018 11:49:28 +0100
> Subject: [PATCH] bus/pci: compare kernel driver instead of interrupt
> handler
> 
> [ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]
> 
> Invoking the right pci read/write functions is based on interrupt
> handler type. However, this is not configured for secondary processes
> precluding to use those functions.
> 
> This patch fixes the issue using the driver name the device is bound
> to instead.
> 
> Fixes: 632b2d1deeed ("eal: provide functions to access PCI config")
> 
> Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>  lib/librte_eal/linuxapp/eal/eal_pci.c | 33 ++++++++++++-------------
> --
>  1 file changed, 15 insertions(+), 18 deletions(-)
> 
> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c
> b/lib/librte_eal/linuxapp/eal/eal_pci.c
> index 02ec24150..85c7b3139 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_pci.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
> @@ -36,6 +36,7 @@
>  
>  #include <rte_log.h>
>  #include <rte_pci.h>
> +#include <rte_ethdev.h>

Self-facepalm: this cannot work, as ethdev depends on eal. v2 inlined
below.

Alejandro and Anatoly, please have a quick look. Thanks!

-- 
Kind regards,
Luca Boccassi


>From 1090520032150e778b6f2088f16c13e8b02fce3e Mon Sep 17 00:00:00 2001
From: Alejandro Lucero <alejandro.lucero@netronome.com>
Date: Thu, 25 Oct 2018 11:49:28 +0100
Subject: [PATCH] bus/pci: compare kernel driver instead of interrupt handler

[ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]

Invoking the right pci read/write functions is based on interrupt
handler type. However, this is not configured for secondary processes
precluding to use those functions.

This patch fixes the issue using the driver name the device is bound
to instead.

Fixes: 632b2d1deeed ("eal: provide functions to access PCI config")

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 lib/librte_eal/linuxapp/eal/eal_pci.c | 35 +++++++++++++--------------
 1 file changed, 17 insertions(+), 18 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index 02ec24150..2d498d543 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -522,27 +522,27 @@ rte_eal_pci_scan(void)
 	return -1;
 }
 
+/* from rte_ethdev, but rte_eal can't depend on it, so redefine it */
+#define ETH_NAME_MAX_LEN (32)
 /* Read PCI config space. */
 int rte_eal_pci_read_config(const struct rte_pci_device *device,
 			    void *buf, size_t len, off_t offset)
 {
+	char devname[ETH_NAME_MAX_LEN] = "";
 	const struct rte_intr_handle *intr_handle = &device->intr_handle;
 
-	switch (intr_handle->type) {
-	case RTE_INTR_HANDLE_UIO:
-	case RTE_INTR_HANDLE_UIO_INTX:
+	switch (device->kdrv) {
+	case RTE_KDRV_IGB_UIO:
 		return pci_uio_read_config(intr_handle, buf, len, offset);
-
 #ifdef VFIO_PRESENT
-	case RTE_INTR_HANDLE_VFIO_MSIX:
-	case RTE_INTR_HANDLE_VFIO_MSI:
-	case RTE_INTR_HANDLE_VFIO_LEGACY:
+	case RTE_KDRV_VFIO:
 		return pci_vfio_read_config(intr_handle, buf, len, offset);
 #endif
 	default:
+		rte_eal_pci_device_name(&device->addr, devname,
+				    ETH_NAME_MAX_LEN);
 		RTE_LOG(ERR, EAL,
-			"Unknown handle type of fd %d\n",
-					intr_handle->fd);
+			"Unknown driver type for %s\n", devname);
 		return -1;
 	}
 }
@@ -551,26 +551,25 @@ int rte_eal_pci_read_config(const struct rte_pci_device *device,
 int rte_eal_pci_write_config(const struct rte_pci_device *device,
 			     const void *buf, size_t len, off_t offset)
 {
+	char devname[ETH_NAME_MAX_LEN] = "";
 	const struct rte_intr_handle *intr_handle = &device->intr_handle;
 
-	switch (intr_handle->type) {
-	case RTE_INTR_HANDLE_UIO:
-	case RTE_INTR_HANDLE_UIO_INTX:
+	switch (device->kdrv) {
+	case RTE_KDRV_IGB_UIO:
 		return pci_uio_write_config(intr_handle, buf, len, offset);
-
 #ifdef VFIO_PRESENT
-	case RTE_INTR_HANDLE_VFIO_MSIX:
-	case RTE_INTR_HANDLE_VFIO_MSI:
-	case RTE_INTR_HANDLE_VFIO_LEGACY:
+	case RTE_KDRV_VFIO:
 		return pci_vfio_write_config(intr_handle, buf, len, offset);
 #endif
 	default:
+		rte_eal_pci_device_name(&device->addr, devname,
+				    ETH_NAME_MAX_LEN);
 		RTE_LOG(ERR, EAL,
-			"Unknown handle type of fd %d\n",
-					intr_handle->fd);
+			"Unknown driver type for %s\n", devname);
 		return -1;
 	}
 }
+#undef ETH_NAME_MAX_LEN
 
 #if defined(RTE_ARCH_X86)
 static int
-- 
2.19.1

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' has been queued to LTS release 16.11.9
  2018-11-12 18:35             ` Luca Boccassi
@ 2018-11-14 10:02               ` Alejandro Lucero
  2018-11-14 11:07                 ` Luca Boccassi
  0 siblings, 1 reply; 118+ messages in thread
From: Alejandro Lucero @ 2018-11-14 10:02 UTC (permalink / raw)
  To: Luca Boccassi; +Cc: Burakov, Anatoly, dpdk stable

Hi Luca,

On Mon, Nov 12, 2018 at 6:35 PM Luca Boccassi <bluca@debian.org> wrote:

> On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
> > Hi,
> >
> > FYI, your patch has been queued to LTS release 16.11.9
> >
> > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> > It will be pushed if I get no objections before 11/10/18. So please
> > shout if anyone has objections.
> >
> > Also note that after the patch there's a diff of the upstream commit
> > vs the patch applied
> > to the branch. If the code is different (ie: not only metadata
> > diffs), due for example to
> > a change in context or macro names, please double check it.
> >
> > Thanks.
> >
> > Luca Boccassi
> >
> > ---
> > From 0df09603d47c1e38140b747baa8b712e70f5df51 Mon Sep 17 00:00:00
> > 2001
> > From: Alejandro Lucero <alejandro.lucero@netronome.com>
> > Date: Thu, 25 Oct 2018 11:49:28 +0100
> > Subject: [PATCH] bus/pci: compare kernel driver instead of interrupt
> > handler
> >
> > [ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]
> >
> > Invoking the right pci read/write functions is based on interrupt
> > handler type. However, this is not configured for secondary processes
> > precluding to use those functions.
> >
> > This patch fixes the issue using the driver name the device is bound
> > to instead.
> >
> > Fixes: 632b2d1deeed ("eal: provide functions to access PCI config")
> >
> > Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
> > Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> > ---
> >  lib/librte_eal/linuxapp/eal/eal_pci.c | 33 ++++++++++++-------------
> > --
> >  1 file changed, 15 insertions(+), 18 deletions(-)
> >
> > diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c
> > b/lib/librte_eal/linuxapp/eal/eal_pci.c
> > index 02ec24150..85c7b3139 100644
> > --- a/lib/librte_eal/linuxapp/eal/eal_pci.c
> > +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
> > @@ -36,6 +36,7 @@
> >
> >  #include <rte_log.h>
> >  #include <rte_pci.h>
> > +#include <rte_ethdev.h>
>
> Self-facepalm: this cannot work, as ethdev depends on eal. v2 inlined
> below.
>
> Alejandro and Anatoly, please have a quick look. Thanks!
>
>
This patch is only necessary for PMDs which secondary support requires
these pci read/write accesses.
AFAIK, it is just NFP PMD having this need, and multiprocess support will
be added in 19.02, so it is not a big problem to not apply this patch.


> --
> Kind regards,
> Luca Boccassi
>
>
> From 1090520032150e778b6f2088f16c13e8b02fce3e Mon Sep 17 00:00:00 2001
> From: Alejandro Lucero <alejandro.lucero@netronome.com>
> Date: Thu, 25 Oct 2018 11:49:28 +0100
> Subject: [PATCH] bus/pci: compare kernel driver instead of interrupt
> handler
>
> [ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]
>
> Invoking the right pci read/write functions is based on interrupt
> handler type. However, this is not configured for secondary processes
> precluding to use those functions.
>
> This patch fixes the issue using the driver name the device is bound
> to instead.
>
> Fixes: 632b2d1deeed ("eal: provide functions to access PCI config")
>
> Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>  lib/librte_eal/linuxapp/eal/eal_pci.c | 35 +++++++++++++--------------
>  1 file changed, 17 insertions(+), 18 deletions(-)
>
> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c
> b/lib/librte_eal/linuxapp/eal/eal_pci.c
> index 02ec24150..2d498d543 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_pci.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
> @@ -522,27 +522,27 @@ rte_eal_pci_scan(void)
>         return -1;
>  }
>
> +/* from rte_ethdev, but rte_eal can't depend on it, so redefine it */
> +#define ETH_NAME_MAX_LEN (32)
>  /* Read PCI config space. */
>  int rte_eal_pci_read_config(const struct rte_pci_device *device,
>                             void *buf, size_t len, off_t offset)
>  {
> +       char devname[ETH_NAME_MAX_LEN] = "";
>         const struct rte_intr_handle *intr_handle = &device->intr_handle;
>
> -       switch (intr_handle->type) {
> -       case RTE_INTR_HANDLE_UIO:
> -       case RTE_INTR_HANDLE_UIO_INTX:
> +       switch (device->kdrv) {
> +       case RTE_KDRV_IGB_UIO:
>                 return pci_uio_read_config(intr_handle, buf, len, offset);
> -
>  #ifdef VFIO_PRESENT
> -       case RTE_INTR_HANDLE_VFIO_MSIX:
> -       case RTE_INTR_HANDLE_VFIO_MSI:
> -       case RTE_INTR_HANDLE_VFIO_LEGACY:
> +       case RTE_KDRV_VFIO:
>                 return pci_vfio_read_config(intr_handle, buf, len, offset);
>  #endif
>         default:
> +               rte_eal_pci_device_name(&device->addr, devname,
> +                                   ETH_NAME_MAX_LEN);
>                 RTE_LOG(ERR, EAL,
> -                       "Unknown handle type of fd %d\n",
> -                                       intr_handle->fd);
> +                       "Unknown driver type for %s\n", devname);
>                 return -1;
>         }
>  }
> @@ -551,26 +551,25 @@ int rte_eal_pci_read_config(const struct
> rte_pci_device *device,
>  int rte_eal_pci_write_config(const struct rte_pci_device *device,
>                              const void *buf, size_t len, off_t offset)
>  {
> +       char devname[ETH_NAME_MAX_LEN] = "";
>         const struct rte_intr_handle *intr_handle = &device->intr_handle;
>
> -       switch (intr_handle->type) {
> -       case RTE_INTR_HANDLE_UIO:
> -       case RTE_INTR_HANDLE_UIO_INTX:
> +       switch (device->kdrv) {
> +       case RTE_KDRV_IGB_UIO:
>                 return pci_uio_write_config(intr_handle, buf, len, offset);
> -
>  #ifdef VFIO_PRESENT
> -       case RTE_INTR_HANDLE_VFIO_MSIX:
> -       case RTE_INTR_HANDLE_VFIO_MSI:
> -       case RTE_INTR_HANDLE_VFIO_LEGACY:
> +       case RTE_KDRV_VFIO:
>                 return pci_vfio_write_config(intr_handle, buf, len,
> offset);
>  #endif
>         default:
> +               rte_eal_pci_device_name(&device->addr, devname,
> +                                   ETH_NAME_MAX_LEN);
>                 RTE_LOG(ERR, EAL,
> -                       "Unknown handle type of fd %d\n",
> -                                       intr_handle->fd);
> +                       "Unknown driver type for %s\n", devname);
>                 return -1;
>         }
>  }
> +#undef ETH_NAME_MAX_LEN
>
>  #if defined(RTE_ARCH_X86)
>  static int
> --
> 2.19.1
>

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' has been queued to LTS release 16.11.9
  2018-11-14 10:02               ` Alejandro Lucero
@ 2018-11-14 11:07                 ` Luca Boccassi
  2018-11-14 11:36                   ` Alejandro Lucero
  0 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-11-14 11:07 UTC (permalink / raw)
  To: Alejandro Lucero; +Cc: Burakov, Anatoly, dpdk stable

On Wed, 2018-11-14 at 10:02 +0000, Alejandro Lucero wrote:
> Hi Luca,
> 
> On Mon, Nov 12, 2018 at 6:35 PM Luca Boccassi <bluca@debian.org>
> wrote:
> 
> > On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
> > > Hi,
> > > 
> > > FYI, your patch has been queued to LTS release 16.11.9
> > > 
> > > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable
> > > yet.
> > > It will be pushed if I get no objections before 11/10/18. So
> > > please
> > > shout if anyone has objections.
> > > 
> > > Also note that after the patch there's a diff of the upstream
> > > commit
> > > vs the patch applied
> > > to the branch. If the code is different (ie: not only metadata
> > > diffs), due for example to
> > > a change in context or macro names, please double check it.
> > > 
> > > Thanks.
> > > 
> > > Luca Boccassi
> > > 
> > > ---
> > > From 0df09603d47c1e38140b747baa8b712e70f5df51 Mon Sep 17 00:00:00
> > > 2001
> > > From: Alejandro Lucero <alejandro.lucero@netronome.com>
> > > Date: Thu, 25 Oct 2018 11:49:28 +0100
> > > Subject: [PATCH] bus/pci: compare kernel driver instead of
> > > interrupt
> > > handler
> > > 
> > > [ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]
> > > 
> > > Invoking the right pci read/write functions is based on interrupt
> > > handler type. However, this is not configured for secondary
> > > processes
> > > precluding to use those functions.
> > > 
> > > This patch fixes the issue using the driver name the device is
> > > bound
> > > to instead.
> > > 
> > > Fixes: 632b2d1deeed ("eal: provide functions to access PCI
> > > config")
> > > 
> > > Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
> > > Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> > > ---
> > >  lib/librte_eal/linuxapp/eal/eal_pci.c | 33 ++++++++++++---------
> > > ----
> > > --
> > >  1 file changed, 15 insertions(+), 18 deletions(-)
> > > 
> > > diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > b/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > index 02ec24150..85c7b3139 100644
> > > --- a/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > @@ -36,6 +36,7 @@
> > > 
> > >  #include <rte_log.h>
> > >  #include <rte_pci.h>
> > > +#include <rte_ethdev.h>
> > 
> > Self-facepalm: this cannot work, as ethdev depends on eal. v2
> > inlined
> > below.
> > 
> > Alejandro and Anatoly, please have a quick look. Thanks!
> > 
> > 
> 
> This patch is only necessary for PMDs which secondary support
> requires
> these pci read/write accesses.
> AFAIK, it is just NFP PMD having this need, and multiprocess support
> will
> be added in 19.02, so it is not a big problem to not apply this
> patch.

Hi,

So I can drop both this and 939e666bc0796940ae91535002e1a1c9196eae02 ?

-- 
Kind regards,
Luca Boccassi

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' has been queued to LTS release 16.11.9
  2018-11-14 11:07                 ` Luca Boccassi
@ 2018-11-14 11:36                   ` Alejandro Lucero
  2018-11-15 17:34                     ` Luca Boccassi
  0 siblings, 1 reply; 118+ messages in thread
From: Alejandro Lucero @ 2018-11-14 11:36 UTC (permalink / raw)
  To: Luca Boccassi; +Cc: Burakov, Anatoly, dpdk stable

On Wed, Nov 14, 2018 at 11:07 AM Luca Boccassi <bluca@debian.org> wrote:

> On Wed, 2018-11-14 at 10:02 +0000, Alejandro Lucero wrote:
> > Hi Luca,
> >
> > On Mon, Nov 12, 2018 at 6:35 PM Luca Boccassi <bluca@debian.org>
> > wrote:
> >
> > > On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
> > > > Hi,
> > > >
> > > > FYI, your patch has been queued to LTS release 16.11.9
> > > >
> > > > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable
> > > > yet.
> > > > It will be pushed if I get no objections before 11/10/18. So
> > > > please
> > > > shout if anyone has objections.
> > > >
> > > > Also note that after the patch there's a diff of the upstream
> > > > commit
> > > > vs the patch applied
> > > > to the branch. If the code is different (ie: not only metadata
> > > > diffs), due for example to
> > > > a change in context or macro names, please double check it.
> > > >
> > > > Thanks.
> > > >
> > > > Luca Boccassi
> > > >
> > > > ---
> > > > From 0df09603d47c1e38140b747baa8b712e70f5df51 Mon Sep 17 00:00:00
> > > > 2001
> > > > From: Alejandro Lucero <alejandro.lucero@netronome.com>
> > > > Date: Thu, 25 Oct 2018 11:49:28 +0100
> > > > Subject: [PATCH] bus/pci: compare kernel driver instead of
> > > > interrupt
> > > > handler
> > > >
> > > > [ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]
> > > >
> > > > Invoking the right pci read/write functions is based on interrupt
> > > > handler type. However, this is not configured for secondary
> > > > processes
> > > > precluding to use those functions.
> > > >
> > > > This patch fixes the issue using the driver name the device is
> > > > bound
> > > > to instead.
> > > >
> > > > Fixes: 632b2d1deeed ("eal: provide functions to access PCI
> > > > config")
> > > >
> > > > Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
> > > > Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> > > > ---
> > > >  lib/librte_eal/linuxapp/eal/eal_pci.c | 33 ++++++++++++---------
> > > > ----
> > > > --
> > > >  1 file changed, 15 insertions(+), 18 deletions(-)
> > > >
> > > > diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > > b/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > > index 02ec24150..85c7b3139 100644
> > > > --- a/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > > +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > > @@ -36,6 +36,7 @@
> > > >
> > > >  #include <rte_log.h>
> > > >  #include <rte_pci.h>
> > > > +#include <rte_ethdev.h>
> > >
> > > Self-facepalm: this cannot work, as ethdev depends on eal. v2
> > > inlined
> > > below.
> > >
> > > Alejandro and Anatoly, please have a quick look. Thanks!
> > >
> > >
> >
> > This patch is only necessary for PMDs which secondary support
> > requires
> > these pci read/write accesses.
> > AFAIK, it is just NFP PMD having this need, and multiprocess support
> > will
> > be added in 19.02, so it is not a big problem to not apply this
> > patch.
>
> Hi,
>
> So I can drop both this and 939e666bc0796940ae91535002e1a1c9196eae02 ?
>
>
I can not find what you refer to. Which commit is that one?


> --
> Kind regards,
> Luca Boccassi
>

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' has been queued to LTS release 16.11.9
  2018-11-14 11:36                   ` Alejandro Lucero
@ 2018-11-15 17:34                     ` Luca Boccassi
  0 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-15 17:34 UTC (permalink / raw)
  To: Alejandro Lucero; +Cc: Burakov, Anatoly, dpdk stable

On Wed, 2018-11-14 at 11:36 +0000, Alejandro Lucero wrote:
> On Wed, Nov 14, 2018 at 11:07 AM Luca Boccassi <bluca@debian.org>
> wrote:
> 
> > On Wed, 2018-11-14 at 10:02 +0000, Alejandro Lucero wrote:
> > > Hi Luca,
> > > 
> > > On Mon, Nov 12, 2018 at 6:35 PM Luca Boccassi <bluca@debian.org>
> > > wrote:
> > > 
> > > > On Thu, 2018-11-08 at 18:01 +0000, Luca Boccassi wrote:
> > > > > Hi,
> > > > > 
> > > > > FYI, your patch has been queued to LTS release 16.11.9
> > > > > 
> > > > > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-sta
> > > > > ble
> > > > > yet.
> > > > > It will be pushed if I get no objections before 11/10/18. So
> > > > > please
> > > > > shout if anyone has objections.
> > > > > 
> > > > > Also note that after the patch there's a diff of the upstream
> > > > > commit
> > > > > vs the patch applied
> > > > > to the branch. If the code is different (ie: not only
> > > > > metadata
> > > > > diffs), due for example to
> > > > > a change in context or macro names, please double check it.
> > > > > 
> > > > > Thanks.
> > > > > 
> > > > > Luca Boccassi
> > > > > 
> > > > > ---
> > > > > From 0df09603d47c1e38140b747baa8b712e70f5df51 Mon Sep 17
> > > > > 00:00:00
> > > > > 2001
> > > > > From: Alejandro Lucero <alejandro.lucero@netronome.com>
> > > > > Date: Thu, 25 Oct 2018 11:49:28 +0100
> > > > > Subject: [PATCH] bus/pci: compare kernel driver instead of
> > > > > interrupt
> > > > > handler
> > > > > 
> > > > > [ upstream commit 630deed612ca382f48a3ef4b65dfc74b7cd09cf9 ]
> > > > > 
> > > > > Invoking the right pci read/write functions is based on
> > > > > interrupt
> > > > > handler type. However, this is not configured for secondary
> > > > > processes
> > > > > precluding to use those functions.
> > > > > 
> > > > > This patch fixes the issue using the driver name the device
> > > > > is
> > > > > bound
> > > > > to instead.
> > > > > 
> > > > > Fixes: 632b2d1deeed ("eal: provide functions to access PCI
> > > > > config")
> > > > > 
> > > > > Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.c
> > > > > om>
> > > > > Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> > > > > ---
> > > > >  lib/librte_eal/linuxapp/eal/eal_pci.c | 33 ++++++++++++-----
> > > > > ----
> > > > > ----
> > > > > --
> > > > >  1 file changed, 15 insertions(+), 18 deletions(-)
> > > > > 
> > > > > diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > > > b/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > > > index 02ec24150..85c7b3139 100644
> > > > > --- a/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > > > +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
> > > > > @@ -36,6 +36,7 @@
> > > > > 
> > > > >  #include <rte_log.h>
> > > > >  #include <rte_pci.h>
> > > > > +#include <rte_ethdev.h>
> > > > 
> > > > Self-facepalm: this cannot work, as ethdev depends on eal. v2
> > > > inlined
> > > > below.
> > > > 
> > > > Alejandro and Anatoly, please have a quick look. Thanks!
> > > > 
> > > > 
> > > 
> > > This patch is only necessary for PMDs which secondary support
> > > requires
> > > these pci read/write accesses.
> > > AFAIK, it is just NFP PMD having this need, and multiprocess
> > > support
> > > will
> > > be added in 19.02, so it is not a big problem to not apply this
> > > patch.
> > 
> > Hi,
> > 
> > So I can drop both this and
> > 939e666bc0796940ae91535002e1a1c9196eae02 ?
> > 
> > 
> 
> I can not find what you refer to. Which commit is that one?

Sorry, copy-pasta, I meant:

a38eafedda1de14c9fd7219e769e89e4aec92a45 bus/pci: fix config r/w access

-- 
Kind regards,
Luca Boccassi

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'eal: introduce rte version of fls' has been queued to LTS release 16.11.9
  2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
                             ` (13 preceding siblings ...)
  2018-11-08 18:01           ` [dpdk-stable] patch 'igb_uio: fix unexpected removal for hot-unplug' " Luca Boccassi
@ 2018-11-19 12:25           ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'eal: fix build' " Luca Boccassi
                               ` (20 more replies)
  14 siblings, 21 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Jerin Jacob; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Note that this patch has been cherry-picked to allow the backporting of
Fixes: 5d08fecdd39f ("eal: fix build")

Thanks.

Luca Boccassi

---
>From 35072ede1f49874059f563c0b2be8e1d8f56691b Mon Sep 17 00:00:00 2001
From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Date: Wed, 7 Nov 2018 06:59:03 +0000
Subject: [PATCH] eal: introduce rte version of fls

[ upstream commit 3a6f2c50b9dc27a958af87d7ca9533b51a36477b ]

The function returns the last (most-significant) bit set.
Added unit testcase to verify rte_fls_u32().

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 app/test/test_common.c                     | 32 ++++++++++++++++++++++
 lib/librte_eal/common/include/rte_common.h | 17 ++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/app/test/test_common.c b/app/test/test_common.c
index 8effa2f9e..afd2b99f9 100644
--- a/app/test/test_common.c
+++ b/app/test/test_common.c
@@ -158,6 +158,37 @@ test_align(void)
 	return 0;
 }
 
+static int
+test_fls(void)
+{
+	struct fls_test_vector {
+		uint32_t arg;
+		int rc;
+	};
+	int expected, rc;
+	uint32_t i, arg;
+
+	const struct fls_test_vector test[] = {
+		{0x0, 0},
+		{0x1, 1},
+		{0x4000, 15},
+		{0x80000000, 32},
+	};
+
+	for (i = 0; i < RTE_DIM(test); i++) {
+		arg = test[i].arg;
+		rc = rte_fls_u32(arg);
+		expected = test[i].rc;
+		if (rc != expected) {
+			printf("Wrong rte_fls_u32(0x%x) rc=%d, expected=%d\n",
+				arg, rc, expected);
+			return TEST_FAILED;
+		}
+	}
+
+	return 0;
+}
+
 static int
 test_common(void)
 {
@@ -165,6 +196,7 @@ test_common(void)
 	ret |= test_align();
 	ret |= test_macros(0);
 	ret |= test_misc();
+	ret |= test_fls();
 
 	return ret;
 }
diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
index f5e2f8861..9ae584717 100644
--- a/lib/librte_eal/common/include/rte_common.h
+++ b/lib/librte_eal/common/include/rte_common.h
@@ -326,6 +326,23 @@ rte_bsf32(uint32_t v)
 	return (uint32_t)__builtin_ctz(v);
 }
 
+/**
+ * Return the last (most-significant) bit set.
+ *
+ * @note The last (most significant) bit is at position 32.
+ * @note rte_fls_u32(0) = 0, rte_fls_u32(1) = 1, rte_fls_u32(0x80000000) = 32
+ *
+ * @param x
+ *     The input parameter.
+ * @return
+ *     The last (most-significant) bit set, or 0 if the input is 0.
+ */
+static inline int
+rte_fls_u32(uint32_t x)
+{
+	return (x == 0) ? 0 : 32 - __builtin_clz(x);
+}
+
 #ifndef offsetof
 /** Return the offset of a field in a structure. */
 #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.168290468 +0000
+++ 0002-eal-introduce-rte-version-of-fls.patch	2018-11-19 12:15:18.067611434 +0000
@@ -1,52 +1,24 @@
-From 3a6f2c50b9dc27a958af87d7ca9533b51a36477b Mon Sep 17 00:00:00 2001
+From 35072ede1f49874059f563c0b2be8e1d8f56691b Mon Sep 17 00:00:00 2001
 From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
 Date: Wed, 7 Nov 2018 06:59:03 +0000
 Subject: [PATCH] eal: introduce rte version of fls
 
+[ upstream commit 3a6f2c50b9dc27a958af87d7ca9533b51a36477b ]
+
 The function returns the last (most-significant) bit set.
 Added unit testcase to verify rte_fls_u32().
 
 Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
 ---
- lib/librte_eal/common/include/rte_common.h | 19 +++++++++++++
- test/test/test_common.c                    | 32 ++++++++++++++++++++++
- 2 files changed, 51 insertions(+)
+ app/test/test_common.c                     | 32 ++++++++++++++++++++++
+ lib/librte_eal/common/include/rte_common.h | 17 ++++++++++++
+ 2 files changed, 49 insertions(+)
 
-diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
-index cba7bbc1d..87f0f6302 100644
---- a/lib/librte_eal/common/include/rte_common.h
-+++ b/lib/librte_eal/common/include/rte_common.h
-@@ -473,6 +473,25 @@ rte_log2_u32(uint32_t v)
- 	return rte_bsf32(v);
- }
- 
-+
-+/**
-+ * Return the last (most-significant) bit set.
-+ *
-+ * @note The last (most significant) bit is at position 32.
-+ * @note rte_fls_u32(0) = 0, rte_fls_u32(1) = 1, rte_fls_u32(0x80000000) = 32
-+ *
-+ * @param x
-+ *     The input parameter.
-+ * @return
-+ *     The last (most-significant) bit set, or 0 if the input is 0.
-+ */
-+static inline int
-+rte_fls_u32(uint32_t x)
-+{
-+	return (x == 0) ? 0 : 32 - __builtin_clz(x);
-+}
-+
-+
- #ifndef offsetof
- /** Return the offset of a field in a structure. */
- #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
-diff --git a/test/test/test_common.c b/test/test/test_common.c
-index 7a67e458e..c6d17baae 100644
---- a/test/test/test_common.c
-+++ b/test/test/test_common.c
-@@ -188,6 +188,37 @@ test_log2(void)
+diff --git a/app/test/test_common.c b/app/test/test_common.c
+index 8effa2f9e..afd2b99f9 100644
+--- a/app/test/test_common.c
++++ b/app/test/test_common.c
+@@ -158,6 +158,37 @@ test_align(void)
  	return 0;
  }
  
@@ -84,14 +56,42 @@
  static int
  test_common(void)
  {
-@@ -196,6 +227,7 @@ test_common(void)
+@@ -165,6 +196,7 @@ test_common(void)
+ 	ret |= test_align();
  	ret |= test_macros(0);
  	ret |= test_misc();
- 	ret |= test_log2();
 +	ret |= test_fls();
  
  	return ret;
  }
+diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
+index f5e2f8861..9ae584717 100644
+--- a/lib/librte_eal/common/include/rte_common.h
++++ b/lib/librte_eal/common/include/rte_common.h
+@@ -326,6 +326,23 @@ rte_bsf32(uint32_t v)
+ 	return (uint32_t)__builtin_ctz(v);
+ }
+ 
++/**
++ * Return the last (most-significant) bit set.
++ *
++ * @note The last (most significant) bit is at position 32.
++ * @note rte_fls_u32(0) = 0, rte_fls_u32(1) = 1, rte_fls_u32(0x80000000) = 32
++ *
++ * @param x
++ *     The input parameter.
++ * @return
++ *     The last (most-significant) bit set, or 0 if the input is 0.
++ */
++static inline int
++rte_fls_u32(uint32_t x)
++{
++	return (x == 0) ? 0 : 32 - __builtin_clz(x);
++}
++
+ #ifndef offsetof
+ /** Return the offset of a field in a structure. */
+ #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'eal: fix build' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'pci: fix parsing of address without function number' " Luca Boccassi
                               ` (19 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Jerin Jacob; +Cc: Thomas Monjalon, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 7aabb9ba5a2f4a03d063e11e83cac06b441ad079 Mon Sep 17 00:00:00 2001
From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Date: Wed, 7 Nov 2018 06:59:06 +0000
Subject: [PATCH] eal: fix build
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

[ upstream commit 5d08fecdd39f2373713a0475b75a4126800c9acf ]

Some toolchain has fls() definition in string.h as argument type int,
which is conflicting uint32_t argument type.

/export/dpdk.org/lib/librte_eal/common/rte_reciprocal.c:47:19:
error: conflicting types for ‘fls’
 static inline int fls(uint32_t x)
                  ^~~

/opt/marvell-tools-201/aarch64-marvell-elf/include/strings.h:59:6:
note: previous declaration of ‘fls’ was here
 int  fls(int) __pure2;

FreeBSD string.h also has fls() with argument as int type.
https://www.freebsd.org/cgi/man.cgi?query=fls&sektion=3

Fixing the conflict by using rte version of fls.

Fixes: ffe3ec811ef5 ("sched: introduce reciprocal divide")
Fixes: faf2b25c9f80 ("fm10k: support VMDQ in multi-queue configuration")

Suggested-by: Thomas Monjalon <thomas@monjalon.net>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 drivers/net/fm10k/fm10k_ethdev.c  | 11 +++--------
 lib/librte_sched/rte_reciprocal.c | 17 +----------------
 2 files changed, 4 insertions(+), 24 deletions(-)

diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index 0fac816f9..f8f6d37d7 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -482,11 +482,6 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
 	return 0;
 }
 
-/* fls = find last set bit = 32 minus the number of leading zeros */
-#ifndef fls
-#define fls(x) (((x) == 0) ? 0 : (32 - __builtin_clz((x))))
-#endif
-
 static void
 fm10k_dev_vmdq_rx_configure(struct rte_eth_dev *dev)
 {
@@ -1059,8 +1054,8 @@ fm10k_dev_dglort_map_configure(struct rte_eth_dev *dev)
 
 	macvlan = FM10K_DEV_PRIVATE_TO_MACVLAN(dev->data->dev_private);
 	nb_queue_pools = macvlan->nb_queue_pools;
-	pool_len = nb_queue_pools ? fls(nb_queue_pools - 1) : 0;
-	rss_len = fls(dev->data->nb_rx_queues - 1) - pool_len;
+	pool_len = nb_queue_pools ? rte_fls_u32(nb_queue_pools - 1) : 0;
+	rss_len = rte_fls_u32(dev->data->nb_rx_queues - 1) - pool_len;
 
 	/* GLORT 0x0-0x3F are used by PF and VMDQ,  0x40-0x7F used by FD */
 	dglortdec = (rss_len << FM10K_DGLORTDEC_RSSLENGTH_SHIFT) | pool_len;
@@ -1071,7 +1066,7 @@ fm10k_dev_dglort_map_configure(struct rte_eth_dev *dev)
 	FM10K_WRITE_REG(hw, FM10K_DGLORTDEC(0), dglortdec);
 
 	/* Flow Director configurations, only queue number is valid. */
-	dglortdec = fls(dev->data->nb_rx_queues - 1);
+	dglortdec = rte_fls_u32(dev->data->nb_rx_queues - 1);
 	dglortmask = (GLORT_FD_MASK << FM10K_DGLORTMAP_MASK_SHIFT) |
 			(hw->mac.dglort_map + GLORT_FD_Q_BASE);
 	FM10K_WRITE_REG(hw, FM10K_DGLORTMAP(1), dglortmask);
diff --git a/lib/librte_sched/rte_reciprocal.c b/lib/librte_sched/rte_reciprocal.c
index 652f0237a..385109cd5 100644
--- a/lib/librte_sched/rte_reciprocal.c
+++ b/lib/librte_sched/rte_reciprocal.c
@@ -38,28 +38,13 @@
 
 #include "rte_reciprocal.h"
 
-/* find largest set bit.
- * portable and slow but does not matter for this usage.
- */
-static inline int fls(uint32_t x)
-{
-	int b;
-
-	for (b = 31; b >= 0; --b) {
-		if (x & (1u << b))
-			return b + 1;
-	}
-
-	return 0;
-}
-
 struct rte_reciprocal rte_reciprocal_value(uint32_t d)
 {
 	struct rte_reciprocal R;
 	uint64_t m;
 	int l;
 
-	l = fls(d - 1);
+	l = rte_fls_u32(d - 1);
 	m = ((1ULL << 32) * ((1ULL << l) - d));
 	m /= d;
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.147417342 +0000
+++ 0001-eal-fix-build.patch	2018-11-19 12:15:18.067611434 +0000
@@ -1,4 +1,4 @@
-From 5d08fecdd39f2373713a0475b75a4126800c9acf Mon Sep 17 00:00:00 2001
+From 7aabb9ba5a2f4a03d063e11e83cac06b441ad079 Mon Sep 17 00:00:00 2001
 From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
 Date: Wed, 7 Nov 2018 06:59:06 +0000
 Subject: [PATCH] eal: fix build
@@ -6,6 +6,8 @@
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
+[ upstream commit 5d08fecdd39f2373713a0475b75a4126800c9acf ]
+
 Some toolchain has fls() definition in string.h as argument type int,
 which is conflicting uint32_t argument type.
 
@@ -25,20 +27,19 @@
 
 Fixes: ffe3ec811ef5 ("sched: introduce reciprocal divide")
 Fixes: faf2b25c9f80 ("fm10k: support VMDQ in multi-queue configuration")
-Cc: stable@dpdk.org
 
 Suggested-by: Thomas Monjalon <thomas@monjalon.net>
 Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
 ---
- drivers/net/fm10k/fm10k_ethdev.c       | 11 +++--------
- lib/librte_eal/common/rte_reciprocal.c | 17 +----------------
+ drivers/net/fm10k/fm10k_ethdev.c  | 11 +++--------
+ lib/librte_sched/rte_reciprocal.c | 17 +----------------
  2 files changed, 4 insertions(+), 24 deletions(-)
 
 diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
-index c852022dd..85fb6c5cb 100644
+index 0fac816f9..f8f6d37d7 100644
 --- a/drivers/net/fm10k/fm10k_ethdev.c
 +++ b/drivers/net/fm10k/fm10k_ethdev.c
-@@ -464,11 +464,6 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
+@@ -482,11 +482,6 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
  	return 0;
  }
  
@@ -50,7 +51,7 @@
  static void
  fm10k_dev_vmdq_rx_configure(struct rte_eth_dev *dev)
  {
-@@ -1030,8 +1025,8 @@ fm10k_dev_dglort_map_configure(struct rte_eth_dev *dev)
+@@ -1059,8 +1054,8 @@ fm10k_dev_dglort_map_configure(struct rte_eth_dev *dev)
  
  	macvlan = FM10K_DEV_PRIVATE_TO_MACVLAN(dev->data->dev_private);
  	nb_queue_pools = macvlan->nb_queue_pools;
@@ -61,7 +62,7 @@
  
  	/* GLORT 0x0-0x3F are used by PF and VMDQ,  0x40-0x7F used by FD */
  	dglortdec = (rss_len << FM10K_DGLORTDEC_RSSLENGTH_SHIFT) | pool_len;
-@@ -1042,7 +1037,7 @@ fm10k_dev_dglort_map_configure(struct rte_eth_dev *dev)
+@@ -1071,7 +1066,7 @@ fm10k_dev_dglort_map_configure(struct rte_eth_dev *dev)
  	FM10K_WRITE_REG(hw, FM10K_DGLORTDEC(0), dglortdec);
  
  	/* Flow Director configurations, only queue number is valid. */
@@ -70,11 +71,11 @@
  	dglortmask = (GLORT_FD_MASK << FM10K_DGLORTMAP_MASK_SHIFT) |
  			(hw->mac.dglort_map + GLORT_FD_Q_BASE);
  	FM10K_WRITE_REG(hw, FM10K_DGLORTMAP(1), dglortmask);
-diff --git a/lib/librte_eal/common/rte_reciprocal.c b/lib/librte_eal/common/rte_reciprocal.c
-index d81b11db6..f017d0c28 100644
---- a/lib/librte_eal/common/rte_reciprocal.c
-+++ b/lib/librte_eal/common/rte_reciprocal.c
-@@ -41,28 +41,13 @@
+diff --git a/lib/librte_sched/rte_reciprocal.c b/lib/librte_sched/rte_reciprocal.c
+index 652f0237a..385109cd5 100644
+--- a/lib/librte_sched/rte_reciprocal.c
++++ b/lib/librte_sched/rte_reciprocal.c
+@@ -38,28 +38,13 @@
  
  #include "rte_reciprocal.h"
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'pci: fix parsing of address without function number' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'eal: fix build' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/e1000/base: fix uninitialized variable' " Luca Boccassi
                               ` (18 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: Wisam Jaddo, Gaetan Rivet, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From dbff7219743df71f5a68bbf53fc63b3baf0c282f Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Mon, 12 Nov 2018 00:58:56 +0100
Subject: [PATCH] pci: fix parsing of address without function number

[ upstream commit 31f19a9beb8d88b67be6e469404081eb834d199c ]

If the last part of the PCI address (function number) is missing,
the parsing was successful, assuming function 0.
The call to strtoul is not returning an error in such a case,
so an explicit check is inserted before.

This bug has always been there in older parsing macros:
	- GET_PCIADDR_FIELD
	- GET_BLACKLIST_FIELD

Fixes: af75078fece3 ("first public release")

Reported-by: Wisam Jaddo <wisamm@mellanox.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
 lib/librte_eal/common/include/rte_pci.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h
index 9ce884727..10fa85640 100644
--- a/lib/librte_eal/common/include/rte_pci.h
+++ b/lib/librte_eal/common/include/rte_pci.h
@@ -248,6 +248,8 @@ TAILQ_HEAD(mapped_pci_res_list, mapped_pci_resource);
 do {                                                               \
 	unsigned long val;                                      \
 	char *end;                                              \
+	if (*in == '\0')                                        \
+		return -EINVAL;                                 \
 	errno = 0;                                              \
 	val = strtoul((in), &end, 16);                          \
 	if (errno != 0 || end[0] != (dlm) || val > (lim))       \
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.187674722 +0000
+++ 0003-pci-fix-parsing-of-address-without-function-number.patch	2018-11-19 12:15:18.071611433 +0000
@@ -1,8 +1,10 @@
-From 31f19a9beb8d88b67be6e469404081eb834d199c Mon Sep 17 00:00:00 2001
+From dbff7219743df71f5a68bbf53fc63b3baf0c282f Mon Sep 17 00:00:00 2001
 From: Thomas Monjalon <thomas@monjalon.net>
 Date: Mon, 12 Nov 2018 00:58:56 +0100
 Subject: [PATCH] pci: fix parsing of address without function number
 
+[ upstream commit 31f19a9beb8d88b67be6e469404081eb834d199c ]
+
 If the last part of the PCI address (function number) is missing,
 the parsing was successful, assuming function 0.
 The call to strtoul is not returning an error in such a case,
@@ -13,30 +15,27 @@
 	- GET_BLACKLIST_FIELD
 
 Fixes: af75078fece3 ("first public release")
-Cc: stable@dpdk.org
 
 Reported-by: Wisam Jaddo <wisamm@mellanox.com>
 Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
 Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
 ---
- lib/librte_pci/rte_pci.c | 4 ++++
- 1 file changed, 4 insertions(+)
+ lib/librte_eal/common/include/rte_pci.h | 2 ++
+ 1 file changed, 2 insertions(+)
 
-diff --git a/lib/librte_pci/rte_pci.c b/lib/librte_pci/rte_pci.c
-index 530738dbd..f400178bb 100644
---- a/lib/librte_pci/rte_pci.c
-+++ b/lib/librte_pci/rte_pci.c
-@@ -30,6 +30,10 @@ get_u8_pciaddr_field(const char *in, void *_u8, char dlm)
- 	uint8_t *u8 = _u8;
- 	char *end;
- 
-+	/* empty string is an error though strtoul() returns 0 */
-+	if (*in == '\0')
-+		return NULL;
-+
- 	errno = 0;
- 	val = strtoul(in, &end, 16);
- 	if (errno != 0 || end[0] != dlm || val > UINT8_MAX) {
+diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h
+index 9ce884727..10fa85640 100644
+--- a/lib/librte_eal/common/include/rte_pci.h
++++ b/lib/librte_eal/common/include/rte_pci.h
+@@ -248,6 +248,8 @@ TAILQ_HEAD(mapped_pci_res_list, mapped_pci_resource);
+ do {                                                               \
+ 	unsigned long val;                                      \
+ 	char *end;                                              \
++	if (*in == '\0')                                        \
++		return -EINVAL;                                 \
+ 	errno = 0;                                              \
+ 	val = strtoul((in), &end, 16);                          \
+ 	if (errno != 0 || end[0] != (dlm) || val > (lim))       \
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/e1000/base: fix uninitialized variable' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'eal: fix build' " Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'pci: fix parsing of address without function number' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/mlx5: fix build on PPC64' " Luca Boccassi
                               ` (17 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Yunjian Wang; +Cc: Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 7138018d1ba8c3365b47303e424b6e9ca46a2677 Mon Sep 17 00:00:00 2001
From: Yunjian Wang <wangyunjian@huawei.com>
Date: Tue, 6 Nov 2018 15:57:01 +0800
Subject: [PATCH] net/e1000/base: fix uninitialized variable

[ upstream commit ba46f5e60f03fdc357e5fcbc370eb2812c3120ff ]

This patch fixes the variable 'phy_word' may be used uninitialized.

Fixes: 5b6439cf03a4 ("e1000/base: support different EEARBC for i210")

Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/e1000/base/e1000_i210.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/e1000/base/e1000_i210.c b/drivers/net/e1000/base/e1000_i210.c
index 277331c42..c2abb43fb 100644
--- a/drivers/net/e1000/base/e1000_i210.c
+++ b/drivers/net/e1000/base/e1000_i210.c
@@ -941,6 +941,7 @@ STATIC s32 e1000_pll_workaround_i210(struct e1000_hw *hw)
 	if (ret_val != E1000_SUCCESS)
 		nvm_word = E1000_INVM_DEFAULT_AL;
 	tmp_nvm = nvm_word | E1000_INVM_PLL_WO_VAL;
+	phy_word = E1000_PHY_PLL_UNCONF;
 	for (i = 0; i < E1000_MAX_PLL_TRIES; i++) {
 		/* check current state directly from internal PHY */
 		e1000_read_phy_reg_gs40g(hw, (E1000_PHY_PLL_FREQ_PAGE |
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.204862732 +0000
+++ 0004-net-e1000-base-fix-uninitialized-variable.patch	2018-11-19 12:15:18.071611433 +0000
@@ -1,12 +1,13 @@
-From ba46f5e60f03fdc357e5fcbc370eb2812c3120ff Mon Sep 17 00:00:00 2001
+From 7138018d1ba8c3365b47303e424b6e9ca46a2677 Mon Sep 17 00:00:00 2001
 From: Yunjian Wang <wangyunjian@huawei.com>
 Date: Tue, 6 Nov 2018 15:57:01 +0800
 Subject: [PATCH] net/e1000/base: fix uninitialized variable
 
+[ upstream commit ba46f5e60f03fdc357e5fcbc370eb2812c3120ff ]
+
 This patch fixes the variable 'phy_word' may be used uninitialized.
 
 Fixes: 5b6439cf03a4 ("e1000/base: support different EEARBC for i210")
-Cc: stable@dpdk.org
 
 Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/mlx5: fix build on PPC64' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (2 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/e1000/base: fix uninitialized variable' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/thunderx: fix Tx desc corruption in scatter-gather mode' " Luca Boccassi
                               ` (16 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Christian Ehrhardt, Adrien Mazarguil, David Wilder, Chao Zhu,
	dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From ea27760a2ca7bb94d54368ec1540dd88b47bbbdd Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Wed, 7 Nov 2018 17:00:28 +0100
Subject: [PATCH] net/mlx5: fix build on PPC64

[ upstream commit 725f5dd0bfb50192a2d2341d4cc69084c2c4e03d ]

The AltiVec header file breaks boolean type:

error: incompatible types when initializing type
'__vector _bool int' {aka '_vector(4) __bool int'} using type 'int'

If __APPLE_ALTIVEC__ is defined, then bool type is redefined
and conflicts with stdbool.h.

There is no good solution to fix it for the whole project without
breaking something else, so a workaround is inserted in mlx5 PMD.
This workaround is not compatible with C++ but there is no C++ in DPDK.

Suggested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Suggested-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Tested-by: David Wilder <dwilder@us.ibm.com>
Acked-by: Chao Zhu <chaozhu@linux.vnet.ibm.com>
---
 drivers/net/mlx5/mlx5_utils.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.h
index f126979b7..7412103d0 100644
--- a/drivers/net/mlx5/mlx5_utils.h
+++ b/drivers/net/mlx5/mlx5_utils.h
@@ -43,6 +43,16 @@
 
 #include "mlx5_defs.h"
 
+/*
+ * Compilation workaround for PPC64 when AltiVec is fully enabled, e.g. std=c11.
+ * Otherwise there would be a type conflict between stdbool and altivec.
+ */
+#if defined(__PPC64__) && !defined(__APPLE_ALTIVEC__)
+#undef bool
+/* redefine as in stdbool.h */
+#define bool _Bool
+#endif
+
 /* Bit-field manipulation. */
 #define BITFIELD_DECLARE(bf, type, size) \
 	type bf[(((size_t)(size) / (sizeof(type) * CHAR_BIT)) + \
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.222998195 +0000
+++ 0005-net-mlx5-fix-build-on-PPC64.patch	2018-11-19 12:15:18.071611433 +0000
@@ -1,8 +1,10 @@
-From 725f5dd0bfb50192a2d2341d4cc69084c2c4e03d Mon Sep 17 00:00:00 2001
+From ea27760a2ca7bb94d54368ec1540dd88b47bbbdd Mon Sep 17 00:00:00 2001
 From: Thomas Monjalon <thomas@monjalon.net>
 Date: Wed, 7 Nov 2018 17:00:28 +0100
 Subject: [PATCH] net/mlx5: fix build on PPC64
 
+[ upstream commit 725f5dd0bfb50192a2d2341d4cc69084c2c4e03d ]
+
 The AltiVec header file breaks boolean type:
 
 error: incompatible types when initializing type
@@ -25,10 +27,10 @@
  1 file changed, 10 insertions(+)
 
 diff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.h
-index 886f60e61..97092c749 100644
+index f126979b7..7412103d0 100644
 --- a/drivers/net/mlx5/mlx5_utils.h
 +++ b/drivers/net/mlx5/mlx5_utils.h
-@@ -15,6 +15,16 @@
+@@ -43,6 +43,16 @@
  
  #include "mlx5_defs.h"
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/thunderx: fix Tx desc corruption in scatter-gather mode' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (3 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/mlx5: fix build on PPC64' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/virtio-user: fix typo in error message' " Luca Boccassi
                               ` (15 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Subrahmanyam Nilla; +Cc: Nithin Dabilpuram, Jerin Jacob, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 83fa62cad33d18bef3ba62af0892e5a5aa015295 Mon Sep 17 00:00:00 2001
From: Subrahmanyam Nilla <snilla@caviumnetworks.com>
Date: Fri, 9 Nov 2018 05:50:55 +0000
Subject: [PATCH] net/thunderx: fix Tx desc corruption in scatter-gather mode

[ upstream commit 823ebfc219f3fa53361afc7ce663f72464bfb3ff ]

For performance reasons, word1 of send_hdr_s
sub descriptor was not cleared assuming it is always
having default value of zero since it comes from fixed
offsets of SQ buffer.
This is causing issues in case of SG mode because,
the size of send command might change and hence the word1
of send_hdr_s is not always at fixed offsets of the SQ buffer
and hence not having default value of zero.

This fixes the issue by clearing the word1 in case of SG mode
for every packet.

Fixes: 1c421f18e095 ("net/thunderx: add single and multi-segment Tx")

Signed-off-by: Subrahmanyam Nilla <snilla@caviumnetworks.com>
Signed-off-by: Nithin Dabilpuram <nithin.dabilpuram@caviumnetworks.com>
Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 drivers/net/thunderx/nicvf_rxtx.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/thunderx/nicvf_rxtx.c b/drivers/net/thunderx/nicvf_rxtx.c
index 4b9b2932c..ac30552b3 100644
--- a/drivers/net/thunderx/nicvf_rxtx.c
+++ b/drivers/net/thunderx/nicvf_rxtx.c
@@ -89,6 +89,14 @@ fill_sq_desc_header(union sq_entry_t *entry, struct rte_mbuf *pkt)
 	entry->buff[0] = sqe.buff[0];
 }
 
+static inline void __hot
+fill_sq_desc_header_zero_w1(union sq_entry_t *entry,
+				struct rte_mbuf *pkt)
+{
+	fill_sq_desc_header(entry, pkt);
+	entry->buff[1] = 0ULL;
+}
+
 void __hot
 nicvf_single_pool_free_xmited_buffers(struct nicvf_txq *sq)
 {
@@ -232,7 +240,7 @@ nicvf_xmit_pkts_multiseg(void *tx_queue, struct rte_mbuf **tx_pkts,
 		used_bufs += nb_segs;
 
 		txbuffs[tail] = NULL;
-		fill_sq_desc_header(desc_ptr + tail, pkt);
+		fill_sq_desc_header_zero_w1(desc_ptr + tail, pkt);
 		tail = (tail + 1) & qlen_mask;
 
 		txbuffs[tail] = pkt;
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.240623528 +0000
+++ 0006-net-thunderx-fix-Tx-desc-corruption-in-scatter-gathe.patch	2018-11-19 12:15:18.075611433 +0000
@@ -1,8 +1,10 @@
-From 823ebfc219f3fa53361afc7ce663f72464bfb3ff Mon Sep 17 00:00:00 2001
+From 83fa62cad33d18bef3ba62af0892e5a5aa015295 Mon Sep 17 00:00:00 2001
 From: Subrahmanyam Nilla <snilla@caviumnetworks.com>
 Date: Fri, 9 Nov 2018 05:50:55 +0000
 Subject: [PATCH] net/thunderx: fix Tx desc corruption in scatter-gather mode
 
+[ upstream commit 823ebfc219f3fa53361afc7ce663f72464bfb3ff ]
+
 For performance reasons, word1 of send_hdr_s
 sub descriptor was not cleared assuming it is always
 having default value of zero since it comes from fixed
@@ -16,7 +18,6 @@
 for every packet.
 
 Fixes: 1c421f18e095 ("net/thunderx: add single and multi-segment Tx")
-Cc: stable@dpdk.org
 
 Signed-off-by: Subrahmanyam Nilla <snilla@caviumnetworks.com>
 Signed-off-by: Nithin Dabilpuram <nithin.dabilpuram@caviumnetworks.com>
@@ -26,10 +27,10 @@
  1 file changed, 9 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/thunderx/nicvf_rxtx.c b/drivers/net/thunderx/nicvf_rxtx.c
-index 247c35685..1c4287431 100644
+index 4b9b2932c..ac30552b3 100644
 --- a/drivers/net/thunderx/nicvf_rxtx.c
 +++ b/drivers/net/thunderx/nicvf_rxtx.c
-@@ -61,6 +61,14 @@ fill_sq_desc_header(union sq_entry_t *entry, struct rte_mbuf *pkt)
+@@ -89,6 +89,14 @@ fill_sq_desc_header(union sq_entry_t *entry, struct rte_mbuf *pkt)
  	entry->buff[0] = sqe.buff[0];
  }
  
@@ -44,7 +45,7 @@
  void __hot
  nicvf_single_pool_free_xmited_buffers(struct nicvf_txq *sq)
  {
-@@ -204,7 +212,7 @@ nicvf_xmit_pkts_multiseg(void *tx_queue, struct rte_mbuf **tx_pkts,
+@@ -232,7 +240,7 @@ nicvf_xmit_pkts_multiseg(void *tx_queue, struct rte_mbuf **tx_pkts,
  		used_bufs += nb_segs;
  
  		txbuffs[tail] = NULL;

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/virtio-user: fix typo in error message' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (4 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/thunderx: fix Tx desc corruption in scatter-gather mode' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/virtio: fix unchecked return value' " Luca Boccassi
                               ` (14 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Tiwei Bie; +Cc: Jens Freimann, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 479457ba643c5f19ca6fc7e78ac9cbeca865a599 Mon Sep 17 00:00:00 2001
From: Tiwei Bie <tiwei.bie@intel.com>
Date: Tue, 6 Nov 2018 14:40:22 +0800
Subject: [PATCH] net/virtio-user: fix typo in error message

[ upstream commit 2dac0df47c5666fe53513a9320cc95f1c5e72d4e ]

The param we are checking is VIRTIO_USER_ARG_PATH, instead
of VIRTIO_USER_ARG_QUEUE_SIZE.

Fixes: ce2eabdd43ec ("net/virtio-user: add virtual device")

Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Jens Freimann <jfreimann@redhat.com>
---
 drivers/net/virtio/virtio_user_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c
index b1bd6234c..caa9be5a1 100644
--- a/drivers/net/virtio/virtio_user_ethdev.c
+++ b/drivers/net/virtio/virtio_user_ethdev.c
@@ -369,7 +369,7 @@ virtio_user_pmd_probe(const char *name, const char *params)
 		}
 	} else {
 		PMD_INIT_LOG(ERR, "arg %s is mandatory for virtio_user\n",
-			  VIRTIO_USER_ARG_QUEUE_SIZE);
+			     VIRTIO_USER_ARG_PATH);
 		goto end;
 	}
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.258403609 +0000
+++ 0007-net-virtio-user-fix-typo-in-error-message.patch	2018-11-19 12:15:18.075611433 +0000
@@ -1,13 +1,14 @@
-From 2dac0df47c5666fe53513a9320cc95f1c5e72d4e Mon Sep 17 00:00:00 2001
+From 479457ba643c5f19ca6fc7e78ac9cbeca865a599 Mon Sep 17 00:00:00 2001
 From: Tiwei Bie <tiwei.bie@intel.com>
 Date: Tue, 6 Nov 2018 14:40:22 +0800
 Subject: [PATCH] net/virtio-user: fix typo in error message
 
+[ upstream commit 2dac0df47c5666fe53513a9320cc95f1c5e72d4e ]
+
 The param we are checking is VIRTIO_USER_ARG_PATH, instead
 of VIRTIO_USER_ARG_QUEUE_SIZE.
 
 Fixes: ce2eabdd43ec ("net/virtio-user: add virtual device")
-Cc: stable@dpdk.org
 
 Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
 Reviewed-by: Jens Freimann <jfreimann@redhat.com>
@@ -16,13 +17,13 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c
-index 61b7c0a38..f8791391a 100644
+index b1bd6234c..caa9be5a1 100644
 --- a/drivers/net/virtio/virtio_user_ethdev.c
 +++ b/drivers/net/virtio/virtio_user_ethdev.c
-@@ -484,7 +484,7 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)
+@@ -369,7 +369,7 @@ virtio_user_pmd_probe(const char *name, const char *params)
  		}
  	} else {
- 		PMD_INIT_LOG(ERR, "arg %s is mandatory for virtio_user",
+ 		PMD_INIT_LOG(ERR, "arg %s is mandatory for virtio_user\n",
 -			  VIRTIO_USER_ARG_QUEUE_SIZE);
 +			     VIRTIO_USER_ARG_PATH);
  		goto end;

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/virtio: fix unchecked return value' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (5 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/virtio-user: fix typo in error message' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:48               ` Tiwei Bie
  2018-11-19 12:25             ` [dpdk-stable] patch 'vhost: remove unneeded null pointer check' " Luca Boccassi
                               ` (13 subsequent siblings)
  20 siblings, 1 reply; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Tiwei Bie; +Cc: Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 87b9d321789f9bdaa2cf11df2f7377bc1145e7fa Mon Sep 17 00:00:00 2001
From: Tiwei Bie <tiwei.bie@intel.com>
Date: Wed, 7 Nov 2018 17:01:01 +0800
Subject: [PATCH] net/virtio: fix unchecked return value

[ upstream commit ecfae1510edc1391285aa566a2d31e7eae8fc6d2 ]

Coverity issue: 302861
Fixes: 6ba1f63b5ab0 ("virtio: support specification 1.0")

Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 drivers/net/virtio/virtio_pci.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/net/virtio/virtio_pci.c b/drivers/net/virtio/virtio_pci.c
index f6d697f38..13ad57dfd 100644
--- a/drivers/net/virtio/virtio_pci.c
+++ b/drivers/net/virtio/virtio_pci.c
@@ -690,9 +690,15 @@ virtio_read_caps(struct rte_pci_device *dev, struct virtio_hw *hw)
 			hw->common_cfg = get_cfg_addr(dev, &cap);
 			break;
 		case VIRTIO_PCI_CAP_NOTIFY_CFG:
-			rte_eal_pci_read_config(dev, &hw->notify_off_multiplier,
-						4, pos + sizeof(cap));
-			hw->notify_base = get_cfg_addr(dev, &cap);
+			ret = rte_eal_pci_read_config(dev,
+					&hw->notify_off_multiplier,
+					4, pos + sizeof(cap));
+			if (ret != 4)
+				PMD_INIT_LOG(DEBUG,
+					"failed to read notify_off_multiplier, ret %d",
+					ret);
+			else
+				hw->notify_base = get_cfg_addr(dev, &cap);
 			break;
 		case VIRTIO_PCI_CAP_DEVICE_CFG:
 			hw->dev_cfg = get_cfg_addr(dev, &cap);
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.275847477 +0000
+++ 0008-net-virtio-fix-unchecked-return-value.patch	2018-11-19 12:15:18.075611433 +0000
@@ -1,31 +1,33 @@
-From ecfae1510edc1391285aa566a2d31e7eae8fc6d2 Mon Sep 17 00:00:00 2001
+From 87b9d321789f9bdaa2cf11df2f7377bc1145e7fa Mon Sep 17 00:00:00 2001
 From: Tiwei Bie <tiwei.bie@intel.com>
 Date: Wed, 7 Nov 2018 17:01:01 +0800
 Subject: [PATCH] net/virtio: fix unchecked return value
 
+[ upstream commit ecfae1510edc1391285aa566a2d31e7eae8fc6d2 ]
+
 Coverity issue: 302861
 Fixes: 6ba1f63b5ab0 ("virtio: support specification 1.0")
-Cc: stable@dpdk.org
 
 Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
 ---
- drivers/net/virtio/virtio_pci.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
+ drivers/net/virtio/virtio_pci.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/net/virtio/virtio_pci.c b/drivers/net/virtio/virtio_pci.c
-index 21110cd69..c8883c32e 100644
+index f6d697f38..13ad57dfd 100644
 --- a/drivers/net/virtio/virtio_pci.c
 +++ b/drivers/net/virtio/virtio_pci.c
-@@ -614,9 +614,15 @@ virtio_read_caps(struct rte_pci_device *dev, struct virtio_hw *hw)
+@@ -690,9 +690,15 @@ virtio_read_caps(struct rte_pci_device *dev, struct virtio_hw *hw)
  			hw->common_cfg = get_cfg_addr(dev, &cap);
  			break;
  		case VIRTIO_PCI_CAP_NOTIFY_CFG:
--			rte_pci_read_config(dev, &hw->notify_off_multiplier,
-+			ret = rte_pci_read_config(dev,
-+					&hw->notify_off_multiplier,
- 					4, pos + sizeof(cap));
+-			rte_eal_pci_read_config(dev, &hw->notify_off_multiplier,
+-						4, pos + sizeof(cap));
 -			hw->notify_base = get_cfg_addr(dev, &cap);
++			ret = rte_eal_pci_read_config(dev,
++					&hw->notify_off_multiplier,
++					4, pos + sizeof(cap));
 +			if (ret != 4)
 +				PMD_INIT_LOG(DEBUG,
 +					"failed to read notify_off_multiplier, ret %d",

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'vhost: remove unneeded null pointer check' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (6 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/virtio: fix unchecked return value' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/bnx2x: fix VF link state update' " Luca Boccassi
                               ` (12 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Tiwei Bie; +Cc: Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 39788a8c71b103ec010838f7605e9fb1f7807bb5 Mon Sep 17 00:00:00 2001
From: Tiwei Bie <tiwei.bie@intel.com>
Date: Wed, 7 Nov 2018 17:01:02 +0800
Subject: [PATCH] vhost: remove unneeded null pointer check

[ upstream commit 0541588a44bff07e4aae4c9cde8586326955c378 ]

The caller will guarantee that msg won't be null. Remove
the unneeded null pointer check which caused a Coverity
warning.

Coverity issue: 323484
Fixes: 8f972312b8f4 ("vhost: support vhost-user")

Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 lib/librte_vhost/vhost_user.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index 814bafd73..00872c868 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -956,7 +956,7 @@ read_vhost_message(int sockfd, struct VhostUserMsg *msg)
 	if (ret <= 0)
 		return ret;
 
-	if (msg && msg->size) {
+	if (msg->size) {
 		if (msg->size > sizeof(msg->payload)) {
 			RTE_LOG(ERR, VHOST_CONFIG,
 				"invalid msg size: %d\n", msg->size);
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.293676210 +0000
+++ 0009-vhost-remove-unneeded-null-pointer-check.patch	2018-11-19 12:15:18.079611433 +0000
@@ -1,15 +1,16 @@
-From 0541588a44bff07e4aae4c9cde8586326955c378 Mon Sep 17 00:00:00 2001
+From 39788a8c71b103ec010838f7605e9fb1f7807bb5 Mon Sep 17 00:00:00 2001
 From: Tiwei Bie <tiwei.bie@intel.com>
 Date: Wed, 7 Nov 2018 17:01:02 +0800
 Subject: [PATCH] vhost: remove unneeded null pointer check
 
+[ upstream commit 0541588a44bff07e4aae4c9cde8586326955c378 ]
+
 The caller will guarantee that msg won't be null. Remove
 the unneeded null pointer check which caused a Coverity
 warning.
 
 Coverity issue: 323484
 Fixes: 8f972312b8f4 ("vhost: support vhost-user")
-Cc: stable@dpdk.org
 
 Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
@@ -18,10 +19,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
-index cc154f312..3ea64eba6 100644
+index 814bafd73..00872c868 100644
 --- a/lib/librte_vhost/vhost_user.c
 +++ b/lib/librte_vhost/vhost_user.c
-@@ -1732,7 +1732,7 @@ read_vhost_message(int sockfd, struct VhostUserMsg *msg)
+@@ -956,7 +956,7 @@ read_vhost_message(int sockfd, struct VhostUserMsg *msg)
  	if (ret <= 0)
  		return ret;
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bnx2x: fix VF link state update' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (7 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'vhost: remove unneeded null pointer check' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/bonding: fix crash when stopping mode 4 port' " Luca Boccassi
                               ` (11 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Rasesh Mody; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From f86204d63a27c3d6ddc8b1d63f21fb359d583ed0 Mon Sep 17 00:00:00 2001
From: Rasesh Mody <rasesh.mody@cavium.com>
Date: Thu, 8 Nov 2018 21:19:30 +0000
Subject: [PATCH] net/bnx2x: fix VF link state update

[ upstream commit 39ae74caa0d1158df15ea1e2f8e893eee1a2189d ]

In general the VF driver should not access the chip. For VF link status
update, VF driver should not use HW lock, use bnx2x_link_report_locked()
instead.
Add few prints for releasing previously held HW locks.

Fixes: a9b58b15ed51 ("net/bnx2x: fix to add PHY lock")

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/bnx2x/bnx2x.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 92abdbbd4..7cf9d1c4e 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -202,8 +202,12 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	uint32_t hw_lock_control_reg;
 	int cnt;
 
+#ifndef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
 	if (resource)
 		PMD_INIT_FUNC_TRACE(sc);
+#else
+	PMD_INIT_FUNC_TRACE(sc);
+#endif
 
 	/* validate the resource is within range */
 	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
@@ -251,8 +255,12 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
 	int func = SC_FUNC(sc);
 	uint32_t hw_lock_control_reg;
 
+#ifndef RTE_LIBRTE_BNX2X_DEBUG_PERIODIC
 	if (resource)
 		PMD_INIT_FUNC_TRACE(sc);
+#else
+	PMD_INIT_FUNC_TRACE(sc);
+#endif
 
 	/* validate the resource is within range */
 	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
@@ -7049,7 +7057,7 @@ void bnx2x_link_status_update(struct bnx2x_softc *sc)
 		}
 		bnx2x_link_report(sc);
 	} else {
-		bnx2x_link_report(sc);
+		bnx2x_link_report_locked(sc);
 		bnx2x_stats_handle(sc, STATS_EVENT_LINK_UP);
 	}
 }
@@ -9412,6 +9420,8 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
 	uint32_t fw, hw_lock_reg, hw_lock_val;
 	uint32_t rc = 0;
 
+	PMD_INIT_FUNC_TRACE(sc);
+
 	/*
 	 * Clear HW from errors which may have resulted from an interrupted
 	 * DMAE transaction.
@@ -9419,22 +9429,23 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
 	bnx2x_prev_interrupted_dmae(sc);
 
 	/* Release previously held locks */
-	if (SC_FUNC(sc) <= 5)
-		hw_lock_reg = (MISC_REG_DRIVER_CONTROL_1 + SC_FUNC(sc) * 8);
-	else
-		hw_lock_reg =
-		    (MISC_REG_DRIVER_CONTROL_7 + (SC_FUNC(sc) - 6) * 8);
+	hw_lock_reg = (SC_FUNC(sc) <= 5) ?
+			(MISC_REG_DRIVER_CONTROL_1 + SC_FUNC(sc) * 8) :
+			(MISC_REG_DRIVER_CONTROL_7 + (SC_FUNC(sc) - 6) * 8);
 
 	hw_lock_val = (REG_RD(sc, hw_lock_reg));
 	if (hw_lock_val) {
 		if (hw_lock_val & HW_LOCK_RESOURCE_NVRAM) {
+			PMD_DRV_LOG(DEBUG, sc, "Releasing previously held NVRAM lock\n");
 			REG_WR(sc, MCP_REG_MCPR_NVM_SW_ARB,
 			       (MCPR_NVM_SW_ARB_ARB_REQ_CLR1 << SC_PORT(sc)));
 		}
+		PMD_DRV_LOG(DEBUG, sc, "Releasing previously held HW lock\n");
 		REG_WR(sc, hw_lock_reg, 0xffffffff);
 	}
 
 	if (MCPR_ACCESS_LOCK_LOCK & REG_RD(sc, MCP_REG_MCPR_ACCESS_LOCK)) {
+		PMD_DRV_LOG(DEBUG, sc, "Releasing previously held ALR\n");
 		REG_WR(sc, MCP_REG_MCPR_ACCESS_LOCK, 0);
 	}
 
@@ -9764,6 +9775,8 @@ int bnx2x_attach(struct bnx2x_softc *sc)
 		sc->fw_seq =
 		    (SHMEM_RD(sc, func_mb[SC_FW_MB_IDX(sc)].drv_mb_header) &
 		     DRV_MSG_SEQ_NUMBER_MASK);
+		PMD_DRV_LOG(DEBUG, sc, "prev unload fw_seq 0x%04x",
+			    sc->fw_seq);
 		bnx2x_prev_unload(sc);
 	}
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.312223623 +0000
+++ 0010-net-bnx2x-fix-VF-link-state-update.patch	2018-11-19 12:15:18.095611432 +0000
@@ -1,15 +1,16 @@
-From 39ae74caa0d1158df15ea1e2f8e893eee1a2189d Mon Sep 17 00:00:00 2001
+From f86204d63a27c3d6ddc8b1d63f21fb359d583ed0 Mon Sep 17 00:00:00 2001
 From: Rasesh Mody <rasesh.mody@cavium.com>
 Date: Thu, 8 Nov 2018 21:19:30 +0000
 Subject: [PATCH] net/bnx2x: fix VF link state update
 
+[ upstream commit 39ae74caa0d1158df15ea1e2f8e893eee1a2189d ]
+
 In general the VF driver should not access the chip. For VF link status
 update, VF driver should not use HW lock, use bnx2x_link_report_locked()
 instead.
 Add few prints for releasing previously held HW locks.
 
 Fixes: a9b58b15ed51 ("net/bnx2x: fix to add PHY lock")
-Cc: stable@dpdk.org
 
 Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
 ---
@@ -17,10 +18,10 @@
  1 file changed, 19 insertions(+), 6 deletions(-)
 
 diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
-index 279759366..a6d2687a2 100644
+index 92abdbbd4..7cf9d1c4e 100644
 --- a/drivers/net/bnx2x/bnx2x.c
 +++ b/drivers/net/bnx2x/bnx2x.c
-@@ -199,8 +199,12 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -202,8 +202,12 @@ static int bnx2x_acquire_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	uint32_t hw_lock_control_reg;
  	int cnt;
  
@@ -33,7 +34,7 @@
  
  	/* validate the resource is within range */
  	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
-@@ -248,8 +252,12 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
+@@ -251,8 +255,12 @@ static int bnx2x_release_hw_lock(struct bnx2x_softc *sc, uint32_t resource)
  	int func = SC_FUNC(sc);
  	uint32_t hw_lock_control_reg;
  
@@ -46,7 +47,7 @@
  
  	/* validate the resource is within range */
  	if (resource > HW_LOCK_MAX_RESOURCE_VALUE) {
-@@ -7041,7 +7049,7 @@ void bnx2x_link_status_update(struct bnx2x_softc *sc)
+@@ -7049,7 +7057,7 @@ void bnx2x_link_status_update(struct bnx2x_softc *sc)
  		}
  		bnx2x_link_report(sc);
  	} else {
@@ -55,7 +56,7 @@
  		bnx2x_stats_handle(sc, STATS_EVENT_LINK_UP);
  	}
  }
-@@ -9388,6 +9396,8 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
+@@ -9412,6 +9420,8 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
  	uint32_t fw, hw_lock_reg, hw_lock_val;
  	uint32_t rc = 0;
  
@@ -64,7 +65,7 @@
  	/*
  	 * Clear HW from errors which may have resulted from an interrupted
  	 * DMAE transaction.
-@@ -9395,22 +9405,23 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
+@@ -9419,22 +9429,23 @@ static int bnx2x_prev_unload(struct bnx2x_softc *sc)
  	bnx2x_prev_interrupted_dmae(sc);
  
  	/* Release previously held locks */
@@ -93,7 +94,7 @@
  		REG_WR(sc, MCP_REG_MCPR_ACCESS_LOCK, 0);
  	}
  
-@@ -9740,6 +9751,8 @@ int bnx2x_attach(struct bnx2x_softc *sc)
+@@ -9764,6 +9775,8 @@ int bnx2x_attach(struct bnx2x_softc *sc)
  		sc->fw_seq =
  		    (SHMEM_RD(sc, func_mb[SC_FW_MB_IDX(sc)].drv_mb_header) &
  		     DRV_MSG_SEQ_NUMBER_MASK);

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/bonding: fix crash when stopping mode 4 port' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (8 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/bnx2x: fix VF link state update' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'app/testpmd: fix L4 length for UDP checksum' " Luca Boccassi
                               ` (10 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Radu Nicolau; +Cc: Chas Williams, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 9d89b51cf490e720c58538f47aa9beb356fc009b Mon Sep 17 00:00:00 2001
From: Radu Nicolau <radu.nicolau@intel.com>
Date: Thu, 8 Nov 2018 15:26:42 +0000
Subject: [PATCH] net/bonding: fix crash when stopping mode 4 port

[ upstream commit 0911d4ec01839c9149a0df5758d00d9d57a47cea ]

When stopping a bonded port all slaves are deactivated. Attempting
to deactivate a slave that was never activated will result in a segfault
when mode 4 is used.

Fixes: 7486331308f6 ("net/bonding: stop and deactivate slaves on stop")

Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Chas Williams <chas3@att.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index ebde93259..103f55856 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -1674,9 +1674,14 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
 
 	internals->link_status_polling_enabled = 0;
 	for (i = 0; i < internals->slave_count; i++) {
-		internals->slaves[i].last_link_status = 0;
-		rte_eth_dev_stop(internals->slaves[i].port_id);
-		deactivate_slave(eth_dev, internals->slaves[i].port_id);
+		uint16_t slave_id = internals->slaves[i].port_id;
+		if (find_slave_by_id(internals->active_slaves,
+				internals->active_slave_count, slave_id) !=
+						internals->active_slave_count) {
+			internals->slaves[i].last_link_status = 0;
+			rte_eth_dev_stop(slave_id);
+			deactivate_slave(eth_dev, slave_id);
+		}
 	}
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.338022695 +0000
+++ 0011-net-bonding-fix-crash-when-stopping-mode-4-port.patch	2018-11-19 12:15:18.099611432 +0000
@@ -1,14 +1,15 @@
-From 0911d4ec01839c9149a0df5758d00d9d57a47cea Mon Sep 17 00:00:00 2001
+From 9d89b51cf490e720c58538f47aa9beb356fc009b Mon Sep 17 00:00:00 2001
 From: Radu Nicolau <radu.nicolau@intel.com>
 Date: Thu, 8 Nov 2018 15:26:42 +0000
 Subject: [PATCH] net/bonding: fix crash when stopping mode 4 port
 
+[ upstream commit 0911d4ec01839c9149a0df5758d00d9d57a47cea ]
+
 When stopping a bonded port all slaves are deactivated. Attempting
 to deactivate a slave that was never activated will result in a segfault
 when mode 4 is used.
 
 Fixes: 7486331308f6 ("net/bonding: stop and deactivate slaves on stop")
-Cc: stable@dpdk.org
 
 Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
 Acked-by: Chas Williams <chas3@att.com>
@@ -17,10 +18,10 @@
  1 file changed, 8 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
-index 1a6d8e4df..2661620ab 100644
+index ebde93259..103f55856 100644
 --- a/drivers/net/bonding/rte_eth_bond_pmd.c
 +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
-@@ -2181,9 +2181,14 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
+@@ -1674,9 +1674,14 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
  
  	internals->link_status_polling_enabled = 0;
  	for (i = 0; i < internals->slave_count; i++) {

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'app/testpmd: fix L4 length for UDP checksum' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (9 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/bonding: fix crash when stopping mode 4 port' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'ethdev: fix invalid configuration after failure' " Luca Boccassi
                               ` (9 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Raslan Darawsheh; +Cc: Ophir Munk, Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From c677fe3abc31668c8069f2d7f4259265c4afbe84 Mon Sep 17 00:00:00 2001
From: Raslan Darawsheh <rasland@mellanox.com>
Date: Sun, 11 Nov 2018 15:31:37 +0000
Subject: [PATCH] app/testpmd: fix L4 length for UDP checksum

[ upstream commit 2b5651c026d8d1a687a8f7a210b1b8f13f906911 ]

testpmd only sets the L4 len in case of TCP packets.
some PMD's like tap rely on mbuf meta data to calculate csum

This will set the L4 len for UDP packets same as TCP

Fixes: 160c3dc9458c ("app/testpmd: introduce IP parsing functions in csum fwd engine")

Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 app/test-pmd/csumonly.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index 57e6ae276..3bf07a42e 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -142,7 +142,9 @@ parse_ipv4(struct ipv4_hdr *ipv4_hdr, struct testpmd_offload_info *info)
 	if (info->l4_proto == IPPROTO_TCP) {
 		tcp_hdr = (struct tcp_hdr *)((char *)ipv4_hdr + info->l3_len);
 		info->l4_len = (tcp_hdr->data_off & 0xf0) >> 2;
-	} else
+	} else if (info->l4_proto == IPPROTO_UDP)
+		info->l4_len = sizeof(struct udp_hdr);
+	else
 		info->l4_len = 0;
 }
 
@@ -159,7 +161,9 @@ parse_ipv6(struct ipv6_hdr *ipv6_hdr, struct testpmd_offload_info *info)
 	if (info->l4_proto == IPPROTO_TCP) {
 		tcp_hdr = (struct tcp_hdr *)((char *)ipv6_hdr + info->l3_len);
 		info->l4_len = (tcp_hdr->data_off & 0xf0) >> 2;
-	} else
+	} else if (info->l4_proto == IPPROTO_UDP)
+		info->l4_len = sizeof(struct udp_hdr);
+	else
 		info->l4_len = 0;
 }
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.358096815 +0000
+++ 0012-app-testpmd-fix-L4-length-for-UDP-checksum.patch	2018-11-19 12:15:18.099611432 +0000
@@ -1,15 +1,16 @@
-From 2b5651c026d8d1a687a8f7a210b1b8f13f906911 Mon Sep 17 00:00:00 2001
+From c677fe3abc31668c8069f2d7f4259265c4afbe84 Mon Sep 17 00:00:00 2001
 From: Raslan Darawsheh <rasland@mellanox.com>
 Date: Sun, 11 Nov 2018 15:31:37 +0000
 Subject: [PATCH] app/testpmd: fix L4 length for UDP checksum
 
+[ upstream commit 2b5651c026d8d1a687a8f7a210b1b8f13f906911 ]
+
 testpmd only sets the L4 len in case of TCP packets.
 some PMD's like tap rely on mbuf meta data to calculate csum
 
 This will set the L4 len for UDP packets same as TCP
 
 Fixes: 160c3dc9458c ("app/testpmd: introduce IP parsing functions in csum fwd engine")
-CC: stable@dpdk.org
 
 Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
 Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
@@ -19,10 +20,10 @@
  1 file changed, 6 insertions(+), 2 deletions(-)
 
 diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
-index dce4b9be7..ffeee2051 100644
+index 57e6ae276..3bf07a42e 100644
 --- a/app/test-pmd/csumonly.c
 +++ b/app/test-pmd/csumonly.c
-@@ -111,7 +111,9 @@ parse_ipv4(struct ipv4_hdr *ipv4_hdr, struct testpmd_offload_info *info)
+@@ -142,7 +142,9 @@ parse_ipv4(struct ipv4_hdr *ipv4_hdr, struct testpmd_offload_info *info)
  	if (info->l4_proto == IPPROTO_TCP) {
  		tcp_hdr = (struct tcp_hdr *)((char *)ipv4_hdr + info->l3_len);
  		info->l4_len = (tcp_hdr->data_off & 0xf0) >> 2;
@@ -33,7 +34,7 @@
  		info->l4_len = 0;
  }
  
-@@ -128,7 +130,9 @@ parse_ipv6(struct ipv6_hdr *ipv6_hdr, struct testpmd_offload_info *info)
+@@ -159,7 +161,9 @@ parse_ipv6(struct ipv6_hdr *ipv6_hdr, struct testpmd_offload_info *info)
  	if (info->l4_proto == IPPROTO_TCP) {
  		tcp_hdr = (struct tcp_hdr *)((char *)ipv6_hdr + info->l3_len);
  		info->l4_len = (tcp_hdr->data_off & 0xf0) >> 2;

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'ethdev: fix invalid configuration after failure' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (10 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'app/testpmd: fix L4 length for UDP checksum' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/ixgbevf: fix link state' " Luca Boccassi
                               ` (8 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Wenzhuo Lu; +Cc: Ferruh Yigit, Andrew Rybchenko, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 729e04dd9956bcccd08acf7f97e76b3ec452100f Mon Sep 17 00:00:00 2001
From: Wenzhuo Lu <wenzhuo.lu@intel.com>
Date: Tue, 13 Nov 2018 11:12:36 +0000
Subject: [PATCH] ethdev: fix invalid configuration after failure

[ upstream commit aa28ec5d27b0ead28877081b30ccf0b74a16bbcd ]

The new configuration is stored during the rte_eth_dev_configure() API
but the API may fail. After failure stored configuration will be
invalid since it is not fully applied to the device.

We better roll the configuration back after failure.

Fixes: af75078fece3 ("first public release")

Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
 lib/librte_ether/rte_ethdev.c | 37 ++++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 9b28e95ae..59722e04e 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -795,7 +795,9 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 {
 	struct rte_eth_dev *dev;
 	struct rte_eth_dev_info dev_info;
+	struct rte_eth_conf orig_conf;
 	int diag;
+	int ret;
 
 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
 
@@ -824,6 +826,9 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 		return -EBUSY;
 	}
 
+	/* Store original config, as rollback required on failure */
+	memcpy(&orig_conf, &dev->data->dev_conf, sizeof(dev->data->dev_conf));
+
 	/* Copy the dev_conf parameter into the dev structure */
 	memcpy(&dev->data->dev_conf, dev_conf, sizeof(dev->data->dev_conf));
 
@@ -836,19 +841,22 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 
 	if (nb_rx_q == 0 && nb_tx_q == 0) {
 		RTE_PMD_DEBUG_TRACE("ethdev port_id=%d both rx and tx queue cannot be 0\n", port_id);
-		return -EINVAL;
+		ret = -EINVAL;
+		goto rollback;
 	}
 
 	if (nb_rx_q > dev_info.max_rx_queues) {
 		RTE_PMD_DEBUG_TRACE("ethdev port_id=%d nb_rx_queues=%d > %d\n",
 				port_id, nb_rx_q, dev_info.max_rx_queues);
-		return -EINVAL;
+		ret = -EINVAL;
+		goto rollback;
 	}
 
 	if (nb_tx_q > dev_info.max_tx_queues) {
 		RTE_PMD_DEBUG_TRACE("ethdev port_id=%d nb_tx_queues=%d > %d\n",
 				port_id, nb_tx_q, dev_info.max_tx_queues);
-		return -EINVAL;
+		ret = -EINVAL;
+		goto rollback;
 	}
 
 	/*
@@ -859,7 +867,8 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 		(!(dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC))) {
 			RTE_PMD_DEBUG_TRACE("driver %s does not support lsc\n",
 					dev->data->drv_name);
-			return -EINVAL;
+			ret = -EINVAL;
+			goto rollback;
 	}
 
 	/*
@@ -874,14 +883,16 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 				port_id,
 				(unsigned)dev_conf->rxmode.max_rx_pkt_len,
 				(unsigned)dev_info.max_rx_pktlen);
-			return -EINVAL;
+			ret = -EINVAL;
+			goto rollback;
 		} else if (dev_conf->rxmode.max_rx_pkt_len < ETHER_MIN_LEN) {
 			RTE_PMD_DEBUG_TRACE("ethdev port_id=%d max_rx_pkt_len %u"
 				" < min valid value %u\n",
 				port_id,
 				(unsigned)dev_conf->rxmode.max_rx_pkt_len,
 				(unsigned)ETHER_MIN_LEN);
-			return -EINVAL;
+			ret = -EINVAL;
+			goto rollback;
 		}
 	} else {
 		if (dev_conf->rxmode.max_rx_pkt_len < ETHER_MIN_LEN ||
@@ -898,7 +909,8 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 	if (diag != 0) {
 		RTE_PMD_DEBUG_TRACE("port%d rte_eth_dev_rx_queue_config = %d\n",
 				port_id, diag);
-		return diag;
+		ret = diag;
+		goto rollback;
 	}
 
 	diag = rte_eth_dev_tx_queue_config(dev, nb_tx_q);
@@ -906,7 +918,8 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 		RTE_PMD_DEBUG_TRACE("port%d rte_eth_dev_tx_queue_config = %d\n",
 				port_id, diag);
 		rte_eth_dev_rx_queue_config(dev, 0);
-		return diag;
+		ret = diag;
+		goto rollback;
 	}
 
 	diag = (*dev->dev_ops->dev_configure)(dev);
@@ -915,10 +928,16 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 				port_id, diag);
 		rte_eth_dev_rx_queue_config(dev, 0);
 		rte_eth_dev_tx_queue_config(dev, 0);
-		return diag;
+		ret = diag;
+		goto rollback;
 	}
 
 	return 0;
+
+rollback:
+	memcpy(&dev->data->dev_conf, &orig_conf, sizeof(dev->data->dev_conf));
+
+	return ret;
 }
 
 static void
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.376202148 +0000
+++ 0013-ethdev-fix-invalid-configuration-after-failure.patch	2018-11-19 12:15:18.099611432 +0000
@@ -1,8 +1,10 @@
-From aa28ec5d27b0ead28877081b30ccf0b74a16bbcd Mon Sep 17 00:00:00 2001
+From 729e04dd9956bcccd08acf7f97e76b3ec452100f Mon Sep 17 00:00:00 2001
 From: Wenzhuo Lu <wenzhuo.lu@intel.com>
 Date: Tue, 13 Nov 2018 11:12:36 +0000
 Subject: [PATCH] ethdev: fix invalid configuration after failure
 
+[ upstream commit aa28ec5d27b0ead28877081b30ccf0b74a16bbcd ]
+
 The new configuration is stored during the rte_eth_dev_configure() API
 but the API may fail. After failure stored configuration will be
 invalid since it is not fully applied to the device.
@@ -10,87 +12,86 @@
 We better roll the configuration back after failure.
 
 Fixes: af75078fece3 ("first public release")
-Cc: stable@dpdk.org
 
 Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
 ---
- lib/librte_ethdev/rte_ethdev.c | 49 +++++++++++++++++++++++++---------
- 1 file changed, 36 insertions(+), 13 deletions(-)
+ lib/librte_ether/rte_ethdev.c | 37 ++++++++++++++++++++++++++---------
+ 1 file changed, 28 insertions(+), 9 deletions(-)
 
-diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
-index 8eaa5fcc7..04dff1f5e 100644
---- a/lib/librte_ethdev/rte_ethdev.c
-+++ b/lib/librte_ethdev/rte_ethdev.c
-@@ -1092,8 +1092,10 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
+index 9b28e95ae..59722e04e 100644
+--- a/lib/librte_ether/rte_ethdev.c
++++ b/lib/librte_ether/rte_ethdev.c
+@@ -795,7 +795,9 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
  {
  	struct rte_eth_dev *dev;
  	struct rte_eth_dev_info dev_info;
 +	struct rte_eth_conf orig_conf;
- 	struct rte_eth_conf local_conf = *dev_conf;
  	int diag;
 +	int ret;
  
  	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
  
-@@ -1140,6 +1142,9 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+@@ -824,6 +826,9 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
  		return -EBUSY;
  	}
  
-+	 /* Store original config, as rollback required on failure */
++	/* Store original config, as rollback required on failure */
 +	memcpy(&orig_conf, &dev->data->dev_conf, sizeof(dev->data->dev_conf));
 +
  	/* Copy the dev_conf parameter into the dev structure */
- 	memcpy(&dev->data->dev_conf, &local_conf, sizeof(dev->data->dev_conf));
+ 	memcpy(&dev->data->dev_conf, dev_conf, sizeof(dev->data->dev_conf));
  
-@@ -1151,13 +1156,15 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 	if (nb_rx_q > dev_info.max_rx_queues) {
- 		RTE_ETHDEV_LOG(ERR, "Ethdev port_id=%u nb_rx_queues=%u > %u\n",
- 			port_id, nb_rx_q, dev_info.max_rx_queues);
+@@ -836,19 +841,22 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+ 
+ 	if (nb_rx_q == 0 && nb_tx_q == 0) {
+ 		RTE_PMD_DEBUG_TRACE("ethdev port_id=%d both rx and tx queue cannot be 0\n", port_id);
 -		return -EINVAL;
 +		ret = -EINVAL;
 +		goto rollback;
  	}
  
- 	if (nb_tx_q > dev_info.max_tx_queues) {
- 		RTE_ETHDEV_LOG(ERR, "Ethdev port_id=%u nb_tx_queues=%u > %u\n",
- 			port_id, nb_tx_q, dev_info.max_tx_queues);
+ 	if (nb_rx_q > dev_info.max_rx_queues) {
+ 		RTE_PMD_DEBUG_TRACE("ethdev port_id=%d nb_rx_queues=%d > %d\n",
+ 				port_id, nb_rx_q, dev_info.max_rx_queues);
 -		return -EINVAL;
 +		ret = -EINVAL;
 +		goto rollback;
  	}
  
- 	/* Check that the device supports requested interrupts */
-@@ -1165,13 +1172,15 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 			(!(dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC))) {
- 		RTE_ETHDEV_LOG(ERR, "Driver %s does not support lsc\n",
- 			dev->device->driver->name);
+ 	if (nb_tx_q > dev_info.max_tx_queues) {
+ 		RTE_PMD_DEBUG_TRACE("ethdev port_id=%d nb_tx_queues=%d > %d\n",
+ 				port_id, nb_tx_q, dev_info.max_tx_queues);
 -		return -EINVAL;
 +		ret = -EINVAL;
 +		goto rollback;
  	}
- 	if ((dev_conf->intr_conf.rmv == 1) &&
- 			(!(dev->data->dev_flags & RTE_ETH_DEV_INTR_RMV))) {
- 		RTE_ETHDEV_LOG(ERR, "Driver %s does not support rmv\n",
- 			dev->device->driver->name);
--		return -EINVAL;
-+		ret = -EINVAL;
-+		goto rollback;
+ 
+ 	/*
+@@ -859,7 +867,8 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+ 		(!(dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC))) {
+ 			RTE_PMD_DEBUG_TRACE("driver %s does not support lsc\n",
+ 					dev->data->drv_name);
+-			return -EINVAL;
++			ret = -EINVAL;
++			goto rollback;
  	}
  
  	/*
-@@ -1184,13 +1193,15 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 				"Ethdev port_id=%u max_rx_pkt_len %u > max valid value %u\n",
- 				port_id, dev_conf->rxmode.max_rx_pkt_len,
- 				dev_info.max_rx_pktlen);
+@@ -874,14 +883,16 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+ 				port_id,
+ 				(unsigned)dev_conf->rxmode.max_rx_pkt_len,
+ 				(unsigned)dev_info.max_rx_pktlen);
 -			return -EINVAL;
 +			ret = -EINVAL;
 +			goto rollback;
  		} else if (dev_conf->rxmode.max_rx_pkt_len < ETHER_MIN_LEN) {
- 			RTE_ETHDEV_LOG(ERR,
- 				"Ethdev port_id=%u max_rx_pkt_len %u < min valid value %u\n",
- 				port_id, dev_conf->rxmode.max_rx_pkt_len,
+ 			RTE_PMD_DEBUG_TRACE("ethdev port_id=%d max_rx_pkt_len %u"
+ 				" < min valid value %u\n",
+ 				port_id,
+ 				(unsigned)dev_conf->rxmode.max_rx_pkt_len,
  				(unsigned)ETHER_MIN_LEN);
 -			return -EINVAL;
 +			ret = -EINVAL;
@@ -98,49 +99,19 @@
  		}
  	} else {
  		if (dev_conf->rxmode.max_rx_pkt_len < ETHER_MIN_LEN ||
-@@ -1209,7 +1220,8 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 			port_id, local_conf.rxmode.offloads,
- 			dev_info.rx_offload_capa,
- 			__func__);
--		return -EINVAL;
-+		ret = -EINVAL;
-+		goto rollback;
- 	}
- 	if ((local_conf.txmode.offloads & dev_info.tx_offload_capa) !=
- 	     local_conf.txmode.offloads) {
-@@ -1219,7 +1231,8 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 			port_id, local_conf.txmode.offloads,
- 			dev_info.tx_offload_capa,
- 			__func__);
--		return -EINVAL;
-+		ret = -EINVAL;
-+		goto rollback;
- 	}
- 
- 	/* Check that device supports requested rss hash functions. */
-@@ -1230,7 +1243,8 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 			"Ethdev port_id=%u invalid rss_hf: 0x%"PRIx64", valid value: 0x%"PRIx64"\n",
- 			port_id, dev_conf->rx_adv_conf.rss_conf.rss_hf,
- 			dev_info.flow_type_rss_offloads);
--		return -EINVAL;
-+		ret = -EINVAL;
-+		goto rollback;
- 	}
- 
- 	/*
-@@ -1241,7 +1255,8 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 		RTE_ETHDEV_LOG(ERR,
- 			"Port%u rte_eth_dev_rx_queue_config = %d\n",
- 			port_id, diag);
+@@ -898,7 +909,8 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+ 	if (diag != 0) {
+ 		RTE_PMD_DEBUG_TRACE("port%d rte_eth_dev_rx_queue_config = %d\n",
+ 				port_id, diag);
 -		return diag;
 +		ret = diag;
 +		goto rollback;
  	}
  
  	diag = rte_eth_dev_tx_queue_config(dev, nb_tx_q);
-@@ -1250,7 +1265,8 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 			"Port%u rte_eth_dev_tx_queue_config = %d\n",
- 			port_id, diag);
+@@ -906,7 +918,8 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+ 		RTE_PMD_DEBUG_TRACE("port%d rte_eth_dev_tx_queue_config = %d\n",
+ 				port_id, diag);
  		rte_eth_dev_rx_queue_config(dev, 0);
 -		return diag;
 +		ret = diag;
@@ -148,22 +119,12 @@
  	}
  
  	diag = (*dev->dev_ops->dev_configure)(dev);
-@@ -1259,7 +1275,8 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 			port_id, diag);
+@@ -915,10 +928,16 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+ 				port_id, diag);
  		rte_eth_dev_rx_queue_config(dev, 0);
  		rte_eth_dev_tx_queue_config(dev, 0);
--		return eth_err(port_id, diag);
-+		ret = eth_err(port_id, diag);
-+		goto rollback;
- 	}
- 
- 	/* Initialize Rx profiling if enabled at compilation time. */
-@@ -1269,10 +1286,16 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
- 			port_id, diag);
- 		rte_eth_dev_rx_queue_config(dev, 0);
- 		rte_eth_dev_tx_queue_config(dev, 0);
--		return eth_err(port_id, diag);
-+		ret = eth_err(port_id, diag);
+-		return diag;
++		ret = diag;
 +		goto rollback;
  	}
  
@@ -175,7 +136,7 @@
 +	return ret;
  }
  
- void
+ static void
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/ixgbevf: fix link state' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (11 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'ethdev: fix invalid configuration after failure' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'test/reorder: fix out of bound access' " Luca Boccassi
                               ` (7 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Yanglong Wu; +Cc: Rosen Xu, Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From d0c0b8732e167a1bd78ccc119e3ed403fdc6fc4d Mon Sep 17 00:00:00 2001
From: Yanglong Wu <yanglong.wu@intel.com>
Date: Tue, 13 Nov 2018 14:34:43 +0800
Subject: [PATCH] net/ixgbevf: fix link state

[ upstream commit 91546fb62e675943a574c2542c0486f2928fed49 ]

For ixgbevf kernel driver, link status changes from down to up
will trigger vf kernel driver send IXGBE_VF_RESET message to pf
kernel driver, after this, vf kernel driver will disable and enable
it self. By these series operations, the vf kernel driver report
link up. Besides, all these operations handles in kernel thread.
For DPDK user space driver, it only gets link status changes from
down to up, but miss IXGBE_VF_RESET message sending and reset itself.
If we will add fully implementation of link status change for DPDK
user space driver, we need take much more modification. We have
aligned that for link status changes from down to up we only notify
link is up, users need to reset vf port.

Fixes: dc66e5fd01b9 ("net/ixgbe: improve link state check on VF")

Signed-off-by: Rosen Xu <rosen.xu@intel.com>
Signed-off-by: Yanglong Wu <yanglong.wu@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 182a8c662..61c075b6a 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -3227,13 +3227,8 @@ ixgbevf_dev_info_get(struct rte_eth_dev *dev,
 
 static int
 ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
-		   int *link_up, int wait_to_complete)
+		   int *link_up, int wait_to_complete __rte_unused)
 {
-	/**
-	 * for a quick link status checking, wait_to_compelet == 0,
-	 * skip PF link status checking
-	 */
-	bool no_pflink_check = wait_to_complete == 0;
 	struct ixgbe_mbx_info *mbx = &hw->mbx;
 	struct ixgbe_mac_info *mac = &hw->mac;
 	uint32_t links_reg, in_msg;
@@ -3294,14 +3289,6 @@ ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
 		*speed = IXGBE_LINK_SPEED_UNKNOWN;
 	}
 
-	if (no_pflink_check) {
-		if (*speed == IXGBE_LINK_SPEED_UNKNOWN)
-			mac->get_link_status = true;
-		else
-			mac->get_link_status = false;
-
-		goto out;
-	}
 	/* if the read failed it could just be a mailbox collision, best wait
 	 * until we are called again and don't report an error
 	 */
@@ -3311,7 +3298,7 @@ ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
 	if (!(in_msg & IXGBE_VT_MSGTYPE_CTS)) {
 		/* msg is not CTS and is NACK we must have lost CTS status */
 		if (in_msg & IXGBE_VT_MSGTYPE_NACK)
-			ret_val = -1;
+			mac->get_link_status = false;
 		goto out;
 	}
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.396946906 +0000
+++ 0014-net-ixgbevf-fix-link-state.patch	2018-11-19 12:15:18.107611433 +0000
@@ -1,8 +1,10 @@
-From 91546fb62e675943a574c2542c0486f2928fed49 Mon Sep 17 00:00:00 2001
+From d0c0b8732e167a1bd78ccc119e3ed403fdc6fc4d Mon Sep 17 00:00:00 2001
 From: Yanglong Wu <yanglong.wu@intel.com>
 Date: Tue, 13 Nov 2018 14:34:43 +0800
 Subject: [PATCH] net/ixgbevf: fix link state
 
+[ upstream commit 91546fb62e675943a574c2542c0486f2928fed49 ]
+
 For ixgbevf kernel driver, link status changes from down to up
 will trigger vf kernel driver send IXGBE_VF_RESET message to pf
 kernel driver, after this, vf kernel driver will disable and enable
@@ -16,22 +18,24 @@
 link is up, users need to reset vf port.
 
 Fixes: dc66e5fd01b9 ("net/ixgbe: improve link state check on VF")
-Cc: stable@dpdk.org
 
 Signed-off-by: Rosen Xu <rosen.xu@intel.com>
 Signed-off-by: Yanglong Wu <yanglong.wu@intel.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>
 ---
- drivers/net/ixgbe/ixgbe_ethdev.c | 15 +--------------
- 1 file changed, 1 insertion(+), 14 deletions(-)
+ drivers/net/ixgbe/ixgbe_ethdev.c | 17 ++---------------
+ 1 file changed, 2 insertions(+), 15 deletions(-)
 
 diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
-index 8148577f5..91ba6201d 100644
+index 182a8c662..61c075b6a 100644
 --- a/drivers/net/ixgbe/ixgbe_ethdev.c
 +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
-@@ -3880,11 +3880,6 @@ static int
+@@ -3227,13 +3227,8 @@ ixgbevf_dev_info_get(struct rte_eth_dev *dev,
+ 
+ static int
  ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
- 		   int *link_up, int wait_to_complete)
+-		   int *link_up, int wait_to_complete)
++		   int *link_up, int wait_to_complete __rte_unused)
  {
 -	/**
 -	 * for a quick link status checking, wait_to_compelet == 0,
@@ -41,7 +45,7 @@
  	struct ixgbe_mbx_info *mbx = &hw->mbx;
  	struct ixgbe_mac_info *mac = &hw->mac;
  	uint32_t links_reg, in_msg;
-@@ -3945,14 +3940,6 @@ ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
+@@ -3294,14 +3289,6 @@ ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
  		*speed = IXGBE_LINK_SPEED_UNKNOWN;
  	}
  
@@ -56,7 +60,7 @@
  	/* if the read failed it could just be a mailbox collision, best wait
  	 * until we are called again and don't report an error
  	 */
-@@ -3962,7 +3949,7 @@ ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
+@@ -3311,7 +3298,7 @@ ixgbevf_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
  	if (!(in_msg & IXGBE_VT_MSGTYPE_CTS)) {
  		/* msg is not CTS and is NACK we must have lost CTS status */
  		if (in_msg & IXGBE_VT_MSGTYPE_NACK)

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'test/reorder: fix out of bound access' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (12 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/ixgbevf: fix link state' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/i40e: fix X710 Rx after reading some registers' " Luca Boccassi
                               ` (6 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From ab8f3afb3afe3edc6b253a23fda956144f362b2c Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Tue, 13 Nov 2018 23:31:37 +0000
Subject: [PATCH] test/reorder: fix out of bound access

[ upstream commit 1af9bc9c60291e43aa26f8ee92371c8b04a9b55f ]

The value of array index 'i' is out of bound because of the previous
loop it has been used.

Assuming intention is using '0' since the check before free is robufs[0]
check, fixing according.

Fixes: ecd867faa860 ("test/reorder: fix freeing mbuf twice")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 app/test/test_reorder.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/test/test_reorder.c b/app/test/test_reorder.c
index add455111..d7dab3210 100644
--- a/app/test/test_reorder.c
+++ b/app/test/test_reorder.c
@@ -300,7 +300,7 @@ test_reorder_drain(void)
 		goto exit;
 	}
 	if (robufs[0] != NULL)
-		rte_pktmbuf_free(robufs[i]);
+		rte_pktmbuf_free(robufs[0]);
 
 	/* Insert more packets
 	 * RB[] = {NULL, NULL, NULL, NULL}
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.419511907 +0000
+++ 0015-test-reorder-fix-out-of-bound-access.patch	2018-11-19 12:15:18.107611433 +0000
@@ -1,8 +1,10 @@
-From 1af9bc9c60291e43aa26f8ee92371c8b04a9b55f Mon Sep 17 00:00:00 2001
+From ab8f3afb3afe3edc6b253a23fda956144f362b2c Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Tue, 13 Nov 2018 23:31:37 +0000
 Subject: [PATCH] test/reorder: fix out of bound access
 
+[ upstream commit 1af9bc9c60291e43aa26f8ee92371c8b04a9b55f ]
+
 The value of array index 'i' is out of bound because of the previous
 loop it has been used.
 
@@ -10,18 +12,17 @@
 check, fixing according.
 
 Fixes: ecd867faa860 ("test/reorder: fix freeing mbuf twice")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 ---
- test/test/test_reorder.c | 2 +-
+ app/test/test_reorder.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/test/test/test_reorder.c b/test/test/test_reorder.c
-index ccee4d086..58fa9c71b 100644
---- a/test/test/test_reorder.c
-+++ b/test/test/test_reorder.c
-@@ -269,7 +269,7 @@ test_reorder_drain(void)
+diff --git a/app/test/test_reorder.c b/app/test/test_reorder.c
+index add455111..d7dab3210 100644
+--- a/app/test/test_reorder.c
++++ b/app/test/test_reorder.c
+@@ -300,7 +300,7 @@ test_reorder_drain(void)
  		goto exit;
  	}
  	if (robufs[0] != NULL)

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/i40e: fix X710 Rx after reading some registers' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (13 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'test/reorder: fix out of bound access' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/ixgbe: fix maximum wait time in comment' " Luca Boccassi
                               ` (5 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Beilei Xing; +Cc: Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From a7e063446170d1dae5a2e310515579de88080e63 Mon Sep 17 00:00:00 2001
From: Beilei Xing <beilei.xing@intel.com>
Date: Thu, 15 Nov 2018 11:17:02 +0800
Subject: [PATCH] net/i40e: fix X710 Rx after reading some registers

[ upstream commit 199efc4ac5409403d24a0f21fe382bbce86638ac ]

There's an issue that X710 can't receive any packet after
reading some special registers. That's because these
registers are only valid for X722, read access for non-X722
will cause ECC error.

Fixes: d9efd0136ac1 ("i40e: add EEPROM and registers dumping")

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 52974a3a9..62b36c9a1 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -10084,6 +10084,32 @@ i40e_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id)
 	return 0;
 }
 
+/**
+ * This function is used to check if the register is valid.
+ * Below is the valid registers list for X722 only:
+ * 0x2b800--0x2bb00
+ * 0x38700--0x38a00
+ * 0x3d800--0x3db00
+ * 0x208e00--0x209000
+ * 0x20be00--0x20c000
+ * 0x263c00--0x264000
+ * 0x265c00--0x266000
+ */
+static inline int i40e_valid_regs(enum i40e_mac_type type, uint32_t reg_offset)
+{
+	if ((type != I40E_MAC_X722) &&
+	    ((reg_offset >= 0x2b800 && reg_offset <= 0x2bb00) ||
+	     (reg_offset >= 0x38700 && reg_offset <= 0x38a00) ||
+	     (reg_offset >= 0x3d800 && reg_offset <= 0x3db00) ||
+	     (reg_offset >= 0x208e00 && reg_offset <= 0x209000) ||
+	     (reg_offset >= 0x20be00 && reg_offset <= 0x20c000) ||
+	     (reg_offset >= 0x263c00 && reg_offset <= 0x264000) ||
+	     (reg_offset >= 0x265c00 && reg_offset <= 0x266000)))
+		return 0;
+	else
+		return 1;
+}
+
 static int i40e_get_regs(struct rte_eth_dev *dev,
 			 struct rte_dev_reg_info *regs)
 {
@@ -10125,8 +10151,11 @@ static int i40e_get_regs(struct rte_eth_dev *dev,
 				reg_offset = arr_idx * reg_info->stride1 +
 					arr_idx2 * reg_info->stride2;
 				reg_offset += reg_info->base_addr;
-				ptr_data[reg_offset >> 2] =
-					I40E_READ_REG(hw, reg_offset);
+				if (!i40e_valid_regs(hw->mac.type, reg_offset))
+					ptr_data[reg_offset >> 2] = 0;
+				else
+					ptr_data[reg_offset >> 2] =
+						I40E_READ_REG(hw, reg_offset);
 			}
 	}
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.436906000 +0000
+++ 0016-net-i40e-fix-X710-Rx-after-reading-some-registers.patch	2018-11-19 12:15:18.115611432 +0000
@@ -1,15 +1,16 @@
-From 199efc4ac5409403d24a0f21fe382bbce86638ac Mon Sep 17 00:00:00 2001
+From a7e063446170d1dae5a2e310515579de88080e63 Mon Sep 17 00:00:00 2001
 From: Beilei Xing <beilei.xing@intel.com>
 Date: Thu, 15 Nov 2018 11:17:02 +0800
 Subject: [PATCH] net/i40e: fix X710 Rx after reading some registers
 
+[ upstream commit 199efc4ac5409403d24a0f21fe382bbce86638ac ]
+
 There's an issue that X710 can't receive any packet after
 reading some special registers. That's because these
 registers are only valid for X722, read access for non-X722
 will cause ECC error.
 
 Fixes: d9efd0136ac1 ("i40e: add EEPROM and registers dumping")
-Cc: stable@dpdk.org
 
 Signed-off-by: Beilei Xing <beilei.xing@intel.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>
@@ -18,10 +19,10 @@
  1 file changed, 31 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
-index 790ecc3cc..3628d7f2a 100644
+index 52974a3a9..62b36c9a1 100644
 --- a/drivers/net/i40e/i40e_ethdev.c
 +++ b/drivers/net/i40e/i40e_ethdev.c
-@@ -11609,6 +11609,32 @@ i40e_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id)
+@@ -10084,6 +10084,32 @@ i40e_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id)
  	return 0;
  }
  
@@ -54,7 +55,7 @@
  static int i40e_get_regs(struct rte_eth_dev *dev,
  			 struct rte_dev_reg_info *regs)
  {
-@@ -11650,8 +11676,11 @@ static int i40e_get_regs(struct rte_eth_dev *dev,
+@@ -10125,8 +10151,11 @@ static int i40e_get_regs(struct rte_eth_dev *dev,
  				reg_offset = arr_idx * reg_info->stride1 +
  					arr_idx2 * reg_info->stride2;
  				reg_offset += reg_info->base_addr;

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/ixgbe: fix maximum wait time in comment' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (14 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/i40e: fix X710 Rx after reading some registers' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'examples/ipv4_multicast: fix leak of cloned packets' " Luca Boccassi
                               ` (4 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Xiaolong Ye; +Cc: Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From ffb90576976ad97d4bbbec36bda8066e870287fa Mon Sep 17 00:00:00 2001
From: Xiaolong Ye <xiaolong.ye@intel.com>
Date: Thu, 15 Nov 2018 15:20:05 +0800
Subject: [PATCH] net/ixgbe: fix maximum wait time in comment

[ upstream commit 73247f1ced303c16987bb366d38a2d8a0fc40db4 ]

As the code has changed the max wait time to 1000ms, the comment should
be changed accordingly.

Fixes: 64f1c8539c8c ("net/ixgbe: wait longer for link after fiber MAC setup")

Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ixgbe/base/ixgbe_common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
index 662bff467..ac4ef8ab5 100644
--- a/drivers/net/ixgbe/base/ixgbe_common.c
+++ b/drivers/net/ixgbe/base/ixgbe_common.c
@@ -5095,7 +5095,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
 		ixgbe_flap_tx_laser(hw);
 
 		/* Wait for the controller to acquire link.  Per IEEE 802.3ap,
-		 * Section 73.10.2, we may have to wait up to 500ms if KR is
+		 * Section 73.10.2, we may have to wait up to 1000ms if KR is
 		 * attempted.  82599 uses the same timing for 10g SFI.
 		 */
 		for (i = 0; i < 10; i++) {
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.465732576 +0000
+++ 0017-net-ixgbe-fix-maximum-wait-time-in-comment.patch	2018-11-19 12:15:18.119611432 +0000
@@ -1,13 +1,14 @@
-From 73247f1ced303c16987bb366d38a2d8a0fc40db4 Mon Sep 17 00:00:00 2001
+From ffb90576976ad97d4bbbec36bda8066e870287fa Mon Sep 17 00:00:00 2001
 From: Xiaolong Ye <xiaolong.ye@intel.com>
 Date: Thu, 15 Nov 2018 15:20:05 +0800
 Subject: [PATCH] net/ixgbe: fix maximum wait time in comment
 
+[ upstream commit 73247f1ced303c16987bb366d38a2d8a0fc40db4 ]
+
 As the code has changed the max wait time to 1000ms, the comment should
 be changed accordingly.
 
 Fixes: 64f1c8539c8c ("net/ixgbe: wait longer for link after fiber MAC setup")
-Cc: stable@dpdk.org
 
 Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>
@@ -16,10 +17,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
-index 21f973e5e..fb50719fb 100644
+index 662bff467..ac4ef8ab5 100644
 --- a/drivers/net/ixgbe/base/ixgbe_common.c
 +++ b/drivers/net/ixgbe/base/ixgbe_common.c
-@@ -5259,7 +5259,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
+@@ -5095,7 +5095,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
  		ixgbe_flap_tx_laser(hw);
  
  		/* Wait for the controller to acquire link.  Per IEEE 802.3ap,

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'examples/ipv4_multicast: fix leak of cloned packets' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (15 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/ixgbe: fix maximum wait time in comment' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'usertools: check for lspci dependency' " Luca Boccassi
                               ` (3 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Herakliusz Lipiec; +Cc: Dong Wang, Konstantin Ananyev, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 116289a11aee9e785c7e3a2f7b9e76cb00f2f53a Mon Sep 17 00:00:00 2001
From: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
Date: Tue, 13 Nov 2018 11:49:29 +0000
Subject: [PATCH] examples/ipv4_multicast: fix leak of cloned packets

[ upstream commit 91dc9c13ba978fb8147240ed6fa20c41145bf0db ]

The ipv4_multicast sample application was dropping packets
when using mbuf clone. When creating an L2 header and copying
metadata from the source packet, the ol_flags were also copied
along with all the other metadata. Because the cloned packet
had IND_ATTACHED_MBUF flag set in its ol_flags,
this caused the packets to never be freed when using rte_pktmbuf_free.
Since copying ol_flags from the cloned packet is
not necessary in the first place, just don't do it.

Fixes: af75078fece3 ("first public release")

Reported-by: Dong Wang <dong1.wang@intel.com>
Signed-off-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Dong Wang <dong1.wang@intel.com>
---
 doc/guides/sample_app_ug/ipv4_multicast.rst | 1 -
 examples/ipv4_multicast/main.c              | 2 --
 2 files changed, 3 deletions(-)

diff --git a/doc/guides/sample_app_ug/ipv4_multicast.rst b/doc/guides/sample_app_ug/ipv4_multicast.rst
index 72da8c423..6badc681a 100644
--- a/doc/guides/sample_app_ug/ipv4_multicast.rst
+++ b/doc/guides/sample_app_ug/ipv4_multicast.rst
@@ -365,7 +365,6 @@ It is the mcast_out_pkt() function that performs the packet duplication (either
         hdr->pkt.in_port = pkt->pkt.in_port;
         hdr->pkt.vlan_macip = pkt->pkt.vlan_macip;
         hdr->pkt.hash = pkt->pkt.hash;
-        hdr->ol_flags = pkt->ol_flags;
         rte_mbuf_sanity_check(hdr, RTE_MBUF_PKT, 1);
 
         return hdr;
diff --git a/examples/ipv4_multicast/main.c b/examples/ipv4_multicast/main.c
index b908b3174..d2e1bfb98 100644
--- a/examples/ipv4_multicast/main.c
+++ b/examples/ipv4_multicast/main.c
@@ -301,8 +301,6 @@ mcast_out_pkt(struct rte_mbuf *pkt, int use_clone)
 	hdr->tx_offload = pkt->tx_offload;
 	hdr->hash = pkt->hash;
 
-	hdr->ol_flags = pkt->ol_flags;
-
 	__rte_mbuf_sanity_check(hdr, 1);
 	return hdr;
 }
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.487136672 +0000
+++ 0018-examples-ipv4_multicast-fix-leak-of-cloned-packets.patch	2018-11-19 12:15:18.123611432 +0000
@@ -1,8 +1,10 @@
-From 91dc9c13ba978fb8147240ed6fa20c41145bf0db Mon Sep 17 00:00:00 2001
+From 116289a11aee9e785c7e3a2f7b9e76cb00f2f53a Mon Sep 17 00:00:00 2001
 From: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
 Date: Tue, 13 Nov 2018 11:49:29 +0000
 Subject: [PATCH] examples/ipv4_multicast: fix leak of cloned packets
 
+[ upstream commit 91dc9c13ba978fb8147240ed6fa20c41145bf0db ]
+
 The ipv4_multicast sample application was dropping packets
 when using mbuf clone. When creating an L2 header and copying
 metadata from the source packet, the ol_flags were also copied
@@ -13,7 +15,6 @@
 not necessary in the first place, just don't do it.
 
 Fixes: af75078fece3 ("first public release")
-Cc: stable@dpdk.org
 
 Reported-by: Dong Wang <dong1.wang@intel.com>
 Signed-off-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
@@ -25,10 +26,10 @@
  2 files changed, 3 deletions(-)
 
 diff --git a/doc/guides/sample_app_ug/ipv4_multicast.rst b/doc/guides/sample_app_ug/ipv4_multicast.rst
-index ce1474ec7..f6efa7f6f 100644
+index 72da8c423..6badc681a 100644
 --- a/doc/guides/sample_app_ug/ipv4_multicast.rst
 +++ b/doc/guides/sample_app_ug/ipv4_multicast.rst
-@@ -319,7 +319,6 @@ It is the mcast_out_pkt() function that performs the packet duplication (either
+@@ -365,7 +365,6 @@ It is the mcast_out_pkt() function that performs the packet duplication (either
          hdr->pkt.in_port = pkt->pkt.in_port;
          hdr->pkt.vlan_macip = pkt->pkt.vlan_macip;
          hdr->pkt.hash = pkt->pkt.hash;
@@ -37,10 +38,10 @@
  
          return hdr;
 diff --git a/examples/ipv4_multicast/main.c b/examples/ipv4_multicast/main.c
-index 4073a4907..428ca4694 100644
+index b908b3174..d2e1bfb98 100644
 --- a/examples/ipv4_multicast/main.c
 +++ b/examples/ipv4_multicast/main.c
-@@ -266,8 +266,6 @@ mcast_out_pkt(struct rte_mbuf *pkt, int use_clone)
+@@ -301,8 +301,6 @@ mcast_out_pkt(struct rte_mbuf *pkt, int use_clone)
  	hdr->tx_offload = pkt->tx_offload;
  	hdr->hash = pkt->hash;
  

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'usertools: check for lspci dependency' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (16 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'examples/ipv4_multicast: fix leak of cloned packets' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'doc: fix NUMA library name in Linux guide' " Luca Boccassi
                               ` (2 subsequent siblings)
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Anatoly Burakov; +Cc: Rami Rosen, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 99fae471198a9e8d87de41b9b82e7ba6b709e27e Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov@intel.com>
Date: Tue, 13 Nov 2018 16:06:26 +0000
Subject: [PATCH] usertools: check for lspci dependency

[ upstream commit 1a5a9cb32a93da47fa6aa0da8407337feaf901f8 ]

On some distributions (such as CentOS 7) lspci may not be installed
by default, causing exceptions which are difficult to interpret.

Fix devbind script to check if lspci is installed at script startup.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Reviewed-by: Rami Rosen <roszenrami@gmail.com>
---
 tools/dpdk-devbind.py | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/dpdk-devbind.py b/tools/dpdk-devbind.py
index e7cfcd02a..47597deee 100755
--- a/tools/dpdk-devbind.py
+++ b/tools/dpdk-devbind.py
@@ -609,6 +609,13 @@ def do_arg_actions():
 
 def main():
     '''program main function'''
+    # check if lspci is installed, suppress any output
+    with open(os.devnull, 'w') as devnull:
+        ret = subprocess.call(['which', 'lspci'],
+                              stdout=devnull, stderr=devnull)
+        if ret != 0:
+            print("'lspci' not found - please install 'pciutils'")
+            sys.exit(1)
     parse_args()
     check_modules()
     get_nic_details()
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.505158158 +0000
+++ 0019-usertools-check-for-lspci-dependency.patch	2018-11-19 12:15:18.123611432 +0000
@@ -1,26 +1,26 @@
-From 1a5a9cb32a93da47fa6aa0da8407337feaf901f8 Mon Sep 17 00:00:00 2001
+From 99fae471198a9e8d87de41b9b82e7ba6b709e27e Mon Sep 17 00:00:00 2001
 From: Anatoly Burakov <anatoly.burakov@intel.com>
 Date: Tue, 13 Nov 2018 16:06:26 +0000
 Subject: [PATCH] usertools: check for lspci dependency
 
+[ upstream commit 1a5a9cb32a93da47fa6aa0da8407337feaf901f8 ]
+
 On some distributions (such as CentOS 7) lspci may not be installed
 by default, causing exceptions which are difficult to interpret.
 
 Fix devbind script to check if lspci is installed at script startup.
 
-Cc: stable@dpdk.org
-
 Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
 Reviewed-by: Rami Rosen <roszenrami@gmail.com>
 ---
- usertools/dpdk-devbind.py | 7 +++++++
+ tools/dpdk-devbind.py | 7 +++++++
  1 file changed, 7 insertions(+)
 
-diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py
-index 7d564634c..40dc28a7d 100755
---- a/usertools/dpdk-devbind.py
-+++ b/usertools/dpdk-devbind.py
-@@ -655,6 +655,13 @@ def do_arg_actions():
+diff --git a/tools/dpdk-devbind.py b/tools/dpdk-devbind.py
+index e7cfcd02a..47597deee 100755
+--- a/tools/dpdk-devbind.py
++++ b/tools/dpdk-devbind.py
+@@ -609,6 +609,13 @@ def do_arg_actions():
  
  def main():
      '''program main function'''
@@ -33,7 +33,7 @@
 +            sys.exit(1)
      parse_args()
      check_modules()
-     clear_data()
+     get_nic_details()
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'doc: fix NUMA library name in Linux guide' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (17 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'usertools: check for lspci dependency' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-19 12:25             ` [dpdk-stable] patch 'doc: fix formatting in IP reassembly app " Luca Boccassi
  2018-11-26 12:49             ` [dpdk-stable] patch 'eal: fix build with -O1' " Luca Boccassi
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Yong Wang; +Cc: Anatoly Burakov, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 8944129d8c90bf510f865dafb64290dc0b9efef1 Mon Sep 17 00:00:00 2001
From: Yong Wang <wang.yong19@zte.com.cn>
Date: Tue, 6 Nov 2018 21:40:52 -0500
Subject: [PATCH] doc: fix NUMA library name in Linux guide

[ upstream commit ee57170c4acb7b477091948caa8ea9e887222867 ]

The library for handling NUMA is not libnuma-devel, but numactl-devel
in Red Hat/Fedora and libnuma-dev in Debian/Ubuntu.

Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 doc/guides/linux_gsg/sys_reqs.rst | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/doc/guides/linux_gsg/sys_reqs.rst b/doc/guides/linux_gsg/sys_reqs.rst
index 3d7434215..4845ca456 100644
--- a/doc/guides/linux_gsg/sys_reqs.rst
+++ b/doc/guides/linux_gsg/sys_reqs.rst
@@ -86,6 +86,12 @@ Compilation of the DPDK
 
 .. note::
 
+*   Library for handling NUMA (Non Uniform Memory Access).
+
+    * numactl-devel in Red Hat/Fedora;
+
+    * libnuma-dev in Debian/Ubuntu;
+
     Python, version 2.6 or 2.7, to use various helper scripts included in the DPDK package.
 
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.523230578 +0000
+++ 0020-doc-fix-NUMA-library-name-in-Linux-guide.patch	2018-11-19 12:15:18.123611432 +0000
@@ -1,33 +1,35 @@
-From ee57170c4acb7b477091948caa8ea9e887222867 Mon Sep 17 00:00:00 2001
+From 8944129d8c90bf510f865dafb64290dc0b9efef1 Mon Sep 17 00:00:00 2001
 From: Yong Wang <wang.yong19@zte.com.cn>
 Date: Tue, 6 Nov 2018 21:40:52 -0500
 Subject: [PATCH] doc: fix NUMA library name in Linux guide
 
+[ upstream commit ee57170c4acb7b477091948caa8ea9e887222867 ]
+
 The library for handling NUMA is not libnuma-devel, but numactl-devel
 in Red Hat/Fedora and libnuma-dev in Debian/Ubuntu.
 
 Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
 Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
 ---
- doc/guides/linux_gsg/sys_reqs.rst | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
+ doc/guides/linux_gsg/sys_reqs.rst | 6 ++++++
+ 1 file changed, 6 insertions(+)
 
 diff --git a/doc/guides/linux_gsg/sys_reqs.rst b/doc/guides/linux_gsg/sys_reqs.rst
-index 96f5ce9b5..29c5f47a5 100644
+index 3d7434215..4845ca456 100644
 --- a/doc/guides/linux_gsg/sys_reqs.rst
 +++ b/doc/guides/linux_gsg/sys_reqs.rst
-@@ -64,7 +64,11 @@ Compilation of the DPDK
-        x86_x32 ABI is currently supported with distribution packages only on Ubuntu
-        higher than 13.10 or recent Debian distribution. The only supported  compiler is gcc 4.9+.
+@@ -86,6 +86,12 @@ Compilation of the DPDK
+ 
+ .. note::
  
--*   libnuma-devel - library for handling NUMA (Non Uniform Memory Access).
 +*   Library for handling NUMA (Non Uniform Memory Access).
 +
 +    * numactl-devel in Red Hat/Fedora;
 +
 +    * libnuma-dev in Debian/Ubuntu;
++
+     Python, version 2.6 or 2.7, to use various helper scripts included in the DPDK package.
  
- *   Python, version 2.7+ or 3.2+, to use various helper scripts included in the DPDK package.
  
 -- 
 2.19.1

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'doc: fix formatting in IP reassembly app guide' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (18 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'doc: fix NUMA library name in Linux guide' " Luca Boccassi
@ 2018-11-19 12:25             ` Luca Boccassi
  2018-11-26 12:49             ` [dpdk-stable] patch 'eal: fix build with -O1' " Luca Boccassi
  20 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:25 UTC (permalink / raw)
  To: Marko Kovacevic; +Cc: Ferruh Yigit, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/21/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 9558a5a6cfa040a66989e719d28826655619bc6f Mon Sep 17 00:00:00 2001
From: Marko Kovacevic <marko.kovacevic@intel.com>
Date: Thu, 16 Aug 2018 17:35:38 +0100
Subject: [PATCH] doc: fix formatting in IP reassembly app guide

[ upstream commit 49cc0a0d1a51fd7c10a0b6226784912028f04eb3 ]

Fixed formatting an extra header was added making it an extra
section when it was not intended.

Fixes: d0dff9ba445e ("doc: sample application user guide")

Signed-off-by: Marko Kovacevic <marko.kovacevic@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 doc/guides/sample_app_ug/ip_reassembly.rst | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/doc/guides/sample_app_ug/ip_reassembly.rst b/doc/guides/sample_app_ug/ip_reassembly.rst
index 3c5cc708b..4c75bd085 100644
--- a/doc/guides/sample_app_ug/ip_reassembly.rst
+++ b/doc/guides/sample_app_ug/ip_reassembly.rst
@@ -50,8 +50,8 @@ There are two key differences from the L2 Forwarding sample application:
 
 *   The second difference is that the application differentiates between IP and non-IP traffic by means of offload flags.
 
-The Longest Prefix Match (LPM for IPv4, LPM6 for IPv6) table is used to store/lookup an outgoing port number, associated with that IPv4 address. Any unmatched packets are forwarded to the originating port.Compiling the Application
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+The Longest Prefix Match (LPM for IPv4, LPM6 for IPv6) table is used to store/lookup an outgoing port number,
+associated with that IPv4 address. Any unmatched packets are forwarded to the originating port.
 
 To compile the application:
 
-- 
2.19.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-19 12:15:18.541015414 +0000
+++ 0021-doc-fix-formatting-in-IP-reassembly-app-guide.patch	2018-11-19 12:15:18.123611432 +0000
@@ -1,13 +1,14 @@
-From 49cc0a0d1a51fd7c10a0b6226784912028f04eb3 Mon Sep 17 00:00:00 2001
+From 9558a5a6cfa040a66989e719d28826655619bc6f Mon Sep 17 00:00:00 2001
 From: Marko Kovacevic <marko.kovacevic@intel.com>
 Date: Thu, 16 Aug 2018 17:35:38 +0100
 Subject: [PATCH] doc: fix formatting in IP reassembly app guide
 
+[ upstream commit 49cc0a0d1a51fd7c10a0b6226784912028f04eb3 ]
+
 Fixed formatting an extra header was added making it an extra
 section when it was not intended.
 
 Fixes: d0dff9ba445e ("doc: sample application user guide")
-Cc: stable@dpdk.org
 
 Signed-off-by: Marko Kovacevic <marko.kovacevic@intel.com>
 Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
@@ -16,10 +17,10 @@
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/doc/guides/sample_app_ug/ip_reassembly.rst b/doc/guides/sample_app_ug/ip_reassembly.rst
-index 18912cd2f..e1b56d7be 100644
+index 3c5cc708b..4c75bd085 100644
 --- a/doc/guides/sample_app_ug/ip_reassembly.rst
 +++ b/doc/guides/sample_app_ug/ip_reassembly.rst
-@@ -23,8 +23,8 @@ There are two key differences from the L2 Forwarding sample application:
+@@ -50,8 +50,8 @@ There are two key differences from the L2 Forwarding sample application:
  
  *   The second difference is that the application differentiates between IP and non-IP traffic by means of offload flags.
  
@@ -28,8 +29,8 @@
 +The Longest Prefix Match (LPM for IPv4, LPM6 for IPv6) table is used to store/lookup an outgoing port number,
 +associated with that IPv4 address. Any unmatched packets are forwarded to the originating port.
  
+ To compile the application:
  
- Compiling the Application
 -- 
 2.19.1
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'net/virtio: fix unchecked return value' has been queued to LTS release 16.11.9
  2018-11-19 12:25             ` [dpdk-stable] patch 'net/virtio: fix unchecked return value' " Luca Boccassi
@ 2018-11-19 12:48               ` Tiwei Bie
  2018-11-19 12:52                 ` Luca Boccassi
  0 siblings, 1 reply; 118+ messages in thread
From: Tiwei Bie @ 2018-11-19 12:48 UTC (permalink / raw)
  To: Luca Boccassi; +Cc: Maxime Coquelin, dpdk stable

On Mon, Nov 19, 2018 at 12:25:25PM +0000, Luca Boccassi wrote:
> Hi,
> 
> FYI, your patch has been queued to LTS release 16.11.9
> 
> Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
> It will be pushed if I get no objections before 11/21/18. So please
> shout if anyone has objections.
> 
> Also note that after the patch there's a diff of the upstream commit vs the patch applied
> to the branch. If the code is different (ie: not only metadata diffs), due for example to
> a change in context or macro names, please double check it.
> 
> Thanks.
> 
> Luca Boccassi
> 
> ---
> From 87b9d321789f9bdaa2cf11df2f7377bc1145e7fa Mon Sep 17 00:00:00 2001
> From: Tiwei Bie <tiwei.bie@intel.com>
> Date: Wed, 7 Nov 2018 17:01:01 +0800
> Subject: [PATCH] net/virtio: fix unchecked return value
> 
> [ upstream commit ecfae1510edc1391285aa566a2d31e7eae8fc6d2 ]
> 
> Coverity issue: 302861
> Fixes: 6ba1f63b5ab0 ("virtio: support specification 1.0")
> 
> Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> ---
>  drivers/net/virtio/virtio_pci.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/virtio/virtio_pci.c b/drivers/net/virtio/virtio_pci.c
> index f6d697f38..13ad57dfd 100644
> --- a/drivers/net/virtio/virtio_pci.c
> +++ b/drivers/net/virtio/virtio_pci.c
> @@ -690,9 +690,15 @@ virtio_read_caps(struct rte_pci_device *dev, struct virtio_hw *hw)
>  			hw->common_cfg = get_cfg_addr(dev, &cap);
>  			break;
>  		case VIRTIO_PCI_CAP_NOTIFY_CFG:
> -			rte_eal_pci_read_config(dev, &hw->notify_off_multiplier,
> -						4, pos + sizeof(cap));
> -			hw->notify_base = get_cfg_addr(dev, &cap);
> +			ret = rte_eal_pci_read_config(dev,
> +					&hw->notify_off_multiplier,
> +					4, pos + sizeof(cap));
> +			if (ret != 4)

Hi Luca,

This patch can't be backported, because it depends on an
API change in newer release.

Thanks


> +				PMD_INIT_LOG(DEBUG,
> +					"failed to read notify_off_multiplier, ret %d",
> +					ret);
> +			else
> +				hw->notify_base = get_cfg_addr(dev, &cap);
>  			break;
>  		case VIRTIO_PCI_CAP_DEVICE_CFG:
>  			hw->dev_cfg = get_cfg_addr(dev, &cap);
> -- 
> 2.19.1
[...]

^ permalink raw reply	[flat|nested] 118+ messages in thread

* Re: [dpdk-stable] patch 'net/virtio: fix unchecked return value' has been queued to LTS release 16.11.9
  2018-11-19 12:48               ` Tiwei Bie
@ 2018-11-19 12:52                 ` Luca Boccassi
  0 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-19 12:52 UTC (permalink / raw)
  To: Tiwei Bie; +Cc: Maxime Coquelin, dpdk stable

On Mon, 2018-11-19 at 20:48 +0800, Tiwei Bie wrote:
> On Mon, Nov 19, 2018 at 12:25:25PM +0000, Luca Boccassi wrote:
> > Hi,
> > 
> > FYI, your patch has been queued to LTS release 16.11.9
> > 
> > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable
> > yet.
> > It will be pushed if I get no objections before 11/21/18. So please
> > shout if anyone has objections.
> > 
> > Also note that after the patch there's a diff of the upstream
> > commit vs the patch applied
> > to the branch. If the code is different (ie: not only metadata
> > diffs), due for example to
> > a change in context or macro names, please double check it.
> > 
> > Thanks.
> > 
> > Luca Boccassi
> > 
> > ---
> > From 87b9d321789f9bdaa2cf11df2f7377bc1145e7fa Mon Sep 17 00:00:00
> > 2001
> > From: Tiwei Bie <tiwei.bie@intel.com>
> > Date: Wed, 7 Nov 2018 17:01:01 +0800
> > Subject: [PATCH] net/virtio: fix unchecked return value
> > 
> > [ upstream commit ecfae1510edc1391285aa566a2d31e7eae8fc6d2 ]
> > 
> > Coverity issue: 302861
> > Fixes: 6ba1f63b5ab0 ("virtio: support specification 1.0")
> > 
> > Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
> > Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> > ---
> >  drivers/net/virtio/virtio_pci.c | 12 +++++++++---
> >  1 file changed, 9 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/net/virtio/virtio_pci.c
> > b/drivers/net/virtio/virtio_pci.c
> > index f6d697f38..13ad57dfd 100644
> > --- a/drivers/net/virtio/virtio_pci.c
> > +++ b/drivers/net/virtio/virtio_pci.c
> > @@ -690,9 +690,15 @@ virtio_read_caps(struct rte_pci_device *dev,
> > struct virtio_hw *hw)
> >  			hw->common_cfg = get_cfg_addr(dev, &cap);
> >  			break;
> >  		case VIRTIO_PCI_CAP_NOTIFY_CFG:
> > -			rte_eal_pci_read_config(dev, &hw-
> > >notify_off_multiplier,
> > -						4, pos +
> > sizeof(cap));
> > -			hw->notify_base = get_cfg_addr(dev, &cap);
> > +			ret = rte_eal_pci_read_config(dev,
> > +					&hw-
> > >notify_off_multiplier,
> > +					4, pos + sizeof(cap));
> > +			if (ret != 4)
> 
> Hi Luca,
> 
> This patch can't be backported, because it depends on an
> API change in newer release.
> 
> Thanks

Yes the one I made (lol!), you are right and I had already skipped
that, thanks for the reminder.

-- 
Kind regards,
Luca Boccassi

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'eal: fix build with -O1' has been queued to LTS release 16.11.9
  2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
                               ` (19 preceding siblings ...)
  2018-11-19 12:25             ` [dpdk-stable] patch 'doc: fix formatting in IP reassembly app " Luca Boccassi
@ 2018-11-26 12:49             ` Luca Boccassi
  2018-11-26 12:49               ` [dpdk-stable] patch 'kni: fix possible uninitialized variable' " Luca Boccassi
                                 ` (4 more replies)
  20 siblings, 5 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-26 12:49 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/28/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 2be17bba620f8d20f63f9dab2a116640a1eebc0f Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 16 Nov 2018 17:58:50 +0100
Subject: [PATCH] eal: fix build with -O1

[ upstream commit e357e8ebd99c9c394a276fdffd37f13005cb1c63 ]

In case of optimized compilation, RTE_BUILD_BUG_ON use an external
variable which is neither defined, nor used.
It seems not optimized out in case of OPDL compiled with clang -O1:
	opdl_ring.c: undefined reference to `RTE_BUILD_BUG_ON_detected_error'
	clang-6.0: fatal error: linker command failed with exit code 1

Fixes: af75078fece3 ("first public release")

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 lib/librte_eal/common/include/rte_common.h | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
index 9ae584717..f17926f3d 100644
--- a/lib/librte_eal/common/include/rte_common.h
+++ b/lib/librte_eal/common/include/rte_common.h
@@ -200,16 +200,7 @@ rte_is_aligned(void *ptr, unsigned align)
 /**
  * Triggers an error at compilation time if the condition is true.
  */
-#ifndef __OPTIMIZE__
 #define RTE_BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
-#else
-extern int RTE_BUILD_BUG_ON_detected_error;
-#define RTE_BUILD_BUG_ON(condition) do {             \
-	((void)sizeof(char[1 - 2*!!(condition)]));   \
-	if (condition)                               \
-		RTE_BUILD_BUG_ON_detected_error = 1; \
-} while(0)
-#endif
 
 /*********** Macros to work with powers of 2 ********/
 
-- 
2.19.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-26 12:45:13.629585357 +0000
+++ 0001-eal-fix-build-with-O1.patch	2018-11-26 12:45:13.603202331 +0000
@@ -1,8 +1,10 @@
-From e357e8ebd99c9c394a276fdffd37f13005cb1c63 Mon Sep 17 00:00:00 2001
+From 2be17bba620f8d20f63f9dab2a116640a1eebc0f Mon Sep 17 00:00:00 2001
 From: Thomas Monjalon <thomas@monjalon.net>
 Date: Fri, 16 Nov 2018 17:58:50 +0100
 Subject: [PATCH] eal: fix build with -O1
 
+[ upstream commit e357e8ebd99c9c394a276fdffd37f13005cb1c63 ]
+
 In case of optimized compilation, RTE_BUILD_BUG_ON use an external
 variable which is neither defined, nor used.
 It seems not optimized out in case of OPDL compiled with clang -O1:
@@ -10,7 +12,6 @@
 	clang-6.0: fatal error: linker command failed with exit code 1
 
 Fixes: af75078fece3 ("first public release")
-Cc: stable@dpdk.org
 
 Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
 ---
@@ -18,10 +19,10 @@
  1 file changed, 9 deletions(-)
 
 diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
-index d115b175c..66cdf60b2 100644
+index 9ae584717..f17926f3d 100644
 --- a/lib/librte_eal/common/include/rte_common.h
 +++ b/lib/librte_eal/common/include/rte_common.h
-@@ -270,16 +270,7 @@ rte_is_aligned(void *ptr, unsigned align)
+@@ -200,16 +200,7 @@ rte_is_aligned(void *ptr, unsigned align)
  /**
   * Triggers an error at compilation time if the condition is true.
   */
@@ -36,8 +37,8 @@
 -} while(0)
 -#endif
  
- /**
-  * Combines 32b inputs most significant set bits into the least
+ /*********** Macros to work with powers of 2 ********/
+ 
 -- 
 2.19.2
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'kni: fix possible uninitialized variable' has been queued to LTS release 16.11.9
  2018-11-26 12:49             ` [dpdk-stable] patch 'eal: fix build with -O1' " Luca Boccassi
@ 2018-11-26 12:49               ` Luca Boccassi
  2018-11-26 12:49               ` [dpdk-stable] patch 'config: enable more than 128 cores for arm64' " Luca Boccassi
                                 ` (3 subsequent siblings)
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-26 12:49 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/28/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From f81caeb00aafc05e15ecd2178987bc9deafd5fe4 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 16 Nov 2018 17:58:51 +0100
Subject: [PATCH] kni: fix possible uninitialized variable

[ upstream commit a17842c1421c1b26f9deed4f6684abdba06e7a56 ]

This error can be raised:
	lib/librte_kni/rte_kni.c:531:15: error:
	'req' may be used uninitialized in this function

It should not happen because kni_fifo_get() would return 0 if
req is not initialized, so the function would return before using req.
But GCC complains about it in -O1 optimization,
and a NULL initialization is harmless here.

Fixes: 3fc5ca2f6352 ("kni: initial import")

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 lib/librte_kni/rte_kni.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c
index 0c6641bfa..12656a9d4 100644
--- a/lib/librte_kni/rte_kni.c
+++ b/lib/librte_kni/rte_kni.c
@@ -532,7 +532,7 @@ int
 rte_kni_handle_request(struct rte_kni *kni)
 {
 	unsigned ret;
-	struct rte_kni_request *req;
+	struct rte_kni_request *req = NULL;
 
 	if (kni == NULL)
 		return -1;
-- 
2.19.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-26 12:45:13.650678684 +0000
+++ 0002-kni-fix-possible-uninitialized-variable.patch	2018-11-26 12:45:13.603202331 +0000
@@ -1,8 +1,10 @@
-From a17842c1421c1b26f9deed4f6684abdba06e7a56 Mon Sep 17 00:00:00 2001
+From f81caeb00aafc05e15ecd2178987bc9deafd5fe4 Mon Sep 17 00:00:00 2001
 From: Thomas Monjalon <thomas@monjalon.net>
 Date: Fri, 16 Nov 2018 17:58:51 +0100
 Subject: [PATCH] kni: fix possible uninitialized variable
 
+[ upstream commit a17842c1421c1b26f9deed4f6684abdba06e7a56 ]
+
 This error can be raised:
 	lib/librte_kni/rte_kni.c:531:15: error:
 	'req' may be used uninitialized in this function
@@ -13,7 +15,6 @@
 and a NULL initialization is harmless here.
 
 Fixes: 3fc5ca2f6352 ("kni: initial import")
-Cc: stable@dpdk.org
 
 Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
 ---
@@ -21,10 +22,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c
-index c9726d4f8..73aeccccf 100644
+index 0c6641bfa..12656a9d4 100644
 --- a/lib/librte_kni/rte_kni.c
 +++ b/lib/librte_kni/rte_kni.c
-@@ -483,7 +483,7 @@ int
+@@ -532,7 +532,7 @@ int
  rte_kni_handle_request(struct rte_kni *kni)
  {
  	unsigned ret;

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'config: enable more than 128 cores for arm64' has been queued to LTS release 16.11.9
  2018-11-26 12:49             ` [dpdk-stable] patch 'eal: fix build with -O1' " Luca Boccassi
  2018-11-26 12:49               ` [dpdk-stable] patch 'kni: fix possible uninitialized variable' " Luca Boccassi
@ 2018-11-26 12:49               ` Luca Boccassi
  2018-11-26 12:49               ` [dpdk-stable] patch 'net/ixgbe: fix TDH register write' " Luca Boccassi
                                 ` (2 subsequent siblings)
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-26 12:49 UTC (permalink / raw)
  To: Joyce Kong; +Cc: Gavin Hu, Jerin Jacob, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/28/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 85ebca219ae443e3189cab83fe51fbff76b702cb Mon Sep 17 00:00:00 2001
From: Joyce Kong <joyce.kong@arm.com>
Date: Thu, 22 Nov 2018 15:37:07 +0800
Subject: [PATCH] config: enable more than 128 cores for arm64

[ upstream commit 9b47ed438ab9dba47856c8e93880b88d94715519 ]

When running dpdk applications on cores whose ids are bigger
than original max_core setting, eal error as below:
EAL: Detected 104 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: invalid core list
-l CORELIST core indexes between 0 and 128

The fix is to increase max_core to 256 on arm64 platform.

Fixes: b3ce00e5 ("mk: introduce ARMv8 architecture")

Signed-off-by: Joyce Kong <joyce.kong@arm.com>
Reviewed-by: Gavin Hu <gavin.hu@arm.com>
Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 config/defconfig_arm64-armv8a-linuxapp-gcc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/config/defconfig_arm64-armv8a-linuxapp-gcc b/config/defconfig_arm64-armv8a-linuxapp-gcc
index 6321884c8..3dbf69e54 100644
--- a/config/defconfig_arm64-armv8a-linuxapp-gcc
+++ b/config/defconfig_arm64-armv8a-linuxapp-gcc
@@ -41,6 +41,7 @@ CONFIG_RTE_FORCE_INTRINSICS=y
 
 CONFIG_RTE_TOOLCHAIN="gcc"
 CONFIG_RTE_TOOLCHAIN_GCC=y
+CONFIG_RTE_MAX_LCORE=256
 
 CONFIG_RTE_EAL_IGB_UIO=n
 
-- 
2.19.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-26 12:45:13.669450513 +0000
+++ 0003-config-enable-more-than-128-cores-for-arm64.patch	2018-11-26 12:45:13.603202331 +0000
@@ -1,8 +1,10 @@
-From 9b47ed438ab9dba47856c8e93880b88d94715519 Mon Sep 17 00:00:00 2001
+From 85ebca219ae443e3189cab83fe51fbff76b702cb Mon Sep 17 00:00:00 2001
 From: Joyce Kong <joyce.kong@arm.com>
 Date: Thu, 22 Nov 2018 15:37:07 +0800
 Subject: [PATCH] config: enable more than 128 cores for arm64
 
+[ upstream commit 9b47ed438ab9dba47856c8e93880b88d94715519 ]
+
 When running dpdk applications on cores whose ids are bigger
 than original max_core setting, eal error as below:
 EAL: Detected 104 lcore(s)
@@ -13,37 +15,26 @@
 The fix is to increase max_core to 256 on arm64 platform.
 
 Fixes: b3ce00e5 ("mk: introduce ARMv8 architecture")
-Cc: stable@dpdk.org
 
 Signed-off-by: Joyce Kong <joyce.kong@arm.com>
 Reviewed-by: Gavin Hu <gavin.hu@arm.com>
 Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
 ---
- config/arm/meson.build                     | 1 +
  config/defconfig_arm64-armv8a-linuxapp-gcc | 1 +
- 2 files changed, 2 insertions(+)
+ 1 file changed, 1 insertion(+)
 
-diff --git a/config/arm/meson.build b/config/arm/meson.build
-index b75513855..3f917250d 100644
---- a/config/arm/meson.build
-+++ b/config/arm/meson.build
-@@ -46,6 +46,7 @@ flags_common_default = [
- 
- flags_generic = [
- 	['RTE_MACHINE', '"armv8a"'],
-+	['RTE_MAX_LCORE', 256],
- 	['RTE_CACHE_LINE_SIZE', 128]]
- flags_cavium = [
- 	['RTE_MACHINE', '"thunderx"'],
 diff --git a/config/defconfig_arm64-armv8a-linuxapp-gcc b/config/defconfig_arm64-armv8a-linuxapp-gcc
-index 184274437..a6ed90c51 100644
+index 6321884c8..3dbf69e54 100644
 --- a/config/defconfig_arm64-armv8a-linuxapp-gcc
 +++ b/config/defconfig_arm64-armv8a-linuxapp-gcc
-@@ -6,3 +6,4 @@
+@@ -41,6 +41,7 @@ CONFIG_RTE_FORCE_INTRINSICS=y
  
  CONFIG_RTE_TOOLCHAIN="gcc"
  CONFIG_RTE_TOOLCHAIN_GCC=y
 +CONFIG_RTE_MAX_LCORE=256
+ 
+ CONFIG_RTE_EAL_IGB_UIO=n
+ 
 -- 
 2.19.2
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'net/ixgbe: fix TDH register write' has been queued to LTS release 16.11.9
  2018-11-26 12:49             ` [dpdk-stable] patch 'eal: fix build with -O1' " Luca Boccassi
  2018-11-26 12:49               ` [dpdk-stable] patch 'kni: fix possible uninitialized variable' " Luca Boccassi
  2018-11-26 12:49               ` [dpdk-stable] patch 'config: enable more than 128 cores for arm64' " Luca Boccassi
@ 2018-11-26 12:49               ` Luca Boccassi
  2018-11-26 12:49               ` [dpdk-stable] patch 'bus/pci: fix allocation of device path' " Luca Boccassi
  2018-11-28 10:11               ` [dpdk-stable] patch 'fix dpdk.org URLs' " Luca Boccassi
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-26 12:49 UTC (permalink / raw)
  To: Yanglong Wu; +Cc: Qi Zhang, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/28/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From 959bee3ddbf0ebec8248dd7fd4e62f4a37aedc0b Mon Sep 17 00:00:00 2001
From: Yanglong Wu <yanglong.wu@intel.com>
Date: Tue, 20 Nov 2018 13:59:21 +0800
Subject: [PATCH] net/ixgbe: fix TDH register write

[ upstream commit ff30a020bb400f04bf64a91416993862f45f9ada ]

The only time that software should write to the TDH register
is after a reset (hardware reset or CTRL.RST) and
before enabling the transmit function (TXDCTL.ENABLE).
If software were to write to this register while the transmit
function was enabled, the on-chip descriptor buffers might
be invalidated and the hardware could become confused.

Fixes: 029fd06d40fa ("ixgbe: queue start and stop")

Signed-off-by: Yanglong Wu <yanglong.wu@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ixgbe/ixgbe_rxtx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
index 55afb5393..4b1a6f48e 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx.c
@@ -5000,6 +5000,7 @@ ixgbe_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
 
 	if (tx_queue_id < dev->data->nb_tx_queues) {
 		txq = dev->data->tx_queues[tx_queue_id];
+		IXGBE_WRITE_REG(hw, IXGBE_TDH(txq->reg_idx), 0);
 		txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(txq->reg_idx));
 		txdctl |= IXGBE_TXDCTL_ENABLE;
 		IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(txq->reg_idx), txdctl);
@@ -5017,7 +5018,6 @@ ixgbe_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
 					     "Tx Queue %d", tx_queue_id);
 		}
 		rte_wmb();
-		IXGBE_WRITE_REG(hw, IXGBE_TDH(txq->reg_idx), 0);
 		IXGBE_WRITE_REG(hw, IXGBE_TDT(txq->reg_idx), 0);
 		dev->data->tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED;
 	} else
-- 
2.19.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-26 12:45:13.687842423 +0000
+++ 0004-net-ixgbe-fix-TDH-register-write.patch	2018-11-26 12:45:13.611202330 +0000
@@ -1,8 +1,10 @@
-From ff30a020bb400f04bf64a91416993862f45f9ada Mon Sep 17 00:00:00 2001
+From 959bee3ddbf0ebec8248dd7fd4e62f4a37aedc0b Mon Sep 17 00:00:00 2001
 From: Yanglong Wu <yanglong.wu@intel.com>
 Date: Tue, 20 Nov 2018 13:59:21 +0800
 Subject: [PATCH] net/ixgbe: fix TDH register write
 
+[ upstream commit ff30a020bb400f04bf64a91416993862f45f9ada ]
+
 The only time that software should write to the TDH register
 is after a reset (hardware reset or CTRL.RST) and
 before enabling the transmit function (TXDCTL.ENABLE).
@@ -11,7 +13,6 @@
 be invalidated and the hardware could become confused.
 
 Fixes: 029fd06d40fa ("ixgbe: queue start and stop")
-Cc: stable@dpdk.org
 
 Signed-off-by: Yanglong Wu <yanglong.wu@intel.com>
 Acked-by: Qi Zhang <qi.z.zhang@intel.com>
@@ -20,25 +21,25 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
-index 2f0262ae1..ddc7efa87 100644
+index 55afb5393..4b1a6f48e 100644
 --- a/drivers/net/ixgbe/ixgbe_rxtx.c
 +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
-@@ -5264,6 +5264,7 @@ ixgbe_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
- 	hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
- 
- 	txq = dev->data->tx_queues[tx_queue_id];
-+	IXGBE_WRITE_REG(hw, IXGBE_TDH(txq->reg_idx), 0);
- 	txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(txq->reg_idx));
- 	txdctl |= IXGBE_TXDCTL_ENABLE;
- 	IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(txq->reg_idx), txdctl);
-@@ -5281,7 +5282,6 @@ ixgbe_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
- 				tx_queue_id);
- 	}
- 	rte_wmb();
--	IXGBE_WRITE_REG(hw, IXGBE_TDH(txq->reg_idx), 0);
- 	IXGBE_WRITE_REG(hw, IXGBE_TDT(txq->reg_idx), 0);
- 	dev->data->tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED;
+@@ -5000,6 +5000,7 @@ ixgbe_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
  
+ 	if (tx_queue_id < dev->data->nb_tx_queues) {
+ 		txq = dev->data->tx_queues[tx_queue_id];
++		IXGBE_WRITE_REG(hw, IXGBE_TDH(txq->reg_idx), 0);
+ 		txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(txq->reg_idx));
+ 		txdctl |= IXGBE_TXDCTL_ENABLE;
+ 		IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(txq->reg_idx), txdctl);
+@@ -5017,7 +5018,6 @@ ixgbe_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
+ 					     "Tx Queue %d", tx_queue_id);
+ 		}
+ 		rte_wmb();
+-		IXGBE_WRITE_REG(hw, IXGBE_TDH(txq->reg_idx), 0);
+ 		IXGBE_WRITE_REG(hw, IXGBE_TDT(txq->reg_idx), 0);
+ 		dev->data->tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED;
+ 	} else
 -- 
 2.19.2
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'bus/pci: fix allocation of device path' has been queued to LTS release 16.11.9
  2018-11-26 12:49             ` [dpdk-stable] patch 'eal: fix build with -O1' " Luca Boccassi
                                 ` (2 preceding siblings ...)
  2018-11-26 12:49               ` [dpdk-stable] patch 'net/ixgbe: fix TDH register write' " Luca Boccassi
@ 2018-11-26 12:49               ` Luca Boccassi
  2018-11-28 10:11               ` [dpdk-stable] patch 'fix dpdk.org URLs' " Luca Boccassi
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-26 12:49 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: Stephen Hemminger, Andrew Rybchenko, Maxime Coquelin, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/28/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From ab3e3cc4c18ddf98842dae15bf23d14febe8447a Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Fri, 23 Nov 2018 00:29:45 +0000
Subject: [PATCH] bus/pci: fix allocation of device path

[ upstream commit d3110b124af64199b0901223c7e0117f7480480f ]

The pci_resource_by_index called strlen() on uninitialized
memory which would lead to the wrong size of memory allocated
for the path portion of the resource map. This would either cause
excessively large allocation, or worse memory corruption.

Coverity issue: 300868
Fixes: ea9d56226e72 ("pci: introduce function to map uio resource by index")

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal_pci_uio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
index 42280678f..3ca217f49 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
@@ -327,7 +327,7 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
 			loc->function, res_idx);
 
 	/* allocate memory to keep path */
-	maps[map_idx].path = rte_malloc(NULL, strlen(devname) + 1, 0);
+	maps[map_idx].path = rte_malloc(NULL, sizeof(devname), 0);
 	if (maps[map_idx].path == NULL) {
 		RTE_LOG(ERR, EAL, "Cannot allocate memory for path: %s\n",
 				strerror(errno));
-- 
2.19.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-26 12:45:13.711098953 +0000
+++ 0005-bus-pci-fix-allocation-of-device-path.patch	2018-11-26 12:45:13.611202330 +0000
@@ -1,8 +1,10 @@
-From d3110b124af64199b0901223c7e0117f7480480f Mon Sep 17 00:00:00 2001
+From ab3e3cc4c18ddf98842dae15bf23d14febe8447a Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Fri, 23 Nov 2018 00:29:45 +0000
 Subject: [PATCH] bus/pci: fix allocation of device path
 
+[ upstream commit d3110b124af64199b0901223c7e0117f7480480f ]
+
 The pci_resource_by_index called strlen() on uninitialized
 memory which would lead to the wrong size of memory allocated
 for the path portion of the resource map. This would either cause
@@ -10,22 +12,21 @@
 
 Coverity issue: 300868
 Fixes: ea9d56226e72 ("pci: introduce function to map uio resource by index")
-Cc: stable@dpdk.org
 
 Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
 ---
- drivers/bus/pci/linux/pci_uio.c | 2 +-
+ lib/librte_eal/linuxapp/eal/eal_pci_uio.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/drivers/bus/pci/linux/pci_uio.c b/drivers/bus/pci/linux/pci_uio.c
-index a7c14421a..09ecbb7aa 100644
---- a/drivers/bus/pci/linux/pci_uio.c
-+++ b/drivers/bus/pci/linux/pci_uio.c
-@@ -296,7 +296,7 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
- 	maps = uio_res->maps;
+diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
+index 42280678f..3ca217f49 100644
+--- a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
++++ b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
+@@ -327,7 +327,7 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
+ 			loc->function, res_idx);
  
  	/* allocate memory to keep path */
 -	maps[map_idx].path = rte_malloc(NULL, strlen(devname) + 1, 0);

^ permalink raw reply	[flat|nested] 118+ messages in thread

* [dpdk-stable] patch 'fix dpdk.org URLs' has been queued to LTS release 16.11.9
  2018-11-26 12:49             ` [dpdk-stable] patch 'eal: fix build with -O1' " Luca Boccassi
                                 ` (3 preceding siblings ...)
  2018-11-26 12:49               ` [dpdk-stable] patch 'bus/pci: fix allocation of device path' " Luca Boccassi
@ 2018-11-28 10:11               ` Luca Boccassi
  4 siblings, 0 replies; 118+ messages in thread
From: Luca Boccassi @ 2018-11-28 10:11 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: John McNamara, dpdk stable

Hi,

FYI, your patch has been queued to LTS release 16.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/30/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Luca Boccassi

---
>From ff637d47cfeee333681c487373df10de31a68f00 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Mon, 26 Nov 2018 18:51:14 +0100
Subject: [PATCH] fix dpdk.org URLs

[ upstream commit 43d162bc168e5c66346acf9f464495a088a5a9f0 ]

The DPDK website has a new URL scheme since June 2018.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 doc/guides/contributing/documentation.rst        | 4 ++--
 doc/guides/contributing/patches.rst              | 8 ++++----
 doc/guides/cryptodevs/qat.rst                    | 3 +--
 doc/guides/freebsd_gsg/install_from_ports.rst    | 2 +-
 doc/guides/howto/flow_bifurcation.rst            | 2 +-
 doc/guides/linux_gsg/nic_perf_intel_platform.rst | 2 +-
 doc/guides/nics/enic.rst                         | 2 +-
 7 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/doc/guides/contributing/documentation.rst b/doc/guides/contributing/documentation.rst
index 2cfb1a298..2545abc78 100644
--- a/doc/guides/contributing/documentation.rst
+++ b/doc/guides/contributing/documentation.rst
@@ -81,7 +81,7 @@ added to by the developer.
 * **API documentation**
 
   The API documentation explains how to use the public DPDK functions.
-  The `API index page <http://dpdk.org/doc/api/>`_ shows the generated API documentation with related groups of functions.
+  The `API index page <http://doc.dpdk.org/api/>`_ shows the generated API documentation with related groups of functions.
 
   The API documentation should be updated via Doxygen comments when new functions are added.
 
@@ -669,7 +669,7 @@ The following are some guidelines for use of Doxygen in the DPDK API documentati
        */
 
   In the API documentation the functions will be rendered as links, see the
-  `online section of the rte_ethdev.h docs <http://dpdk.org/doc/api/rte__ethdev_8h.html>`_ that contains the above text.
+  `online section of the rte_ethdev.h docs <http://doc.dpdk.org/api/rte__ethdev_8h.html>`_ that contains the above text.
 
 * The ``@see`` keyword can be used to create a *see also* link to another file or library.
   This directive should be placed on one line at the bottom of the documentation section.
diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst
index 729aea717..db851b51f 100644
--- a/doc/guides/contributing/patches.rst
+++ b/doc/guides/contributing/patches.rst
@@ -22,9 +22,9 @@ The DPDK development process has the following features:
 * Patches are reviewed publicly on the mailing list.
 * Successfully reviewed patches are merged to the master branch of the repository.
 
-The mailing list for DPDK development is `dev@dpdk.org <http://dpdk.org/ml/archives/dev/>`_.
-Contributors will need to `register for the mailing list <http://dpdk.org/ml/listinfo/dev>`_ in order to submit patches.
-It is also worth registering for the DPDK `Patchwork <http://dpdk.org/dev/patchwork/project/dpdk/list/>`_
+The mailing list for DPDK development is `dev@dpdk.org <http://mails.dpdk.org/archives/dev/>`_.
+Contributors will need to `register for the mailing list <http://mails.dpdk.org/listinfo/dev>`_ in order to submit patches.
+It is also worth registering for the DPDK `Patchwork <http://patches.dpdk.org/project/dpdk/list/>`_
 
 The development process requires some familiarity with the ``git`` version control system.
 Refer to the `Pro Git Book <http://www.git-scm.com/book/>`_ for further information.
@@ -347,7 +347,7 @@ If the patch is in relation to a previous email thread you can add it to the sam
    git send-email --to dev@dpdk.org --in-reply-to <1234-foo@bar.com> 000*.patch
 
 The Message ID can be found in the raw text of emails or at the top of each Patchwork patch,
-`for example <http://dpdk.org/dev/patchwork/patch/7646/>`_.
+`for example <http://patches.dpdk.org/patch/7646/>`_.
 Shallow threading (``--thread --no-chain-reply-to``) is preferred for a patch series.
 
 Once submitted your patches will appear on the mailing list and in Patchwork.
diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
index 2173819e5..c46a62eaf 100644
--- a/doc/guides/cryptodevs/qat.rst
+++ b/doc/guides/cryptodevs/qat.rst
@@ -89,7 +89,7 @@ To use the DPDK QAT PMD an SRIOV-enabled QAT kernel driver is required. The
 VF devices exposed by this driver will be used by QAT PMD.
 
 To enable QAT in DPDK, follow the instructions mentioned in
-http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html
+http://doc.dpdk.org/guides/linux_gsg/build_dpdk.html
 
 Quick instructions as follows:
 
@@ -107,7 +107,6 @@ For **Intel QuickAssist Technology C62x** and **Intel QuickAssist Technology C3x
 device, kernel 4.5 or greater is needed.
 See instructions for `Installation using kernel.org driver`_ below.
 
-
 Installation using 01.org QAT driver
 ------------------------------------
 
diff --git a/doc/guides/freebsd_gsg/install_from_ports.rst b/doc/guides/freebsd_gsg/install_from_ports.rst
index 817702911..44bbdfef6 100644
--- a/doc/guides/freebsd_gsg/install_from_ports.rst
+++ b/doc/guides/freebsd_gsg/install_from_ports.rst
@@ -89,7 +89,7 @@ environmental variables should be set as below:
 .. note::
 
    To install a copy of the DPDK compiled using gcc, please download the
-   official DPDK package from http://dpdk.org/ and install manually using
+   official DPDK package from http://core.dpdk.org/download/ and install manually using
    the instructions given in the next chapter, :ref:`building_from_source`
 
 An example application can therefore be copied to a user's home directory and
diff --git a/doc/guides/howto/flow_bifurcation.rst b/doc/guides/howto/flow_bifurcation.rst
index 0d7226ae6..cf5d69420 100644
--- a/doc/guides/howto/flow_bifurcation.rst
+++ b/doc/guides/howto/flow_bifurcation.rst
@@ -296,4 +296,4 @@ The typical procedure to achieve this is as follows:
      'not involved', while ``00`` or no mask means 'involved'.
 
    * For more details of the configuration, refer to the
-     `cloud filter test plan <http://dpdk.org/browse/tools/dts/tree/test_plans/cloud_filter_test_plan.rst>`_
+     `cloud filter test plan <http://git.dpdk.org/tools/dts/tree/test_plans/cloud_filter_test_plan.rst>`_
diff --git a/doc/guides/linux_gsg/nic_perf_intel_platform.rst b/doc/guides/linux_gsg/nic_perf_intel_platform.rst
index d4a83624e..e6cf1b94a 100644
--- a/doc/guides/linux_gsg/nic_perf_intel_platform.rst
+++ b/doc/guides/linux_gsg/nic_perf_intel_platform.rst
@@ -64,7 +64,7 @@ This aligns with the previous output which showed that each channel has one memo
 Network Interface Card Requirements
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Use a `DPDK supported <http://dpdk.org/doc/nics>`_ high end NIC such as the Intel XL710 40GbE.
+Use a `DPDK supported <http://core.dpdk.org/supported/>`_ high end NIC such as the Intel XL710 40GbE.
 
 Make sure each NIC has been flashed the latest version of NVM/firmware.
 
diff --git a/doc/guides/nics/enic.rst b/doc/guides/nics/enic.rst
index 36e6f070e..7738829e6 100644
--- a/doc/guides/nics/enic.rst
+++ b/doc/guides/nics/enic.rst
@@ -39,7 +39,7 @@ How to obtain ENIC PMD integrated DPDK
 --------------------------------------
 
 ENIC PMD support is integrated into the DPDK suite. dpdk-<version>.tar.gz
-should be downloaded from http://dpdk.org
+should be downloaded from http://core.dpdk.org/download/
 
 
 Configuration information
-- 
2.19.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-28 10:11:04.149106304 +0000
+++ 0001-fix-dpdk.org-URLs.patch	2018-11-28 10:11:04.127868924 +0000
@@ -1,134 +1,29 @@
-From 43d162bc168e5c66346acf9f464495a088a5a9f0 Mon Sep 17 00:00:00 2001
+From ff637d47cfeee333681c487373df10de31a68f00 Mon Sep 17 00:00:00 2001
 From: Thomas Monjalon <thomas@monjalon.net>
 Date: Mon, 26 Nov 2018 18:51:14 +0100
 Subject: [PATCH] fix dpdk.org URLs
 
-The DPDK website has a new URL scheme since June 2018.
+[ upstream commit 43d162bc168e5c66346acf9f464495a088a5a9f0 ]
 
-Cc: stable@dpdk.org
+The DPDK website has a new URL scheme since June 2018.
 
 Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
 Acked-by: John McNamara <john.mcnamara@intel.com>
 ---
- app/test-eventdev/test_order_atq.c               |  2 +-
- app/test-eventdev/test_order_queue.c             |  2 +-
- app/test-eventdev/test_perf_atq.c                |  2 +-
- app/test-eventdev/test_perf_queue.c              |  2 +-
- app/test-eventdev/test_pipeline_atq.c            |  2 +-
- app/test-eventdev/test_pipeline_queue.c          |  2 +-
- doc/build-sdk-meson.txt                          |  2 +-
- doc/guides/contributing/documentation.rst        |  4 ++--
- doc/guides/contributing/patches.rst              | 14 +++++++-------
- doc/guides/contributing/stable.rst               |  6 +++---
- doc/guides/cryptodevs/qat.rst                    |  4 ++--
- doc/guides/freebsd_gsg/install_from_ports.rst    |  2 +-
- doc/guides/howto/flow_bifurcation.rst            |  2 +-
- doc/guides/linux_gsg/nic_perf_intel_platform.rst |  2 +-
- doc/guides/nics/enic.rst                         |  2 +-
- doc/guides/prog_guide/cryptodev_lib.rst          |  2 +-
- doc/guides/prog_guide/event_timer_adapter.rst    |  4 ++--
- doc/guides/prog_guide/switch_representation.rst  |  4 ++--
- doc/guides/rel_notes/release_18_05.rst           | 10 +++++-----
- doc/guides/tools/testbbdev.rst                   |  3 ++-
- license/exceptions.txt                           |  2 +-
- 21 files changed, 38 insertions(+), 37 deletions(-)
+ doc/guides/contributing/documentation.rst        | 4 ++--
+ doc/guides/contributing/patches.rst              | 8 ++++----
+ doc/guides/cryptodevs/qat.rst                    | 3 +--
+ doc/guides/freebsd_gsg/install_from_ports.rst    | 2 +-
+ doc/guides/howto/flow_bifurcation.rst            | 2 +-
+ doc/guides/linux_gsg/nic_perf_intel_platform.rst | 2 +-
+ doc/guides/nics/enic.rst                         | 2 +-
+ 7 files changed, 11 insertions(+), 12 deletions(-)
 
-diff --git a/app/test-eventdev/test_order_atq.c b/app/test-eventdev/test_order_atq.c
-index 35debcfdc..4a8546e7f 100644
---- a/app/test-eventdev/test_order_atq.c
-+++ b/app/test-eventdev/test_order_atq.c
-@@ -7,7 +7,7 @@
- 
- #include "test_order_common.h"
- 
--/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */
-+/* See http://doc.dpdk.org/guides/tools/testeventdev.html for test details */
- 
- static inline __attribute__((always_inline)) void
- order_atq_process_stage_0(struct rte_event *const ev)
-diff --git a/app/test-eventdev/test_order_queue.c b/app/test-eventdev/test_order_queue.c
-index 17f7b9845..a272c7a57 100644
---- a/app/test-eventdev/test_order_queue.c
-+++ b/app/test-eventdev/test_order_queue.c
-@@ -7,7 +7,7 @@
- 
- #include "test_order_common.h"
- 
--/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */
-+/* See http://doc.dpdk.org/guides/tools/testeventdev.html for test details */
- 
- static inline __attribute__((always_inline)) void
- order_queue_process_stage_0(struct rte_event *const ev)
-diff --git a/app/test-eventdev/test_perf_atq.c b/app/test-eventdev/test_perf_atq.c
-index 9715a2ce8..b76ca605b 100644
---- a/app/test-eventdev/test_perf_atq.c
-+++ b/app/test-eventdev/test_perf_atq.c
-@@ -4,7 +4,7 @@
- 
- #include "test_perf_common.h"
- 
--/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */
-+/* See http://doc.dpdk.org/guides/tools/testeventdev.html for test details */
- 
- static inline int
- atq_nb_event_queues(struct evt_options *opt)
-diff --git a/app/test-eventdev/test_perf_queue.c b/app/test-eventdev/test_perf_queue.c
-index 04ce94192..8efdec6f9 100644
---- a/app/test-eventdev/test_perf_queue.c
-+++ b/app/test-eventdev/test_perf_queue.c
-@@ -4,7 +4,7 @@
- 
- #include "test_perf_common.h"
- 
--/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */
-+/* See http://doc.dpdk.org/guides/tools/testeventdev.html for test details */
- 
- static inline int
- perf_queue_nb_event_queues(struct evt_options *opt)
-diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c
-index c60635bf6..fc4cb3bb7 100644
---- a/app/test-eventdev/test_pipeline_atq.c
-+++ b/app/test-eventdev/test_pipeline_atq.c
-@@ -5,7 +5,7 @@
- 
- #include "test_pipeline_common.h"
- 
--/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */
-+/* See http://doc.dpdk.org/guides/tools/testeventdev.html for test details */
- 
- static __rte_always_inline int
- pipeline_atq_nb_event_queues(struct evt_options *opt)
-diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c
-index 25217008c..e35e9eb4c 100644
---- a/app/test-eventdev/test_pipeline_queue.c
-+++ b/app/test-eventdev/test_pipeline_queue.c
-@@ -5,7 +5,7 @@
- 
- #include "test_pipeline_common.h"
- 
--/* See http://dpdk.org/doc/guides/tools/testeventdev.html for test details */
-+/* See http://doc.dpdk.org/guides/tools/testeventdev.html for test details */
- 
- static __rte_always_inline int
- pipeline_queue_nb_event_queues(struct evt_options *opt)
-diff --git a/doc/build-sdk-meson.txt b/doc/build-sdk-meson.txt
-index a4dd09194..29a8bd387 100644
---- a/doc/build-sdk-meson.txt
-+++ b/doc/build-sdk-meson.txt
-@@ -4,7 +4,7 @@ INSTALLING DPDK USING THE MESON BUILD SYSTEM
- NOTE: Compiling and installing DPDK using ``meson`` and ``ninja``, rather
- than using ``make`` (GNU make) is EXPERIMENTAL. Official builds of DPDK
- should always be done using ``make``, as described in the ``Getting Started
--Guide`` documentation, and at "http://dpdk.org/doc/quick-start".
-+Guide`` documentation, and at "http://core.dpdk.org/doc/quick-start".
- 
- Summary
- --------
 diff --git a/doc/guides/contributing/documentation.rst b/doc/guides/contributing/documentation.rst
-index 0165990ed..c28a95c34 100644
+index 2cfb1a298..2545abc78 100644
 --- a/doc/guides/contributing/documentation.rst
 +++ b/doc/guides/contributing/documentation.rst
-@@ -83,7 +83,7 @@ added to by the developer.
+@@ -81,7 +81,7 @@ added to by the developer.
  * **API documentation**
  
    The API documentation explains how to use the public DPDK functions.
@@ -137,7 +32,7 @@
  
    The API documentation should be updated via Doxygen comments when new functions are added.
  
-@@ -653,7 +653,7 @@ The following are some guidelines for use of Doxygen in the DPDK API documentati
+@@ -669,7 +669,7 @@ The following are some guidelines for use of Doxygen in the DPDK API documentati
         */
  
    In the API documentation the functions will be rendered as links, see the
@@ -147,12 +42,12 @@
  * The ``@see`` keyword can be used to create a *see also* link to another file or library.
    This directive should be placed on one line at the bottom of the documentation section.
 diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst
-index ffeb50436..a64bb0368 100644
+index 729aea717..db851b51f 100644
 --- a/doc/guides/contributing/patches.rst
 +++ b/doc/guides/contributing/patches.rst
-@@ -28,9 +28,9 @@ The DPDK development process has the following features:
- * All sub-repositories are merged into main repository for ``-rc1`` and ``-rc2`` versions of the release.
- * After the ``-rc2`` release all patches should target the main repository.
+@@ -22,9 +22,9 @@ The DPDK development process has the following features:
+ * Patches are reviewed publicly on the mailing list.
+ * Successfully reviewed patches are merged to the master branch of the repository.
  
 -The mailing list for DPDK development is `dev@dpdk.org <http://dpdk.org/ml/archives/dev/>`_.
 -Contributors will need to `register for the mailing list <http://dpdk.org/ml/listinfo/dev>`_ in order to submit patches.
@@ -163,34 +58,7 @@
  
  The development process requires some familiarity with the ``git`` version control system.
  Refer to the `Pro Git Book <http://www.git-scm.com/book/>`_ for further information.
-@@ -130,7 +130,7 @@ main repository::
-     git clone git://dpdk.org/dpdk
-     git clone http://dpdk.org/git/dpdk
- 
--sub-repositories (`list <http://dpdk.org/browse/next>`_)::
-+sub-repositories (`list <http://git.dpdk.org/next>`_)::
- 
-     git clone git://dpdk.org/next/dpdk-next-*
-     git clone http://dpdk.org/git/next/dpdk-next-*
-@@ -286,7 +286,7 @@ in the body of the commit message. For example::
-      Signed-off-by: Alex Smith <alex.smith@example.com>
- 
- 
--`Bugzilla <https://dpdk.org/tracker>`_
-+`Bugzilla <https://bugs.dpdk.org>`_
- is a bug- or issue-tracking system.
- Bug-tracking systems allow individual or groups of developers
- effectively to keep track of outstanding problems with their product.
-@@ -308,7 +308,7 @@ Patch for Stable Releases
- ~~~~~~~~~~~~~~~~~~~~~~~~~
- 
- All fix patches to the master branch that are candidates for backporting
--should also be CCed to the `stable@dpdk.org <http://dpdk.org/ml/listinfo/stable>`_
-+should also be CCed to the `stable@dpdk.org <http://mails.dpdk.org/listinfo/stable>`_
- mailing list.
- In the commit message body the Cc: stable@dpdk.org should be inserted as follows::
- 
-@@ -509,7 +509,7 @@ If the patch is in relation to a previous email thread you can add it to the sam
+@@ -347,7 +347,7 @@ If the patch is in relation to a previous email thread you can add it to the sam
     git send-email --to dev@dpdk.org --in-reply-to <1234-foo@bar.com> 000*.patch
  
  The Message ID can be found in the raw text of emails or at the top of each Patchwork patch,
@@ -199,59 +67,32 @@
  Shallow threading (``--thread --no-chain-reply-to``) is preferred for a patch series.
  
  Once submitted your patches will appear on the mailing list and in Patchwork.
-diff --git a/doc/guides/contributing/stable.rst b/doc/guides/contributing/stable.rst
-index 1746c0461..2ac4f0a88 100644
---- a/doc/guides/contributing/stable.rst
-+++ b/doc/guides/contributing/stable.rst
-@@ -96,7 +96,7 @@ The Stable and LTS release are coordinated on the stable@dpdk.org mailing
- list.
- 
- All fix patches to the master branch that are candidates for backporting
--should also be CCed to the `stable@dpdk.org <http://dpdk.org/ml/listinfo/stable>`_
-+should also be CCed to the `stable@dpdk.org <http://mails.dpdk.org/listinfo/stable>`_
- mailing list.
- 
- 
-@@ -107,10 +107,10 @@ A Stable Release will be released by:
- 
- * Tagging the release with YY.MM.n (year, month, number).
- * Uploading a tarball of the release to dpdk.org.
--* Sending an announcement to the `announce@dpdk.org <http://dpdk.org/ml/listinfo/announce>`_
-+* Sending an announcement to the `announce@dpdk.org <http://mails.dpdk.org/listinfo/announce>`_
-   list.
- 
--Stable releases are available on the `dpdk.org download page <http://dpdk.org/download>`_.
-+Stable releases are available on the `dpdk.org download page <http://core.dpdk.org/download/>`_.
- 
- 
- ABI
 diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
-index 1db98685a..9fb9f01d1 100644
+index 2173819e5..c46a62eaf 100644
 --- a/doc/guides/cryptodevs/qat.rst
 +++ b/doc/guides/cryptodevs/qat.rst
-@@ -7,7 +7,7 @@ Intel(R) QuickAssist (QAT) Crypto Poll Mode Driver
- QAT documentation consists of three parts:
- 
- * Details of the symmetric crypto service below.
--* Details of the `compression service <http://dpdk.org/doc/guides/compressdevs/qat_comp.html>`_
-+* Details of the `compression service <http://doc.dpdk.org/guides/compressdevs/qat_comp.html>`_
-   in the compressdev drivers section.
- * Details of building the common QAT infrastructure and the PMDs to support the
-   above services. See :ref:`building_qat` below.
-@@ -124,7 +124,7 @@ Configuring and Building the DPDK QAT PMDs
+@@ -89,7 +89,7 @@ To use the DPDK QAT PMD an SRIOV-enabled QAT kernel driver is required. The
+ VF devices exposed by this driver will be used by QAT PMD.
  
+ To enable QAT in DPDK, follow the instructions mentioned in
+-http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html
++http://doc.dpdk.org/guides/linux_gsg/build_dpdk.html
+ 
+ Quick instructions as follows:
+ 
+@@ -107,7 +107,6 @@ For **Intel QuickAssist Technology C62x** and **Intel QuickAssist Technology C3x
+ device, kernel 4.5 or greater is needed.
+ See instructions for `Installation using kernel.org driver`_ below.
+ 
+-
+ Installation using 01.org QAT driver
+ ------------------------------------
  
- Further information on configuring, building and installing DPDK is described
--`here <http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html>`_.
-+`here <http://doc.dpdk.org/guides/linux_gsg/build_dpdk.html>`_.
- 
- 
- Quick instructions for QAT cryptodev PMD are as follows:
 diff --git a/doc/guides/freebsd_gsg/install_from_ports.rst b/doc/guides/freebsd_gsg/install_from_ports.rst
-index d6ce847f6..253328eb1 100644
+index 817702911..44bbdfef6 100644
 --- a/doc/guides/freebsd_gsg/install_from_ports.rst
 +++ b/doc/guides/freebsd_gsg/install_from_ports.rst
-@@ -62,7 +62,7 @@ environmental variables should be set as below:
+@@ -89,7 +89,7 @@ environmental variables should be set as below:
  .. note::
  
     To install a copy of the DPDK compiled using gcc, please download the
@@ -261,17 +102,17 @@
  
  An example application can therefore be copied to a user's home directory and
 diff --git a/doc/guides/howto/flow_bifurcation.rst b/doc/guides/howto/flow_bifurcation.rst
-index bc9a0934d..eabf4d730 100644
+index 0d7226ae6..cf5d69420 100644
 --- a/doc/guides/howto/flow_bifurcation.rst
 +++ b/doc/guides/howto/flow_bifurcation.rst
-@@ -268,4 +268,4 @@ The typical procedure to achieve this is as follows:
+@@ -296,4 +296,4 @@ The typical procedure to achieve this is as follows:
       'not involved', while ``00`` or no mask means 'involved'.
  
     * For more details of the configuration, refer to the
 -     `cloud filter test plan <http://dpdk.org/browse/tools/dts/tree/test_plans/cloud_filter_test_plan.rst>`_
 +     `cloud filter test plan <http://git.dpdk.org/tools/dts/tree/test_plans/cloud_filter_test_plan.rst>`_
 diff --git a/doc/guides/linux_gsg/nic_perf_intel_platform.rst b/doc/guides/linux_gsg/nic_perf_intel_platform.rst
-index 987cd0a5a..cf5c9e0db 100644
+index d4a83624e..e6cf1b94a 100644
 --- a/doc/guides/linux_gsg/nic_perf_intel_platform.rst
 +++ b/doc/guides/linux_gsg/nic_perf_intel_platform.rst
 @@ -64,7 +64,7 @@ This aligns with the previous output which showed that each channel has one memo
@@ -284,10 +125,10 @@
  Make sure each NIC has been flashed the latest version of NVM/firmware.
  
 diff --git a/doc/guides/nics/enic.rst b/doc/guides/nics/enic.rst
-index 746d89123..bc38f51aa 100644
+index 36e6f070e..7738829e6 100644
 --- a/doc/guides/nics/enic.rst
 +++ b/doc/guides/nics/enic.rst
-@@ -14,7 +14,7 @@ How to obtain ENIC PMD integrated DPDK
+@@ -39,7 +39,7 @@ How to obtain ENIC PMD integrated DPDK
  --------------------------------------
  
  ENIC PMD support is integrated into the DPDK suite. dpdk-<version>.tar.gz
@@ -296,134 +137,6 @@
  
  
  Configuration information
-diff --git a/doc/guides/prog_guide/cryptodev_lib.rst b/doc/guides/prog_guide/cryptodev_lib.rst
-index 90d01e936..8ee33c875 100644
---- a/doc/guides/prog_guide/cryptodev_lib.rst
-+++ b/doc/guides/prog_guide/cryptodev_lib.rst
-@@ -1043,4 +1043,4 @@ Asymmetric Crypto Device API
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 
- The cryptodev Library API is described in the
--`DPDK API Reference <http://dpdk.org/doc/api/>`_
-+`DPDK API Reference <http://doc.dpdk.org/api/>`_
-diff --git a/doc/guides/prog_guide/event_timer_adapter.rst b/doc/guides/prog_guide/event_timer_adapter.rst
-index 7bbbdfe90..3b4446ee9 100644
---- a/doc/guides/prog_guide/event_timer_adapter.rst
-+++ b/doc/guides/prog_guide/event_timer_adapter.rst
-@@ -5,7 +5,7 @@ Event Timer Adapter Library
- ===========================
- 
- The DPDK
--`Event Device library <http://dpdk.org/doc/guides/prog_guide/eventdev.html>`_
-+`Event Device library <http://doc.dpdk.org/guides/prog_guide/eventdev.html>`_
- introduces an event driven programming model which presents applications with
- an alternative to the polling model traditionally used in DPDK
- applications. Event devices can be coupled with arbitrary components to provide
-@@ -21,7 +21,7 @@ The Event Timer Adapter library is designed to interface with hardware or
- software implementations of the timer mechanism; it will query an eventdev PMD
- to determine which implementation should be used.  The default software
- implementation manages timers using the DPDK
--`Timer library <http://dpdk.org/doc/guides/prog_guide/timer_lib.html>`_.
-+`Timer library <http://doc.dpdk.org/guides/prog_guide/timer_lib.html>`_.
- 
- Examples of using the API are presented in the `API Overview`_ and
- `Processing Timer Expiry Events`_ sections.  Code samples are abstracted and
-diff --git a/doc/guides/prog_guide/switch_representation.rst b/doc/guides/prog_guide/switch_representation.rst
-index f5ee516f6..e5c78c234 100644
---- a/doc/guides/prog_guide/switch_representation.rst
-+++ b/doc/guides/prog_guide/switch_representation.rst
-@@ -349,7 +349,7 @@ interconnection without introducing new concepts and whole new API to
- implement them. This is described in `flow API (rte_flow)`_.
- 
- .. [6] `Generic flow API (rte_flow)
--       <http://dpdk.org/doc/guides/prog_guide/rte_flow.html>`_
-+       <http://doc.dpdk.org/guides/prog_guide/rte_flow.html>`_
- 
- Flow API (rte_flow)
- -------------------
-@@ -737,7 +737,7 @@ Examples in subsequent sections apply to hypervisor applications only and
- are based on port representors **A**, **B** and **C**.
- 
- .. [2] `Flow syntax
--    <http://dpdk.org/doc/guides/testpmd_app_ug/testpmd_funcs.html#flow-syntax>`_
-+    <http://doc.dpdk.org/guides/testpmd_app_ug/testpmd_funcs.html#flow-syntax>`_
- 
- Associating VF 1 with Physical Port 0
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-diff --git a/doc/guides/rel_notes/release_18_05.rst b/doc/guides/rel_notes/release_18_05.rst
-index 8dc22b011..3413d8de1 100644
---- a/doc/guides/rel_notes/release_18_05.rst
-+++ b/doc/guides/rel_notes/release_18_05.rst
-@@ -594,7 +594,7 @@ Known Issues
-   The issue is explained in more detail, including potential workarounds,
-   in the Bugzilla entry referenced below.
- 
--  Bugzilla entry: https://dpdk.org/tracker/show_bug.cgi?id=50
-+  Bugzilla entry: https://bugs.dpdk.org/show_bug.cgi?id=50
- 
- * **pdump is not compatible with old applications.**
- 
-@@ -619,21 +619,21 @@ Known Issues
-   needs to be run per-shell session, or before every test run. This change
-   can also be made persistent by adding ``kern.coredump=0`` to ``/etc/sysctl.conf``.
- 
--  Bugzilla entry: https://dpdk.org/tracker/show_bug.cgi?id=53
-+  Bugzilla entry: https://bugs.dpdk.org/show_bug.cgi?id=53
- 
- * **ixgbe PMD crash on hotplug detach when no VF created.**
- 
-   ixgbe PMD uninit path cause null pointer dereference because of port representor
-   cleanup when number of VF is zero.
- 
--  Bugzilla entry: https://dpdk.org/tracker/show_bug.cgi?id=57
-+  Bugzilla entry: https://bugs.dpdk.org/show_bug.cgi?id=57
- 
- * **Bonding PMD may fail to accept new slave ports in certain conditions.**
- 
-   In certain conditions when using testpmd,
-   bonding may fail to register new slave ports.
- 
--  Bugzilla entry: https://dpdk.org/tracker/show_bug.cgi?id=52.
-+  Bugzilla entry: https://bugs.dpdk.org/show_bug.cgi?id=52.
- 
- * **Unexpected performance regression in Vhost library.**
- 
-@@ -641,7 +641,7 @@ Known Issues
-   drop. However, in some setups, bigger performance drops have been measured
-   when running micro-benchmarks.
- 
--  Bugzilla entry: https://dpdk.org/tracker/show_bug.cgi?id=48
-+  Bugzilla entry: https://bugs.dpdk.org/show_bug.cgi?id=48
- 
- 
- Shared Library Versions
-diff --git a/doc/guides/tools/testbbdev.rst b/doc/guides/tools/testbbdev.rst
-index 234a64f53..5caa90239 100644
---- a/doc/guides/tools/testbbdev.rst
-+++ b/doc/guides/tools/testbbdev.rst
-@@ -62,7 +62,8 @@ The following are the command-line options:
- 
- ``-e EAL_PARAMS, --eal_params EAL_PARAMS``
-  Specifies EAL arguments which are passed to the test app. For more details,
-- refer to DPDK documentation at http://dpdk.org/doc.
-+ refer to DPDK documentation at
-+ http://doc.dpdk.org/guides/linux_gsg/linux_eal_parameters.html.
- 
- ``-t TIMEOUT, --timeout TIMEOUT``
-  Specifies timeout in seconds. If not specified timeout is set to 300 seconds.
-diff --git a/license/exceptions.txt b/license/exceptions.txt
-index f2ef03706..f1cfa462f 100644
---- a/license/exceptions.txt
-+++ b/license/exceptions.txt
-@@ -1,7 +1,7 @@
- This file will record any exceptions in DPDK Project with respect to DPDK
- IP License policy as defined in DPDK Charter available at:
- 
--	http://dpdk.org/about/charter#ip
-+	https://www.dpdk.org/charter/
- 
- Note that following licenses are not exceptions:-
- 	- BSD-3-Clause
 -- 
 2.19.2
 

^ permalink raw reply	[flat|nested] 118+ messages in thread

end of thread, other threads:[~2018-11-28 10:11 UTC | newest]

Thread overview: 118+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-27  8:43 [dpdk-stable] patch 'net/bonding: support matching QinQ ethertype' has been queued to LTS release 16.11.9 Luca Boccassi
2018-09-27  8:43 ` [dpdk-stable] patch 'net/nfp: fix live MAC changes not supported' " Luca Boccassi
2018-09-27  8:43 ` [dpdk-stable] patch 'doc: fix wrong usage of bind command' " Luca Boccassi
2018-09-27  8:43 ` [dpdk-stable] patch 'examples/vhost: remove unnecessary constant' " Luca Boccassi
2018-09-27  8:44 ` [dpdk-stable] patch 'vhost-user: drop connection on message handling failures' " Luca Boccassi
2018-09-27  8:44 ` [dpdk-stable] patch 'net/bonding: use evenly distributed default RSS RETA' " Luca Boccassi
2018-09-27  8:44 ` [dpdk-stable] patch 'net/bonding: do not ignore RSS key on device config' " Luca Boccassi
2018-09-27  8:44 ` [dpdk-stable] patch 'app/testpmd: optimize mbuf pool allocation' " Luca Boccassi
2018-10-03 16:21 ` [dpdk-stable] patch 'acl: forbid rule with priority zero' " Luca Boccassi
2018-10-03 16:52   ` [dpdk-stable] patch 'net/nfp: fix mbuf flags with checksum good' " Luca Boccassi
2018-10-03 16:52     ` [dpdk-stable] patch 'ethdev: fix doxygen comment to be with structure' " Luca Boccassi
2018-10-03 16:52     ` [dpdk-stable] patch 'net/virtio: add missing supported features' " Luca Boccassi
2018-10-03 16:52     ` [dpdk-stable] patch 'vhost: fix corner case for enqueue operation' " Luca Boccassi
2018-10-03 16:52     ` [dpdk-stable] patch 'net/bonding: stop and deactivate slaves on stop' " Luca Boccassi
2018-10-03 16:52     ` [dpdk-stable] patch 'test/crypto: fix number of queue pairs' " Luca Boccassi
2018-10-15 11:51   ` [dpdk-stable] patch 'net/i40e: fix send admin queue command before init' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: fix partition id calculation for X722' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: properly clean resources' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: gracefully clean the " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/i40e/base: correct global reset timeout calculation' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/ixgbe: wait longer for link after fiber MAC setup' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/enic: do not use non-standard integer types' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/enic: set Rx VLAN offload flag for non-stripped packets' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/nfp: fix RSS' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix logging to include device name' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix to disable further interrupts' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix call to link handling periodic function' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnx2x: fix to add PHY lock' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: fix uninitialized pointer access in Tx' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: set MAC filtering as outer for non tunnel frames' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: set a VNIC as default only once' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: remove excess log messages' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/bnxt: reduce polling interval for valid bit' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix csum parse-tunnel command invocation' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix displaying RSS hash functions' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'doc: add VFIO in ENA guide' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'app/testpmd: fix duplicate exit' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
2018-10-15 11:51     ` [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' " Luca Boccassi
2018-10-29 12:53     ` [dpdk-stable] patch 'net/e1000: do not error out if Rx drop enable is set' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'eal: use correct data type for bitmap slab operations' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'vhost: fix payload size of reply' " Luca Boccassi
2018-10-29 13:12         ` Ilya Maximets
2018-10-29 16:32           ` Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'kvargs: fix processing a null list' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'test/hash: fix bucket size in perf test' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'hash: fix key store element alignment' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix build on Linux 4.19' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix kernel FIFO synchronization' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'test/kni: check module dependency' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'hash: remove unnecessary pause' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'kni: fix build on Linux < 3.14' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: keep promiscuous on if allmulticast is enabled' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: enable loopback function for X722 MAC' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'net/i40e: update Tx offload mask' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'net/ixgbe: " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'net/ena: fix passing RSS hash to mbuf' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'doc: fix typo in testpmd guide' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'ip_frag: fix overflow in key comparison' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'eal/linux: fix memory leak of logid' " Luca Boccassi
2018-10-29 12:53       ` [dpdk-stable] patch 'fix global variable issues' " Luca Boccassi
2018-11-08 18:00         ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Luca Boccassi
2018-11-08 18:00           ` [dpdk-stable] patch 'eal/linux: handle UIO read failure in interrupt handler' " Luca Boccassi
2018-11-08 18:00           ` [dpdk-stable] patch 'mk: disable gcc AVX512F support' " Luca Boccassi
2018-11-09  6:52             ` Christian Ehrhardt
2018-11-09 10:48               ` Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'eal: fix build with gcc 9.0' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'net/vhost: fix parameters string' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'net/virtio-user: do not reset owner when driver resets' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'net: fix build with pedantic' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'net/igb: update Tx offload mask' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'ip_frag: check fragment length of incoming packet' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'ip_frag: use key length for key comparison' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' " Luca Boccassi
2018-11-12 18:35             ` Luca Boccassi
2018-11-14 10:02               ` Alejandro Lucero
2018-11-14 11:07                 ` Luca Boccassi
2018-11-14 11:36                   ` Alejandro Lucero
2018-11-15 17:34                     ` Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'bus/pci: fix config r/w access' " Luca Boccassi
2018-11-08 18:18             ` Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'test/hash: fix build' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'igb_uio: issue FLR during open and release of device file' " Luca Boccassi
2018-11-08 18:16             ` Luca Boccassi
2018-11-09  9:32               ` Shijith Thotton
2018-11-09 10:43                 ` Luca Boccassi
2018-11-09 14:26               ` [dpdk-stable] patch 'igb_uio: remove device reset in open' " Luca Boccassi
2018-11-09 14:26                 ` [dpdk-stable] patch 'igb_uio: remove device reset in release' " Luca Boccassi
2018-11-08 18:01           ` [dpdk-stable] patch 'igb_uio: fix unexpected removal for hot-unplug' " Luca Boccassi
2018-11-19 12:25           ` [dpdk-stable] patch 'eal: introduce rte version of fls' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'eal: fix build' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'pci: fix parsing of address without function number' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/e1000/base: fix uninitialized variable' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/mlx5: fix build on PPC64' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/thunderx: fix Tx desc corruption in scatter-gather mode' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/virtio-user: fix typo in error message' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/virtio: fix unchecked return value' " Luca Boccassi
2018-11-19 12:48               ` Tiwei Bie
2018-11-19 12:52                 ` Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'vhost: remove unneeded null pointer check' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/bnx2x: fix VF link state update' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/bonding: fix crash when stopping mode 4 port' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'app/testpmd: fix L4 length for UDP checksum' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'ethdev: fix invalid configuration after failure' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/ixgbevf: fix link state' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'test/reorder: fix out of bound access' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/i40e: fix X710 Rx after reading some registers' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'net/ixgbe: fix maximum wait time in comment' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'examples/ipv4_multicast: fix leak of cloned packets' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'usertools: check for lspci dependency' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'doc: fix NUMA library name in Linux guide' " Luca Boccassi
2018-11-19 12:25             ` [dpdk-stable] patch 'doc: fix formatting in IP reassembly app " Luca Boccassi
2018-11-26 12:49             ` [dpdk-stable] patch 'eal: fix build with -O1' " Luca Boccassi
2018-11-26 12:49               ` [dpdk-stable] patch 'kni: fix possible uninitialized variable' " Luca Boccassi
2018-11-26 12:49               ` [dpdk-stable] patch 'config: enable more than 128 cores for arm64' " Luca Boccassi
2018-11-26 12:49               ` [dpdk-stable] patch 'net/ixgbe: fix TDH register write' " Luca Boccassi
2018-11-26 12:49               ` [dpdk-stable] patch 'bus/pci: fix allocation of device path' " Luca Boccassi
2018-11-28 10:11               ` [dpdk-stable] patch 'fix dpdk.org URLs' " Luca Boccassi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).