mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-01 19:34:35 +08:00
net: enetc: don't initialize unused ports from a separate code path
Since commit 3222b5b613
("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>
This commit is contained in:
parent
5b4daa7f12
commit
4b47c0b81f
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user