Commit 2429ec26 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'net-improve-devres-helpers'



Bartosz Golaszewski says:

====================
net: improve devres helpers

So it seems like there's no support for relaxing certain networking devres
helpers to not require previously allocated structures to also be managed.
However the way mdio devres variants are implemented is still wrong and I
modified my series to address it while keeping the functions strict.

First two patches modify the ixgbe driver to get rid of the last user of
devm_mdiobus_free().

Patches 3, 4, 5 and 6 are mostly cosmetic.

Patch 7 fixes the way devm_mdiobus_register() is implemented.

Patches 8 & 9 provide a managed variant of of_mdiobus_register() and
last patch uses it in mtk-star-emac driver.

v1 -> v2:
- drop the patch relaxing devm_register_netdev()
- require struct mii_bus to be managed in devm_mdiobus_register() and
  devm_of_mdiobus_register() but don't store that information in the
  structure itself: use devres_find() instead
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents e0cdac65 9ed0a3fa
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -342,7 +342,8 @@ LED
MDIO
  devm_mdiobus_alloc()
  devm_mdiobus_alloc_size()
  devm_mdiobus_free()
  devm_mdiobus_register()
  devm_of_mdiobus_register()

MEM
  devm_free_pages()
+5 −1
Original line number Diff line number Diff line
@@ -11173,10 +11173,14 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
			IXGBE_LINK_SPEED_10GB_FULL | IXGBE_LINK_SPEED_1GB_FULL,
			true);

	ixgbe_mii_bus_init(hw);
	err = ixgbe_mii_bus_init(hw);
	if (err)
		goto err_netdev;

	return 0;

err_netdev:
	unregister_netdev(netdev);
err_register:
	ixgbe_release_hw_control(adapter);
	ixgbe_clear_interrupt_scheme(adapter);
+3 −11
Original line number Diff line number Diff line
@@ -905,7 +905,6 @@ s32 ixgbe_mii_bus_init(struct ixgbe_hw *hw)
	struct pci_dev *pdev = adapter->pdev;
	struct device *dev = &adapter->netdev->dev;
	struct mii_bus *bus;
	int err = -ENODEV;

	bus = devm_mdiobus_alloc(dev);
	if (!bus)
@@ -923,7 +922,7 @@ s32 ixgbe_mii_bus_init(struct ixgbe_hw *hw)
	case IXGBE_DEV_ID_X550EM_A_1G_T:
	case IXGBE_DEV_ID_X550EM_A_1G_T_L:
		if (!ixgbe_x550em_a_has_mii(hw))
			goto ixgbe_no_mii_bus;
			return -ENODEV;
		bus->read = &ixgbe_x550em_a_mii_bus_read;
		bus->write = &ixgbe_x550em_a_mii_bus_write;
		break;
@@ -948,15 +947,8 @@ s32 ixgbe_mii_bus_init(struct ixgbe_hw *hw)
	 */
	hw->phy.mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_SUPPORTS_C22;

	err = mdiobus_register(bus);
	if (!err) {
	adapter->mii_bus = bus;
		return 0;
	}

ixgbe_no_mii_bus:
	devm_mdiobus_free(dev, bus);
	return err;
	return mdiobus_register(bus);
}

/**
+1 −12
Original line number Diff line number Diff line
@@ -1389,7 +1389,7 @@ static int mtk_star_mdio_init(struct net_device *ndev)
	priv->mii->write = mtk_star_mdio_write;
	priv->mii->priv = priv;

	ret = of_mdiobus_register(priv->mii, mdio_node);
	ret = devm_of_mdiobus_register(dev, priv->mii, mdio_node);

out_put_node:
	of_node_put(mdio_node);
@@ -1441,13 +1441,6 @@ static void mtk_star_clk_disable_unprepare(void *data)
	clk_bulk_disable_unprepare(MTK_STAR_NCLKS, priv->clks);
}

static void mtk_star_mdiobus_unregister(void *data)
{
	struct mtk_star_priv *priv = data;

	mdiobus_unregister(priv->mii);
}

static int mtk_star_probe(struct platform_device *pdev)
{
	struct device_node *of_node;
@@ -1549,10 +1542,6 @@ static int mtk_star_probe(struct platform_device *pdev)
	if (ret)
		return ret;

	ret = devm_add_action_or_reset(dev, mtk_star_mdiobus_unregister, priv);
	if (ret)
		return ret;

	ret = eth_platform_get_mac_address(dev, ndev->dev_addr);
	if (ret || !is_valid_ether_addr(ndev->dev_addr))
		eth_hw_addr_random(ndev);
+1 −1
Original line number Diff line number Diff line
@@ -5012,7 +5012,7 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
	new_bus->read = r8169_mdio_read_reg;
	new_bus->write = r8169_mdio_write_reg;

	ret = devm_mdiobus_register(new_bus);
	ret = devm_mdiobus_register(&pdev->dev, new_bus);
	if (ret)
		return ret;

Loading