[SCSI] zfcp: Adapt to new FC_PORTSPEED semantics
Commit a9277e7783
"[SCSI] scsi_transport_fc: Getting FC Port Speed in sync with FC-GS"
changed the semantics of FC_PORTSPEED defines to
FDMI port attributes of FC-HBA/SM-HBA
which is different from the previous bit reversed
Report Port Speed Capabilities (RPSC) ELS of FC-GS/FC-LS.
Zfcp showed "10 Gbit" instead of "4 Gbit" for supported_speeds.
It now uses explicit bit conversion as the other LLDs already
do, in order to be independent of the kernel bit semantics.
See also http://marc.info/?l=linux-scsi&m=134452926830730&w=2
Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Reviewed-by: Martin Peschke <mpeschke@linux.vnet.ibm.com>
Cc: <stable@vger.kernel.org> #3.4+
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
			
			
This commit is contained in:
		
							parent
							
								
									16da05b115
								
							
						
					
					
						commit
						d22019778c
					
				| @ -437,6 +437,34 @@ void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *adapter) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| #define ZFCP_FSF_PORTSPEED_1GBIT	(1 <<  0) | ||||
| #define ZFCP_FSF_PORTSPEED_2GBIT	(1 <<  1) | ||||
| #define ZFCP_FSF_PORTSPEED_4GBIT	(1 <<  2) | ||||
| #define ZFCP_FSF_PORTSPEED_10GBIT	(1 <<  3) | ||||
| #define ZFCP_FSF_PORTSPEED_8GBIT	(1 <<  4) | ||||
| #define ZFCP_FSF_PORTSPEED_16GBIT	(1 <<  5) | ||||
| #define ZFCP_FSF_PORTSPEED_NOT_NEGOTIATED (1 << 15) | ||||
| 
 | ||||
| static u32 zfcp_fsf_convert_portspeed(u32 fsf_speed) | ||||
| { | ||||
| 	u32 fdmi_speed = 0; | ||||
| 	if (fsf_speed & ZFCP_FSF_PORTSPEED_1GBIT) | ||||
| 		fdmi_speed |= FC_PORTSPEED_1GBIT; | ||||
| 	if (fsf_speed & ZFCP_FSF_PORTSPEED_2GBIT) | ||||
| 		fdmi_speed |= FC_PORTSPEED_2GBIT; | ||||
| 	if (fsf_speed & ZFCP_FSF_PORTSPEED_4GBIT) | ||||
| 		fdmi_speed |= FC_PORTSPEED_4GBIT; | ||||
| 	if (fsf_speed & ZFCP_FSF_PORTSPEED_10GBIT) | ||||
| 		fdmi_speed |= FC_PORTSPEED_10GBIT; | ||||
| 	if (fsf_speed & ZFCP_FSF_PORTSPEED_8GBIT) | ||||
| 		fdmi_speed |= FC_PORTSPEED_8GBIT; | ||||
| 	if (fsf_speed & ZFCP_FSF_PORTSPEED_16GBIT) | ||||
| 		fdmi_speed |= FC_PORTSPEED_16GBIT; | ||||
| 	if (fsf_speed & ZFCP_FSF_PORTSPEED_NOT_NEGOTIATED) | ||||
| 		fdmi_speed |= FC_PORTSPEED_NOT_NEGOTIATED; | ||||
| 	return fdmi_speed; | ||||
| } | ||||
| 
 | ||||
| static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req) | ||||
| { | ||||
| 	struct fsf_qtcb_bottom_config *bottom = &req->qtcb->bottom.config; | ||||
| @ -456,7 +484,8 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req) | ||||
| 	fc_host_port_name(shost) = nsp->fl_wwpn; | ||||
| 	fc_host_node_name(shost) = nsp->fl_wwnn; | ||||
| 	fc_host_port_id(shost) = ntoh24(bottom->s_id); | ||||
| 	fc_host_speed(shost) = bottom->fc_link_speed; | ||||
| 	fc_host_speed(shost) = | ||||
| 		zfcp_fsf_convert_portspeed(bottom->fc_link_speed); | ||||
| 	fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3; | ||||
| 
 | ||||
| 	adapter->hydra_version = bottom->adapter_type; | ||||
| @ -580,7 +609,8 @@ static void zfcp_fsf_exchange_port_evaluate(struct zfcp_fsf_req *req) | ||||
| 	} else | ||||
| 		fc_host_permanent_port_name(shost) = fc_host_port_name(shost); | ||||
| 	fc_host_maxframe_size(shost) = bottom->maximum_frame_size; | ||||
| 	fc_host_supported_speeds(shost) = bottom->supported_speed; | ||||
| 	fc_host_supported_speeds(shost) = | ||||
| 		zfcp_fsf_convert_portspeed(bottom->supported_speed); | ||||
| 	memcpy(fc_host_supported_fc4s(shost), bottom->supported_fc4_types, | ||||
| 	       FC_FC4_LIST_SIZE); | ||||
| 	memcpy(fc_host_active_fc4s(shost), bottom->active_fc4_types, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user