diff mbox series

qla2xxx: Fix the ARM build

Message ID 20200609041403.20306-1-bvanassche@acm.org (mailing list archive)
State Superseded
Headers show
Series qla2xxx: Fix the ARM build | expand

Commit Message

Bart Van Assche June 9, 2020, 4:14 a.m. UTC
This patch fixes the build errors reported by the kernel test robot on June
7th. Does this perhaps mean that so far nobody has tried to use the qla2xxx
driver on an ARM system? For the kernel test robot output, see also
https://lore.kernel.org/lkml/202006070558.Cy93XggE%25lkp@intel.com/.

Cc: Nilesh Javali <njavali@marvell.com>
Cc: Quinn Tran <qutran@marvell.com>
Cc: Himanshu Madhani <himanshu.madhani@oracle.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Daniel Wagner <dwagner@suse.de>
Cc: Roman Bolshakov <r.bolshakov@yadro.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/qla2xxx/qla_def.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Daniel Wagner June 9, 2020, 7:30 a.m. UTC | #1
Hi Bart,

On Mon, Jun 08, 2020 at 09:14:03PM -0700, Bart Van Assche wrote:
> diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
> index 42dbf90d4651..edc9c082dc6e 100644
> --- a/drivers/scsi/qla2xxx/qla_def.h
> +++ b/drivers/scsi/qla2xxx/qla_def.h
> @@ -46,7 +46,7 @@ typedef struct {
>  	uint8_t al_pa;
>  	uint8_t area;
>  	uint8_t domain;
> -} le_id_t;
> +} __packed le_id_t;
>  
>  #include "qla_bsg.h"
>  #include "qla_dsd.h"
> @@ -1841,8 +1841,8 @@ typedef union {
>  	struct {
>  		uint8_t reserved;
>  		uint8_t standard;
> -	} id;
> -} target_id_t;
> +	} __packed id;
> +} __packed target_id_t;

This is a bit strange. Why is that only these two definitions need this
treatment? With gcc 6.3.0 on Debian stretch, the compiler did the
right thing for x86_64, ARMv7 and ARMv8. In all cases target_id_t is 2 bytes
long.

Or does this happen because target_id_t is embedded into cmd_entry_t?

Here is the test code:

#include <stdio.h>
#include <stdint.h>

typedef union {
	uint16_t	extended;
	struct {
		uint8_t reserved;
		uint8_t standard;
	} id;
} target_id_t;

int main(int argc, char *argv[])
{
	printf("sizeof(target_id_t) = %zu\n", sizeof(target_id_t));
	return 0;
}

The only thing which is different to the above code is the use uint16_t
instead of __le16. But I thought this should make a difference.

Thanks,
Daniel
Bart Van Assche June 10, 2020, 2:43 a.m. UTC | #2
On 2020-06-09 00:30, Daniel Wagner wrote:
> Hi Bart,
> 
> On Mon, Jun 08, 2020 at 09:14:03PM -0700, Bart Van Assche wrote:
>> diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
>> index 42dbf90d4651..edc9c082dc6e 100644
>> --- a/drivers/scsi/qla2xxx/qla_def.h
>> +++ b/drivers/scsi/qla2xxx/qla_def.h
>> @@ -46,7 +46,7 @@ typedef struct {
>>  	uint8_t al_pa;
>>  	uint8_t area;
>>  	uint8_t domain;
>> -} le_id_t;
>> +} __packed le_id_t;
>>  
>>  #include "qla_bsg.h"
>>  #include "qla_dsd.h"
>> @@ -1841,8 +1841,8 @@ typedef union {
>>  	struct {
>>  		uint8_t reserved;
>>  		uint8_t standard;
>> -	} id;
>> -} target_id_t;
>> +	} __packed id;
>> +} __packed target_id_t;
> 
> This is a bit strange. Why is that only these two definitions need this
> treatment? With gcc 6.3.0 on Debian stretch, the compiler did the
> right thing for x86_64, ARMv7 and ARMv8. In all cases target_id_t is 2 bytes
> long.

Hi Daniel,

That's a good catch. I checked again and the __packed annotations for
target_id_t are not necessary. I will send a v2 of this patch.

Thanks,

Bart.
diff mbox series

Patch

diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 42dbf90d4651..edc9c082dc6e 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -46,7 +46,7 @@  typedef struct {
 	uint8_t al_pa;
 	uint8_t area;
 	uint8_t domain;
-} le_id_t;
+} __packed le_id_t;
 
 #include "qla_bsg.h"
 #include "qla_dsd.h"
@@ -1841,8 +1841,8 @@  typedef union {
 	struct {
 		uint8_t reserved;
 		uint8_t standard;
-	} id;
-} target_id_t;
+	} __packed id;
+} __packed target_id_t;
 
 #define SET_TARGET_ID(ha, to, from)			\
 do {							\