This change lets the iWarp device drivers decide the return value of iw_query_port when attached netdev is NULL. This allows ib_register_device calling when netdev is NULL. background info: https://lore.kernel.org/all/20220118141324.GF8034@xxxxxxxx/ Signed-off-by: Cheng Xu <chengyou@xxxxxxxxxxxxxxxxx> --- drivers/infiniband/core/device.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index d275db195f1a..6f5e46e0e5b3 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c @@ -2020,8 +2020,12 @@ static int iw_query_port(struct ib_device *device, memset(port_attr, 0, sizeof(*port_attr)); netdev = ib_device_get_netdev(device, port_num); + /* Some iwarp device may be not binded to a netdev temporarily when + * ib_register_device called. To adapt this scenario, allowing iWarp + * device drivers decide the return value. + */ if (!netdev) - return -ENODEV; + goto query_port; port_attr->max_mtu = IB_MTU_4096; port_attr->active_mtu = ib_mtu_int_to_enum(netdev->mtu); @@ -2046,6 +2050,7 @@ static int iw_query_port(struct ib_device *device, } dev_put(netdev); +query_port: return device->ops.query_port(device, port_num, port_attr); } -- 2.27.0