diff options
Diffstat (limited to 'net/rds/ib.c')
| -rw-r--r-- | net/rds/ib.c | 34 | 
1 files changed, 11 insertions, 23 deletions
diff --git a/net/rds/ib.c b/net/rds/ib.c index f222885ac0c7..9481d55ff6cb 100644 --- a/net/rds/ib.c +++ b/net/rds/ib.c @@ -122,44 +122,34 @@ void rds_ib_dev_put(struct rds_ib_device *rds_ibdev)  static void rds_ib_add_one(struct ib_device *device)  {  	struct rds_ib_device *rds_ibdev; -	struct ib_device_attr *dev_attr;  	/* Only handle IB (no iWARP) devices */  	if (device->node_type != RDMA_NODE_IB_CA)  		return; -	dev_attr = kmalloc(sizeof *dev_attr, GFP_KERNEL); -	if (!dev_attr) -		return; - -	if (ib_query_device(device, dev_attr)) { -		rdsdebug("Query device failed for %s\n", device->name); -		goto free_attr; -	} -  	rds_ibdev = kzalloc_node(sizeof(struct rds_ib_device), GFP_KERNEL,  				 ibdev_to_node(device));  	if (!rds_ibdev) -		goto free_attr; +		return;  	spin_lock_init(&rds_ibdev->spinlock);  	atomic_set(&rds_ibdev->refcount, 1);  	INIT_WORK(&rds_ibdev->free_work, rds_ib_dev_free); -	rds_ibdev->max_wrs = dev_attr->max_qp_wr; -	rds_ibdev->max_sge = min(dev_attr->max_sge, RDS_IB_MAX_SGE); +	rds_ibdev->max_wrs = device->attrs.max_qp_wr; +	rds_ibdev->max_sge = min(device->attrs.max_sge, RDS_IB_MAX_SGE); -	rds_ibdev->fmr_max_remaps = dev_attr->max_map_per_fmr?: 32; -	rds_ibdev->max_1m_fmrs = dev_attr->max_mr ? -		min_t(unsigned int, (dev_attr->max_mr / 2), +	rds_ibdev->fmr_max_remaps = device->attrs.max_map_per_fmr?: 32; +	rds_ibdev->max_1m_fmrs = device->attrs.max_mr ? +		min_t(unsigned int, (device->attrs.max_mr / 2),  		      rds_ib_fmr_1m_pool_size) : rds_ib_fmr_1m_pool_size; -	rds_ibdev->max_8k_fmrs = dev_attr->max_mr ? -		min_t(unsigned int, ((dev_attr->max_mr / 2) * RDS_MR_8K_SCALE), +	rds_ibdev->max_8k_fmrs = device->attrs.max_mr ? +		min_t(unsigned int, ((device->attrs.max_mr / 2) * RDS_MR_8K_SCALE),  		      rds_ib_fmr_8k_pool_size) : rds_ib_fmr_8k_pool_size; -	rds_ibdev->max_initiator_depth = dev_attr->max_qp_init_rd_atom; -	rds_ibdev->max_responder_resources = dev_attr->max_qp_rd_atom; +	rds_ibdev->max_initiator_depth = device->attrs.max_qp_init_rd_atom; +	rds_ibdev->max_responder_resources = device->attrs.max_qp_rd_atom;  	rds_ibdev->dev = device;  	rds_ibdev->pd = ib_alloc_pd(device); @@ -183,7 +173,7 @@ static void rds_ib_add_one(struct ib_device *device)  	}  	rdsdebug("RDS/IB: max_mr = %d, max_wrs = %d, max_sge = %d, fmr_max_remaps = %d, max_1m_fmrs = %d, max_8k_fmrs = %d\n", -		 dev_attr->max_fmr, rds_ibdev->max_wrs, rds_ibdev->max_sge, +		 device->attrs.max_fmr, rds_ibdev->max_wrs, rds_ibdev->max_sge,  		 rds_ibdev->fmr_max_remaps, rds_ibdev->max_1m_fmrs,  		 rds_ibdev->max_8k_fmrs); @@ -202,8 +192,6 @@ static void rds_ib_add_one(struct ib_device *device)  put_dev:  	rds_ib_dev_put(rds_ibdev); -free_attr: -	kfree(dev_attr);  }  /*  | 
