grasping why mpt2sas fails with BITS_PER_LONG conditional

Josh Boyer jwboyer at gmail.com
Wed Jul 13 23:20:08 EST 2011


On Wed, Jul 13, 2011 at 9:02 AM, Ayman El-Khashab <ayman at elkhashab.com> wrote:
> I've had problems with the mpt2sas driver
> (drivers/scsi/mpt2sas/mpt2sas_base.c) when using it on my
> ppc44x.  Basically, there is a check in the code for
> BITS_PER_LONG and certain code is executed if it is 64 vs 32
> bit.  I am guessing it is a problem with the driver but it
> only shows up on powerpc.  If i force it to take the 64 bit
> path it works fine, but if I let the preprocessor decide it
> will take the 32 bit path and fail later.  I am not
> configuring my kernel as 64 bit, but I am guessing this has
> to do with the 36 bit plb bus on these parts.

That seems like a good theory to me.

> can somebody enlighten me as to what the right thing to do
> here is?

I'd suggest changing the check in the driver away from BITS_PER_LONG
and try making the conditionals based on CONFIG_ARCH_DMA_ADDR_T_64BIT
instead.  On machines with 36-bit physical addressing, that gets set
and it should fall into the code paths you say work.

josh


More information about the Linuxppc-dev mailing list