On 5/16/22 8:40 PM, Cheng Xu wrote:
On 5/16/22 7:49 PM, Jason Gunthorpe wrote:
On Mon, May 16, 2022 at 11:15:32AM +0800, Cheng Xu wrote:
On 5/10/22 9:17 PM, Jason Gunthorpe wrote:
On Thu, Apr 21, 2022 at 03:17:45PM +0800, Cheng Xu wrote:
+static struct rdma_link_ops erdma_link_ops = {
+ .type = "erdma",
+ .newlink = erdma_newlink,
+};
Why is there still a newlink?
Jason
Yeah, I remember your suggestion that the ibdev should keep the same
lifecycle with its PCI device, and so does it now.
The initialization flow for erdma now:
probe:
- Hardware specified initialization
- IB device initialization
- Calling ib_register_device with ibdev->netdev == NULL
After probe, The ib device has been registered, but we left it in
invalid state.
To fully complete the initialization, we should set the ibdev->netdev.
And the newlink command in erdma only do one thing now: set the
ibdev->netdev if the rule matches, and it is uncorrelated with the
ib device lifecycle.
This is not what newlink is for, it can't be used like this
Jason
[A typo in previous reply, so I re-edit it]
<...>
Or, Is it ok that erdma registers a net notifier in our module to handle
this?
I think this twice, use a net notifier of module can not solve this, due
to the leak of all ib devices information in erdma module.
The solution may be simple: register net notifier per device in probe,
and call ib_device_set_netdev if matches in the notifier callback.
Should this be the right way?
Thanks,
Cheng Xu