On Fri, Apr 17, 2020 at 10:12:36AM -0700, Jeff Kirsher wrote: > +/* client interface functions */ > +static const struct i40e_client_ops i40e_ops = { > + .open = i40iw_open, > + .close = i40iw_close, > + .l2_param_change = i40iw_l2param_change > +}; > + > +static struct i40e_client i40iw_client = { > + .name = "irdma", > + .ops = &i40e_ops, > + .type = I40E_CLIENT_IWARP, > +}; > + > +int i40iw_probe_dev(struct virtbus_device *vdev) > +{ > + struct i40e_virtbus_device *i40e_vdev = > + container_of(vdev, struct i40e_virtbus_device, vdev); > + struct i40e_info *ldev = i40e_vdev->ldev; > + > + ldev->client = &i40iw_client; > + > + return ldev->ops->client_device_register(ldev); > +} > + > +int i40iw_remove_dev(struct virtbus_device *vdev) > +{ > + struct i40e_virtbus_device *i40e_vdev = > + container_of(vdev, struct i40e_virtbus_device, vdev); > + struct i40e_info *ldev = i40e_vdev->ldev; > + > + ldev->ops->client_device_unregister(ldev); > + > + return 0; > +} This would be alot more compelling if the driver didn't go on to just another crufty layer of register/unregister. It feels like the virtbus was just dumped on top of the existing scheme without properly reworking it. > diff --git a/drivers/infiniband/hw/irdma/main.c b/drivers/infiniband/hw/irdma/main.c > new file mode 100644 > index 000000000000..8075b7bf6ae8 > +++ b/drivers/infiniband/hw/irdma/main.c > @@ -0,0 +1,573 @@ > +// SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB > +/* Copyright (c) 2015 - 2019 Intel Corporation */ > +#include "main.h" > + > +bool irdma_upload_context; > + > +MODULE_ALIAS("i40iw"); I'm not sure you can do this without deleting i40iw Jason