History

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Pull networking fixes from David Miller: 1) Don't ignore user initiated wireless regulatory settings on cards with custom regulatory domains, from Arik Nemtsov. 2) Fix length check of bluetooth information responses, from Jaganath Kanakkassery. 3) Fix misuse of PTR_ERR in btusb, from Adam Lee. 4) Handle rfkill properly while iwlwifi devices are offline, from Emmanuel Grumbach. 5) Fix r815x devices DMA'ing to stack buffers, from Hayes Wang. 6) Kernel info leak in ATM packet scheduler, from Dan Carpenter. 7) 8139cp doesn't check for DMA mapping errors, from Neil Horman. 8) Fix bridge multicast code to not snoop when no querier exists, otherwise mutlicast traffic is lost. From Linus Lüssing. 9) Avoid soft lockups in fib6_run_gc(), from Michal Kubecek. 10) Fix races in automatic address asignment on ipv6, which can result in incorrect lifetime assignments. From Jiri Benc. 11) Cure build bustage when CONFIG_NET_LL_RX_POLL is not set and rename it CONFIG_NET_RX_BUSY_POLL to eliminate the last reference to the original naming of this feature. From Cong Wang. 12) Fix crash in TIPC when server socket creation fails, from Ying Xue. 13) macvlan_changelink() silently succeeds when it shouldn't, from Michael S Tsirkin. 14) HTB packet scheduler can crash due to sign extension, fix from Stephen Hemminger. 15) With the cable unplugged, r8169 prints out a message every 10 seconds, make it netif_dbg() instead of netif_warn(). From Peter Wu. 16) Fix memory leak in rtm_to_ifaddr(), from Daniel Borkmann. 17) sis900 gets spurious TX queue timeouts due to mismanagement of link carrier state, from Denis Kirjanov. 18) Validate somaxconn sysctl to make sure it fits inside of a u16. From Roman Gushchin. 19) Fix MAC address filtering on qlcnic, from Shahed Shaikh. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (68 commits) qlcnic: Fix for flash update failure on 83xx adapter qlcnic: Fix link speed and duplex display for 83xx adapter qlcnic: Fix link speed display for 82xx adapter qlcnic: Fix external loopback test. qlcnic: Removed adapter series name from warning messages. qlcnic: Free up memory in error path. qlcnic: Fix ingress MAC learning qlcnic: Fix MAC address filter issue on 82xx adapter net: ethernet: davinci_emac: drop IRQF_DISABLED netlabel: use domain based selectors when address based selectors are not available net: check net.core.somaxconn sysctl values sis900: Fix the tx queue timeout issue net: rtm_to_ifaddr: free ifa if ifa_cacheinfo processing fails r8169: remove "PHY reset until link up" log spam net: ethernet: cpsw: drop IRQF_DISABLED htb: fix sign extension bug macvlan: handle set_promiscuity failures macvlan: better mode validation tipc: fix oops when creating server socket fails net: rename CONFIG_NET_LL_RX_POLL to CONFIG_NET_RX_BUSY_POLL ...

Linus Torvalds committed 13 years ago

Commit 72a67a92 parents 83aaf3b 4bd8e7392 files · +995 −678Browse files

Unified · Split

92 files
  1. Documentation/sysctl/net.txt +2 −2
  2. MAINTAINERS +10 −2
  3. drivers/bluetooth/ath3k.c +37 −9
  4. drivers/bluetooth/btusb.c +11 −7
  5. drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +4 −4
  6. drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +1 −1
  7. drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +1 −1
  8. drivers/net/ethernet/intel/ixgbe/ixgbe.h +6 −6
  9. drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +3 −3
  10. drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +3 −3
  11. drivers/net/ethernet/mellanox/mlx4/en_netdev.c +3 −3
  12. drivers/net/ethernet/mellanox/mlx4/fw.c +1 −10
  13. drivers/net/ethernet/mellanox/mlx4/main.c +1 −1
  14. drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +5 −5
  15. drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +3 −9
  16. drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +76 −50
  17. drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h +1 −1
  18. drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +61 −30
  19. drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c +8 −8
  20. drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +62 −21
  21. drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c +27 −13
  22. drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h +1 −1
  23. drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c +17 −8
  24. drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c +67 −34
  25. drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +11 −8
  26. drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +1 −1
  27. drivers/net/ethernet/realtek/8139cp.c +45 −3
  28. drivers/net/ethernet/realtek/r8169.c +1 −1
  29. drivers/net/ethernet/sis/sis900.c +2 −10
  30. drivers/net/ethernet/ti/cpsw.c +1 −1
  31. drivers/net/ethernet/ti/davinci_emac.c +1 −2
  32. drivers/net/macvlan.c +19 −4
  33. drivers/net/usb/r8152.c +58 −68
  34. drivers/net/usb/r815x.c +42 −20
  35. drivers/net/wireless/ath/ath10k/Kconfig +1 −1
  36. drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +4 −1
  37. drivers/net/wireless/iwlwifi/iwl-prph.h +2 −0
  38. drivers/net/wireless/iwlwifi/mvm/d3.c +10 −5
  39. drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +0 −1
  40. drivers/net/wireless/iwlwifi/mvm/mac80211.c +21 −21
  41. drivers/net/wireless/iwlwifi/mvm/scan.c +2 −9
  42. drivers/net/wireless/iwlwifi/mvm/sta.c +8 −3
  43. drivers/net/wireless/iwlwifi/pcie/drv.c +1 −0
  44. drivers/net/wireless/iwlwifi/pcie/rx.c +8 −0
  45. drivers/net/wireless/iwlwifi/pcie/trans.c +5 −0
  46. drivers/net/wireless/mwifiex/cfg80211.c +2 −2
  47. drivers/net/wireless/mwifiex/cfp.c +2 −1
  48. drivers/net/wireless/mwifiex/join.c +4 −2
  49. drivers/net/wireless/mwifiex/sdio.c +2 −2
  50. drivers/net/wireless/mwifiex/sta_ioctl.c +2 −2
  51. drivers/net/wireless/rt2x00/rt2x00queue.c +11 −7
  52. include/linux/netdevice.h +1 −1
  53. include/linux/skbuff.h +1 −1
  54. include/net/busy_poll.h +8 −3
  55. include/net/ip6_fib.h +1 −1
  56. include/net/ndisc.h +1 −1
  57. include/net/nfc/hci.h +1 −1
  58. include/net/nfc/nfc.h +2 −2
  59. include/net/sock.h +1 −1
  60. include/uapi/linux/nfc.h +3 −3
  61. net/Kconfig +1 −1
  62. net/bluetooth/hci_core.c +17 −9
  63. net/bridge/br_device.c +2 −1
  64. net/bridge/br_input.c +2 −1
  65. net/bridge/br_multicast.c +30 −9
  66. net/bridge/br_private.h +12 −0
  67. net/core/skbuff.c +1 −1
  68. net/core/sock.c +3 −3
  69. net/core/sysctl_net_core.c +6 −2
  70. net/ipv4/devinet.c +3 −1
  71. net/ipv6/addrconf.c +22 −21
  72. net/ipv6/ip6_fib.c +13 −12
  73. net/ipv6/ndisc.c +2 −2
  74. net/ipv6/route.c +3 −5
  75. net/mac80211/mesh_ps.c +4 −0
  76. net/mac80211/pm.c +5 −2
  77. net/netlabel/netlabel_cipso_v4.c +2 −2
  78. net/netlabel/netlabel_domainhash.c +49 −55
  79. net/netlabel/netlabel_domainhash.h +22 −24
  80. net/netlabel/netlabel_kapi.c +35 −53
  81. net/netlabel/netlabel_mgmt.c +21 −23
  82. net/netlabel/netlabel_unlabeled.c +1 −1
  83. net/nfc/core.c +10 −10
  84. net/nfc/hci/core.c +4 −4
  85. net/nfc/nci/Kconfig +1 −0
  86. net/nfc/netlink.c +6 −6
  87. net/nfc/nfc.h +3 −3
  88. net/sched/sch_atm.c +1 −0
  89. net/sched/sch_htb.c +1 −1
  90. net/socket.c +1 −1
  91. net/tipc/server.c +12 −3
  92. net/wireless/reg.c +4 −1
