diff mbox series

qla2xxx: Use transport defined speed mask for supported_speeds

Message ID 20220927115946.17559-1-njavali@marvell.com
State New
Headers show
Series qla2xxx: Use transport defined speed mask for supported_speeds | expand

Commit Message

Nilesh Javali Sept. 27, 2022, 11:59 a.m. UTC
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(-)

Comments

Himanshu Madhani Sept. 27, 2022, 6:24 p.m. UTC | #1
> 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>
Martin K. Petersen Oct. 1, 2022, 9:55 a.m. UTC | #2
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 mbox series

Patch

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;
 }