]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: qla2xxx: Use transport-defined speed mask for supported_speeds
authorManish Rangankar <mrangankar@marvell.com>
Tue, 27 Sep 2022 11:59:46 +0000 (04:59 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Nov 2022 15:00:21 +0000 (00:00 +0900)
commit 0b863257c17c5f57a41e0a48de140ed026957a63 upstream.

One of the sysfs values 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.

Link: https://lore.kernel.org/r/20220927115946.17559-1-njavali@marvell.com
Cc: stable@vger.kernel.org
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Manish Rangankar <mrangankar@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/scsi/qla2xxx/qla_attr.c

index fa1fcbfb946f9dfd9de25a66df2ee41b5bb982b6..6188f6e214648bd4afd0d1f07a9c9033dda9d498 100644 (file)
@@ -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;
 }