net: enetc: don't initialize unused ports from a separate code path
authorVladimir Oltean <olteanv@gmail.com>
Wed, 10 Mar 2021 12:03:46 +0000 (14:03 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 10 Mar 2021 21:14:15 +0000 (13:14 -0800)
Since commit 3222b5b613db ("net: enetc: initialize RFS/RSS memories for
unused ports too") there is a requirement to initialize the memories of
unused PFs too, which has left the probe path in a bit of a rough shape,
because we basically have a minimal initialization path for unused PFs
which is separate from the main initialization path.

Now that initializing a control BD ring is as simple as calling
enetc_setup_cbdr, let's move that outside of enetc_alloc_si_resources
(unused PFs don't need classification rules, so no point in allocating
them just to free them later).

But enetc_alloc_si_resources is called both for PFs and for VFs, so now
that enetc_setup_cbdr is no longer called from this common function, it
means that the VF probe path needs to explicitly call enetc_setup_cbdr
too.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/enetc/enetc.c
drivers/net/ethernet/freescale/enetc/enetc_pf.c
drivers/net/ethernet/freescale/enetc/enetc_vf.c

index dda3306..53c8a69 100644 (file)
@@ -1055,34 +1055,17 @@ void enetc_init_si_rings_params(struct enetc_ndev_priv *priv)
 int enetc_alloc_si_resources(struct enetc_ndev_priv *priv)
 {
        struct enetc_si *si = priv->si;
-       int err;
-
-       err = enetc_setup_cbdr(priv->dev, &si->hw, ENETC_CBDR_DEFAULT_SIZE,
-                              &si->cbd_ring);
-       if (err)
-               return err;
 
        priv->cls_rules = kcalloc(si->num_fs_entries, sizeof(*priv->cls_rules),
                                  GFP_KERNEL);
-       if (!priv->cls_rules) {
-               err = -ENOMEM;
-               goto err_alloc_cls;
-       }
+       if (!priv->cls_rules)
+               return -ENOMEM;
 
        return 0;
-
-err_alloc_cls:
-       enetc_teardown_cbdr(&si->cbd_ring);
-
-       return err;
 }
 
 void enetc_free_si_resources(struct enetc_ndev_priv *priv)
 {
-       struct enetc_si *si = priv->si;
-
-       enetc_teardown_cbdr(&si->cbd_ring);
-
        kfree(priv->cls_rules);
 }
 
index bf70b8f..c8b6110 100644 (file)
@@ -1081,22 +1081,6 @@ static int enetc_init_port_rss_memory(struct enetc_si *si)
        return err;
 }
 
-static void enetc_init_unused_port(struct enetc_si *si)
-{
-       struct device *dev = &si->pdev->dev;
-       struct enetc_hw *hw = &si->hw;
-       int err;
-
-       err = enetc_setup_cbdr(dev, hw, ENETC_CBDR_DEFAULT_SIZE, &si->cbd_ring);
-       if (err)
-               return;
-
-       enetc_init_port_rfs_memory(si);
-       enetc_init_port_rss_memory(si);
-
-       enetc_teardown_cbdr(&si->cbd_ring);
-}
-
 static int enetc_pf_probe(struct pci_dev *pdev,
                          const struct pci_device_id *ent)
 {
@@ -1120,8 +1104,24 @@ static int enetc_pf_probe(struct pci_dev *pdev,
                goto err_map_pf_space;
        }
 
+       err = enetc_setup_cbdr(&pdev->dev, &si->hw, ENETC_CBDR_DEFAULT_SIZE,
+                              &si->cbd_ring);
+       if (err)
+               goto err_setup_cbdr;
+
+       err = enetc_init_port_rfs_memory(si);
+       if (err) {
+               dev_err(&pdev->dev, "Failed to initialize RFS memory\n");
+               goto err_init_port_rfs;
+       }
+
+       err = enetc_init_port_rss_memory(si);
+       if (err) {
+               dev_err(&pdev->dev, "Failed to initialize RSS memory\n");
+               goto err_init_port_rss;
+       }
+
        if (node && !of_device_is_available(node)) {
-               enetc_init_unused_port(si);
                dev_info(&pdev->dev, "device is disabled, skipping\n");
                err = -ENODEV;
                goto err_device_disabled;
@@ -1154,18 +1154,6 @@ static int enetc_pf_probe(struct pci_dev *pdev,
                goto err_alloc_si_res;
        }
 
-       err = enetc_init_port_rfs_memory(si);
-       if (err) {
-               dev_err(&pdev->dev, "Failed to initialize RFS memory\n");
-               goto err_init_port_rfs;
-       }
-
-       err = enetc_init_port_rss_memory(si);
-       if (err) {
-               dev_err(&pdev->dev, "Failed to initialize RSS memory\n");
-               goto err_init_port_rss;
-       }
-
        err = enetc_configure_si(priv);
        if (err) {
                dev_err(&pdev->dev, "Failed to configure SI\n");
@@ -1201,15 +1189,17 @@ err_phylink_create:
 err_mdiobus_create:
        enetc_free_msix(priv);
 err_config_si:
-err_init_port_rss:
-err_init_port_rfs:
 err_alloc_msix:
        enetc_free_si_resources(priv);
 err_alloc_si_res:
        si->ndev = NULL;
        free_netdev(ndev);
 err_alloc_netdev:
+err_init_port_rss:
+err_init_port_rfs:
 err_device_disabled:
+       enetc_teardown_cbdr(&si->cbd_ring);
+err_setup_cbdr:
 err_map_pf_space:
        enetc_pci_remove(pdev);
 
index 9b755a8..371a34d 100644 (file)
@@ -165,6 +165,11 @@ static int enetc_vf_probe(struct pci_dev *pdev,
 
        enetc_init_si_rings_params(priv);
 
+       err = enetc_setup_cbdr(priv->dev, &si->hw, ENETC_CBDR_DEFAULT_SIZE,
+                              &si->cbd_ring);
+       if (err)
+               goto err_setup_cbdr;
+
        err = enetc_alloc_si_resources(priv);
        if (err) {
                dev_err(&pdev->dev, "SI resource alloc failed\n");
@@ -197,6 +202,8 @@ err_config_si:
 err_alloc_msix:
        enetc_free_si_resources(priv);
 err_alloc_si_res:
+       enetc_teardown_cbdr(&si->cbd_ring);
+err_setup_cbdr:
        si->ndev = NULL;
        free_netdev(ndev);
 err_alloc_netdev: