diff options
author | Aaron Sierra <asierra@xes-inc.com> | 2018-10-15 16:32:47 -0400 |
---|---|---|
committer | Jon Mason <jdmason@kudzu.us> | 2018-10-31 21:20:05 -0400 |
commit | 906e86b22dba61cb1baaed9be7fdcbf0afd74d7b (patch) | |
tree | a8e10a97d5a3d749c3dc808f09c7fd17e4de2da2 | |
parent | fc5d1829f9bf3d8275322727c0e9a8baf268b7c6 (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.c | 28 |
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; | |||
71 | static unsigned int tx_stop = 5; | 71 | static unsigned int tx_stop = 5; |
72 | 72 | ||
73 | struct ntb_netdev { | 73 | struct 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 | ||
84 | static LIST_HEAD(dev_list); | ||
85 | |||
86 | static void ntb_netdev_event_handler(void *data, int link_is_up) | 83 | static 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 | ||
466 | static void ntb_netdev_remove(struct device *client_dev) | 463 | static 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); |