Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdec4196 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull networking fixes from David Miller:
 "Just a pile of random fixes, including:

   1) Do not apply TSO limits to non-TSO packets, fix from Herbert Xu.

   2) MDI{,X} eeprom check in e100 driver is reversed, from John W.
      Linville.

   3) Missing error return assignments in several ethernet drivers, from
      Julia Lawall.

   4) Altera TSE device doesn't come back up after ifconfig down/up
      sequence, fix from Kostya Belezko.

   5) Add more cases to the check for whether the qmi_wwan device has a
      bogus MAC address and needs to be assigned a random one.  From
      Kristian Evensen.

   6) Fix interrupt hangs in CPSW, from Felipe Balbi.

   7) Implement ndo_features_check in r8152 so that the stack doesn't
      feed GSO packets which are outside of the chip's capabilities.
      From Hayes Wang"

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (26 commits)
  qla3xxx: don't allow never end busy loop
  xen-netback: fixing the propagation of the transmit shaper timeout
  r8152: support ndo_features_check
  batman-adv: fix potential TT client + orig-node memory leak
  batman-adv: fix multicast counter when purging originators
  batman-adv: fix counter for multicast supporting nodes
  batman-adv: fix lock class for decoding hash in network-coding.c
  batman-adv: fix delayed foreign originator recognition
  batman-adv: fix and simplify condition when bonding should be used
  Revert "mac80211: Fix accounting of the tailroom-needed counter"
  net: ethernet: cpsw: fix hangs with interrupts
  enic: free all rq buffs when allocation fails
  qmi_wwan: Set random MAC on devices with buggy fw
  openvswitch: Consistently include VLAN header in flow and port stats.
  tcp: Do not apply TSO segment limit to non-TSO packets
  Altera TSE: Add missing phydev
  net/mlx4_core: Fix error flow in mlx4_init_hca()
  net/mlx4_core: Correcly update the mtt's offset in the MR re-reg flow
  qlcnic: Fix return value in qlcnic_probe()
  net: axienet: fix error return code
  ...
parents 0adc1803 2abad79a
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -850,8 +850,10 @@ static int emac_probe(struct platform_device *pdev)
	}
	}


	db->clk = devm_clk_get(&pdev->dev, NULL);
	db->clk = devm_clk_get(&pdev->dev, NULL);
	if (IS_ERR(db->clk))
	if (IS_ERR(db->clk)) {
		ret = PTR_ERR(db->clk);
		goto out;
		goto out;
	}


	clk_prepare_enable(db->clk);
	clk_prepare_enable(db->clk);


+6 −9
Original line number Original line Diff line number Diff line
@@ -1170,10 +1170,6 @@ static int tse_open(struct net_device *dev)
init_error:
init_error:
	free_skbufs(dev);
	free_skbufs(dev);
alloc_skbuf_error:
alloc_skbuf_error:
	if (priv->phydev) {
		phy_disconnect(priv->phydev);
		priv->phydev = NULL;
	}
phy_error:
phy_error:
	return ret;
	return ret;
}
}
@@ -1186,12 +1182,9 @@ static int tse_shutdown(struct net_device *dev)
	int ret;
	int ret;
	unsigned long int flags;
	unsigned long int flags;


	/* Stop and disconnect the PHY */
	/* Stop the PHY */
	if (priv->phydev) {
	if (priv->phydev)
		phy_stop(priv->phydev);
		phy_stop(priv->phydev);
		phy_disconnect(priv->phydev);
		priv->phydev = NULL;
	}


	netif_stop_queue(dev);
	netif_stop_queue(dev);
	napi_disable(&priv->napi);
	napi_disable(&priv->napi);
@@ -1525,6 +1518,10 @@ static int altera_tse_probe(struct platform_device *pdev)
static int altera_tse_remove(struct platform_device *pdev)
static int altera_tse_remove(struct platform_device *pdev)
{
{
	struct net_device *ndev = platform_get_drvdata(pdev);
	struct net_device *ndev = platform_get_drvdata(pdev);
	struct altera_tse_private *priv = netdev_priv(ndev);

	if (priv->phydev)
		phy_disconnect(priv->phydev);


	platform_set_drvdata(pdev, NULL);
	platform_set_drvdata(pdev, NULL);
	altera_tse_mdio_destroy(ndev);
	altera_tse_mdio_destroy(ndev);
+4 −2
Original line number Original line Diff line number Diff line
@@ -1616,7 +1616,7 @@ static int enic_open(struct net_device *netdev)
		if (vnic_rq_desc_used(&enic->rq[i]) == 0) {
		if (vnic_rq_desc_used(&enic->rq[i]) == 0) {
			netdev_err(netdev, "Unable to alloc receive buffers\n");
			netdev_err(netdev, "Unable to alloc receive buffers\n");
			err = -ENOMEM;
			err = -ENOMEM;
			goto err_out_notify_unset;
			goto err_out_free_rq;
		}
		}
	}
	}


@@ -1649,7 +1649,9 @@ static int enic_open(struct net_device *netdev)


	return 0;
	return 0;


err_out_notify_unset:
err_out_free_rq:
	for (i = 0; i < enic->rq_count; i++)
		vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
	enic_dev_notify_unset(enic);
	enic_dev_notify_unset(enic);
err_out_free_intr:
err_out_free_intr:
	enic_free_intr(enic);
	enic_free_intr(enic);
+1 −1
Original line number Original line Diff line number Diff line
@@ -1543,7 +1543,7 @@ static int e100_phy_init(struct nic *nic)
		mdio_write(netdev, nic->mii.phy_id, MII_BMCR, bmcr);
		mdio_write(netdev, nic->mii.phy_id, MII_BMCR, bmcr);
	} else if ((nic->mac >= mac_82550_D102) || ((nic->flags & ich) &&
	} else if ((nic->mac >= mac_82550_D102) || ((nic->flags & ich) &&
	   (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000) &&
	   (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000) &&
		!(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled))) {
		(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled))) {
		/* enable/disable MDI/MDI-X auto-switching. */
		/* enable/disable MDI/MDI-X auto-switching. */
		mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG,
		mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG,
				nic->mii.force_media ? 0 : NCONFIG_AUTO_SWITCH);
				nic->mii.force_media ? 0 : NCONFIG_AUTO_SWITCH);
+3 −1
Original line number Original line Diff line number Diff line
@@ -829,7 +829,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
		if (desc_n >= ring->count || desc_n < 0) {
		if (desc_n >= ring->count || desc_n < 0) {
			dev_info(&pf->pdev->dev,
			dev_info(&pf->pdev->dev,
				 "descriptor %d not found\n", desc_n);
				 "descriptor %d not found\n", desc_n);
			return;
			goto out;
		}
		}
		if (!is_rx_ring) {
		if (!is_rx_ring) {
			txd = I40E_TX_DESC(ring, desc_n);
			txd = I40E_TX_DESC(ring, desc_n);
@@ -855,6 +855,8 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
	} else {
	} else {
		dev_info(&pf->pdev->dev, "dump desc rx/tx <vsi_seid> <ring_id> [<desc_n>]\n");
		dev_info(&pf->pdev->dev, "dump desc rx/tx <vsi_seid> <ring_id> [<desc_n>]\n");
	}
	}

out:
	kfree(ring);
	kfree(ring);
}
}


Loading