IB/core: Fix SDR rates in sysfs
Commit 71eeba16 ("IB: Add new InfiniBand link speeds") introduced a bug 
where eg the rate for IB 4X SDR links iss displayed as "8.5 Gb/sec" 
instead of "10 Gb/sec" as it used to be.  Fix that.
Reported-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
	
	
This commit is contained in:
		
					parent
					
						
							
								6b21d18ed5
							
						
					
				
			
			
				commit
				
					
						e9319b0cb0
					
				
			
		
					 1 changed files with 11 additions and 7 deletions
				
			
		|  | @ -179,33 +179,37 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused, | ||||||
| { | { | ||||||
| 	struct ib_port_attr attr; | 	struct ib_port_attr attr; | ||||||
| 	char *speed = ""; | 	char *speed = ""; | ||||||
| 	int rate; | 	int rate = -1;		/* in deci-Gb/sec */ | ||||||
| 	ssize_t ret; | 	ssize_t ret; | ||||||
| 
 | 
 | ||||||
| 	ret = ib_query_port(p->ibdev, p->port_num, &attr); | 	ret = ib_query_port(p->ibdev, p->port_num, &attr); | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		return ret; | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	rate = (25 * attr.active_speed) / 10; |  | ||||||
| 
 |  | ||||||
| 	switch (attr.active_speed) { | 	switch (attr.active_speed) { | ||||||
|  | 	case 1: | ||||||
|  | 		/* SDR */ | ||||||
|  | 		rate = 25; | ||||||
|  | 		break; | ||||||
| 	case 2: | 	case 2: | ||||||
| 		speed = " DDR"; | 		speed = " DDR"; | ||||||
|  | 		rate = 50; | ||||||
| 		break; | 		break; | ||||||
| 	case 4: | 	case 4: | ||||||
| 		speed = " QDR"; | 		speed = " QDR"; | ||||||
|  | 		rate = 100; | ||||||
| 		break; | 		break; | ||||||
| 	case 8: | 	case 8: | ||||||
| 		speed = " FDR10"; | 		speed = " FDR10"; | ||||||
| 		rate = 10; | 		rate = 100; | ||||||
| 		break; | 		break; | ||||||
| 	case 16: | 	case 16: | ||||||
| 		speed = " FDR"; | 		speed = " FDR"; | ||||||
| 		rate = 14; | 		rate = 140; | ||||||
| 		break; | 		break; | ||||||
| 	case 32: | 	case 32: | ||||||
| 		speed = " EDR"; | 		speed = " EDR"; | ||||||
| 		rate = 25; | 		rate = 250; | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -214,7 +218,7 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused, | ||||||
| 		return -EINVAL; | 		return -EINVAL; | ||||||
| 
 | 
 | ||||||
| 	return sprintf(buf, "%d%s Gb/sec (%dX%s)\n", | 	return sprintf(buf, "%d%s Gb/sec (%dX%s)\n", | ||||||
| 		       rate, (attr.active_speed == 1) ? ".5" : "", | 		       rate / 10, rate % 10 ? ".5" : "", | ||||||
| 		       ib_width_enum_to_int(attr.active_width), speed); | 		       ib_width_enum_to_int(attr.active_width), speed); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Roland Dreier
				Roland Dreier