diff options
Diffstat (limited to 'drivers/infiniband')
| -rw-r--r-- | drivers/infiniband/core/sysfs.c | 9 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx4/main.c | 5 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/srpt/ib_srpt.c | 1 | 
3 files changed, 11 insertions, 4 deletions
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c index 83b720ef6c3..246fdc15165 100644 --- a/drivers/infiniband/core/sysfs.c +++ b/drivers/infiniband/core/sysfs.c @@ -179,7 +179,7 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,  {  	struct ib_port_attr attr;  	char *speed = ""; -	int rate = -1;		/* in deci-Gb/sec */ +	int rate;		/* in deci-Gb/sec */  	ssize_t ret;  	ret = ib_query_port(p->ibdev, p->port_num, &attr); @@ -187,9 +187,6 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,  		return ret;  	switch (attr.active_speed) { -	case IB_SPEED_SDR: -		rate = 25; -		break;  	case IB_SPEED_DDR:  		speed = " DDR";  		rate = 50; @@ -210,6 +207,10 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,  		speed = " EDR";  		rate = 250;  		break; +	case IB_SPEED_SDR: +	default:		/* default to SDR for invalid rates */ +		rate = 25; +		break;  	}  	rate *= ib_width_enum_to_int(attr.active_width); diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 75d30562930..669673e8143 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -253,6 +253,11 @@ static int ib_link_query_port(struct ib_device *ibdev, u8 port,  		if (out_mad->data[15] & 0x1)  			props->active_speed = IB_SPEED_FDR10;  	} + +	/* Avoid wrong speed value returned by FW if the IB link is down. */ +	if (props->state == IB_PORT_DOWN) +		 props->active_speed = IB_SPEED_SDR; +  out:  	kfree(in_mad);  	kfree(out_mad); diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index 69e2ad06e51..daf21b89999 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -3232,6 +3232,7 @@ static void srpt_add_one(struct ib_device *device)  	srq_attr.attr.max_wr = sdev->srq_size;  	srq_attr.attr.max_sge = 1;  	srq_attr.attr.srq_limit = 0; +	srq_attr.srq_type = IB_SRQT_BASIC;  	sdev->srq = ib_create_srq(sdev->pd, &srq_attr);  	if (IS_ERR(sdev->srq))  |