diff options
author | Jakub Kicinski <jakub.kicinski@netronome.com> | 2018-04-24 21:17:01 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-04-25 14:07:04 -0400 |
commit | 3e3e9fd8b6f0dd2d387d0dc666b770fe0dc36b33 (patch) | |
tree | 2c224ad747e799472ce88c6c0dee3deb6f293db1 /drivers/net/ethernet/netronome/nfp/nfp_main.c | |
parent | net: rules: Move l3mdev attribute validation to a helper (diff) | |
download | wireguard-linux-3e3e9fd8b6f0dd2d387d0dc666b770fe0dc36b33.tar.xz wireguard-linux-3e3e9fd8b6f0dd2d387d0dc666b770fe0dc36b33.zip |
nfp: reset local locks on init
NFP locks record the owner when held, for PCIe devices the owner
ID will be the PCIe link number. When driver loads it should scan
known locks and if they indicate that they are held by local
endpoint but the driver doesn't hold them - release them.
Locks can be left taken for instance when kernel gets kexec-ed or
after a crash. Management FW tries to clean up stale locks too,
but it currently depends on PCIe link going down which doesn't
always happen.
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/netronome/nfp/nfp_main.c')
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_main.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.c b/drivers/net/ethernet/netronome/nfp/nfp_main.c index c4b1f344b4da..0ade122805ad 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.c @@ -486,6 +486,10 @@ static int nfp_pci_probe(struct pci_dev *pdev, goto err_disable_msix; } + err = nfp_resource_table_init(pf->cpp); + if (err) + goto err_cpp_free; + pf->hwinfo = nfp_hwinfo_read(pf->cpp); dev_info(&pdev->dev, "Assembly: %s%s%s-%s CPLD: %s\n", @@ -548,6 +552,7 @@ err_fw_unload: vfree(pf->dumpspec); err_hwinfo_free: kfree(pf->hwinfo); +err_cpp_free: nfp_cpp_free(pf->cpp); err_disable_msix: destroy_workqueue(pf->wq); |