Documentation/sysctl/net.txt+2−2
@@ -52,7 +52,7 @@ Default: 64 · 51 unmodified lines
5252
5353 busy_read
5454 ----------------
55−Low latency busy poll timeout for socket reads. (needs CONFIG_NET_LL_RX_POLL)
55+Low latency busy poll timeout for socket reads. (needs CONFIG_NET_RX_BUSY_POLL)
5656 Approximate time in us to busy loop waiting for packets on the device queue.
5757 This sets the default value of the SO_BUSY_POLL socket option.
5858 Can be set or overridden per socket by setting socket option SO_BUSY_POLL,
@@ -63,7 +63,7 @@ Default: 0 (off) · 4 unmodified lines
6363
6464 busy_poll
6565 ----------------
66−Low latency busy poll timeout for poll and select. (needs CONFIG_NET_LL_RX_POLL)
66+Low latency busy poll timeout for poll and select. (needs CONFIG_NET_RX_BUSY_POLL)
6767 Approximate time in us to busy loop waiting for events.
6868 Recommended value depends on the number of sockets you poll on.
6969 For several sockets 50, for several hundreds 100.
MAINTAINERS+10−2
@@ -1406,7 +1406,7 @@ ATHEROS ATH6KL WIRELESS DRIVER · 1405 unmodified lines
14061406 M: Kalle Valo <kvalo@qca.qualcomm.com>
14071407 L: linux-wireless@vger.kernel.org
14081408 W: http://wireless.kernel.org/en/users/Drivers/ath6kl
1409−T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath6kl.git
1409+T: git git://github.com/kvalo/ath.git
14101410 S: Supported
14111411 F: drivers/net/wireless/ath/ath6kl/
14121412
@@ -6726,6 +6726,14 @@ T: git git://linuxtv.org/anttip/media_tree.git · 5313 unmodified lines
67266726 S: Maintained
67276727 F: drivers/media/tuners/qt1010*
67286728
6729+QUALCOMM ATHEROS ATH10K WIRELESS DRIVER
6730+M: Kalle Valo <kvalo@qca.qualcomm.com>
6731+L: ath10k@lists.infradead.org
6732+W: http://wireless.kernel.org/en/users/Drivers/ath10k
6733+T: git git://github.com/kvalo/ath.git
6734+S: Supported
6735+F: drivers/net/wireless/ath/ath10k/
6736+
67296737 QUALCOMM HEXAGON ARCHITECTURE
67306738 M: Richard Kuo <rkuo@codeaurora.org>
67316739 L: linux-hexagon@vger.kernel.org
@@ -8270,7 +8278,7 @@ S: Maintained · 1538 unmodified lines
82708278 F: sound/soc/codecs/twl4030*
82718279
82728280 TI WILINK WIRELESS DRIVERS
8273−M: Luciano Coelho <coelho@ti.com>
8281+M: Luciano Coelho <luca@coelho.fi>
82748282 L: linux-wireless@vger.kernel.org
82758283 W: http://wireless.kernel.org/en/users/Drivers/wl12xx
82768284 W: http://wireless.kernel.org/en/users/Drivers/wl1251
drivers/bluetooth/ath3k.c+37−9
@@ -91,6 +91,10 @@ static struct usb_device_id ath3k_table[] = { · 90 unmodified lines
9191 { USB_DEVICE(0x0489, 0xe04e) },
9292 { USB_DEVICE(0x0489, 0xe056) },
9393 { USB_DEVICE(0x0489, 0xe04d) },
94+ { USB_DEVICE(0x04c5, 0x1330) },
95+ { USB_DEVICE(0x13d3, 0x3402) },
96+ { USB_DEVICE(0x0cf3, 0x3121) },
97+ { USB_DEVICE(0x0cf3, 0xe003) },
9498
9599 /* Atheros AR5BBU12 with sflash firmware */
96100 { USB_DEVICE(0x0489, 0xE02C) },
@@ -128,6 +132,10 @@ static struct usb_device_id ath3k_blist_tbl[] = { · 31 unmodified lines
128132 { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 },
129133 { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
130134 { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 },
135+ { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
136+ { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
137+ { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 },
138+ { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 },
131139
132140 /* Atheros AR5BBU22 with sflash firmware */
133141 { USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 },
@@ -193,24 +201,44 @@ error: · 59 unmodified lines
193201
194202 static int ath3k_get_state(struct usb_device *udev, unsigned char *state)
195203 {
196− int pipe = 0;
204+ int ret, pipe = 0;
205+ char *buf;
206+
207+ buf = kmalloc(sizeof(*buf), GFP_KERNEL);
208+ if (!buf)
209+ return -ENOMEM;
197210
198211 pipe = usb_rcvctrlpipe(udev, 0);
199− return usb_control_msg(udev, pipe, ATH3K_GETSTATE,
200− USB_TYPE_VENDOR | USB_DIR_IN, 0, 0,
201− state, 0x01, USB_CTRL_SET_TIMEOUT);
212+ ret = usb_control_msg(udev, pipe, ATH3K_GETSTATE,
213+ USB_TYPE_VENDOR | USB_DIR_IN, 0, 0,
214+ buf, sizeof(*buf), USB_CTRL_SET_TIMEOUT);
215+
216+ *state = *buf;
217+ kfree(buf);
218+
219+ return ret;
202220 }
203221
204222 static int ath3k_get_version(struct usb_device *udev,
205223 struct ath3k_version *version)
206224 {
207− int pipe = 0;
225+ int ret, pipe = 0;
226+ struct ath3k_version *buf;
227+ const int size = sizeof(*buf);
228+
229+ buf = kmalloc(size, GFP_KERNEL);
230+ if (!buf)
231+ return -ENOMEM;
208232
209233 pipe = usb_rcvctrlpipe(udev, 0);
210− return usb_control_msg(udev, pipe, ATH3K_GETVERSION,
211− USB_TYPE_VENDOR | USB_DIR_IN, 0, 0, version,
212− sizeof(struct ath3k_version),
213− USB_CTRL_SET_TIMEOUT);
234+ ret = usb_control_msg(udev, pipe, ATH3K_GETVERSION,
235+ USB_TYPE_VENDOR | USB_DIR_IN, 0, 0,
236+ buf, size, USB_CTRL_SET_TIMEOUT);
237+
238+ memcpy(version, buf, size);
239+ kfree(buf);
240+
241+ return ret;
214242 }
215243
216244 static int ath3k_load_fwfile(struct usb_device *udev,
drivers/bluetooth/btusb.c+11−7
@@ -154,6 +154,10 @@ static struct usb_device_id blacklist_table[] = { · 153 unmodified lines
154154 { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 },
155155 { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
156156 { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 },
157+ { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
158+ { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
159+ { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 },
160+ { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 },
157161
158162 /* Atheros AR5BBU12 with sflash firmware */
159163 { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
@@ -1095,7 +1099,7 @@ static int btusb_setup_intel_patching(struct hci_dev *hdev, · 935 unmodified lines
10951099 if (IS_ERR(skb)) {
10961100 BT_ERR("%s sending Intel patch command (0x%4.4x) failed (%ld)",
10971101 hdev->name, cmd->opcode, PTR_ERR(skb));
1098− return -PTR_ERR(skb);
1102+ return PTR_ERR(skb);
10991103 }
11001104
11011105 /* It ensures that the returned event matches the event data read from
@@ -1147,7 +1151,7 @@ static int btusb_setup_intel(struct hci_dev *hdev) · 45 unmodified lines
11471151 if (IS_ERR(skb)) {
11481152 BT_ERR("%s sending initial HCI reset command failed (%ld)",
11491153 hdev->name, PTR_ERR(skb));
1150− return -PTR_ERR(skb);
1154+ return PTR_ERR(skb);
11511155 }
11521156 kfree_skb(skb);
11531157
@@ -1161,7 +1165,7 @@ static int btusb_setup_intel(struct hci_dev *hdev) · 7 unmodified lines
11611165 if (IS_ERR(skb)) {
11621166 BT_ERR("%s reading Intel fw version command failed (%ld)",
11631167 hdev->name, PTR_ERR(skb));
1164− return -PTR_ERR(skb);
1168+ return PTR_ERR(skb);
11651169 }
11661170
11671171 if (skb->len != sizeof(*ver)) {
@@ -1219,7 +1223,7 @@ static int btusb_setup_intel(struct hci_dev *hdev) · 51 unmodified lines
12191223 BT_ERR("%s entering Intel manufacturer mode failed (%ld)",
12201224 hdev->name, PTR_ERR(skb));
12211225 release_firmware(fw);
1222− return -PTR_ERR(skb);
1226+ return PTR_ERR(skb);
12231227 }
12241228
12251229 if (skb->data[0]) {
@@ -1276,7 +1280,7 @@ static int btusb_setup_intel(struct hci_dev *hdev) · 50 unmodified lines
12761280 if (IS_ERR(skb)) {
12771281 BT_ERR("%s exiting Intel manufacturer mode failed (%ld)",
12781282 hdev->name, PTR_ERR(skb));
1279− return -PTR_ERR(skb);
1283+ return PTR_ERR(skb);
12801284 }
12811285 kfree_skb(skb);
12821286
@@ -1292,7 +1296,7 @@ exit_mfg_disable: · 9 unmodified lines
12921296 if (IS_ERR(skb)) {
12931297 BT_ERR("%s exiting Intel manufacturer mode failed (%ld)",
12941298 hdev->name, PTR_ERR(skb));
1295− return -PTR_ERR(skb);
1299+ return PTR_ERR(skb);
12961300 }
12971301 kfree_skb(skb);
12981302
@@ -1310,7 +1314,7 @@ exit_mfg_deactivate: · 11 unmodified lines
13101314 if (IS_ERR(skb)) {
13111315 BT_ERR("%s exiting Intel manufacturer mode failed (%ld)",
13121316 hdev->name, PTR_ERR(skb));
1313− return -PTR_ERR(skb);
1317+ return PTR_ERR(skb);
13141318 }
13151319 kfree_skb(skb);
13161320
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h+4−4
@@ -486,7 +486,7 @@ struct bnx2x_fastpath { · 485 unmodified lines
486486
487487 struct napi_struct napi;
488488
489−#ifdef CONFIG_NET_LL_RX_POLL
489+#ifdef CONFIG_NET_RX_BUSY_POLL
490490 unsigned int state;
491491 #define BNX2X_FP_STATE_IDLE 0
492492 #define BNX2X_FP_STATE_NAPI (1 << 0) /* NAPI owns this FP */
@@ -498,7 +498,7 @@ struct bnx2x_fastpath { · 5 unmodified lines
498498 #define BNX2X_FP_USER_PEND (BNX2X_FP_STATE_POLL | BNX2X_FP_STATE_POLL_YIELD)
499499 /* protect state */
500500 spinlock_t lock;
501−#endif /* CONFIG_NET_LL_RX_POLL */
501+#endif /* CONFIG_NET_RX_BUSY_POLL */
502502
503503 union host_hc_status_block status_blk;
504504 /* chip independent shortcuts into sb structure */
@@ -572,7 +572,7 @@ struct bnx2x_fastpath { · 67 unmodified lines
572572 #define bnx2x_fp_stats(bp, fp) (&((bp)->fp_stats[(fp)->index]))
573573 #define bnx2x_fp_qstats(bp, fp) (&((bp)->fp_stats[(fp)->index].eth_q_stats))
574574
575−#ifdef CONFIG_NET_LL_RX_POLL
575+#ifdef CONFIG_NET_RX_BUSY_POLL
576576 static inline void bnx2x_fp_init_lock(struct bnx2x_fastpath *fp)
577577 {
578578 spin_lock_init(&fp->lock);
@@ -680,7 +680,7 @@ static inline bool bnx2x_fp_ll_polling(struct bnx2x_fastpath *fp) · 101 unmodified lines
680680 {
681681 return false;
682682 }
683−#endif /* CONFIG_NET_LL_RX_POLL */
683+#endif /* CONFIG_NET_RX_BUSY_POLL */
684684
685685 /* Use 2500 as a mini-jumbo MTU for FCoE */
686686 #define BNX2X_FCOE_MINI_JUMBO_MTU 2500
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c+1−1
@@ -3117,7 +3117,7 @@ int bnx2x_poll(struct napi_struct *napi, int budget) · 3116 unmodified lines
31173117 return work_done;
31183118 }
31193119
3120−#ifdef CONFIG_NET_LL_RX_POLL
3120+#ifdef CONFIG_NET_RX_BUSY_POLL
31213121 /* must be called with local_bh_disable()d */
31223122 int bnx2x_low_latency_recv(struct napi_struct *napi)
31233123 {
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c+1−1
@@ -12026,7 +12026,7 @@ static const struct net_device_ops bnx2x_netdev_ops = { · 12025 unmodified lines
1202612026 .ndo_fcoe_get_wwn = bnx2x_fcoe_get_wwn,
1202712027 #endif
1202812028
12029−#ifdef CONFIG_NET_LL_RX_POLL
12029+#ifdef CONFIG_NET_RX_BUSY_POLL
1203012030 .ndo_busy_poll = bnx2x_low_latency_recv,
1203112031 #endif
1203212032 };
drivers/net/ethernet/intel/ixgbe/ixgbe.h+6−6
@@ -54,7 +54,7 @@ · 53 unmodified lines
5454
5555 #include <net/busy_poll.h>
5656
57−#ifdef CONFIG_NET_LL_RX_POLL
57+#ifdef CONFIG_NET_RX_BUSY_POLL
5858 #define LL_EXTENDED_STATS
5959 #endif
6060 /* common prefix used by pr_<> macros */
@@ -366,7 +366,7 @@ struct ixgbe_q_vector { · 305 unmodified lines
366366 struct rcu_head rcu; /* to avoid race with update stats on free */
367367 char name[IFNAMSIZ + 9];
368368
369−#ifdef CONFIG_NET_LL_RX_POLL
369+#ifdef CONFIG_NET_RX_BUSY_POLL
370370 unsigned int state;
371371 #define IXGBE_QV_STATE_IDLE 0
372372 #define IXGBE_QV_STATE_NAPI 1 /* NAPI owns this QV */
@@ -377,12 +377,12 @@ struct ixgbe_q_vector { · 4 unmodified lines
377377 #define IXGBE_QV_YIELD (IXGBE_QV_STATE_NAPI_YIELD | IXGBE_QV_STATE_POLL_YIELD)
378378 #define IXGBE_QV_USER_PEND (IXGBE_QV_STATE_POLL | IXGBE_QV_STATE_POLL_YIELD)
379379 spinlock_t lock;
380−#endif /* CONFIG_NET_LL_RX_POLL */
380+#endif /* CONFIG_NET_RX_BUSY_POLL */
381381
382382 /* for dynamic allocation of rings associated with this q_vector */
383383 struct ixgbe_ring ring[0] ____cacheline_internodealigned_in_smp;
384384 };
385−#ifdef CONFIG_NET_LL_RX_POLL
385+#ifdef CONFIG_NET_RX_BUSY_POLL
386386 static inline void ixgbe_qv_init_lock(struct ixgbe_q_vector *q_vector)
387387 {
388388
@@ -462,7 +462,7 @@ static inline bool ixgbe_qv_ll_polling(struct ixgbe_q_vector *q_vector) · 73 unmodified lines
462462 WARN_ON(!(q_vector->state & IXGBE_QV_LOCKED));
463463 return q_vector->state & IXGBE_QV_USER_PEND;
464464 }
465−#else /* CONFIG_NET_LL_RX_POLL */
465+#else /* CONFIG_NET_RX_BUSY_POLL */
466466 static inline void ixgbe_qv_init_lock(struct ixgbe_q_vector *q_vector)
467467 {
468468 }
@@ -491,7 +491,7 @@ static inline bool ixgbe_qv_ll_polling(struct ixgbe_q_vector *q_vector) · 22 unmodified lines
491491 {
492492 return false;
493493 }
494−#endif /* CONFIG_NET_LL_RX_POLL */
494+#endif /* CONFIG_NET_RX_BUSY_POLL */
495495
496496 #ifdef CONFIG_IXGBE_HWMON
497497
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c+3−3
@@ -1998,7 +1998,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, · 1997 unmodified lines
19981998 return total_rx_packets;
19991999 }
20002000
2001−#ifdef CONFIG_NET_LL_RX_POLL
2001+#ifdef CONFIG_NET_RX_BUSY_POLL
20022002 /* must be called with local_bh_disable()d */
20032003 static int ixgbe_low_latency_recv(struct napi_struct *napi)
20042004 {
@@ -2030,7 +2030,7 @@ static int ixgbe_low_latency_recv(struct napi_struct *napi) · 25 unmodified lines
20302030
20312031 return found;
20322032 }
2033−#endif /* CONFIG_NET_LL_RX_POLL */
2033+#endif /* CONFIG_NET_RX_BUSY_POLL */
20342034
20352035 /**
20362036 * ixgbe_configure_msix - Configure MSI-X hardware
@@ -7227,7 +7227,7 @@ static const struct net_device_ops ixgbe_netdev_ops = { · 5190 unmodified lines
72277227 #ifdef CONFIG_NET_POLL_CONTROLLER
72287228 .ndo_poll_controller = ixgbe_netpoll,
72297229 #endif
7230−#ifdef CONFIG_NET_LL_RX_POLL
7230+#ifdef CONFIG_NET_RX_BUSY_POLL
72317231 .ndo_busy_poll = ixgbe_low_latency_recv,
72327232 #endif
72337233 #ifdef IXGBE_FCOE
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c+3−3
@@ -223,7 +223,7 @@ static int mlx4_en_get_sset_count(struct net_device *dev, int sset) · 222 unmodified lines
223223 case ETH_SS_STATS:
224224 return (priv->stats_bitmap ? bit_count : NUM_ALL_STATS) +
225225 (priv->tx_ring_num * 2) +
226−#ifdef CONFIG_NET_LL_RX_POLL
226+#ifdef CONFIG_NET_RX_BUSY_POLL
227227 (priv->rx_ring_num * 5);
228228 #else
229229 (priv->rx_ring_num * 2);
@@ -276,7 +276,7 @@ static void mlx4_en_get_ethtool_stats(struct net_device *dev, · 46 unmodified lines
276276 for (i = 0; i < priv->rx_ring_num; i++) {
277277 data[index++] = priv->rx_ring[i].packets;
278278 data[index++] = priv->rx_ring[i].bytes;
279−#ifdef CONFIG_NET_LL_RX_POLL
279+#ifdef CONFIG_NET_RX_BUSY_POLL
280280 data[index++] = priv->rx_ring[i].yields;
281281 data[index++] = priv->rx_ring[i].misses;
282282 data[index++] = priv->rx_ring[i].cleaned;
@@ -344,7 +344,7 @@ static void mlx4_en_get_strings(struct net_device *dev, · 61 unmodified lines
344344 "rx%d_packets", i);
345345 sprintf(data + (index++) * ETH_GSTRING_LEN,
346346 "rx%d_bytes", i);
347−#ifdef CONFIG_NET_LL_RX_POLL
347+#ifdef CONFIG_NET_RX_BUSY_POLL
348348 sprintf(data + (index++) * ETH_GSTRING_LEN,
349349 "rx%d_napi_yield", i);
350350 sprintf(data + (index++) * ETH_GSTRING_LEN,
drivers/net/ethernet/mellanox/mlx4/en_netdev.c+3−3
@@ -68,7 +68,7 @@ int mlx4_en_setup_tc(struct net_device *dev, u8 up) · 67 unmodified lines
6868 return 0;
6969 }
7070
71−#ifdef CONFIG_NET_LL_RX_POLL
71+#ifdef CONFIG_NET_RX_BUSY_POLL
7272 /* must be called with local_bh_disable()d */
7373 static int mlx4_en_low_latency_recv(struct napi_struct *napi)
7474 {
@@ -94,7 +94,7 @@ static int mlx4_en_low_latency_recv(struct napi_struct *napi) · 19 unmodified lines
9494
9595 return done;
9696 }
97−#endif /* CONFIG_NET_LL_RX_POLL */
97+#endif /* CONFIG_NET_RX_BUSY_POLL */
9898
9999 #ifdef CONFIG_RFS_ACCEL
100100
@@ -2140,7 +2140,7 @@ static const struct net_device_ops mlx4_netdev_ops = { · 2039 unmodified lines
21402140 #ifdef CONFIG_RFS_ACCEL
21412141 .ndo_rx_flow_steer = mlx4_en_filter_rfs,
21422142 #endif
2143−#ifdef CONFIG_NET_LL_RX_POLL
2143+#ifdef CONFIG_NET_RX_BUSY_POLL
21442144 .ndo_busy_poll = mlx4_en_low_latency_recv,
21452145 #endif
21462146 };
drivers/net/ethernet/mellanox/mlx4/fw.c+1−10
@@ -845,16 +845,7 @@ int mlx4_QUERY_PORT_wrapper(struct mlx4_dev *dev, int slave, · 844 unmodified lines
845845 MLX4_CMD_NATIVE);
846846
847847 if (!err && dev->caps.function != slave) {
848− /* if config MAC in DB use it */
849− if (priv->mfunc.master.vf_oper[slave].vport[vhcr->in_modifier].state.mac)
850− def_mac = priv->mfunc.master.vf_oper[slave].vport[vhcr->in_modifier].state.mac;
851− else {
852− /* set slave default_mac address */
853− MLX4_GET(def_mac, outbox->buf, QUERY_PORT_MAC_OFFSET);
854− def_mac += slave << 8;
855− priv->mfunc.master.vf_admin[slave].vport[vhcr->in_modifier].mac = def_mac;
856− }
857−
848+ def_mac = priv->mfunc.master.vf_oper[slave].vport[vhcr->in_modifier].state.mac;
858849 MLX4_PUT(outbox->buf, def_mac, QUERY_PORT_MAC_OFFSET);
859850
860851 /* get port type - currently only eth is enabled */
drivers/net/ethernet/mellanox/mlx4/main.c+1−1
@@ -371,7 +371,7 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) · 370 unmodified lines
371371
372372 dev->caps.sqp_demux = (mlx4_is_master(dev)) ? MLX4_MAX_NUM_SLAVES : 0;
373373
374− if (!enable_64b_cqe_eqe) {
374+ if (!enable_64b_cqe_eqe && !mlx4_is_slave(dev)) {
375375 if (dev_cap->flags &
376376 (MLX4_DEV_CAP_FLAG_64B_CQE | MLX4_DEV_CAP_FLAG_64B_EQE)) {
377377 mlx4_warn(dev, "64B EQEs/CQEs supported by the device but not enabled\n");
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h+5−5
@@ -292,7 +292,7 @@ struct mlx4_en_rx_ring { · 291 unmodified lines
292292 void *rx_info;
293293 unsigned long bytes;
294294 unsigned long packets;
295−#ifdef CONFIG_NET_LL_RX_POLL
295+#ifdef CONFIG_NET_RX_BUSY_POLL
296296 unsigned long yields;
297297 unsigned long misses;
298298 unsigned long cleaned;
@@ -318,7 +318,7 @@ struct mlx4_en_cq { · 19 unmodified lines
318318 struct mlx4_cqe *buf;
319319 #define MLX4_EN_OPCODE_ERROR 0x1e
320320
321−#ifdef CONFIG_NET_LL_RX_POLL
321+#ifdef CONFIG_NET_RX_BUSY_POLL
322322 unsigned int state;
323323 #define MLX4_EN_CQ_STATE_IDLE 0
324324 #define MLX4_EN_CQ_STATE_NAPI 1 /* NAPI owns this CQ */
@@ -329,7 +329,7 @@ struct mlx4_en_cq { · 4 unmodified lines
329329 #define CQ_YIELD (MLX4_EN_CQ_STATE_NAPI_YIELD | MLX4_EN_CQ_STATE_POLL_YIELD)
330330 #define CQ_USER_PEND (MLX4_EN_CQ_STATE_POLL | MLX4_EN_CQ_STATE_POLL_YIELD)
331331 spinlock_t poll_lock; /* protects from LLS/napi conflicts */
332−#endif /* CONFIG_NET_LL_RX_POLL */
332+#endif /* CONFIG_NET_RX_BUSY_POLL */
333333 };
334334
335335 struct mlx4_en_port_profile {
@@ -580,7 +580,7 @@ struct mlx4_mac_entry { · 244 unmodified lines
580580 struct rcu_head rcu;
581581 };
582582
583−#ifdef CONFIG_NET_LL_RX_POLL
583+#ifdef CONFIG_NET_RX_BUSY_POLL
584584 static inline void mlx4_en_cq_init_lock(struct mlx4_en_cq *cq)
585585 {
586586 spin_lock_init(&cq->poll_lock);
@@ -687,7 +687,7 @@ static inline bool mlx4_en_cq_ll_polling(struct mlx4_en_cq *cq) · 100 unmodified lines
687687 {
688688 return false;
689689 }
690−#endif /* CONFIG_NET_LL_RX_POLL */
690+#endif /* CONFIG_NET_RX_BUSY_POLL */
691691
692692 #define MLX4_EN_WOL_DO_MODIFY (1ULL << 63)
693693
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h+3−9
@@ -1400,8 +1400,8 @@ void qlcnic_pci_camqm_write_2M(struct qlcnic_adapter *, u64, u64); · 1399 unmodified lines
14001400 #define ADDR_IN_RANGE(addr, low, high) \
14011401 (((addr) < (high)) && ((addr) >= (low)))
14021402
1403−#define QLCRD32(adapter, off) \
1404− (adapter->ahw->hw_ops->read_reg)(adapter, off)
1403+#define QLCRD32(adapter, off, err) \
1404+ (adapter->ahw->hw_ops->read_reg)(adapter, off, err)
14051405
14061406 #define QLCWR32(adapter, off, val) \
14071407 adapter->ahw->hw_ops->write_reg(adapter, off, val)
@@ -1604,7 +1604,7 @@ struct qlcnic_nic_template { · 196 unmodified lines
16041604 struct qlcnic_hardware_ops {
16051605 void (*read_crb) (struct qlcnic_adapter *, char *, loff_t, size_t);
16061606 void (*write_crb) (struct qlcnic_adapter *, char *, loff_t, size_t);
1607− int (*read_reg) (struct qlcnic_adapter *, ulong);
1607+ int (*read_reg) (struct qlcnic_adapter *, ulong, int *);
16081608 int (*write_reg) (struct qlcnic_adapter *, ulong, u32);
16091609 void (*get_ocm_win) (struct qlcnic_hardware_context *);
16101610 int (*get_mac_address) (struct qlcnic_adapter *, u8 *);
@@ -1662,12 +1662,6 @@ static inline void qlcnic_write_crb(struct qlcnic_adapter *adapter, char *buf, · 51 unmodified lines
16621662 adapter->ahw->hw_ops->write_crb(adapter, buf, offset, size);
16631663 }
16641664
1665−static inline int qlcnic_hw_read_wx_2M(struct qlcnic_adapter *adapter,
1666− ulong off)
1667−{
1668− return adapter->ahw->hw_ops->read_reg(adapter, off);
1669−}
1670−
16711665 static inline int qlcnic_hw_write_wx_2M(struct qlcnic_adapter *adapter,
16721666 ulong off, u32 data)
16731667 {
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c+76−50
@@ -228,17 +228,17 @@ static int __qlcnic_set_win_base(struct qlcnic_adapter *adapter, u32 addr) · 227 unmodified lines
228228 return 0;
229229 }
230230
231−int qlcnic_83xx_rd_reg_indirect(struct qlcnic_adapter *adapter, ulong addr)
231+int qlcnic_83xx_rd_reg_indirect(struct qlcnic_adapter *adapter, ulong addr,
232+ int *err)
232233 {
233− int ret;
234234 struct qlcnic_hardware_context *ahw = adapter->ahw;
235235
236− ret = __qlcnic_set_win_base(adapter, (u32) addr);
237− if (!ret) {
236+ *err = __qlcnic_set_win_base(adapter, (u32) addr);
237+ if (!*err) {
238238 return QLCRDX(ahw, QLCNIC_WILDCARD);
239239 } else {
240240 dev_err(&adapter->pdev->dev,
241− "%s failed, addr = 0x%x\n", __func__, (int)addr);
241+ "%s failed, addr = 0x%lx\n", __func__, addr);
242242 return -EIO;
243243 }
244244 }
@@ -561,7 +561,7 @@ void qlcnic_83xx_cam_unlock(struct qlcnic_adapter *adapter) · 316 unmodified lines
561561 void qlcnic_83xx_read_crb(struct qlcnic_adapter *adapter, char *buf,
562562 loff_t offset, size_t size)
563563 {
564− int ret;
564+ int ret = 0;
565565 u32 data;
566566
567567 if (qlcnic_api_lock(adapter)) {
@@ -571,7 +571,7 @@ void qlcnic_83xx_read_crb(struct qlcnic_adapter *adapter, char *buf, · 3 unmodified lines
571571 return;
572572 }
573573
574− ret = qlcnic_83xx_rd_reg_indirect(adapter, (u32) offset);
574+ data = QLCRD32(adapter, (u32) offset, &ret);
575575 qlcnic_api_unlock(adapter);
576576
577577 if (ret == -EIO) {
@@ -580,7 +580,6 @@ void qlcnic_83xx_read_crb(struct qlcnic_adapter *adapter, char *buf, · 2 unmodified lines
580580 __func__, (u32)offset);
581581 return;
582582 }
583− data = ret;
584583 memcpy(buf, &data, size);
585584 }
586585
@@ -2075,18 +2074,25 @@ void qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter) · 1488 unmodified lines
20752074 static void qlcnic_83xx_handle_link_aen(struct qlcnic_adapter *adapter,
20762075 u32 data[])
20772076 {
2077+ struct qlcnic_hardware_context *ahw = adapter->ahw;
20782078 u8 link_status, duplex;
20792079 /* link speed */
20802080 link_status = LSB(data[3]) & 1;
2081− adapter->ahw->link_speed = MSW(data[2]);
2082− adapter->ahw->link_autoneg = MSB(MSW(data[3]));
2083− adapter->ahw->module_type = MSB(LSW(data[3]));
2084− duplex = LSB(MSW(data[3]));
2085− if (duplex)
2086− adapter->ahw->link_duplex = DUPLEX_FULL;
2087− else
2088− adapter->ahw->link_duplex = DUPLEX_HALF;
2089− adapter->ahw->has_link_events = 1;
2081+ if (link_status) {
2082+ ahw->link_speed = MSW(data[2]);
2083+ duplex = LSB(MSW(data[3]));
2084+ if (duplex)
2085+ ahw->link_duplex = DUPLEX_FULL;
2086+ else
2087+ ahw->link_duplex = DUPLEX_HALF;
2088+ } else {
2089+ ahw->link_speed = SPEED_UNKNOWN;
2090+ ahw->link_duplex = DUPLEX_UNKNOWN;
2091+ }
2092+
2093+ ahw->link_autoneg = MSB(MSW(data[3]));
2094+ ahw->module_type = MSB(LSW(data[3]));
2095+ ahw->has_link_events = 1;
20902096 qlcnic_advert_link_change(adapter, link_status);
20912097 }
20922098
@@ -2384,9 +2390,9 @@ int qlcnic_83xx_lockless_flash_read32(struct qlcnic_adapter *adapter, · 291 unmodified lines
23842390 u32 flash_addr, u8 *p_data,
23852391 int count)
23862392 {
2387− int i, ret;
2388− u32 word, range, flash_offset, addr = flash_addr;
2393+ u32 word, range, flash_offset, addr = flash_addr, ret;
23892394 ulong indirect_add, direct_window;
2395+ int i, err = 0;
23902396
23912397 flash_offset = addr & (QLCNIC_FLASH_SECTOR_SIZE - 1);
23922398 if (addr & 0x3) {
@@ -2404,10 +2410,9 @@ int qlcnic_83xx_lockless_flash_read32(struct qlcnic_adapter *adapter, · 11 unmodified lines
24042410 /* Multi sector read */
24052411 for (i = 0; i < count; i++) {
24062412 indirect_add = QLC_83XX_FLASH_DIRECT_DATA(addr);
2407− ret = qlcnic_83xx_rd_reg_indirect(adapter,
2408− indirect_add);
2409− if (ret == -EIO)
2410− return -EIO;
2413+ ret = QLCRD32(adapter, indirect_add, &err);
2414+ if (err == -EIO)
2415+ return err;
24112416
24122417 word = ret;
24132418 *(u32 *)p_data = word;
@@ -2428,10 +2433,9 @@ int qlcnic_83xx_lockless_flash_read32(struct qlcnic_adapter *adapter, · 14 unmodified lines
24282433 /* Single sector read */
24292434 for (i = 0; i < count; i++) {
24302435 indirect_add = QLC_83XX_FLASH_DIRECT_DATA(addr);
2431− ret = qlcnic_83xx_rd_reg_indirect(adapter,
2432− indirect_add);
2433− if (ret == -EIO)
2434− return -EIO;
2436+ ret = QLCRD32(adapter, indirect_add, &err);
2437+ if (err == -EIO)
2438+ return err;
24352439
24362440 word = ret;
24372441 *(u32 *)p_data = word;
@@ -2447,10 +2451,13 @@ static int qlcnic_83xx_poll_flash_status_reg(struct qlcnic_adapter *adapter) · 9 unmodified lines
24472451 {
24482452 u32 status;
24492453 int retries = QLC_83XX_FLASH_READ_RETRY_COUNT;
2454+ int err = 0;
24502455
24512456 do {
2452− status = qlcnic_83xx_rd_reg_indirect(adapter,
2453− QLC_83XX_FLASH_STATUS);
2457+ status = QLCRD32(adapter, QLC_83XX_FLASH_STATUS, &err);
2458+ if (err == -EIO)
2459+ return err;
2460+
24542461 if ((status & QLC_83XX_FLASH_STATUS_READY) ==
24552462 QLC_83XX_FLASH_STATUS_READY)
24562463 break;
@@ -2502,7 +2509,8 @@ int qlcnic_83xx_disable_flash_write(struct qlcnic_adapter *adapter) · 45 unmodified lines
25022509
25032510 int qlcnic_83xx_read_flash_mfg_id(struct qlcnic_adapter *adapter)
25042511 {
2505− int ret, mfg_id;
2512+ int ret, err = 0;
2513+ u32 mfg_id;
25062514
25072515 if (qlcnic_83xx_lock_flash(adapter))
25082516 return -EIO;
@@ -2517,9 +2525,11 @@ int qlcnic_83xx_read_flash_mfg_id(struct qlcnic_adapter *adapter) · 8 unmodified lines
25172525 return -EIO;
25182526 }
25192527
2520− mfg_id = qlcnic_83xx_rd_reg_indirect(adapter, QLC_83XX_FLASH_RDDATA);
2521− if (mfg_id == -EIO)
2522− return -EIO;
2528+ mfg_id = QLCRD32(adapter, QLC_83XX_FLASH_RDDATA, &err);
2529+ if (err == -EIO) {
2530+ qlcnic_83xx_unlock_flash(adapter);
2531+ return err;
2532+ }
25232533
25242534 adapter->flash_mfg_id = (mfg_id & 0xFF);
25252535 qlcnic_83xx_unlock_flash(adapter);
@@ -2636,7 +2646,7 @@ int qlcnic_83xx_flash_bulk_write(struct qlcnic_adapter *adapter, u32 addr, · 110 unmodified lines
26362646 u32 *p_data, int count)
26372647 {
26382648 u32 temp;
2639− int ret = -EIO;
2649+ int ret = -EIO, err = 0;
26402650
26412651 if ((count < QLC_83XX_FLASH_WRITE_MIN) ||
26422652 (count > QLC_83XX_FLASH_WRITE_MAX)) {
@@ -2645,8 +2655,10 @@ int qlcnic_83xx_flash_bulk_write(struct qlcnic_adapter *adapter, u32 addr, · 2 unmodified lines
26452655 return -EIO;
26462656 }
26472657
2648− temp = qlcnic_83xx_rd_reg_indirect(adapter,
2649− QLC_83XX_FLASH_SPI_CONTROL);
2658+ temp = QLCRD32(adapter, QLC_83XX_FLASH_SPI_CONTROL, &err);
2659+ if (err == -EIO)
2660+ return err;
2661+
26502662 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_SPI_CONTROL,
26512663 (temp | QLC_83XX_FLASH_SPI_CTRL));
26522664 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR,
@@ -2695,13 +2707,18 @@ int qlcnic_83xx_flash_bulk_write(struct qlcnic_adapter *adapter, u32 addr, · 42 unmodified lines
26952707 return -EIO;
26962708 }
26972709
2698− ret = qlcnic_83xx_rd_reg_indirect(adapter, QLC_83XX_FLASH_SPI_STATUS);
2710+ ret = QLCRD32(adapter, QLC_83XX_FLASH_SPI_STATUS, &err);
2711+ if (err == -EIO)
2712+ return err;
2713+
26992714 if ((ret & QLC_83XX_FLASH_SPI_CTRL) == QLC_83XX_FLASH_SPI_CTRL) {
27002715 dev_err(&adapter->pdev->dev, "%s: failed at %d\n",
27012716 __func__, __LINE__);
27022717 /* Operation failed, clear error bit */
2703− temp = qlcnic_83xx_rd_reg_indirect(adapter,
2704− QLC_83XX_FLASH_SPI_CONTROL);
2718+ temp = QLCRD32(adapter, QLC_83XX_FLASH_SPI_CONTROL, &err);
2719+ if (err == -EIO)
2720+ return err;
2721+
27052722 qlcnic_83xx_wrt_reg_indirect(adapter,
27062723 QLC_83XX_FLASH_SPI_CONTROL,
27072724 (temp | QLC_83XX_FLASH_SPI_CTRL));
@@ -2823,6 +2840,7 @@ int qlcnic_83xx_ms_mem_write128(struct qlcnic_adapter *adapter, u64 addr, · 115 unmodified lines
28232840 {
28242841 int i, j, ret = 0;
28252842 u32 temp;
2843+ int err = 0;
28262844
28272845 /* Check alignment */
28282846 if (addr & 0xF)
@@ -2855,8 +2873,12 @@ int qlcnic_83xx_ms_mem_write128(struct qlcnic_adapter *adapter, u64 addr, · 26 unmodified lines
28552873 QLCNIC_TA_WRITE_START);
28562874
28572875 for (j = 0; j < MAX_CTL_CHECK; j++) {
2858− temp = qlcnic_83xx_rd_reg_indirect(adapter,
2859− QLCNIC_MS_CTRL);
2876+ temp = QLCRD32(adapter, QLCNIC_MS_CTRL, &err);
2877+ if (err == -EIO) {
2878+ mutex_unlock(&adapter->ahw->mem_lock);
2879+ return err;
2880+ }
2881+
28602882 if ((temp & TA_CTL_BUSY) == 0)
28612883 break;
28622884 }
@@ -2878,9 +2900,9 @@ int qlcnic_83xx_ms_mem_write128(struct qlcnic_adapter *adapter, u64 addr, · 15 unmodified lines
28782900 int qlcnic_83xx_flash_read32(struct qlcnic_adapter *adapter, u32 flash_addr,
28792901 u8 *p_data, int count)
28802902 {
2881− int i, ret;
2882− u32 word, addr = flash_addr;
2903+ u32 word, addr = flash_addr, ret;
28832904 ulong indirect_addr;
2905+ int i, err = 0;
28842906
28852907 if (qlcnic_83xx_lock_flash(adapter) != 0)
28862908 return -EIO;
@@ -2900,10 +2922,10 @@ int qlcnic_83xx_flash_read32(struct qlcnic_adapter *adapter, u32 flash_addr, · 13 unmodified lines
29002922 }
29012923
29022924 indirect_addr = QLC_83XX_FLASH_DIRECT_DATA(addr);
2903− ret = qlcnic_83xx_rd_reg_indirect(adapter,
2904− indirect_addr);
2905− if (ret == -EIO)
2906− return -EIO;
2925+ ret = QLCRD32(adapter, indirect_addr, &err);
2926+ if (err == -EIO)
2927+ return err;
2928+
29072929 word = ret;
29082930 *(u32 *)p_data = word;
29092931 p_data = p_data + 4;
@@ -3369,7 +3391,8 @@ int qlcnic_83xx_set_pauseparam(struct qlcnic_adapter *adapter, · 459 unmodified lines
33693391
33703392 static int qlcnic_83xx_read_flash_status_reg(struct qlcnic_adapter *adapter)
33713393 {
3372− int ret;
3394+ int ret, err = 0;
3395+ u32 temp;
33733396
33743397 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR,
33753398 QLC_83XX_FLASH_OEM_READ_SIG);
@@ -3379,8 +3402,11 @@ static int qlcnic_83xx_read_flash_status_reg(struct qlcnic_adapter *adapter) · 3 unmodified lines
33793402 if (ret)
33803403 return -EIO;
33813404
3382− ret = qlcnic_83xx_rd_reg_indirect(adapter, QLC_83XX_FLASH_RDDATA);
3383− return ret & 0xFF;
3405+ temp = QLCRD32(adapter, QLC_83XX_FLASH_RDDATA, &err);
3406+ if (err == -EIO)
3407+ return err;
3408+
3409+ return temp & 0xFF;
33843410 }
33853411
33863412 int qlcnic_83xx_flash_test(struct qlcnic_adapter *adapter)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h+1−1
@@ -508,7 +508,7 @@ void qlcnic_83xx_add_sysfs(struct qlcnic_adapter *); · 507 unmodified lines
508508 void qlcnic_83xx_remove_sysfs(struct qlcnic_adapter *);
509509 void qlcnic_83xx_write_crb(struct qlcnic_adapter *, char *, loff_t, size_t);
510510 void qlcnic_83xx_read_crb(struct qlcnic_adapter *, char *, loff_t, size_t);
511−int qlcnic_83xx_rd_reg_indirect(struct qlcnic_adapter *, ulong);
511+int qlcnic_83xx_rd_reg_indirect(struct qlcnic_adapter *, ulong, int *);
512512 int qlcnic_83xx_wrt_reg_indirect(struct qlcnic_adapter *, ulong, u32);
513513 void qlcnic_83xx_process_rcv_diag(struct qlcnic_adapter *, int, u64 []);
514514 int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *, u32);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c+61−30
@@ -1303,8 +1303,11 @@ static void qlcnic_83xx_dump_pause_control_regs(struct qlcnic_adapter *adapter) · 1302 unmodified lines
13031303 {
13041304 int i, j;
13051305 u32 val = 0, val1 = 0, reg = 0;
1306+ int err = 0;
13061307
1307− val = QLCRD32(adapter, QLC_83XX_SRE_SHIM_REG);
1308+ val = QLCRD32(adapter, QLC_83XX_SRE_SHIM_REG, &err);
1309+ if (err == -EIO)
1310+ return;
13081311 dev_info(&adapter->pdev->dev, "SRE-Shim Ctrl:0x%x\n", val);
13091312
13101313 for (j = 0; j < 2; j++) {
@@ -1318,7 +1321,9 @@ static void qlcnic_83xx_dump_pause_control_regs(struct qlcnic_adapter *adapter) · 7 unmodified lines
13181321 reg = QLC_83XX_PORT1_THRESHOLD;
13191322 }
13201323 for (i = 0; i < 8; i++) {
1321− val = QLCRD32(adapter, reg + (i * 0x4));
1324+ val = QLCRD32(adapter, reg + (i * 0x4), &err);
1325+ if (err == -EIO)
1326+ return;
13221327 dev_info(&adapter->pdev->dev, "0x%x ", val);
13231328 }
13241329 dev_info(&adapter->pdev->dev, "\n");
@@ -1335,8 +1340,10 @@ static void qlcnic_83xx_dump_pause_control_regs(struct qlcnic_adapter *adapter) · 10 unmodified lines
13351340 reg = QLC_83XX_PORT1_TC_MC_REG;
13361341 }
13371342 for (i = 0; i < 4; i++) {
1338− val = QLCRD32(adapter, reg + (i * 0x4));
1339− dev_info(&adapter->pdev->dev, "0x%x ", val);
1343+ val = QLCRD32(adapter, reg + (i * 0x4), &err);
1344+ if (err == -EIO)
1345+ return;
1346+ dev_info(&adapter->pdev->dev, "0x%x ", val);
13401347 }
13411348 dev_info(&adapter->pdev->dev, "\n");
13421349 }
@@ -1352,17 +1359,25 @@ static void qlcnic_83xx_dump_pause_control_regs(struct qlcnic_adapter *adapter) · 9 unmodified lines
13521359 reg = QLC_83XX_PORT1_TC_STATS;
13531360 }
13541361 for (i = 7; i >= 0; i--) {
1355− val = QLCRD32(adapter, reg);
1362+ val = QLCRD32(adapter, reg, &err);
1363+ if (err == -EIO)
1364+ return;
13561365 val &= ~(0x7 << 29); /* Reset bits 29 to 31 */
13571366 QLCWR32(adapter, reg, (val | (i << 29)));
1358− val = QLCRD32(adapter, reg);
1367+ val = QLCRD32(adapter, reg, &err);
1368+ if (err == -EIO)
1369+ return;
13591370 dev_info(&adapter->pdev->dev, "0x%x ", val);
13601371 }
13611372 dev_info(&adapter->pdev->dev, "\n");
13621373 }
13631374
1364− val = QLCRD32(adapter, QLC_83XX_PORT2_IFB_THRESHOLD);
1365− val1 = QLCRD32(adapter, QLC_83XX_PORT3_IFB_THRESHOLD);
1375+ val = QLCRD32(adapter, QLC_83XX_PORT2_IFB_THRESHOLD, &err);
1376+ if (err == -EIO)
1377+ return;
1378+ val1 = QLCRD32(adapter, QLC_83XX_PORT3_IFB_THRESHOLD, &err);
1379+ if (err == -EIO)
1380+ return;
13661381 dev_info(&adapter->pdev->dev,
13671382 "IFB-Pause Thresholds: Port 2:0x%x, Port 3:0x%x\n",
13681383 val, val1);
@@ -1425,7 +1440,7 @@ static void qlcnic_83xx_take_eport_out_of_reset(struct qlcnic_adapter *adapter) · 56 unmodified lines
14251440 static int qlcnic_83xx_check_heartbeat(struct qlcnic_adapter *p_dev)
14261441 {
14271442 u32 heartbeat, peg_status;
1428− int retries, ret = -EIO;
1443+ int retries, ret = -EIO, err = 0;
14291444
14301445 retries = QLCNIC_HEARTBEAT_CHECK_RETRY_COUNT;
14311446 p_dev->heartbeat = QLC_SHARED_REG_RD32(p_dev,
@@ -1453,11 +1468,11 @@ static int qlcnic_83xx_check_heartbeat(struct qlcnic_adapter *p_dev) · 21 unmodified lines
14531468 "PEG_NET_2_PC: 0x%x, PEG_NET_3_PC: 0x%x,\n"
14541469 "PEG_NET_4_PC: 0x%x\n", peg_status,
14551470 QLC_SHARED_REG_RD32(p_dev, QLCNIC_PEG_HALT_STATUS2),
1456− QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_0),
1457− QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_1),
1458− QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_2),
1459− QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_3),
1460− QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_4));
1471+ QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_0, &err),
1472+ QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_1, &err),
1473+ QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_2, &err),
1474+ QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_3, &err),
1475+ QLCRD32(p_dev, QLC_83XX_CRB_PEG_NET_4, &err));
14611476
14621477 if (QLCNIC_FWERROR_CODE(peg_status) == 0x67)
14631478 dev_err(&p_dev->pdev->dev,
@@ -1501,18 +1516,22 @@ int qlcnic_83xx_check_hw_status(struct qlcnic_adapter *p_dev) · 37 unmodified lines
15011516 static int qlcnic_83xx_poll_reg(struct qlcnic_adapter *p_dev, u32 addr,
15021517 int duration, u32 mask, u32 status)
15031518 {
1519+ int timeout_error, err = 0;
15041520 u32 value;
1505− int timeout_error;
15061521 u8 retries;
15071522
1508− value = qlcnic_83xx_rd_reg_indirect(p_dev, addr);
1523+ value = QLCRD32(p_dev, addr, &err);
1524+ if (err == -EIO)
1525+ return err;
15091526 retries = duration / 10;
15101527
15111528 do {
15121529 if ((value & mask) != status) {
15131530 timeout_error = 1;
15141531 msleep(duration / 10);
1515− value = qlcnic_83xx_rd_reg_indirect(p_dev, addr);
1532+ value = QLCRD32(p_dev, addr, &err);
1533+ if (err == -EIO)
1534+ return err;
15161535 } else {
15171536 timeout_error = 0;
15181537 break;
@@ -1606,9 +1625,12 @@ int qlcnic_83xx_get_reset_instruction_template(struct qlcnic_adapter *p_dev) · 87 unmodified lines
16061625 static void qlcnic_83xx_read_write_crb_reg(struct qlcnic_adapter *p_dev,
16071626 u32 raddr, u32 waddr)
16081627 {
1609− int value;
1628+ int err = 0;
1629+ u32 value;
16101630
1611− value = qlcnic_83xx_rd_reg_indirect(p_dev, raddr);
1631+ value = QLCRD32(p_dev, raddr, &err);
1632+ if (err == -EIO)
1633+ return;
16121634 qlcnic_83xx_wrt_reg_indirect(p_dev, waddr, value);
16131635 }
16141636
@@ -1617,12 +1639,16 @@ static void qlcnic_83xx_rmw_crb_reg(struct qlcnic_adapter *p_dev, · 2 unmodified lines
16171639 u32 raddr, u32 waddr,
16181640 struct qlc_83xx_rmw *p_rmw_hdr)
16191641 {
1620− int value;
1642+ int err = 0;
1643+ u32 value;
16211644
1622− if (p_rmw_hdr->index_a)
1645+ if (p_rmw_hdr->index_a) {
16231646 value = p_dev->ahw->reset.array[p_rmw_hdr->index_a];
1624− else
1625− value = qlcnic_83xx_rd_reg_indirect(p_dev, raddr);
1647+ } else {
1648+ value = QLCRD32(p_dev, raddr, &err);
1649+ if (err == -EIO)
1650+ return;
1651+ }
16261652
16271653 value &= p_rmw_hdr->mask;
16281654 value <<= p_rmw_hdr->shl;
@@ -1675,7 +1701,7 @@ static void qlcnic_83xx_poll_list(struct qlcnic_adapter *p_dev, · 46 unmodified lines
16751701 long delay;
16761702 struct qlc_83xx_entry *entry;
16771703 struct qlc_83xx_poll *poll;
1678− int i;
1704+ int i, err = 0;
16791705 unsigned long arg1, arg2;
16801706
16811707 poll = (struct qlc_83xx_poll *)((char *)p_hdr +
@@ -1699,10 +1725,12 @@ static void qlcnic_83xx_poll_list(struct qlcnic_adapter *p_dev, · 17 unmodified lines
16991725 arg1, delay,
17001726 poll->mask,
17011727 poll->status)){
1702− qlcnic_83xx_rd_reg_indirect(p_dev,
1703− arg1);
1704− qlcnic_83xx_rd_reg_indirect(p_dev,
1705− arg2);
1728+ QLCRD32(p_dev, arg1, &err);
1729+ if (err == -EIO)
1730+ return;
1731+ QLCRD32(p_dev, arg2, &err);
1732+ if (err == -EIO)
1733+ return;
17061734 }
17071735 }
17081736 }
@@ -1768,7 +1796,7 @@ static void qlcnic_83xx_poll_read_list(struct qlcnic_adapter *p_dev, · 59 unmodified lines
17681796 struct qlc_83xx_entry_hdr *p_hdr)
17691797 {
17701798 long delay;
1771− int index, i, j;
1799+ int index, i, j, err;
17721800 struct qlc_83xx_quad_entry *entry;
17731801 struct qlc_83xx_poll *poll;
17741802 unsigned long addr;
@@ -1788,7 +1816,10 @@ static void qlcnic_83xx_poll_read_list(struct qlcnic_adapter *p_dev, · 13 unmodified lines
17881816 poll->mask, poll->status)){
17891817 index = p_dev->ahw->reset.array_index;
17901818 addr = entry->dr_addr;
1791− j = qlcnic_83xx_rd_reg_indirect(p_dev, addr);
1819+ j = QLCRD32(p_dev, addr, &err);
1820+ if (err == -EIO)
1821+ return;
1822+
17921823 p_dev->ahw->reset.array[index++] = j;
17931824
17941825 if (index == QLC_83XX_MAX_RESET_SEQ_ENTRIES)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c+8−8
@@ -104,7 +104,7 @@ static u32 · 103 unmodified lines
104104 qlcnic_poll_rsp(struct qlcnic_adapter *adapter)
105105 {
106106 u32 rsp;
107− int timeout = 0;
107+ int timeout = 0, err = 0;
108108
109109 do {
110110 /* give atleast 1ms for firmware to respond */
@@ -113,7 +113,7 @@ qlcnic_poll_rsp(struct qlcnic_adapter *adapter) · 2 unmodified lines
113113 if (++timeout > QLCNIC_OS_CRB_RETRY_COUNT)
114114 return QLCNIC_CDRP_RSP_TIMEOUT;
115115
116− rsp = QLCRD32(adapter, QLCNIC_CDRP_CRB_OFFSET);
116+ rsp = QLCRD32(adapter, QLCNIC_CDRP_CRB_OFFSET, &err);
117117 } while (!QLCNIC_CDRP_IS_RSP(rsp));
118118
119119 return rsp;
@@ -122,7 +122,7 @@ qlcnic_poll_rsp(struct qlcnic_adapter *adapter) · 2 unmodified lines
122122 int qlcnic_82xx_issue_cmd(struct qlcnic_adapter *adapter,
123123 struct qlcnic_cmd_args *cmd)
124124 {
125− int i;
125+ int i, err = 0;
126126 u32 rsp;
127127 u32 signature;
128128 struct pci_dev *pdev = adapter->pdev;
@@ -148,7 +148,7 @@ int qlcnic_82xx_issue_cmd(struct qlcnic_adapter *adapter, · 19 unmodified lines
148148 dev_err(&pdev->dev, "card response timeout.\n");
149149 cmd->rsp.arg[0] = QLCNIC_RCODE_TIMEOUT;
150150 } else if (rsp == QLCNIC_CDRP_RSP_FAIL) {
151− cmd->rsp.arg[0] = QLCRD32(adapter, QLCNIC_CDRP_ARG(1));
151+ cmd->rsp.arg[0] = QLCRD32(adapter, QLCNIC_CDRP_ARG(1), &err);
152152 switch (cmd->rsp.arg[0]) {
153153 case QLCNIC_RCODE_INVALID_ARGS:
154154 fmt = "CDRP invalid args: [%d]\n";
@@ -175,7 +175,7 @@ int qlcnic_82xx_issue_cmd(struct qlcnic_adapter *adapter, · 20 unmodified lines
175175 cmd->rsp.arg[0] = QLCNIC_RCODE_SUCCESS;
176176
177177 for (i = 1; i < cmd->rsp.num; i++)
178− cmd->rsp.arg[i] = QLCRD32(adapter, QLCNIC_CDRP_ARG(i));
178+ cmd->rsp.arg[i] = QLCRD32(adapter, QLCNIC_CDRP_ARG(i), &err);
179179
180180 /* Release semaphore */
181181 qlcnic_api_unlock(adapter);
@@ -210,10 +210,10 @@ int qlcnic_fw_cmd_set_drv_version(struct qlcnic_adapter *adapter, u32 fw_cmd) · 28 unmodified lines
210210 if (err) {
211211 dev_info(&adapter->pdev->dev,
212212 "Failed to set driver version in firmware\n");
213− return -EIO;
213+ err = -EIO;
214214 }
215−
216− return 0;
215+ qlcnic_free_mbx_args(&cmd);
216+ return err;
217217 }
218218
219219 int
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c+62−21
@@ -150,6 +150,7 @@ static const char qlcnic_gstrings_test[][ETH_GSTRING_LEN] = { · 149 unmodified lines
150150 "Link_Test_on_offline",
151151 "Interrupt_Test_offline",
152152 "Internal_Loopback_offline",
153+ "External_Loopback_offline",
153154 "EEPROM_Test_offline"
154155 };
155156
@@ -266,7 +267,7 @@ int qlcnic_82xx_get_settings(struct qlcnic_adapter *adapter, · 110 unmodified lines
266267 {
267268 struct qlcnic_hardware_context *ahw = adapter->ahw;
268269 u32 speed, reg;
269− int check_sfp_module = 0;
270+ int check_sfp_module = 0, err = 0;
270271 u16 pcifn = ahw->pci_func;
271272
272273 /* read which mode */
@@ -289,7 +290,7 @@ int qlcnic_82xx_get_settings(struct qlcnic_adapter *adapter, · 16 unmodified lines
289290
290291 } else if (adapter->ahw->port_type == QLCNIC_XGBE) {
291292 u32 val = 0;
292− val = QLCRD32(adapter, QLCNIC_PORT_MODE_ADDR);
293+ val = QLCRD32(adapter, QLCNIC_PORT_MODE_ADDR, &err);
293294
294295 if (val == QLCNIC_PORT_MODE_802_3_AP) {
295296 ecmd->supported = SUPPORTED_1000baseT_Full;
@@ -300,9 +301,13 @@ int qlcnic_82xx_get_settings(struct qlcnic_adapter *adapter, · 4 unmodified lines
300301 }
301302
302303 if (netif_running(adapter->netdev) && ahw->has_link_events) {
303− reg = QLCRD32(adapter, P3P_LINK_SPEED_REG(pcifn));
304− speed = P3P_LINK_SPEED_VAL(pcifn, reg);
305− ahw->link_speed = speed * P3P_LINK_SPEED_MHZ;
304+ if (ahw->linkup) {
305+ reg = QLCRD32(adapter,
306+ P3P_LINK_SPEED_REG(pcifn), &err);
307+ speed = P3P_LINK_SPEED_VAL(pcifn, reg);
308+ ahw->link_speed = speed * P3P_LINK_SPEED_MHZ;
309+ }
310+
306311 ethtool_cmd_speed_set(ecmd, ahw->link_speed);
307312 ecmd->autoneg = ahw->link_autoneg;
308313 ecmd->duplex = ahw->link_duplex;
@@ -463,13 +468,14 @@ static int qlcnic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) · 154 unmodified lines
463468 static int qlcnic_82xx_get_registers(struct qlcnic_adapter *adapter,
464469 u32 *regs_buff)
465470 {
466− int i, j = 0;
471+ int i, j = 0, err = 0;
467472
468473 for (i = QLCNIC_DEV_INFO_SIZE + 1; diag_registers[j] != -1; j++, i++)
469474 regs_buff[i] = QLC_SHARED_REG_RD32(adapter, diag_registers[j]);
470475 j = 0;
471476 while (ext_diag_registers[j] != -1)
472− regs_buff[i++] = QLCRD32(adapter, ext_diag_registers[j++]);
477+ regs_buff[i++] = QLCRD32(adapter, ext_diag_registers[j++],
478+ &err);
473479 return i;
474480 }
475481
@@ -519,13 +525,16 @@ qlcnic_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p) · 43 unmodified lines
519525 static u32 qlcnic_test_link(struct net_device *dev)
520526 {
521527 struct qlcnic_adapter *adapter = netdev_priv(dev);
528+ int err = 0;
522529 u32 val;
523530
524531 if (qlcnic_83xx_check(adapter)) {
525532 val = qlcnic_83xx_test_link(adapter);
526533 return (val & 1) ? 0 : 1;
527534 }
528− val = QLCRD32(adapter, CRB_XG_STATE_P3P);
535+ val = QLCRD32(adapter, CRB_XG_STATE_P3P, &err);
536+ if (err == -EIO)
537+ return err;
529538 val = XG_LINK_STATE_P3P(adapter->ahw->pci_func, val);
530539 return (val == XG_LINK_UP_P3P) ? 0 : 1;
531540 }
@@ -658,6 +667,7 @@ qlcnic_get_pauseparam(struct net_device *netdev, · 126 unmodified lines
658667 {
659668 struct qlcnic_adapter *adapter = netdev_priv(netdev);
660669 int port = adapter->ahw->physical_port;
670+ int err = 0;
661671 __u32 val;
662672
663673 if (qlcnic_83xx_check(adapter)) {
@@ -668,9 +678,13 @@ qlcnic_get_pauseparam(struct net_device *netdev, · 4 unmodified lines
668678 if ((port < 0) || (port > QLCNIC_NIU_MAX_GBE_PORTS))
669679 return;
670680 /* get flow control settings */
671− val = QLCRD32(adapter, QLCNIC_NIU_GB_MAC_CONFIG_0(port));
681+ val = QLCRD32(adapter, QLCNIC_NIU_GB_MAC_CONFIG_0(port), &err);
682+ if (err == -EIO)
683+ return;
672684 pause->rx_pause = qlcnic_gb_get_rx_flowctl(val);
673− val = QLCRD32(adapter, QLCNIC_NIU_GB_PAUSE_CTL);
685+ val = QLCRD32(adapter, QLCNIC_NIU_GB_PAUSE_CTL, &err);
686+ if (err == -EIO)
687+ return;
674688 switch (port) {
675689 case 0:
676690 pause->tx_pause = !(qlcnic_gb_get_gb0_mask(val));
@@ -690,7 +704,9 @@ qlcnic_get_pauseparam(struct net_device *netdev, · 13 unmodified lines
690704 if ((port < 0) || (port > QLCNIC_NIU_MAX_XG_PORTS))
691705 return;
692706 pause->rx_pause = 1;
693− val = QLCRD32(adapter, QLCNIC_NIU_XG_PAUSE_CTL);
707+ val = QLCRD32(adapter, QLCNIC_NIU_XG_PAUSE_CTL, &err);
708+ if (err == -EIO)
709+ return;
694710 if (port == 0)
695711 pause->tx_pause = !(qlcnic_xg_get_xg0_mask(val));
696712 else
@@ -707,6 +723,7 @@ qlcnic_set_pauseparam(struct net_device *netdev, · 10 unmodified lines
707723 {
708724 struct qlcnic_adapter *adapter = netdev_priv(netdev);
709725 int port = adapter->ahw->physical_port;
726+ int err = 0;
710727 __u32 val;
711728
712729 if (qlcnic_83xx_check(adapter))
@@ -717,7 +734,9 @@ qlcnic_set_pauseparam(struct net_device *netdev, · 4 unmodified lines
717734 if ((port < 0) || (port > QLCNIC_NIU_MAX_GBE_PORTS))
718735 return -EIO;
719736 /* set flow control */
720− val = QLCRD32(adapter, QLCNIC_NIU_GB_MAC_CONFIG_0(port));
737+ val = QLCRD32(adapter, QLCNIC_NIU_GB_MAC_CONFIG_0(port), &err);
738+ if (err == -EIO)
739+ return err;
721740
722741 if (pause->rx_pause)
723742 qlcnic_gb_rx_flowctl(val);
@@ -728,7 +747,9 @@ qlcnic_set_pauseparam(struct net_device *netdev, · 4 unmodified lines
728747 val);
729748 QLCWR32(adapter, QLCNIC_NIU_GB_MAC_CONFIG_0(port), val);
730749 /* set autoneg */
731− val = QLCRD32(adapter, QLCNIC_NIU_GB_PAUSE_CTL);
750+ val = QLCRD32(adapter, QLCNIC_NIU_GB_PAUSE_CTL, &err);
751+ if (err == -EIO)
752+ return err;
732753 switch (port) {
733754 case 0:
734755 if (pause->tx_pause)
@@ -764,7 +785,9 @@ qlcnic_set_pauseparam(struct net_device *netdev, · 29 unmodified lines
764785 if ((port < 0) || (port > QLCNIC_NIU_MAX_XG_PORTS))
765786 return -EIO;
766787
767− val = QLCRD32(adapter, QLCNIC_NIU_XG_PAUSE_CTL);
788+ val = QLCRD32(adapter, QLCNIC_NIU_XG_PAUSE_CTL, &err);
789+ if (err == -EIO)
790+ return err;
768791 if (port == 0) {
769792 if (pause->tx_pause)
770793 qlcnic_xg_unset_xg0_mask(val);
@@ -788,11 +811,14 @@ static int qlcnic_reg_test(struct net_device *dev) · 17 unmodified lines
788811 {
789812 struct qlcnic_adapter *adapter = netdev_priv(dev);
790813 u32 data_read;
814+ int err = 0;
791815
792816 if (qlcnic_83xx_check(adapter))
793817 return qlcnic_83xx_reg_test(adapter);
794818
795− data_read = QLCRD32(adapter, QLCNIC_PCIX_PH_REG(0));
819+ data_read = QLCRD32(adapter, QLCNIC_PCIX_PH_REG(0), &err);
820+ if (err == -EIO)
821+ return err;
796822 if ((data_read & 0xffff) != adapter->pdev->vendor)
797823 return 1;
798824
@@ -1026,8 +1052,15 @@ qlcnic_diag_test(struct net_device *dev, struct ethtool_test *eth_test, · 227 unmodified lines
10261052 if (data[3])
10271053 eth_test->flags |= ETH_TEST_FL_FAILED;
10281054
1029− data[4] = qlcnic_eeprom_test(dev);
1030− if (data[4])
1055+ if (eth_test->flags & ETH_TEST_FL_EXTERNAL_LB) {
1056+ data[4] = qlcnic_loopback_test(dev, QLCNIC_ELB_MODE);
1057+ if (data[4])
1058+ eth_test->flags |= ETH_TEST_FL_FAILED;
1059+ eth_test->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
1060+ }
1061+
1062+ data[5] = qlcnic_eeprom_test(dev);
1063+ if (data[5])
10311064 eth_test->flags |= ETH_TEST_FL_FAILED;
10321065 }
10331066 }
@@ -1257,17 +1290,20 @@ qlcnic_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) · 223 unmodified lines
12571290 {
12581291 struct qlcnic_adapter *adapter = netdev_priv(dev);
12591292 u32 wol_cfg;
1293+ int err = 0;
12601294
12611295 if (qlcnic_83xx_check(adapter))
12621296 return;
12631297 wol->supported = 0;
12641298 wol->wolopts = 0;
12651299
1266− wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG_NV);
1300+ wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG_NV, &err);
1301+ if (err == -EIO)
1302+ return;
12671303 if (wol_cfg & (1UL << adapter->portnum))
12681304 wol->supported |= WAKE_MAGIC;
12691305
1270− wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG);
1306+ wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG, &err);
12711307 if (wol_cfg & (1UL << adapter->portnum))
12721308 wol->wolopts |= WAKE_MAGIC;
12731309 }
@@ -1277,17 +1313,22 @@ qlcnic_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) · 3 unmodified lines
12771313 {
12781314 struct qlcnic_adapter *adapter = netdev_priv(dev);
12791315 u32 wol_cfg;
1316+ int err = 0;
12801317
12811318 if (qlcnic_83xx_check(adapter))
12821319 return -EOPNOTSUPP;
12831320 if (wol->wolopts & ~WAKE_MAGIC)
12841321 return -EINVAL;
12851322
1286− wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG_NV);
1323+ wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG_NV, &err);
1324+ if (err == -EIO)
1325+ return err;
12871326 if (!(wol_cfg & (1 << adapter->portnum)))
12881327 return -EOPNOTSUPP;
12891328
1290− wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG);
1329+ wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG, &err);
1330+ if (err == -EIO)
1331+ return err;
12911332 if (wol->wolopts & WAKE_MAGIC)
12921333 wol_cfg |= 1UL << adapter->portnum;
12931334 else
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c+27−13
@@ -317,16 +317,20 @@ static void qlcnic_write_window_reg(u32 addr, void __iomem *bar0, u32 data) · 316 unmodified lines
317317 int
318318 qlcnic_pcie_sem_lock(struct qlcnic_adapter *adapter, int sem, u32 id_reg)
319319 {
320− int done = 0, timeout = 0;
320+ int timeout = 0;
321+ int err = 0;
322+ u32 done = 0;
321323
322324 while (!done) {
323− done = QLCRD32(adapter, QLCNIC_PCIE_REG(PCIE_SEM_LOCK(sem)));
325+ done = QLCRD32(adapter, QLCNIC_PCIE_REG(PCIE_SEM_LOCK(sem)),
326+ &err);
324327 if (done == 1)
325328 break;
326329 if (++timeout >= QLCNIC_PCIE_SEM_TIMEOUT) {
327330 dev_err(&adapter->pdev->dev,
328331 "Failed to acquire sem=%d lock; holdby=%d\n",
329− sem, id_reg ? QLCRD32(adapter, id_reg) : -1);
332+ sem,
333+ id_reg ? QLCRD32(adapter, id_reg, &err) : -1);
330334 return -EIO;
331335 }
332336 msleep(1);
@@ -341,19 +345,22 @@ qlcnic_pcie_sem_lock(struct qlcnic_adapter *adapter, int sem, u32 id_reg) · 8 unmodified lines
341345 void
342346 qlcnic_pcie_sem_unlock(struct qlcnic_adapter *adapter, int sem)
343347 {
344− QLCRD32(adapter, QLCNIC_PCIE_REG(PCIE_SEM_UNLOCK(sem)));
348+ int err = 0;
349+
350+ QLCRD32(adapter, QLCNIC_PCIE_REG(PCIE_SEM_UNLOCK(sem)), &err);
345351 }
346352
347353 int qlcnic_ind_rd(struct qlcnic_adapter *adapter, u32 addr)
348354 {
355+ int err = 0;
349356 u32 data;
350357
351358 if (qlcnic_82xx_check(adapter))
352359 qlcnic_read_window_reg(addr, adapter->ahw->pci_base0, &data);
353360 else {
354− data = qlcnic_83xx_rd_reg_indirect(adapter, addr);
355− if (data == -EIO)
356− return -EIO;
361+ data = QLCRD32(adapter, addr, &err);
362+ if (err == -EIO)
363+ return err;
357364 }
358365 return data;
359366 }
@@ -1159,7 +1166,8 @@ int qlcnic_82xx_hw_write_wx_2M(struct qlcnic_adapter *adapter, ulong off, · 799 unmodified lines
11591166 return -EIO;
11601167 }
11611168
1162−int qlcnic_82xx_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong off)
1169+int qlcnic_82xx_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong off,
1170+ int *err)
11631171 {
11641172 unsigned long flags;
11651173 int rv;
@@ -1415,7 +1423,7 @@ int qlcnic_pci_mem_read_2M(struct qlcnic_adapter *adapter, u64 off, u64 *data) · 249 unmodified lines
14151423
14161424 int qlcnic_82xx_get_board_info(struct qlcnic_adapter *adapter)
14171425 {
1418− int offset, board_type, magic;
1426+ int offset, board_type, magic, err = 0;
14191427 struct pci_dev *pdev = adapter->pdev;
14201428
14211429 offset = QLCNIC_FW_MAGIC_OFFSET;
@@ -1435,7 +1443,9 @@ int qlcnic_82xx_get_board_info(struct qlcnic_adapter *adapter) · 13 unmodified lines
14351443 adapter->ahw->board_type = board_type;
14361444
14371445 if (board_type == QLCNIC_BRDTYPE_P3P_4_GB_MM) {
1438− u32 gpio = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_PAD_GPIO_I);
1446+ u32 gpio = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_PAD_GPIO_I, &err);
1447+ if (err == -EIO)
1448+ return err;
14391449 if ((gpio & 0x8000) == 0)
14401450 board_type = QLCNIC_BRDTYPE_P3P_10G_TP;
14411451 }
@@ -1475,10 +1485,13 @@ int · 33 unmodified lines
14751485 qlcnic_wol_supported(struct qlcnic_adapter *adapter)
14761486 {
14771487 u32 wol_cfg;
1488+ int err = 0;
14781489
1479− wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG_NV);
1490+ wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG_NV, &err);
14801491 if (wol_cfg & (1UL << adapter->portnum)) {
1481− wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG);
1492+ wol_cfg = QLCRD32(adapter, QLCNIC_WOL_CONFIG, &err);
1493+ if (err == -EIO)
1494+ return err;
14821495 if (wol_cfg & (1 << adapter->portnum))
14831496 return 1;
14841497 }
@@ -1539,6 +1552,7 @@ void qlcnic_82xx_get_func_no(struct qlcnic_adapter *adapter) · 54 unmodified lines
15391552 void qlcnic_82xx_read_crb(struct qlcnic_adapter *adapter, char *buf,
15401553 loff_t offset, size_t size)
15411554 {
1555+ int err = 0;
15421556 u32 data;
15431557 u64 qmdata;
15441558
@@ -1546,7 +1560,7 @@ void qlcnic_82xx_read_crb(struct qlcnic_adapter *adapter, char *buf, · 1 unmodified line
15461560 qlcnic_pci_camqm_read_2M(adapter, offset, &qmdata);
15471561 memcpy(buf, &qmdata, size);
15481562 } else {
1549− data = QLCRD32(adapter, offset);
1563+ data = QLCRD32(adapter, offset, &err);
15501564 memcpy(buf, &data, size);
15511565 }
15521566 }
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h+1−1
@@ -154,7 +154,7 @@ struct qlcnic_hardware_context; · 153 unmodified lines
154154 struct qlcnic_adapter;
155155
156156 int qlcnic_82xx_start_firmware(struct qlcnic_adapter *);
157−int qlcnic_82xx_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong);
157+int qlcnic_82xx_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong, int *);
158158 int qlcnic_82xx_hw_write_wx_2M(struct qlcnic_adapter *, ulong, u32);
159159 int qlcnic_82xx_config_hw_lro(struct qlcnic_adapter *adapter, int);
160160 int qlcnic_82xx_nic_set_promisc(struct qlcnic_adapter *adapter, u32);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c+17−8
@@ -286,10 +286,11 @@ static int qlcnic_wait_rom_done(struct qlcnic_adapter *adapter) · 285 unmodified lines
286286 {
287287 long timeout = 0;
288288 long done = 0;
289+ int err = 0;
289290
290291 cond_resched();
291292 while (done == 0) {
292− done = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_STATUS);
293+ done = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_STATUS, &err);
293294 done &= 2;
294295 if (++timeout >= QLCNIC_MAX_ROM_WAIT_USEC) {
295296 dev_err(&adapter->pdev->dev,
@@ -304,6 +305,8 @@ static int qlcnic_wait_rom_done(struct qlcnic_adapter *adapter) · 8 unmodified lines
304305 static int do_rom_fast_read(struct qlcnic_adapter *adapter,
305306 u32 addr, u32 *valp)
306307 {
308+ int err = 0;
309+
307310 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_ADDRESS, addr);
308311 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_DUMMY_BYTE_CNT, 0);
309312 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_ABYTE_CNT, 3);
@@ -317,7 +320,9 @@ static int do_rom_fast_read(struct qlcnic_adapter *adapter, · 7 unmodified lines
317320 udelay(10);
318321 QLCWR32(adapter, QLCNIC_ROMUSB_ROM_DUMMY_BYTE_CNT, 0);
319322
320− *valp = QLCRD32(adapter, QLCNIC_ROMUSB_ROM_RDATA);
323+ *valp = QLCRD32(adapter, QLCNIC_ROMUSB_ROM_RDATA, &err);
324+ if (err == -EIO)
325+ return err;
321326 return 0;
322327 }
323328
@@ -369,11 +374,11 @@ int qlcnic_rom_fast_read(struct qlcnic_adapter *adapter, u32 addr, u32 *valp) · 45 unmodified lines
369374
370375 int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter)
371376 {
372− int addr, val;
377+ int addr, err = 0;
373378 int i, n, init_delay;
374379 struct crb_addr_pair *buf;
375380 unsigned offset;
376− u32 off;
381+ u32 off, val;
377382 struct pci_dev *pdev = adapter->pdev;
378383
379384 QLC_SHARED_REG_WR32(adapter, QLCNIC_CMDPEG_STATE, 0);
@@ -402,7 +407,9 @@ int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter) · 22 unmodified lines
402407 QLCWR32(adapter, QLCNIC_CRB_NIU + 0xb0000, 0x00);
403408
404409 /* halt sre */
405− val = QLCRD32(adapter, QLCNIC_CRB_SRE + 0x1000);
410+ val = QLCRD32(adapter, QLCNIC_CRB_SRE + 0x1000, &err);
411+ if (err == -EIO)
412+ return err;
406413 QLCWR32(adapter, QLCNIC_CRB_SRE + 0x1000, val & (~(0x1)));
407414
408415 /* halt epg */
@@ -719,10 +726,12 @@ qlcnic_check_flash_fw_ver(struct qlcnic_adapter *adapter) · 310 unmodified lines
719726 static int
720727 qlcnic_has_mn(struct qlcnic_adapter *adapter)
721728 {
722− u32 capability;
723− capability = 0;
729+ u32 capability = 0;
730+ int err = 0;
724731
725− capability = QLCRD32(adapter, QLCNIC_PEG_TUNE_CAPABILITY);
732+ capability = QLCRD32(adapter, QLCNIC_PEG_TUNE_CAPABILITY, &err);
733+ if (err == -EIO)
734+ return err;
726735 if (capability & QLCNIC_PEG_TUNE_MN_PRESENT)
727736 return 1;
728737
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c+67−34
@@ -161,36 +161,68 @@ static inline int qlcnic_82xx_is_lb_pkt(u64 sts_data) · 160 unmodified lines
161161 return (qlcnic_get_sts_status(sts_data) == STATUS_CKSUM_LOOP) ? 1 : 0;
162162 }
163163
164+static void qlcnic_delete_rx_list_mac(struct qlcnic_adapter *adapter,
165+ struct qlcnic_filter *fil,
166+ void *addr, u16 vlan_id)
167+{
168+ int ret;
169+ u8 op;
170+
171+ op = vlan_id ? QLCNIC_MAC_VLAN_ADD : QLCNIC_MAC_ADD;
172+ ret = qlcnic_sre_macaddr_change(adapter, addr, vlan_id, op);
173+ if (ret)
174+ return;
175+
176+ op = vlan_id ? QLCNIC_MAC_VLAN_DEL : QLCNIC_MAC_DEL;
177+ ret = qlcnic_sre_macaddr_change(adapter, addr, vlan_id, op);
178+ if (!ret) {
179+ hlist_del(&fil->fnode);
180+ adapter->rx_fhash.fnum--;
181+ }
182+}
183+
184+static struct qlcnic_filter *qlcnic_find_mac_filter(struct hlist_head *head,
185+ void *addr, u16 vlan_id)
186+{
187+ struct qlcnic_filter *tmp_fil = NULL;
188+ struct hlist_node *n;
189+
190+ hlist_for_each_entry_safe(tmp_fil, n, head, fnode) {
191+ if (!memcmp(tmp_fil->faddr, addr, ETH_ALEN) &&
192+ tmp_fil->vlan_id == vlan_id)
193+ return tmp_fil;
194+ }
195+
196+ return NULL;
197+}
198+
164199 void qlcnic_add_lb_filter(struct qlcnic_adapter *adapter, struct sk_buff *skb,
165200 int loopback_pkt, u16 vlan_id)
166201 {
167202 struct ethhdr *phdr = (struct ethhdr *)(skb->data);
168203 struct qlcnic_filter *fil, *tmp_fil;
169− struct hlist_node *n;
170204 struct hlist_head *head;
171205 unsigned long time;
172206 u64 src_addr = 0;
173− u8 hindex, found = 0, op;
207+ u8 hindex, op;
174208 int ret;
175209
176210 memcpy(&src_addr, phdr->h_source, ETH_ALEN);
211+ hindex = qlcnic_mac_hash(src_addr) &
212+ (adapter->fhash.fbucket_size - 1);
177213
178214 if (loopback_pkt) {
179215 if (adapter->rx_fhash.fnum >= adapter->rx_fhash.fmax)
180216 return;
181217
182− hindex = qlcnic_mac_hash(src_addr) &
183− (adapter->fhash.fbucket_size - 1);
184218 head = &(adapter->rx_fhash.fhead[hindex]);
185219
186− hlist_for_each_entry_safe(tmp_fil, n, head, fnode) {
187− if (!memcmp(tmp_fil->faddr, &src_addr, ETH_ALEN) &&
188− tmp_fil->vlan_id == vlan_id) {
189− time = tmp_fil->ftime;
190− if (jiffies > (QLCNIC_READD_AGE * HZ + time))
191− tmp_fil->ftime = jiffies;
192− return;
193− }
220+ tmp_fil = qlcnic_find_mac_filter(head, &src_addr, vlan_id);
221+ if (tmp_fil) {
222+ time = tmp_fil->ftime;
223+ if (time_after(jiffies, QLCNIC_READD_AGE * HZ + time))
224+ tmp_fil->ftime = jiffies;
225+ return;
194226 }
195227
196228 fil = kzalloc(sizeof(struct qlcnic_filter), GFP_ATOMIC);
@@ -205,36 +237,37 @@ void qlcnic_add_lb_filter(struct qlcnic_adapter *adapter, struct sk_buff *skb, · 8 unmodified lines
205237 adapter->rx_fhash.fnum++;
206238 spin_unlock(&adapter->rx_mac_learn_lock);
207239 } else {
208− hindex = qlcnic_mac_hash(src_addr) &
209− (adapter->fhash.fbucket_size - 1);
210− head = &(adapter->rx_fhash.fhead[hindex]);
211− spin_lock(&adapter->rx_mac_learn_lock);
212− hlist_for_each_entry_safe(tmp_fil, n, head, fnode) {
213− if (!memcmp(tmp_fil->faddr, &src_addr, ETH_ALEN) &&
214− tmp_fil->vlan_id == vlan_id) {
215− found = 1;
216− break;
217− }
218− }
240+ head = &adapter->fhash.fhead[hindex];
219241
220− if (!found) {
221− spin_unlock(&adapter->rx_mac_learn_lock);
222− return;
223− }
242+ spin_lock(&adapter->mac_learn_lock);
224243
225− op = vlan_id ? QLCNIC_MAC_VLAN_ADD : QLCNIC_MAC_ADD;
226− ret = qlcnic_sre_macaddr_change(adapter, (u8 *)&src_addr,
227− vlan_id, op);
228− if (!ret) {
244+ tmp_fil = qlcnic_find_mac_filter(head, &src_addr, vlan_id);
245+ if (tmp_fil) {
229246 op = vlan_id ? QLCNIC_MAC_VLAN_DEL : QLCNIC_MAC_DEL;
230247 ret = qlcnic_sre_macaddr_change(adapter,
231248 (u8 *)&src_addr,
232249 vlan_id, op);
233250 if (!ret) {
234− hlist_del(&(tmp_fil->fnode));
235− adapter->rx_fhash.fnum--;
251+ hlist_del(&tmp_fil->fnode);
252+ adapter->fhash.fnum--;
236253 }
254+
255+ spin_unlock(&adapter->mac_learn_lock);
256+
257+ return;
237258 }
259+
260+ spin_unlock(&adapter->mac_learn_lock);
261+
262+ head = &adapter->rx_fhash.fhead[hindex];
263+
264+ spin_lock(&adapter->rx_mac_learn_lock);
265+
266+ tmp_fil = qlcnic_find_mac_filter(head, &src_addr, vlan_id);
267+ if (tmp_fil)
268+ qlcnic_delete_rx_list_mac(adapter, tmp_fil, &src_addr,
269+ vlan_id);
270+
238271 spin_unlock(&adapter->rx_mac_learn_lock);
239272 }
240273 }
@@ -262,7 +295,7 @@ void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr, · 21 unmodified lines
262295
263296 mac_req = (struct qlcnic_mac_req *)&(req->words[0]);
264297 mac_req->op = vlan_id ? QLCNIC_MAC_VLAN_ADD : QLCNIC_MAC_ADD;
265− memcpy(mac_req->mac_addr, &uaddr, ETH_ALEN);
298+ memcpy(mac_req->mac_addr, uaddr, ETH_ALEN);
266299
267300 vlan_req = (struct qlcnic_vlan_req *)&req->words[1];
268301 vlan_req->vlan_id = cpu_to_le16(vlan_id);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c+11−8
@@ -977,8 +977,8 @@ qlcnic_check_options(struct qlcnic_adapter *adapter) · 976 unmodified lines
977977 static int
978978 qlcnic_initialize_nic(struct qlcnic_adapter *adapter)
979979 {
980− int err;
981980 struct qlcnic_info nic_info;
981+ int err = 0;
982982
983983 memset(&nic_info, 0, sizeof(struct qlcnic_info));
984984 err = qlcnic_get_nic_info(adapter, &nic_info, adapter->ahw->pci_func);
@@ -993,7 +993,9 @@ qlcnic_initialize_nic(struct qlcnic_adapter *adapter) · 8 unmodified lines
993993
994994 if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_MORE_CAPS) {
995995 u32 temp;
996− temp = QLCRD32(adapter, CRB_FW_CAPABILITIES_2);
996+ temp = QLCRD32(adapter, CRB_FW_CAPABILITIES_2, &err);
997+ if (err == -EIO)
998+ return err;
997999 adapter->ahw->extra_capability[0] = temp;
9981000 }
9991001 adapter->ahw->max_mac_filters = nic_info.max_mac_filters;
@@ -2141,7 +2143,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) · 1141 unmodified lines
21412143 if (qlcnic_83xx_check(adapter) && !qlcnic_use_msi_x &&
21422144 !!qlcnic_use_msi)
21432145 dev_warn(&pdev->dev,
2144− "83xx adapter do not support MSI interrupts\n");
2146+ "Device does not support MSI interrupts\n");
21452147
21462148 err = qlcnic_setup_intr(adapter, 0);
21472149 if (err) {
@@ -3095,6 +3097,7 @@ qlcnic_check_health(struct qlcnic_adapter *adapter) · 947 unmodified lines
30953097 {
30963098 u32 state = 0, heartbeat;
30973099 u32 peg_status;
3100+ int err = 0;
30983101
30993102 if (qlcnic_check_temp(adapter))
31003103 goto detach;
@@ -3141,11 +3144,11 @@ qlcnic_check_health(struct qlcnic_adapter *adapter) · 40 unmodified lines
31413144 "PEG_NET_4_PC: 0x%x\n",
31423145 peg_status,
31433146 QLC_SHARED_REG_RD32(adapter, QLCNIC_PEG_HALT_STATUS2),
3144− QLCRD32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x3c),
3145− QLCRD32(adapter, QLCNIC_CRB_PEG_NET_1 + 0x3c),
3146− QLCRD32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x3c),
3147− QLCRD32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x3c),
3148− QLCRD32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x3c));
3147+ QLCRD32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x3c, &err),
3148+ QLCRD32(adapter, QLCNIC_CRB_PEG_NET_1 + 0x3c, &err),
3149+ QLCRD32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x3c, &err),
3150+ QLCRD32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x3c, &err),
3151+ QLCRD32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x3c, &err));
31493152 if (QLCNIC_FWERROR_CODE(peg_status) == 0x67)
31503153 dev_err(&adapter->pdev->dev,
31513154 "Firmware aborted with error code 0x00006700. "
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c+1−1
@@ -562,7 +562,7 @@ static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter, · 561 unmodified lines
562562 INIT_LIST_HEAD(&adapter->vf_mc_list);
563563 if (!qlcnic_use_msi_x && !!qlcnic_use_msi)
564564 dev_warn(&adapter->pdev->dev,
565− "83xx adapter do not support MSI interrupts\n");
565+ "Device does not support MSI interrupts\n");
566566
567567 err = qlcnic_setup_intr(adapter, 1);
568568 if (err) {
drivers/net/ethernet/realtek/8139cp.c+45−3
@@ -478,7 +478,7 @@ rx_status_loop: · 477 unmodified lines
478478
479479 while (1) {
480480 u32 status, len;
481− dma_addr_t mapping;
481+ dma_addr_t mapping, new_mapping;
482482 struct sk_buff *skb, *new_skb;
483483 struct cp_desc *desc;
484484 const unsigned buflen = cp->rx_buf_sz;
@@ -520,6 +520,13 @@ rx_status_loop: · 35 unmodified lines
520520 goto rx_next;
521521 }
522522
523+ new_mapping = dma_map_single(&cp->pdev->dev, new_skb->data, buflen,
524+ PCI_DMA_FROMDEVICE);
525+ if (dma_mapping_error(&cp->pdev->dev, new_mapping)) {
526+ dev->stats.rx_dropped++;
527+ goto rx_next;
528+ }
529+
523530 dma_unmap_single(&cp->pdev->dev, mapping,
524531 buflen, PCI_DMA_FROMDEVICE);
525532
@@ -531,12 +538,11 @@ rx_status_loop: · 5 unmodified lines
531538
532539 skb_put(skb, len);
533540
534− mapping = dma_map_single(&cp->pdev->dev, new_skb->data, buflen,
535− PCI_DMA_FROMDEVICE);
536541 cp->rx_skb[rx_tail] = new_skb;
537542
538543 cp_rx_skb(cp, skb, desc);
539544 rx++;
545+ mapping = new_mapping;
540546
541547 rx_next:
542548 cp->rx_ring[rx_tail].opts2 = 0;
@@ -716,6 +722,22 @@ static inline u32 cp_tx_vlan_tag(struct sk_buff *skb) · 173 unmodified lines
716722 TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
717723 }
718724
725+static void unwind_tx_frag_mapping(struct cp_private *cp, struct sk_buff *skb,
726+ int first, int entry_last)
727+{
728+ int frag, index;
729+ struct cp_desc *txd;
730+ skb_frag_t *this_frag;
731+ for (frag = 0; frag+first < entry_last; frag++) {
732+ index = first+frag;
733+ cp->tx_skb[index] = NULL;
734+ txd = &cp->tx_ring[index];
735+ this_frag = &skb_shinfo(skb)->frags[frag];
736+ dma_unmap_single(&cp->pdev->dev, le64_to_cpu(txd->addr),
737+ skb_frag_size(this_frag), PCI_DMA_TODEVICE);
738+ }
739+}
740+
719741 static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
720742 struct net_device *dev)
721743 {
@@ -749,6 +771,9 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb, · 27 unmodified lines
749771
750772 len = skb->len;
751773 mapping = dma_map_single(&cp->pdev->dev, skb->data, len, PCI_DMA_TODEVICE);
774+ if (dma_mapping_error(&cp->pdev->dev, mapping))
775+ goto out_dma_error;
776+
752777 txd->opts2 = opts2;
753778 txd->addr = cpu_to_le64(mapping);
754779 wmb();
@@ -786,6 +811,9 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb, · 31 unmodified lines
786811 first_len = skb_headlen(skb);
787812 first_mapping = dma_map_single(&cp->pdev->dev, skb->data,
788813 first_len, PCI_DMA_TODEVICE);
814+ if (dma_mapping_error(&cp->pdev->dev, first_mapping))
815+ goto out_dma_error;
816+
789817 cp->tx_skb[entry] = skb;
790818 entry = NEXT_TX(entry);
791819
@@ -799,6 +827,11 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb, · 7 unmodified lines
799827 mapping = dma_map_single(&cp->pdev->dev,
800828 skb_frag_address(this_frag),
801829 len, PCI_DMA_TODEVICE);
830+ if (dma_mapping_error(&cp->pdev->dev, mapping)) {
831+ unwind_tx_frag_mapping(cp, skb, first_entry, entry);
832+ goto out_dma_error;
833+ }
834+
802835 eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0;
803836
804837 ctrl = eor | len | DescOwn;
@@ -859,11 +892,16 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb, · 54 unmodified lines
859892 if (TX_BUFFS_AVAIL(cp) <= (MAX_SKB_FRAGS + 1))
860893 netif_stop_queue(dev);
861894
895+out_unlock:
862896 spin_unlock_irqrestore(&cp->lock, intr_flags);
863897
864898 cpw8(TxPoll, NormalTxPoll);
865899
866900 return NETDEV_TX_OK;
901+out_dma_error:
902+ kfree_skb(skb);
903+ cp->dev->stats.tx_dropped++;
904+ goto out_unlock;
867905 }
868906
869907 /* Set or clear the multicast filter for this adaptor.
@@ -1054,6 +1092,10 @@ static int cp_refill_rx(struct cp_private *cp) · 184 unmodified lines
10541092
10551093 mapping = dma_map_single(&cp->pdev->dev, skb->data,
10561094 cp->rx_buf_sz, PCI_DMA_FROMDEVICE);
1095+ if (dma_mapping_error(&cp->pdev->dev, mapping)) {
1096+ kfree_skb(skb);
1097+ goto err_out;
1098+ }
10571099 cp->rx_skb[i] = skb;
10581100
10591101 cp->rx_ring[i].opts2 = 0;
drivers/net/ethernet/realtek/r8169.c+1−1
@@ -3689,7 +3689,7 @@ static void rtl_phy_work(struct rtl8169_private *tp) · 3688 unmodified lines
36893689 if (tp->link_ok(ioaddr))
36903690 return;
36913691
3692− netif_warn(tp, link, tp->dev, "PHY reset until link up\n");
3692+ netif_dbg(tp, link, tp->dev, "PHY reset until link up\n");
36933693
36943694 tp->phy_reset_enable(tp);
36953695
drivers/net/ethernet/sis/sis900.c+2−10
@@ -1318,7 +1318,7 @@ static void sis900_timer(unsigned long data) · 1317 unmodified lines
13181318 if (duplex){
13191319 sis900_set_mode(sis_priv, speed, duplex);
13201320 sis630_set_eq(net_dev, sis_priv->chipset_rev);
1321− netif_start_queue(net_dev);
1321+ netif_carrier_on(net_dev);
13221322 }
13231323
13241324 sis_priv->timer.expires = jiffies + HZ;
@@ -1336,10 +1336,8 @@ static void sis900_timer(unsigned long data) · 11 unmodified lines
13361336 status = sis900_default_phy(net_dev);
13371337 mii_phy = sis_priv->mii;
13381338
1339− if (status & MII_STAT_LINK){
1339+ if (status & MII_STAT_LINK)
13401340 sis900_check_mode(net_dev, mii_phy);
1341− netif_carrier_on(net_dev);
1342− }
13431341 } else {
13441342 /* Link ON -> OFF */
13451343 if (!(status & MII_STAT_LINK)){
@@ -1612,12 +1610,6 @@ sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev) · 266 unmodified lines
16121610 unsigned int index_cur_tx, index_dirty_tx;
16131611 unsigned int count_dirty_tx;
16141612
1615− /* Don't transmit data before the complete of auto-negotiation */
1616− if(!sis_priv->autong_complete){
1617− netif_stop_queue(net_dev);
1618− return NETDEV_TX_BUSY;
1619− }
1620−
16211613 spin_lock_irqsave(&sis_priv->lock, flags);
16221614
16231615 /* Calculate the next Tx descriptor entry. */
drivers/net/ethernet/ti/cpsw.c+1−1
@@ -1867,7 +1867,7 @@ static int cpsw_probe(struct platform_device *pdev) · 1866 unmodified lines
18671867
18681868 while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) {
18691869 for (i = res->start; i <= res->end; i++) {
1870− if (request_irq(i, cpsw_interrupt, IRQF_DISABLED,
1870+ if (request_irq(i, cpsw_interrupt, 0,
18711871 dev_name(&pdev->dev), priv)) {
18721872 dev_err(priv->dev, "error attaching irq\n");
18731873 goto clean_ale_ret;
drivers/net/ethernet/ti/davinci_emac.c+1−2
@@ -1568,8 +1568,7 @@ static int emac_dev_open(struct net_device *ndev) · 1567 unmodified lines
15681568 while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) {
15691569 for (i = res->start; i <= res->end; i++) {
15701570 if (devm_request_irq(&priv->pdev->dev, i, emac_irq,
1571− IRQF_DISABLED,
1572− ndev->name, ndev))
1571+ 0, ndev->name, ndev))
15731572 goto rollback;
15741573 }
15751574 k++;
drivers/net/macvlan.c+19−4
@@ -337,8 +337,11 @@ static int macvlan_open(struct net_device *dev) · 336 unmodified lines
337337 int err;
338338
339339 if (vlan->port->passthru) {
340− if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC))
341− dev_set_promiscuity(lowerdev, 1);
340+ if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) {
341+ err = dev_set_promiscuity(lowerdev, 1);
342+ if (err < 0)
343+ goto out;
344+ }
342345 goto hash_add;
343346 }
344347
@@ -863,6 +866,18 @@ static int macvlan_changelink(struct net_device *dev, · 518 unmodified lines
863866 struct nlattr *tb[], struct nlattr *data[])
864867 {
865868 struct macvlan_dev *vlan = netdev_priv(dev);
869+ enum macvlan_mode mode;
870+ bool set_mode = false;
871+
872+ /* Validate mode, but don't set yet: setting flags may fail. */
873+ if (data && data[IFLA_MACVLAN_MODE]) {
874+ set_mode = true;
875+ mode = nla_get_u32(data[IFLA_MACVLAN_MODE]);
876+ /* Passthrough mode can't be set or cleared dynamically */
877+ if ((mode == MACVLAN_MODE_PASSTHRU) !=
878+ (vlan->mode == MACVLAN_MODE_PASSTHRU))
879+ return -EINVAL;
880+ }
866881
867882 if (data && data[IFLA_MACVLAN_FLAGS]) {
868883 __u16 flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]);
@@ -879,8 +894,8 @@ static int macvlan_changelink(struct net_device *dev, · 10 unmodified lines
879894 }
880895 vlan->flags = flags;
881896 }
882− if (data && data[IFLA_MACVLAN_MODE])
883− vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]);
897+ if (set_mode)
898+ vlan->mode = mode;
884899 return 0;
885900 }
886901
drivers/net/usb/r8152.c+58−68
@@ -344,17 +344,41 @@ static const int multicast_filter_limit = 32; · 343 unmodified lines
344344 static
345345 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
346346 {
347− return usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0),
347+ int ret;
348+ void *tmp;
349+
350+ tmp = kmalloc(size, GFP_KERNEL);
351+ if (!tmp)
352+ return -ENOMEM;
353+
354+ ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0),
348355 RTL8152_REQ_GET_REGS, RTL8152_REQT_READ,
349− value, index, data, size, 500);
356+ value, index, tmp, size, 500);
357+
358+ memcpy(data, tmp, size);
359+ kfree(tmp);
360+
361+ return ret;
350362 }
351363
352364 static
353365 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
354366 {
355− return usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0),
367+ int ret;
368+ void *tmp;
369+
370+ tmp = kmalloc(size, GFP_KERNEL);
371+ if (!tmp)
372+ return -ENOMEM;
373+
374+ memcpy(tmp, data, size);
375+
376+ ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0),
356377 RTL8152_REQ_SET_REGS, RTL8152_REQT_WRITE,
357− value, index, data, size, 500);
378+ value, index, tmp, size, 500);
379+
380+ kfree(tmp);
381+ return ret;
358382 }
359383
360384 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size,
@@ -490,37 +514,31 @@ int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) · 129 unmodified lines
490514
491515 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index)
492516 {
493− u32 data;
517+ __le32 data;
494518
495− if (type == MCU_TYPE_PLA)
496− pla_ocp_read(tp, index, sizeof(data), &data);
497− else
498− usb_ocp_read(tp, index, sizeof(data), &data);
519+ generic_ocp_read(tp, index, sizeof(data), &data, type);
499520
500521 return __le32_to_cpu(data);
501522 }
502523
503524 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data)
504525 {
505− if (type == MCU_TYPE_PLA)
506− pla_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(data), &data);
507− else
508− usb_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(data), &data);
526+ __le32 tmp = __cpu_to_le32(data);
527+
528+ generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type);
509529 }
510530
511531 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index)
512532 {
513533 u32 data;
534+ __le32 tmp;
514535 u8 shift = index & 2;
515536
516537 index &= ~3;
517538
518− if (type == MCU_TYPE_PLA)
519− pla_ocp_read(tp, index, sizeof(data), &data);
520− else
521− usb_ocp_read(tp, index, sizeof(data), &data);
539+ generic_ocp_read(tp, index, sizeof(tmp), &tmp, type);
522540
523− data = __le32_to_cpu(data);
541+ data = __le32_to_cpu(tmp);
524542 data >>= (shift * 8);
525543 data &= 0xffff;
526544
@@ -529,7 +547,8 @@ static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) · 2 unmodified lines
529547
530548 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data)
531549 {
532− u32 tmp, mask = 0xffff;
550+ u32 mask = 0xffff;
551+ __le32 tmp;
533552 u16 byen = BYTE_EN_WORD;
534553 u8 shift = index & 2;
535554
@@ -542,34 +561,25 @@ static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) · 6 unmodified lines
542561 index &= ~3;
543562 }
544563
545− if (type == MCU_TYPE_PLA)
546− pla_ocp_read(tp, index, sizeof(tmp), &tmp);
547− else
548− usb_ocp_read(tp, index, sizeof(tmp), &tmp);
564+ generic_ocp_read(tp, index, sizeof(tmp), &tmp, type);
549565
550− tmp = __le32_to_cpu(tmp) & ~mask;
551− tmp |= data;
552− tmp = __cpu_to_le32(tmp);
566+ data |= __le32_to_cpu(tmp) & ~mask;
567+ tmp = __cpu_to_le32(data);
553568
554− if (type == MCU_TYPE_PLA)
555− pla_ocp_write(tp, index, byen, sizeof(tmp), &tmp);
556− else
557− usb_ocp_write(tp, index, byen, sizeof(tmp), &tmp);
569+ generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type);
558570 }
559571
560572 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index)
561573 {
562574 u32 data;
575+ __le32 tmp;
563576 u8 shift = index & 3;
564577
565578 index &= ~3;
566579
567− if (type == MCU_TYPE_PLA)
568− pla_ocp_read(tp, index, sizeof(data), &data);
569− else
570− usb_ocp_read(tp, index, sizeof(data), &data);
580+ generic_ocp_read(tp, index, sizeof(tmp), &tmp, type);
571581
572− data = __le32_to_cpu(data);
582+ data = __le32_to_cpu(tmp);
573583 data >>= (shift * 8);
574584 data &= 0xff;
575585
@@ -578,7 +588,8 @@ static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) · 2 unmodified lines
578588
579589 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data)
580590 {
581− u32 tmp, mask = 0xff;
591+ u32 mask = 0xff;
592+ __le32 tmp;
582593 u16 byen = BYTE_EN_BYTE;
583594 u8 shift = index & 3;
584595
@@ -591,19 +602,12 @@ static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) · 6 unmodified lines
591602 index &= ~3;
592603 }
593604
594− if (type == MCU_TYPE_PLA)
595− pla_ocp_read(tp, index, sizeof(tmp), &tmp);
596− else
597− usb_ocp_read(tp, index, sizeof(tmp), &tmp);
605+ generic_ocp_read(tp, index, sizeof(tmp), &tmp, type);
598606
599− tmp = __le32_to_cpu(tmp) & ~mask;
600− tmp |= data;
601− tmp = __cpu_to_le32(tmp);
607+ data |= __le32_to_cpu(tmp) & ~mask;
608+ tmp = __cpu_to_le32(data);
602609
603− if (type == MCU_TYPE_PLA)
604− pla_ocp_write(tp, index, byen, sizeof(tmp), &tmp);
605− else
606− usb_ocp_write(tp, index, byen, sizeof(tmp), &tmp);
610+ generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type);
607611 }
608612
609613 static void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value)
@@ -685,21 +689,14 @@ static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) · 75 unmodified lines
685689 static inline void set_ethernet_addr(struct r8152 *tp)
686690 {
687691 struct net_device *dev = tp->netdev;
688− u8 *node_id;
689−
690− node_id = kmalloc(sizeof(u8) * 8, GFP_KERNEL);
691− if (!node_id) {
692− netif_err(tp, probe, dev, "out of memory");
693− return;
694− }
692+ u8 node_id[8] = {0};
695693
696− if (pla_ocp_read(tp, PLA_IDR, sizeof(u8) * 8, node_id) < 0)
694+ if (pla_ocp_read(tp, PLA_IDR, sizeof(node_id), node_id) < 0)
697695 netif_notice(tp, probe, dev, "inet addr fail\n");
698696 else {
699697 memcpy(dev->dev_addr, node_id, dev->addr_len);
700698 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
701699 }
702− kfree(node_id);
703700 }
704701
705702 static int rtl8152_set_mac_address(struct net_device *netdev, void *p)
@@ -882,15 +879,10 @@ static void rtl8152_set_rx_mode(struct net_device *netdev) · 176 unmodified lines
882879 static void _rtl8152_set_rx_mode(struct net_device *netdev)
883880 {
884881 struct r8152 *tp = netdev_priv(netdev);
885− u32 tmp, *mc_filter; /* Multicast hash filter */
882+ u32 mc_filter[2]; /* Multicast hash filter */
883+ __le32 tmp[2];
886884 u32 ocp_data;
887885
888− mc_filter = kmalloc(sizeof(u32) * 2, GFP_KERNEL);
889− if (!mc_filter) {
890− netif_err(tp, link, netdev, "out of memory");
891− return;
892− }
893−
894886 clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
895887 netif_stop_queue(netdev);
896888 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
@@ -918,14 +910,12 @@ static void _rtl8152_set_rx_mode(struct net_device *netdev) · 21 unmodified lines
918910 }
919911 }
920912
921− tmp = mc_filter[0];
922− mc_filter[0] = __cpu_to_le32(swab32(mc_filter[1]));
923− mc_filter[1] = __cpu_to_le32(swab32(tmp));
913+ tmp[0] = __cpu_to_le32(swab32(mc_filter[1]));
914+ tmp[1] = __cpu_to_le32(swab32(mc_filter[0]));
924915
925− pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(u32) * 2, mc_filter);
916+ pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp);
926917 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
927918 netif_wake_queue(netdev);
928− kfree(mc_filter);
929919 }
930920
931921 static netdev_tx_t rtl8152_start_xmit(struct sk_buff *skb,
drivers/net/usb/r815x.c+42−20
@@ -24,34 +24,43 @@ · 23 unmodified lines
2424
2525 static int pla_read_word(struct usb_device *udev, u16 index)
2626 {
27− int data, ret;
27+ int ret;
2828 u8 shift = index & 2;
29− __le32 ocp_data;
29+ __le32 *tmp;
30+
31+ tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
32+ if (!tmp)
33+ return -ENOMEM;
3034
3135 index &= ~3;
3236
3337 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
3438 RTL815x_REQ_GET_REGS, RTL815x_REQT_READ,
35− index, MCU_TYPE_PLA, &ocp_data, sizeof(ocp_data),
36− 500);
39+ index, MCU_TYPE_PLA, tmp, sizeof(*tmp), 500);
3740 if (ret < 0)
38− return ret;
41+ goto out2;
3942
40− data = __le32_to_cpu(ocp_data);
41− data >>= (shift * 8);
42− data &= 0xffff;
43+ ret = __le32_to_cpu(*tmp);
44+ ret >>= (shift * 8);
45+ ret &= 0xffff;
4346
44− return data;
47+out2:
48+ kfree(tmp);
49+ return ret;
4550 }
4651
4752 static int pla_write_word(struct usb_device *udev, u16 index, u32 data)
4853 {
49− __le32 ocp_data;
54+ __le32 *tmp;
5055 u32 mask = 0xffff;
5156 u16 byen = BYTE_EN_WORD;
5257 u8 shift = index & 2;
5358 int ret;
5459
60+ tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
61+ if (!tmp)
62+ return -ENOMEM;
63+
5564 data &= mask;
5665
5766 if (shift) {
@@ -63,19 +72,20 @@ static int pla_write_word(struct usb_device *udev, u16 index, u32 data) · 5 unmodified lines
6372
6473 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
6574 RTL815x_REQ_GET_REGS, RTL815x_REQT_READ,
66− index, MCU_TYPE_PLA, &ocp_data, sizeof(ocp_data),
67− 500);
75+ index, MCU_TYPE_PLA, tmp, sizeof(*tmp), 500);
6876 if (ret < 0)
69− return ret;
77+ goto out3;
7078
71− data |= __le32_to_cpu(ocp_data) & ~mask;
72− ocp_data = __cpu_to_le32(data);
79+ data |= __le32_to_cpu(*tmp) & ~mask;
80+ *tmp = __cpu_to_le32(data);
7381
7482 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
7583 RTL815x_REQ_SET_REGS, RTL815x_REQT_WRITE,
76− index, MCU_TYPE_PLA | byen, &ocp_data,
77− sizeof(ocp_data), 500);
84+ index, MCU_TYPE_PLA | byen, tmp, sizeof(*tmp),
85+ 500);
7886
87+out3:
88+ kfree(tmp);
7989 return ret;
8090 }
8191
@@ -116,11 +126,18 @@ out1: · 34 unmodified lines
116126 static int r815x_mdio_read(struct net_device *netdev, int phy_id, int reg)
117127 {
118128 struct usbnet *dev = netdev_priv(netdev);
129+ int ret;
119130
120131 if (phy_id != R815x_PHY_ID)
121132 return -EINVAL;
122133
123− return ocp_reg_read(dev, BASE_MII + reg * 2);
134+ if (usb_autopm_get_interface(dev->intf) < 0)
135+ return -ENODEV;
136+
137+ ret = ocp_reg_read(dev, BASE_MII + reg * 2);
138+
139+ usb_autopm_put_interface(dev->intf);
140+ return ret;
124141 }
125142
126143 static
@@ -131,7 +148,12 @@ void r815x_mdio_write(struct net_device *netdev, int phy_id, int reg, int val) · 4 unmodified lines
131148 if (phy_id != R815x_PHY_ID)
132149 return;
133150
151+ if (usb_autopm_get_interface(dev->intf) < 0)
152+ return;
153+
134154 ocp_reg_write(dev, BASE_MII + reg * 2, val);
155+
156+ usb_autopm_put_interface(dev->intf);
135157 }
136158
137159 static int r8153_bind(struct usbnet *dev, struct usb_interface *intf)
@@ -150,7 +172,7 @@ static int r8153_bind(struct usbnet *dev, struct usb_interface *intf) · 12 unmodified lines
150172 dev->mii.phy_id = R815x_PHY_ID;
151173 dev->mii.supports_gmii = 1;
152174
153− return 0;
175+ return status;
154176 }
155177
156178 static int r8152_bind(struct usbnet *dev, struct usb_interface *intf)
@@ -169,7 +191,7 @@ static int r8152_bind(struct usbnet *dev, struct usb_interface *intf) · 12 unmodified lines
169191 dev->mii.phy_id = R815x_PHY_ID;
170192 dev->mii.supports_gmii = 0;
171193
172− return 0;
194+ return status;
173195 }
174196
175197 static const struct driver_info r8152_info = {
drivers/net/wireless/ath/ath10k/Kconfig+1−1
@@ -1,6 +1,6 @@
11 config ATH10K
22 tristate "Atheros 802.11ac wireless cards support"
3− depends on MAC80211
3+ depends on MAC80211 && HAS_DMA
44 select ATH_COMMON
55 ---help---
66 This module adds support for wireless adapters based on
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c+4−1
@@ -1093,8 +1093,11 @@ static void brcmf_link_down(struct brcmf_cfg80211_vif *vif) · 1092 unmodified lines
10931093 brcmf_dbg(INFO, "Call WLC_DISASSOC to stop excess roaming\n ");
10941094 err = brcmf_fil_cmd_data_set(vif->ifp,
10951095 BRCMF_C_DISASSOC, NULL, 0);
1096− if (err)
1096+ if (err) {
10971097 brcmf_err("WLC_DISASSOC failed (%d)\n", err);
1098+ cfg80211_disconnected(vif->wdev.netdev, 0,
1099+ NULL, 0, GFP_KERNEL);
1100+ }
10981101 clear_bit(BRCMF_VIF_STATUS_CONNECTED, &vif->sme_state);
10991102 }
11001103 clear_bit(BRCMF_VIF_STATUS_CONNECTING, &vif->sme_state);
drivers/net/wireless/iwlwifi/iwl-prph.h+2−0
@@ -97,6 +97,8 @@ · 96 unmodified lines
9797
9898 #define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800)
9999
100+#define APMG_RTC_INT_STT_RFKILL (0x10000000)
101+
100102 /* Device system time */
101103 #define DEVICE_SYSTEM_TIME_REG 0xA0206C
102104
drivers/net/wireless/iwlwifi/mvm/d3.c+10−5
@@ -134,7 +134,7 @@ struct wowlan_key_data { · 133 unmodified lines
134134 struct iwl_wowlan_rsc_tsc_params_cmd *rsc_tsc;
135135 struct iwl_wowlan_tkip_params_cmd *tkip;
136136 bool error, use_rsc_tsc, use_tkip;
137− int gtk_key_idx;
137+ int wep_key_idx;
138138 };
139139
140140 static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
@@ -188,8 +188,8 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, · 47 unmodified lines
188188 wkc.wep_key.key_offset = 0;
189189 } else {
190190 /* others start at 1 */
191− data->gtk_key_idx++;
192− wkc.wep_key.key_offset = data->gtk_key_idx;
191+ data->wep_key_idx++;
192+ wkc.wep_key.key_offset = data->wep_key_idx;
193193 }
194194
195195 ret = iwl_mvm_send_cmd_pdu(mvm, WEP_KEY, CMD_SYNC,
@@ -316,8 +316,13 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, · 120 unmodified lines
316316 mvm->ptk_ivlen = key->iv_len;
317317 mvm->ptk_icvlen = key->icv_len;
318318 } else {
319− data->gtk_key_idx++;
320− key->hw_key_idx = data->gtk_key_idx;
319+ /*
320+ * firmware only supports TSC/RSC for a single key,
321+ * so if there are multiple keep overwriting them
322+ * with new ones -- this relies on mac80211 doing
323+ * list_add_tail().
324+ */
325+ key->hw_key_idx = 1;
321326 mvm->gtk_ivlen = key->iv_len;
322327 mvm->gtk_icvlen = key->icv_len;
323328 }
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h+0−1
@@ -69,7 +69,6 @@ · 68 unmodified lines
6969 /* Scan Commands, Responses, Notifications */
7070
7171 /* Masks for iwl_scan_channel.type flags */
72−#define SCAN_CHANNEL_TYPE_PASSIVE 0
7372 #define SCAN_CHANNEL_TYPE_ACTIVE BIT(0)
7473 #define SCAN_CHANNEL_NARROW_BAND BIT(22)
7574
drivers/net/wireless/iwlwifi/mvm/mac80211.c+21−21
@@ -511,6 +511,27 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw, · 510 unmodified lines
511511 if (ret)
512512 goto out_unlock;
513513
514+ /*
515+ * TODO: remove this temporary code.
516+ * Currently MVM FW supports power management only on single MAC.
517+ * If new interface added, disable PM on existing interface.
518+ * P2P device is a special case, since it is handled by FW similary to
519+ * scan. If P2P deviced is added, PM remains enabled on existing
520+ * interface.
521+ * Note: the method below does not count the new interface being added
522+ * at this moment.
523+ */
524+ if (vif->type != NL80211_IFTYPE_P2P_DEVICE)
525+ mvm->vif_count++;
526+ if (mvm->vif_count > 1) {
527+ IWL_DEBUG_MAC80211(mvm,
528+ "Disable power on existing interfaces\n");
529+ ieee80211_iterate_active_interfaces_atomic(
530+ mvm->hw,
531+ IEEE80211_IFACE_ITER_NORMAL,
532+ iwl_mvm_pm_disable_iterator, mvm);
533+ }
534+
514535 /*
515536 * The AP binding flow can be done only after the beacon
516537 * template is configured (which happens only in the mac80211
@@ -534,27 +555,6 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw, · 17 unmodified lines
534555 goto out_unlock;
535556 }
536557
537− /*
538− * TODO: remove this temporary code.
539− * Currently MVM FW supports power management only on single MAC.
540− * If new interface added, disable PM on existing interface.
541− * P2P device is a special case, since it is handled by FW similary to
542− * scan. If P2P deviced is added, PM remains enabled on existing
543− * interface.
544− * Note: the method below does not count the new interface being added
545− * at this moment.
546− */
547− if (vif->type != NL80211_IFTYPE_P2P_DEVICE)
548− mvm->vif_count++;
549− if (mvm->vif_count > 1) {
550− IWL_DEBUG_MAC80211(mvm,
551− "Disable power on existing interfaces\n");
552− ieee80211_iterate_active_interfaces_atomic(
553− mvm->hw,
554− IEEE80211_IFACE_ITER_NORMAL,
555− iwl_mvm_pm_disable_iterator, mvm);
556− }
557−
558558 ret = iwl_mvm_mac_ctxt_add(mvm, vif);
559559 if (ret)
560560 goto out_release;
drivers/net/wireless/iwlwifi/mvm/scan.c+2−9
@@ -178,19 +178,12 @@ static void iwl_mvm_scan_fill_channels(struct iwl_scan_cmd *cmd, · 177 unmodified lines
178178 struct iwl_scan_channel *chan = (struct iwl_scan_channel *)
179179 (cmd->data + le16_to_cpu(cmd->tx_cmd.len));
180180 int i;
181− __le32 chan_type_value;
182−
183− if (req->n_ssids > 0)
184− chan_type_value = cpu_to_le32(BIT(req->n_ssids) - 1);
185− else
186− chan_type_value = SCAN_CHANNEL_TYPE_PASSIVE;
187181
188182 for (i = 0; i < cmd->channel_count; i++) {
189183 chan->channel = cpu_to_le16(req->channels[i]->hw_value);
184+ chan->type = cpu_to_le32(BIT(req->n_ssids) - 1);
190185 if (req->channels[i]->flags & IEEE80211_CHAN_PASSIVE_SCAN)
191− chan->type = SCAN_CHANNEL_TYPE_PASSIVE;
192− else
193− chan->type = chan_type_value;
186+ chan->type &= cpu_to_le32(~SCAN_CHANNEL_TYPE_ACTIVE);
194187 chan->active_dwell = cpu_to_le16(active_dwell);
195188 chan->passive_dwell = cpu_to_le16(passive_dwell);
196189 chan->iteration_count = cpu_to_le16(1);
drivers/net/wireless/iwlwifi/mvm/sta.c+8−3
@@ -915,6 +915,7 @@ int iwl_mvm_sta_tx_agg_flush(struct iwl_mvm *mvm, struct ieee80211_vif *vif, · 914 unmodified lines
915915 struct iwl_mvm_sta *mvmsta = (void *)sta->drv_priv;
916916 struct iwl_mvm_tid_data *tid_data = &mvmsta->tid_data[tid];
917917 u16 txq_id;
918+ enum iwl_mvm_agg_state old_state;
918919
919920 /*
920921 * First set the agg state to OFF to avoid calling
@@ -924,13 +925,17 @@ int iwl_mvm_sta_tx_agg_flush(struct iwl_mvm *mvm, struct ieee80211_vif *vif, · 3 unmodified lines
924925 txq_id = tid_data->txq_id;
925926 IWL_DEBUG_TX_QUEUES(mvm, "Flush AGG: sta %d tid %d q %d state %d\n",
926927 mvmsta->sta_id, tid, txq_id, tid_data->state);
928+ old_state = tid_data->state;
927929 tid_data->state = IWL_AGG_OFF;
928930 spin_unlock_bh(&mvmsta->lock);
929931
930− if (iwl_mvm_flush_tx_path(mvm, BIT(txq_id), true))
931− IWL_ERR(mvm, "Couldn't flush the AGG queue\n");
932+ if (old_state >= IWL_AGG_ON) {
933+ if (iwl_mvm_flush_tx_path(mvm, BIT(txq_id), true))
934+ IWL_ERR(mvm, "Couldn't flush the AGG queue\n");
935+
936+ iwl_trans_txq_disable(mvm->trans, tid_data->txq_id);
937+ }
932938
933− iwl_trans_txq_disable(mvm->trans, tid_data->txq_id);
934939 mvm->queue_to_mac80211[tid_data->txq_id] =
935940 IWL_INVALID_MAC80211_QUEUE;
936941
drivers/net/wireless/iwlwifi/pcie/drv.c+1−0
@@ -130,6 +130,7 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = { · 129 unmodified lines
130130 {IWL_PCI_DEVICE(0x423C, 0x1306, iwl5150_abg_cfg)}, /* Half Mini Card */
131131 {IWL_PCI_DEVICE(0x423C, 0x1221, iwl5150_agn_cfg)}, /* Mini Card */
132132 {IWL_PCI_DEVICE(0x423C, 0x1321, iwl5150_agn_cfg)}, /* Half Mini Card */
133+ {IWL_PCI_DEVICE(0x423C, 0x1326, iwl5150_abg_cfg)}, /* Half Mini Card */
133134
134135 {IWL_PCI_DEVICE(0x423D, 0x1211, iwl5150_agn_cfg)}, /* Mini Card */
135136 {IWL_PCI_DEVICE(0x423D, 0x1311, iwl5150_agn_cfg)}, /* Half Mini Card */
drivers/net/wireless/iwlwifi/pcie/rx.c+8−0
@@ -888,6 +888,14 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id) · 887 unmodified lines
888888
889889 iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
890890 if (hw_rfkill) {
891+ /*
892+ * Clear the interrupt in APMG if the NIC is going down.
893+ * Note that when the NIC exits RFkill (else branch), we
894+ * can't access prph and the NIC will be reset in
895+ * start_hw anyway.
896+ */
897+ iwl_write_prph(trans, APMG_RTC_INT_STT_REG,
898+ APMG_RTC_INT_STT_RFKILL);
891899 set_bit(STATUS_RFKILL, &trans_pcie->status);
892900 if (test_and_clear_bit(STATUS_HCMD_ACTIVE,
893901 &trans_pcie->status))
drivers/net/wireless/iwlwifi/pcie/trans.c+5−0
@@ -670,6 +670,11 @@ static int iwl_trans_pcie_start_hw(struct iwl_trans *trans) · 669 unmodified lines
670670 return err;
671671 }
672672
673+ /* Reset the entire device */
674+ iwl_set_bit(trans, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET);
675+
676+ usleep_range(10, 15);
677+
673678 iwl_pcie_apm_init(trans);
674679
675680 /* From now on, the op_mode will be kept updated about RF kill state */
drivers/net/wireless/mwifiex/cfg80211.c+2−2
@@ -1716,9 +1716,9 @@ mwifiex_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev, · 1715 unmodified lines
17161716 struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
17171717 int ret;
17181718
1719− if (priv->bss_mode != NL80211_IFTYPE_STATION) {
1719+ if (GET_BSS_ROLE(priv) != MWIFIEX_BSS_ROLE_STA) {
17201720 wiphy_err(wiphy,
1721− "%s: reject infra assoc request in non-STA mode\n",
1721+ "%s: reject infra assoc request in non-STA role\n",
17221722 dev->name);
17231723 return -EINVAL;
17241724 }
drivers/net/wireless/mwifiex/cfp.c+2−1
@@ -415,7 +415,8 @@ u32 mwifiex_get_supported_rates(struct mwifiex_private *priv, u8 *rates) · 414 unmodified lines
415415 u32 k = 0;
416416 struct mwifiex_adapter *adapter = priv->adapter;
417417
418− if (priv->bss_mode == NL80211_IFTYPE_STATION) {
418+ if (priv->bss_mode == NL80211_IFTYPE_STATION ||
419+ priv->bss_mode == NL80211_IFTYPE_P2P_CLIENT) {
419420 switch (adapter->config_bands) {
420421 case BAND_B:
421422 dev_dbg(adapter->dev, "info: infra band=%d "
drivers/net/wireless/mwifiex/join.c+4−2
@@ -1291,8 +1291,10 @@ int mwifiex_associate(struct mwifiex_private *priv, · 1290 unmodified lines
12911291 {
12921292 u8 current_bssid[ETH_ALEN];
12931293
1294− /* Return error if the adapter or table entry is not marked as infra */
1295− if ((priv->bss_mode != NL80211_IFTYPE_STATION) ||
1294+ /* Return error if the adapter is not STA role or table entry
1295+ * is not marked as infra.
1296+ */
1297+ if ((GET_BSS_ROLE(priv) != MWIFIEX_BSS_ROLE_STA) ||
12961298 (bss_desc->bss_mode != NL80211_IFTYPE_STATION))
12971299 return -1;
12981300
drivers/net/wireless/mwifiex/sdio.c+2−2
@@ -1639,8 +1639,8 @@ static int mwifiex_sdio_host_to_card(struct mwifiex_adapter *adapter, · 1638 unmodified lines
16391639 /* Allocate buffer and copy payload */
16401640 blk_size = MWIFIEX_SDIO_BLOCK_SIZE;
16411641 buf_block_len = (pkt_len + blk_size - 1) / blk_size;
1642− *(u16 *) &payload[0] = (u16) pkt_len;
1643− *(u16 *) &payload[2] = type;
1642+ *(__le16 *)&payload[0] = cpu_to_le16((u16)pkt_len);
1643+ *(__le16 *)&payload[2] = cpu_to_le16(type);
16441644
16451645 /*
16461646 * This is SDIO specific header
drivers/net/wireless/mwifiex/sta_ioctl.c+2−2
@@ -257,10 +257,10 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss, · 256 unmodified lines
257257 goto done;
258258 }
259259
260− if (priv->bss_mode == NL80211_IFTYPE_STATION) {
260+ if (priv->bss_mode == NL80211_IFTYPE_STATION ||
261+ priv->bss_mode == NL80211_IFTYPE_P2P_CLIENT) {
261262 u8 config_bands;
262263
263− /* Infra mode */
264264 ret = mwifiex_deauthenticate(priv, NULL);
265265 if (ret)
266266 goto done;
drivers/net/wireless/rt2x00/rt2x00queue.c+11−7
@@ -936,13 +936,8 @@ void rt2x00queue_index_inc(struct queue_entry *entry, enum queue_index index) · 935 unmodified lines
936936 spin_unlock_irqrestore(&queue->index_lock, irqflags);
937937 }
938938
939−void rt2x00queue_pause_queue(struct data_queue *queue)
939+void rt2x00queue_pause_queue_nocheck(struct data_queue *queue)
940940 {
941− if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) ||
942− !test_bit(QUEUE_STARTED, &queue->flags) ||
943− test_and_set_bit(QUEUE_PAUSED, &queue->flags))
944− return;
945−
946941 switch (queue->qid) {
947942 case QID_AC_VO:
948943 case QID_AC_VI:
@@ -958,6 +953,15 @@ void rt2x00queue_pause_queue(struct data_queue *queue) · 9 unmodified lines
958953 break;
959954 }
960955 }
956+void rt2x00queue_pause_queue(struct data_queue *queue)
957+{
958+ if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) ||
959+ !test_bit(QUEUE_STARTED, &queue->flags) ||
960+ test_and_set_bit(QUEUE_PAUSED, &queue->flags))
961+ return;
962+
963+ rt2x00queue_pause_queue_nocheck(queue);
964+}
961965 EXPORT_SYMBOL_GPL(rt2x00queue_pause_queue);
962966
963967 void rt2x00queue_unpause_queue(struct data_queue *queue)
@@ -1019,7 +1023,7 @@ void rt2x00queue_stop_queue(struct data_queue *queue) · 55 unmodified lines
10191023 return;
10201024 }
10211025
1022− rt2x00queue_pause_queue(queue);
1026+ rt2x00queue_pause_queue_nocheck(queue);
10231027
10241028 queue->rt2x00dev->ops->lib->stop_queue(queue);
10251029
include/linux/netdevice.h+1−1
@@ -973,7 +973,7 @@ struct net_device_ops { · 972 unmodified lines
973973 gfp_t gfp);
974974 void (*ndo_netpoll_cleanup)(struct net_device *dev);
975975 #endif
976−#ifdef CONFIG_NET_LL_RX_POLL
976+#ifdef CONFIG_NET_RX_BUSY_POLL
977977 int (*ndo_busy_poll)(struct napi_struct *dev);
978978 #endif
979979 int (*ndo_set_vf_mac)(struct net_device *dev,
include/linux/skbuff.h+1−1
@@ -501,7 +501,7 @@ struct sk_buff { · 500 unmodified lines
501501 /* 7/9 bit hole (depending on ndisc_nodetype presence) */
502502 kmemcheck_bitfield_end(flags2);
503503
504−#if defined CONFIG_NET_DMA || defined CONFIG_NET_LL_RX_POLL
504+#if defined CONFIG_NET_DMA || defined CONFIG_NET_RX_BUSY_POLL
505505 union {
506506 unsigned int napi_id;
507507 dma_cookie_t dma_cookie;
include/net/busy_poll.h+8−3
@@ -27,7 +27,7 @@ · 26 unmodified lines
2727 #include <linux/netdevice.h>
2828 #include <net/ip.h>
2929
30−#ifdef CONFIG_NET_LL_RX_POLL
30+#ifdef CONFIG_NET_RX_BUSY_POLL
3131
3232 struct napi_struct;
3333 extern unsigned int sysctl_net_busy_read __read_mostly;
@@ -146,7 +146,7 @@ static inline void sk_mark_napi_id(struct sock *sk, struct sk_buff *skb) · 112 unmodified lines
146146 sk->sk_napi_id = skb->napi_id;
147147 }
148148
149−#else /* CONFIG_NET_LL_RX_POLL */
149+#else /* CONFIG_NET_RX_BUSY_POLL */
150150 static inline unsigned long net_busy_loop_on(void)
151151 {
152152 return 0;
@@ -181,5 +181,10 @@ static inline bool busy_loop_timeout(unsigned long end_time) · 28 unmodified lines
181181 return true;
182182 }
183183
184−#endif /* CONFIG_NET_LL_RX_POLL */
184+static inline bool sk_busy_loop(struct sock *sk, int nonblock)
185+{
186+ return false;
187+}
188+
189+#endif /* CONFIG_NET_RX_BUSY_POLL */
185190 #endif /* _LINUX_NET_BUSY_POLL_H */
include/net/ip6_fib.h+1−1
@@ -300,7 +300,7 @@ extern void inet6_rt_notify(int event, struct rt6_info *rt, · 299 unmodified lines
300300 struct nl_info *info);
301301
302302 extern void fib6_run_gc(unsigned long expires,
303− struct net *net);
303+ struct net *net, bool force);
304304
305305 extern void fib6_gc_cleanup(void);
306306
include/net/ndisc.h+1−1
@@ -119,7 +119,7 @@ extern struct ndisc_options *ndisc_parse_options(u8 *opt, int opt_len, · 118 unmodified lines
119119 * if RFC 3831 IPv6-over-Fibre Channel is ever implemented it may
120120 * also need a pad of 2.
121121 */
122−static int ndisc_addr_option_pad(unsigned short type)
122+static inline int ndisc_addr_option_pad(unsigned short type)
123123 {
124124 switch (type) {
125125 case ARPHRD_INFINIBAND: return 2;
include/net/nfc/hci.h+1−1
@@ -59,7 +59,7 @@ struct nfc_hci_ops { · 58 unmodified lines
5959 struct nfc_target *target);
6060 int (*event_received)(struct nfc_hci_dev *hdev, u8 gate, u8 event,
6161 struct sk_buff *skb);
62− int (*fw_upload)(struct nfc_hci_dev *hdev, const char *firmware_name);
62+ int (*fw_download)(struct nfc_hci_dev *hdev, const char *firmware_name);
6363 int (*discover_se)(struct nfc_hci_dev *dev);
6464 int (*enable_se)(struct nfc_hci_dev *dev, u32 se_idx);
6565 int (*disable_se)(struct nfc_hci_dev *dev, u32 se_idx);
include/net/nfc/nfc.h+2−2
@@ -68,7 +68,7 @@ struct nfc_ops { · 67 unmodified lines
6868 void *cb_context);
6969 int (*tm_send)(struct nfc_dev *dev, struct sk_buff *skb);
7070 int (*check_presence)(struct nfc_dev *dev, struct nfc_target *target);
71− int (*fw_upload)(struct nfc_dev *dev, const char *firmware_name);
71+ int (*fw_download)(struct nfc_dev *dev, const char *firmware_name);
7272
7373 /* Secure Element API */
7474 int (*discover_se)(struct nfc_dev *dev);
@@ -127,7 +127,7 @@ struct nfc_dev { · 52 unmodified lines
127127 int targets_generation;
128128 struct device dev;
129129 bool dev_up;
130− bool fw_upload_in_progress;
130+ bool fw_download_in_progress;
131131 u8 rf_mode;
132132 bool polling;
133133 struct nfc_target *active_target;
include/net/sock.h+1−1
@@ -327,7 +327,7 @@ struct sock { · 326 unmodified lines
327327 #ifdef CONFIG_RPS
328328 __u32 sk_rxhash;
329329 #endif
330−#ifdef CONFIG_NET_LL_RX_POLL
330+#ifdef CONFIG_NET_RX_BUSY_POLL
331331 unsigned int sk_napi_id;
332332 unsigned int sk_ll_usec;
333333 #endif
include/uapi/linux/nfc.h+3−3
@@ -69,8 +69,8 @@ · 68 unmodified lines
6969 * starting a poll from a device which has a secure element enabled means
7070 * we want to do SE based card emulation.
7171 * @NFC_CMD_DISABLE_SE: Disable the physical link to a specific secure element.
72− * @NFC_CMD_FW_UPLOAD: Request to Load/flash firmware, or event to inform that
73− * some firmware was loaded
72+ * @NFC_CMD_FW_DOWNLOAD: Request to Load/flash firmware, or event to inform
73+ * that some firmware was loaded
7474 */
7575 enum nfc_commands {
7676 NFC_CMD_UNSPEC,
@@ -94,7 +94,7 @@ enum nfc_commands { · 17 unmodified lines
9494 NFC_CMD_DISABLE_SE,
9595 NFC_CMD_LLC_SDREQ,
9696 NFC_EVENT_LLC_SDRES,
97− NFC_CMD_FW_UPLOAD,
97+ NFC_CMD_FW_DOWNLOAD,
9898 NFC_EVENT_SE_ADDED,
9999 NFC_EVENT_SE_REMOVED,
100100 /* private: internal use only */
net/Kconfig+1−1
@@ -244,7 +244,7 @@ config NETPRIO_CGROUP · 243 unmodified lines
244244 Cgroup subsystem for use in assigning processes to network priorities on
245245 a per-interface basis
246246
247−config NET_LL_RX_POLL
247+config NET_RX_BUSY_POLL
248248 boolean
249249 default y
250250
net/bluetooth/hci_core.c+17−9
@@ -513,7 +513,10 @@ static void hci_init2_req(struct hci_request *req, unsigned long opt) · 512 unmodified lines
513513
514514 hci_setup_event_mask(req);
515515
516− if (hdev->hci_ver > BLUETOOTH_VER_1_1)
516+ /* AVM Berlin (31), aka "BlueFRITZ!", doesn't support the read
517+ * local supported commands HCI command.
518+ */
519+ if (hdev->manufacturer != 31 && hdev->hci_ver > BLUETOOTH_VER_1_1)
517520 hci_req_add(req, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
518521
519522 if (lmp_ssp_capable(hdev)) {
@@ -2165,10 +2168,6 @@ int hci_register_dev(struct hci_dev *hdev) · 1645 unmodified lines
21652168
21662169 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
21672170
2168− write_lock(&hci_dev_list_lock);
2169− list_add(&hdev->list, &hci_dev_list);
2170− write_unlock(&hci_dev_list_lock);
2171−
21722171 hdev->workqueue = alloc_workqueue("%s", WQ_HIGHPRI | WQ_UNBOUND |
21732172 WQ_MEM_RECLAIM, 1, hdev->name);
21742173 if (!hdev->workqueue) {
@@ -2203,6 +2202,10 @@ int hci_register_dev(struct hci_dev *hdev) · 28 unmodified lines
22032202 if (hdev->dev_type != HCI_AMP)
22042203 set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
22052204
2205+ write_lock(&hci_dev_list_lock);
2206+ list_add(&hdev->list, &hci_dev_list);
2207+ write_unlock(&hci_dev_list_lock);
2208+
22062209 hci_notify(hdev, HCI_DEV_REG);
22072210 hci_dev_hold(hdev);
22082211
@@ -2215,9 +2218,6 @@ err_wqueue: · 6 unmodified lines
22152218 destroy_workqueue(hdev->req_workqueue);
22162219 err:
22172220 ida_simple_remove(&hci_index_ida, hdev->id);
2218− write_lock(&hci_dev_list_lock);
2219− list_del(&hdev->list);
2220− write_unlock(&hci_dev_list_lock);
22212221
22222222 return error;
22232223 }
@@ -3399,8 +3399,16 @@ void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status) · 1175 unmodified lines
33993399 */
34003400 if (hdev->sent_cmd) {
34013401 req_complete = bt_cb(hdev->sent_cmd)->req.complete;
3402− if (req_complete)
3402+
3403+ if (req_complete) {
3404+ /* We must set the complete callback to NULL to
3405+ * avoid calling the callback more than once if
3406+ * this function gets called again.
3407+ */
3408+ bt_cb(hdev->sent_cmd)->req.complete = NULL;
3409+
34033410 goto call_complete;
3411+ }
34043412 }
34053413
34063414 /* Remove all pending commands belonging to this request */
net/bridge/br_device.c+2−1
@@ -70,7 +70,8 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) · 69 unmodified lines
7070 }
7171
7272 mdst = br_mdb_get(br, skb, vid);
73− if (mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb))
73+ if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) &&
74+ br_multicast_querier_exists(br))
7475 br_multicast_deliver(mdst, skb);
7576 else
7677 br_flood_deliver(br, skb, false);
net/bridge/br_input.c+2−1
@@ -101,7 +101,8 @@ int br_handle_frame_finish(struct sk_buff *skb) · 100 unmodified lines
101101 unicast = false;
102102 } else if (is_multicast_ether_addr(dest)) {
103103 mdst = br_mdb_get(br, skb, vid);
104− if (mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) {
104+ if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) &&
105+ br_multicast_querier_exists(br)) {
105106 if ((mdst && mdst->mglist) ||
106107 br_multicast_is_router(br))
107108 skb2 = skb;
net/bridge/br_multicast.c+30−9
@@ -1014,6 +1014,16 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br, · 1013 unmodified lines
10141014 }
10151015 #endif
10161016
1017+static void br_multicast_update_querier_timer(struct net_bridge *br,
1018+ unsigned long max_delay)
1019+{
1020+ if (!timer_pending(&br->multicast_querier_timer))
1021+ br->multicast_querier_delay_time = jiffies + max_delay;
1022+
1023+ mod_timer(&br->multicast_querier_timer,
1024+ jiffies + br->multicast_querier_interval);
1025+}
1026+
10171027 /*
10181028 * Add port to router_list
10191029 * list is maintained ordered by pointer value
@@ -1064,11 +1074,11 @@ timer: · 44 unmodified lines
10641074
10651075 static void br_multicast_query_received(struct net_bridge *br,
10661076 struct net_bridge_port *port,
1067− int saddr)
1077+ int saddr,
1078+ unsigned long max_delay)
10681079 {
10691080 if (saddr)
1070− mod_timer(&br->multicast_querier_timer,
1071− jiffies + br->multicast_querier_interval);
1081+ br_multicast_update_querier_timer(br, max_delay);
10721082 else if (timer_pending(&br->multicast_querier_timer))
10731083 return;
10741084
@@ -1096,8 +1106,6 @@ static int br_ip4_multicast_query(struct net_bridge *br, · 21 unmodified lines
10961106 (port && port->state == BR_STATE_DISABLED))
10971107 goto out;
10981108
1099− br_multicast_query_received(br, port, !!iph->saddr);
1100−
11011109 group = ih->group;
11021110
11031111 if (skb->len == sizeof(*ih)) {
@@ -1121,6 +1129,8 @@ static int br_ip4_multicast_query(struct net_bridge *br, · 17 unmodified lines
11211129 IGMPV3_MRC(ih3->code) * (HZ / IGMP_TIMER_SCALE) : 1;
11221130 }
11231131
1132+ br_multicast_query_received(br, port, !!iph->saddr, max_delay);
1133+
11241134 if (!group)
11251135 goto out;
11261136
@@ -1176,8 +1186,6 @@ static int br_ip6_multicast_query(struct net_bridge *br, · 49 unmodified lines
11761186 (port && port->state == BR_STATE_DISABLED))
11771187 goto out;
11781188
1179− br_multicast_query_received(br, port, !ipv6_addr_any(&ip6h->saddr));
1180−
11811189 if (skb->len == sizeof(*mld)) {
11821190 if (!pskb_may_pull(skb, sizeof(*mld))) {
11831191 err = -EINVAL;
@@ -1198,6 +1206,9 @@ static int br_ip6_multicast_query(struct net_bridge *br, · 14 unmodified lines
11981206 max_delay = mld2q->mld2q_mrc ? MLDV2_MRC(ntohs(mld2q->mld2q_mrc)) : 1;
11991207 }
12001208
1209+ br_multicast_query_received(br, port, !ipv6_addr_any(&ip6h->saddr),
1210+ max_delay);
1211+
12011212 if (!group)
12021213 goto out;
12031214
@@ -1643,6 +1654,8 @@ void br_multicast_init(struct net_bridge *br) · 439 unmodified lines
16431654 br->multicast_querier_interval = 255 * HZ;
16441655 br->multicast_membership_interval = 260 * HZ;
16451656
1657+ br->multicast_querier_delay_time = 0;
1658+
16461659 spin_lock_init(&br->multicast_lock);
16471660 setup_timer(&br->multicast_router_timer,
16481661 br_multicast_local_router_expired, 0);
@@ -1831,6 +1844,8 @@ unlock: · 182 unmodified lines
18311844
18321845 int br_multicast_set_querier(struct net_bridge *br, unsigned long val)
18331846 {
1847+ unsigned long max_delay;
1848+
18341849 val = !!val;
18351850
18361851 spin_lock_bh(&br->multicast_lock);
@@ -1838,8 +1853,14 @@ int br_multicast_set_querier(struct net_bridge *br, unsigned long val) · 1 unmodified line
18381853 goto unlock;
18391854
18401855 br->multicast_querier = val;
1841− if (val)
1842− br_multicast_start_querier(br);
1856+ if (!val)
1857+ goto unlock;
1858+
1859+ max_delay = br->multicast_query_response_interval;
1860+ if (!timer_pending(&br->multicast_querier_timer))
1861+ br->multicast_querier_delay_time = jiffies + max_delay;
1862+
1863+ br_multicast_start_querier(br);
18431864
18441865 unlock:
18451866 spin_unlock_bh(&br->multicast_lock);
net/bridge/br_private.h+12−0
@@ -267,6 +267,7 @@ struct net_bridge · 266 unmodified lines
267267 unsigned long multicast_query_interval;
268268 unsigned long multicast_query_response_interval;
269269 unsigned long multicast_startup_query_interval;
270+ unsigned long multicast_querier_delay_time;
270271
271272 spinlock_t multicast_lock;
272273 struct net_bridge_mdb_htable __rcu *mdb;
@@ -501,6 +502,13 @@ static inline bool br_multicast_is_router(struct net_bridge *br) · 228 unmodified lines
501502 (br->multicast_router == 1 &&
502503 timer_pending(&br->multicast_router_timer));
503504 }
505+
506+static inline bool br_multicast_querier_exists(struct net_bridge *br)
507+{
508+ return time_is_before_jiffies(br->multicast_querier_delay_time) &&
509+ (br->multicast_querier ||
510+ timer_pending(&br->multicast_querier_timer));
511+}
504512 #else
505513 static inline int br_multicast_rcv(struct net_bridge *br,
506514 struct net_bridge_port *port,
@@ -557,6 +565,10 @@ static inline bool br_multicast_is_router(struct net_bridge *br) · 50 unmodified lines
557565 {
558566 return 0;
559567 }
568+static inline bool br_multicast_querier_exists(struct net_bridge *br)
569+{
570+ return false;
571+}
560572 static inline void br_mdb_init(void)
561573 {
562574 }
net/core/skbuff.c+1−1
@@ -740,7 +740,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old) · 739 unmodified lines
740740
741741 skb_copy_secmark(new, old);
742742
743−#ifdef CONFIG_NET_LL_RX_POLL
743+#ifdef CONFIG_NET_RX_BUSY_POLL
744744 new->napi_id = old->napi_id;
745745 #endif
746746 }
net/core/sock.c+3−3
@@ -900,7 +900,7 @@ set_rcvbuf: · 899 unmodified lines
900900 sock_valbool_flag(sk, SOCK_SELECT_ERR_QUEUE, valbool);
901901 break;
902902
903−#ifdef CONFIG_NET_LL_RX_POLL
903+#ifdef CONFIG_NET_RX_BUSY_POLL
904904 case SO_BUSY_POLL:
905905 /* allow unprivileged users to decrease the value */
906906 if ((val > sk->sk_ll_usec) && !capable(CAP_NET_ADMIN))
@@ -1170,7 +1170,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, · 263 unmodified lines
11701170 v.val = sock_flag(sk, SOCK_SELECT_ERR_QUEUE);
11711171 break;
11721172
1173−#ifdef CONFIG_NET_LL_RX_POLL
1173+#ifdef CONFIG_NET_RX_BUSY_POLL
11741174 case SO_BUSY_POLL:
11751175 v.val = sk->sk_ll_usec;
11761176 break;
@@ -2292,7 +2292,7 @@ void sock_init_data(struct socket *sock, struct sock *sk) · 1115 unmodified lines
22922292
22932293 sk->sk_stamp = ktime_set(-1L, 0);
22942294
2295−#ifdef CONFIG_NET_LL_RX_POLL
2295+#ifdef CONFIG_NET_RX_BUSY_POLL
22962296 sk->sk_napi_id = 0;
22972297 sk->sk_ll_usec = sysctl_net_busy_read;
22982298 #endif
net/core/sysctl_net_core.c+6−2
@@ -21,7 +21,9 @@ · 20 unmodified lines
2121 #include <net/net_ratelimit.h>
2222 #include <net/busy_poll.h>
2323
24+static int zero = 0;
2425 static int one = 1;
26+static int ushort_max = USHRT_MAX;
2527
2628 #ifdef CONFIG_RPS
2729 static int rps_sock_flow_sysctl(struct ctl_table *table, int write,
@@ -298,7 +300,7 @@ static struct ctl_table net_core_table[] = { · 270 unmodified lines
298300 .proc_handler = flow_limit_table_len_sysctl
299301 },
300302 #endif /* CONFIG_NET_FLOW_LIMIT */
301−#ifdef CONFIG_NET_LL_RX_POLL
303+#ifdef CONFIG_NET_RX_BUSY_POLL
302304 {
303305 .procname = "busy_poll",
304306 .data = &sysctl_net_busy_poll,
@@ -339,7 +341,9 @@ static struct ctl_table netns_core_table[] = { · 34 unmodified lines
339341 .data = &init_net.core.sysctl_somaxconn,
340342 .maxlen = sizeof(int),
341343 .mode = 0644,
342− .proc_handler = proc_dointvec
344+ .extra1 = &zero,
345+ .extra2 = &ushort_max,
346+ .proc_handler = proc_dointvec_minmax
343347 },
344348 { }
345349 };
net/ipv4/devinet.c+3−1
@@ -772,7 +772,7 @@ static struct in_ifaddr *rtm_to_ifaddr(struct net *net, struct nlmsghdr *nlh, · 771 unmodified lines
772772 ci = nla_data(tb[IFA_CACHEINFO]);
773773 if (!ci->ifa_valid || ci->ifa_prefered > ci->ifa_valid) {
774774 err = -EINVAL;
775− goto errout;
775+ goto errout_free;
776776 }
777777 *pvalid_lft = ci->ifa_valid;
778778 *pprefered_lft = ci->ifa_prefered;
@@ -780,6 +780,8 @@ static struct in_ifaddr *rtm_to_ifaddr(struct net *net, struct nlmsghdr *nlh, · 1 unmodified line
780780
781781 return ifa;
782782
783+errout_free:
784+ inet_free_ifa(ifa);
783785 errout:
784786 return ERR_PTR(err);
785787 }
net/ipv6/addrconf.c+22−21
@@ -813,8 +813,9 @@ static u32 inet6_addr_hash(const struct in6_addr *addr) · 812 unmodified lines
813813 /* On success it returns ifp with increased reference count */
814814
815815 static struct inet6_ifaddr *
816−ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr, int pfxlen,
817− int scope, u32 flags)
816+ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
817+ const struct in6_addr *peer_addr, int pfxlen,
818+ int scope, u32 flags, u32 valid_lft, u32 prefered_lft)
818819 {
819820 struct inet6_ifaddr *ifa = NULL;
820821 struct rt6_info *rt;
@@ -863,6 +864,8 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr, int pfxlen, · 42 unmodified lines
863864 }
864865
865866 ifa->addr = *addr;
867+ if (peer_addr)
868+ ifa->peer_addr = *peer_addr;
866869
867870 spin_lock_init(&ifa->lock);
868871 spin_lock_init(&ifa->state_lock);
@@ -872,6 +875,8 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr, int pfxlen, · 3 unmodified lines
872875 ifa->scope = scope;
873876 ifa->prefix_len = pfxlen;
874877 ifa->flags = flags | IFA_F_TENTATIVE;
878+ ifa->valid_lft = valid_lft;
879+ ifa->prefered_lft = prefered_lft;
875880 ifa->cstamp = ifa->tstamp = jiffies;
876881 ifa->tokenized = false;
877882
@@ -1123,8 +1128,9 @@ retry: · 245 unmodified lines
11231128
11241129 ift = !max_addresses ||
11251130 ipv6_count_addresses(idev) < max_addresses ?
1126− ipv6_add_addr(idev, &addr, tmp_plen, ipv6_addr_scope(&addr),
1127− addr_flags) : NULL;
1131+ ipv6_add_addr(idev, &addr, NULL, tmp_plen,
1132+ ipv6_addr_scope(&addr), addr_flags,
1133+ tmp_valid_lft, tmp_prefered_lft) : NULL;
11281134 if (IS_ERR_OR_NULL(ift)) {
11291135 in6_ifa_put(ifp);
11301136 in6_dev_put(idev);
@@ -1136,8 +1142,6 @@ retry: · 5 unmodified lines
11361142
11371143 spin_lock_bh(&ift->lock);
11381144 ift->ifpub = ifp;
1139− ift->valid_lft = tmp_valid_lft;
1140− ift->prefered_lft = tmp_prefered_lft;
11411145 ift->cstamp = now;
11421146 ift->tstamp = tmp_tstamp;
11431147 spin_unlock_bh(&ift->lock);
@@ -2179,16 +2183,19 @@ ok: · 1035 unmodified lines
21792183 */
21802184 if (!max_addresses ||
21812185 ipv6_count_addresses(in6_dev) < max_addresses)
2182− ifp = ipv6_add_addr(in6_dev, &addr, pinfo->prefix_len,
2186+ ifp = ipv6_add_addr(in6_dev, &addr, NULL,
2187+ pinfo->prefix_len,
21832188 addr_type&IPV6_ADDR_SCOPE_MASK,
2184− addr_flags);
2189+ addr_flags, valid_lft,
2190+ prefered_lft);
21852191
21862192 if (IS_ERR_OR_NULL(ifp)) {
21872193 in6_dev_put(in6_dev);
21882194 return;
21892195 }
21902196
2191− update_lft = create = 1;
2197+ update_lft = 0;
2198+ create = 1;
21922199 ifp->cstamp = jiffies;
21932200 ifp->tokenized = tokenized;
21942201 addrconf_dad_start(ifp);
@@ -2209,7 +2216,7 @@ ok: · 14 unmodified lines
22092216 stored_lft = ifp->valid_lft - (now - ifp->tstamp) / HZ;
22102217 else
22112218 stored_lft = 0;
2212− if (!update_lft && stored_lft) {
2219+ if (!update_lft && !create && stored_lft) {
22132220 if (valid_lft > MIN_VALID_LIFETIME ||
22142221 valid_lft > stored_lft)
22152222 update_lft = 1;
@@ -2455,17 +2462,10 @@ static int inet6_addr_add(struct net *net, int ifindex, const struct in6_addr *p · 239 unmodified lines
24552462 prefered_lft = timeout;
24562463 }
24572464
2458− ifp = ipv6_add_addr(idev, pfx, plen, scope, ifa_flags);
2465+ ifp = ipv6_add_addr(idev, pfx, peer_pfx, plen, scope, ifa_flags,
2466+ valid_lft, prefered_lft);
24592467
24602468 if (!IS_ERR(ifp)) {
2461− spin_lock_bh(&ifp->lock);
2462− ifp->valid_lft = valid_lft;
2463− ifp->prefered_lft = prefered_lft;
2464− ifp->tstamp = jiffies;
2465− if (peer_pfx)
2466− ifp->peer_addr = *peer_pfx;
2467− spin_unlock_bh(&ifp->lock);
2468−
24692469 addrconf_prefix_route(&ifp->addr, ifp->prefix_len, dev,
24702470 expires, flags);
24712471 /*
@@ -2557,7 +2557,8 @@ static void add_addr(struct inet6_dev *idev, const struct in6_addr *addr, · 85 unmodified lines
25572557 {
25582558 struct inet6_ifaddr *ifp;
25592559
2560− ifp = ipv6_add_addr(idev, addr, plen, scope, IFA_F_PERMANENT);
2560+ ifp = ipv6_add_addr(idev, addr, NULL, plen,
2561+ scope, IFA_F_PERMANENT, 0, 0);
25612562 if (!IS_ERR(ifp)) {
25622563 spin_lock_bh(&ifp->lock);
25632564 ifp->flags &= ~IFA_F_TENTATIVE;
@@ -2683,7 +2684,7 @@ static void addrconf_add_linklocal(struct inet6_dev *idev, const struct in6_addr · 119 unmodified lines
26832684 #endif
26842685
26852686
2686− ifp = ipv6_add_addr(idev, addr, 64, IFA_LINK, addr_flags);
2687+ ifp = ipv6_add_addr(idev, addr, NULL, 64, IFA_LINK, addr_flags, 0, 0);
26872688 if (!IS_ERR(ifp)) {
26882689 addrconf_prefix_route(&ifp->addr, ifp->prefix_len, idev->dev, 0, 0);
26892690 addrconf_dad_start(ifp);
net/ipv6/ip6_fib.c+13−12
@@ -1632,27 +1632,28 @@ static int fib6_age(struct rt6_info *rt, void *arg) · 1631 unmodified lines
16321632
16331633 static DEFINE_SPINLOCK(fib6_gc_lock);
16341634
1635−void fib6_run_gc(unsigned long expires, struct net *net)
1635+void fib6_run_gc(unsigned long expires, struct net *net, bool force)
16361636 {
1637− if (expires != ~0UL) {
1637+ unsigned long now;
1638+
1639+ if (force) {
16381640 spin_lock_bh(&fib6_gc_lock);
1639− gc_args.timeout = expires ? (int)expires :
1640− net->ipv6.sysctl.ip6_rt_gc_interval;
1641− } else {
1642− if (!spin_trylock_bh(&fib6_gc_lock)) {
1643− mod_timer(&net->ipv6.ip6_fib_timer, jiffies + HZ);
1644− return;
1645− }
1646− gc_args.timeout = net->ipv6.sysctl.ip6_rt_gc_interval;
1641+ } else if (!spin_trylock_bh(&fib6_gc_lock)) {
1642+ mod_timer(&net->ipv6.ip6_fib_timer, jiffies + HZ);
1643+ return;
16471644 }
1645+ gc_args.timeout = expires ? (int)expires :
1646+ net->ipv6.sysctl.ip6_rt_gc_interval;
16481647
16491648 gc_args.more = icmp6_dst_gc();
16501649
16511650 fib6_clean_all(net, fib6_age, 0, NULL);
1651+ now = jiffies;
1652+ net->ipv6.ip6_rt_last_gc = now;
16521653
16531654 if (gc_args.more)
16541655 mod_timer(&net->ipv6.ip6_fib_timer,
1655− round_jiffies(jiffies
1656+ round_jiffies(now
16561657 + net->ipv6.sysctl.ip6_rt_gc_interval));
16571658 else
16581659 del_timer(&net->ipv6.ip6_fib_timer);
@@ -1661,7 +1662,7 @@ void fib6_run_gc(unsigned long expires, struct net *net) · 2 unmodified lines
16611662
16621663 static void fib6_gc_timer_cb(unsigned long arg)
16631664 {
1664− fib6_run_gc(0, (struct net *)arg);
1665+ fib6_run_gc(0, (struct net *)arg, true);
16651666 }
16661667
16671668 static int __net_init fib6_net_init(struct net *net)
net/ipv6/ndisc.c+2−2
@@ -1576,7 +1576,7 @@ static int ndisc_netdev_event(struct notifier_block *this, unsigned long event, · 1575 unmodified lines
15761576 switch (event) {
15771577 case NETDEV_CHANGEADDR:
15781578 neigh_changeaddr(&nd_tbl, dev);
1579− fib6_run_gc(~0UL, net);
1579+ fib6_run_gc(0, net, false);
15801580 idev = in6_dev_get(dev);
15811581 if (!idev)
15821582 break;
@@ -1586,7 +1586,7 @@ static int ndisc_netdev_event(struct notifier_block *this, unsigned long event, · 3 unmodified lines
15861586 break;
15871587 case NETDEV_DOWN:
15881588 neigh_ifdown(&nd_tbl, dev);
1589− fib6_run_gc(~0UL, net);
1589+ fib6_run_gc(0, net, false);
15901590 break;
15911591 case NETDEV_NOTIFY_PEERS:
15921592 ndisc_send_unsol_na(dev);
net/ipv6/route.c+3−5
@@ -1311,7 +1311,6 @@ static void icmp6_clean_all(int (*func)(struct rt6_info *rt, void *arg), · 1310 unmodified lines
13111311
13121312 static int ip6_dst_gc(struct dst_ops *ops)
13131313 {
1314− unsigned long now = jiffies;
13151314 struct net *net = container_of(ops, struct net, ipv6.ip6_dst_ops);
13161315 int rt_min_interval = net->ipv6.sysctl.ip6_rt_gc_min_interval;
13171316 int rt_max_size = net->ipv6.sysctl.ip6_rt_max_size;
@@ -1321,13 +1320,12 @@ static int ip6_dst_gc(struct dst_ops *ops) · 3 unmodified lines
13211320 int entries;
13221321
13231322 entries = dst_entries_get_fast(ops);
1324− if (time_after(rt_last_gc + rt_min_interval, now) &&
1323+ if (time_after(rt_last_gc + rt_min_interval, jiffies) &&
13251324 entries <= rt_max_size)
13261325 goto out;
13271326
13281327 net->ipv6.ip6_rt_gc_expire++;
1329− fib6_run_gc(net->ipv6.ip6_rt_gc_expire, net);
1330− net->ipv6.ip6_rt_last_gc = now;
1328+ fib6_run_gc(net->ipv6.ip6_rt_gc_expire, net, entries > rt_max_size);
13311329 entries = dst_entries_get_slow(ops);
13321330 if (entries < ops->gc_thresh)
13331331 net->ipv6.ip6_rt_gc_expire = rt_gc_timeout>>1;
@@ -2827,7 +2825,7 @@ int ipv6_sysctl_rtcache_flush(struct ctl_table *ctl, int write, · 1493 unmodified lines
28272825 net = (struct net *)ctl->extra1;
28282826 delay = net->ipv6.sysctl.flush_delay;
28292827 proc_dointvec(ctl, write, buffer, lenp, ppos);
2830− fib6_run_gc(delay <= 0 ? ~0UL : (unsigned long)delay, net);
2828+ fib6_run_gc(delay <= 0 ? 0 : (unsigned long)delay, net, delay > 0);
28312829 return 0;
28322830 }
28332831
net/mac80211/mesh_ps.c+4−0
@@ -229,6 +229,10 @@ void ieee80211_mps_sta_status_update(struct sta_info *sta) · 228 unmodified lines
229229 enum nl80211_mesh_power_mode pm;
230230 bool do_buffer;
231231
232+ /* For non-assoc STA, prevent buffering or frame transmission */
233+ if (sta->sta_state < IEEE80211_STA_ASSOC)
234+ return;
235+
232236 /*
233237 * use peer-specific power mode if peering is established and the
234238 * peer's power mode is known
net/mac80211/pm.c+5−2
@@ -99,10 +99,13 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) · 98 unmodified lines
9999 }
100100 mutex_unlock(&local->sta_mtx);
101101
102− /* remove all interfaces */
102+ /* remove all interfaces that were created in the driver */
103103 list_for_each_entry(sdata, &local->interfaces, list) {
104− if (!ieee80211_sdata_running(sdata))
104+ if (!ieee80211_sdata_running(sdata) ||
105+ sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
106+ sdata->vif.type == NL80211_IFTYPE_MONITOR)
105107 continue;
108+
106109 drv_remove_interface(local, sdata);
107110 }
108111
net/netlabel/netlabel_cipso_v4.c+2−2
@@ -691,8 +691,8 @@ static int netlbl_cipsov4_remove_cb(struct netlbl_dom_map *entry, void *arg) · 690 unmodified lines
691691 {
692692 struct netlbl_domhsh_walk_arg *cb_arg = arg;
693693
694− if (entry->type == NETLBL_NLTYPE_CIPSOV4 &&
695− entry->type_def.cipsov4->doi == cb_arg->doi)
694+ if (entry->def.type == NETLBL_NLTYPE_CIPSOV4 &&
695+ entry->def.cipso->doi == cb_arg->doi)
696696 return netlbl_domhsh_remove_entry(entry, cb_arg->audit_info);
697697
698698 return 0;
net/netlabel/netlabel_domainhash.c+49−55
@@ -84,15 +84,15 @@ static void netlbl_domhsh_free_entry(struct rcu_head *entry) · 83 unmodified lines
8484 #endif /* IPv6 */
8585
8686 ptr = container_of(entry, struct netlbl_dom_map, rcu);
87− if (ptr->type == NETLBL_NLTYPE_ADDRSELECT) {
87+ if (ptr->def.type == NETLBL_NLTYPE_ADDRSELECT) {
8888 netlbl_af4list_foreach_safe(iter4, tmp4,
89− &ptr->type_def.addrsel->list4) {
89+ &ptr->def.addrsel->list4) {
9090 netlbl_af4list_remove_entry(iter4);
9191 kfree(netlbl_domhsh_addr4_entry(iter4));
9292 }
9393 #if IS_ENABLED(CONFIG_IPV6)
9494 netlbl_af6list_foreach_safe(iter6, tmp6,
95− &ptr->type_def.addrsel->list6) {
95+ &ptr->def.addrsel->list6) {
9696 netlbl_af6list_remove_entry(iter6);
9797 kfree(netlbl_domhsh_addr6_entry(iter6));
9898 }
@@ -213,21 +213,21 @@ static void netlbl_domhsh_audit_add(struct netlbl_dom_map *entry, · 114 unmodified lines
213213 if (addr4 != NULL) {
214214 struct netlbl_domaddr4_map *map4;
215215 map4 = netlbl_domhsh_addr4_entry(addr4);
216− type = map4->type;
217− cipsov4 = map4->type_def.cipsov4;
216+ type = map4->def.type;
217+ cipsov4 = map4->def.cipso;
218218 netlbl_af4list_audit_addr(audit_buf, 0, NULL,
219219 addr4->addr, addr4->mask);
220220 #if IS_ENABLED(CONFIG_IPV6)
221221 } else if (addr6 != NULL) {
222222 struct netlbl_domaddr6_map *map6;
223223 map6 = netlbl_domhsh_addr6_entry(addr6);
224− type = map6->type;
224+ type = map6->def.type;
225225 netlbl_af6list_audit_addr(audit_buf, 0, NULL,
226226 &addr6->addr, &addr6->mask);
227227 #endif /* IPv6 */
228228 } else {
229− type = entry->type;
230− cipsov4 = entry->type_def.cipsov4;
229+ type = entry->def.type;
230+ cipsov4 = entry->def.cipso;
231231 }
232232 switch (type) {
233233 case NETLBL_NLTYPE_UNLABELED:
@@ -265,26 +265,25 @@ static int netlbl_domhsh_validate(const struct netlbl_dom_map *entry) · 31 unmodified lines
265265 if (entry == NULL)
266266 return -EINVAL;
267267
268− switch (entry->type) {
268+ switch (entry->def.type) {
269269 case NETLBL_NLTYPE_UNLABELED:
270− if (entry->type_def.cipsov4 != NULL ||
271− entry->type_def.addrsel != NULL)
270+ if (entry->def.cipso != NULL || entry->def.addrsel != NULL)
272271 return -EINVAL;
273272 break;
274273 case NETLBL_NLTYPE_CIPSOV4:
275− if (entry->type_def.cipsov4 == NULL)
274+ if (entry->def.cipso == NULL)
276275 return -EINVAL;
277276 break;
278277 case NETLBL_NLTYPE_ADDRSELECT:
279− netlbl_af4list_foreach(iter4, &entry->type_def.addrsel->list4) {
278+ netlbl_af4list_foreach(iter4, &entry->def.addrsel->list4) {
280279 map4 = netlbl_domhsh_addr4_entry(iter4);
281− switch (map4->type) {
280+ switch (map4->def.type) {
282281 case NETLBL_NLTYPE_UNLABELED:
283− if (map4->type_def.cipsov4 != NULL)
282+ if (map4->def.cipso != NULL)
284283 return -EINVAL;
285284 break;
286285 case NETLBL_NLTYPE_CIPSOV4:
287− if (map4->type_def.cipsov4 == NULL)
286+ if (map4->def.cipso == NULL)
288287 return -EINVAL;
289288 break;
290289 default:
@@ -292,9 +291,9 @@ static int netlbl_domhsh_validate(const struct netlbl_dom_map *entry) · 1 unmodified line
292291 }
293292 }
294293 #if IS_ENABLED(CONFIG_IPV6)
295− netlbl_af6list_foreach(iter6, &entry->type_def.addrsel->list6) {
294+ netlbl_af6list_foreach(iter6, &entry->def.addrsel->list6) {
296295 map6 = netlbl_domhsh_addr6_entry(iter6);
297− switch (map6->type) {
296+ switch (map6->def.type) {
298297 case NETLBL_NLTYPE_UNLABELED:
299298 break;
300299 default:
@@ -402,32 +401,31 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry, · 101 unmodified lines
402401 rcu_assign_pointer(netlbl_domhsh_def, entry);
403402 }
404403
405− if (entry->type == NETLBL_NLTYPE_ADDRSELECT) {
404+ if (entry->def.type == NETLBL_NLTYPE_ADDRSELECT) {
406405 netlbl_af4list_foreach_rcu(iter4,
407− &entry->type_def.addrsel->list4)
406+ &entry->def.addrsel->list4)
408407 netlbl_domhsh_audit_add(entry, iter4, NULL,
409408 ret_val, audit_info);
410409 #if IS_ENABLED(CONFIG_IPV6)
411410 netlbl_af6list_foreach_rcu(iter6,
412− &entry->type_def.addrsel->list6)
411+ &entry->def.addrsel->list6)
413412 netlbl_domhsh_audit_add(entry, NULL, iter6,
414413 ret_val, audit_info);
415414 #endif /* IPv6 */
416415 } else
417416 netlbl_domhsh_audit_add(entry, NULL, NULL,
418417 ret_val, audit_info);
419− } else if (entry_old->type == NETLBL_NLTYPE_ADDRSELECT &&
420− entry->type == NETLBL_NLTYPE_ADDRSELECT) {
418+ } else if (entry_old->def.type == NETLBL_NLTYPE_ADDRSELECT &&
419+ entry->def.type == NETLBL_NLTYPE_ADDRSELECT) {
421420 struct list_head *old_list4;
422421 struct list_head *old_list6;
423422
424− old_list4 = &entry_old->type_def.addrsel->list4;
425− old_list6 = &entry_old->type_def.addrsel->list6;
423+ old_list4 = &entry_old->def.addrsel->list4;
424+ old_list6 = &entry_old->def.addrsel->list6;
426425
427426 /* we only allow the addition of address selectors if all of
428427 * the selectors do not exist in the existing domain map */
429− netlbl_af4list_foreach_rcu(iter4,
430− &entry->type_def.addrsel->list4)
428+ netlbl_af4list_foreach_rcu(iter4, &entry->def.addrsel->list4)
431429 if (netlbl_af4list_search_exact(iter4->addr,
432430 iter4->mask,
433431 old_list4)) {
@@ -435,8 +433,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry, · 1 unmodified line
435433 goto add_return;
436434 }
437435 #if IS_ENABLED(CONFIG_IPV6)
438− netlbl_af6list_foreach_rcu(iter6,
439− &entry->type_def.addrsel->list6)
436+ netlbl_af6list_foreach_rcu(iter6, &entry->def.addrsel->list6)
440437 if (netlbl_af6list_search_exact(&iter6->addr,
441438 &iter6->mask,
442439 old_list6)) {
@@ -446,7 +443,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry, · 3 unmodified lines
446443 #endif /* IPv6 */
447444
448445 netlbl_af4list_foreach_safe(iter4, tmp4,
449− &entry->type_def.addrsel->list4) {
446+ &entry->def.addrsel->list4) {
450447 netlbl_af4list_remove_entry(iter4);
451448 iter4->valid = 1;
452449 ret_val = netlbl_af4list_add(iter4, old_list4);
@@ -457,7 +454,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry, · 4 unmodified lines
457454 }
458455 #if IS_ENABLED(CONFIG_IPV6)
459456 netlbl_af6list_foreach_safe(iter6, tmp6,
460− &entry->type_def.addrsel->list6) {
457+ &entry->def.addrsel->list6) {
461458 netlbl_af6list_remove_entry(iter6);
462459 iter6->valid = 1;
463460 ret_val = netlbl_af6list_add(iter6, old_list6);
@@ -538,18 +535,18 @@ int netlbl_domhsh_remove_entry(struct netlbl_dom_map *entry, · 74 unmodified lines
538535 struct netlbl_af4list *iter4;
539536 struct netlbl_domaddr4_map *map4;
540537
541− switch (entry->type) {
538+ switch (entry->def.type) {
542539 case NETLBL_NLTYPE_ADDRSELECT:
543540 netlbl_af4list_foreach_rcu(iter4,
544− &entry->type_def.addrsel->list4) {
541+ &entry->def.addrsel->list4) {
545542 map4 = netlbl_domhsh_addr4_entry(iter4);
546− cipso_v4_doi_putdef(map4->type_def.cipsov4);
543+ cipso_v4_doi_putdef(map4->def.cipso);
547544 }
548545 /* no need to check the IPv6 list since we currently
549546 * support only unlabeled protocols for IPv6 */
550547 break;
551548 case NETLBL_NLTYPE_CIPSOV4:
552− cipso_v4_doi_putdef(entry->type_def.cipsov4);
549+ cipso_v4_doi_putdef(entry->def.cipso);
553550 break;
554551 }
555552 call_rcu(&entry->rcu, netlbl_domhsh_free_entry);
@@ -590,20 +587,21 @@ int netlbl_domhsh_remove_af4(const char *domain, · 34 unmodified lines
590587 entry_map = netlbl_domhsh_search(domain);
591588 else
592589 entry_map = netlbl_domhsh_search_def(domain);
593− if (entry_map == NULL || entry_map->type != NETLBL_NLTYPE_ADDRSELECT)
590+ if (entry_map == NULL ||
591+ entry_map->def.type != NETLBL_NLTYPE_ADDRSELECT)
594592 goto remove_af4_failure;
595593
596594 spin_lock(&netlbl_domhsh_lock);
597595 entry_addr = netlbl_af4list_remove(addr->s_addr, mask->s_addr,
598− &entry_map->type_def.addrsel->list4);
596+ &entry_map->def.addrsel->list4);
599597 spin_unlock(&netlbl_domhsh_lock);
600598
601599 if (entry_addr == NULL)
602600 goto remove_af4_failure;
603− netlbl_af4list_foreach_rcu(iter4, &entry_map->type_def.addrsel->list4)
601+ netlbl_af4list_foreach_rcu(iter4, &entry_map->def.addrsel->list4)
604602 goto remove_af4_single_addr;
605603 #if IS_ENABLED(CONFIG_IPV6)
606− netlbl_af6list_foreach_rcu(iter6, &entry_map->type_def.addrsel->list6)
604+ netlbl_af6list_foreach_rcu(iter6, &entry_map->def.addrsel->list6)
607605 goto remove_af4_single_addr;
608606 #endif /* IPv6 */
609607 /* the domain mapping is empty so remove it from the mapping table */
@@ -616,7 +614,7 @@ remove_af4_single_addr: · 6 unmodified lines
616614 * shouldn't be a problem */
617615 synchronize_rcu();
618616 entry = netlbl_domhsh_addr4_entry(entry_addr);
619− cipso_v4_doi_putdef(entry->type_def.cipsov4);
617+ cipso_v4_doi_putdef(entry->def.cipso);
620618 kfree(entry);
621619 return 0;
622620
@@ -693,8 +691,8 @@ struct netlbl_dom_map *netlbl_domhsh_getentry(const char *domain) · 70 unmodified lines
693691 * responsible for ensuring that rcu_read_[un]lock() is called.
694692 *
695693 */
696−struct netlbl_domaddr4_map *netlbl_domhsh_getentry_af4(const char *domain,
697− __be32 addr)
694+struct netlbl_dommap_def *netlbl_domhsh_getentry_af4(const char *domain,
695+ __be32 addr)
698696 {
699697 struct netlbl_dom_map *dom_iter;
700698 struct netlbl_af4list *addr_iter;
@@ -702,15 +700,13 @@ struct netlbl_domaddr4_map *netlbl_domhsh_getentry_af4(const char *domain, · 1 unmodified line
702700 dom_iter = netlbl_domhsh_search_def(domain);
703701 if (dom_iter == NULL)
704702 return NULL;
705− if (dom_iter->type != NETLBL_NLTYPE_ADDRSELECT)
706− return NULL;
707703
708− addr_iter = netlbl_af4list_search(addr,
709− &dom_iter->type_def.addrsel->list4);
704+ if (dom_iter->def.type != NETLBL_NLTYPE_ADDRSELECT)
705+ return &dom_iter->def;
706+ addr_iter = netlbl_af4list_search(addr, &dom_iter->def.addrsel->list4);
710707 if (addr_iter == NULL)
711708 return NULL;
712−
713− return netlbl_domhsh_addr4_entry(addr_iter);
709+ return &(netlbl_domhsh_addr4_entry(addr_iter)->def);
714710 }
715711
716712 #if IS_ENABLED(CONFIG_IPV6)
@@ -725,7 +721,7 @@ struct netlbl_domaddr4_map *netlbl_domhsh_getentry_af4(const char *domain, · 8 unmodified lines
725721 * responsible for ensuring that rcu_read_[un]lock() is called.
726722 *
727723 */
728−struct netlbl_domaddr6_map *netlbl_domhsh_getentry_af6(const char *domain,
724+struct netlbl_dommap_def *netlbl_domhsh_getentry_af6(const char *domain,
729725 const struct in6_addr *addr)
730726 {
731727 struct netlbl_dom_map *dom_iter;
@@ -734,15 +730,13 @@ struct netlbl_domaddr6_map *netlbl_domhsh_getentry_af6(const char *domain, · 2 unmodified lines
734730 dom_iter = netlbl_domhsh_search_def(domain);
735731 if (dom_iter == NULL)
736732 return NULL;
737− if (dom_iter->type != NETLBL_NLTYPE_ADDRSELECT)
738− return NULL;
739733
740− addr_iter = netlbl_af6list_search(addr,
741− &dom_iter->type_def.addrsel->list6);
734+ if (dom_iter->def.type != NETLBL_NLTYPE_ADDRSELECT)
735+ return &dom_iter->def;
736+ addr_iter = netlbl_af6list_search(addr, &dom_iter->def.addrsel->list6);
742737 if (addr_iter == NULL)
743738 return NULL;
744−
745− return netlbl_domhsh_addr6_entry(addr_iter);
739+ return &(netlbl_domhsh_addr6_entry(addr_iter)->def);
746740 }
747741 #endif /* IPv6 */
748742
net/netlabel/netlabel_domainhash.h+22−24
@@ -43,37 +43,35 @@ · 42 unmodified lines
4343 #define NETLBL_DOMHSH_BITSIZE 7
4444
4545 /* Domain mapping definition structures */
46+struct netlbl_domaddr_map {
47+ struct list_head list4;
48+ struct list_head list6;
49+};
50+struct netlbl_dommap_def {
51+ u32 type;
52+ union {
53+ struct netlbl_domaddr_map *addrsel;
54+ struct cipso_v4_doi *cipso;
55+ };
56+};
4657 #define netlbl_domhsh_addr4_entry(iter) \
4758 container_of(iter, struct netlbl_domaddr4_map, list)
4859 struct netlbl_domaddr4_map {
49− u32 type;
50− union {
51− struct cipso_v4_doi *cipsov4;
52− } type_def;
60+ struct netlbl_dommap_def def;
5361
5462 struct netlbl_af4list list;
5563 };
5664 #define netlbl_domhsh_addr6_entry(iter) \
5765 container_of(iter, struct netlbl_domaddr6_map, list)
5866 struct netlbl_domaddr6_map {
59− u32 type;
60−
61− /* NOTE: no 'type_def' union needed at present since we don't currently
62− * support any IPv6 labeling protocols */
67+ struct netlbl_dommap_def def;
6368
6469 struct netlbl_af6list list;
6570 };
66−struct netlbl_domaddr_map {
67− struct list_head list4;
68− struct list_head list6;
69−};
71+
7072 struct netlbl_dom_map {
7173 char *domain;
72− u32 type;
73− union {
74− struct cipso_v4_doi *cipsov4;
75− struct netlbl_domaddr_map *addrsel;
76− } type_def;
74+ struct netlbl_dommap_def def;
7775
7876 u32 valid;
7977 struct list_head list;
@@ -97,16 +95,16 @@ int netlbl_domhsh_remove_af4(const char *domain, · 17 unmodified lines
9795 int netlbl_domhsh_remove(const char *domain, struct netlbl_audit *audit_info);
9896 int netlbl_domhsh_remove_default(struct netlbl_audit *audit_info);
9997 struct netlbl_dom_map *netlbl_domhsh_getentry(const char *domain);
100−struct netlbl_domaddr4_map *netlbl_domhsh_getentry_af4(const char *domain,
101− __be32 addr);
98+struct netlbl_dommap_def *netlbl_domhsh_getentry_af4(const char *domain,
99+ __be32 addr);
100+#if IS_ENABLED(CONFIG_IPV6)
101+struct netlbl_dommap_def *netlbl_domhsh_getentry_af6(const char *domain,
102+ const struct in6_addr *addr);
103+#endif /* IPv6 */
104+
102105 int netlbl_domhsh_walk(u32 *skip_bkt,
103106 u32 *skip_chain,
104107 int (*callback) (struct netlbl_dom_map *entry, void *arg),
105108 void *cb_arg);
106109
107−#if IS_ENABLED(CONFIG_IPV6)
108−struct netlbl_domaddr6_map *netlbl_domhsh_getentry_af6(const char *domain,
109− const struct in6_addr *addr);
110−#endif /* IPv6 */
111−
112110 #endif
net/netlabel/netlabel_kapi.c+35−53
@@ -122,7 +122,7 @@ int netlbl_cfg_unlbl_map_add(const char *domain, · 121 unmodified lines
122122 }
123123
124124 if (addr == NULL && mask == NULL)
125− entry->type = NETLBL_NLTYPE_UNLABELED;
125+ entry->def.type = NETLBL_NLTYPE_UNLABELED;
126126 else if (addr != NULL && mask != NULL) {
127127 addrmap = kzalloc(sizeof(*addrmap), GFP_ATOMIC);
128128 if (addrmap == NULL)
@@ -137,7 +137,7 @@ int netlbl_cfg_unlbl_map_add(const char *domain, · 8 unmodified lines
137137 map4 = kzalloc(sizeof(*map4), GFP_ATOMIC);
138138 if (map4 == NULL)
139139 goto cfg_unlbl_map_add_failure;
140− map4->type = NETLBL_NLTYPE_UNLABELED;
140+ map4->def.type = NETLBL_NLTYPE_UNLABELED;
141141 map4->list.addr = addr4->s_addr & mask4->s_addr;
142142 map4->list.mask = mask4->s_addr;
143143 map4->list.valid = 1;
@@ -154,7 +154,7 @@ int netlbl_cfg_unlbl_map_add(const char *domain, · 10 unmodified lines
154154 map6 = kzalloc(sizeof(*map6), GFP_ATOMIC);
155155 if (map6 == NULL)
156156 goto cfg_unlbl_map_add_failure;
157− map6->type = NETLBL_NLTYPE_UNLABELED;
157+ map6->def.type = NETLBL_NLTYPE_UNLABELED;
158158 map6->list.addr = *addr6;
159159 map6->list.addr.s6_addr32[0] &= mask6->s6_addr32[0];
160160 map6->list.addr.s6_addr32[1] &= mask6->s6_addr32[1];
@@ -174,8 +174,8 @@ int netlbl_cfg_unlbl_map_add(const char *domain, · 13 unmodified lines
174174 break;
175175 }
176176
177− entry->type_def.addrsel = addrmap;
178− entry->type = NETLBL_NLTYPE_ADDRSELECT;
177+ entry->def.addrsel = addrmap;
178+ entry->def.type = NETLBL_NLTYPE_ADDRSELECT;
179179 } else {
180180 ret_val = -EINVAL;
181181 goto cfg_unlbl_map_add_failure;
@@ -355,8 +355,8 @@ int netlbl_cfg_cipsov4_map_add(u32 doi, · 173 unmodified lines
355355 }
356356
357357 if (addr == NULL && mask == NULL) {
358− entry->type_def.cipsov4 = doi_def;
359− entry->type = NETLBL_NLTYPE_CIPSOV4;
358+ entry->def.cipso = doi_def;
359+ entry->def.type = NETLBL_NLTYPE_CIPSOV4;
360360 } else if (addr != NULL && mask != NULL) {
361361 addrmap = kzalloc(sizeof(*addrmap), GFP_ATOMIC);
362362 if (addrmap == NULL)
@@ -367,8 +367,8 @@ int netlbl_cfg_cipsov4_map_add(u32 doi, · 4 unmodified lines
367367 addrinfo = kzalloc(sizeof(*addrinfo), GFP_ATOMIC);
368368 if (addrinfo == NULL)
369369 goto out_addrinfo;
370− addrinfo->type_def.cipsov4 = doi_def;
371− addrinfo->type = NETLBL_NLTYPE_CIPSOV4;
370+ addrinfo->def.cipso = doi_def;
371+ addrinfo->def.type = NETLBL_NLTYPE_CIPSOV4;
372372 addrinfo->list.addr = addr->s_addr & mask->s_addr;
373373 addrinfo->list.mask = mask->s_addr;
374374 addrinfo->list.valid = 1;
@@ -376,8 +376,8 @@ int netlbl_cfg_cipsov4_map_add(u32 doi, · 1 unmodified line
376376 if (ret_val != 0)
377377 goto cfg_cipsov4_map_add_failure;
378378
379− entry->type_def.addrsel = addrmap;
380− entry->type = NETLBL_NLTYPE_ADDRSELECT;
379+ entry->def.addrsel = addrmap;
380+ entry->def.type = NETLBL_NLTYPE_ADDRSELECT;
381381 } else {
382382 ret_val = -EINVAL;
383383 goto out_addrmap;
@@ -657,14 +657,14 @@ int netlbl_sock_setattr(struct sock *sk, · 273 unmodified lines
657657 }
658658 switch (family) {
659659 case AF_INET:
660− switch (dom_entry->type) {
660+ switch (dom_entry->def.type) {
661661 case NETLBL_NLTYPE_ADDRSELECT:
662662 ret_val = -EDESTADDRREQ;
663663 break;
664664 case NETLBL_NLTYPE_CIPSOV4:
665665 ret_val = cipso_v4_sock_setattr(sk,
666− dom_entry->type_def.cipsov4,
667− secattr);
666+ dom_entry->def.cipso,
667+ secattr);
668668 break;
669669 case NETLBL_NLTYPE_UNLABELED:
670670 ret_val = 0;
@@ -754,23 +754,22 @@ int netlbl_conn_setattr(struct sock *sk, · 83 unmodified lines
754754 {
755755 int ret_val;
756756 struct sockaddr_in *addr4;
757− struct netlbl_domaddr4_map *af4_entry;
757+ struct netlbl_dommap_def *entry;
758758
759759 rcu_read_lock();
760760 switch (addr->sa_family) {
761761 case AF_INET:
762762 addr4 = (struct sockaddr_in *)addr;
763− af4_entry = netlbl_domhsh_getentry_af4(secattr->domain,
764− addr4->sin_addr.s_addr);
765− if (af4_entry == NULL) {
763+ entry = netlbl_domhsh_getentry_af4(secattr->domain,
764+ addr4->sin_addr.s_addr);
765+ if (entry == NULL) {
766766 ret_val = -ENOENT;
767767 goto conn_setattr_return;
768768 }
769− switch (af4_entry->type) {
769+ switch (entry->type) {
770770 case NETLBL_NLTYPE_CIPSOV4:
771771 ret_val = cipso_v4_sock_setattr(sk,
772− af4_entry->type_def.cipsov4,
773− secattr);
772+ entry->cipso, secattr);
774773 break;
775774 case NETLBL_NLTYPE_UNLABELED:
776775 /* just delete the protocols we support for right now
@@ -812,36 +811,21 @@ int netlbl_req_setattr(struct request_sock *req, · 35 unmodified lines
812811 const struct netlbl_lsm_secattr *secattr)
813812 {
814813 int ret_val;
815− struct netlbl_dom_map *dom_entry;
816− struct netlbl_domaddr4_map *af4_entry;
817− u32 proto_type;
818− struct cipso_v4_doi *proto_cv4;
814+ struct netlbl_dommap_def *entry;
819815
820816 rcu_read_lock();
821− dom_entry = netlbl_domhsh_getentry(secattr->domain);
822− if (dom_entry == NULL) {
823− ret_val = -ENOENT;
824− goto req_setattr_return;
825− }
826817 switch (req->rsk_ops->family) {
827818 case AF_INET:
828− if (dom_entry->type == NETLBL_NLTYPE_ADDRSELECT) {
829− struct inet_request_sock *req_inet = inet_rsk(req);
830− af4_entry = netlbl_domhsh_getentry_af4(secattr->domain,
831− req_inet->rmt_addr);
832− if (af4_entry == NULL) {
833− ret_val = -ENOENT;
834− goto req_setattr_return;
835− }
836− proto_type = af4_entry->type;
837− proto_cv4 = af4_entry->type_def.cipsov4;
838− } else {
839− proto_type = dom_entry->type;
840− proto_cv4 = dom_entry->type_def.cipsov4;
819+ entry = netlbl_domhsh_getentry_af4(secattr->domain,
820+ inet_rsk(req)->rmt_addr);
821+ if (entry == NULL) {
822+ ret_val = -ENOENT;
823+ goto req_setattr_return;
841824 }
842− switch (proto_type) {
825+ switch (entry->type) {
843826 case NETLBL_NLTYPE_CIPSOV4:
844− ret_val = cipso_v4_req_setattr(req, proto_cv4, secattr);
827+ ret_val = cipso_v4_req_setattr(req,
828+ entry->cipso, secattr);
845829 break;
846830 case NETLBL_NLTYPE_UNLABELED:
847831 /* just delete the protocols we support for right now
@@ -899,23 +883,21 @@ int netlbl_skbuff_setattr(struct sk_buff *skb, · 51 unmodified lines
899883 {
900884 int ret_val;
901885 struct iphdr *hdr4;
902− struct netlbl_domaddr4_map *af4_entry;
886+ struct netlbl_dommap_def *entry;
903887
904888 rcu_read_lock();
905889 switch (family) {
906890 case AF_INET:
907891 hdr4 = ip_hdr(skb);
908− af4_entry = netlbl_domhsh_getentry_af4(secattr->domain,
909− hdr4->daddr);
910− if (af4_entry == NULL) {
892+ entry = netlbl_domhsh_getentry_af4(secattr->domain,hdr4->daddr);
893+ if (entry == NULL) {
911894 ret_val = -ENOENT;
912895 goto skbuff_setattr_return;
913896 }
914− switch (af4_entry->type) {
897+ switch (entry->type) {
915898 case NETLBL_NLTYPE_CIPSOV4:
916− ret_val = cipso_v4_skbuff_setattr(skb,
917− af4_entry->type_def.cipsov4,
918− secattr);
899+ ret_val = cipso_v4_skbuff_setattr(skb, entry->cipso,
900+ secattr);
919901 break;
920902 case NETLBL_NLTYPE_UNLABELED:
921903 /* just delete the protocols we support for right now
net/netlabel/netlabel_mgmt.c+21−23
@@ -104,7 +104,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, · 103 unmodified lines
104104 ret_val = -ENOMEM;
105105 goto add_failure;
106106 }
107− entry->type = nla_get_u32(info->attrs[NLBL_MGMT_A_PROTOCOL]);
107+ entry->def.type = nla_get_u32(info->attrs[NLBL_MGMT_A_PROTOCOL]);
108108 if (info->attrs[NLBL_MGMT_A_DOMAIN]) {
109109 size_t tmp_size = nla_len(info->attrs[NLBL_MGMT_A_DOMAIN]);
110110 entry->domain = kmalloc(tmp_size, GFP_KERNEL);
@@ -116,12 +116,12 @@ static int netlbl_mgmt_add_common(struct genl_info *info, · 5 unmodified lines
116116 info->attrs[NLBL_MGMT_A_DOMAIN], tmp_size);
117117 }
118118
119− /* NOTE: internally we allow/use a entry->type value of
119+ /* NOTE: internally we allow/use a entry->def.type value of
120120 * NETLBL_NLTYPE_ADDRSELECT but we don't currently allow users
121121 * to pass that as a protocol value because we need to know the
122122 * "real" protocol */
123123
124− switch (entry->type) {
124+ switch (entry->def.type) {
125125 case NETLBL_NLTYPE_UNLABELED:
126126 break;
127127 case NETLBL_NLTYPE_CIPSOV4:
@@ -132,7 +132,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, · 4 unmodified lines
132132 cipsov4 = cipso_v4_doi_getdef(tmp_val);
133133 if (cipsov4 == NULL)
134134 goto add_failure;
135− entry->type_def.cipsov4 = cipsov4;
135+ entry->def.cipso = cipsov4;
136136 break;
137137 default:
138138 goto add_failure;
@@ -172,9 +172,9 @@ static int netlbl_mgmt_add_common(struct genl_info *info, · 33 unmodified lines
172172 map->list.addr = addr->s_addr & mask->s_addr;
173173 map->list.mask = mask->s_addr;
174174 map->list.valid = 1;
175− map->type = entry->type;
175+ map->def.type = entry->def.type;
176176 if (cipsov4)
177− map->type_def.cipsov4 = cipsov4;
177+ map->def.cipso = cipsov4;
178178
179179 ret_val = netlbl_af4list_add(&map->list, &addrmap->list4);
180180 if (ret_val != 0) {
@@ -182,8 +182,8 @@ static int netlbl_mgmt_add_common(struct genl_info *info, · 1 unmodified line
182182 goto add_failure;
183183 }
184184
185− entry->type = NETLBL_NLTYPE_ADDRSELECT;
186− entry->type_def.addrsel = addrmap;
185+ entry->def.type = NETLBL_NLTYPE_ADDRSELECT;
186+ entry->def.addrsel = addrmap;
187187 #if IS_ENABLED(CONFIG_IPV6)
188188 } else if (info->attrs[NLBL_MGMT_A_IPV6ADDR]) {
189189 struct in6_addr *addr;
@@ -223,7 +223,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info, · 33 unmodified lines
223223 map->list.addr.s6_addr32[3] &= mask->s6_addr32[3];
224224 map->list.mask = *mask;
225225 map->list.valid = 1;
226− map->type = entry->type;
226+ map->def.type = entry->def.type;
227227
228228 ret_val = netlbl_af6list_add(&map->list, &addrmap->list6);
229229 if (ret_val != 0) {
@@ -231,8 +231,8 @@ static int netlbl_mgmt_add_common(struct genl_info *info, · 1 unmodified line
231231 goto add_failure;
232232 }
233233
234− entry->type = NETLBL_NLTYPE_ADDRSELECT;
235− entry->type_def.addrsel = addrmap;
234+ entry->def.type = NETLBL_NLTYPE_ADDRSELECT;
235+ entry->def.addrsel = addrmap;
236236 #endif /* IPv6 */
237237 }
238238
@@ -281,14 +281,13 @@ static int netlbl_mgmt_listentry(struct sk_buff *skb, · 42 unmodified lines
281281 return ret_val;
282282 }
283283
284− switch (entry->type) {
284+ switch (entry->def.type) {
285285 case NETLBL_NLTYPE_ADDRSELECT:
286286 nla_a = nla_nest_start(skb, NLBL_MGMT_A_SELECTORLIST);
287287 if (nla_a == NULL)
288288 return -ENOMEM;
289289
290− netlbl_af4list_foreach_rcu(iter4,
291− &entry->type_def.addrsel->list4) {
290+ netlbl_af4list_foreach_rcu(iter4, &entry->def.addrsel->list4) {
292291 struct netlbl_domaddr4_map *map4;
293292 struct in_addr addr_struct;
294293
@@ -310,13 +309,13 @@ static int netlbl_mgmt_listentry(struct sk_buff *skb, · 15 unmodified lines
310309 return ret_val;
311310 map4 = netlbl_domhsh_addr4_entry(iter4);
312311 ret_val = nla_put_u32(skb, NLBL_MGMT_A_PROTOCOL,
313− map4->type);
312+ map4->def.type);
314313 if (ret_val != 0)
315314 return ret_val;
316− switch (map4->type) {
315+ switch (map4->def.type) {
317316 case NETLBL_NLTYPE_CIPSOV4:
318317 ret_val = nla_put_u32(skb, NLBL_MGMT_A_CV4DOI,
319− map4->type_def.cipsov4->doi);
318+ map4->def.cipso->doi);
320319 if (ret_val != 0)
321320 return ret_val;
322321 break;
@@ -325,8 +324,7 @@ static int netlbl_mgmt_listentry(struct sk_buff *skb, · 2 unmodified lines
325324 nla_nest_end(skb, nla_b);
326325 }
327326 #if IS_ENABLED(CONFIG_IPV6)
328− netlbl_af6list_foreach_rcu(iter6,
329− &entry->type_def.addrsel->list6) {
327+ netlbl_af6list_foreach_rcu(iter6, &entry->def.addrsel->list6) {
330328 struct netlbl_domaddr6_map *map6;
331329
332330 nla_b = nla_nest_start(skb, NLBL_MGMT_A_ADDRSELECTOR);
@@ -345,7 +343,7 @@ static int netlbl_mgmt_listentry(struct sk_buff *skb, · 12 unmodified lines
345343 return ret_val;
346344 map6 = netlbl_domhsh_addr6_entry(iter6);
347345 ret_val = nla_put_u32(skb, NLBL_MGMT_A_PROTOCOL,
348− map6->type);
346+ map6->def.type);
349347 if (ret_val != 0)
350348 return ret_val;
351349
@@ -356,14 +354,14 @@ static int netlbl_mgmt_listentry(struct sk_buff *skb, · 4 unmodified lines
356354 nla_nest_end(skb, nla_a);
357355 break;
358356 case NETLBL_NLTYPE_UNLABELED:
359− ret_val = nla_put_u32(skb, NLBL_MGMT_A_PROTOCOL, entry->type);
357+ ret_val = nla_put_u32(skb,NLBL_MGMT_A_PROTOCOL,entry->def.type);
360358 break;
361359 case NETLBL_NLTYPE_CIPSOV4:
362− ret_val = nla_put_u32(skb, NLBL_MGMT_A_PROTOCOL, entry->type);
360+ ret_val = nla_put_u32(skb,NLBL_MGMT_A_PROTOCOL,entry->def.type);
363361 if (ret_val != 0)
364362 return ret_val;
365363 ret_val = nla_put_u32(skb, NLBL_MGMT_A_CV4DOI,
366− entry->type_def.cipsov4->doi);
364+ entry->def.cipso->doi);
367365 break;
368366 }
369367
net/netlabel/netlabel_unlabeled.c+1−1
@@ -1541,7 +1541,7 @@ int __init netlbl_unlabel_defconf(void) · 1540 unmodified lines
15411541 entry = kzalloc(sizeof(*entry), GFP_KERNEL);
15421542 if (entry == NULL)
15431543 return -ENOMEM;
1544− entry->type = NETLBL_NLTYPE_UNLABELED;
1544+ entry->def.type = NETLBL_NLTYPE_UNLABELED;
15451545 ret_val = netlbl_domhsh_add_default(entry, &audit_info);
15461546 if (ret_val != 0)
15471547 return ret_val;
net/nfc/core.c+10−10
@@ -44,7 +44,7 @@ DEFINE_MUTEX(nfc_devlist_mutex); · 43 unmodified lines
4444 /* NFC device ID bitmap */
4545 static DEFINE_IDA(nfc_index_ida);
4646
47−int nfc_fw_upload(struct nfc_dev *dev, const char *firmware_name)
47+int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name)
4848 {
4949 int rc = 0;
5050
@@ -62,28 +62,28 @@ int nfc_fw_upload(struct nfc_dev *dev, const char *firmware_name) · 11 unmodified lines
6262 goto error;
6363 }
6464
65− if (!dev->ops->fw_upload) {
65+ if (!dev->ops->fw_download) {
6666 rc = -EOPNOTSUPP;
6767 goto error;
6868 }
6969
70− dev->fw_upload_in_progress = true;
71− rc = dev->ops->fw_upload(dev, firmware_name);
70+ dev->fw_download_in_progress = true;
71+ rc = dev->ops->fw_download(dev, firmware_name);
7272 if (rc)
73− dev->fw_upload_in_progress = false;
73+ dev->fw_download_in_progress = false;
7474
7575 error:
7676 device_unlock(&dev->dev);
7777 return rc;
7878 }
7979
80−int nfc_fw_upload_done(struct nfc_dev *dev, const char *firmware_name)
80+int nfc_fw_download_done(struct nfc_dev *dev, const char *firmware_name)
8181 {
82− dev->fw_upload_in_progress = false;
82+ dev->fw_download_in_progress = false;
8383
84− return nfc_genl_fw_upload_done(dev, firmware_name);
84+ return nfc_genl_fw_download_done(dev, firmware_name);
8585 }
86−EXPORT_SYMBOL(nfc_fw_upload_done);
86+EXPORT_SYMBOL(nfc_fw_download_done);
8787
8888 /**
8989 * nfc_dev_up - turn on the NFC device
@@ -110,7 +110,7 @@ int nfc_dev_up(struct nfc_dev *dev) · 20 unmodified lines
110110 goto error;
111111 }
112112
113− if (dev->fw_upload_in_progress) {
113+ if (dev->fw_download_in_progress) {
114114 rc = -EBUSY;
115115 goto error;
116116 }
net/nfc/hci/core.c+4−4
@@ -809,14 +809,14 @@ static void nfc_hci_recv_from_llc(struct nfc_hci_dev *hdev, struct sk_buff *skb) · 808 unmodified lines
809809 }
810810 }
811811
812−static int hci_fw_upload(struct nfc_dev *nfc_dev, const char *firmware_name)
812+static int hci_fw_download(struct nfc_dev *nfc_dev, const char *firmware_name)
813813 {
814814 struct nfc_hci_dev *hdev = nfc_get_drvdata(nfc_dev);
815815
816− if (!hdev->ops->fw_upload)
816+ if (!hdev->ops->fw_download)
817817 return -ENOTSUPP;
818818
819− return hdev->ops->fw_upload(hdev, firmware_name);
819+ return hdev->ops->fw_download(hdev, firmware_name);
820820 }
821821
822822 static struct nfc_ops hci_nfc_ops = {
@@ -831,7 +831,7 @@ static struct nfc_ops hci_nfc_ops = { · 8 unmodified lines
831831 .im_transceive = hci_transceive,
832832 .tm_send = hci_tm_send,
833833 .check_presence = hci_check_presence,
834− .fw_upload = hci_fw_upload,
834+ .fw_download = hci_fw_download,
835835 .discover_se = hci_discover_se,
836836 .enable_se = hci_enable_se,
837837 .disable_se = hci_disable_se,
net/nfc/nci/Kconfig+1−0
@@ -11,6 +11,7 @@ config NFC_NCI · 10 unmodified lines
1111
1212 config NFC_NCI_SPI
1313 depends on NFC_NCI && SPI
14+ select CRC_CCITT
1415 bool "NCI over SPI protocol support"
1516 default n
1617 help
net/nfc/netlink.c+6−6
@@ -1089,7 +1089,7 @@ exit: · 1088 unmodified lines
10891089 return rc;
10901090 }
10911091
1092−static int nfc_genl_fw_upload(struct sk_buff *skb, struct genl_info *info)
1092+static int nfc_genl_fw_download(struct sk_buff *skb, struct genl_info *info)
10931093 {
10941094 struct nfc_dev *dev;
10951095 int rc;
@@ -1108,13 +1108,13 @@ static int nfc_genl_fw_upload(struct sk_buff *skb, struct genl_info *info) · 12 unmodified lines
11081108 nla_strlcpy(firmware_name, info->attrs[NFC_ATTR_FIRMWARE_NAME],
11091109 sizeof(firmware_name));
11101110
1111− rc = nfc_fw_upload(dev, firmware_name);
1111+ rc = nfc_fw_download(dev, firmware_name);
11121112
11131113 nfc_put_device(dev);
11141114 return rc;
11151115 }
11161116
1117−int nfc_genl_fw_upload_done(struct nfc_dev *dev, const char *firmware_name)
1117+int nfc_genl_fw_download_done(struct nfc_dev *dev, const char *firmware_name)
11181118 {
11191119 struct sk_buff *msg;
11201120 void *hdr;
@@ -1124,7 +1124,7 @@ int nfc_genl_fw_upload_done(struct nfc_dev *dev, const char *firmware_name) · 3 unmodified lines
11241124 return -ENOMEM;
11251125
11261126 hdr = genlmsg_put(msg, 0, 0, &nfc_genl_family, 0,
1127− NFC_CMD_FW_UPLOAD);
1127+ NFC_CMD_FW_DOWNLOAD);
11281128 if (!hdr)
11291129 goto free_msg;
11301130
@@ -1251,8 +1251,8 @@ static struct genl_ops nfc_genl_ops[] = { · 120 unmodified lines
12511251 .policy = nfc_genl_policy,
12521252 },
12531253 {
1254− .cmd = NFC_CMD_FW_UPLOAD,
1255− .doit = nfc_genl_fw_upload,
1254+ .cmd = NFC_CMD_FW_DOWNLOAD,
1255+ .doit = nfc_genl_fw_download,
12561256 .policy = nfc_genl_policy,
12571257 },
12581258 {
net/nfc/nfc.h+3−3
@@ -123,10 +123,10 @@ static inline void nfc_device_iter_exit(struct class_dev_iter *iter) · 122 unmodified lines
123123 class_dev_iter_exit(iter);
124124 }
125125
126−int nfc_fw_upload(struct nfc_dev *dev, const char *firmware_name);
127−int nfc_genl_fw_upload_done(struct nfc_dev *dev, const char *firmware_name);
126+int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name);
127+int nfc_genl_fw_download_done(struct nfc_dev *dev, const char *firmware_name);
128128
129−int nfc_fw_upload_done(struct nfc_dev *dev, const char *firmware_name);
129+int nfc_fw_download_done(struct nfc_dev *dev, const char *firmware_name);
130130
131131 int nfc_dev_up(struct nfc_dev *dev);
132132
net/sched/sch_atm.c+1−0
@@ -605,6 +605,7 @@ static int atm_tc_dump_class(struct Qdisc *sch, unsigned long cl, · 604 unmodified lines
605605 struct sockaddr_atmpvc pvc;
606606 int state;
607607
608+ memset(&pvc, 0, sizeof(pvc));
608609 pvc.sap_family = AF_ATMPVC;
609610 pvc.sap_addr.itf = flow->vcc->dev ? flow->vcc->dev->number : -1;
610611 pvc.sap_addr.vpi = flow->vcc->vpi;
net/sched/sch_htb.c+1−1
@@ -100,7 +100,7 @@ struct htb_class { · 99 unmodified lines
100100 struct psched_ratecfg ceil;
101101 s64 buffer, cbuffer;/* token bucket depth/rate */
102102 s64 mbuffer; /* max wait time */
103− int prio; /* these two are used only by leaves... */
103+ u32 prio; /* these two are used only by leaves... */
104104 int quantum; /* but stored for parent-to-leaf return */
105105
106106 struct tcf_proto *filter_list; /* class attached filters */
net/socket.c+1−1
@@ -106,7 +106,7 @@ · 105 unmodified lines
106106 #include <linux/atalk.h>
107107 #include <net/busy_poll.h>
108108
109−#ifdef CONFIG_NET_LL_RX_POLL
109+#ifdef CONFIG_NET_RX_BUSY_POLL
110110 unsigned int sysctl_net_busy_read __read_mostly;
111111 unsigned int sysctl_net_busy_poll __read_mostly;
112112 #endif
net/tipc/server.c+12−3
@@ -355,8 +355,12 @@ static int tipc_open_listening_sock(struct tipc_server *s) · 354 unmodified lines
355355 return PTR_ERR(con);
356356
357357 sock = tipc_create_listen_sock(con);
358− if (!sock)
358+ if (!sock) {
359+ idr_remove(&s->conn_idr, con->conid);
360+ s->idr_in_use--;
361+ kfree(con);
359362 return -EINVAL;
363+ }
360364
361365 tipc_register_callbacks(sock, con);
362366 return 0;
@@ -563,9 +567,14 @@ int tipc_server_start(struct tipc_server *s) · 200 unmodified lines
563567 kmem_cache_destroy(s->rcvbuf_cache);
564568 return ret;
565569 }
570+ ret = tipc_open_listening_sock(s);
571+ if (ret < 0) {
572+ tipc_work_stop(s);
573+ kmem_cache_destroy(s->rcvbuf_cache);
574+ return ret;
575+ }
566576 s->enabled = 1;
567−
568− return tipc_open_listening_sock(s);
577+ return ret;
569578 }
570579
571580 void tipc_server_stop(struct tipc_server *s)
net/wireless/reg.c+4−1
@@ -2247,10 +2247,13 @@ int reg_device_uevent(struct device *dev, struct kobj_uevent_env *env) · 2246 unmodified lines
22472247
22482248 void wiphy_regulatory_register(struct wiphy *wiphy)
22492249 {
2250+ struct regulatory_request *lr;
2251+
22502252 if (!reg_dev_ignore_cell_hint(wiphy))
22512253 reg_num_devs_support_basehint++;
22522254
2253− wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE);
2255+ lr = get_last_request();
2256+ wiphy_update_regulatory(wiphy, lr->initiator);
22542257 }
22552258
22562259 void wiphy_regulatory_deregister(struct wiphy *wiphy)