aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/bonding/bond_alb.c15
-rw-r--r--drivers/net/bonding/bond_main.c2
-rw-r--r--drivers/net/can/dev.c2
-rw-r--r--drivers/net/can/flexcan.c26
-rw-r--r--drivers/net/can/spi/hi311x.c11
-rw-r--r--drivers/net/can/usb/kvaser_usb.c2
-rw-r--r--drivers/net/dsa/mv88e6xxx/chip.c26
-rw-r--r--drivers/net/dsa/mv88e6xxx/chip.h1
-rw-r--r--drivers/net/dsa/mv88e6xxx/global2.c2
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_nic.c3
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_nic.h1
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c20
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c9
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c7
-rw-r--r--drivers/net/ethernet/intel/ice/ice_controlq.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c3
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_ethtool.c16
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_netdev.c8
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4_en.h7
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_tc.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/eq.c28
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/eswitch.c11
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/main.c8
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h2
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/core.c4
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/main.c19
-rw-r--r--drivers/net/ethernet/ni/nixge.c10
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_l2.c6
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_main.c2
-rw-r--r--drivers/net/ethernet/qlogic/qede/qede_rdma.c2
-rw-r--r--drivers/net/ethernet/realtek/r8169.c3
-rw-r--r--drivers/net/ethernet/sun/niu.c5
-rw-r--r--drivers/net/hyperv/netvsc_drv.c3
-rw-r--r--drivers/net/hyperv/rndis_filter.c2
-rw-r--r--drivers/net/ieee802154/atusb.c2
-rw-r--r--drivers/net/ieee802154/mcr20a.c15
-rw-r--r--drivers/net/phy/broadcom.c10
-rw-r--r--drivers/net/phy/sfp-bus.c2
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c1
41 files changed, 207 insertions, 99 deletions
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index 1ed9529e7bd1..5eb0df2e5464 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -450,7 +450,7 @@ static void rlb_update_client(struct rlb_client_info *client_info)
450{ 450{
451 int i; 451 int i;
452 452
453 if (!client_info->slave) 453 if (!client_info->slave || !is_valid_ether_addr(client_info->mac_dst))
454 return; 454 return;
455 455
456 for (i = 0; i < RLB_ARP_BURST_SIZE; i++) { 456 for (i = 0; i < RLB_ARP_BURST_SIZE; i++) {
@@ -943,6 +943,10 @@ static void alb_send_lp_vid(struct slave *slave, u8 mac_addr[],
943 skb->priority = TC_PRIO_CONTROL; 943 skb->priority = TC_PRIO_CONTROL;
944 skb->dev = slave->dev; 944 skb->dev = slave->dev;
945 945
946 netdev_dbg(slave->bond->dev,
947 "Send learning packet: dev %s mac %pM vlan %d\n",
948 slave->dev->name, mac_addr, vid);
949
946 if (vid) 950 if (vid)
947 __vlan_hwaccel_put_tag(skb, vlan_proto, vid); 951 __vlan_hwaccel_put_tag(skb, vlan_proto, vid);
948 952
@@ -965,14 +969,13 @@ static int alb_upper_dev_walk(struct net_device *upper, void *_data)
965 u8 *mac_addr = data->mac_addr; 969 u8 *mac_addr = data->mac_addr;
966 struct bond_vlan_tag *tags; 970 struct bond_vlan_tag *tags;
967 971
968 if (is_vlan_dev(upper) && vlan_get_encap_level(upper) == 0) { 972 if (is_vlan_dev(upper) &&
969 if (strict_match && 973 bond->nest_level == vlan_get_encap_level(upper) - 1) {
970 ether_addr_equal_64bits(mac_addr, 974 if (upper->addr_assign_type == NET_ADDR_STOLEN) {
971 upper->dev_addr)) {
972 alb_send_lp_vid(slave, mac_addr, 975 alb_send_lp_vid(slave, mac_addr,
973 vlan_dev_vlan_proto(upper), 976 vlan_dev_vlan_proto(upper),
974 vlan_dev_vlan_id(upper)); 977 vlan_dev_vlan_id(upper));
975 } else if (!strict_match) { 978 } else {
976 alb_send_lp_vid(slave, upper->dev_addr, 979 alb_send_lp_vid(slave, upper->dev_addr,
977 vlan_dev_vlan_proto(upper), 980 vlan_dev_vlan_proto(upper),
978 vlan_dev_vlan_id(upper)); 981 vlan_dev_vlan_id(upper));
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 718e4914e3a0..1f1e97b26f95 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1738,6 +1738,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
1738 if (bond_mode_uses_xmit_hash(bond)) 1738 if (bond_mode_uses_xmit_hash(bond))
1739 bond_update_slave_arr(bond, NULL); 1739 bond_update_slave_arr(bond, NULL);
1740 1740
1741 bond->nest_level = dev_get_nest_level(bond_dev);
1742
1741 netdev_info(bond_dev, "Enslaving %s as %s interface with %s link\n", 1743 netdev_info(bond_dev, "Enslaving %s as %s interface with %s link\n",
1742 slave_dev->name, 1744 slave_dev->name,
1743 bond_is_active_slave(new_slave) ? "an active" : "a backup", 1745 bond_is_active_slave(new_slave) ? "an active" : "a backup",
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index b1779566c5bb..3c71f1cb205f 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -605,7 +605,7 @@ void can_bus_off(struct net_device *dev)
605{ 605{
606 struct can_priv *priv = netdev_priv(dev); 606 struct can_priv *priv = netdev_priv(dev);
607 607
608 netdev_dbg(dev, "bus-off\n"); 608 netdev_info(dev, "bus-off\n");
609 609
610 netif_carrier_off(dev); 610 netif_carrier_off(dev);
611 611
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index 634c51e6b8ae..d53a45bf2a72 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c
@@ -200,6 +200,7 @@
200#define FLEXCAN_QUIRK_DISABLE_MECR BIT(4) /* Disable Memory error detection */ 200#define FLEXCAN_QUIRK_DISABLE_MECR BIT(4) /* Disable Memory error detection */
201#define FLEXCAN_QUIRK_USE_OFF_TIMESTAMP BIT(5) /* Use timestamp based offloading */ 201#define FLEXCAN_QUIRK_USE_OFF_TIMESTAMP BIT(5) /* Use timestamp based offloading */
202#define FLEXCAN_QUIRK_BROKEN_PERR_STATE BIT(6) /* No interrupt for error passive */ 202#define FLEXCAN_QUIRK_BROKEN_PERR_STATE BIT(6) /* No interrupt for error passive */
203#define FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN BIT(7) /* default to BE register access */
203 204
204/* Structure of the message buffer */ 205/* Structure of the message buffer */
205struct flexcan_mb { 206struct flexcan_mb {
@@ -288,6 +289,12 @@ struct flexcan_priv {
288 289
289static const struct flexcan_devtype_data fsl_p1010_devtype_data = { 290static const struct flexcan_devtype_data fsl_p1010_devtype_data = {
290 .quirks = FLEXCAN_QUIRK_BROKEN_WERR_STATE | 291 .quirks = FLEXCAN_QUIRK_BROKEN_WERR_STATE |
292 FLEXCAN_QUIRK_BROKEN_PERR_STATE |
293 FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN,
294};
295
296static const struct flexcan_devtype_data fsl_imx25_devtype_data = {
297 .quirks = FLEXCAN_QUIRK_BROKEN_WERR_STATE |
291 FLEXCAN_QUIRK_BROKEN_PERR_STATE, 298 FLEXCAN_QUIRK_BROKEN_PERR_STATE,
292}; 299};
293 300
@@ -1251,9 +1258,9 @@ static void unregister_flexcandev(struct net_device *dev)
1251static const struct of_device_id flexcan_of_match[] = { 1258static const struct of_device_id flexcan_of_match[] = {
1252 { .compatible = "fsl,imx6q-flexcan", .data = &fsl_imx6q_devtype_data, }, 1259 { .compatible = "fsl,imx6q-flexcan", .data = &fsl_imx6q_devtype_data, },
1253 { .compatible = "fsl,imx28-flexcan", .data = &fsl_imx28_devtype_data, }, 1260 { .compatible = "fsl,imx28-flexcan", .data = &fsl_imx28_devtype_data, },
1254 { .compatible = "fsl,imx53-flexcan", .data = &fsl_p1010_devtype_data, }, 1261 { .compatible = "fsl,imx53-flexcan", .data = &fsl_imx25_devtype_data, },
1255 { .compatible = "fsl,imx35-flexcan", .data = &fsl_p1010_devtype_data, }, 1262 { .compatible = "fsl,imx35-flexcan", .data = &fsl_imx25_devtype_data, },
1256 { .compatible = "fsl,imx25-flexcan", .data = &fsl_p1010_devtype_data, }, 1263 { .compatible = "fsl,imx25-flexcan", .data = &fsl_imx25_devtype_data, },
1257 { .compatible = "fsl,p1010-flexcan", .data = &fsl_p1010_devtype_data, }, 1264 { .compatible = "fsl,p1010-flexcan", .data = &fsl_p1010_devtype_data, },
1258 { .compatible = "fsl,vf610-flexcan", .data = &fsl_vf610_devtype_data, }, 1265 { .compatible = "fsl,vf610-flexcan", .data = &fsl_vf610_devtype_data, },
1259 { .compatible = "fsl,ls1021ar2-flexcan", .data = &fsl_ls1021a_r2_devtype_data, }, 1266 { .compatible = "fsl,ls1021ar2-flexcan", .data = &fsl_ls1021a_r2_devtype_data, },
@@ -1337,18 +1344,13 @@ static int flexcan_probe(struct platform_device *pdev)
1337 1344
1338 priv = netdev_priv(dev); 1345 priv = netdev_priv(dev);
1339 1346
1340 if (of_property_read_bool(pdev->dev.of_node, "big-endian")) { 1347 if (of_property_read_bool(pdev->dev.of_node, "big-endian") ||
1348 devtype_data->quirks & FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN) {
1341 priv->read = flexcan_read_be; 1349 priv->read = flexcan_read_be;
1342 priv->write = flexcan_write_be; 1350 priv->write = flexcan_write_be;
1343 } else { 1351 } else {
1344 if (of_device_is_compatible(pdev->dev.of_node, 1352 priv->read = flexcan_read_le;
1345 "fsl,p1010-flexcan")) { 1353 priv->write = flexcan_write_le;
1346 priv->read = flexcan_read_be;
1347 priv->write = flexcan_write_be;
1348 } else {
1349 priv->read = flexcan_read_le;
1350 priv->write = flexcan_write_le;
1351 }
1352 } 1354 }
1353 1355
1354 priv->can.clock.freq = clock_freq; 1356 priv->can.clock.freq = clock_freq;
diff --git a/drivers/net/can/spi/hi311x.c b/drivers/net/can/spi/hi311x.c
index 5590c559a8ca..53e320c92a8b 100644
--- a/drivers/net/can/spi/hi311x.c
+++ b/drivers/net/can/spi/hi311x.c
@@ -91,6 +91,7 @@
91#define HI3110_STAT_BUSOFF BIT(2) 91#define HI3110_STAT_BUSOFF BIT(2)
92#define HI3110_STAT_ERRP BIT(3) 92#define HI3110_STAT_ERRP BIT(3)
93#define HI3110_STAT_ERRW BIT(4) 93#define HI3110_STAT_ERRW BIT(4)
94#define HI3110_STAT_TXMTY BIT(7)
94 95
95#define HI3110_BTR0_SJW_SHIFT 6 96#define HI3110_BTR0_SJW_SHIFT 6
96#define HI3110_BTR0_BRP_SHIFT 0 97#define HI3110_BTR0_BRP_SHIFT 0
@@ -427,8 +428,10 @@ static int hi3110_get_berr_counter(const struct net_device *net,
427 struct hi3110_priv *priv = netdev_priv(net); 428 struct hi3110_priv *priv = netdev_priv(net);
428 struct spi_device *spi = priv->spi; 429 struct spi_device *spi = priv->spi;
429 430
431 mutex_lock(&priv->hi3110_lock);
430 bec->txerr = hi3110_read(spi, HI3110_READ_TEC); 432 bec->txerr = hi3110_read(spi, HI3110_READ_TEC);
431 bec->rxerr = hi3110_read(spi, HI3110_READ_REC); 433 bec->rxerr = hi3110_read(spi, HI3110_READ_REC);
434 mutex_unlock(&priv->hi3110_lock);
432 435
433 return 0; 436 return 0;
434} 437}
@@ -735,10 +738,7 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
735 } 738 }
736 } 739 }
737 740
738 if (intf == 0) 741 if (priv->tx_len && statf & HI3110_STAT_TXMTY) {
739 break;
740
741 if (intf & HI3110_INT_TXCPLT) {
742 net->stats.tx_packets++; 742 net->stats.tx_packets++;
743 net->stats.tx_bytes += priv->tx_len - 1; 743 net->stats.tx_bytes += priv->tx_len - 1;
744 can_led_event(net, CAN_LED_EVENT_TX); 744 can_led_event(net, CAN_LED_EVENT_TX);
@@ -748,6 +748,9 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
748 } 748 }
749 netif_wake_queue(net); 749 netif_wake_queue(net);
750 } 750 }
751
752 if (intf == 0)
753 break;
751 } 754 }
752 mutex_unlock(&priv->hi3110_lock); 755 mutex_unlock(&priv->hi3110_lock);
753 return IRQ_HANDLED; 756 return IRQ_HANDLED;
diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c
index 63587b8e6825..daed57d3d209 100644
--- a/drivers/net/can/usb/kvaser_usb.c
+++ b/drivers/net/can/usb/kvaser_usb.c
@@ -1179,7 +1179,7 @@ static void kvaser_usb_rx_can_msg(const struct kvaser_usb *dev,
1179 1179
1180 skb = alloc_can_skb(priv->netdev, &cf); 1180 skb = alloc_can_skb(priv->netdev, &cf);
1181 if (!skb) { 1181 if (!skb) {
1182 stats->tx_dropped++; 1182 stats->rx_dropped++;
1183 return; 1183 return;
1184 } 1184 }
1185 1185
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 3d2091099f7f..5b4374f21d76 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -3370,6 +3370,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3370 .num_internal_phys = 5, 3370 .num_internal_phys = 5,
3371 .max_vid = 4095, 3371 .max_vid = 4095,
3372 .port_base_addr = 0x10, 3372 .port_base_addr = 0x10,
3373 .phy_base_addr = 0x0,
3373 .global1_addr = 0x1b, 3374 .global1_addr = 0x1b,
3374 .global2_addr = 0x1c, 3375 .global2_addr = 0x1c,
3375 .age_time_coeff = 15000, 3376 .age_time_coeff = 15000,
@@ -3391,6 +3392,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3391 .num_internal_phys = 0, 3392 .num_internal_phys = 0,
3392 .max_vid = 4095, 3393 .max_vid = 4095,
3393 .port_base_addr = 0x10, 3394 .port_base_addr = 0x10,
3395 .phy_base_addr = 0x0,
3394 .global1_addr = 0x1b, 3396 .global1_addr = 0x1b,
3395 .global2_addr = 0x1c, 3397 .global2_addr = 0x1c,
3396 .age_time_coeff = 15000, 3398 .age_time_coeff = 15000,
@@ -3410,6 +3412,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3410 .num_internal_phys = 8, 3412 .num_internal_phys = 8,
3411 .max_vid = 4095, 3413 .max_vid = 4095,
3412 .port_base_addr = 0x10, 3414 .port_base_addr = 0x10,
3415 .phy_base_addr = 0x0,
3413 .global1_addr = 0x1b, 3416 .global1_addr = 0x1b,
3414 .global2_addr = 0x1c, 3417 .global2_addr = 0x1c,
3415 .age_time_coeff = 15000, 3418 .age_time_coeff = 15000,
@@ -3431,6 +3434,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3431 .num_internal_phys = 5, 3434 .num_internal_phys = 5,
3432 .max_vid = 4095, 3435 .max_vid = 4095,
3433 .port_base_addr = 0x10, 3436 .port_base_addr = 0x10,
3437 .phy_base_addr = 0x0,
3434 .global1_addr = 0x1b, 3438 .global1_addr = 0x1b,
3435 .global2_addr = 0x1c, 3439 .global2_addr = 0x1c,
3436 .age_time_coeff = 15000, 3440 .age_time_coeff = 15000,
@@ -3452,6 +3456,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3452 .num_internal_phys = 0, 3456 .num_internal_phys = 0,
3453 .max_vid = 4095, 3457 .max_vid = 4095,
3454 .port_base_addr = 0x10, 3458 .port_base_addr = 0x10,
3459 .phy_base_addr = 0x0,
3455 .global1_addr = 0x1b, 3460 .global1_addr = 0x1b,
3456 .global2_addr = 0x1c, 3461 .global2_addr = 0x1c,
3457 .age_time_coeff = 15000, 3462 .age_time_coeff = 15000,
@@ -3472,6 +3477,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3472 .num_gpio = 11, 3477 .num_gpio = 11,
3473 .max_vid = 4095, 3478 .max_vid = 4095,
3474 .port_base_addr = 0x10, 3479 .port_base_addr = 0x10,
3480 .phy_base_addr = 0x10,
3475 .global1_addr = 0x1b, 3481 .global1_addr = 0x1b,
3476 .global2_addr = 0x1c, 3482 .global2_addr = 0x1c,
3477 .age_time_coeff = 3750, 3483 .age_time_coeff = 3750,
@@ -3493,6 +3499,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3493 .num_internal_phys = 5, 3499 .num_internal_phys = 5,
3494 .max_vid = 4095, 3500 .max_vid = 4095,
3495 .port_base_addr = 0x10, 3501 .port_base_addr = 0x10,
3502 .phy_base_addr = 0x0,
3496 .global1_addr = 0x1b, 3503 .global1_addr = 0x1b,
3497 .global2_addr = 0x1c, 3504 .global2_addr = 0x1c,
3498 .age_time_coeff = 15000, 3505 .age_time_coeff = 15000,
@@ -3514,6 +3521,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3514 .num_internal_phys = 0, 3521 .num_internal_phys = 0,
3515 .max_vid = 4095, 3522 .max_vid = 4095,
3516 .port_base_addr = 0x10, 3523 .port_base_addr = 0x10,
3524 .phy_base_addr = 0x0,
3517 .global1_addr = 0x1b, 3525 .global1_addr = 0x1b,
3518 .global2_addr = 0x1c, 3526 .global2_addr = 0x1c,
3519 .age_time_coeff = 15000, 3527 .age_time_coeff = 15000,
@@ -3535,6 +3543,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3535 .num_internal_phys = 5, 3543 .num_internal_phys = 5,
3536 .max_vid = 4095, 3544 .max_vid = 4095,
3537 .port_base_addr = 0x10, 3545 .port_base_addr = 0x10,
3546 .phy_base_addr = 0x0,
3538 .global1_addr = 0x1b, 3547 .global1_addr = 0x1b,
3539 .global2_addr = 0x1c, 3548 .global2_addr = 0x1c,
3540 .age_time_coeff = 15000, 3549 .age_time_coeff = 15000,
@@ -3557,6 +3566,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3557 .num_gpio = 15, 3566 .num_gpio = 15,
3558 .max_vid = 4095, 3567 .max_vid = 4095,
3559 .port_base_addr = 0x10, 3568 .port_base_addr = 0x10,
3569 .phy_base_addr = 0x0,
3560 .global1_addr = 0x1b, 3570 .global1_addr = 0x1b,
3561 .global2_addr = 0x1c, 3571 .global2_addr = 0x1c,
3562 .age_time_coeff = 15000, 3572 .age_time_coeff = 15000,
@@ -3578,6 +3588,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3578 .num_internal_phys = 5, 3588 .num_internal_phys = 5,
3579 .max_vid = 4095, 3589 .max_vid = 4095,
3580 .port_base_addr = 0x10, 3590 .port_base_addr = 0x10,
3591 .phy_base_addr = 0x0,
3581 .global1_addr = 0x1b, 3592 .global1_addr = 0x1b,
3582 .global2_addr = 0x1c, 3593 .global2_addr = 0x1c,
3583 .age_time_coeff = 15000, 3594 .age_time_coeff = 15000,
@@ -3600,6 +3611,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3600 .num_gpio = 15, 3611 .num_gpio = 15,
3601 .max_vid = 4095, 3612 .max_vid = 4095,
3602 .port_base_addr = 0x10, 3613 .port_base_addr = 0x10,
3614 .phy_base_addr = 0x0,
3603 .global1_addr = 0x1b, 3615 .global1_addr = 0x1b,
3604 .global2_addr = 0x1c, 3616 .global2_addr = 0x1c,
3605 .age_time_coeff = 15000, 3617 .age_time_coeff = 15000,
@@ -3621,6 +3633,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3621 .num_internal_phys = 0, 3633 .num_internal_phys = 0,
3622 .max_vid = 4095, 3634 .max_vid = 4095,
3623 .port_base_addr = 0x10, 3635 .port_base_addr = 0x10,
3636 .phy_base_addr = 0x0,
3624 .global1_addr = 0x1b, 3637 .global1_addr = 0x1b,
3625 .global2_addr = 0x1c, 3638 .global2_addr = 0x1c,
3626 .age_time_coeff = 15000, 3639 .age_time_coeff = 15000,
@@ -3641,6 +3654,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3641 .num_gpio = 16, 3654 .num_gpio = 16,
3642 .max_vid = 8191, 3655 .max_vid = 8191,
3643 .port_base_addr = 0x0, 3656 .port_base_addr = 0x0,
3657 .phy_base_addr = 0x0,
3644 .global1_addr = 0x1b, 3658 .global1_addr = 0x1b,
3645 .global2_addr = 0x1c, 3659 .global2_addr = 0x1c,
3646 .tag_protocol = DSA_TAG_PROTO_DSA, 3660 .tag_protocol = DSA_TAG_PROTO_DSA,
@@ -3663,6 +3677,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3663 .num_gpio = 16, 3677 .num_gpio = 16,
3664 .max_vid = 8191, 3678 .max_vid = 8191,
3665 .port_base_addr = 0x0, 3679 .port_base_addr = 0x0,
3680 .phy_base_addr = 0x0,
3666 .global1_addr = 0x1b, 3681 .global1_addr = 0x1b,
3667 .global2_addr = 0x1c, 3682 .global2_addr = 0x1c,
3668 .age_time_coeff = 3750, 3683 .age_time_coeff = 3750,
@@ -3684,6 +3699,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3684 .num_internal_phys = 11, 3699 .num_internal_phys = 11,
3685 .max_vid = 8191, 3700 .max_vid = 8191,
3686 .port_base_addr = 0x0, 3701 .port_base_addr = 0x0,
3702 .phy_base_addr = 0x0,
3687 .global1_addr = 0x1b, 3703 .global1_addr = 0x1b,
3688 .global2_addr = 0x1c, 3704 .global2_addr = 0x1c,
3689 .age_time_coeff = 3750, 3705 .age_time_coeff = 3750,
@@ -3707,6 +3723,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3707 .num_gpio = 15, 3723 .num_gpio = 15,
3708 .max_vid = 4095, 3724 .max_vid = 4095,
3709 .port_base_addr = 0x10, 3725 .port_base_addr = 0x10,
3726 .phy_base_addr = 0x0,
3710 .global1_addr = 0x1b, 3727 .global1_addr = 0x1b,
3711 .global2_addr = 0x1c, 3728 .global2_addr = 0x1c,
3712 .age_time_coeff = 15000, 3729 .age_time_coeff = 15000,
@@ -3730,6 +3747,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3730 .num_gpio = 16, 3747 .num_gpio = 16,
3731 .max_vid = 8191, 3748 .max_vid = 8191,
3732 .port_base_addr = 0x0, 3749 .port_base_addr = 0x0,
3750 .phy_base_addr = 0x0,
3733 .global1_addr = 0x1b, 3751 .global1_addr = 0x1b,
3734 .global2_addr = 0x1c, 3752 .global2_addr = 0x1c,
3735 .age_time_coeff = 3750, 3753 .age_time_coeff = 3750,
@@ -3753,6 +3771,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3753 .num_gpio = 15, 3771 .num_gpio = 15,
3754 .max_vid = 4095, 3772 .max_vid = 4095,
3755 .port_base_addr = 0x10, 3773 .port_base_addr = 0x10,
3774 .phy_base_addr = 0x0,
3756 .global1_addr = 0x1b, 3775 .global1_addr = 0x1b,
3757 .global2_addr = 0x1c, 3776 .global2_addr = 0x1c,
3758 .age_time_coeff = 15000, 3777 .age_time_coeff = 15000,
@@ -3776,6 +3795,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3776 .num_gpio = 15, 3795 .num_gpio = 15,
3777 .max_vid = 4095, 3796 .max_vid = 4095,
3778 .port_base_addr = 0x10, 3797 .port_base_addr = 0x10,
3798 .phy_base_addr = 0x0,
3779 .global1_addr = 0x1b, 3799 .global1_addr = 0x1b,
3780 .global2_addr = 0x1c, 3800 .global2_addr = 0x1c,
3781 .age_time_coeff = 15000, 3801 .age_time_coeff = 15000,
@@ -3798,6 +3818,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3798 .num_gpio = 11, 3818 .num_gpio = 11,
3799 .max_vid = 4095, 3819 .max_vid = 4095,
3800 .port_base_addr = 0x10, 3820 .port_base_addr = 0x10,
3821 .phy_base_addr = 0x10,
3801 .global1_addr = 0x1b, 3822 .global1_addr = 0x1b,
3802 .global2_addr = 0x1c, 3823 .global2_addr = 0x1c,
3803 .age_time_coeff = 3750, 3824 .age_time_coeff = 3750,
@@ -3820,6 +3841,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3820 .num_internal_phys = 5, 3841 .num_internal_phys = 5,
3821 .max_vid = 4095, 3842 .max_vid = 4095,
3822 .port_base_addr = 0x10, 3843 .port_base_addr = 0x10,
3844 .phy_base_addr = 0x0,
3823 .global1_addr = 0x1b, 3845 .global1_addr = 0x1b,
3824 .global2_addr = 0x1c, 3846 .global2_addr = 0x1c,
3825 .age_time_coeff = 15000, 3847 .age_time_coeff = 15000,
@@ -3841,6 +3863,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3841 .num_internal_phys = 5, 3863 .num_internal_phys = 5,
3842 .max_vid = 4095, 3864 .max_vid = 4095,
3843 .port_base_addr = 0x10, 3865 .port_base_addr = 0x10,
3866 .phy_base_addr = 0x0,
3844 .global1_addr = 0x1b, 3867 .global1_addr = 0x1b,
3845 .global2_addr = 0x1c, 3868 .global2_addr = 0x1c,
3846 .age_time_coeff = 15000, 3869 .age_time_coeff = 15000,
@@ -3863,6 +3886,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3863 .num_gpio = 15, 3886 .num_gpio = 15,
3864 .max_vid = 4095, 3887 .max_vid = 4095,
3865 .port_base_addr = 0x10, 3888 .port_base_addr = 0x10,
3889 .phy_base_addr = 0x0,
3866 .global1_addr = 0x1b, 3890 .global1_addr = 0x1b,
3867 .global2_addr = 0x1c, 3891 .global2_addr = 0x1c,
3868 .age_time_coeff = 15000, 3892 .age_time_coeff = 15000,
@@ -3885,6 +3909,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3885 .num_gpio = 16, 3909 .num_gpio = 16,
3886 .max_vid = 8191, 3910 .max_vid = 8191,
3887 .port_base_addr = 0x0, 3911 .port_base_addr = 0x0,
3912 .phy_base_addr = 0x0,
3888 .global1_addr = 0x1b, 3913 .global1_addr = 0x1b,
3889 .global2_addr = 0x1c, 3914 .global2_addr = 0x1c,
3890 .age_time_coeff = 3750, 3915 .age_time_coeff = 3750,
@@ -3907,6 +3932,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3907 .num_gpio = 16, 3932 .num_gpio = 16,
3908 .max_vid = 8191, 3933 .max_vid = 8191,
3909 .port_base_addr = 0x0, 3934 .port_base_addr = 0x0,
3935 .phy_base_addr = 0x0,
3910 .global1_addr = 0x1b, 3936 .global1_addr = 0x1b,
3911 .global2_addr = 0x1c, 3937 .global2_addr = 0x1c,
3912 .age_time_coeff = 3750, 3938 .age_time_coeff = 3750,
diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h
index 80490f66bc06..12b7f4649b25 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.h
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
@@ -114,6 +114,7 @@ struct mv88e6xxx_info {
114 unsigned int num_gpio; 114 unsigned int num_gpio;
115 unsigned int max_vid; 115 unsigned int max_vid;
116 unsigned int port_base_addr; 116 unsigned int port_base_addr;
117 unsigned int phy_base_addr;
117 unsigned int global1_addr; 118 unsigned int global1_addr;
118 unsigned int global2_addr; 119 unsigned int global2_addr;
119 unsigned int age_time_coeff; 120 unsigned int age_time_coeff;
diff --git a/drivers/net/dsa/mv88e6xxx/global2.c b/drivers/net/dsa/mv88e6xxx/global2.c
index 0ce627fded48..8d22d66d84b7 100644
--- a/drivers/net/dsa/mv88e6xxx/global2.c
+++ b/drivers/net/dsa/mv88e6xxx/global2.c
@@ -1118,7 +1118,7 @@ int mv88e6xxx_g2_irq_mdio_setup(struct mv88e6xxx_chip *chip,
1118 err = irq; 1118 err = irq;
1119 goto out; 1119 goto out;
1120 } 1120 }
1121 bus->irq[chip->info->port_base_addr + phy] = irq; 1121 bus->irq[chip->info->phy_base_addr + phy] = irq;
1122 } 1122 }
1123 return 0; 1123 return 0;
1124out: 1124out:
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
index 32f6d2e24d66..1a1a6380c128 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
@@ -95,6 +95,7 @@ void aq_nic_cfg_start(struct aq_nic_s *self)
95 /*rss rings */ 95 /*rss rings */
96 cfg->vecs = min(cfg->aq_hw_caps->vecs, AQ_CFG_VECS_DEF); 96 cfg->vecs = min(cfg->aq_hw_caps->vecs, AQ_CFG_VECS_DEF);
97 cfg->vecs = min(cfg->vecs, num_online_cpus()); 97 cfg->vecs = min(cfg->vecs, num_online_cpus());
98 cfg->vecs = min(cfg->vecs, self->irqvecs);
98 /* cfg->vecs should be power of 2 for RSS */ 99 /* cfg->vecs should be power of 2 for RSS */
99 if (cfg->vecs >= 8U) 100 if (cfg->vecs >= 8U)
100 cfg->vecs = 8U; 101 cfg->vecs = 8U;
@@ -246,6 +247,8 @@ void aq_nic_ndev_init(struct aq_nic_s *self)
246 247
247 self->ndev->hw_features |= aq_hw_caps->hw_features; 248 self->ndev->hw_features |= aq_hw_caps->hw_features;
248 self->ndev->features = aq_hw_caps->hw_features; 249 self->ndev->features = aq_hw_caps->hw_features;
250 self->ndev->vlan_features |= NETIF_F_HW_CSUM | NETIF_F_RXCSUM |
251 NETIF_F_RXHASH | NETIF_F_SG | NETIF_F_LRO;
249 self->ndev->priv_flags = aq_hw_caps->hw_priv_flags; 252 self->ndev->priv_flags = aq_hw_caps->hw_priv_flags;
250 self->ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE; 253 self->ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
251 254
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
index 219b550d1665..faa533a0ec47 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
@@ -80,6 +80,7 @@ struct aq_nic_s {
80 80
81 struct pci_dev *pdev; 81 struct pci_dev *pdev;
82 unsigned int msix_entry_mask; 82 unsigned int msix_entry_mask;
83 u32 irqvecs;
83}; 84};
84 85
85static inline struct device *aq_nic_get_dev(struct aq_nic_s *self) 86static inline struct device *aq_nic_get_dev(struct aq_nic_s *self)
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
index ecc6306f940f..a50e08bb4748 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
@@ -267,16 +267,16 @@ static int aq_pci_probe(struct pci_dev *pdev,
267 numvecs = min(numvecs, num_online_cpus()); 267 numvecs = min(numvecs, num_online_cpus());
268 /*enable interrupts */ 268 /*enable interrupts */
269#if !AQ_CFG_FORCE_LEGACY_INT 269#if !AQ_CFG_FORCE_LEGACY_INT
270 err = pci_alloc_irq_vectors(self->pdev, numvecs, numvecs, 270 numvecs = pci_alloc_irq_vectors(self->pdev, 1, numvecs,
271 PCI_IRQ_MSIX); 271 PCI_IRQ_MSIX | PCI_IRQ_MSI |
272 272 PCI_IRQ_LEGACY);
273 if (err < 0) { 273
274 err = pci_alloc_irq_vectors(self->pdev, 1, 1, 274 if (numvecs < 0) {
275 PCI_IRQ_MSI | PCI_IRQ_LEGACY); 275 err = numvecs;
276 if (err < 0) 276 goto err_hwinit;
277 goto err_hwinit;
278 } 277 }
279#endif 278#endif
279 self->irqvecs = numvecs;
280 280
281 /* net device init */ 281 /* net device init */
282 aq_nic_cfg_start(self); 282 aq_nic_cfg_start(self);
@@ -298,9 +298,9 @@ err_free_aq_hw:
298 kfree(self->aq_hw); 298 kfree(self->aq_hw);
299err_ioremap: 299err_ioremap:
300 free_netdev(ndev); 300 free_netdev(ndev);
301err_pci_func:
302 pci_release_regions(pdev);
303err_ndev: 301err_ndev:
302 pci_release_regions(pdev);
303err_pci_func:
304 pci_disable_device(pdev); 304 pci_disable_device(pdev);
305 return err; 305 return err;
306} 306}
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 08bbb639be1a..9f59b1270a7c 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -8733,14 +8733,15 @@ static void tg3_free_consistent(struct tg3 *tp)
8733 tg3_mem_rx_release(tp); 8733 tg3_mem_rx_release(tp);
8734 tg3_mem_tx_release(tp); 8734 tg3_mem_tx_release(tp);
8735 8735
8736 /* Protect tg3_get_stats64() from reading freed tp->hw_stats. */ 8736 /* tp->hw_stats can be referenced safely:
8737 tg3_full_lock(tp, 0); 8737 * 1. under rtnl_lock
8738 * 2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set.
8739 */
8738 if (tp->hw_stats) { 8740 if (tp->hw_stats) {
8739 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 8741 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8740 tp->hw_stats, tp->stats_mapping); 8742 tp->hw_stats, tp->stats_mapping);
8741 tp->hw_stats = NULL; 8743 tp->hw_stats = NULL;
8742 } 8744 }
8743 tg3_full_unlock(tp);
8744} 8745}
8745 8746
8746/* 8747/*
@@ -14178,7 +14179,7 @@ static void tg3_get_stats64(struct net_device *dev,
14178 struct tg3 *tp = netdev_priv(dev); 14179 struct tg3 *tp = netdev_priv(dev);
14179 14180
14180 spin_lock_bh(&tp->lock); 14181 spin_lock_bh(&tp->lock);
14181 if (!tp->hw_stats) { 14182 if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) {
14182 *stats = tp->net_stats_prev; 14183 *stats = tp->net_stats_prev;
14183 spin_unlock_bh(&tp->lock); 14184 spin_unlock_bh(&tp->lock);
14184 return; 14185 return;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 24d2865b8806..005283c7cdfe 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -3433,8 +3433,8 @@ static int adap_config_hma(struct adapter *adapter)
3433 sgl = adapter->hma.sgt->sgl; 3433 sgl = adapter->hma.sgt->sgl;
3434 node = dev_to_node(adapter->pdev_dev); 3434 node = dev_to_node(adapter->pdev_dev);
3435 for_each_sg(sgl, iter, sgt->orig_nents, i) { 3435 for_each_sg(sgl, iter, sgt->orig_nents, i) {
3436 newpage = alloc_pages_node(node, __GFP_NOWARN | GFP_KERNEL, 3436 newpage = alloc_pages_node(node, __GFP_NOWARN | GFP_KERNEL |
3437 page_order); 3437 __GFP_ZERO, page_order);
3438 if (!newpage) { 3438 if (!newpage) {
3439 dev_err(adapter->pdev_dev, 3439 dev_err(adapter->pdev_dev,
3440 "Not enough memory for HMA page allocation\n"); 3440 "Not enough memory for HMA page allocation\n");
@@ -5474,6 +5474,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5474 } 5474 }
5475 spin_lock_init(&adapter->mbox_lock); 5475 spin_lock_init(&adapter->mbox_lock);
5476 INIT_LIST_HEAD(&adapter->mlist.list); 5476 INIT_LIST_HEAD(&adapter->mlist.list);
5477 adapter->mbox_log->size = T4_OS_LOG_MBOX_CMDS;
5477 pci_set_drvdata(pdev, adapter); 5478 pci_set_drvdata(pdev, adapter);
5478 5479
5479 if (func != ent->driver_data) { 5480 if (func != ent->driver_data) {
@@ -5508,8 +5509,6 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5508 goto out_free_adapter; 5509 goto out_free_adapter;
5509 } 5510 }
5510 5511
5511 adapter->mbox_log->size = T4_OS_LOG_MBOX_CMDS;
5512
5513 /* PCI device has been enabled */ 5512 /* PCI device has been enabled */
5514 adapter->flags |= DEV_ENABLED; 5513 adapter->flags |= DEV_ENABLED;
5515 memset(adapter->chan_map, 0xff, sizeof(adapter->chan_map)); 5514 memset(adapter->chan_map, 0xff, sizeof(adapter->chan_map));
diff --git a/drivers/net/ethernet/intel/ice/ice_controlq.c b/drivers/net/ethernet/intel/ice/ice_controlq.c
index 5909a4407e38..7c511f144ed6 100644
--- a/drivers/net/ethernet/intel/ice/ice_controlq.c
+++ b/drivers/net/ethernet/intel/ice/ice_controlq.c
@@ -1014,10 +1014,10 @@ ice_clean_rq_elem(struct ice_hw *hw, struct ice_ctl_q_info *cq,
1014 desc = ICE_CTL_Q_DESC(cq->rq, ntc); 1014 desc = ICE_CTL_Q_DESC(cq->rq, ntc);
1015 desc_idx = ntc; 1015 desc_idx = ntc;
1016 1016
1017 cq->rq_last_status = (enum ice_aq_err)le16_to_cpu(desc->retval);
1017 flags = le16_to_cpu(desc->flags); 1018 flags = le16_to_cpu(desc->flags);
1018 if (flags & ICE_AQ_FLAG_ERR) { 1019 if (flags & ICE_AQ_FLAG_ERR) {
1019 ret_code = ICE_ERR_AQ_ERROR; 1020 ret_code = ICE_ERR_AQ_ERROR;
1020 cq->rq_last_status = (enum ice_aq_err)le16_to_cpu(desc->retval);
1021 ice_debug(hw, ICE_DBG_AQ_MSG, 1021 ice_debug(hw, ICE_DBG_AQ_MSG,
1022 "Control Receive Queue Event received with error 0x%x\n", 1022 "Control Receive Queue Event received with error 0x%x\n",
1023 cq->rq_last_status); 1023 cq->rq_last_status);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
index 68af127987bc..cead23e3db0c 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
@@ -943,8 +943,8 @@ err2:
943 kfree(ipsec->ip_tbl); 943 kfree(ipsec->ip_tbl);
944 kfree(ipsec->rx_tbl); 944 kfree(ipsec->rx_tbl);
945 kfree(ipsec->tx_tbl); 945 kfree(ipsec->tx_tbl);
946 kfree(ipsec);
946err1: 947err1:
947 kfree(adapter->ipsec);
948 netdev_err(adapter->netdev, "Unable to allocate memory for SA tables"); 948 netdev_err(adapter->netdev, "Unable to allocate memory for SA tables");
949} 949}
950 950
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
index 3123267dfba9..9592f3e3e42e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
@@ -3427,6 +3427,9 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
3427 hw->phy.sfp_setup_needed = false; 3427 hw->phy.sfp_setup_needed = false;
3428 } 3428 }
3429 3429
3430 if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
3431 return status;
3432
3430 /* Reset PHY */ 3433 /* Reset PHY */
3431 if (!hw->phy.reset_disable && hw->phy.ops.reset) 3434 if (!hw->phy.reset_disable && hw->phy.ops.reset)
3432 hw->phy.ops.reset(hw); 3435 hw->phy.ops.reset(hw);
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index e3d04f226d57..850f8af95e49 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -4137,7 +4137,7 @@ out_drop:
4137 return NETDEV_TX_OK; 4137 return NETDEV_TX_OK;
4138} 4138}
4139 4139
4140static int ixgbevf_xmit_frame(struct sk_buff *skb, struct net_device *netdev) 4140static netdev_tx_t ixgbevf_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
4141{ 4141{
4142 struct ixgbevf_adapter *adapter = netdev_priv(netdev); 4142 struct ixgbevf_adapter *adapter = netdev_priv(netdev);
4143 struct ixgbevf_ring *tx_ring; 4143 struct ixgbevf_ring *tx_ring;
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index a30a2e95d13f..f11b45001cad 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -1027,6 +1027,22 @@ static int mlx4_en_set_coalesce(struct net_device *dev,
1027 if (!coal->tx_max_coalesced_frames_irq) 1027 if (!coal->tx_max_coalesced_frames_irq)
1028 return -EINVAL; 1028 return -EINVAL;
1029 1029
1030 if (coal->tx_coalesce_usecs > MLX4_EN_MAX_COAL_TIME ||
1031 coal->rx_coalesce_usecs > MLX4_EN_MAX_COAL_TIME ||
1032 coal->rx_coalesce_usecs_low > MLX4_EN_MAX_COAL_TIME ||
1033 coal->rx_coalesce_usecs_high > MLX4_EN_MAX_COAL_TIME) {
1034 netdev_info(dev, "%s: maximum coalesce time supported is %d usecs\n",
1035 __func__, MLX4_EN_MAX_COAL_TIME);
1036 return -ERANGE;
1037 }
1038
1039 if (coal->tx_max_coalesced_frames > MLX4_EN_MAX_COAL_PKTS ||
1040 coal->rx_max_coalesced_frames > MLX4_EN_MAX_COAL_PKTS) {
1041 netdev_info(dev, "%s: maximum coalesced frames supported is %d\n",
1042 __func__, MLX4_EN_MAX_COAL_PKTS);
1043 return -ERANGE;
1044 }
1045
1030 priv->rx_frames = (coal->rx_max_coalesced_frames == 1046 priv->rx_frames = (coal->rx_max_coalesced_frames ==
1031 MLX4_EN_AUTO_CONF) ? 1047 MLX4_EN_AUTO_CONF) ?
1032 MLX4_EN_RX_COAL_TARGET : 1048 MLX4_EN_RX_COAL_TARGET :
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index e0adac4a9a19..9670b33fc9b1 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -3324,12 +3324,11 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
3324 MAX_TX_RINGS, GFP_KERNEL); 3324 MAX_TX_RINGS, GFP_KERNEL);
3325 if (!priv->tx_ring[t]) { 3325 if (!priv->tx_ring[t]) {
3326 err = -ENOMEM; 3326 err = -ENOMEM;
3327 goto err_free_tx; 3327 goto out;
3328 } 3328 }
3329 priv->tx_cq[t] = kzalloc(sizeof(struct mlx4_en_cq *) * 3329 priv->tx_cq[t] = kzalloc(sizeof(struct mlx4_en_cq *) *
3330 MAX_TX_RINGS, GFP_KERNEL); 3330 MAX_TX_RINGS, GFP_KERNEL);
3331 if (!priv->tx_cq[t]) { 3331 if (!priv->tx_cq[t]) {
3332 kfree(priv->tx_ring[t]);
3333 err = -ENOMEM; 3332 err = -ENOMEM;
3334 goto out; 3333 goto out;
3335 } 3334 }
@@ -3582,11 +3581,6 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
3582 3581
3583 return 0; 3582 return 0;
3584 3583
3585err_free_tx:
3586 while (t--) {
3587 kfree(priv->tx_ring[t]);
3588 kfree(priv->tx_cq[t]);
3589 }
3590out: 3584out:
3591 mlx4_en_destroy_netdev(dev); 3585 mlx4_en_destroy_netdev(dev);
3592 return err; 3586 return err;
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index f7c81133594f..ace6545f82e6 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -132,6 +132,9 @@
132#define MLX4_EN_TX_COAL_PKTS 16 132#define MLX4_EN_TX_COAL_PKTS 16
133#define MLX4_EN_TX_COAL_TIME 0x10 133#define MLX4_EN_TX_COAL_TIME 0x10
134 134
135#define MLX4_EN_MAX_COAL_PKTS U16_MAX
136#define MLX4_EN_MAX_COAL_TIME U16_MAX
137
135#define MLX4_EN_RX_RATE_LOW 400000 138#define MLX4_EN_RX_RATE_LOW 400000
136#define MLX4_EN_RX_COAL_TIME_LOW 0 139#define MLX4_EN_RX_COAL_TIME_LOW 0
137#define MLX4_EN_RX_RATE_HIGH 450000 140#define MLX4_EN_RX_RATE_HIGH 450000
@@ -552,8 +555,8 @@ struct mlx4_en_priv {
552 u16 rx_usecs_low; 555 u16 rx_usecs_low;
553 u32 pkt_rate_high; 556 u32 pkt_rate_high;
554 u16 rx_usecs_high; 557 u16 rx_usecs_high;
555 u16 sample_interval; 558 u32 sample_interval;
556 u16 adaptive_rx_coal; 559 u32 adaptive_rx_coal;
557 u32 msg_enable; 560 u32 msg_enable;
558 u32 loopback_ok; 561 u32 loopback_ok;
559 u32 validate_loopback; 562 u32 validate_loopback;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 3c534fc43400..b94276db3ce9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -1261,6 +1261,10 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
1261 f->mask); 1261 f->mask);
1262 addr_type = key->addr_type; 1262 addr_type = key->addr_type;
1263 1263
1264 /* the HW doesn't support frag first/later */
1265 if (mask->flags & FLOW_DIS_FIRST_FRAG)
1266 return -EOPNOTSUPP;
1267
1264 if (mask->flags & FLOW_DIS_IS_FRAGMENT) { 1268 if (mask->flags & FLOW_DIS_IS_FRAGMENT) {
1265 MLX5_SET(fte_match_set_lyr_2_4, headers_c, frag, 1); 1269 MLX5_SET(fte_match_set_lyr_2_4, headers_c, frag, 1);
1266 MLX5_SET(fte_match_set_lyr_2_4, headers_v, frag, 1270 MLX5_SET(fte_match_set_lyr_2_4, headers_v, frag,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
index c1c94974e16b..1814f803bd2c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
@@ -34,6 +34,9 @@
34#include <linux/module.h> 34#include <linux/module.h>
35#include <linux/mlx5/driver.h> 35#include <linux/mlx5/driver.h>
36#include <linux/mlx5/cmd.h> 36#include <linux/mlx5/cmd.h>
37#ifdef CONFIG_RFS_ACCEL
38#include <linux/cpu_rmap.h>
39#endif
37#include "mlx5_core.h" 40#include "mlx5_core.h"
38#include "fpga/core.h" 41#include "fpga/core.h"
39#include "eswitch.h" 42#include "eswitch.h"
@@ -923,3 +926,28 @@ int mlx5_core_eq_query(struct mlx5_core_dev *dev, struct mlx5_eq *eq,
923 MLX5_SET(query_eq_in, in, eq_number, eq->eqn); 926 MLX5_SET(query_eq_in, in, eq_number, eq->eqn);
924 return mlx5_cmd_exec(dev, in, sizeof(in), out, outlen); 927 return mlx5_cmd_exec(dev, in, sizeof(in), out, outlen);
925} 928}
929
930/* This function should only be called after mlx5_cmd_force_teardown_hca */
931void mlx5_core_eq_free_irqs(struct mlx5_core_dev *dev)
932{
933 struct mlx5_eq_table *table = &dev->priv.eq_table;
934 struct mlx5_eq *eq;
935
936#ifdef CONFIG_RFS_ACCEL
937 if (dev->rmap) {
938 free_irq_cpu_rmap(dev->rmap);
939 dev->rmap = NULL;
940 }
941#endif
942 list_for_each_entry(eq, &table->comp_eqs_list, list)
943 free_irq(eq->irqn, eq);
944
945 free_irq(table->pages_eq.irqn, &table->pages_eq);
946 free_irq(table->async_eq.irqn, &table->async_eq);
947 free_irq(table->cmd_eq.irqn, &table->cmd_eq);
948#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
949 if (MLX5_CAP_GEN(dev, pg))
950 free_irq(table->pfault_eq.irqn, &table->pfault_eq);
951#endif
952 pci_free_irq_vectors(dev->pdev);
953}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
index 332bc56306bf..1352d13eedb3 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
@@ -2175,26 +2175,35 @@ int mlx5_eswitch_get_vport_stats(struct mlx5_eswitch *esw,
2175 memset(vf_stats, 0, sizeof(*vf_stats)); 2175 memset(vf_stats, 0, sizeof(*vf_stats));
2176 vf_stats->rx_packets = 2176 vf_stats->rx_packets =
2177 MLX5_GET_CTR(out, received_eth_unicast.packets) + 2177 MLX5_GET_CTR(out, received_eth_unicast.packets) +
2178 MLX5_GET_CTR(out, received_ib_unicast.packets) +
2178 MLX5_GET_CTR(out, received_eth_multicast.packets) + 2179 MLX5_GET_CTR(out, received_eth_multicast.packets) +
2180 MLX5_GET_CTR(out, received_ib_multicast.packets) +
2179 MLX5_GET_CTR(out, received_eth_broadcast.packets); 2181 MLX5_GET_CTR(out, received_eth_broadcast.packets);
2180 2182
2181 vf_stats->rx_bytes = 2183 vf_stats->rx_bytes =
2182 MLX5_GET_CTR(out, received_eth_unicast.octets) + 2184 MLX5_GET_CTR(out, received_eth_unicast.octets) +
2185 MLX5_GET_CTR(out, received_ib_unicast.octets) +
2183 MLX5_GET_CTR(out, received_eth_multicast.octets) + 2186 MLX5_GET_CTR(out, received_eth_multicast.octets) +
2187 MLX5_GET_CTR(out, received_ib_multicast.octets) +
2184 MLX5_GET_CTR(out, received_eth_broadcast.octets); 2188 MLX5_GET_CTR(out, received_eth_broadcast.octets);
2185 2189
2186 vf_stats->tx_packets = 2190 vf_stats->tx_packets =
2187 MLX5_GET_CTR(out, transmitted_eth_unicast.packets) + 2191 MLX5_GET_CTR(out, transmitted_eth_unicast.packets) +
2192 MLX5_GET_CTR(out, transmitted_ib_unicast.packets) +
2188 MLX5_GET_CTR(out, transmitted_eth_multicast.packets) + 2193 MLX5_GET_CTR(out, transmitted_eth_multicast.packets) +
2194 MLX5_GET_CTR(out, transmitted_ib_multicast.packets) +
2189 MLX5_GET_CTR(out, transmitted_eth_broadcast.packets); 2195 MLX5_GET_CTR(out, transmitted_eth_broadcast.packets);
2190 2196
2191 vf_stats->tx_bytes = 2197 vf_stats->tx_bytes =
2192 MLX5_GET_CTR(out, transmitted_eth_unicast.octets) + 2198 MLX5_GET_CTR(out, transmitted_eth_unicast.octets) +
2199 MLX5_GET_CTR(out, transmitted_ib_unicast.octets) +
2193 MLX5_GET_CTR(out, transmitted_eth_multicast.octets) + 2200 MLX5_GET_CTR(out, transmitted_eth_multicast.octets) +
2201 MLX5_GET_CTR(out, transmitted_ib_multicast.octets) +
2194 MLX5_GET_CTR(out, transmitted_eth_broadcast.octets); 2202 MLX5_GET_CTR(out, transmitted_eth_broadcast.octets);
2195 2203
2196 vf_stats->multicast = 2204 vf_stats->multicast =
2197 MLX5_GET_CTR(out, received_eth_multicast.packets); 2205 MLX5_GET_CTR(out, received_eth_multicast.packets) +
2206 MLX5_GET_CTR(out, received_ib_multicast.packets);
2198 2207
2199 vf_stats->broadcast = 2208 vf_stats->broadcast =
2200 MLX5_GET_CTR(out, received_eth_broadcast.packets); 2209 MLX5_GET_CTR(out, received_eth_broadcast.packets);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index 63a8ea31601c..e2c465b0b3f8 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -1587,6 +1587,14 @@ static int mlx5_try_fast_unload(struct mlx5_core_dev *dev)
1587 1587
1588 mlx5_enter_error_state(dev, true); 1588 mlx5_enter_error_state(dev, true);
1589 1589
1590 /* Some platforms requiring freeing the IRQ's in the shutdown
1591 * flow. If they aren't freed they can't be allocated after
1592 * kexec. There is no need to cleanup the mlx5_core software
1593 * contexts.
1594 */
1595 mlx5_irq_clear_affinity_hints(dev);
1596 mlx5_core_eq_free_irqs(dev);
1597
1590 return 0; 1598 return 0;
1591} 1599}
1592 1600
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
index 7d001fe6e631..023882d9a22e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
@@ -128,6 +128,8 @@ int mlx5_core_eq_query(struct mlx5_core_dev *dev, struct mlx5_eq *eq,
128 u32 *out, int outlen); 128 u32 *out, int outlen);
129int mlx5_start_eqs(struct mlx5_core_dev *dev); 129int mlx5_start_eqs(struct mlx5_core_dev *dev);
130void mlx5_stop_eqs(struct mlx5_core_dev *dev); 130void mlx5_stop_eqs(struct mlx5_core_dev *dev);
131/* This function should only be called after mlx5_cmd_force_teardown_hca */
132void mlx5_core_eq_free_irqs(struct mlx5_core_dev *dev);
131struct mlx5_eq *mlx5_eqn2eq(struct mlx5_core_dev *dev, int eqn); 133struct mlx5_eq *mlx5_eqn2eq(struct mlx5_core_dev *dev, int eqn);
132u32 mlx5_eq_poll_irq_disabled(struct mlx5_eq *eq); 134u32 mlx5_eq_poll_irq_disabled(struct mlx5_eq *eq);
133void mlx5_cq_tasklet_cb(unsigned long data); 135void mlx5_cq_tasklet_cb(unsigned long data);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c
index 93ea56620a24..e13ac3b8dff7 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
@@ -1100,11 +1100,11 @@ err_emad_init:
1100err_alloc_lag_mapping: 1100err_alloc_lag_mapping:
1101 mlxsw_ports_fini(mlxsw_core); 1101 mlxsw_ports_fini(mlxsw_core);
1102err_ports_init: 1102err_ports_init:
1103 mlxsw_bus->fini(bus_priv);
1104err_bus_init:
1105 if (!reload) 1103 if (!reload)
1106 devlink_resources_unregister(devlink, NULL); 1104 devlink_resources_unregister(devlink, NULL);
1107err_register_resources: 1105err_register_resources:
1106 mlxsw_bus->fini(bus_priv);
1107err_bus_init:
1108 if (!reload) 1108 if (!reload)
1109 devlink_free(devlink); 1109 devlink_free(devlink);
1110err_devlink_alloc: 1110err_devlink_alloc:
diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.c b/drivers/net/ethernet/netronome/nfp/flower/main.c
index a997e34bcec2..84e3b9f5abb1 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/main.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/main.c
@@ -52,8 +52,6 @@
52 52
53#define NFP_FLOWER_ALLOWED_VER 0x0001000000010000UL 53#define NFP_FLOWER_ALLOWED_VER 0x0001000000010000UL
54 54
55#define NFP_FLOWER_FRAME_HEADROOM 158
56
57static const char *nfp_flower_extra_cap(struct nfp_app *app, struct nfp_net *nn) 55static const char *nfp_flower_extra_cap(struct nfp_app *app, struct nfp_net *nn)
58{ 56{
59 return "FLOWER"; 57 return "FLOWER";
@@ -559,22 +557,6 @@ static void nfp_flower_clean(struct nfp_app *app)
559 app->priv = NULL; 557 app->priv = NULL;
560} 558}
561 559
562static int
563nfp_flower_check_mtu(struct nfp_app *app, struct net_device *netdev,
564 int new_mtu)
565{
566 /* The flower fw reserves NFP_FLOWER_FRAME_HEADROOM bytes of the
567 * supported max MTU to allow for appending tunnel headers. To prevent
568 * unexpected behaviour this needs to be accounted for.
569 */
570 if (new_mtu > netdev->max_mtu - NFP_FLOWER_FRAME_HEADROOM) {
571 nfp_err(app->cpp, "New MTU (%d) is not valid\n", new_mtu);
572 return -EINVAL;
573 }
574
575 return 0;
576}
577
578static bool nfp_flower_check_ack(struct nfp_flower_priv *app_priv) 560static bool nfp_flower_check_ack(struct nfp_flower_priv *app_priv)
579{ 561{
580 bool ret; 562 bool ret;
@@ -656,7 +638,6 @@ const struct nfp_app_type app_flower = {
656 .init = nfp_flower_init, 638 .init = nfp_flower_init,
657 .clean = nfp_flower_clean, 639 .clean = nfp_flower_clean,
658 640
659 .check_mtu = nfp_flower_check_mtu,
660 .repr_change_mtu = nfp_flower_repr_change_mtu, 641 .repr_change_mtu = nfp_flower_repr_change_mtu,
661 642
662 .vnic_alloc = nfp_flower_vnic_alloc, 643 .vnic_alloc = nfp_flower_vnic_alloc,
diff --git a/drivers/net/ethernet/ni/nixge.c b/drivers/net/ethernet/ni/nixge.c
index 27364b7572fc..b092894dd128 100644
--- a/drivers/net/ethernet/ni/nixge.c
+++ b/drivers/net/ethernet/ni/nixge.c
@@ -1170,7 +1170,7 @@ static void *nixge_get_nvmem_address(struct device *dev)
1170 1170
1171 cell = nvmem_cell_get(dev, "address"); 1171 cell = nvmem_cell_get(dev, "address");
1172 if (IS_ERR(cell)) 1172 if (IS_ERR(cell))
1173 return cell; 1173 return NULL;
1174 1174
1175 mac = nvmem_cell_read(cell, &cell_size); 1175 mac = nvmem_cell_read(cell, &cell_size);
1176 nvmem_cell_put(cell); 1176 nvmem_cell_put(cell);
@@ -1183,7 +1183,7 @@ static int nixge_probe(struct platform_device *pdev)
1183 struct nixge_priv *priv; 1183 struct nixge_priv *priv;
1184 struct net_device *ndev; 1184 struct net_device *ndev;
1185 struct resource *dmares; 1185 struct resource *dmares;
1186 const char *mac_addr; 1186 const u8 *mac_addr;
1187 int err; 1187 int err;
1188 1188
1189 ndev = alloc_etherdev(sizeof(*priv)); 1189 ndev = alloc_etherdev(sizeof(*priv));
@@ -1202,10 +1202,12 @@ static int nixge_probe(struct platform_device *pdev)
1202 ndev->max_mtu = NIXGE_JUMBO_MTU; 1202 ndev->max_mtu = NIXGE_JUMBO_MTU;
1203 1203
1204 mac_addr = nixge_get_nvmem_address(&pdev->dev); 1204 mac_addr = nixge_get_nvmem_address(&pdev->dev);
1205 if (mac_addr && is_valid_ether_addr(mac_addr)) 1205 if (mac_addr && is_valid_ether_addr(mac_addr)) {
1206 ether_addr_copy(ndev->dev_addr, mac_addr); 1206 ether_addr_copy(ndev->dev_addr, mac_addr);
1207 else 1207 kfree(mac_addr);
1208 } else {
1208 eth_hw_addr_random(ndev); 1209 eth_hw_addr_random(ndev);
1210 }
1209 1211
1210 priv = netdev_priv(ndev); 1212 priv = netdev_priv(ndev);
1211 priv->ndev = ndev; 1213 priv->ndev = ndev;
diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c b/drivers/net/ethernet/qlogic/qed/qed_l2.c
index e874504e8b28..8667799d0069 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_l2.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c
@@ -115,8 +115,7 @@ int qed_l2_alloc(struct qed_hwfn *p_hwfn)
115 115
116void qed_l2_setup(struct qed_hwfn *p_hwfn) 116void qed_l2_setup(struct qed_hwfn *p_hwfn)
117{ 117{
118 if (p_hwfn->hw_info.personality != QED_PCI_ETH && 118 if (!QED_IS_L2_PERSONALITY(p_hwfn))
119 p_hwfn->hw_info.personality != QED_PCI_ETH_ROCE)
120 return; 119 return;
121 120
122 mutex_init(&p_hwfn->p_l2_info->lock); 121 mutex_init(&p_hwfn->p_l2_info->lock);
@@ -126,8 +125,7 @@ void qed_l2_free(struct qed_hwfn *p_hwfn)
126{ 125{
127 u32 i; 126 u32 i;
128 127
129 if (p_hwfn->hw_info.personality != QED_PCI_ETH && 128 if (!QED_IS_L2_PERSONALITY(p_hwfn))
130 p_hwfn->hw_info.personality != QED_PCI_ETH_ROCE)
131 return; 129 return;
132 130
133 if (!p_hwfn->p_l2_info) 131 if (!p_hwfn->p_l2_info)
diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index 9854aa9139af..7870ae2a6f7e 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -680,7 +680,7 @@ static int qed_nic_stop(struct qed_dev *cdev)
680 tasklet_disable(p_hwfn->sp_dpc); 680 tasklet_disable(p_hwfn->sp_dpc);
681 p_hwfn->b_sp_dpc_enabled = false; 681 p_hwfn->b_sp_dpc_enabled = false;
682 DP_VERBOSE(cdev, NETIF_MSG_IFDOWN, 682 DP_VERBOSE(cdev, NETIF_MSG_IFDOWN,
683 "Disabled sp taskelt [hwfn %d] at %p\n", 683 "Disabled sp tasklet [hwfn %d] at %p\n",
684 i, p_hwfn->sp_dpc); 684 i, p_hwfn->sp_dpc);
685 } 685 }
686 } 686 }
diff --git a/drivers/net/ethernet/qlogic/qede/qede_rdma.c b/drivers/net/ethernet/qlogic/qede/qede_rdma.c
index 50b142fad6b8..1900bf7e67d1 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_rdma.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_rdma.c
@@ -238,7 +238,7 @@ qede_rdma_get_free_event_node(struct qede_dev *edev)
238 } 238 }
239 239
240 if (!found) { 240 if (!found) {
241 event_node = kzalloc(sizeof(*event_node), GFP_KERNEL); 241 event_node = kzalloc(sizeof(*event_node), GFP_ATOMIC);
242 if (!event_node) { 242 if (!event_node) {
243 DP_NOTICE(edev, 243 DP_NOTICE(edev,
244 "qedr: Could not allocate memory for rdma work\n"); 244 "qedr: Could not allocate memory for rdma work\n");
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 604ae78381ae..c7aac1fc99e8 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -4981,6 +4981,9 @@ static void rtl_pll_power_down(struct rtl8169_private *tp)
4981static void rtl_pll_power_up(struct rtl8169_private *tp) 4981static void rtl_pll_power_up(struct rtl8169_private *tp)
4982{ 4982{
4983 rtl_generic_op(tp, tp->pll_power_ops.up); 4983 rtl_generic_op(tp, tp->pll_power_ops.up);
4984
4985 /* give MAC/PHY some time to resume */
4986 msleep(20);
4984} 4987}
4985 4988
4986static void rtl_init_pll_power_ops(struct rtl8169_private *tp) 4989static void rtl_init_pll_power_ops(struct rtl8169_private *tp)
diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index f081de4f38d7..88c12474a0c3 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
@@ -3443,7 +3443,7 @@ static int niu_process_rx_pkt(struct napi_struct *napi, struct niu *np,
3443 3443
3444 len = (val & RCR_ENTRY_L2_LEN) >> 3444 len = (val & RCR_ENTRY_L2_LEN) >>
3445 RCR_ENTRY_L2_LEN_SHIFT; 3445 RCR_ENTRY_L2_LEN_SHIFT;
3446 len -= ETH_FCS_LEN; 3446 append_size = len + ETH_HLEN + ETH_FCS_LEN;
3447 3447
3448 addr = (val & RCR_ENTRY_PKT_BUF_ADDR) << 3448 addr = (val & RCR_ENTRY_PKT_BUF_ADDR) <<
3449 RCR_ENTRY_PKT_BUF_ADDR_SHIFT; 3449 RCR_ENTRY_PKT_BUF_ADDR_SHIFT;
@@ -3453,7 +3453,6 @@ static int niu_process_rx_pkt(struct napi_struct *napi, struct niu *np,
3453 RCR_ENTRY_PKTBUFSZ_SHIFT]; 3453 RCR_ENTRY_PKTBUFSZ_SHIFT];
3454 3454
3455 off = addr & ~PAGE_MASK; 3455 off = addr & ~PAGE_MASK;
3456 append_size = rcr_size;
3457 if (num_rcr == 1) { 3456 if (num_rcr == 1) {
3458 int ptype; 3457 int ptype;
3459 3458
@@ -3466,7 +3465,7 @@ static int niu_process_rx_pkt(struct napi_struct *napi, struct niu *np,
3466 else 3465 else
3467 skb_checksum_none_assert(skb); 3466 skb_checksum_none_assert(skb);
3468 } else if (!(val & RCR_ENTRY_MULTI)) 3467 } else if (!(val & RCR_ENTRY_MULTI))
3469 append_size = len - skb->len; 3468 append_size = append_size - skb->len;
3470 3469
3471 niu_rx_skb_append(skb, page, off, append_size, rcr_size); 3470 niu_rx_skb_append(skb, page, off, append_size, rcr_size);
3472 if ((page->index + rp->rbr_block_size) - rcr_size == addr) { 3471 if ((page->index + rp->rbr_block_size) - rcr_size == addr) {
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index ecc84954c511..da07ccdf84bf 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1840,7 +1840,8 @@ static int netvsc_vf_join(struct net_device *vf_netdev,
1840 goto rx_handler_failed; 1840 goto rx_handler_failed;
1841 } 1841 }
1842 1842
1843 ret = netdev_upper_dev_link(vf_netdev, ndev, NULL); 1843 ret = netdev_master_upper_dev_link(vf_netdev, ndev,
1844 NULL, NULL, NULL);
1844 if (ret != 0) { 1845 if (ret != 0) {
1845 netdev_err(vf_netdev, 1846 netdev_err(vf_netdev,
1846 "can not set master device %s (err = %d)\n", 1847 "can not set master device %s (err = %d)\n",
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index 6b127be781d9..e7ca5b5f39ed 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -1288,7 +1288,7 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
1288 rndis_device->link_state ? "down" : "up"); 1288 rndis_device->link_state ? "down" : "up");
1289 1289
1290 if (net_device->nvsp_version < NVSP_PROTOCOL_VERSION_5) 1290 if (net_device->nvsp_version < NVSP_PROTOCOL_VERSION_5)
1291 return net_device; 1291 goto out;
1292 1292
1293 rndis_filter_query_link_speed(rndis_device, net_device); 1293 rndis_filter_query_link_speed(rndis_device, net_device);
1294 1294
diff --git a/drivers/net/ieee802154/atusb.c b/drivers/net/ieee802154/atusb.c
index 9fb9b565a002..4f684cbcdc57 100644
--- a/drivers/net/ieee802154/atusb.c
+++ b/drivers/net/ieee802154/atusb.c
@@ -1045,7 +1045,7 @@ static int atusb_probe(struct usb_interface *interface,
1045 atusb->tx_dr.bRequest = ATUSB_TX; 1045 atusb->tx_dr.bRequest = ATUSB_TX;
1046 atusb->tx_dr.wValue = cpu_to_le16(0); 1046 atusb->tx_dr.wValue = cpu_to_le16(0);
1047 1047
1048 atusb->tx_urb = usb_alloc_urb(0, GFP_ATOMIC); 1048 atusb->tx_urb = usb_alloc_urb(0, GFP_KERNEL);
1049 if (!atusb->tx_urb) 1049 if (!atusb->tx_urb)
1050 goto fail; 1050 goto fail;
1051 1051
diff --git a/drivers/net/ieee802154/mcr20a.c b/drivers/net/ieee802154/mcr20a.c
index 55a22c761808..de0d7f28a181 100644
--- a/drivers/net/ieee802154/mcr20a.c
+++ b/drivers/net/ieee802154/mcr20a.c
@@ -1267,7 +1267,7 @@ mcr20a_probe(struct spi_device *spi)
1267 ret = mcr20a_get_platform_data(spi, pdata); 1267 ret = mcr20a_get_platform_data(spi, pdata);
1268 if (ret < 0) { 1268 if (ret < 0) {
1269 dev_crit(&spi->dev, "mcr20a_get_platform_data failed.\n"); 1269 dev_crit(&spi->dev, "mcr20a_get_platform_data failed.\n");
1270 return ret; 1270 goto free_pdata;
1271 } 1271 }
1272 1272
1273 /* init reset gpio */ 1273 /* init reset gpio */
@@ -1275,7 +1275,7 @@ mcr20a_probe(struct spi_device *spi)
1275 ret = devm_gpio_request_one(&spi->dev, pdata->rst_gpio, 1275 ret = devm_gpio_request_one(&spi->dev, pdata->rst_gpio,
1276 GPIOF_OUT_INIT_HIGH, "reset"); 1276 GPIOF_OUT_INIT_HIGH, "reset");
1277 if (ret) 1277 if (ret)
1278 return ret; 1278 goto free_pdata;
1279 } 1279 }
1280 1280
1281 /* reset mcr20a */ 1281 /* reset mcr20a */
@@ -1291,7 +1291,8 @@ mcr20a_probe(struct spi_device *spi)
1291 hw = ieee802154_alloc_hw(sizeof(*lp), &mcr20a_hw_ops); 1291 hw = ieee802154_alloc_hw(sizeof(*lp), &mcr20a_hw_ops);
1292 if (!hw) { 1292 if (!hw) {
1293 dev_crit(&spi->dev, "ieee802154_alloc_hw failed\n"); 1293 dev_crit(&spi->dev, "ieee802154_alloc_hw failed\n");
1294 return -ENOMEM; 1294 ret = -ENOMEM;
1295 goto free_pdata;
1295 } 1296 }
1296 1297
1297 /* init mcr20a local data */ 1298 /* init mcr20a local data */
@@ -1308,8 +1309,10 @@ mcr20a_probe(struct spi_device *spi)
1308 /* init buf */ 1309 /* init buf */
1309 lp->buf = devm_kzalloc(&spi->dev, SPI_COMMAND_BUFFER, GFP_KERNEL); 1310 lp->buf = devm_kzalloc(&spi->dev, SPI_COMMAND_BUFFER, GFP_KERNEL);
1310 1311
1311 if (!lp->buf) 1312 if (!lp->buf) {
1312 return -ENOMEM; 1313 ret = -ENOMEM;
1314 goto free_dev;
1315 }
1313 1316
1314 mcr20a_setup_tx_spi_messages(lp); 1317 mcr20a_setup_tx_spi_messages(lp);
1315 mcr20a_setup_rx_spi_messages(lp); 1318 mcr20a_setup_rx_spi_messages(lp);
@@ -1366,6 +1369,8 @@ mcr20a_probe(struct spi_device *spi)
1366 1369
1367free_dev: 1370free_dev:
1368 ieee802154_free_hw(lp->hw); 1371 ieee802154_free_hw(lp->hw);
1372free_pdata:
1373 kfree(pdata);
1369 1374
1370 return ret; 1375 return ret;
1371} 1376}
diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c
index 3bb6b66dc7bf..f9c25912eb98 100644
--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
@@ -720,6 +720,15 @@ static struct phy_driver broadcom_drivers[] = {
720 .get_strings = bcm_phy_get_strings, 720 .get_strings = bcm_phy_get_strings,
721 .get_stats = bcm53xx_phy_get_stats, 721 .get_stats = bcm53xx_phy_get_stats,
722 .probe = bcm53xx_phy_probe, 722 .probe = bcm53xx_phy_probe,
723}, {
724 .phy_id = PHY_ID_BCM89610,
725 .phy_id_mask = 0xfffffff0,
726 .name = "Broadcom BCM89610",
727 .features = PHY_GBIT_FEATURES,
728 .flags = PHY_HAS_INTERRUPT,
729 .config_init = bcm54xx_config_init,
730 .ack_interrupt = bcm_phy_ack_intr,
731 .config_intr = bcm_phy_config_intr,
723} }; 732} };
724 733
725module_phy_driver(broadcom_drivers); 734module_phy_driver(broadcom_drivers);
@@ -741,6 +750,7 @@ static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
741 { PHY_ID_BCMAC131, 0xfffffff0 }, 750 { PHY_ID_BCMAC131, 0xfffffff0 },
742 { PHY_ID_BCM5241, 0xfffffff0 }, 751 { PHY_ID_BCM5241, 0xfffffff0 },
743 { PHY_ID_BCM5395, 0xfffffff0 }, 752 { PHY_ID_BCM5395, 0xfffffff0 },
753 { PHY_ID_BCM89610, 0xfffffff0 },
744 { } 754 { }
745}; 755};
746 756
diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c
index 0381da78d228..fd6c23f69c2f 100644
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
@@ -125,7 +125,7 @@ void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
125 if (id->base.br_nominal) { 125 if (id->base.br_nominal) {
126 if (id->base.br_nominal != 255) { 126 if (id->base.br_nominal != 255) {
127 br_nom = id->base.br_nominal * 100; 127 br_nom = id->base.br_nominal * 100;
128 br_min = br_nom + id->base.br_nominal * id->ext.br_min; 128 br_min = br_nom - id->base.br_nominal * id->ext.br_min;
129 br_max = br_nom + id->base.br_nominal * id->ext.br_max; 129 br_max = br_nom + id->base.br_nominal * id->ext.br_max;
130 } else if (id->ext.br_max) { 130 } else if (id->ext.br_max) {
131 br_nom = 250 * id->ext.br_max; 131 br_nom = 250 * id->ext.br_max;
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 96d26cfae90b..4a017a0d71ea 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -3236,6 +3236,7 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
3236 GENL_SET_ERR_MSG(info,"MAC is no valid source addr"); 3236 GENL_SET_ERR_MSG(info,"MAC is no valid source addr");
3237 NL_SET_BAD_ATTR(info->extack, 3237 NL_SET_BAD_ATTR(info->extack,
3238 info->attrs[HWSIM_ATTR_PERM_ADDR]); 3238 info->attrs[HWSIM_ATTR_PERM_ADDR]);
3239 kfree(hwname);
3239 return -EINVAL; 3240 return -EINVAL;
3240 } 3241 }
3241 3242