Commit 35765dcc authored by Cheng Xu's avatar Cheng Xu Committed by Jason Gunthorpe
Browse files

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: default avatarCheng Xu <chengyou@linux.alibaba.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent b4d46c57
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
+12 −2
Original line number Diff line number Diff line
@@ -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);