>>>>> "Christoph" == Christoph Hellwig <h...@infradead.org> writes:

> -#if   defined(__BIG_ENDIAN_BITFIELD)
> -     u32     MessageAddress1:24; /* bits 31:8*/
> -     u32     RequestFlags:8;
> -#else
>       u32     RequestFlags:8;
> -     u32     MessageAddress1:24; /* bits 31:8*/
> -#endif
> -     u32     MessageAddress2;      /* bits 61:32 */
> +     u32     MessageAddress1:24;
> +     u32     MessageAddress2;

Christoph> Doesn't this break architectures that set
Christoph> __BIG_ENDIAN_BITFIELD?

We went back and forth a few times in debugging this issue. This
particular struct is always little endian and consists of an 8-bit LSB
flags field plus a 56-bit pointer.

I am not a fan of wedging these values into a u32 universe (which also
causes grief when the struct is being filled out). But the Avago folks
did it this way because they want to keep things in sync with their
firmware.

In any case the code works fine on big endian with this patch in place.

-- 
Martin K. Petersen      Oracle Linux Engineering
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to