[PATCH 3/3] scsi : megaraid_{mm,mbox}: a fix on "kernel unaligned access address" issue

From: Ju, Seokmann
Date: Tue Jul 25 2006 - 10:43:36 EST


Hi,

This is a third patch which follows prevous two patches ([PATCH 1/3] and
[PATCH 2/3]).

There was an issue in the data structure defined by megaraid driver
casuing "kernel unaligned access.." messages to be displayed during
IOCTL on IA64 platform.

The issue has been reported/fixed by Sakurai Hiroomi
[sakurai_hiro@xxxxxxxxxxxxxxxx].

Thank you Sakurai for you help.

Thank you,

Seokmann

Signed-Off By: Seokmann Ju <seokmann.ju@xxxxxxxx>
---
diff -Naur inqwithevpd/Documentation/scsi/ChangeLog.megaraid
unaligned/Documentation/scsi/ChangeLog.megaraid
--- inqwithevpd/Documentation/scsi/ChangeLog.megaraid 2006-07-24
15:35:02.000000000 -0400
+++ unaligned/Documentation/scsi/ChangeLog.megaraid 2006-07-24
15:41:49.000000000 -0400
@@ -66,6 +66,61 @@
Fix: MegaRAID F/W has fixed the problem and being process of
release,
soon. Meanwhile, driver will filter out the request.

+3. One of member in the data structure of the driver leads unaligne
+ issue on 64-bit platform.
+ Customer reporeted "kernel unaligned access addrss" issue when
+ application communicates with MegaRAID HBA driver.
+ Root Cause: in uioc_t structure, one of member had misaligned
and it
+ led system to display the error message.
+ Fix: A patch submitted to community from following folk.
+
+ > -----Original Message-----
+ > From: linux-scsi-owner@xxxxxxxxxxxxxxx
+ > [mailto:linux-scsi-owner@xxxxxxxxxxxxxxx] On Behalf Of Sakurai
Hiroomi
+ > Sent: Wednesday, July 12, 2006 4:20 AM
+ > To: linux-scsi@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
+ > Subject: Re: Help: strange messages from kernel on IA64
platform
+ >
+ > Hi,
+ >
+ > I saw same message.
+ >
+ > When GAM(Global Array Manager) is started, The following
+ > message output.
+ > kernel: kernel unaligned access to 0xe0000001fe1080d4,
+ > ip=0xa000000200053371
+ >
+ > The uioc structure used by ioctl is defined by packed,
+ > the allignment of each member are disturbed.
+ > In a 64 bit structure, the allignment of member doesn't fit 64
bit
+ > boundary. this causes this messages.
+ > In a 32 bit structure, we don't see the message because the
allinment
+ > of member fit 32 bit boundary even if packed is specified.
+ >
+ > patch
+ > I Add 32 bit dummy member to fit 64 bit boundary. I tested.
+ > We confirmed this patch fix the problem by IA64 server.
+ >
+ > **************************************************************
+ > ****************
+ > --- linux-2.6.9/drivers/scsi/megaraid/megaraid_ioctl.h.orig
+ > 2006-04-03 17:13:03.000000000 +0900
+ > +++ linux-2.6.9/drivers/scsi/megaraid/megaraid_ioctl.h
+ > 2006-04-03 17:14:09.000000000 +0900
+ > @@ -132,6 +132,10 @@
+ > /* Driver Data: */
+ > void __user * user_data;
+ > uint32_t user_data_len;
+ > +
+ > + /* 64bit alignment */
+ > + uint32_t pad_0xBC;
+ > +
+ > mraid_passthru_t __user *user_pthru;
+ >
+ > mraid_passthru_t *pthru32;
+ > **************************************************************
+ > ****************
+
Release Date : Mon Apr 11 12:27:22 EST 2006 - Seokmann Ju
<sju@xxxxxxxx>
Current Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module)
Older Version : 2.20.4.7 (scsi module), 2.20.2.6 (cmm module)
diff -Naur inqwithevpd/drivers/scsi/megaraid/megaraid_ioctl.h
unaligned/drivers/scsi/megaraid/megaraid_ioctl.h
--- inqwithevpd/drivers/scsi/megaraid/megaraid_ioctl.h 2006-07-24
15:32:27.000000000 -0400
+++ unaligned/drivers/scsi/megaraid/megaraid_ioctl.h 2006-07-24
16:40:56.000000000 -0400
@@ -132,6 +132,10 @@
/* Driver Data: */
void __user * user_data;
uint32_t user_data_len;
+
+ /* 64bit alignment */
+ uint32_t pad_for_64bit_align;
+
mraid_passthru_t __user *user_pthru;

mraid_passthru_t *pthru32;
diff -Naur inqwithevpd/drivers/scsi/megaraid/megaraid_mm.c
unaligned/drivers/scsi/megaraid/megaraid_mm.c
--- inqwithevpd/drivers/scsi/megaraid/megaraid_mm.c 2006-07-24
15:32:27.000000000 -0400
+++ unaligned/drivers/scsi/megaraid/megaraid_mm.c 2006-07-24
15:44:14.000000000 -0400
@@ -10,7 +10,7 @@
* 2 of the License, or (at your option) any later version.
*
* FILE : megaraid_mm.c
- * Version : v2.20.2.6 (Mar 7 2005)
+ * Version : v2.20.2.7 (Jul 16 2006)
*
* Common management module
*/
diff -Naur inqwithevpd/drivers/scsi/megaraid/megaraid_mm.h
unaligned/drivers/scsi/megaraid/megaraid_mm.h
--- inqwithevpd/drivers/scsi/megaraid/megaraid_mm.h 2006-07-24
15:32:27.000000000 -0400
+++ unaligned/drivers/scsi/megaraid/megaraid_mm.h 2006-07-24
15:44:44.000000000 -0400
@@ -27,9 +27,9 @@
#include "megaraid_ioctl.h"


-#define LSI_COMMON_MOD_VERSION "2.20.2.6"
+#define LSI_COMMON_MOD_VERSION "2.20.2.7"
#define LSI_COMMON_MOD_EXT_VERSION \
- "(Release Date: Mon Mar 7 00:01:03 EST 2005)"
+ "(Release Date: Sun Jul 16 00:01:03 EST 2006)"


#define LSI_DBGLVL dbglevel
---

Attachment: megaraid_unaligned.patch
Description: megaraid_unaligned.patch