2004-01-01 13:05:18

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH 2.6.0] megaraid 64bit fix/cleanup (AMD64)

"Brad House" <[email protected]> writes:
>
> diff -ruN linux-2.6.0-gentoo-r1.old/drivers/scsi/megaraid.c
> linux-2.6.0-gentoo-r1/drivers/scsi/megaraid.c
> --- linux-2.6.0-gentoo-r1.old/drivers/scsi/megaraid.c 2003-12-29
> 23:51:43.000000000 -0500
> +++ linux-2.6.0-gentoo-r1/drivers/scsi/megaraid.c 2003-12-29
> 23:54:01.005469936 -0500
> @@ -1292,7 +1292,7 @@
>
> /* Calculate Scatter-Gather info */
> mbox->m_out.numsgelements = mega_build_sglist(adapter, scb,
> - (u32 *)&mbox->m_out.xferaddr, (u32 *)&seg);
> + (dma_addr_t *)&mbox->m_out.xferaddr, (u32 *)&seg);

I'm pretty sure it's completely broken. You're changing the layout of
a data structure that is shared with the firmware. Using a 32bit
int here is fine when the driver sets the correct dma mask or
only stuffs pci_alloc_consistent() memory in there (i think it's
the later here)

Even though the driver prints lots of warnings at compile time it
actually works on AMD64 as is. But in many cases you should
use megaraid2.c instead of megaraid.c.

-Andi


2004-01-01 14:08:19

by Brad House

[permalink] [raw]
Subject: Re: [PATCH 2.6.0] megaraid 64bit fix/cleanup (AMD64)

Well, the point was it _didn't_ work on AMD64 with 2.6.0 at all.
Which was what I was trying to fix. Also, it is a megaraid2 series
driver in the 2.6.0 kernel (2.00.3), I've since ported the 2.00.9
2.4 driver to 2.6.0, but have not yet had it tested (I did not
make the 64bit changes I had posted a patch for).
I guess we'll see, I hope bumping to 2.00.9 works.

-Brad

> "Brad House" <[email protected]> writes:
>>
>> diff -ruN linux-2.6.0-gentoo-r1.old/drivers/scsi/megaraid.c
>> linux-2.6.0-gentoo-r1/drivers/scsi/megaraid.c
>> --- linux-2.6.0-gentoo-r1.old/drivers/scsi/megaraid.c 2003-12-29
>> 23:51:43.000000000 -0500
>> +++ linux-2.6.0-gentoo-r1/drivers/scsi/megaraid.c 2003-12-29
>> 23:54:01.005469936 -0500
>> @@ -1292,7 +1292,7 @@
>>
>> /* Calculate Scatter-Gather info */
>> mbox->m_out.numsgelements = mega_build_sglist(adapter, scb,
>> - (u32 *)&mbox->m_out.xferaddr, (u32 *)&seg);
>> + (dma_addr_t *)&mbox->m_out.xferaddr, (u32 *)&seg);
>
> I'm pretty sure it's completely broken. You're changing the layout of a
> data structure that is shared with the firmware. Using a 32bit
> int here is fine when the driver sets the correct dma mask or
> only stuffs pci_alloc_consistent() memory in there (i think it's
> the later here)
>
> Even though the driver prints lots of warnings at compile time it
> actually works on AMD64 as is. But in many cases you should
> use megaraid2.c instead of megaraid.c.
>
> -Andi