Message ID | 20220927115946.17559-1-njavali@marvell.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | qla2xxx: Use transport defined speed mask for supported_speeds | expand |
> On Sep 27, 2022, at 4:59 AM, Nilesh Javali <njavali@marvell.com> wrote: > > From: Manish Rangankar <mrangankar@marvell.com> > > One of the sysfs value reported for supported_speeds > was not valid (20Gb/s reported instead of 64Gb/s). > Instead of driver internal speed mask definition, use speed mask > defined in transport_fc for reporting host->supported_speeds. > > Cc: stable@vger.kernel.org > Signed-off-by: Manish Rangankar <mrangankar@marvell.com> > Signed-off-by: Nilesh Javali <njavali@marvell.com> > --- > drivers/scsi/qla2xxx/qla_attr.c | 28 ++++++++++++++++++++++++++-- > 1 file changed, 26 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c > index fa1fcbfb946f..6188f6e21464 100644 > --- a/drivers/scsi/qla2xxx/qla_attr.c > +++ b/drivers/scsi/qla2xxx/qla_attr.c > @@ -3330,11 +3330,34 @@ struct fc_function_template qla2xxx_transport_vport_functions = { > .bsg_timeout = qla24xx_bsg_timeout, > }; > > +static uint > +qla2x00_get_host_supported_speeds(scsi_qla_host_t *vha, uint speeds) > +{ > + uint supported_speeds = FC_PORTSPEED_UNKNOWN; > + > + if (speeds & FDMI_PORT_SPEED_64GB) > + supported_speeds |= FC_PORTSPEED_64GBIT; > + if (speeds & FDMI_PORT_SPEED_32GB) > + supported_speeds |= FC_PORTSPEED_32GBIT; > + if (speeds & FDMI_PORT_SPEED_16GB) > + supported_speeds |= FC_PORTSPEED_16GBIT; > + if (speeds & FDMI_PORT_SPEED_8GB) > + supported_speeds |= FC_PORTSPEED_8GBIT; > + if (speeds & FDMI_PORT_SPEED_4GB) > + supported_speeds |= FC_PORTSPEED_4GBIT; > + if (speeds & FDMI_PORT_SPEED_2GB) > + supported_speeds |= FC_PORTSPEED_2GBIT; > + if (speeds & FDMI_PORT_SPEED_1GB) > + supported_speeds |= FC_PORTSPEED_1GBIT; > + > + return supported_speeds; > +} > + > void > qla2x00_init_host_attr(scsi_qla_host_t *vha) > { > struct qla_hw_data *ha = vha->hw; > - u32 speeds = FC_PORTSPEED_UNKNOWN; > + u32 speeds = 0, fdmi_speed = 0; > > fc_host_dev_loss_tmo(vha->host) = ha->port_down_retry_count; > fc_host_node_name(vha->host) = wwn_to_u64(vha->node_name); > @@ -3344,7 +3367,8 @@ qla2x00_init_host_attr(scsi_qla_host_t *vha) > fc_host_max_npiv_vports(vha->host) = ha->max_npiv_vports; > fc_host_npiv_vports_inuse(vha->host) = ha->cur_vport_count; > > - speeds = qla25xx_fdmi_port_speed_capability(ha); > + fdmi_speed = qla25xx_fdmi_port_speed_capability(ha); > + speeds = qla2x00_get_host_supported_speeds(vha, fdmi_speed); > > fc_host_supported_speeds(vha->host) = speeds; > } > -- > 2.23.1 > Looks Good. Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Nilesh, > One of the sysfs value reported for supported_speeds was not valid > (20Gb/s reported instead of 64Gb/s). Instead of driver internal speed > mask definition, use speed mask defined in transport_fc for reporting > host->supported_speeds. Applied to 6.1/scsi-staging, thanks!
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index fa1fcbfb946f..6188f6e21464 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -3330,11 +3330,34 @@ struct fc_function_template qla2xxx_transport_vport_functions = { .bsg_timeout = qla24xx_bsg_timeout, }; +static uint +qla2x00_get_host_supported_speeds(scsi_qla_host_t *vha, uint speeds) +{ + uint supported_speeds = FC_PORTSPEED_UNKNOWN; + + if (speeds & FDMI_PORT_SPEED_64GB) + supported_speeds |= FC_PORTSPEED_64GBIT; + if (speeds & FDMI_PORT_SPEED_32GB) + supported_speeds |= FC_PORTSPEED_32GBIT; + if (speeds & FDMI_PORT_SPEED_16GB) + supported_speeds |= FC_PORTSPEED_16GBIT; + if (speeds & FDMI_PORT_SPEED_8GB) + supported_speeds |= FC_PORTSPEED_8GBIT; + if (speeds & FDMI_PORT_SPEED_4GB) + supported_speeds |= FC_PORTSPEED_4GBIT; + if (speeds & FDMI_PORT_SPEED_2GB) + supported_speeds |= FC_PORTSPEED_2GBIT; + if (speeds & FDMI_PORT_SPEED_1GB) + supported_speeds |= FC_PORTSPEED_1GBIT; + + return supported_speeds; +} + void qla2x00_init_host_attr(scsi_qla_host_t *vha) { struct qla_hw_data *ha = vha->hw; - u32 speeds = FC_PORTSPEED_UNKNOWN; + u32 speeds = 0, fdmi_speed = 0; fc_host_dev_loss_tmo(vha->host) = ha->port_down_retry_count; fc_host_node_name(vha->host) = wwn_to_u64(vha->node_name); @@ -3344,7 +3367,8 @@ qla2x00_init_host_attr(scsi_qla_host_t *vha) fc_host_max_npiv_vports(vha->host) = ha->max_npiv_vports; fc_host_npiv_vports_inuse(vha->host) = ha->cur_vport_count; - speeds = qla25xx_fdmi_port_speed_capability(ha); + fdmi_speed = qla25xx_fdmi_port_speed_capability(ha); + speeds = qla2x00_get_host_supported_speeds(vha, fdmi_speed); fc_host_supported_speeds(vha->host) = speeds; }