Re: [PATCH] fix qla2xxx regression on sparc64

Bart Van Assche
2020-08-22T15:53:26Z

On 2020-08-22 04:59, 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.
>
> 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_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 = __constant_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 = __constant_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 = __constant_cpu_to_le16(1024);
> }
>
> nv->max_iocb_allocation = cpu_to_le16(256);

Drivers should use cpu_to_le16() instead of __constant_cpu_to_le16().

Additionally, this patch introduces the following new sparse warnings:

$ make C=2 M=drivers/scsi/qla2xxx
CC [M] drivers/scsi/qla2xxx/qla_os.o
CHECK drivers/scsi/qla2xxx/qla_os.c
CC [M] drivers/scsi/qla2xxx/qla_init.o
CHECK drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_init.c:4606:48: warning: incorrect type in assignment (different base types)
drivers/scsi/qla2xxx/qla_init.c:4606:48: expected unsigned short [usertype] frame_payload_size
drivers/scsi/qla2xxx/qla_init.c:4606:48: got restricted __le16 [usertype]
drivers/scsi/qla2xxx/qla_init.c:4613:48: warning: incorrect type in assignment (different base types)
drivers/scsi/qla2xxx/qla_init.c:4613:48: expected unsigned short [usertype] frame_payload_size
drivers/scsi/qla2xxx/qla_init.c:4613:48: got restricted __le16 [usertype]
drivers/scsi/qla2xxx/qla_init.c:4617:48: warning: incorrect type in assignment (different base types)
drivers/scsi/qla2xxx/qla_init.c:4617:48: expected unsigned short [usertype] frame_payload_size
drivers/scsi/qla2xxx/qla_init.c:4617:48: got restricted __le16 [usertype]

Please fix these.

Bart.