diff mbox series

[v3] fix qla2xxx regression on sparc64

Message ID 20200827.222729.1875148247374704975.rene@exactcode.com (mailing list archive)
State Accepted
Headers show
Series [v3] fix qla2xxx regression on sparc64 | expand

Commit Message

Rene Rebe Aug. 27, 2020, 8:27 p.m. UTC
Commit 98aee70d19a7e3203649fa2078464e4f402a0ad8 in 2014 broke qla2xxx
on sparc64, e.g. as in the Sun Blade 1000 / 2000. Unbreak by partial
revert to fix endianess in nvram firmware default initialization. Also
mark the second frame_payload_size in nvram_t __le16 to avoid new
sparse warnings.

Fixes: 98aee70d19a7e ("qla2xxx: Add endianizer to max_payload_size modifier.")
Signed-off-by: René Rebe <rene@exactcode.de>

Comments

Himanshu Madhani Aug. 27, 2020, 8:30 p.m. UTC | #1
> On Aug 27, 2020, at 3:27 PM, Rene Rebe <rene@exactcode.com> wrote:
> 
> Commit 98aee70d19a7e3203649fa2078464e4f402a0ad8 in 2014 broke qla2xxx
> on sparc64, e.g. as in the Sun Blade 1000 / 2000. Unbreak by partial
> revert to fix endianess in nvram firmware default initialization. Also
> mark the second frame_payload_size in nvram_t __le16 to avoid new
> sparse warnings.
> 
> Fixes: 98aee70d19a7e ("qla2xxx: Add endianizer to max_payload_size modifier.")
> Signed-off-by: René Rebe <rene@exactcode.de>
> 
> diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
> index 8c92af5e4390..00782e859ef8 100644
> --- a/drivers/scsi/qla2xxx/qla_def.h
> +++ b/drivers/scsi/qla2xxx/qla_def.h
> @@ -1626,7 +1626,7 @@ typedef struct {
> 	 */
> 	uint8_t	 firmware_options[2];
> 
> -	uint16_t frame_payload_size;
> +	__le16	frame_payload_size;
> 	__le16	max_iocb_allocation;
> 	__le16	execution_throttle;
> 	uint8_t	 retry_count;
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index 57a2d76aa691..0916c33eb076 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -4603,18 +4603,18 @@ qla2x00_nvram_config(scsi_qla_host_t *vha)
> 			nv->firmware_options[1] = BIT_7 | BIT_5;
> 			nv->add_firmware_options[0] = BIT_5;
> 			nv->add_firmware_options[1] = BIT_5 | BIT_4;
> -			nv->frame_payload_size = 2048;
> +			nv->frame_payload_size = cpu_to_le16(2048);
> 			nv->special_options[1] = BIT_7;
> 		} else if (IS_QLA2200(ha)) {
> 			nv->firmware_options[0] = BIT_2 | BIT_1;
> 			nv->firmware_options[1] = BIT_7 | BIT_5;
> 			nv->add_firmware_options[0] = BIT_5;
> 			nv->add_firmware_options[1] = BIT_5 | BIT_4;
> -			nv->frame_payload_size = 1024;
> +			nv->frame_payload_size = cpu_to_le16(1024);
> 		} else if (IS_QLA2100(ha)) {
> 			nv->firmware_options[0] = BIT_3 | BIT_1;
> 			nv->firmware_options[1] = BIT_5;
> -			nv->frame_payload_size = 1024;
> +			nv->frame_payload_size = cpu_to_le16(1024);
> 		}
> 
> 		nv->max_iocb_allocation = cpu_to_le16(256);
> 
> 
> -- 
>  René Rebe, ExactCODE GmbH, Lietzenburger Str. 42, DE-10789 Berlin
>  https://urldefense.com/v3/__https://exactcode.com__;!!GqivPVa7Brio!OiHyjIceMlSLvY201K45s3J5OfycTE7Z8SH-AOktRAnXCmsreUUnZY8iX7nQVshbmnOO$  | https://urldefense.com/v3/__https://t2sde.org__;!!GqivPVa7Brio!OiHyjIceMlSLvY201K45s3J5OfycTE7Z8SH-AOktRAnXCmsreUUnZY8iX7nQVlPyHRLL$  | https://urldefense.com/v3/__https://rene.rebe.de__;!!GqivPVa7Brio!OiHyjIceMlSLvY201K45s3J5OfycTE7Z8SH-AOktRAnXCmsreUUnZY8iX7nQVulmVRVj$ 

