IB/rdmavt: Add ib core device attributes to rvt driver params list

Instead of trying to handle each parameter separately, add ib_device_attr
to rvt_driver_params. This means drivers will fill this in and pass to the
rvt registration function.

Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Dennis Dalessandro 2016-01-06 09:52:19 -08:00 committed by Doug Ledford
parent 8afd32eb58
commit b1070a7a4d
2 changed files with 56 additions and 3 deletions

View File

@ -69,7 +69,7 @@ struct ib_pd *rvt_alloc_pd(struct ib_device *ibdev,
*/
spin_lock(&dev->n_pds_lock);
if (dev->n_pds_allocated == dev->dparms.max_pds) {
if (dev->n_pds_allocated == dev->dparms.props.max_pd) {
spin_unlock(&dev->n_pds_lock);
kfree(pd);
ret = ERR_PTR(-ENOMEM);

View File

@ -59,7 +59,45 @@
* Things that are driver specific, module parameters in hfi1 and qib
*/
struct rvt_driver_params {
int max_pds;
/*
* driver required fields:
* node_guid
* phys_port_cnt
* dma_device
* owner
* driver optional fields (rvt will provide generic value if blank):
* name
* node_desc
* rvt fields, driver value ignored:
* uverbs_abi_ver
* node_type
* num_comp_vectors
* uverbs_cmd_mask
*/
struct ib_device_attr props;
/*
* Drivers will need to support a number of notifications to rvt in
* accordance with certain events. This structure should contain a mask
* of the supported events. Such events that the rvt may need to know
* about include:
* port errors
* port active
* lid change
* sm change
* client reregister
* pkey change
*
* There may also be other events that the rvt layers needs to know
* about this is not an exhaustive list. Some events though rvt does not
* need to rely on the driver for such as completion queue error.
*/
int rvt_signal_supported;
/*
* Anything driver specific that is not covered by props
* For instance special module parameters. Goes here.
*/
};
/* Protection domain */
@ -69,10 +107,25 @@ struct rvt_pd {
};
struct rvt_dev_info {
/*
* Prior to calling for registration the driver will be responsible for
* allocating space for this structure.
*
* The driver will also be responsible for filling in certain members of
* dparms.props
*/
struct ib_device ibdev;
/* Driver specific */
/* Driver specific properties */
struct rvt_driver_params dparms;
/*
* The work to create port files in /sys/class Infiniband is different
* depending on the driver. This should not be extracted away and
* instead drivers are responsible for setting the correct callback for
* this.
*/
int (*port_callback)(struct ib_device *, u8, struct kobject *);
/* Internal use */