forked from luck/tmp_suning_uos_patched
[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