aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Sierra <asierra@xes-inc.com>2018-10-15 16:32:47 -0400
committerJon Mason <jdmason@kudzu.us>2018-10-31 21:20:05 -0400
commit906e86b22dba61cb1baaed9be7fdcbf0afd74d7b (patch)
treea8e10a97d5a3d749c3dc808f09c7fd17e4de2da2
parentfc5d1829f9bf3d8275322727c0e9a8baf268b7c6 (diff)
ntb_netdev: Simplify remove with client device drvdata
Replace the elaborate private structure global linked-list used in ntb_netdev_probe() and ntb_netdev_remove() by stashing our private data in the NTB transport client device. Signed-off-by: Aaron Sierra <asierra@xes-inc.com> Reviewed-by: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Jon Mason <jdmason@kudzu.us>
-rw-r--r--drivers/net/ntb_netdev.c28
1 files changed, 3 insertions, 25 deletions
diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c
index df8d49ad48c3..a5bab614ff84 100644
--- a/drivers/net/ntb_netdev.c
+++ b/drivers/net/ntb_netdev.c
@@ -71,7 +71,6 @@ static unsigned int tx_start = 10;
71static unsigned int tx_stop = 5; 71static unsigned int tx_stop = 5;
72 72
73struct ntb_netdev { 73struct ntb_netdev {
74 struct list_head list;
75 struct pci_dev *pdev; 74 struct pci_dev *pdev;
76 struct net_device *ndev; 75 struct net_device *ndev;
77 struct ntb_transport_qp *qp; 76 struct ntb_transport_qp *qp;
@@ -81,8 +80,6 @@ struct ntb_netdev {
81#define NTB_TX_TIMEOUT_MS 1000 80#define NTB_TX_TIMEOUT_MS 1000
82#define NTB_RXQ_SIZE 100 81#define NTB_RXQ_SIZE 100
83 82
84static LIST_HEAD(dev_list);
85
86static void ntb_netdev_event_handler(void *data, int link_is_up) 83static void ntb_netdev_event_handler(void *data, int link_is_up)
87{ 84{
88 struct net_device *ndev = data; 85 struct net_device *ndev = data;
@@ -452,7 +449,7 @@ static int ntb_netdev_probe(struct device *client_dev)
452 if (rc) 449 if (rc)
453 goto err1; 450 goto err1;
454 451
455 list_add(&dev->list, &dev_list); 452 dev_set_drvdata(client_dev, ndev);
456 dev_info(&pdev->dev, "%s created\n", ndev->name); 453 dev_info(&pdev->dev, "%s created\n", ndev->name);
457 return 0; 454 return 0;
458 455
@@ -465,27 +462,8 @@ err:
465 462
466static void ntb_netdev_remove(struct device *client_dev) 463static void ntb_netdev_remove(struct device *client_dev)
467{ 464{
468 struct ntb_dev *ntb; 465 struct net_device *ndev = dev_get_drvdata(client_dev);
469 struct net_device *ndev; 466 struct ntb_netdev *dev = netdev_priv(ndev);
470 struct pci_dev *pdev;
471 struct ntb_netdev *dev;
472 bool found = false;
473
474 ntb = dev_ntb(client_dev->parent);
475 pdev = ntb->pdev;
476
477 list_for_each_entry(dev, &dev_list, list) {
478 if (dev->pdev == pdev) {
479 found = true;
480 break;
481 }
482 }
483 if (!found)
484 return;
485
486 list_del(&dev->list);
487
488 ndev = dev->ndev;
489 467
490 unregister_netdev(ndev); 468 unregister_netdev(ndev);
491 ntb_transport_free_queue(dev->qp); 469 ntb_transport_free_queue(dev->qp);