aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-08-02 13:12:02 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-08-02 13:12:02 -0400
commite30cb13c5a09ff5f043a6570c32e49b063bea6a1 (patch)
treeb63f9f72b6d9d29e8bbdb76c097b47aa91cd871d
parenta3f94cb99a854fa381fe7fadd97c4f61633717a5 (diff)
parente6aed040eafb4ce1881bbc59a225f6b27d250396 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: "Fixes keep trickling in: 1) Various IP fragmentation memory limit hardening changes from Eric Dumazet. 2) Revert ipv6 metrics leak change, it causes more problems than it fixes for now. 3) Fix WoL regression in stmmac driver, from Jose Abreu. 4) Netlink socket spectre v1 gadget fix, from Jeremy Cline" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: Revert "net/ipv6: fix metrics leak" rxrpc: Fix user call ID check in rxrpc_service_prealloc_one net: dsa: Do not suspend/resume closed slave_dev netlink: Fix spectre v1 gadget in netlink_create() Documentation: dpaa2: Use correct heading adornment net: stmmac: Fix WoL for PCI-based setups bonding: avoid lockdep confusion in bond_get_stats() enic: do not call enic_change_mtu in enic_probe ipv4: frags: handle possible skb truesize change inet: frag: enforce memory limits earlier net/mlx5e: IPoIB, Set the netdevice sw mtu in ipoib enhanced flow net/mlx5e: Fix null pointer access when setting MTU of vport representor net/mlx5e: Set port trust mode to PCP as default net/mlx5e: E-Switch, Initialize eswitch only if eswitch manager net: dsa: mv88e6xxx: Fix SERDES support on 88E6141/6341 brcmfmac: fix regression in parsing NVRAM for multiple devices iwlwifi: add more card IDs for 9000 series
-rw-r--r--Documentation/networking/dpaa2/overview.rst1
-rw-r--r--drivers/net/bonding/bond_main.c14
-rw-r--r--drivers/net/dsa/mv88e6xxx/chip.c4
-rw-r--r--drivers/net/ethernet/cisco/enic/enic_main.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_main.c3
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/eswitch.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c4
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c40
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c3
-rw-r--r--drivers/net/wireless/intel/iwlwifi/cfg/9000.c69
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-config.h5
-rw-r--r--drivers/net/wireless/intel/iwlwifi/pcie/drv.c22
-rw-r--r--net/dsa/slave.c6
-rw-r--r--net/ipv4/inet_fragment.c6
-rw-r--r--net/ipv4/ip_fragment.c5
-rw-r--r--net/ipv6/ip6_fib.c18
-rw-r--r--net/netlink/af_netlink.c2
-rw-r--r--net/rxrpc/call_accept.c4
19 files changed, 184 insertions, 30 deletions
diff --git a/Documentation/networking/dpaa2/overview.rst b/Documentation/networking/dpaa2/overview.rst
index 79fede4447d6..d638b5a8aadd 100644
--- a/Documentation/networking/dpaa2/overview.rst
+++ b/Documentation/networking/dpaa2/overview.rst
@@ -1,5 +1,6 @@
1.. include:: <isonum.txt> 1.. include:: <isonum.txt>
2 2
3=========================================================
3DPAA2 (Data Path Acceleration Architecture Gen2) Overview 4DPAA2 (Data Path Acceleration Architecture Gen2) Overview
4========================================================= 5=========================================================
5 6
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 63e3844c5bec..217b790d22ed 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1717,6 +1717,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
1717 goto err_upper_unlink; 1717 goto err_upper_unlink;
1718 } 1718 }
1719 1719
1720 bond->nest_level = dev_get_nest_level(bond_dev) + 1;
1721
1720 /* If the mode uses primary, then the following is handled by 1722 /* If the mode uses primary, then the following is handled by
1721 * bond_change_active_slave(). 1723 * bond_change_active_slave().
1722 */ 1724 */
@@ -1764,7 +1766,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
1764 if (bond_mode_can_use_xmit_hash(bond)) 1766 if (bond_mode_can_use_xmit_hash(bond))
1765 bond_update_slave_arr(bond, NULL); 1767 bond_update_slave_arr(bond, NULL);
1766 1768
1767 bond->nest_level = dev_get_nest_level(bond_dev);
1768 1769
1769 netdev_info(bond_dev, "Enslaving %s as %s interface with %s link\n", 1770 netdev_info(bond_dev, "Enslaving %s as %s interface with %s link\n",
1770 slave_dev->name, 1771 slave_dev->name,
@@ -3415,6 +3416,13 @@ static void bond_fold_stats(struct rtnl_link_stats64 *_res,
3415 } 3416 }
3416} 3417}
3417 3418
3419static int bond_get_nest_level(struct net_device *bond_dev)
3420{
3421 struct bonding *bond = netdev_priv(bond_dev);
3422
3423 return bond->nest_level;
3424}
3425
3418static void bond_get_stats(struct net_device *bond_dev, 3426static void bond_get_stats(struct net_device *bond_dev,
3419 struct rtnl_link_stats64 *stats) 3427 struct rtnl_link_stats64 *stats)
3420{ 3428{
@@ -3423,7 +3431,7 @@ static void bond_get_stats(struct net_device *bond_dev,
3423 struct list_head *iter; 3431 struct list_head *iter;
3424 struct slave *slave; 3432 struct slave *slave;
3425 3433
3426 spin_lock(&bond->stats_lock); 3434 spin_lock_nested(&bond->stats_lock, bond_get_nest_level(bond_dev));
3427 memcpy(stats, &bond->bond_stats, sizeof(*stats)); 3435 memcpy(stats, &bond->bond_stats, sizeof(*stats));
3428 3436
3429 rcu_read_lock(); 3437 rcu_read_lock();
@@ -4227,6 +4235,7 @@ static const struct net_device_ops bond_netdev_ops = {
4227 .ndo_neigh_setup = bond_neigh_setup, 4235 .ndo_neigh_setup = bond_neigh_setup,
4228 .ndo_vlan_rx_add_vid = bond_vlan_rx_add_vid, 4236 .ndo_vlan_rx_add_vid = bond_vlan_rx_add_vid,
4229 .ndo_vlan_rx_kill_vid = bond_vlan_rx_kill_vid, 4237 .ndo_vlan_rx_kill_vid = bond_vlan_rx_kill_vid,
4238 .ndo_get_lock_subclass = bond_get_nest_level,
4230#ifdef CONFIG_NET_POLL_CONTROLLER 4239#ifdef CONFIG_NET_POLL_CONTROLLER
4231 .ndo_netpoll_setup = bond_netpoll_setup, 4240 .ndo_netpoll_setup = bond_netpoll_setup,
4232 .ndo_netpoll_cleanup = bond_netpoll_cleanup, 4241 .ndo_netpoll_cleanup = bond_netpoll_cleanup,
@@ -4725,6 +4734,7 @@ static int bond_init(struct net_device *bond_dev)
4725 if (!bond->wq) 4734 if (!bond->wq)
4726 return -ENOMEM; 4735 return -ENOMEM;
4727 4736
4737 bond->nest_level = SINGLE_DEPTH_NESTING;
4728 netdev_lockdep_set_classes(bond_dev); 4738 netdev_lockdep_set_classes(bond_dev);
4729 4739
4730 list_add_tail(&bond->bond_list, &bn->dev_list); 4740 list_add_tail(&bond->bond_list, &bn->dev_list);
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 9ef07a06aceb..bb28c701381a 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -2617,7 +2617,6 @@ static const struct mv88e6xxx_ops mv88e6085_ops = {
2617 .rmu_disable = mv88e6085_g1_rmu_disable, 2617 .rmu_disable = mv88e6085_g1_rmu_disable,
2618 .vtu_getnext = mv88e6352_g1_vtu_getnext, 2618 .vtu_getnext = mv88e6352_g1_vtu_getnext,
2619 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, 2619 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
2620 .serdes_power = mv88e6341_serdes_power,
2621}; 2620};
2622 2621
2623static const struct mv88e6xxx_ops mv88e6095_ops = { 2622static const struct mv88e6xxx_ops mv88e6095_ops = {
@@ -2783,6 +2782,7 @@ static const struct mv88e6xxx_ops mv88e6141_ops = {
2783 .reset = mv88e6352_g1_reset, 2782 .reset = mv88e6352_g1_reset,
2784 .vtu_getnext = mv88e6352_g1_vtu_getnext, 2783 .vtu_getnext = mv88e6352_g1_vtu_getnext,
2785 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, 2784 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
2785 .serdes_power = mv88e6341_serdes_power,
2786 .gpio_ops = &mv88e6352_gpio_ops, 2786 .gpio_ops = &mv88e6352_gpio_ops,
2787}; 2787};
2788 2788
@@ -2960,7 +2960,6 @@ static const struct mv88e6xxx_ops mv88e6175_ops = {
2960 .reset = mv88e6352_g1_reset, 2960 .reset = mv88e6352_g1_reset,
2961 .vtu_getnext = mv88e6352_g1_vtu_getnext, 2961 .vtu_getnext = mv88e6352_g1_vtu_getnext,
2962 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, 2962 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
2963 .serdes_power = mv88e6341_serdes_power,
2964}; 2963};
2965 2964
2966static const struct mv88e6xxx_ops mv88e6176_ops = { 2965static const struct mv88e6xxx_ops mv88e6176_ops = {
@@ -3336,6 +3335,7 @@ static const struct mv88e6xxx_ops mv88e6341_ops = {
3336 .reset = mv88e6352_g1_reset, 3335 .reset = mv88e6352_g1_reset,
3337 .vtu_getnext = mv88e6352_g1_vtu_getnext, 3336 .vtu_getnext = mv88e6352_g1_vtu_getnext,
3338 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, 3337 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
3338 .serdes_power = mv88e6341_serdes_power,
3339 .gpio_ops = &mv88e6352_gpio_ops, 3339 .gpio_ops = &mv88e6352_gpio_ops,
3340 .avb_ops = &mv88e6390_avb_ops, 3340 .avb_ops = &mv88e6390_avb_ops,
3341}; 3341};
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
index 6b0376123cde..60641e202534 100644
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -2892,7 +2892,6 @@ static int enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2892 */ 2892 */
2893 2893
2894 enic->port_mtu = enic->config.mtu; 2894 enic->port_mtu = enic->config.mtu;
2895 (void)enic_change_mtu(netdev, enic->port_mtu);
2896 2895
2897 err = enic_set_mac_addr(netdev, enic->mac_addr); 2896 err = enic_set_mac_addr(netdev, enic->mac_addr);
2898 if (err) { 2897 if (err) {
@@ -2982,6 +2981,7 @@ static int enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2982 /* MTU range: 68 - 9000 */ 2981 /* MTU range: 68 - 9000 */
2983 netdev->min_mtu = ENIC_MIN_MTU; 2982 netdev->min_mtu = ENIC_MIN_MTU;
2984 netdev->max_mtu = ENIC_MAX_MTU; 2983 netdev->max_mtu = ENIC_MAX_MTU;
2984 netdev->mtu = enic->port_mtu;
2985 2985
2986 err = register_netdev(netdev); 2986 err = register_netdev(netdev);
2987 if (err) { 2987 if (err) {
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c b/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
index 86bc9ac99586..e33afa8d2417 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
@@ -1172,6 +1172,8 @@ static int mlx5e_trust_initialize(struct mlx5e_priv *priv)
1172 struct mlx5_core_dev *mdev = priv->mdev; 1172 struct mlx5_core_dev *mdev = priv->mdev;
1173 int err; 1173 int err;
1174 1174
1175 priv->dcbx_dp.trust_state = MLX5_QPTS_TRUST_PCP;
1176
1175 if (!MLX5_DSCP_SUPPORTED(mdev)) 1177 if (!MLX5_DSCP_SUPPORTED(mdev))
1176 return 0; 1178 return 0;
1177 1179
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index dae4156a710d..c592678ab5f1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -3712,7 +3712,8 @@ int mlx5e_change_mtu(struct net_device *netdev, int new_mtu,
3712 3712
3713 if (!reset) { 3713 if (!reset) {
3714 params->sw_mtu = new_mtu; 3714 params->sw_mtu = new_mtu;
3715 set_mtu_cb(priv); 3715 if (set_mtu_cb)
3716 set_mtu_cb(priv);
3716 netdev->mtu = params->sw_mtu; 3717 netdev->mtu = params->sw_mtu;
3717 goto out; 3718 goto out;
3718 } 3719 }
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
index dd01ad4c0b54..40dba9e8af92 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
@@ -1696,7 +1696,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
1696 int vport_num; 1696 int vport_num;
1697 int err; 1697 int err;
1698 1698
1699 if (!MLX5_VPORT_MANAGER(dev)) 1699 if (!MLX5_ESWITCH_MANAGER(dev))
1700 return 0; 1700 return 0;
1701 1701
1702 esw_info(dev, 1702 esw_info(dev,
@@ -1765,7 +1765,7 @@ abort:
1765 1765
1766void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw) 1766void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw)
1767{ 1767{
1768 if (!esw || !MLX5_VPORT_MANAGER(esw->dev)) 1768 if (!esw || !MLX5_ESWITCH_MANAGER(esw->dev))
1769 return; 1769 return;
1770 1770
1771 esw_info(esw->dev, "cleanup\n"); 1771 esw_info(esw->dev, "cleanup\n");
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
index af3bb2f7a504..b7c21eb21a21 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
@@ -76,6 +76,7 @@ void mlx5i_init(struct mlx5_core_dev *mdev,
76 void *ppriv) 76 void *ppriv)
77{ 77{
78 struct mlx5e_priv *priv = mlx5i_epriv(netdev); 78 struct mlx5e_priv *priv = mlx5i_epriv(netdev);
79 u16 max_mtu;
79 80
80 /* priv init */ 81 /* priv init */
81 priv->mdev = mdev; 82 priv->mdev = mdev;
@@ -84,6 +85,9 @@ void mlx5i_init(struct mlx5_core_dev *mdev,
84 priv->ppriv = ppriv; 85 priv->ppriv = ppriv;
85 mutex_init(&priv->state_lock); 86 mutex_init(&priv->state_lock);
86 87
88 mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
89 netdev->mtu = max_mtu;
90
87 mlx5e_build_nic_params(mdev, &priv->channels.params, 91 mlx5e_build_nic_params(mdev, &priv->channels.params,
88 profile->max_nch(mdev), netdev->mtu); 92 profile->max_nch(mdev), netdev->mtu);
89 mlx5i_build_nic_params(mdev, &priv->channels.params); 93 mlx5i_build_nic_params(mdev, &priv->channels.params);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
index 8d375e51a526..6a393b16a1fc 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
@@ -257,7 +257,7 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
257 return -ENOMEM; 257 return -ENOMEM;
258 258
259 /* Enable pci device */ 259 /* Enable pci device */
260 ret = pcim_enable_device(pdev); 260 ret = pci_enable_device(pdev);
261 if (ret) { 261 if (ret) {
262 dev_err(&pdev->dev, "%s: ERROR: failed to enable device\n", 262 dev_err(&pdev->dev, "%s: ERROR: failed to enable device\n",
263 __func__); 263 __func__);
@@ -300,9 +300,45 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
300static void stmmac_pci_remove(struct pci_dev *pdev) 300static void stmmac_pci_remove(struct pci_dev *pdev)
301{ 301{
302 stmmac_dvr_remove(&pdev->dev); 302 stmmac_dvr_remove(&pdev->dev);
303 pci_disable_device(pdev);
303} 304}
304 305
305static SIMPLE_DEV_PM_OPS(stmmac_pm_ops, stmmac_suspend, stmmac_resume); 306static int stmmac_pci_suspend(struct device *dev)
307{
308 struct pci_dev *pdev = to_pci_dev(dev);
309 int ret;
310
311 ret = stmmac_suspend(dev);
312 if (ret)
313 return ret;
314
315 ret = pci_save_state(pdev);
316 if (ret)
317 return ret;
318
319 pci_disable_device(pdev);
320 pci_wake_from_d3(pdev, true);
321 return 0;
322}
323
324static int stmmac_pci_resume(struct device *dev)
325{
326 struct pci_dev *pdev = to_pci_dev(dev);
327 int ret;
328
329 pci_restore_state(pdev);
330 pci_set_power_state(pdev, PCI_D0);
331
332 ret = pci_enable_device(pdev);
333 if (ret)
334 return ret;
335
336 pci_set_master(pdev);
337
338 return stmmac_resume(dev);
339}
340
341static SIMPLE_DEV_PM_OPS(stmmac_pm_ops, stmmac_pci_suspend, stmmac_pci_resume);
306 342
307/* synthetic ID, no official vendor */ 343/* synthetic ID, no official vendor */
308#define PCI_VENDOR_ID_STMMAC 0x700 344#define PCI_VENDOR_ID_STMMAC 0x700
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
index 45928b5b8d97..4fffa6988087 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
@@ -1785,7 +1785,8 @@ brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo)
1785 fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY; 1785 fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
1786 fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM; 1786 fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
1787 fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL; 1787 fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL;
1788 fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus); 1788 /* NVRAM reserves PCI domain 0 for Broadcom's SDK faked bus */
1789 fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1;
1789 fwreq->bus_nr = devinfo->pdev->bus->number; 1790 fwreq->bus_nr = devinfo->pdev->bus->number;
1790 1791
1791 return fwreq; 1792 return fwreq;
diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
index e20c30b29c03..c8ea63d02619 100644
--- a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
+++ b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
@@ -178,6 +178,17 @@ const struct iwl_cfg iwl9260_2ac_cfg = {
178 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, 178 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
179}; 179};
180 180
181const struct iwl_cfg iwl9260_killer_2ac_cfg = {
182 .name = "Killer (R) Wireless-AC 1550 Wireless Network Adapter (9260NGW)",
183 .fw_name_pre = IWL9260A_FW_PRE,
184 .fw_name_pre_b_or_c_step = IWL9260B_FW_PRE,
185 IWL_DEVICE_9000,
186 .ht_params = &iwl9000_ht_params,
187 .nvm_ver = IWL9000_NVM_VERSION,
188 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
189 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
190};
191
181const struct iwl_cfg iwl9270_2ac_cfg = { 192const struct iwl_cfg iwl9270_2ac_cfg = {
182 .name = "Intel(R) Dual Band Wireless AC 9270", 193 .name = "Intel(R) Dual Band Wireless AC 9270",
183 .fw_name_pre = IWL9260A_FW_PRE, 194 .fw_name_pre = IWL9260A_FW_PRE,
@@ -267,6 +278,34 @@ const struct iwl_cfg iwl9560_2ac_cfg_soc = {
267 .soc_latency = 5000, 278 .soc_latency = 5000,
268}; 279};
269 280
281const struct iwl_cfg iwl9560_killer_2ac_cfg_soc = {
282 .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
283 .fw_name_pre = IWL9000A_FW_PRE,
284 .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
285 .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
286 IWL_DEVICE_9000,
287 .ht_params = &iwl9000_ht_params,
288 .nvm_ver = IWL9000_NVM_VERSION,
289 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
290 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
291 .integrated = true,
292 .soc_latency = 5000,
293};
294
295const struct iwl_cfg iwl9560_killer_s_2ac_cfg_soc = {
296 .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
297 .fw_name_pre = IWL9000A_FW_PRE,
298 .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
299 .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
300 IWL_DEVICE_9000,
301 .ht_params = &iwl9000_ht_params,
302 .nvm_ver = IWL9000_NVM_VERSION,
303 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
304 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
305 .integrated = true,
306 .soc_latency = 5000,
307};
308
270const struct iwl_cfg iwl9460_2ac_cfg_shared_clk = { 309const struct iwl_cfg iwl9460_2ac_cfg_shared_clk = {
271 .name = "Intel(R) Dual Band Wireless AC 9460", 310 .name = "Intel(R) Dual Band Wireless AC 9460",
272 .fw_name_pre = IWL9000A_FW_PRE, 311 .fw_name_pre = IWL9000A_FW_PRE,
@@ -327,6 +366,36 @@ const struct iwl_cfg iwl9560_2ac_cfg_shared_clk = {
327 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK 366 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
328}; 367};
329 368
369const struct iwl_cfg iwl9560_killer_2ac_cfg_shared_clk = {
370 .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
371 .fw_name_pre = IWL9000A_FW_PRE,
372 .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
373 .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
374 IWL_DEVICE_9000,
375 .ht_params = &iwl9000_ht_params,
376 .nvm_ver = IWL9000_NVM_VERSION,
377 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
378 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
379 .integrated = true,
380 .soc_latency = 5000,
381 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
382};
383
384const struct iwl_cfg iwl9560_killer_s_2ac_cfg_shared_clk = {
385 .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
386 .fw_name_pre = IWL9000A_FW_PRE,
387 .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
388 .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
389 IWL_DEVICE_9000,
390 .ht_params = &iwl9000_ht_params,
391 .nvm_ver = IWL9000_NVM_VERSION,
392 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
393 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
394 .integrated = true,
395 .soc_latency = 5000,
396 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
397};
398
330MODULE_FIRMWARE(IWL9000A_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); 399MODULE_FIRMWARE(IWL9000A_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
331MODULE_FIRMWARE(IWL9000B_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); 400MODULE_FIRMWARE(IWL9000B_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
332MODULE_FIRMWARE(IWL9000RFB_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); 401MODULE_FIRMWARE(IWL9000RFB_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
index c503b26793f6..84a816809723 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
@@ -551,6 +551,7 @@ extern const struct iwl_cfg iwl8275_2ac_cfg;
551extern const struct iwl_cfg iwl4165_2ac_cfg; 551extern const struct iwl_cfg iwl4165_2ac_cfg;
552extern const struct iwl_cfg iwl9160_2ac_cfg; 552extern const struct iwl_cfg iwl9160_2ac_cfg;
553extern const struct iwl_cfg iwl9260_2ac_cfg; 553extern const struct iwl_cfg iwl9260_2ac_cfg;
554extern const struct iwl_cfg iwl9260_killer_2ac_cfg;
554extern const struct iwl_cfg iwl9270_2ac_cfg; 555extern const struct iwl_cfg iwl9270_2ac_cfg;
555extern const struct iwl_cfg iwl9460_2ac_cfg; 556extern const struct iwl_cfg iwl9460_2ac_cfg;
556extern const struct iwl_cfg iwl9560_2ac_cfg; 557extern const struct iwl_cfg iwl9560_2ac_cfg;
@@ -558,10 +559,14 @@ extern const struct iwl_cfg iwl9460_2ac_cfg_soc;
558extern const struct iwl_cfg iwl9461_2ac_cfg_soc; 559extern const struct iwl_cfg iwl9461_2ac_cfg_soc;
559extern const struct iwl_cfg iwl9462_2ac_cfg_soc; 560extern const struct iwl_cfg iwl9462_2ac_cfg_soc;
560extern const struct iwl_cfg iwl9560_2ac_cfg_soc; 561extern const struct iwl_cfg iwl9560_2ac_cfg_soc;
562extern const struct iwl_cfg iwl9560_killer_2ac_cfg_soc;
563extern const struct iwl_cfg iwl9560_killer_s_2ac_cfg_soc;
561extern const struct iwl_cfg iwl9460_2ac_cfg_shared_clk; 564extern const struct iwl_cfg iwl9460_2ac_cfg_shared_clk;
562extern const struct iwl_cfg iwl9461_2ac_cfg_shared_clk; 565extern const struct iwl_cfg iwl9461_2ac_cfg_shared_clk;
563extern const struct iwl_cfg iwl9462_2ac_cfg_shared_clk; 566extern const struct iwl_cfg iwl9462_2ac_cfg_shared_clk;
564extern const struct iwl_cfg iwl9560_2ac_cfg_shared_clk; 567extern const struct iwl_cfg iwl9560_2ac_cfg_shared_clk;
568extern const struct iwl_cfg iwl9560_killer_2ac_cfg_shared_clk;
569extern const struct iwl_cfg iwl9560_killer_s_2ac_cfg_shared_clk;
565extern const struct iwl_cfg iwl22000_2ac_cfg_hr; 570extern const struct iwl_cfg iwl22000_2ac_cfg_hr;
566extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb; 571extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb;
567extern const struct iwl_cfg iwl22000_2ac_cfg_jf; 572extern const struct iwl_cfg iwl22000_2ac_cfg_jf;
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
index 38234bda9017..8520523b91b4 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
@@ -545,6 +545,9 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
545 {IWL_PCI_DEVICE(0x2526, 0x1210, iwl9260_2ac_cfg)}, 545 {IWL_PCI_DEVICE(0x2526, 0x1210, iwl9260_2ac_cfg)},
546 {IWL_PCI_DEVICE(0x2526, 0x1410, iwl9270_2ac_cfg)}, 546 {IWL_PCI_DEVICE(0x2526, 0x1410, iwl9270_2ac_cfg)},
547 {IWL_PCI_DEVICE(0x2526, 0x1420, iwl9460_2ac_cfg_soc)}, 547 {IWL_PCI_DEVICE(0x2526, 0x1420, iwl9460_2ac_cfg_soc)},
548 {IWL_PCI_DEVICE(0x2526, 0x1550, iwl9260_killer_2ac_cfg)},
549 {IWL_PCI_DEVICE(0x2526, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
550 {IWL_PCI_DEVICE(0x2526, 0x1552, iwl9560_killer_2ac_cfg_soc)},
548 {IWL_PCI_DEVICE(0x2526, 0x1610, iwl9270_2ac_cfg)}, 551 {IWL_PCI_DEVICE(0x2526, 0x1610, iwl9270_2ac_cfg)},
549 {IWL_PCI_DEVICE(0x2526, 0x2030, iwl9560_2ac_cfg_soc)}, 552 {IWL_PCI_DEVICE(0x2526, 0x2030, iwl9560_2ac_cfg_soc)},
550 {IWL_PCI_DEVICE(0x2526, 0x2034, iwl9560_2ac_cfg_soc)}, 553 {IWL_PCI_DEVICE(0x2526, 0x2034, iwl9560_2ac_cfg_soc)},
@@ -554,6 +557,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
554 {IWL_PCI_DEVICE(0x2526, 0x40A4, iwl9460_2ac_cfg)}, 557 {IWL_PCI_DEVICE(0x2526, 0x40A4, iwl9460_2ac_cfg)},
555 {IWL_PCI_DEVICE(0x2526, 0x4234, iwl9560_2ac_cfg_soc)}, 558 {IWL_PCI_DEVICE(0x2526, 0x4234, iwl9560_2ac_cfg_soc)},
556 {IWL_PCI_DEVICE(0x2526, 0x42A4, iwl9462_2ac_cfg_soc)}, 559 {IWL_PCI_DEVICE(0x2526, 0x42A4, iwl9462_2ac_cfg_soc)},
560 {IWL_PCI_DEVICE(0x2526, 0x8014, iwl9260_2ac_cfg)},
557 {IWL_PCI_DEVICE(0x2526, 0xA014, iwl9260_2ac_cfg)}, 561 {IWL_PCI_DEVICE(0x2526, 0xA014, iwl9260_2ac_cfg)},
558 {IWL_PCI_DEVICE(0x271B, 0x0010, iwl9160_2ac_cfg)}, 562 {IWL_PCI_DEVICE(0x271B, 0x0010, iwl9160_2ac_cfg)},
559 {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)}, 563 {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)},
@@ -578,6 +582,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
578 {IWL_PCI_DEVICE(0x2720, 0x1010, iwl9260_2ac_cfg)}, 582 {IWL_PCI_DEVICE(0x2720, 0x1010, iwl9260_2ac_cfg)},
579 {IWL_PCI_DEVICE(0x2720, 0x1030, iwl9560_2ac_cfg_soc)}, 583 {IWL_PCI_DEVICE(0x2720, 0x1030, iwl9560_2ac_cfg_soc)},
580 {IWL_PCI_DEVICE(0x2720, 0x1210, iwl9260_2ac_cfg)}, 584 {IWL_PCI_DEVICE(0x2720, 0x1210, iwl9260_2ac_cfg)},
585 {IWL_PCI_DEVICE(0x2720, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
586 {IWL_PCI_DEVICE(0x2720, 0x1552, iwl9560_killer_2ac_cfg_soc)},
581 {IWL_PCI_DEVICE(0x2720, 0x2030, iwl9560_2ac_cfg_soc)}, 587 {IWL_PCI_DEVICE(0x2720, 0x2030, iwl9560_2ac_cfg_soc)},
582 {IWL_PCI_DEVICE(0x2720, 0x2034, iwl9560_2ac_cfg_soc)}, 588 {IWL_PCI_DEVICE(0x2720, 0x2034, iwl9560_2ac_cfg_soc)},
583 {IWL_PCI_DEVICE(0x2720, 0x4030, iwl9560_2ac_cfg)}, 589 {IWL_PCI_DEVICE(0x2720, 0x4030, iwl9560_2ac_cfg)},
@@ -604,6 +610,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
604 {IWL_PCI_DEVICE(0x30DC, 0x1010, iwl9260_2ac_cfg)}, 610 {IWL_PCI_DEVICE(0x30DC, 0x1010, iwl9260_2ac_cfg)},
605 {IWL_PCI_DEVICE(0x30DC, 0x1030, iwl9560_2ac_cfg_soc)}, 611 {IWL_PCI_DEVICE(0x30DC, 0x1030, iwl9560_2ac_cfg_soc)},
606 {IWL_PCI_DEVICE(0x30DC, 0x1210, iwl9260_2ac_cfg)}, 612 {IWL_PCI_DEVICE(0x30DC, 0x1210, iwl9260_2ac_cfg)},
613 {IWL_PCI_DEVICE(0x30DC, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
614 {IWL_PCI_DEVICE(0x30DC, 0x1552, iwl9560_killer_2ac_cfg_soc)},
607 {IWL_PCI_DEVICE(0x30DC, 0x2030, iwl9560_2ac_cfg_soc)}, 615 {IWL_PCI_DEVICE(0x30DC, 0x2030, iwl9560_2ac_cfg_soc)},
608 {IWL_PCI_DEVICE(0x30DC, 0x2034, iwl9560_2ac_cfg_soc)}, 616 {IWL_PCI_DEVICE(0x30DC, 0x2034, iwl9560_2ac_cfg_soc)},
609 {IWL_PCI_DEVICE(0x30DC, 0x4030, iwl9560_2ac_cfg_soc)}, 617 {IWL_PCI_DEVICE(0x30DC, 0x4030, iwl9560_2ac_cfg_soc)},
@@ -630,6 +638,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
630 {IWL_PCI_DEVICE(0x31DC, 0x1010, iwl9260_2ac_cfg)}, 638 {IWL_PCI_DEVICE(0x31DC, 0x1010, iwl9260_2ac_cfg)},
631 {IWL_PCI_DEVICE(0x31DC, 0x1030, iwl9560_2ac_cfg_shared_clk)}, 639 {IWL_PCI_DEVICE(0x31DC, 0x1030, iwl9560_2ac_cfg_shared_clk)},
632 {IWL_PCI_DEVICE(0x31DC, 0x1210, iwl9260_2ac_cfg)}, 640 {IWL_PCI_DEVICE(0x31DC, 0x1210, iwl9260_2ac_cfg)},
641 {IWL_PCI_DEVICE(0x31DC, 0x1551, iwl9560_killer_s_2ac_cfg_shared_clk)},
642 {IWL_PCI_DEVICE(0x31DC, 0x1552, iwl9560_killer_2ac_cfg_shared_clk)},
633 {IWL_PCI_DEVICE(0x31DC, 0x2030, iwl9560_2ac_cfg_shared_clk)}, 643 {IWL_PCI_DEVICE(0x31DC, 0x2030, iwl9560_2ac_cfg_shared_clk)},
634 {IWL_PCI_DEVICE(0x31DC, 0x2034, iwl9560_2ac_cfg_shared_clk)}, 644 {IWL_PCI_DEVICE(0x31DC, 0x2034, iwl9560_2ac_cfg_shared_clk)},
635 {IWL_PCI_DEVICE(0x31DC, 0x4030, iwl9560_2ac_cfg_shared_clk)}, 645 {IWL_PCI_DEVICE(0x31DC, 0x4030, iwl9560_2ac_cfg_shared_clk)},
@@ -656,6 +666,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
656 {IWL_PCI_DEVICE(0x34F0, 0x1010, iwl9260_2ac_cfg)}, 666 {IWL_PCI_DEVICE(0x34F0, 0x1010, iwl9260_2ac_cfg)},
657 {IWL_PCI_DEVICE(0x34F0, 0x1030, iwl9560_2ac_cfg_soc)}, 667 {IWL_PCI_DEVICE(0x34F0, 0x1030, iwl9560_2ac_cfg_soc)},
658 {IWL_PCI_DEVICE(0x34F0, 0x1210, iwl9260_2ac_cfg)}, 668 {IWL_PCI_DEVICE(0x34F0, 0x1210, iwl9260_2ac_cfg)},
669 {IWL_PCI_DEVICE(0x34F0, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
670 {IWL_PCI_DEVICE(0x34F0, 0x1552, iwl9560_killer_2ac_cfg_soc)},
659 {IWL_PCI_DEVICE(0x34F0, 0x2030, iwl9560_2ac_cfg_soc)}, 671 {IWL_PCI_DEVICE(0x34F0, 0x2030, iwl9560_2ac_cfg_soc)},
660 {IWL_PCI_DEVICE(0x34F0, 0x2034, iwl9560_2ac_cfg_soc)}, 672 {IWL_PCI_DEVICE(0x34F0, 0x2034, iwl9560_2ac_cfg_soc)},
661 {IWL_PCI_DEVICE(0x34F0, 0x4030, iwl9560_2ac_cfg_soc)}, 673 {IWL_PCI_DEVICE(0x34F0, 0x4030, iwl9560_2ac_cfg_soc)},
@@ -682,6 +694,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
682 {IWL_PCI_DEVICE(0x3DF0, 0x1010, iwl9260_2ac_cfg)}, 694 {IWL_PCI_DEVICE(0x3DF0, 0x1010, iwl9260_2ac_cfg)},
683 {IWL_PCI_DEVICE(0x3DF0, 0x1030, iwl9560_2ac_cfg_soc)}, 695 {IWL_PCI_DEVICE(0x3DF0, 0x1030, iwl9560_2ac_cfg_soc)},
684 {IWL_PCI_DEVICE(0x3DF0, 0x1210, iwl9260_2ac_cfg)}, 696 {IWL_PCI_DEVICE(0x3DF0, 0x1210, iwl9260_2ac_cfg)},
697 {IWL_PCI_DEVICE(0x3DF0, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
698 {IWL_PCI_DEVICE(0x3DF0, 0x1552, iwl9560_killer_2ac_cfg_soc)},
685 {IWL_PCI_DEVICE(0x3DF0, 0x2030, iwl9560_2ac_cfg_soc)}, 699 {IWL_PCI_DEVICE(0x3DF0, 0x2030, iwl9560_2ac_cfg_soc)},
686 {IWL_PCI_DEVICE(0x3DF0, 0x2034, iwl9560_2ac_cfg_soc)}, 700 {IWL_PCI_DEVICE(0x3DF0, 0x2034, iwl9560_2ac_cfg_soc)},
687 {IWL_PCI_DEVICE(0x3DF0, 0x4030, iwl9560_2ac_cfg_soc)}, 701 {IWL_PCI_DEVICE(0x3DF0, 0x4030, iwl9560_2ac_cfg_soc)},
@@ -708,6 +722,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
708 {IWL_PCI_DEVICE(0x43F0, 0x1010, iwl9260_2ac_cfg)}, 722 {IWL_PCI_DEVICE(0x43F0, 0x1010, iwl9260_2ac_cfg)},
709 {IWL_PCI_DEVICE(0x43F0, 0x1030, iwl9560_2ac_cfg_soc)}, 723 {IWL_PCI_DEVICE(0x43F0, 0x1030, iwl9560_2ac_cfg_soc)},
710 {IWL_PCI_DEVICE(0x43F0, 0x1210, iwl9260_2ac_cfg)}, 724 {IWL_PCI_DEVICE(0x43F0, 0x1210, iwl9260_2ac_cfg)},
725 {IWL_PCI_DEVICE(0x43F0, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
726 {IWL_PCI_DEVICE(0x43F0, 0x1552, iwl9560_killer_2ac_cfg_soc)},
711 {IWL_PCI_DEVICE(0x43F0, 0x2030, iwl9560_2ac_cfg_soc)}, 727 {IWL_PCI_DEVICE(0x43F0, 0x2030, iwl9560_2ac_cfg_soc)},
712 {IWL_PCI_DEVICE(0x43F0, 0x2034, iwl9560_2ac_cfg_soc)}, 728 {IWL_PCI_DEVICE(0x43F0, 0x2034, iwl9560_2ac_cfg_soc)},
713 {IWL_PCI_DEVICE(0x43F0, 0x4030, iwl9560_2ac_cfg_soc)}, 729 {IWL_PCI_DEVICE(0x43F0, 0x4030, iwl9560_2ac_cfg_soc)},
@@ -743,6 +759,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
743 {IWL_PCI_DEVICE(0x9DF0, 0x1010, iwl9260_2ac_cfg)}, 759 {IWL_PCI_DEVICE(0x9DF0, 0x1010, iwl9260_2ac_cfg)},
744 {IWL_PCI_DEVICE(0x9DF0, 0x1030, iwl9560_2ac_cfg_soc)}, 760 {IWL_PCI_DEVICE(0x9DF0, 0x1030, iwl9560_2ac_cfg_soc)},
745 {IWL_PCI_DEVICE(0x9DF0, 0x1210, iwl9260_2ac_cfg)}, 761 {IWL_PCI_DEVICE(0x9DF0, 0x1210, iwl9260_2ac_cfg)},
762 {IWL_PCI_DEVICE(0x9DF0, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
763 {IWL_PCI_DEVICE(0x9DF0, 0x1552, iwl9560_killer_2ac_cfg_soc)},
746 {IWL_PCI_DEVICE(0x9DF0, 0x2010, iwl9460_2ac_cfg_soc)}, 764 {IWL_PCI_DEVICE(0x9DF0, 0x2010, iwl9460_2ac_cfg_soc)},
747 {IWL_PCI_DEVICE(0x9DF0, 0x2030, iwl9560_2ac_cfg_soc)}, 765 {IWL_PCI_DEVICE(0x9DF0, 0x2030, iwl9560_2ac_cfg_soc)},
748 {IWL_PCI_DEVICE(0x9DF0, 0x2034, iwl9560_2ac_cfg_soc)}, 766 {IWL_PCI_DEVICE(0x9DF0, 0x2034, iwl9560_2ac_cfg_soc)},
@@ -771,6 +789,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
771 {IWL_PCI_DEVICE(0xA0F0, 0x1010, iwl9260_2ac_cfg)}, 789 {IWL_PCI_DEVICE(0xA0F0, 0x1010, iwl9260_2ac_cfg)},
772 {IWL_PCI_DEVICE(0xA0F0, 0x1030, iwl9560_2ac_cfg_soc)}, 790 {IWL_PCI_DEVICE(0xA0F0, 0x1030, iwl9560_2ac_cfg_soc)},
773 {IWL_PCI_DEVICE(0xA0F0, 0x1210, iwl9260_2ac_cfg)}, 791 {IWL_PCI_DEVICE(0xA0F0, 0x1210, iwl9260_2ac_cfg)},
792 {IWL_PCI_DEVICE(0xA0F0, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
793 {IWL_PCI_DEVICE(0xA0F0, 0x1552, iwl9560_killer_2ac_cfg_soc)},
774 {IWL_PCI_DEVICE(0xA0F0, 0x2030, iwl9560_2ac_cfg_soc)}, 794 {IWL_PCI_DEVICE(0xA0F0, 0x2030, iwl9560_2ac_cfg_soc)},
775 {IWL_PCI_DEVICE(0xA0F0, 0x2034, iwl9560_2ac_cfg_soc)}, 795 {IWL_PCI_DEVICE(0xA0F0, 0x2034, iwl9560_2ac_cfg_soc)},
776 {IWL_PCI_DEVICE(0xA0F0, 0x4030, iwl9560_2ac_cfg_soc)}, 796 {IWL_PCI_DEVICE(0xA0F0, 0x4030, iwl9560_2ac_cfg_soc)},
@@ -797,6 +817,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
797 {IWL_PCI_DEVICE(0xA370, 0x1010, iwl9260_2ac_cfg)}, 817 {IWL_PCI_DEVICE(0xA370, 0x1010, iwl9260_2ac_cfg)},
798 {IWL_PCI_DEVICE(0xA370, 0x1030, iwl9560_2ac_cfg_soc)}, 818 {IWL_PCI_DEVICE(0xA370, 0x1030, iwl9560_2ac_cfg_soc)},
799 {IWL_PCI_DEVICE(0xA370, 0x1210, iwl9260_2ac_cfg)}, 819 {IWL_PCI_DEVICE(0xA370, 0x1210, iwl9260_2ac_cfg)},
820 {IWL_PCI_DEVICE(0xA370, 0x1551, iwl9560_killer_s_2ac_cfg_soc)},
821 {IWL_PCI_DEVICE(0xA370, 0x1552, iwl9560_killer_2ac_cfg_soc)},
800 {IWL_PCI_DEVICE(0xA370, 0x2030, iwl9560_2ac_cfg_soc)}, 822 {IWL_PCI_DEVICE(0xA370, 0x2030, iwl9560_2ac_cfg_soc)},
801 {IWL_PCI_DEVICE(0xA370, 0x2034, iwl9560_2ac_cfg_soc)}, 823 {IWL_PCI_DEVICE(0xA370, 0x2034, iwl9560_2ac_cfg_soc)},
802 {IWL_PCI_DEVICE(0xA370, 0x4030, iwl9560_2ac_cfg_soc)}, 824 {IWL_PCI_DEVICE(0xA370, 0x4030, iwl9560_2ac_cfg_soc)},
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 1e3b6a6d8a40..732369c80644 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -1248,6 +1248,9 @@ int dsa_slave_suspend(struct net_device *slave_dev)
1248{ 1248{
1249 struct dsa_port *dp = dsa_slave_to_port(slave_dev); 1249 struct dsa_port *dp = dsa_slave_to_port(slave_dev);
1250 1250
1251 if (!netif_running(slave_dev))
1252 return 0;
1253
1251 netif_device_detach(slave_dev); 1254 netif_device_detach(slave_dev);
1252 1255
1253 rtnl_lock(); 1256 rtnl_lock();
@@ -1261,6 +1264,9 @@ int dsa_slave_resume(struct net_device *slave_dev)
1261{ 1264{
1262 struct dsa_port *dp = dsa_slave_to_port(slave_dev); 1265 struct dsa_port *dp = dsa_slave_to_port(slave_dev);
1263 1266
1267 if (!netif_running(slave_dev))
1268 return 0;
1269
1264 netif_device_attach(slave_dev); 1270 netif_device_attach(slave_dev);
1265 1271
1266 rtnl_lock(); 1272 rtnl_lock();
diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c
index 1e4cf3ab560f..0d70608cc2e1 100644
--- a/net/ipv4/inet_fragment.c
+++ b/net/ipv4/inet_fragment.c
@@ -157,9 +157,6 @@ static struct inet_frag_queue *inet_frag_alloc(struct netns_frags *nf,
157{ 157{
158 struct inet_frag_queue *q; 158 struct inet_frag_queue *q;
159 159
160 if (!nf->high_thresh || frag_mem_limit(nf) > nf->high_thresh)
161 return NULL;
162
163 q = kmem_cache_zalloc(f->frags_cachep, GFP_ATOMIC); 160 q = kmem_cache_zalloc(f->frags_cachep, GFP_ATOMIC);
164 if (!q) 161 if (!q)
165 return NULL; 162 return NULL;
@@ -204,6 +201,9 @@ struct inet_frag_queue *inet_frag_find(struct netns_frags *nf, void *key)
204{ 201{
205 struct inet_frag_queue *fq; 202 struct inet_frag_queue *fq;
206 203
204 if (!nf->high_thresh || frag_mem_limit(nf) > nf->high_thresh)
205 return NULL;
206
207 rcu_read_lock(); 207 rcu_read_lock();
208 208
209 fq = rhashtable_lookup(&nf->rhashtable, key, nf->f->rhash_params); 209 fq = rhashtable_lookup(&nf->rhashtable, key, nf->f->rhash_params);
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
index 8e9528ebaa8e..d14d741fb05e 100644
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -383,11 +383,16 @@ found:
383 int i = end - next->ip_defrag_offset; /* overlap is 'i' bytes */ 383 int i = end - next->ip_defrag_offset; /* overlap is 'i' bytes */
384 384
385 if (i < next->len) { 385 if (i < next->len) {
386 int delta = -next->truesize;
387
386 /* Eat head of the next overlapped fragment 388 /* Eat head of the next overlapped fragment
387 * and leave the loop. The next ones cannot overlap. 389 * and leave the loop. The next ones cannot overlap.
388 */ 390 */
389 if (!pskb_pull(next, i)) 391 if (!pskb_pull(next, i))
390 goto err; 392 goto err;
393 delta += next->truesize;
394 if (delta)
395 add_frag_mem_limit(qp->q.net, delta);
391 next->ip_defrag_offset += i; 396 next->ip_defrag_offset += i;
392 qp->q.meat -= i; 397 qp->q.meat -= i;
393 if (next->ip_summed != CHECKSUM_UNNECESSARY) 398 if (next->ip_summed != CHECKSUM_UNNECESSARY)
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index 211a2d437b56..d212738e9d10 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -167,22 +167,11 @@ struct fib6_info *fib6_info_alloc(gfp_t gfp_flags)
167 return f6i; 167 return f6i;
168} 168}
169 169
170static void fib6_metrics_release(struct fib6_info *f6i)
171{
172 struct dst_metrics *m;
173
174 if (!f6i)
175 return;
176
177 m = f6i->fib6_metrics;
178 if (m != &dst_default_metrics && refcount_dec_and_test(&m->refcnt))
179 kfree(m);
180}
181
182void fib6_info_destroy_rcu(struct rcu_head *head) 170void fib6_info_destroy_rcu(struct rcu_head *head)
183{ 171{
184 struct fib6_info *f6i = container_of(head, struct fib6_info, rcu); 172 struct fib6_info *f6i = container_of(head, struct fib6_info, rcu);
185 struct rt6_exception_bucket *bucket; 173 struct rt6_exception_bucket *bucket;
174 struct dst_metrics *m;
186 175
187 WARN_ON(f6i->fib6_node); 176 WARN_ON(f6i->fib6_node);
188 177
@@ -212,7 +201,9 @@ void fib6_info_destroy_rcu(struct rcu_head *head)
212 if (f6i->fib6_nh.nh_dev) 201 if (f6i->fib6_nh.nh_dev)
213 dev_put(f6i->fib6_nh.nh_dev); 202 dev_put(f6i->fib6_nh.nh_dev);
214 203
215 fib6_metrics_release(f6i); 204 m = f6i->fib6_metrics;
205 if (m != &dst_default_metrics && refcount_dec_and_test(&m->refcnt))
206 kfree(m);
216 207
217 kfree(f6i); 208 kfree(f6i);
218} 209}
@@ -896,7 +887,6 @@ static void fib6_drop_pcpu_from(struct fib6_info *f6i,
896 887
897 from = rcu_dereference_protected(pcpu_rt->from, 888 from = rcu_dereference_protected(pcpu_rt->from,
898 lockdep_is_held(&table->tb6_lock)); 889 lockdep_is_held(&table->tb6_lock));
899 fib6_metrics_release(from);
900 rcu_assign_pointer(pcpu_rt->from, NULL); 890 rcu_assign_pointer(pcpu_rt->from, NULL);
901 fib6_info_release(from); 891 fib6_info_release(from);
902 } 892 }
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 7d860a22e5fb..c09d16870f74 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -63,6 +63,7 @@
63#include <linux/hash.h> 63#include <linux/hash.h>
64#include <linux/genetlink.h> 64#include <linux/genetlink.h>
65#include <linux/net_namespace.h> 65#include <linux/net_namespace.h>
66#include <linux/nospec.h>
66 67
67#include <net/net_namespace.h> 68#include <net/net_namespace.h>
68#include <net/netns/generic.h> 69#include <net/netns/generic.h>
@@ -679,6 +680,7 @@ static int netlink_create(struct net *net, struct socket *sock, int protocol,
679 680
680 if (protocol < 0 || protocol >= MAX_LINKS) 681 if (protocol < 0 || protocol >= MAX_LINKS)
681 return -EPROTONOSUPPORT; 682 return -EPROTONOSUPPORT;
683 protocol = array_index_nospec(protocol, MAX_LINKS);
682 684
683 netlink_lock_table(); 685 netlink_lock_table();
684#ifdef CONFIG_MODULES 686#ifdef CONFIG_MODULES
diff --git a/net/rxrpc/call_accept.c b/net/rxrpc/call_accept.c
index a9a9be5519b9..9d1e298b784c 100644
--- a/net/rxrpc/call_accept.c
+++ b/net/rxrpc/call_accept.c
@@ -116,9 +116,9 @@ static int rxrpc_service_prealloc_one(struct rxrpc_sock *rx,
116 while (*pp) { 116 while (*pp) {
117 parent = *pp; 117 parent = *pp;
118 xcall = rb_entry(parent, struct rxrpc_call, sock_node); 118 xcall = rb_entry(parent, struct rxrpc_call, sock_node);
119 if (user_call_ID < call->user_call_ID) 119 if (user_call_ID < xcall->user_call_ID)
120 pp = &(*pp)->rb_left; 120 pp = &(*pp)->rb_left;
121 else if (user_call_ID > call->user_call_ID) 121 else if (user_call_ID > xcall->user_call_ID)
122 pp = &(*pp)->rb_right; 122 pp = &(*pp)->rb_right;
123 else 123 else
124 goto id_in_use; 124 goto id_in_use;