Looks Good.

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering
Bart Van Assche Aug. 28, 2020, 3:30 a.m. UTC | #2
On 2020-08-27 13:27, Rene Rebe wrote:
> Commit 98aee70d19a7e3203649fa2078464e4f402a0ad8 in 2014 broke qla2xxx
> on sparc64, e.g. as in the Sun Blade 1000 / 2000. Unbreak by partial
> revert to fix endianess in nvram firmware default initialization. Also
> mark the second frame_payload_size in nvram_t __le16 to avoid new
> sparse warnings.

Thank you for having fixed the endianness warnings.

Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Arun Easi Aug. 28, 2020, 8:12 a.m. UTC | #3
On Thu, 27 Aug 2020, 1:27pm, Rene Rebe wrote:

> 
> Commit 98aee70d19a7e3203649fa2078464e4f402a0ad8 in 2014 broke qla2xxx
> on sparc64, e.g. as in the Sun Blade 1000 / 2000. Unbreak by partial
> revert to fix endianess in nvram firmware default initialization. Also
> mark the second frame_payload_size in nvram_t __le16 to avoid new
> sparse warnings.
> 
> Fixes: 98aee70d19a7e ("qla2xxx: Add endianizer to max_payload_size modifier.")
> Signed-off-by: René Rebe <rene@exactcode.de>
> 

Looks good. Other *nvram_config changes are already taken care by one of 
the recent fixes, this was the only one missing.

I was surprised that this really exception path (bad HBA nvram) was 
causing a regression; apparently this is not an exception path in this old 
machine.

Thanks Rene.

Regards,
-Arun
Martin K. Petersen Sept. 3, 2020, 3:01 a.m. UTC | #4
On Thu, 27 Aug 2020 22:27:29 +0200 (CEST), Rene Rebe wrote:

> Commit 98aee70d19a7e3203649fa2078464e4f402a0ad8 in 2014 broke qla2xxx
> on sparc64, e.g. as in the Sun Blade 1000 / 2000. Unbreak by partial
> revert to fix endianess in nvram firmware default initialization. Also
> mark the second frame_payload_size in nvram_t __le16 to avoid new
> sparse warnings.

Applied to 5.9/scsi-fixes, thanks!

[1/1] scsi: qla2xxx: Fix regression on sparc64
      https://git.kernel.org/mkp/scsi/c/2a87d485c4cb
diff mbox series

Patch

diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 8c92af5e4390..00782e859ef8 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -1626,7 +1626,7 @@  typedef struct {
 	 */
 	uint8_t	 firmware_options[2];
 
-	uint16_t frame_payload_size;
+	__le16	frame_payload_size;
 	__le16	max_iocb_allocation;
 	__le16	execution_throttle;
 	uint8_t	 retry_count;
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 57a2d76aa691..0916c33eb076 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -4603,18 +4603,18 @@  qla2x00_nvram_config(scsi_qla_host_t *vha)
 			nv->firmware_options[1] = BIT_7 | BIT_5;
 			nv->add_firmware_options[0] = BIT_5;
 			nv->add_firmware_options[1] = BIT_5 | BIT_4;
-			nv->frame_payload_size = 2048;
+			nv->frame_payload_size = cpu_to_le16(2048);
 			nv->special_options[1] = BIT_7;
 		} else if (IS_QLA2200(ha)) {
 			nv->firmware_options[0] = BIT_2 | BIT_1;
 			nv->firmware_options[1] = BIT_7 | BIT_5;
 			nv->add_firmware_options[0] = BIT_5;
 			nv->add_firmware_options[1] = BIT_5 | BIT_4;
-			nv->frame_payload_size = 1024;
+			nv->frame_payload_size = cpu_to_le16(1024);
 		} else if (IS_QLA2100(ha)) {
 			nv->firmware_options[0] = BIT_3 | BIT_1;
 			nv->firmware_options[1] = BIT_5;
-			nv->frame_payload_size = 1024;
+			nv->frame_payload_size = cpu_to_le16(1024);
 		}
 
 		nv->max_iocb_allocation = cpu_to_le16(256);