mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 23:48:56 -04:00
RDMA/erdma: Add a workqueue for WRs reflushing
ERDMA driver use a workqueue for asynchronous reflush command posting. Implement the lifecycle of this workqueue. Link: https://lore.kernel.org/r/20221116023107.82835-2-chengyou@linux.alibaba.com Signed-off-by: Cheng Xu <chengyou@linux.alibaba.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
committed by
Jason Gunthorpe
parent
b4d46c57d2
commit
35765dccaf
@@ -190,6 +190,7 @@ struct erdma_dev {
|
||||
struct net_device *netdev;
|
||||
struct pci_dev *pdev;
|
||||
struct notifier_block netdev_nb;
|
||||
struct workqueue_struct *reflush_wq;
|
||||
|
||||
resource_size_t func_bar_addr;
|
||||
resource_size_t func_bar_len;
|
||||
|
||||
@@ -521,13 +521,22 @@ static int erdma_ib_device_add(struct pci_dev *pdev)
|
||||
|
||||
u64_to_ether_addr(mac, dev->attrs.peer_addr);
|
||||
|
||||
dev->reflush_wq = alloc_workqueue("erdma-reflush-wq", WQ_UNBOUND,
|
||||
WQ_UNBOUND_MAX_ACTIVE);
|
||||
if (!dev->reflush_wq) {
|
||||
ret = -ENOMEM;
|
||||
goto err_alloc_workqueue;
|
||||
}
|
||||
|
||||
ret = erdma_device_register(dev);
|
||||
if (ret)
|
||||
goto err_out;
|
||||
goto err_register;
|
||||
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
err_register:
|
||||
destroy_workqueue(dev->reflush_wq);
|
||||
err_alloc_workqueue:
|
||||
xa_destroy(&dev->qp_xa);
|
||||
xa_destroy(&dev->cq_xa);
|
||||
|
||||
@@ -543,6 +552,7 @@ static void erdma_ib_device_remove(struct pci_dev *pdev)
|
||||
unregister_netdevice_notifier(&dev->netdev_nb);
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
|
||||
destroy_workqueue(dev->reflush_wq);
|
||||
erdma_res_cb_free(dev);
|
||||
xa_destroy(&dev->qp_xa);
|
||||
xa_destroy(&dev->cq_xa);
|
||||
|
||||
Reference in New Issue
Block a user