]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
patches for 4.9
authorSasha Levin <sashal@kernel.org>
Thu, 10 Jan 2019 06:20:16 +0000 (01:20 -0500)
committerSasha Levin <sashal@kernel.org>
Thu, 10 Jan 2019 06:20:16 +0000 (01:20 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
33 files changed:
queue-4.9/arm-dts-imx7d-nitrogen7-fix-the-description-of-the-w.patch [new file with mode: 0644]
queue-4.9/arm-imx-update-the-cpu-power-up-timing-setting-on-i..patch [new file with mode: 0644]
queue-4.9/bnx2x-clear-fip-mac-when-fcoe-offload-support-is-dis.patch [new file with mode: 0644]
queue-4.9/bnx2x-remove-configured-vlans-as-part-of-unload-sequ.patch [new file with mode: 0644]
queue-4.9/bnx2x-send-update-svid-ramrod-with-retry-poll-flags-.patch [new file with mode: 0644]
queue-4.9/checkstack.pl-fix-for-aarch64.patch [new file with mode: 0644]
queue-4.9/drivers-net-xgene-remove-unnecessary-forward-declara.patch [new file with mode: 0644]
queue-4.9/input-omap-keypad-fix-idle-configuration-to-not-bloc.patch [new file with mode: 0644]
queue-4.9/input-restore-ev_abs-abs_reserved.patch [new file with mode: 0644]
queue-4.9/lan78xx-resolve-issue-with-changing-mac-address.patch [new file with mode: 0644]
queue-4.9/net-hns-add-mac-pcs-config-when-enable-disable-mac.patch [new file with mode: 0644]
queue-4.9/net-hns-all-ports-can-not-work-when-insmod-hns-ko-af.patch [new file with mode: 0644]
queue-4.9/net-hns-avoid-net-reset-caused-by-pause-frames-storm.patch [new file with mode: 0644]
queue-4.9/net-hns-clean-rx-fbd-when-ae-stopped.patch [new file with mode: 0644]
queue-4.9/net-hns-fix-ntuple-filters-status-error.patch [new file with mode: 0644]
queue-4.9/net-hns-fixed-bug-that-netdev-was-opened-twice.patch [new file with mode: 0644]
queue-4.9/net-hns-free-irq-when-exit-from-abnormal-branch.patch [new file with mode: 0644]
queue-4.9/net-hns-incorrect-offset-address-used-for-some-regis.patch [new file with mode: 0644]
queue-4.9/net-hns-some-registers-use-wrong-address-according-t.patch [new file with mode: 0644]
queue-4.9/net-netxen-fix-a-missing-check-and-an-uninitialized-.patch [new file with mode: 0644]
queue-4.9/netfilter-ipset-do-not-call-ipset_nest_end-after-nla.patch [new file with mode: 0644]
queue-4.9/netfilter-seqadj-re-load-tcp-header-pointer-after-po.patch [new file with mode: 0644]
queue-4.9/pinctrl-meson-fix-pull-enable-register-calculation.patch [new file with mode: 0644]
queue-4.9/powerpc-fix-coff-zimage-booting-on-old-powermacs.patch [new file with mode: 0644]
queue-4.9/scsi-bnx2fc-fix-null-dereference-in-error-handling.patch [new file with mode: 0644]
queue-4.9/scsi-target-iscsi-cxgbit-add-missing-spin_lock_init.patch [new file with mode: 0644]
queue-4.9/scsi-target-iscsi-cxgbit-fix-csk-leak.patch [new file with mode: 0644]
queue-4.9/serial-sunsu-fix-refcount-leak.patch [new file with mode: 0644]
queue-4.9/series [new file with mode: 0644]
queue-4.9/sunrpc-fix-a-race-with-xprt_connecting.patch [new file with mode: 0644]
queue-4.9/vxge-ensure-data0-is-initialized-in-when-fetching-fi.patch [new file with mode: 0644]
queue-4.9/w90p910_ether-remove-incorrect-__init-annotation.patch [new file with mode: 0644]
queue-4.9/xfrm-fix-bucket-count-reported-to-userspace.patch [new file with mode: 0644]

diff --git a/queue-4.9/arm-dts-imx7d-nitrogen7-fix-the-description-of-the-w.patch b/queue-4.9/arm-dts-imx7d-nitrogen7-fix-the-description-of-the-w.patch
new file mode 100644 (file)
index 0000000..4f2f525
--- /dev/null
@@ -0,0 +1,57 @@
+From 0539799fd12f879b04971ee72b0716d7b92d24d7 Mon Sep 17 00:00:00 2001
+From: Fabio Estevam <festevam@gmail.com>
+Date: Wed, 5 Dec 2018 09:05:30 -0200
+Subject: ARM: dts: imx7d-nitrogen7: Fix the description of the Wifi clock
+
+[ Upstream commit f15096f12a4e9340168df5fdd9201aa8ed60d59e ]
+
+According to bindings/regulator/fixed-regulator.txt the 'clocks' and
+'clock-names' properties are not valid ones.
+
+In order to turn on the Wifi clock the correct location for describing
+the CLKO2 clock is via a mmc-pwrseq handle, so do it accordingly.
+
+Fixes: 56354959cfec ("ARM: dts: imx: add Boundary Devices Nitrogen7 board")
+Signed-off-by: Fabio Estevam <festevam@gmail.com>
+Acked-by: Troy Kisky <troy.kisky@boundarydevices.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx7d-nitrogen7.dts | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx7d-nitrogen7.dts b/arch/arm/boot/dts/imx7d-nitrogen7.dts
+index ce08f180f213..080a4ea841c9 100644
+--- a/arch/arm/boot/dts/imx7d-nitrogen7.dts
++++ b/arch/arm/boot/dts/imx7d-nitrogen7.dts
+@@ -117,13 +117,17 @@
+               compatible = "regulator-fixed";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+-              clocks = <&clks IMX7D_CLKO2_ROOT_DIV>;
+-              clock-names = "slow";
+               regulator-name = "reg_wlan";
+               startup-delay-us = <70000>;
+               gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
++
++      usdhc2_pwrseq: usdhc2_pwrseq {
++              compatible = "mmc-pwrseq-simple";
++              clocks = <&clks IMX7D_CLKO2_ROOT_DIV>;
++              clock-names = "ext_clock";
++      };
+ };
+ &adc1 {
+@@ -430,6 +434,7 @@
+       bus-width = <4>;
+       non-removable;
+       vmmc-supply = <&reg_wlan>;
++      mmc-pwrseq = <&usdhc2_pwrseq>;
+       cap-power-off-card;
+       keep-power-in-suspend;
+       status = "okay";
+-- 
+2.19.1
+
diff --git a/queue-4.9/arm-imx-update-the-cpu-power-up-timing-setting-on-i..patch b/queue-4.9/arm-imx-update-the-cpu-power-up-timing-setting-on-i..patch
new file mode 100644 (file)
index 0000000..f81817b
--- /dev/null
@@ -0,0 +1,40 @@
+From cff7a8afd7b2985256d3cf9570cd5dfb7c8bfa7d Mon Sep 17 00:00:00 2001
+From: Anson Huang <anson.huang@nxp.com>
+Date: Tue, 4 Dec 2018 03:17:45 +0000
+Subject: ARM: imx: update the cpu power up timing setting on i.mx6sx
+
+[ Upstream commit 1e434b703248580b7aaaf8a115d93e682f57d29f ]
+
+The sw2iso count should cover ARM LDO ramp-up time,
+the MAX ARM LDO ramp-up time may be up to more than
+100us on some boards, this patch sets sw2iso to 0xf
+(~384us) which is the reset value, and it is much
+more safe to cover different boards, since we have
+observed that some customer boards failed with current
+setting of 0x2.
+
+Fixes: 05136f0897b5 ("ARM: imx: support arm power off in cpuidle for i.mx6sx")
+Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
+Reviewed-by: Fabio Estevam <festevam@gmail.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mach-imx/cpuidle-imx6sx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-imx/cpuidle-imx6sx.c b/arch/arm/mach-imx/cpuidle-imx6sx.c
+index c5a5c3a70ab1..edb888ac5ad3 100644
+--- a/arch/arm/mach-imx/cpuidle-imx6sx.c
++++ b/arch/arm/mach-imx/cpuidle-imx6sx.c
+@@ -108,7 +108,7 @@ int __init imx6sx_cpuidle_init(void)
+        * except for power up sw2iso which need to be
+        * larger than LDO ramp up time.
+        */
+-      imx_gpc_set_arm_power_up_timing(2, 1);
++      imx_gpc_set_arm_power_up_timing(0xf, 1);
+       imx_gpc_set_arm_power_down_timing(1, 1);
+       return cpuidle_register(&imx6sx_cpuidle_driver, NULL);
+-- 
+2.19.1
+
diff --git a/queue-4.9/bnx2x-clear-fip-mac-when-fcoe-offload-support-is-dis.patch b/queue-4.9/bnx2x-clear-fip-mac-when-fcoe-offload-support-is-dis.patch
new file mode 100644 (file)
index 0000000..a47e13f
--- /dev/null
@@ -0,0 +1,39 @@
+From 8629fe078695e4615da99daeb6e69d3d4e7ba36e Mon Sep 17 00:00:00 2001
+From: Sudarsana Reddy Kalluru <sudarsana.kalluru@cavium.com>
+Date: Wed, 12 Dec 2018 08:57:00 -0800
+Subject: bnx2x: Clear fip MAC when fcoe offload support is disabled
+
+[ Upstream commit bbf666c1af916ed74795493c564df6fad462cc80 ]
+
+On some customer setups it was observed that shmem contains a non-zero fip
+MAC for 57711 which would lead to enabling of SW FCoE.
+Add a software workaround to clear the bad fip mac address if no FCoE
+connections are supported.
+
+Signed-off-by: Sudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com>
+Signed-off-by: Ariel Elior <ariel.elior@cavium.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+index 54dab4eac804..77f53e4122c3 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+@@ -11733,8 +11733,10 @@ static void bnx2x_get_fcoe_info(struct bnx2x *bp)
+        * If maximum allowed number of connections is zero -
+        * disable the feature.
+        */
+-      if (!bp->cnic_eth_dev.max_fcoe_conn)
++      if (!bp->cnic_eth_dev.max_fcoe_conn) {
+               bp->flags |= NO_FCOE_FLAG;
++              eth_zero_addr(bp->fip_mac);
++      }
+ }
+ static void bnx2x_get_cnic_info(struct bnx2x *bp)
+-- 
+2.19.1
+
diff --git a/queue-4.9/bnx2x-remove-configured-vlans-as-part-of-unload-sequ.patch b/queue-4.9/bnx2x-remove-configured-vlans-as-part-of-unload-sequ.patch
new file mode 100644 (file)
index 0000000..7106775
--- /dev/null
@@ -0,0 +1,114 @@
+From ae9dea6ae8df84694a1ffff2ccdd62eb7d8e635b Mon Sep 17 00:00:00 2001
+From: Sudarsana Reddy Kalluru <sudarsana.kalluru@cavium.com>
+Date: Wed, 12 Dec 2018 08:57:01 -0800
+Subject: bnx2x: Remove configured vlans as part of unload sequence.
+
+[ Upstream commit 04f05230c5c13b1384f66f5186a68d7499e34622 ]
+
+Vlans are not getting removed when drivers are unloaded. The recent storm
+firmware versions had added safeguards against re-configuring an already
+configured vlan. As a result, PF inner reload flows (e.g., mtu change)
+might trigger an assertion.
+This change is going to remove vlans (same as we do for MACs) when doing
+a chip cleanup during unload.
+
+Signed-off-by: Sudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com>
+Signed-off-by: Ariel Elior <ariel.elior@cavium.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../net/ethernet/broadcom/bnx2x/bnx2x_main.c  | 34 +++++++++++++++----
+ .../net/ethernet/broadcom/bnx2x/bnx2x_sp.h    |  4 ++-
+ 2 files changed, 30 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+index 77f53e4122c3..4c412c52bcde 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+@@ -8462,6 +8462,7 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
+       /* Fill a user request section if needed */
+       if (!test_bit(RAMROD_CONT, ramrod_flags)) {
+               ramrod_param.user_req.u.vlan.vlan = vlan;
++              __set_bit(BNX2X_VLAN, &ramrod_param.user_req.vlan_mac_flags);
+               /* Set the command: ADD or DEL */
+               if (set)
+                       ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
+@@ -8482,6 +8483,27 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
+       return rc;
+ }
++static int bnx2x_del_all_vlans(struct bnx2x *bp)
++{
++      struct bnx2x_vlan_mac_obj *vlan_obj = &bp->sp_objs[0].vlan_obj;
++      unsigned long ramrod_flags = 0, vlan_flags = 0;
++      struct bnx2x_vlan_entry *vlan;
++      int rc;
++
++      __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
++      __set_bit(BNX2X_VLAN, &vlan_flags);
++      rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_flags, &ramrod_flags);
++      if (rc)
++              return rc;
++
++      /* Mark that hw forgot all entries */
++      list_for_each_entry(vlan, &bp->vlan_reg, link)
++              vlan->hw = false;
++      bp->vlan_cnt = 0;
++
++      return 0;
++}
++
+ int bnx2x_del_all_macs(struct bnx2x *bp,
+                      struct bnx2x_vlan_mac_obj *mac_obj,
+                      int mac_type, bool wait_for_comp)
+@@ -9320,6 +9342,11 @@ void bnx2x_chip_cleanup(struct bnx2x *bp, int unload_mode, bool keep_link)
+               BNX2X_ERR("Failed to schedule DEL commands for UC MACs list: %d\n",
+                         rc);
++      /* Remove all currently configured VLANs */
++      rc = bnx2x_del_all_vlans(bp);
++      if (rc < 0)
++              BNX2X_ERR("Failed to delete all VLANs\n");
++
+       /* Disable LLH */
+       if (!CHIP_IS_E1(bp))
+               REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0);
+@@ -13007,13 +13034,6 @@ static void bnx2x_vlan_configure(struct bnx2x *bp, bool set_rx_mode)
+ int bnx2x_vlan_reconfigure_vid(struct bnx2x *bp)
+ {
+-      struct bnx2x_vlan_entry *vlan;
+-
+-      /* The hw forgot all entries after reload */
+-      list_for_each_entry(vlan, &bp->vlan_reg, link)
+-              vlan->hw = false;
+-      bp->vlan_cnt = 0;
+-
+       /* Don't set rx mode here. Our caller will do it. */
+       bnx2x_vlan_configure(bp, false);
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
+index 0bf2fd470819..7a6e82db4231 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
+@@ -265,6 +265,7 @@ enum {
+       BNX2X_ETH_MAC,
+       BNX2X_ISCSI_ETH_MAC,
+       BNX2X_NETQ_ETH_MAC,
++      BNX2X_VLAN,
+       BNX2X_DONT_CONSUME_CAM_CREDIT,
+       BNX2X_DONT_CONSUME_CAM_CREDIT_DEST,
+ };
+@@ -272,7 +273,8 @@ enum {
+ #define BNX2X_VLAN_MAC_CMP_MASK       (1 << BNX2X_UC_LIST_MAC | \
+                                1 << BNX2X_ETH_MAC | \
+                                1 << BNX2X_ISCSI_ETH_MAC | \
+-                               1 << BNX2X_NETQ_ETH_MAC)
++                               1 << BNX2X_NETQ_ETH_MAC | \
++                               1 << BNX2X_VLAN)
+ #define BNX2X_VLAN_MAC_CMP_FLAGS(flags) \
+       ((flags) & BNX2X_VLAN_MAC_CMP_MASK)
+-- 
+2.19.1
+
diff --git a/queue-4.9/bnx2x-send-update-svid-ramrod-with-retry-poll-flags-.patch b/queue-4.9/bnx2x-send-update-svid-ramrod-with-retry-poll-flags-.patch
new file mode 100644 (file)
index 0000000..7139554
--- /dev/null
@@ -0,0 +1,72 @@
+From fd1be8f97468aeeb3e6004071c1b7f46ad61faf9 Mon Sep 17 00:00:00 2001
+From: Sudarsana Reddy Kalluru <sudarsana.kalluru@cavium.com>
+Date: Wed, 12 Dec 2018 08:57:03 -0800
+Subject: bnx2x: Send update-svid ramrod with retry/poll flags enabled
+
+[ Upstream commit 9061193c4ee065d3240fde06767c2e06ec61decc ]
+
+Driver sends update-SVID ramrod in the MFW notification path.
+If there is a pending ramrod, driver doesn't retry the command
+and storm firmware will never be updated with the SVID value.
+The patch adds changes to send update-svid ramrod in process context with
+retry/poll flags set.
+
+Signed-off-by: Sudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com>
+Signed-off-by: Ariel Elior <ariel.elior@cavium.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x.h      |  1 +
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 10 +++++++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+index d5e4c42662b6..162b809422f4 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+@@ -1278,6 +1278,7 @@ enum sp_rtnl_flag {
+       BNX2X_SP_RTNL_TX_STOP,
+       BNX2X_SP_RTNL_GET_DRV_VERSION,
+       BNX2X_SP_RTNL_CHANGE_UDP_PORT,
++      BNX2X_SP_RTNL_UPDATE_SVID,
+ };
+ enum bnx2x_iov_flag {
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+index 4c412c52bcde..0352089d0d98 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+@@ -2925,6 +2925,10 @@ static void bnx2x_handle_update_svid_cmd(struct bnx2x *bp)
+       func_params.f_obj = &bp->func_obj;
+       func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;
++      /* Prepare parameters for function state transitions */
++      __set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
++      __set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
++
+       if (IS_MF_UFP(bp) || IS_MF_BD(bp)) {
+               int func = BP_ABS_FUNC(bp);
+               u32 val;
+@@ -4301,7 +4305,8 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn)
+                               bnx2x_handle_eee_event(bp);
+                       if (val & DRV_STATUS_OEM_UPDATE_SVID)
+-                              bnx2x_handle_update_svid_cmd(bp);
++                              bnx2x_schedule_sp_rtnl(bp,
++                                      BNX2X_SP_RTNL_UPDATE_SVID, 0);
+                       if (bp->link_vars.periodic_flags &
+                           PERIODIC_FLAGS_LINK_EVENT) {
+@@ -10369,6 +10374,9 @@ static void bnx2x_sp_rtnl_task(struct work_struct *work)
+                              &bp->sp_rtnl_state))
+               bnx2x_update_mng_version(bp);
++      if (test_and_clear_bit(BNX2X_SP_RTNL_UPDATE_SVID, &bp->sp_rtnl_state))
++              bnx2x_handle_update_svid_cmd(bp);
++
+       if (test_and_clear_bit(BNX2X_SP_RTNL_CHANGE_UDP_PORT,
+                              &bp->sp_rtnl_state)) {
+               if (bnx2x_udp_port_update(bp)) {
+-- 
+2.19.1
+
diff --git a/queue-4.9/checkstack.pl-fix-for-aarch64.patch b/queue-4.9/checkstack.pl-fix-for-aarch64.patch
new file mode 100644 (file)
index 0000000..afd3ac1
--- /dev/null
@@ -0,0 +1,46 @@
+From 028644a92848e2a16ed43a5a643c94e5f0272514 Mon Sep 17 00:00:00 2001
+From: Qian Cai <cai@lca.pw>
+Date: Fri, 14 Dec 2018 14:17:20 -0800
+Subject: checkstack.pl: fix for aarch64
+
+[ Upstream commit f1733a1d3cd32a9492f4cf866be37bb46e10163d ]
+
+There is actually a space after "sp," like this,
+
+    ffff2000080813c8:       a9bb7bfd        stp     x29, x30, [sp, #-80]!
+
+Right now, checkstack.pl isn't able to print anything on aarch64,
+because it won't be able to match the stating objdump line of a function
+due to this missing space.  Hence, it displays every stack as zero-size.
+
+After this patch, checkpatch.pl is able to match the start of a
+function's objdump, and is then able to calculate each function's stack
+correctly.
+
+Link: http://lkml.kernel.org/r/20181207195843.38528-1-cai@lca.pw
+Signed-off-by: Qian Cai <cai@lca.pw>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ scripts/checkstack.pl | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl
+index dd8397894d5c..12a6940741fe 100755
+--- a/scripts/checkstack.pl
++++ b/scripts/checkstack.pl
+@@ -46,8 +46,8 @@ my (@stack, $re, $dre, $x, $xs, $funcre);
+       $xs     = "[0-9a-f ]";  # hex character or space
+       $funcre = qr/^$x* <(.*)>:$/;
+       if ($arch eq 'aarch64') {
+-              #ffffffc0006325cc:       a9bb7bfd        stp     x29, x30, [sp,#-80]!
+-              $re = qr/^.*stp.*sp,\#-([0-9]{1,8})\]\!/o;
++              #ffffffc0006325cc:       a9bb7bfd        stp     x29, x30, [sp, #-80]!
++              $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o;
+       } elsif ($arch eq 'arm') {
+               #c0008ffc:      e24dd064        sub     sp, sp, #100    ; 0x64
+               $re = qr/.*sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2})/o;
+-- 
+2.19.1
+
diff --git a/queue-4.9/drivers-net-xgene-remove-unnecessary-forward-declara.patch b/queue-4.9/drivers-net-xgene-remove-unnecessary-forward-declara.patch
new file mode 100644 (file)
index 0000000..84e67e6
--- /dev/null
@@ -0,0 +1,44 @@
+From e2b3f7b05cde9ed7fc6af3326761f2bb02d2dfc1 Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <natechancellor@gmail.com>
+Date: Mon, 10 Dec 2018 21:20:30 -0700
+Subject: drivers: net: xgene: Remove unnecessary forward declarations
+
+[ Upstream commit 2ab4c3426c0cf711d7147e3f559638e4ab88960e ]
+
+Clang warns:
+
+drivers/net/ethernet/apm/xgene/xgene_enet_main.c:33:36: warning:
+tentative array definition assumed to have one element
+static const struct acpi_device_id xgene_enet_acpi_match[];
+                                   ^
+1 warning generated.
+
+Both xgene_enet_acpi_match and xgene_enet_of_match are defined before
+their uses at the bottom of the file so this is unnecessary. When
+CONFIG_ACPI is disabled, ACPI_PTR becomes NULL so xgene_enet_acpi_match
+doesn't need to be defined.
+
+Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
+index fca2e428cd86..de4b5d267c30 100644
+--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
++++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
+@@ -29,9 +29,6 @@
+ #define RES_RING_CSR  1
+ #define RES_RING_CMD  2
+-static const struct of_device_id xgene_enet_of_match[];
+-static const struct acpi_device_id xgene_enet_acpi_match[];
+-
+ static void xgene_enet_init_bufpool(struct xgene_enet_desc_ring *buf_pool)
+ {
+       struct xgene_enet_raw_desc16 *raw_desc;
+-- 
+2.19.1
+
diff --git a/queue-4.9/input-omap-keypad-fix-idle-configuration-to-not-bloc.patch b/queue-4.9/input-omap-keypad-fix-idle-configuration-to-not-bloc.patch
new file mode 100644 (file)
index 0000000..f487da5
--- /dev/null
@@ -0,0 +1,83 @@
+From 6a9e27c55a5343b4fffb9dd3a6db5b5ae36999d0 Mon Sep 17 00:00:00 2001
+From: Tony Lindgren <tony@atomide.com>
+Date: Tue, 4 Dec 2018 13:52:49 -0800
+Subject: Input: omap-keypad - fix idle configuration to not block SoC idle
+ states
+
+[ Upstream commit e2ca26ec4f01486661b55b03597c13e2b9c18b73 ]
+
+With PM enabled, I noticed that pressing a key on the droid4 keyboard will
+block deeper idle states for the SoC. Let's fix this by using IRQF_ONESHOT
+and stop constantly toggling the device OMAP4_KBD_IRQENABLE register as
+suggested by Dmitry Torokhov <dmitry.torokhov@gmail.com>.
+
+From the hardware point of view, looks like we need to manage the registers
+for OMAP4_KBD_IRQENABLE and OMAP4_KBD_WAKEUPENABLE together to avoid
+blocking deeper SoC idle states. And with toggling of OMAP4_KBD_IRQENABLE
+register now gone with IRQF_ONESHOT, also the SoC idle state problem is
+gone during runtime. We still also need to clear OMAP4_KBD_WAKEUPENABLE in
+omap4_keypad_close() though to pair it with omap4_keypad_open() to prevent
+blocking deeper SoC idle states after rmmod omap4-keypad.
+
+Reported-by: Pavel Machek <pavel@ucw.cz>
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/keyboard/omap4-keypad.c | 16 ++++------------
+ 1 file changed, 4 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/input/keyboard/omap4-keypad.c b/drivers/input/keyboard/omap4-keypad.c
+index f78c464899db..3d2c60c8de83 100644
+--- a/drivers/input/keyboard/omap4-keypad.c
++++ b/drivers/input/keyboard/omap4-keypad.c
+@@ -126,12 +126,8 @@ static irqreturn_t omap4_keypad_irq_handler(int irq, void *dev_id)
+ {
+       struct omap4_keypad *keypad_data = dev_id;
+-      if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS)) {
+-              /* Disable interrupts */
+-              kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
+-                               OMAP4_VAL_IRQDISABLE);
++      if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS))
+               return IRQ_WAKE_THREAD;
+-      }
+       return IRQ_NONE;
+ }
+@@ -173,11 +169,6 @@ static irqreturn_t omap4_keypad_irq_thread_fn(int irq, void *dev_id)
+       kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
+                        kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS));
+-      /* enable interrupts */
+-      kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
+-              OMAP4_DEF_IRQENABLE_EVENTEN |
+-                              OMAP4_DEF_IRQENABLE_LONGKEY);
+-
+       return IRQ_HANDLED;
+ }
+@@ -214,9 +205,10 @@ static void omap4_keypad_close(struct input_dev *input)
+       disable_irq(keypad_data->irq);
+-      /* Disable interrupts */
++      /* Disable interrupts and wake-up events */
+       kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
+                        OMAP4_VAL_IRQDISABLE);
++      kbd_writel(keypad_data, OMAP4_KBD_WAKEUPENABLE, 0);
+       /* clear pending interrupts */
+       kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
+@@ -364,7 +356,7 @@ static int omap4_keypad_probe(struct platform_device *pdev)
+       }
+       error = request_threaded_irq(keypad_data->irq, omap4_keypad_irq_handler,
+-                                   omap4_keypad_irq_thread_fn, 0,
++                                   omap4_keypad_irq_thread_fn, IRQF_ONESHOT,
+                                    "omap4-keypad", keypad_data);
+       if (error) {
+               dev_err(&pdev->dev, "failed to register interrupt\n");
+-- 
+2.19.1
+
diff --git a/queue-4.9/input-restore-ev_abs-abs_reserved.patch b/queue-4.9/input-restore-ev_abs-abs_reserved.patch
new file mode 100644 (file)
index 0000000..cb30082
--- /dev/null
@@ -0,0 +1,43 @@
+From 58bbd03b5d54824ec0aedb70bb5084de0de61ae0 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu, 6 Dec 2018 09:03:36 +1000
+Subject: Input: restore EV_ABS ABS_RESERVED
+
+[ Upstream commit c201e3808e0e4be9b98d192802085a9f491bd80c ]
+
+ABS_RESERVED was added in d9ca1c990a7 and accidentally removed as part of
+ffe0e7cf290f5c9 when the high-resolution scrolling code was removed.
+
+Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+Reviewed-by: Martin Kepplinger <martin.kepplinger@ginzinger.com>
+Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/uapi/linux/input-event-codes.h | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
+index 3af60ee69053..b584868e1b26 100644
+--- a/include/uapi/linux/input-event-codes.h
++++ b/include/uapi/linux/input-event-codes.h
+@@ -739,6 +739,15 @@
+ #define ABS_MISC              0x28
++/*
++ * 0x2e is reserved and should not be used in input drivers.
++ * It was used by HID as ABS_MISC+6 and userspace needs to detect if
++ * the next ABS_* event is correct or is just ABS_MISC + n.
++ * We define here ABS_RESERVED so userspace can rely on it and detect
++ * the situation described above.
++ */
++#define ABS_RESERVED          0x2e
++
+ #define ABS_MT_SLOT           0x2f    /* MT slot being modified */
+ #define ABS_MT_TOUCH_MAJOR    0x30    /* Major axis of touching ellipse */
+ #define ABS_MT_TOUCH_MINOR    0x31    /* Minor axis (omit if circular) */
+-- 
+2.19.1
+
diff --git a/queue-4.9/lan78xx-resolve-issue-with-changing-mac-address.patch b/queue-4.9/lan78xx-resolve-issue-with-changing-mac-address.patch
new file mode 100644 (file)
index 0000000..969db42
--- /dev/null
@@ -0,0 +1,53 @@
+From 7459b5845a66e3c1f24bfcc4558e6556e6ab08c4 Mon Sep 17 00:00:00 2001
+From: Jason Martinsen <jasonmartinsen@msn.com>
+Date: Tue, 18 Dec 2018 05:38:22 +0000
+Subject: lan78xx: Resolve issue with changing MAC address
+
+[ Upstream commit 15515aaaa69659c502003926a2067ee76176148a ]
+
+Current state for the lan78xx driver does not allow for changing the
+MAC address of the interface, without either removing the module (if
+you compiled it that way) or rebooting the machine.  If you attempt to
+change the MAC address, ifconfig will show the new address, however,
+the system/interface will not respond to any traffic using that
+configuration.  A few short-term options to work around this are to
+unload the module and reload it with the new MAC address, change the
+interface to "promisc", or reboot with the correct configuration to
+change the MAC.
+
+This patch enables the ability to change the MAC address via fairly normal means...
+ifdown <interface>
+modify entry in /etc/network/interfaces OR a similar method
+ifup <interface>
+Then test via any network communication, such as ICMP requests to gateway.
+
+My only test platform for this patch has been a raspberry pi model 3b+.
+
+Signed-off-by: Jason Martinsen <jasonmartinsen@msn.com>
+
+-----
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/usb/lan78xx.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
+index 6b4e38105b72..e143a7fe9320 100644
+--- a/drivers/net/usb/lan78xx.c
++++ b/drivers/net/usb/lan78xx.c
+@@ -2014,6 +2014,10 @@ static int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
+       ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
+       ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
++      /* Added to support MAC address changes */
++      ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
++      ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
++
+       return 0;
+ }
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-add-mac-pcs-config-when-enable-disable-mac.patch b/queue-4.9/net-hns-add-mac-pcs-config-when-enable-disable-mac.patch
new file mode 100644 (file)
index 0000000..be7cec6
--- /dev/null
@@ -0,0 +1,76 @@
+From 7b6e8a8b3e9b1e7d1d6a23a8016dc1cf418915cf Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:28 +0800
+Subject: net: hns: Add mac pcs config when enable|disable mac
+
+[ Upstream commit 726ae5c9e5f0c18eca8ea5296b526242c3e89822 ]
+
+In some case, when mac enable|disable and adjust link, may cause hard to
+link(or abnormal) between mac and phy. This patch adds the code for rx PCS
+to avoid this bug.
+
+Disable the rx PCS when driver disable the gmac, and enable the rx PCS
+when driver enable the mac.
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c | 14 ++++++++++----
+ drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h  |  1 +
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
+index 02a03bccde7b..95967470d423 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
+@@ -67,11 +67,14 @@ static void hns_gmac_enable(void *mac_drv, enum mac_commom_mode mode)
+       struct mac_driver *drv = (struct mac_driver *)mac_drv;
+       /*enable GE rX/tX */
+-      if ((mode == MAC_COMM_MODE_TX) || (mode == MAC_COMM_MODE_RX_AND_TX))
++      if (mode == MAC_COMM_MODE_TX || mode == MAC_COMM_MODE_RX_AND_TX)
+               dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_TX_EN_B, 1);
+-      if ((mode == MAC_COMM_MODE_RX) || (mode == MAC_COMM_MODE_RX_AND_TX))
++      if (mode == MAC_COMM_MODE_RX || mode == MAC_COMM_MODE_RX_AND_TX) {
++              /* enable rx pcs */
++              dsaf_set_dev_bit(drv, GMAC_PCS_RX_EN_REG, 0, 0);
+               dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 1);
++      }
+ }
+ static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
+@@ -79,11 +82,14 @@ static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
+       struct mac_driver *drv = (struct mac_driver *)mac_drv;
+       /*disable GE rX/tX */
+-      if ((mode == MAC_COMM_MODE_TX) || (mode == MAC_COMM_MODE_RX_AND_TX))
++      if (mode == MAC_COMM_MODE_TX || mode == MAC_COMM_MODE_RX_AND_TX)
+               dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_TX_EN_B, 0);
+-      if ((mode == MAC_COMM_MODE_RX) || (mode == MAC_COMM_MODE_RX_AND_TX))
++      if (mode == MAC_COMM_MODE_RX || mode == MAC_COMM_MODE_RX_AND_TX) {
++              /* disable rx pcs */
++              dsaf_set_dev_bit(drv, GMAC_PCS_RX_EN_REG, 0, 1);
+               dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 0);
++      }
+ }
+ /* hns_gmac_get_en - get port enable
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
+index bf0c5a60f5f1..6f3ec2f1535d 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
+@@ -528,6 +528,7 @@
+ #define GMAC_LD_LINK_COUNTER_REG              0x01D0UL
+ #define GMAC_LOOP_REG                         0x01DCUL
+ #define GMAC_RECV_CONTROL_REG                 0x01E0UL
++#define GMAC_PCS_RX_EN_REG                    0x01E4UL
+ #define GMAC_VLAN_CODE_REG                    0x01E8UL
+ #define GMAC_RX_OVERRUN_CNT_REG                       0x01ECUL
+ #define GMAC_RX_LENGTHFIELD_ERR_CNT_REG               0x01F4UL
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-all-ports-can-not-work-when-insmod-hns-ko-af.patch b/queue-4.9/net-hns-all-ports-can-not-work-when-insmod-hns-ko-af.patch
new file mode 100644 (file)
index 0000000..b60a210
--- /dev/null
@@ -0,0 +1,84 @@
+From 031267131f59a90b49f7a024f763effdf05f4673 Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:21 +0800
+Subject: net: hns: All ports can not work when insmod hns ko after rmmod.
+
+[ Upstream commit 308c6cafde0147616da45e3a928adae55c428deb ]
+
+There are two test cases:
+1. Remove the 4 modules:hns_enet_drv/hns_dsaf/hnae/hns_mdio,
+   and install them again, must use "ifconfig down/ifconfig up"
+   command pair to bring port to work.
+
+   This patch calls phy_stop function when init phy to fix this bug.
+
+2. Remove the 2 modules:hns_enet_drv/hns_dsaf, and install them again,
+   all ports can not use anymore, because of the phy devices register
+   failed(phy devices already exists).
+
+   Phy devices are registered when hns_dsaf installed, this patch
+   removes them when hns_dsaf removed.
+
+The two cases are sometimes related, fixing the second case also requires
+fixing the first case, so fix them together.
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 15 +++++++++++++++
+ drivers/net/ethernet/hisilicon/hns/hns_enet.c     |  3 +++
+ 2 files changed, 18 insertions(+)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
+index ec8c738af726..b6429be2b8bd 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
+@@ -724,6 +724,17 @@ static void hns_mac_register_phy(struct hns_mac_cb *mac_cb)
+                       mac_cb->mac_id, addr);
+ }
++static void hns_mac_remove_phydev(struct hns_mac_cb *mac_cb)
++{
++      if (!to_acpi_device_node(mac_cb->fw_port) || !mac_cb->phy_dev)
++              return;
++
++      phy_device_remove(mac_cb->phy_dev);
++      phy_device_free(mac_cb->phy_dev);
++
++      mac_cb->phy_dev = NULL;
++}
++
+ #define MAC_MEDIA_TYPE_MAX_LEN                16
+ static const struct {
+@@ -1030,7 +1041,11 @@ void hns_mac_uninit(struct dsaf_device *dsaf_dev)
+       int max_port_num = hns_mac_get_max_port_num(dsaf_dev);
+       for (i = 0; i < max_port_num; i++) {
++              if (!dsaf_dev->mac_cb[i])
++                      continue;
++
+               dsaf_dev->misc_op->cpld_reset_led(dsaf_dev->mac_cb[i]);
++              hns_mac_remove_phydev(dsaf_dev->mac_cb[i]);
+               dsaf_dev->mac_cb[i] = NULL;
+       }
+ }
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+index 92ed6534ceae..12d90c04931b 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+@@ -1079,6 +1079,9 @@ int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h)
+       if (h->phy_if == PHY_INTERFACE_MODE_XGMII)
+               phy_dev->autoneg = false;
++      if (h->phy_if == PHY_INTERFACE_MODE_SGMII)
++              phy_stop(phy_dev);
++
+       return 0;
+ }
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-avoid-net-reset-caused-by-pause-frames-storm.patch b/queue-4.9/net-hns-avoid-net-reset-caused-by-pause-frames-storm.patch
new file mode 100644 (file)
index 0000000..fc21a16
--- /dev/null
@@ -0,0 +1,69 @@
+From c424c12f87883d2cee0de311d7cfa045f0f132a4 Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:26 +0800
+Subject: net: hns: Avoid net reset caused by pause frames storm
+
+[ Upstream commit a57275d35576fdd89d8c771eedf1e7cf97e0dfa6 ]
+
+There will be a large number of MAC pause frames on the net,
+which caused tx timeout of net device. And then the net device
+was reset to try to recover it. So that is not useful, and will
+cause some other problems.
+
+So need doubled ndev->watchdog_timeo if device watchdog occurred
+until watchdog_timeo up to 40s and then try resetting to recover
+it.
+
+When collecting dfx information such as hardware registers when tx timeout.
+Some registers for count were cleared when read. So need move this task
+before update net state which also read the count registers.
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns/hns_enet.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+index 63a14edd6a19..7ffbd70824d9 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+@@ -1407,11 +1407,19 @@ static int hns_nic_net_stop(struct net_device *ndev)
+ }
+ static void hns_tx_timeout_reset(struct hns_nic_priv *priv);
++#define HNS_TX_TIMEO_LIMIT (40 * HZ)
+ static void hns_nic_net_timeout(struct net_device *ndev)
+ {
+       struct hns_nic_priv *priv = netdev_priv(ndev);
+-      hns_tx_timeout_reset(priv);
++      if (ndev->watchdog_timeo < HNS_TX_TIMEO_LIMIT) {
++              ndev->watchdog_timeo *= 2;
++              netdev_info(ndev, "watchdog_timo changed to %d.\n",
++                          ndev->watchdog_timeo);
++      } else {
++              ndev->watchdog_timeo = HNS_NIC_TX_TIMEOUT;
++              hns_tx_timeout_reset(priv);
++      }
+ }
+ static int hns_nic_do_ioctl(struct net_device *netdev, struct ifreq *ifr,
+@@ -1745,11 +1753,11 @@ static void hns_nic_service_task(struct work_struct *work)
+               = container_of(work, struct hns_nic_priv, service_task);
+       struct hnae_handle *h = priv->ae_handle;
++      hns_nic_reset_subtask(priv);
+       hns_nic_update_link_status(priv->netdev);
+       h->dev->ops->update_led_status(h);
+       hns_nic_update_stats(priv->netdev);
+-      hns_nic_reset_subtask(priv);
+       hns_nic_service_event_complete(priv);
+ }
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-clean-rx-fbd-when-ae-stopped.patch b/queue-4.9/net-hns-clean-rx-fbd-when-ae-stopped.patch
new file mode 100644 (file)
index 0000000..42f4aa0
--- /dev/null
@@ -0,0 +1,37 @@
+From 94b5132c0c8ed843d5cb21d773b4056a843b68b4 Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:24 +0800
+Subject: net: hns: Clean rx fbd when ae stopped.
+
+[ Upstream commit 31f6b61d810654fb3ef43f4d8afda0f44b142fad ]
+
+If there are packets in hardware when changing the speed or duplex,
+it may cause hardware hang up.
+
+This patch adds the code to wait rx fbd clean up when ae stopped.
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+index b7c8433a7a37..0b4d90ceea7a 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+@@ -290,6 +290,9 @@ void hns_ae_stop(struct hnae_handle *handle)
+       hns_ae_ring_enable_all(handle, 0);
++      /* clean rx fbd. */
++      hns_rcb_wait_fbd_clean(handle->qs, handle->q_num, RCB_INT_FLAG_RX);
++
+       (void)hns_mac_vm_config_bc_en(mac_cb, 0, false);
+ }
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-fix-ntuple-filters-status-error.patch b/queue-4.9/net-hns-fix-ntuple-filters-status-error.patch
new file mode 100644 (file)
index 0000000..a997d68
--- /dev/null
@@ -0,0 +1,35 @@
+From 02d2f64bee0f2c2668d10f30b9cf5d0ec9f88d54 Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:27 +0800
+Subject: net: hns: Fix ntuple-filters status error.
+
+[ Upstream commit 7e74a19ca522aec7c2be201a7ae1d1d57ded409b ]
+
+The ntuple-filters features is forced on by chip.
+But it shows "ntuple-filters: off [fixed]" when use ethtool.
+This patch make it correct with "ntuple-filters: on [fixed]".
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns/hns_enet.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+index 7ffbd70824d9..a2f7d0834071 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+@@ -2036,7 +2036,7 @@ static int hns_nic_dev_probe(struct platform_device *pdev)
+       switch (priv->enet_ver) {
+       case AE_VERSION_2:
+-              ndev->features |= NETIF_F_TSO | NETIF_F_TSO6;
++              ndev->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_NTUPLE;
+               ndev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
+                       NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_GSO |
+                       NETIF_F_GRO | NETIF_F_TSO | NETIF_F_TSO6;
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-fixed-bug-that-netdev-was-opened-twice.patch b/queue-4.9/net-hns-fixed-bug-that-netdev-was-opened-twice.patch
new file mode 100644 (file)
index 0000000..260c9d2
--- /dev/null
@@ -0,0 +1,74 @@
+From 5835f027a92b667f60c887cc32e99e41a6647851 Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:23 +0800
+Subject: net: hns: Fixed bug that netdev was opened twice
+
+[ Upstream commit 5778b13b64eca5549d242686f2f91a2c80c8fa40 ]
+
+After resetting dsaf to try to repair chip error such as ecc error,
+the net device will be open if net interface is up. But at this time
+if there is the users set the net device up with the command ifconfig,
+the net device will be opened twice consecutively.
+
+Function napi_enable was called when open device. And Kernel panic will
+be occurred if it was called twice consecutively. Such as follow:
+static inline void napi_enable(struct napi_struct *n)
+{
+         BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
+         smp_mb__before_clear_bit();
+         clear_bit(NAPI_STATE_SCHED, &n->state);
+}
+
+[37255.571996] Kernel panic - not syncing: BUG!
+[37255.595234] Call trace:
+[37255.597694] [<ffff80000008ab48>] dump_backtrace+0x0/0x1a0
+[37255.603114] [<ffff80000008ad08>] show_stack+0x20/0x28
+[37255.608187] [<ffff8000009c4944>] dump_stack+0x98/0xb8
+[37255.613258] [<ffff8000009c149c>] panic+0x10c/0x26c
+[37255.618070] [<ffff80000070f134>] hns_nic_net_up+0x30c/0x4e0
+[37255.623664] [<ffff80000070f39c>] hns_nic_net_open+0x94/0x12c
+[37255.629346] [<ffff80000084be78>] __dev_open+0xf4/0x168
+[37255.634504] [<ffff80000084c1ac>] __dev_change_flags+0x98/0x15c
+[37255.640359] [<ffff80000084c29c>] dev_change_flags+0x2c/0x68
+[37255.769580] [<ffff8000008dc400>] devinet_ioctl+0x650/0x704
+[37255.775086] [<ffff8000008ddc38>] inet_ioctl+0x98/0xb4
+[37255.780159] [<ffff800000827b7c>] sock_do_ioctl+0x44/0x84
+[37255.785490] [<ffff800000828e04>] sock_ioctl+0x248/0x30c
+[37255.790737] [<ffff80000026dc6c>] do_vfs_ioctl+0x480/0x618
+[37255.796156] [<ffff80000026de94>] SyS_ioctl+0x90/0xa4
+[37255.801139] SMP: stopping secondary CPUs
+[37255.805079] kbox: catch panic event.
+[37255.809586] collected_len = 128928, LOG_BUF_LEN_LOCAL = 131072
+[37255.816103] flush cache 0xffff80003f000000  size 0x800000
+[37255.822192] flush cache 0xffff80003f000000  size 0x800000
+[37255.828289] flush cache 0xffff80003f000000  size 0x800000
+[37255.834378] kbox: no notify die func register. no need to notify
+[37255.840413] ---[ end Kernel panic - not syncing: BUG!
+
+This patchset fix this bug according to the flag NIC_STATE_DOWN.
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns/hns_enet.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+index 12d90c04931b..d96a64bc1db8 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+@@ -1238,6 +1238,9 @@ static int hns_nic_net_up(struct net_device *ndev)
+       int i, j;
+       int ret;
++      if (!test_bit(NIC_STATE_DOWN, &priv->state))
++              return 0;
++
+       ret = hns_nic_init_irq(priv);
+       if (ret != 0) {
+               netdev_err(ndev, "hns init irq failed! ret=%d\n", ret);
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-free-irq-when-exit-from-abnormal-branch.patch b/queue-4.9/net-hns-free-irq-when-exit-from-abnormal-branch.patch
new file mode 100644 (file)
index 0000000..e5b1627
--- /dev/null
@@ -0,0 +1,81 @@
+From 27b7a3a9993bb364ce46edd514c1586a0297e053 Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:25 +0800
+Subject: net: hns: Free irq when exit from abnormal branch
+
+[ Upstream commit c82bd077e1ba3dd586569c733dc6d3dd4b0e43cd ]
+
+1.In "hns_nic_init_irq", if request irq fail at index i,
+  the function return directly without releasing irq resources
+  that already requested.
+
+2.In "hns_nic_net_up" after "hns_nic_init_irq",
+  if exceptional branch occurs, irqs that already requested
+  are not release.
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns/hns_enet.c | 23 ++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+index d96a64bc1db8..63a14edd6a19 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+@@ -1195,6 +1195,22 @@ static void hns_set_irq_affinity(struct hns_nic_priv *priv)
+       }
+ }
++static void hns_nic_free_irq(int q_num, struct hns_nic_priv *priv)
++{
++      int i;
++
++      for (i = 0; i < q_num * 2; i++) {
++              if (priv->ring_data[i].ring->irq_init_flag == RCB_IRQ_INITED) {
++                      irq_set_affinity_hint(priv->ring_data[i].ring->irq,
++                                            NULL);
++                      free_irq(priv->ring_data[i].ring->irq,
++                               &priv->ring_data[i]);
++                      priv->ring_data[i].ring->irq_init_flag =
++                              RCB_IRQ_NOT_INITED;
++              }
++      }
++}
++
+ static int hns_nic_init_irq(struct hns_nic_priv *priv)
+ {
+       struct hnae_handle *h = priv->ae_handle;
+@@ -1219,7 +1235,7 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
+               if (ret) {
+                       netdev_err(priv->netdev, "request irq(%d) fail\n",
+                                  rd->ring->irq);
+-                      return ret;
++                      goto out_free_irq;
+               }
+               disable_irq(rd->ring->irq);
+               rd->ring->irq_init_flag = RCB_IRQ_INITED;
+@@ -1229,6 +1245,10 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
+       hns_set_irq_affinity(priv);
+       return 0;
++
++out_free_irq:
++      hns_nic_free_irq(h->q_num, priv);
++      return ret;
+ }
+ static int hns_nic_net_up(struct net_device *ndev)
+@@ -1276,6 +1296,7 @@ static int hns_nic_net_up(struct net_device *ndev)
+       for (j = i - 1; j >= 0; j--)
+               hns_nic_ring_close(ndev, j);
++      hns_nic_free_irq(h->q_num, priv);
+       set_bit(NIC_STATE_DOWN, &priv->state);
+       return ret;
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-incorrect-offset-address-used-for-some-regis.patch b/queue-4.9/net-hns-incorrect-offset-address-used-for-some-regis.patch
new file mode 100644 (file)
index 0000000..dd84ff2
--- /dev/null
@@ -0,0 +1,38 @@
+From a2502158b33568a61df3308e87bcce43c5c4107d Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:20 +0800
+Subject: net: hns: Incorrect offset address used for some registers.
+
+[ Upstream commit 4e1d4be681b2c26fd874adbf584bf034573ac45d ]
+
+According to the hip06 Datasheet:
+1. The offset of INGRESS_SW_VLAN_TAG_DISC should be 0x1A00+4*all_chn_num
+2. The offset of INGRESS_IN_DATA_STP_DISC should be 0x1A50+4*all_chn_num
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
+index 8ea3d95fa483..e25206540fd7 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
+@@ -2163,9 +2163,9 @@ void hns_dsaf_update_stats(struct dsaf_device *dsaf_dev, u32 node_num)
+               DSAF_INODE_LOCAL_ADDR_FALSE_NUM_0_REG + 0x80 * (u64)node_num);
+       hw_stats->vlan_drop += dsaf_read_dev(dsaf_dev,
+-              DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + 0x80 * (u64)node_num);
++              DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + 4 * (u64)node_num);
+       hw_stats->stp_drop += dsaf_read_dev(dsaf_dev,
+-              DSAF_INODE_IN_DATA_STP_DISC_0_REG + 0x80 * (u64)node_num);
++              DSAF_INODE_IN_DATA_STP_DISC_0_REG + 4 * (u64)node_num);
+       /* pfc pause frame statistics stored in dsaf inode*/
+       if ((node_num < DSAF_SERVICE_NW_NUM) && !is_ver1) {
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-hns-some-registers-use-wrong-address-according-t.patch b/queue-4.9/net-hns-some-registers-use-wrong-address-according-t.patch
new file mode 100644 (file)
index 0000000..a41e963
--- /dev/null
@@ -0,0 +1,430 @@
+From bc4fc8164e5968f03bce64e8407ba8ad76a79a65 Mon Sep 17 00:00:00 2001
+From: Yonglong Liu <liuyonglong@huawei.com>
+Date: Sat, 15 Dec 2018 11:53:22 +0800
+Subject: net: hns: Some registers use wrong address according to the
+ datasheet.
+
+[ Upstream commit 4ad26f117b6ea0f5d5f1592127bafb5ec65904d3 ]
+
+According to the hip06 datasheet:
+1.Six registers use wrong address:
+  RCB_COM_SF_CFG_INTMASK_RING
+  RCB_COM_SF_CFG_RING_STS
+  RCB_COM_SF_CFG_RING
+  RCB_COM_SF_CFG_INTMASK_BD
+  RCB_COM_SF_CFG_BD_RINT_STS
+  DSAF_INODE_VC1_IN_PKT_NUM_0_REG
+2.The offset of DSAF_INODE_VC1_IN_PKT_NUM_0_REG should be
+  0x103C + 0x80 * all_chn_num
+3.The offset to show the value of DSAF_INODE_IN_DATA_STP_DISC_0_REG
+  is wrong, so the value of DSAF_INODE_SW_VLAN_TAG_DISC_0_REG will be
+  overwrite
+
+These registers are only used in "ethtool -d", so that did not cause ndev
+to misfunction.
+
+Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
+Signed-off-by: Peng Li <lipeng321@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../ethernet/hisilicon/hns/hns_dsaf_main.c    | 242 +++++++++---------
+ .../net/ethernet/hisilicon/hns/hns_dsaf_reg.h |  12 +-
+ 2 files changed, 127 insertions(+), 127 deletions(-)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
+index e25206540fd7..5bb019d49409 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
+@@ -2282,237 +2282,237 @@ void hns_dsaf_get_regs(struct dsaf_device *ddev, u32 port, void *data)
+                               DSAF_INODE_BD_ORDER_STATUS_0_REG + j * 4);
+               p[223 + i] = dsaf_read_dev(ddev,
+                               DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + j * 4);
+-              p[224 + i] = dsaf_read_dev(ddev,
++              p[226 + i] = dsaf_read_dev(ddev,
+                               DSAF_INODE_IN_DATA_STP_DISC_0_REG + j * 4);
+       }
+-      p[227] = dsaf_read_dev(ddev, DSAF_INODE_GE_FC_EN_0_REG + port * 4);
++      p[229] = dsaf_read_dev(ddev, DSAF_INODE_GE_FC_EN_0_REG + port * 4);
+       for (i = 0; i < DSAF_INODE_NUM / DSAF_COMM_CHN; i++) {
+               j = i * DSAF_COMM_CHN + port;
+-              p[228 + i] = dsaf_read_dev(ddev,
++              p[230 + i] = dsaf_read_dev(ddev,
+                               DSAF_INODE_VC0_IN_PKT_NUM_0_REG + j * 4);
+       }
+-      p[231] = dsaf_read_dev(ddev,
+-              DSAF_INODE_VC1_IN_PKT_NUM_0_REG + port * 4);
++      p[233] = dsaf_read_dev(ddev,
++              DSAF_INODE_VC1_IN_PKT_NUM_0_REG + port * 0x80);
+       /* dsaf inode registers */
+       for (i = 0; i < HNS_DSAF_SBM_NUM(ddev) / DSAF_COMM_CHN; i++) {
+               j = i * DSAF_COMM_CHN + port;
+-              p[232 + i] = dsaf_read_dev(ddev,
++              p[234 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_CFG_REG_0_REG + j * 0x80);
+-              p[235 + i] = dsaf_read_dev(ddev,
++              p[237 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CFG_0_XGE_REG_0_REG + j * 0x80);
+-              p[238 + i] = dsaf_read_dev(ddev,
++              p[240 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CFG_1_REG_0_REG + j * 0x80);
+-              p[241 + i] = dsaf_read_dev(ddev,
++              p[243 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CFG_2_XGE_REG_0_REG + j * 0x80);
+-              p[244 + i] = dsaf_read_dev(ddev,
++              p[246 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_FREE_CNT_0_0_REG + j * 0x80);
+-              p[245 + i] = dsaf_read_dev(ddev,
++              p[249 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_FREE_CNT_1_0_REG + j * 0x80);
+-              p[248 + i] = dsaf_read_dev(ddev,
++              p[252 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CNT_0_0_REG + j * 0x80);
+-              p[251 + i] = dsaf_read_dev(ddev,
++              p[255 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CNT_1_0_REG + j * 0x80);
+-              p[254 + i] = dsaf_read_dev(ddev,
++              p[258 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CNT_2_0_REG + j * 0x80);
+-              p[257 + i] = dsaf_read_dev(ddev,
++              p[261 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CNT_3_0_REG + j * 0x80);
+-              p[260 + i] = dsaf_read_dev(ddev,
++              p[264 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_INER_ST_0_REG + j * 0x80);
+-              p[263 + i] = dsaf_read_dev(ddev,
++              p[267 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_MIB_REQ_FAILED_TC_0_REG + j * 0x80);
+-              p[266 + i] = dsaf_read_dev(ddev,
++              p[270 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_CNT_0_REG + j * 0x80);
+-              p[269 + i] = dsaf_read_dev(ddev,
++              p[273 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_DROP_CNT_0_REG + j * 0x80);
+-              p[272 + i] = dsaf_read_dev(ddev,
++              p[276 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_INF_OUTPORT_CNT_0_REG + j * 0x80);
+-              p[275 + i] = dsaf_read_dev(ddev,
++              p[279 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_TC0_CNT_0_REG + j * 0x80);
+-              p[278 + i] = dsaf_read_dev(ddev,
++              p[282 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_TC1_CNT_0_REG + j * 0x80);
+-              p[281 + i] = dsaf_read_dev(ddev,
++              p[285 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_TC2_CNT_0_REG + j * 0x80);
+-              p[284 + i] = dsaf_read_dev(ddev,
++              p[288 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_TC3_CNT_0_REG + j * 0x80);
+-              p[287 + i] = dsaf_read_dev(ddev,
++              p[291 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_TC4_CNT_0_REG + j * 0x80);
+-              p[290 + i] = dsaf_read_dev(ddev,
++              p[294 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_TC5_CNT_0_REG + j * 0x80);
+-              p[293 + i] = dsaf_read_dev(ddev,
++              p[297 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_TC6_CNT_0_REG + j * 0x80);
+-              p[296 + i] = dsaf_read_dev(ddev,
++              p[300 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_INPORT_TC7_CNT_0_REG + j * 0x80);
+-              p[299 + i] = dsaf_read_dev(ddev,
++              p[303 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_REQ_CNT_0_REG + j * 0x80);
+-              p[302 + i] = dsaf_read_dev(ddev,
++              p[306 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_LNK_RELS_CNT_0_REG + j * 0x80);
+-              p[305 + i] = dsaf_read_dev(ddev,
++              p[309 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CFG_3_REG_0_REG + j * 0x80);
+-              p[308 + i] = dsaf_read_dev(ddev,
++              p[312 + i] = dsaf_read_dev(ddev,
+                               DSAF_SBM_BP_CFG_4_REG_0_REG + j * 0x80);
+       }
+       /* dsaf onode registers */
+       for (i = 0; i < DSAF_XOD_NUM; i++) {
+-              p[311 + i] = dsaf_read_dev(ddev,
++              p[315 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_ETS_TSA_TC0_TC3_CFG_0_REG + i * 0x90);
+-              p[319 + i] = dsaf_read_dev(ddev,
++              p[323 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_ETS_TSA_TC4_TC7_CFG_0_REG + i * 0x90);
+-              p[327 + i] = dsaf_read_dev(ddev,
++              p[331 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_ETS_BW_TC0_TC3_CFG_0_REG + i * 0x90);
+-              p[335 + i] = dsaf_read_dev(ddev,
++              p[339 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_ETS_BW_TC4_TC7_CFG_0_REG + i * 0x90);
+-              p[343 + i] = dsaf_read_dev(ddev,
++              p[347 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_ETS_BW_OFFSET_CFG_0_REG + i * 0x90);
+-              p[351 + i] = dsaf_read_dev(ddev,
++              p[355 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_ETS_TOKEN_CFG_0_REG + i * 0x90);
+       }
+-      p[359] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_0_0_REG + port * 0x90);
+-      p[360] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_1_0_REG + port * 0x90);
+-      p[361] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_2_0_REG + port * 0x90);
++      p[363] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_0_0_REG + port * 0x90);
++      p[364] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_1_0_REG + port * 0x90);
++      p[365] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_2_0_REG + port * 0x90);
+       for (i = 0; i < DSAF_XOD_BIG_NUM / DSAF_COMM_CHN; i++) {
+               j = i * DSAF_COMM_CHN + port;
+-              p[362 + i] = dsaf_read_dev(ddev,
++              p[366 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_GNT_L_0_REG + j * 0x90);
+-              p[365 + i] = dsaf_read_dev(ddev,
++              p[369 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_GNT_H_0_REG + j * 0x90);
+-              p[368 + i] = dsaf_read_dev(ddev,
++              p[372 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_CONNECT_STATE_0_REG + j * 0x90);
+-              p[371 + i] = dsaf_read_dev(ddev,
++              p[375 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_RCVPKT_CNT_0_REG + j * 0x90);
+-              p[374 + i] = dsaf_read_dev(ddev,
++              p[378 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_RCVTC0_CNT_0_REG + j * 0x90);
+-              p[377 + i] = dsaf_read_dev(ddev,
++              p[381 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_RCVTC1_CNT_0_REG + j * 0x90);
+-              p[380 + i] = dsaf_read_dev(ddev,
++              p[384 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_RCVTC2_CNT_0_REG + j * 0x90);
+-              p[383 + i] = dsaf_read_dev(ddev,
++              p[387 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_RCVTC3_CNT_0_REG + j * 0x90);
+-              p[386 + i] = dsaf_read_dev(ddev,
++              p[390 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_RCVVC0_CNT_0_REG + j * 0x90);
+-              p[389 + i] = dsaf_read_dev(ddev,
++              p[393 + i] = dsaf_read_dev(ddev,
+                               DSAF_XOD_RCVVC1_CNT_0_REG + j * 0x90);
+       }
+-      p[392] = dsaf_read_dev(ddev,
++      p[396] = dsaf_read_dev(ddev,
+               DSAF_XOD_XGE_RCVIN0_CNT_0_REG + port * 0x90);
+-      p[393] = dsaf_read_dev(ddev,
++      p[397] = dsaf_read_dev(ddev,
+               DSAF_XOD_XGE_RCVIN1_CNT_0_REG + port * 0x90);
+-      p[394] = dsaf_read_dev(ddev,
++      p[398] = dsaf_read_dev(ddev,
+               DSAF_XOD_XGE_RCVIN2_CNT_0_REG + port * 0x90);
+-      p[395] = dsaf_read_dev(ddev,
++      p[399] = dsaf_read_dev(ddev,
+               DSAF_XOD_XGE_RCVIN3_CNT_0_REG + port * 0x90);
+-      p[396] = dsaf_read_dev(ddev,
++      p[400] = dsaf_read_dev(ddev,
+               DSAF_XOD_XGE_RCVIN4_CNT_0_REG + port * 0x90);
+-      p[397] = dsaf_read_dev(ddev,
++      p[401] = dsaf_read_dev(ddev,
+               DSAF_XOD_XGE_RCVIN5_CNT_0_REG + port * 0x90);
+-      p[398] = dsaf_read_dev(ddev,
++      p[402] = dsaf_read_dev(ddev,
+               DSAF_XOD_XGE_RCVIN6_CNT_0_REG + port * 0x90);
+-      p[399] = dsaf_read_dev(ddev,
++      p[403] = dsaf_read_dev(ddev,
+               DSAF_XOD_XGE_RCVIN7_CNT_0_REG + port * 0x90);
+-      p[400] = dsaf_read_dev(ddev,
++      p[404] = dsaf_read_dev(ddev,
+               DSAF_XOD_PPE_RCVIN0_CNT_0_REG + port * 0x90);
+-      p[401] = dsaf_read_dev(ddev,
++      p[405] = dsaf_read_dev(ddev,
+               DSAF_XOD_PPE_RCVIN1_CNT_0_REG + port * 0x90);
+-      p[402] = dsaf_read_dev(ddev,
++      p[406] = dsaf_read_dev(ddev,
+               DSAF_XOD_ROCEE_RCVIN0_CNT_0_REG + port * 0x90);
+-      p[403] = dsaf_read_dev(ddev,
++      p[407] = dsaf_read_dev(ddev,
+               DSAF_XOD_ROCEE_RCVIN1_CNT_0_REG + port * 0x90);
+-      p[404] = dsaf_read_dev(ddev,
++      p[408] = dsaf_read_dev(ddev,
+               DSAF_XOD_FIFO_STATUS_0_REG + port * 0x90);
+       /* dsaf voq registers */
+       for (i = 0; i < DSAF_VOQ_NUM / DSAF_COMM_CHN; i++) {
+               j = (i * DSAF_COMM_CHN + port) * 0x90;
+-              p[405 + i] = dsaf_read_dev(ddev,
++              p[409 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_ECC_INVERT_EN_0_REG + j);
+-              p[408 + i] = dsaf_read_dev(ddev,
++              p[412 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_SRAM_PKT_NUM_0_REG + j);
+-              p[411 + i] = dsaf_read_dev(ddev, DSAF_VOQ_IN_PKT_NUM_0_REG + j);
+-              p[414 + i] = dsaf_read_dev(ddev,
++              p[415 + i] = dsaf_read_dev(ddev, DSAF_VOQ_IN_PKT_NUM_0_REG + j);
++              p[418 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_OUT_PKT_NUM_0_REG + j);
+-              p[417 + i] = dsaf_read_dev(ddev,
++              p[421 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_ECC_ERR_ADDR_0_REG + j);
+-              p[420 + i] = dsaf_read_dev(ddev, DSAF_VOQ_BP_STATUS_0_REG + j);
+-              p[423 + i] = dsaf_read_dev(ddev, DSAF_VOQ_SPUP_IDLE_0_REG + j);
+-              p[426 + i] = dsaf_read_dev(ddev,
++              p[424 + i] = dsaf_read_dev(ddev, DSAF_VOQ_BP_STATUS_0_REG + j);
++              p[427 + i] = dsaf_read_dev(ddev, DSAF_VOQ_SPUP_IDLE_0_REG + j);
++              p[430 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_XGE_XOD_REQ_0_0_REG + j);
+-              p[429 + i] = dsaf_read_dev(ddev,
++              p[433 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_XGE_XOD_REQ_1_0_REG + j);
+-              p[432 + i] = dsaf_read_dev(ddev,
++              p[436 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_PPE_XOD_REQ_0_REG + j);
+-              p[435 + i] = dsaf_read_dev(ddev,
++              p[439 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_ROCEE_XOD_REQ_0_REG + j);
+-              p[438 + i] = dsaf_read_dev(ddev,
++              p[442 + i] = dsaf_read_dev(ddev,
+                       DSAF_VOQ_BP_ALL_THRD_0_REG + j);
+       }
+       /* dsaf tbl registers */
+-      p[441] = dsaf_read_dev(ddev, DSAF_TBL_CTRL_0_REG);
+-      p[442] = dsaf_read_dev(ddev, DSAF_TBL_INT_MSK_0_REG);
+-      p[443] = dsaf_read_dev(ddev, DSAF_TBL_INT_SRC_0_REG);
+-      p[444] = dsaf_read_dev(ddev, DSAF_TBL_INT_STS_0_REG);
+-      p[445] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_ADDR_0_REG);
+-      p[446] = dsaf_read_dev(ddev, DSAF_TBL_LINE_ADDR_0_REG);
+-      p[447] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_HIGH_0_REG);
+-      p[448] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_LOW_0_REG);
+-      p[449] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_4_0_REG);
+-      p[450] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_3_0_REG);
+-      p[451] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_2_0_REG);
+-      p[452] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_1_0_REG);
+-      p[453] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_0_0_REG);
+-      p[454] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_UCAST_CFG_0_REG);
+-      p[455] = dsaf_read_dev(ddev, DSAF_TBL_LIN_CFG_0_REG);
+-      p[456] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_HIGH_0_REG);
+-      p[457] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_LOW_0_REG);
+-      p[458] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA4_0_REG);
+-      p[459] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA3_0_REG);
+-      p[460] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA2_0_REG);
+-      p[461] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA1_0_REG);
+-      p[462] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA0_0_REG);
+-      p[463] = dsaf_read_dev(ddev, DSAF_TBL_LIN_RDATA_0_REG);
++      p[445] = dsaf_read_dev(ddev, DSAF_TBL_CTRL_0_REG);
++      p[446] = dsaf_read_dev(ddev, DSAF_TBL_INT_MSK_0_REG);
++      p[447] = dsaf_read_dev(ddev, DSAF_TBL_INT_SRC_0_REG);
++      p[448] = dsaf_read_dev(ddev, DSAF_TBL_INT_STS_0_REG);
++      p[449] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_ADDR_0_REG);
++      p[450] = dsaf_read_dev(ddev, DSAF_TBL_LINE_ADDR_0_REG);
++      p[451] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_HIGH_0_REG);
++      p[452] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_LOW_0_REG);
++      p[453] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_4_0_REG);
++      p[454] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_3_0_REG);
++      p[455] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_2_0_REG);
++      p[456] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_1_0_REG);
++      p[457] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_0_0_REG);
++      p[458] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_UCAST_CFG_0_REG);
++      p[459] = dsaf_read_dev(ddev, DSAF_TBL_LIN_CFG_0_REG);
++      p[460] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_HIGH_0_REG);
++      p[461] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_LOW_0_REG);
++      p[462] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA4_0_REG);
++      p[463] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA3_0_REG);
++      p[464] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA2_0_REG);
++      p[465] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA1_0_REG);
++      p[466] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA0_0_REG);
++      p[467] = dsaf_read_dev(ddev, DSAF_TBL_LIN_RDATA_0_REG);
+       for (i = 0; i < DSAF_SW_PORT_NUM; i++) {
+               j = i * 0x8;
+-              p[464 + 2 * i] = dsaf_read_dev(ddev,
++              p[468 + 2 * i] = dsaf_read_dev(ddev,
+                       DSAF_TBL_DA0_MIS_INFO1_0_REG + j);
+-              p[465 + 2 * i] = dsaf_read_dev(ddev,
++              p[469 + 2 * i] = dsaf_read_dev(ddev,
+                       DSAF_TBL_DA0_MIS_INFO0_0_REG + j);
+       }
+-      p[480] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO2_0_REG);
+-      p[481] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO1_0_REG);
+-      p[482] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO0_0_REG);
+-      p[483] = dsaf_read_dev(ddev, DSAF_TBL_PUL_0_REG);
+-      p[484] = dsaf_read_dev(ddev, DSAF_TBL_OLD_RSLT_0_REG);
+-      p[485] = dsaf_read_dev(ddev, DSAF_TBL_OLD_SCAN_VAL_0_REG);
+-      p[486] = dsaf_read_dev(ddev, DSAF_TBL_DFX_CTRL_0_REG);
+-      p[487] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_0_REG);
+-      p[488] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_2_0_REG);
+-      p[489] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_I_0_REG);
+-      p[490] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_O_0_REG);
+-      p[491] = dsaf_read_dev(ddev, DSAF_TBL_UCAST_BCAST_MIS_INFO_0_0_REG);
++      p[484] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO2_0_REG);
++      p[485] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO1_0_REG);
++      p[486] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO0_0_REG);
++      p[487] = dsaf_read_dev(ddev, DSAF_TBL_PUL_0_REG);
++      p[488] = dsaf_read_dev(ddev, DSAF_TBL_OLD_RSLT_0_REG);
++      p[489] = dsaf_read_dev(ddev, DSAF_TBL_OLD_SCAN_VAL_0_REG);
++      p[490] = dsaf_read_dev(ddev, DSAF_TBL_DFX_CTRL_0_REG);
++      p[491] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_0_REG);
++      p[492] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_2_0_REG);
++      p[493] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_I_0_REG);
++      p[494] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_O_0_REG);
++      p[495] = dsaf_read_dev(ddev, DSAF_TBL_UCAST_BCAST_MIS_INFO_0_0_REG);
+       /* dsaf other registers */
+-      p[492] = dsaf_read_dev(ddev, DSAF_INODE_FIFO_WL_0_REG + port * 0x4);
+-      p[493] = dsaf_read_dev(ddev, DSAF_ONODE_FIFO_WL_0_REG + port * 0x4);
+-      p[494] = dsaf_read_dev(ddev, DSAF_XGE_GE_WORK_MODE_0_REG + port * 0x4);
+-      p[495] = dsaf_read_dev(ddev,
++      p[496] = dsaf_read_dev(ddev, DSAF_INODE_FIFO_WL_0_REG + port * 0x4);
++      p[497] = dsaf_read_dev(ddev, DSAF_ONODE_FIFO_WL_0_REG + port * 0x4);
++      p[498] = dsaf_read_dev(ddev, DSAF_XGE_GE_WORK_MODE_0_REG + port * 0x4);
++      p[499] = dsaf_read_dev(ddev,
+               DSAF_XGE_APP_RX_LINK_UP_0_REG + port * 0x4);
+-      p[496] = dsaf_read_dev(ddev, DSAF_NETPORT_CTRL_SIG_0_REG + port * 0x4);
+-      p[497] = dsaf_read_dev(ddev, DSAF_XGE_CTRL_SIG_CFG_0_REG + port * 0x4);
++      p[500] = dsaf_read_dev(ddev, DSAF_NETPORT_CTRL_SIG_0_REG + port * 0x4);
++      p[501] = dsaf_read_dev(ddev, DSAF_XGE_CTRL_SIG_CFG_0_REG + port * 0x4);
+       if (!is_ver1)
+-              p[498] = dsaf_read_dev(ddev, DSAF_PAUSE_CFG_REG + port * 0x4);
++              p[502] = dsaf_read_dev(ddev, DSAF_PAUSE_CFG_REG + port * 0x4);
+       /* mark end of dsaf regs */
+-      for (i = 499; i < 504; i++)
++      for (i = 503; i < 504; i++)
+               p[i] = 0xdddddddd;
+ }
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
+index 2cf8b1d82d6a..bf0c5a60f5f1 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
+@@ -173,7 +173,7 @@
+ #define DSAF_INODE_IN_DATA_STP_DISC_0_REG     0x1A50
+ #define DSAF_INODE_GE_FC_EN_0_REG             0x1B00
+ #define DSAF_INODE_VC0_IN_PKT_NUM_0_REG               0x1B50
+-#define DSAF_INODE_VC1_IN_PKT_NUM_0_REG               0x1C00
++#define DSAF_INODE_VC1_IN_PKT_NUM_0_REG               0x103C
+ #define DSAF_INODE_IN_PRIO_PAUSE_BASE_REG     0x1C00
+ #define DSAF_INODE_IN_PRIO_PAUSE_BASE_OFFSET  0x100
+ #define DSAF_INODE_IN_PRIO_PAUSE_OFFSET               0x50
+@@ -400,11 +400,11 @@
+ #define RCB_ECC_ERR_ADDR4_REG                 0x460
+ #define RCB_ECC_ERR_ADDR5_REG                 0x464
+-#define RCB_COM_SF_CFG_INTMASK_RING           0x480
+-#define RCB_COM_SF_CFG_RING_STS                       0x484
+-#define RCB_COM_SF_CFG_RING                   0x488
+-#define RCB_COM_SF_CFG_INTMASK_BD             0x48C
+-#define RCB_COM_SF_CFG_BD_RINT_STS            0x470
++#define RCB_COM_SF_CFG_INTMASK_RING           0x470
++#define RCB_COM_SF_CFG_RING_STS                       0x474
++#define RCB_COM_SF_CFG_RING                   0x478
++#define RCB_COM_SF_CFG_INTMASK_BD             0x47C
++#define RCB_COM_SF_CFG_BD_RINT_STS            0x480
+ #define RCB_COM_RCB_RD_BD_BUSY                        0x490
+ #define RCB_COM_RCB_FBD_CRT_EN                        0x494
+ #define RCB_COM_AXI_WR_ERR_INTMASK            0x498
+-- 
+2.19.1
+
diff --git a/queue-4.9/net-netxen-fix-a-missing-check-and-an-uninitialized-.patch b/queue-4.9/net-netxen-fix-a-missing-check-and-an-uninitialized-.patch
new file mode 100644 (file)
index 0000000..4edd9ca
--- /dev/null
@@ -0,0 +1,36 @@
+From 32d4a3730765291435f1318cd2e7b5c194d1811a Mon Sep 17 00:00:00 2001
+From: Kangjie Lu <kjlu@umn.edu>
+Date: Fri, 21 Dec 2018 00:22:32 -0600
+Subject: net: netxen: fix a missing check and an uninitialized use
+
+[ Upstream commit d134e486e831defd26130770181f01dfc6195f7d ]
+
+When netxen_rom_fast_read() fails, "bios" is left uninitialized and may
+contain random value, thus should not be used.
+
+The fix ensures that if netxen_rom_fast_read() fails, we return "-EIO".
+
+Signed-off-by: Kangjie Lu <kjlu@umn.edu>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
+index 7b43a3b4abdc..5cf551914767 100644
+--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
++++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
+@@ -1125,7 +1125,8 @@ netxen_validate_firmware(struct netxen_adapter *adapter)
+               return -EINVAL;
+       }
+       val = nx_get_bios_version(adapter);
+-      netxen_rom_fast_read(adapter, NX_BIOS_VERSION_OFFSET, (int *)&bios);
++      if (netxen_rom_fast_read(adapter, NX_BIOS_VERSION_OFFSET, (int *)&bios))
++              return -EIO;
+       if ((__force u32)val != bios) {
+               dev_err(&pdev->dev, "%s: firmware bios is incompatible\n",
+                               fw_name[fw_type]);
+-- 
+2.19.1
+
diff --git a/queue-4.9/netfilter-ipset-do-not-call-ipset_nest_end-after-nla.patch b/queue-4.9/netfilter-ipset-do-not-call-ipset_nest_end-after-nla.patch
new file mode 100644 (file)
index 0000000..b533f88
--- /dev/null
@@ -0,0 +1,38 @@
+From 1641b7e68a0480003389513545052efe9759c14f Mon Sep 17 00:00:00 2001
+From: Pan Bian <bianpan2016@163.com>
+Date: Mon, 10 Dec 2018 14:39:37 +0100
+Subject: netfilter: ipset: do not call ipset_nest_end after nla_nest_cancel
+
+[ Upstream commit 708abf74dd87f8640871b814faa195fb5970b0e3 ]
+
+In the error handling block, nla_nest_cancel(skb, atd) is called to
+cancel the nest operation. But then, ipset_nest_end(skb, atd) is
+unexpected called to end the nest operation. This patch calls the
+ipset_nest_end only on the branch that nla_nest_cancel is not called.
+
+Fixes: 45040978c899 ("netfilter: ipset: Fix set:list type crash when flush/dump set in parallel")
+Signed-off-by: Pan Bian <bianpan2016@163.com>
+Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/netfilter/ipset/ip_set_list_set.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
+index a2a89e4e0a14..e82157285d34 100644
+--- a/net/netfilter/ipset/ip_set_list_set.c
++++ b/net/netfilter/ipset/ip_set_list_set.c
+@@ -518,8 +518,8 @@ list_set_list(const struct ip_set *set,
+               ret = -EMSGSIZE;
+       } else {
+               cb->args[IPSET_CB_ARG0] = i;
++              ipset_nest_end(skb, atd);
+       }
+-      ipset_nest_end(skb, atd);
+ out:
+       rcu_read_unlock();
+       return ret;
+-- 
+2.19.1
+
diff --git a/queue-4.9/netfilter-seqadj-re-load-tcp-header-pointer-after-po.patch b/queue-4.9/netfilter-seqadj-re-load-tcp-header-pointer-after-po.patch
new file mode 100644 (file)
index 0000000..5f82f88
--- /dev/null
@@ -0,0 +1,66 @@
+From c1cb99a2561ce32bbf6cb902f20012f9ebf69400 Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Wed, 5 Dec 2018 14:12:19 +0100
+Subject: netfilter: seqadj: re-load tcp header pointer after possible head
+ reallocation
+
+[ Upstream commit 530aad77010b81526586dfc09130ec875cd084e4 ]
+
+When adjusting sack block sequence numbers, skb_make_writable() gets
+called to make sure tcp options are all in the linear area, and buffer
+is not shared.
+
+This can cause tcp header pointer to get reallocated, so we must
+reaload it to avoid memory corruption.
+
+This bug pre-dates git history.
+
+Reported-by: Neel Mehta <nmehta@google.com>
+Reported-by: Shane Huntley <shuntley@google.com>
+Reported-by: Heather Adkins <argv@google.com>
+Signed-off-by: Florian Westphal <fw@strlen.de>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/netfilter/nf_conntrack_seqadj.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/net/netfilter/nf_conntrack_seqadj.c b/net/netfilter/nf_conntrack_seqadj.c
+index ef7063eced7c..dad08b9eaf62 100644
+--- a/net/netfilter/nf_conntrack_seqadj.c
++++ b/net/netfilter/nf_conntrack_seqadj.c
+@@ -115,12 +115,12 @@ static void nf_ct_sack_block_adjust(struct sk_buff *skb,
+ /* TCP SACK sequence number adjustment */
+ static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
+                                     unsigned int protoff,
+-                                    struct tcphdr *tcph,
+                                     struct nf_conn *ct,
+                                     enum ip_conntrack_info ctinfo)
+ {
+-      unsigned int dir, optoff, optend;
++      struct tcphdr *tcph = (void *)skb->data + protoff;
+       struct nf_conn_seqadj *seqadj = nfct_seqadj(ct);
++      unsigned int dir, optoff, optend;
+       optoff = protoff + sizeof(struct tcphdr);
+       optend = protoff + tcph->doff * 4;
+@@ -128,6 +128,7 @@ static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
+       if (!skb_make_writable(skb, optend))
+               return 0;
++      tcph = (void *)skb->data + protoff;
+       dir = CTINFO2DIR(ctinfo);
+       while (optoff < optend) {
+@@ -207,7 +208,7 @@ int nf_ct_seq_adjust(struct sk_buff *skb,
+                ntohl(newack));
+       tcph->ack_seq = newack;
+-      res = nf_ct_sack_adjust(skb, protoff, tcph, ct, ctinfo);
++      res = nf_ct_sack_adjust(skb, protoff, ct, ctinfo);
+ out:
+       spin_unlock_bh(&ct->lock);
+-- 
+2.19.1
+
diff --git a/queue-4.9/pinctrl-meson-fix-pull-enable-register-calculation.patch b/queue-4.9/pinctrl-meson-fix-pull-enable-register-calculation.patch
new file mode 100644 (file)
index 0000000..8f2a62d
--- /dev/null
@@ -0,0 +1,42 @@
+From 7cc7f0462340eee1c22cc49f4dee0266cbe752d7 Mon Sep 17 00:00:00 2001
+From: Jerome Brunet <jbrunet@baylibre.com>
+Date: Tue, 13 Nov 2018 11:55:36 +0100
+Subject: pinctrl: meson: fix pull enable register calculation
+
+[ Upstream commit 614b1868a125a0ba24be08f3a7fa832ddcde6bca ]
+
+We just changed the code so we apply bias disable on the correct
+register but forgot to align the register calculation. The result
+is that we apply the change on the correct register, but possibly
+at the incorrect offset/bit
+
+This went undetected because offsets tends to be the same between
+REG_PULL and REG_PULLEN for a given pin the EE controller. This
+is not true for the AO controller.
+
+Fixes: e39f9dd8206a ("pinctrl: meson: fix pinconf bias disable")
+Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
+Acked-by: Neil Armstrong <narmstrong@baylibre.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/meson/pinctrl-meson.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
+index df61a71420b1..8e73641bd823 100644
+--- a/drivers/pinctrl/meson/pinctrl-meson.c
++++ b/drivers/pinctrl/meson/pinctrl-meson.c
+@@ -274,7 +274,8 @@ static int meson_pinconf_set(struct pinctrl_dev *pcdev, unsigned int pin,
+               case PIN_CONFIG_BIAS_DISABLE:
+                       dev_dbg(pc->dev, "pin %u: disable bias\n", pin);
+-                      meson_calc_reg_and_bit(bank, pin, REG_PULL, &reg, &bit);
++                      meson_calc_reg_and_bit(bank, pin, REG_PULLEN, &reg,
++                                             &bit);
+                       ret = regmap_update_bits(pc->reg_pullen, reg,
+                                                BIT(bit), 0);
+                       if (ret)
+-- 
+2.19.1
+
diff --git a/queue-4.9/powerpc-fix-coff-zimage-booting-on-old-powermacs.patch b/queue-4.9/powerpc-fix-coff-zimage-booting-on-old-powermacs.patch
new file mode 100644 (file)
index 0000000..15fcb85
--- /dev/null
@@ -0,0 +1,56 @@
+From a0dbe8d1e9c5b63d2b2f103e78201c74602cdb05 Mon Sep 17 00:00:00 2001
+From: Paul Mackerras <paulus@ozlabs.org>
+Date: Tue, 27 Nov 2018 09:01:54 +1100
+Subject: powerpc: Fix COFF zImage booting on old powermacs
+
+[ Upstream commit 5564597d51c8ff5b88d95c76255e18b13b760879 ]
+
+Commit 6975a783d7b4 ("powerpc/boot: Allow building the zImage wrapper
+as a relocatable ET_DYN", 2011-04-12) changed the procedure descriptor
+at the start of crt0.S to have a hard-coded start address of 0x500000
+rather than a reference to _zimage_start, presumably because having
+a reference to a symbol introduced a relocation which is awkward to
+handle in a position-independent executable.  Unfortunately, what is
+at 0x500000 in the COFF image is not the first instruction, but the
+procedure descriptor itself, that is, a word containing 0x500000,
+which is not a valid instruction.  Hence, booting a COFF zImage
+results in a "DEFAULT CATCH!, code=FFF00700" message from Open
+Firmware.
+
+This fixes the problem by (a) putting the procedure descriptor in the
+data section and (b) adding a branch to _zimage_start as the first
+instruction in the program.
+
+Fixes: 6975a783d7b4 ("powerpc/boot: Allow building the zImage wrapper as a relocatable ET_DYN")
+Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/boot/crt0.S | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
+index 5c2199857aa8..a3550e8f1a77 100644
+--- a/arch/powerpc/boot/crt0.S
++++ b/arch/powerpc/boot/crt0.S
+@@ -15,7 +15,7 @@
+ RELA = 7
+ RELACOUNT = 0x6ffffff9
+-      .text
++      .data
+       /* A procedure descriptor used when booting this as a COFF file.
+        * When making COFF, this comes first in the link and we're
+        * linked at 0x500000.
+@@ -23,6 +23,8 @@ RELACOUNT = 0x6ffffff9
+       .globl  _zimage_start_opd
+ _zimage_start_opd:
+       .long   0x500000, 0, 0, 0
++      .text
++      b       _zimage_start
+ #ifdef __powerpc64__
+ .balign 8
+-- 
+2.19.1
+
diff --git a/queue-4.9/scsi-bnx2fc-fix-null-dereference-in-error-handling.patch b/queue-4.9/scsi-bnx2fc-fix-null-dereference-in-error-handling.patch
new file mode 100644 (file)
index 0000000..01cc443
--- /dev/null
@@ -0,0 +1,34 @@
+From 798ed5d1a1dfb2e49b85b02eb29835b3db74945c Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Thu, 1 Nov 2018 08:25:30 +0300
+Subject: scsi: bnx2fc: Fix NULL dereference in error handling
+
+[ Upstream commit 9ae4f8420ed7be4b13c96600e3568c144d101a23 ]
+
+If "interface" is NULL then we can't release it and trying to will only
+lead to an Oops.
+
+Fixes: aea71a024914 ("[SCSI] bnx2fc: Introduce interface structure for each vlan interface")
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
+index bee7d37367ca..68cc332bd6cb 100644
+--- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
++++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
+@@ -2331,7 +2331,7 @@ static int _bnx2fc_create(struct net_device *netdev,
+       if (!interface) {
+               printk(KERN_ERR PFX "bnx2fc_interface_create failed\n");
+               rc = -ENOMEM;
+-              goto ifput_err;
++              goto netdev_err;
+       }
+       if (netdev->priv_flags & IFF_802_1Q_VLAN) {
+-- 
+2.19.1
+
diff --git a/queue-4.9/scsi-target-iscsi-cxgbit-add-missing-spin_lock_init.patch b/queue-4.9/scsi-target-iscsi-cxgbit-add-missing-spin_lock_init.patch
new file mode 100644 (file)
index 0000000..df25f90
--- /dev/null
@@ -0,0 +1,31 @@
+From d8910ce564dca804928151539d42b7b56b9c4dae Mon Sep 17 00:00:00 2001
+From: Varun Prakash <varun@chelsio.com>
+Date: Fri, 9 Nov 2018 20:59:46 +0530
+Subject: scsi: target: iscsi: cxgbit: add missing spin_lock_init()
+
+[ Upstream commit 9e6371d3c6913ff1707fb2c0274c9925f7aaef80 ]
+
+Add missing spin_lock_init() for cdev->np_lock.
+
+Signed-off-by: Varun Prakash <varun@chelsio.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/target/iscsi/cxgbit/cxgbit_main.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/target/iscsi/cxgbit/cxgbit_main.c b/drivers/target/iscsi/cxgbit/cxgbit_main.c
+index ad26b9372f10..d55261e1d522 100644
+--- a/drivers/target/iscsi/cxgbit/cxgbit_main.c
++++ b/drivers/target/iscsi/cxgbit/cxgbit_main.c
+@@ -58,6 +58,7 @@ static void *cxgbit_uld_add(const struct cxgb4_lld_info *lldi)
+               return ERR_PTR(-ENOMEM);
+       kref_init(&cdev->kref);
++      spin_lock_init(&cdev->np_lock);
+       cdev->lldi = *lldi;
+-- 
+2.19.1
+
diff --git a/queue-4.9/scsi-target-iscsi-cxgbit-fix-csk-leak.patch b/queue-4.9/scsi-target-iscsi-cxgbit-fix-csk-leak.patch
new file mode 100644 (file)
index 0000000..d767f2c
--- /dev/null
@@ -0,0 +1,46 @@
+From 0d97a981871f1ee41a5f811e07685d6e677c47c0 Mon Sep 17 00:00:00 2001
+From: Varun Prakash <varun@chelsio.com>
+Date: Fri, 9 Nov 2018 20:59:01 +0530
+Subject: scsi: target: iscsi: cxgbit: fix csk leak
+
+[ Upstream commit 801df68d617e3cb831f531c99fa6003620e6b343 ]
+
+csk leak can happen if a new TCP connection gets established after
+cxgbit_accept_np() returns, to fix this leak free remaining csk in
+cxgbit_free_np().
+
+Signed-off-by: Varun Prakash <varun@chelsio.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/target/iscsi/cxgbit/cxgbit_cm.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/target/iscsi/cxgbit/cxgbit_cm.c b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
+index 2fb1bf1a26c5..8652475e01d0 100644
+--- a/drivers/target/iscsi/cxgbit/cxgbit_cm.c
++++ b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
+@@ -631,8 +631,11 @@ static void cxgbit_send_halfclose(struct cxgbit_sock *csk)
+ static void cxgbit_arp_failure_discard(void *handle, struct sk_buff *skb)
+ {
++      struct cxgbit_sock *csk = handle;
++
+       pr_debug("%s cxgbit_device %p\n", __func__, handle);
+       kfree_skb(skb);
++      cxgbit_put_csk(csk);
+ }
+ static void cxgbit_abort_arp_failure(void *handle, struct sk_buff *skb)
+@@ -1136,7 +1139,7 @@ cxgbit_pass_accept_rpl(struct cxgbit_sock *csk, struct cpl_pass_accept_req *req)
+       rpl5->opt0 = cpu_to_be64(opt0);
+       rpl5->opt2 = cpu_to_be32(opt2);
+       set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->ctrlq_idx);
+-      t4_set_arp_err_handler(skb, NULL, cxgbit_arp_failure_discard);
++      t4_set_arp_err_handler(skb, csk, cxgbit_arp_failure_discard);
+       cxgbit_l2t_send(csk->com.cdev, skb, csk->l2t);
+ }
+-- 
+2.19.1
+
diff --git a/queue-4.9/serial-sunsu-fix-refcount-leak.patch b/queue-4.9/serial-sunsu-fix-refcount-leak.patch
new file mode 100644 (file)
index 0000000..d120eb0
--- /dev/null
@@ -0,0 +1,80 @@
+From 4518312a2875dba3a233d225dcb9bb744997905c Mon Sep 17 00:00:00 2001
+From: Yangtao Li <tiny.windzz@gmail.com>
+Date: Wed, 12 Dec 2018 11:01:45 -0500
+Subject: serial/sunsu: fix refcount leak
+
+[ Upstream commit d430aff8cd0c57502d873909c184e3b5753f8b88 ]
+
+The function of_find_node_by_path() acquires a reference to the node
+returned by it and that reference needs to be dropped by its caller.
+
+su_get_type() doesn't do that. The match node are used as an identifier
+to compare against the current node, so we can directly drop the refcount
+after getting the node from the path as it is not used as pointer.
+
+Fix this by use a single variable and drop the refcount right after
+of_find_node_by_path().
+
+Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/serial/sunsu.c | 31 ++++++++++++++++++++++++++-----
+ 1 file changed, 26 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/tty/serial/sunsu.c b/drivers/tty/serial/sunsu.c
+index 9ad98eaa35bf..26ae83026c52 100644
+--- a/drivers/tty/serial/sunsu.c
++++ b/drivers/tty/serial/sunsu.c
+@@ -1393,22 +1393,43 @@ static inline struct console *SUNSU_CONSOLE(void)
+ static enum su_type su_get_type(struct device_node *dp)
+ {
+       struct device_node *ap = of_find_node_by_path("/aliases");
++      enum su_type rc = SU_PORT_PORT;
+       if (ap) {
+               const char *keyb = of_get_property(ap, "keyboard", NULL);
+               const char *ms = of_get_property(ap, "mouse", NULL);
++              struct device_node *match;
+               if (keyb) {
+-                      if (dp == of_find_node_by_path(keyb))
+-                              return SU_PORT_KBD;
++                      match = of_find_node_by_path(keyb);
++
++                      /*
++                       * The pointer is used as an identifier not
++                       * as a pointer, we can drop the refcount on
++                       * the of__node immediately after getting it.
++                       */
++                      of_node_put(match);
++
++                      if (dp == match) {
++                              rc = SU_PORT_KBD;
++                              goto out;
++                      }
+               }
+               if (ms) {
+-                      if (dp == of_find_node_by_path(ms))
+-                              return SU_PORT_MS;
++                      match = of_find_node_by_path(ms);
++
++                      of_node_put(match);
++
++                      if (dp == match) {
++                              rc = SU_PORT_MS;
++                              goto out;
++                      }
+               }
+       }
+-      return SU_PORT_PORT;
++out:
++      of_node_put(ap);
++      return rc;
+ }
+ static int su_probe(struct platform_device *op)
+-- 
+2.19.1
+
diff --git a/queue-4.9/series b/queue-4.9/series
new file mode 100644 (file)
index 0000000..8a07124
--- /dev/null
@@ -0,0 +1,32 @@
+pinctrl-meson-fix-pull-enable-register-calculation.patch
+powerpc-fix-coff-zimage-booting-on-old-powermacs.patch
+arm-imx-update-the-cpu-power-up-timing-setting-on-i..patch
+arm-dts-imx7d-nitrogen7-fix-the-description-of-the-w.patch
+input-restore-ev_abs-abs_reserved.patch
+checkstack.pl-fix-for-aarch64.patch
+xfrm-fix-bucket-count-reported-to-userspace.patch
+netfilter-seqadj-re-load-tcp-header-pointer-after-po.patch
+scsi-bnx2fc-fix-null-dereference-in-error-handling.patch
+input-omap-keypad-fix-idle-configuration-to-not-bloc.patch
+netfilter-ipset-do-not-call-ipset_nest_end-after-nla.patch
+bnx2x-clear-fip-mac-when-fcoe-offload-support-is-dis.patch
+bnx2x-remove-configured-vlans-as-part-of-unload-sequ.patch
+bnx2x-send-update-svid-ramrod-with-retry-poll-flags-.patch
+scsi-target-iscsi-cxgbit-fix-csk-leak.patch
+scsi-target-iscsi-cxgbit-add-missing-spin_lock_init.patch
+drivers-net-xgene-remove-unnecessary-forward-declara.patch
+w90p910_ether-remove-incorrect-__init-annotation.patch
+net-hns-incorrect-offset-address-used-for-some-regis.patch
+net-hns-all-ports-can-not-work-when-insmod-hns-ko-af.patch
+net-hns-some-registers-use-wrong-address-according-t.patch
+net-hns-fixed-bug-that-netdev-was-opened-twice.patch
+net-hns-clean-rx-fbd-when-ae-stopped.patch
+net-hns-free-irq-when-exit-from-abnormal-branch.patch
+net-hns-avoid-net-reset-caused-by-pause-frames-storm.patch
+net-hns-fix-ntuple-filters-status-error.patch
+net-hns-add-mac-pcs-config-when-enable-disable-mac.patch
+sunrpc-fix-a-race-with-xprt_connecting.patch
+lan78xx-resolve-issue-with-changing-mac-address.patch
+vxge-ensure-data0-is-initialized-in-when-fetching-fi.patch
+net-netxen-fix-a-missing-check-and-an-uninitialized-.patch
+serial-sunsu-fix-refcount-leak.patch
diff --git a/queue-4.9/sunrpc-fix-a-race-with-xprt_connecting.patch b/queue-4.9/sunrpc-fix-a-race-with-xprt_connecting.patch
new file mode 100644 (file)
index 0000000..6e1a327
--- /dev/null
@@ -0,0 +1,45 @@
+From 5d2af5fe636c43915e862ff246a359c2f99ea9ac Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+Date: Mon, 17 Dec 2018 17:38:51 -0500
+Subject: SUNRPC: Fix a race with XPRT_CONNECTING
+
+[ Upstream commit cf76785d30712d90185455e752337acdb53d2a5d ]
+
+Ensure that we clear XPRT_CONNECTING before releasing the XPRT_LOCK so that
+we don't have races between the (asynchronous) socket setup code and
+tasks in xprt_connect().
+
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Tested-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sunrpc/xprtsock.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
+index 1bf9153004cd..280fb3178708 100644
+--- a/net/sunrpc/xprtsock.c
++++ b/net/sunrpc/xprtsock.c
+@@ -2209,8 +2209,8 @@ static void xs_udp_setup_socket(struct work_struct *work)
+       trace_rpc_socket_connect(xprt, sock, 0);
+       status = 0;
+ out:
+-      xprt_unlock_connect(xprt, transport);
+       xprt_clear_connecting(xprt);
++      xprt_unlock_connect(xprt, transport);
+       xprt_wake_pending_tasks(xprt, status);
+ }
+@@ -2395,8 +2395,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)
+       }
+       status = -EAGAIN;
+ out:
+-      xprt_unlock_connect(xprt, transport);
+       xprt_clear_connecting(xprt);
++      xprt_unlock_connect(xprt, transport);
+       xprt_wake_pending_tasks(xprt, status);
+ }
+-- 
+2.19.1
+
diff --git a/queue-4.9/vxge-ensure-data0-is-initialized-in-when-fetching-fi.patch b/queue-4.9/vxge-ensure-data0-is-initialized-in-when-fetching-fi.patch
new file mode 100644 (file)
index 0000000..4ed646f
--- /dev/null
@@ -0,0 +1,41 @@
+From a1582c170124dcc9227c01fd60a6797c875795a5 Mon Sep 17 00:00:00 2001
+From: Colin Ian King <colin.king@canonical.com>
+Date: Tue, 18 Dec 2018 15:19:47 +0000
+Subject: vxge: ensure data0 is initialized in when fetching firmware version
+ information
+
+[ Upstream commit f7db2beb4c2c6cc8111f5ab90fc7363ca91107b6 ]
+
+Currently variable data0 is not being initialized so a garbage value is
+being passed to vxge_hw_vpath_fw_api and this value is being written to
+the rts_access_steer_data0 register.  There are other occurrances where
+data0 is being initialized to zero (e.g. in function
+vxge_hw_upgrade_read_version) so I think it makes sense to ensure data0
+is initialized likewise to 0.
+
+Detected by CoverityScan, CID#140696 ("Uninitialized scalar variable")
+
+Fixes: 8424e00dfd52 ("vxge: serialize access to steering control register")
+Signed-off-by: Colin Ian King <colin.king@canonical.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/neterion/vxge/vxge-config.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c
+index 6223930a8155..6f57b0b7d57a 100644
+--- a/drivers/net/ethernet/neterion/vxge/vxge-config.c
++++ b/drivers/net/ethernet/neterion/vxge/vxge-config.c
+@@ -808,7 +808,7 @@ __vxge_hw_vpath_fw_ver_get(struct __vxge_hw_virtualpath *vpath,
+       struct vxge_hw_device_date *fw_date = &hw_info->fw_date;
+       struct vxge_hw_device_version *flash_version = &hw_info->flash_version;
+       struct vxge_hw_device_date *flash_date = &hw_info->flash_date;
+-      u64 data0, data1 = 0, steer_ctrl = 0;
++      u64 data0 = 0, data1 = 0, steer_ctrl = 0;
+       enum vxge_hw_status status;
+       status = vxge_hw_vpath_fw_api(vpath,
+-- 
+2.19.1
+
diff --git a/queue-4.9/w90p910_ether-remove-incorrect-__init-annotation.patch b/queue-4.9/w90p910_ether-remove-incorrect-__init-annotation.patch
new file mode 100644 (file)
index 0000000..a132ee0
--- /dev/null
@@ -0,0 +1,40 @@
+From 9119f61f8e090154aaafa1790d2b545016e43568 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Mon, 10 Dec 2018 21:45:07 +0100
+Subject: w90p910_ether: remove incorrect __init annotation
+
+[ Upstream commit 51367e423c6501a26e67d91a655d2bc892303462 ]
+
+The get_mac_address() function is normally inline, but when it is
+not, we get a warning that this configuration is broken:
+
+WARNING: vmlinux.o(.text+0x4aff00): Section mismatch in reference from the function w90p910_ether_setup() to the function .init.text:get_mac_address()
+The function w90p910_ether_setup() references
+the function __init get_mac_address().
+This is often because w90p910_ether_setup lacks a __init
+
+Remove the __init to make it always do the right thing.
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/nuvoton/w90p910_ether.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/nuvoton/w90p910_ether.c b/drivers/net/ethernet/nuvoton/w90p910_ether.c
+index 712d8bcb7d8c..a2960169a784 100644
+--- a/drivers/net/ethernet/nuvoton/w90p910_ether.c
++++ b/drivers/net/ethernet/nuvoton/w90p910_ether.c
+@@ -918,7 +918,7 @@ static const struct net_device_ops w90p910_ether_netdev_ops = {
+       .ndo_change_mtu         = eth_change_mtu,
+ };
+-static void __init get_mac_address(struct net_device *dev)
++static void get_mac_address(struct net_device *dev)
+ {
+       struct w90p910_ether *ether = netdev_priv(dev);
+       struct platform_device *pdev;
+-- 
+2.19.1
+
diff --git a/queue-4.9/xfrm-fix-bucket-count-reported-to-userspace.patch b/queue-4.9/xfrm-fix-bucket-count-reported-to-userspace.patch
new file mode 100644 (file)
index 0000000..af0f70d
--- /dev/null
@@ -0,0 +1,34 @@
+From 25d314007c44cf9740798e397ef957ce8a2ae154 Mon Sep 17 00:00:00 2001
+From: Benjamin Poirier <bpoirier@suse.com>
+Date: Mon, 5 Nov 2018 17:00:53 +0900
+Subject: xfrm: Fix bucket count reported to userspace
+
+[ Upstream commit ca92e173ab34a4f7fc4128bd372bd96f1af6f507 ]
+
+sadhcnt is reported by `ip -s xfrm state count` as "buckets count", not the
+hash mask.
+
+Fixes: 28d8909bc790 ("[XFRM]: Export SAD info.")
+Signed-off-by: Benjamin Poirier <bpoirier@suse.com>
+Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/xfrm/xfrm_state.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
+index 71a94e549301..884f2136b34b 100644
+--- a/net/xfrm/xfrm_state.c
++++ b/net/xfrm/xfrm_state.c
+@@ -641,7 +641,7 @@ void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si)
+ {
+       spin_lock_bh(&net->xfrm.xfrm_state_lock);
+       si->sadcnt = net->xfrm.state_num;
+-      si->sadhcnt = net->xfrm.state_hmask;
++      si->sadhcnt = net->xfrm.state_hmask + 1;
+       si->sadhmcnt = xfrm_state_hashmax;
+       spin_unlock_bh(&net->xfrm.xfrm_state_lock);
+ }
+-- 
+2.19.1
+