2007-06-08 07:40:15

by Chris Wright

[permalink] [raw]
Subject: [patch 37/54] SCSI: aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)

-stable review patch. If anyone has any objections, please let us know.
---------------------

From: Mark Salyzyn <[email protected]>

As discussed in the bugzilla outlined below, we have an sa based
(Mustang) RAID adapter on the system, a Dell PERC2/QC. Affected
controllers are HP NetRAID, Adaptec AAC-364, Dell PERC2/QC or Adaptec
5400S. This problem coincides with the introduction of the adapter_comm
and adapter_deliver platform functions (Message [PATCH 1/4] aacraid:
rework communication support code, January 23 2007, which initially
migrated to 2.6.21)

The panic occurs with an uninitialized adapter_deliver platform function
pointer. The enclosed patch, unmodified as tested by Rainer, solves the
problem.

Signed-off-by: Mark Salyzyn <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Chris Wright <[email protected]>

---
drivers/scsi/aacraid/aacraid.h | 1 +
drivers/scsi/aacraid/rx.c | 2 +-
drivers/scsi/aacraid/sa.c | 9 ++++++++-
3 files changed, 10 insertions(+), 2 deletions(-)

--- linux-2.6.21.4.orig/drivers/scsi/aacraid/aacraid.h
+++ linux-2.6.21.4/drivers/scsi/aacraid/aacraid.h
@@ -1840,6 +1840,7 @@ struct aac_driver_ident* aac_get_driver_
int aac_get_adapter_info(struct aac_dev* dev);
int aac_send_shutdown(struct aac_dev *dev);
int aac_probe_container(struct aac_dev *dev, int cid);
+int aac_rx_deliver_producer(struct fib * fib);
extern int numacb;
extern int acbsize;
extern char aac_driver_version[];
--- linux-2.6.21.4.orig/drivers/scsi/aacraid/rx.c
+++ linux-2.6.21.4/drivers/scsi/aacraid/rx.c
@@ -378,7 +378,7 @@ static int aac_rx_check_health(struct aa
*
* Will send a fib, returning 0 if successful.
*/
-static int aac_rx_deliver_producer(struct fib * fib)
+int aac_rx_deliver_producer(struct fib * fib)
{
struct aac_dev *dev = fib->dev;
struct aac_queue *q = &dev->queues->queue[AdapNormCmdQueue];
--- linux-2.6.21.4.orig/drivers/scsi/aacraid/sa.c
+++ linux-2.6.21.4/drivers/scsi/aacraid/sa.c
@@ -5,7 +5,7 @@
* based on the old aacraid driver that is..
* Adaptec aacraid device driver for Linux.
*
- * Copyright (c) 2000 Adaptec, Inc. ([email protected])
+ * Copyright (c) 2000-2007 Adaptec, Inc. ([email protected])
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -258,6 +258,11 @@ static void aac_sa_start_adapter(struct
NULL, NULL, NULL, NULL, NULL);
}

+static int aac_sa_restart_adapter(struct aac_dev *dev, int bled)
+{
+ return -EINVAL;
+}
+
/**
* aac_sa_check_health
* @dev: device to check if healthy
@@ -367,7 +372,9 @@ int aac_sa_init(struct aac_dev *dev)
dev->a_ops.adapter_notify = aac_sa_notify_adapter;
dev->a_ops.adapter_sync_cmd = sa_sync_cmd;
dev->a_ops.adapter_check_health = aac_sa_check_health;
+ dev->a_ops.adapter_restart = aac_sa_restart_adapter;
dev->a_ops.adapter_intr = aac_sa_intr;
+ dev->a_ops.adapter_deliver = aac_rx_deliver_producer;
dev->a_ops.adapter_ioremap = aac_sa_ioremap;

/*

--


2007-06-08 17:13:24

by Stefan Lippers-Hollmann

[permalink] [raw]
Subject: Re: [patch 37/54] SCSI: aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)

Hi

On Freitag, 8. Juni 2007, you wrote:
> -stable review patch. If anyone has any objections, please let us know.
> ---------------------
>
> From: Mark Salyzyn <[email protected]>
>
> As discussed in the bugzilla outlined below, we have an sa based
> (Mustang) RAID adapter on the system, a Dell PERC2/QC. Affected
> controllers are HP NetRAID, Adaptec AAC-364, Dell PERC2/QC or Adaptec
> 5400S. This problem coincides with the introduction of the adapter_comm
> and adapter_deliver platform functions (Message [PATCH 1/4] aacraid:
> rework communication support code, January 23 2007, which initially
> migrated to 2.6.21)
>
> The panic occurs with an uninitialized adapter_deliver platform function
> pointer. The enclosed patch, unmodified as tested by Rainer, solves the
> problem.
>
> Signed-off-by: Mark Salyzyn <[email protected]>
> Signed-off-by: James Bottomley <[email protected]>
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> Signed-off-by: Chris Wright <[email protected]>
>
> ---
> drivers/scsi/aacraid/aacraid.h | 1 +
> drivers/scsi/aacraid/rx.c | 2 +-
> drivers/scsi/aacraid/sa.c | 9 ++++++++-
> 3 files changed, 10 insertions(+), 2 deletions(-)


This patch fails to compile on amd64 and i386 with the attached config
(CONFIG_SCSI_AACRAID=m, 2.6.21.5-rc1):
CC [M] drivers/scsi/aacraid/linit.o
CC [M] drivers/scsi/aacraid/aachba.o
CC [M] drivers/scsi/aacraid/commctrl.o
CC [M] drivers/scsi/aacraid/comminit.o
CC [M] drivers/scsi/aacraid/commsup.o
CC [M] drivers/scsi/aacraid/dpcsup.o
CC [M] drivers/scsi/aacraid/rx.o
CC [M] drivers/scsi/aacraid/sa.o
drivers/scsi/aacraid/sa.c: In function 'aac_sa_init':
drivers/scsi/aacraid/sa.c:375: error: 'struct adapter_ops' has no member
named 'adapter_restart'
make[5]: *** [drivers/scsi/aacraid/sa.o] Error 1
make[4]: *** [drivers/scsi/aacraid] Error 2
make[3]: *** [drivers/scsi] Error 2
make[2]: *** [drivers] Error 2
make[2]: Leaving directory `/tmp/pkg/linux-2.6.21.5-rc1-slh64-smp-1'
make[1]: *** [debian/stamp-build-kernel] Error 2
make[1]: Leaving directory `/tmp/pkg/linux-2.6.21.5-rc1-slh64-smp-1'
make: *** [realfast] Fehler 2

Reverting this patch allows compiling 2.6.21.5-rc1 with the same config
again.

Debian unstable/ current.
$ gcc --version
gcc (GCC) 4.1.3 20070601 (prerelease) (Debian 4.1.2-12)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ dpkg -l | grep -e gcc-4.1\ -e binutils
ii binutils 2.17cvs20070426-8 The GNU assembler, linker and binary
utiliti
ii gcc-4.1 4.1.2-12 The GNU C compiler

> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/aacraid.h
> +++ linux-2.6.21.4/drivers/scsi/aacraid/aacraid.h
> @@ -1840,6 +1840,7 @@ struct aac_driver_ident* aac_get_driver_
> int aac_get_adapter_info(struct aac_dev* dev);
> int aac_send_shutdown(struct aac_dev *dev);
> int aac_probe_container(struct aac_dev *dev, int cid);
> +int aac_rx_deliver_producer(struct fib * fib);
> extern int numacb;
> extern int acbsize;
> extern char aac_driver_version[];
> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/rx.c
> +++ linux-2.6.21.4/drivers/scsi/aacraid/rx.c
> @@ -378,7 +378,7 @@ static int aac_rx_check_health(struct aa
> *
> * Will send a fib, returning 0 if successful.
> */
> -static int aac_rx_deliver_producer(struct fib * fib)
> +int aac_rx_deliver_producer(struct fib * fib)
> {
> struct aac_dev *dev = fib->dev;
> struct aac_queue *q = &dev->queues->queue[AdapNormCmdQueue];
> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/sa.c
> +++ linux-2.6.21.4/drivers/scsi/aacraid/sa.c
> @@ -5,7 +5,7 @@
> * based on the old aacraid driver that is..
> * Adaptec aacraid device driver for Linux.
> *
> - * Copyright (c) 2000 Adaptec, Inc. ([email protected])
> + * Copyright (c) 2000-2007 Adaptec, Inc. ([email protected])
> *
> * This program is free software; you can redistribute it and/or modify
> * it under the terms of the GNU General Public License as published by
> @@ -258,6 +258,11 @@ static void aac_sa_start_adapter(struct
> NULL, NULL, NULL, NULL, NULL);
> }
>
> +static int aac_sa_restart_adapter(struct aac_dev *dev, int bled)
> +{
> + return -EINVAL;
> +}
> +
> /**
> * aac_sa_check_health
> * @dev: device to check if healthy
> @@ -367,7 +372,9 @@ int aac_sa_init(struct aac_dev *dev)
> dev->a_ops.adapter_notify = aac_sa_notify_adapter;
> dev->a_ops.adapter_sync_cmd = sa_sync_cmd;
> dev->a_ops.adapter_check_health = aac_sa_check_health;
> + dev->a_ops.adapter_restart = aac_sa_restart_adapter;
> dev->a_ops.adapter_intr = aac_sa_intr;
> + dev->a_ops.adapter_deliver = aac_rx_deliver_producer;
> dev->a_ops.adapter_ioremap = aac_sa_ioremap;
>
> /*

Regards
Stefan Lippers-Hollmann


Attachments:
(No filename) (0.00 B)
signature.asc (189.00 B)
This is a digitally signed message part.
Download all attachments

2007-06-08 17:46:18

by Chris Wright

[permalink] [raw]
Subject: Re: [stable] [patch 37/54] SCSI: aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)

* Stefan Lippers-Hollmann ([email protected]) wrote:
> This patch fails to compile on amd64 and i386 with the attached config
> (CONFIG_SCSI_AACRAID=m, 2.6.21.5-rc1):
> CC [M] drivers/scsi/aacraid/linit.o
> CC [M] drivers/scsi/aacraid/aachba.o
> CC [M] drivers/scsi/aacraid/commctrl.o
> CC [M] drivers/scsi/aacraid/comminit.o
> CC [M] drivers/scsi/aacraid/commsup.o
> CC [M] drivers/scsi/aacraid/dpcsup.o
> CC [M] drivers/scsi/aacraid/rx.o
> CC [M] drivers/scsi/aacraid/sa.o
> drivers/scsi/aacraid/sa.c: In function 'aac_sa_init':
> drivers/scsi/aacraid/sa.c:375: error: 'struct adapter_ops' has no member
> named 'adapter_restart'

Mark, this patch is apparently against a slightly newer kernel which
includes 8418852d11f0bbaeebeedd4243560d8fdc85410d:
[SCSI] aacraid: add restart adapter platform function

See any issue with this against 2.6.21.4 (simply drops adapter_restart
bits).

thanks,
-chris
--

From: Salyzyn, Mark <[email protected]>
Subject: SCSI: aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)

http://bugzilla.kernel.org/show_bug.cgi?id=8469

As discussed in the bugzilla outlined below, we have an sa based
(Mustang) RAID adapter on the system, a Dell PERC2/QC. Affected
controllers are HP NetRAID, Adaptec AAC-364, Dell PERC2/QC or Adaptec
5400S. This problem coincides with the introduction of the adapter_comm
and adapter_deliver platform functions (Message [PATCH 1/4] aacraid:
rework communication support code, January 23 2007, which initially
migrated to 2.6.21)

The panic occurs with an uninitialized adapter_deliver platform function
pointer. The enclosed patch, unmodified as tested by Rainer, solves the
problem.

Signed-off-by: Mark Salyzyn <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
[chrisw: backport to 2.6.21.4]
Signed-off-by: Chris Wright <[email protected]>

---
drivers/scsi/aacraid/aacraid.h | 1 +
drivers/scsi/aacraid/rx.c | 2 +-
drivers/scsi/aacraid/sa.c | 3 ++-
3 files changed, 4 insertions(+), 2 deletions(-)

--- linux-2.6.21.4.orig/drivers/scsi/aacraid/aacraid.h
+++ linux-2.6.21.4/drivers/scsi/aacraid/aacraid.h
@@ -1840,6 +1840,7 @@ struct aac_driver_ident* aac_get_driver_
int aac_get_adapter_info(struct aac_dev* dev);
int aac_send_shutdown(struct aac_dev *dev);
int aac_probe_container(struct aac_dev *dev, int cid);
+int aac_rx_deliver_producer(struct fib * fib);
extern int numacb;
extern int acbsize;
extern char aac_driver_version[];
--- linux-2.6.21.4.orig/drivers/scsi/aacraid/rx.c
+++ linux-2.6.21.4/drivers/scsi/aacraid/rx.c
@@ -378,7 +378,7 @@ static int aac_rx_check_health(struct aa
*
* Will send a fib, returning 0 if successful.
*/
-static int aac_rx_deliver_producer(struct fib * fib)
+int aac_rx_deliver_producer(struct fib * fib)
{
struct aac_dev *dev = fib->dev;
struct aac_queue *q = &dev->queues->queue[AdapNormCmdQueue];
--- linux-2.6.21.4.orig/drivers/scsi/aacraid/sa.c
+++ linux-2.6.21.4/drivers/scsi/aacraid/sa.c
@@ -5,7 +5,7 @@
* based on the old aacraid driver that is..
* Adaptec aacraid device driver for Linux.
*
- * Copyright (c) 2000 Adaptec, Inc. ([email protected])
+ * Copyright (c) 2000-2007 Adaptec, Inc. ([email protected])
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -368,6 +368,7 @@ int aac_sa_init(struct aac_dev *dev)
dev->a_ops.adapter_sync_cmd = sa_sync_cmd;
dev->a_ops.adapter_check_health = aac_sa_check_health;
dev->a_ops.adapter_intr = aac_sa_intr;
+ dev->a_ops.adapter_deliver = aac_rx_deliver_producer;
dev->a_ops.adapter_ioremap = aac_sa_ioremap;

/*

2007-06-08 18:21:32

by Mark Salyzyn

[permalink] [raw]
Subject: RE: [stable] [patch 37/54] SCSI: aacraid: Correct sa platformsupport. (Was: [Bug 8469] Bad EIP value on pentium3 SMPkernel-2.6.21.1)

Yes, split the patch into the two pieces for 2.6.21.1/2.6.21.4

Sincerely -- Mark Salyzyn

> -----Original Message-----
> From: Chris Wright [mailto:[email protected]]
> Sent: Friday, June 08, 2007 1:46 PM
> To: Stefan Lippers-Hollmann
> Cc: Chris Wright; James Bottomley; AACRAID; Greg
> Kroah-Hartman; [email protected]; [email protected]
> Subject: Re: [stable] [patch 37/54] SCSI: aacraid: Correct sa
> platformsupport. (Was: [Bug 8469] Bad EIP value on pentium3
> SMPkernel-2.6.21.1)
>
>
> * Stefan Lippers-Hollmann ([email protected]) wrote:
> > This patch fails to compile on amd64 and i386 with the
> attached config
> > (CONFIG_SCSI_AACRAID=m, 2.6.21.5-rc1):
> > CC [M] drivers/scsi/aacraid/linit.o
> > CC [M] drivers/scsi/aacraid/aachba.o
> > CC [M] drivers/scsi/aacraid/commctrl.o
> > CC [M] drivers/scsi/aacraid/comminit.o
> > CC [M] drivers/scsi/aacraid/commsup.o
> > CC [M] drivers/scsi/aacraid/dpcsup.o
> > CC [M] drivers/scsi/aacraid/rx.o
> > CC [M] drivers/scsi/aacraid/sa.o
> > drivers/scsi/aacraid/sa.c: In function 'aac_sa_init':
> > drivers/scsi/aacraid/sa.c:375: error: 'struct adapter_ops'
> has no member
> > named 'adapter_restart'
>
> Mark, this patch is apparently against a slightly newer kernel which
> includes 8418852d11f0bbaeebeedd4243560d8fdc85410d:
> [SCSI] aacraid: add restart adapter platform function
>
> See any issue with this against 2.6.21.4 (simply drops adapter_restart
> bits).
>
> thanks,
> -chris
> --
>
> From: Salyzyn, Mark <[email protected]>
> Subject: SCSI: aacraid: Correct sa platform support. (Was:
> [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)
>
> http://bugzilla.kernel.org/show_bug.cgi?id=8469
>
> As discussed in the bugzilla outlined below, we have an sa based
> (Mustang) RAID adapter on the system, a Dell PERC2/QC. Affected
> controllers are HP NetRAID, Adaptec AAC-364, Dell PERC2/QC or Adaptec
> 5400S. This problem coincides with the introduction of the
> adapter_comm
> and adapter_deliver platform functions (Message [PATCH 1/4] aacraid:
> rework communication support code, January 23 2007, which initially
> migrated to 2.6.21)
>
> The panic occurs with an uninitialized adapter_deliver
> platform function
> pointer. The enclosed patch, unmodified as tested by Rainer,
> solves the
> problem.
>
> Signed-off-by: Mark Salyzyn <[email protected]>
> Signed-off-by: James Bottomley <[email protected]>
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> [chrisw: backport to 2.6.21.4]
> Signed-off-by: Chris Wright <[email protected]>
>
> ---
> drivers/scsi/aacraid/aacraid.h | 1 +
> drivers/scsi/aacraid/rx.c | 2 +-
> drivers/scsi/aacraid/sa.c | 3 ++-
> 3 files changed, 4 insertions(+), 2 deletions(-)
>
> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/aacraid.h
> +++ linux-2.6.21.4/drivers/scsi/aacraid/aacraid.h
> @@ -1840,6 +1840,7 @@ struct aac_driver_ident* aac_get_driver_
> int aac_get_adapter_info(struct aac_dev* dev);
> int aac_send_shutdown(struct aac_dev *dev);
> int aac_probe_container(struct aac_dev *dev, int cid);
> +int aac_rx_deliver_producer(struct fib * fib);
> extern int numacb;
> extern int acbsize;
> extern char aac_driver_version[];
> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/rx.c
> +++ linux-2.6.21.4/drivers/scsi/aacraid/rx.c
> @@ -378,7 +378,7 @@ static int aac_rx_check_health(struct aa
> *
> * Will send a fib, returning 0 if successful.
> */
> -static int aac_rx_deliver_producer(struct fib * fib)
> +int aac_rx_deliver_producer(struct fib * fib)
> {
> struct aac_dev *dev = fib->dev;
> struct aac_queue *q = &dev->queues->queue[AdapNormCmdQueue];
> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/sa.c
> +++ linux-2.6.21.4/drivers/scsi/aacraid/sa.c
> @@ -5,7 +5,7 @@
> * based on the old aacraid driver that is..
> * Adaptec aacraid device driver for Linux.
> *
> - * Copyright (c) 2000 Adaptec, Inc. ([email protected])
> + * Copyright (c) 2000-2007 Adaptec, Inc. ([email protected])
> *
> * This program is free software; you can redistribute it
> and/or modify
> * it under the terms of the GNU General Public License as
> published by
> @@ -368,6 +368,7 @@ int aac_sa_init(struct aac_dev *dev)
> dev->a_ops.adapter_sync_cmd = sa_sync_cmd;
> dev->a_ops.adapter_check_health = aac_sa_check_health;
> dev->a_ops.adapter_intr = aac_sa_intr;
> + dev->a_ops.adapter_deliver = aac_rx_deliver_producer;
> dev->a_ops.adapter_ioremap = aac_sa_ioremap;
>
> /*
>

2007-06-08 18:29:49

by Chris Wright

[permalink] [raw]
Subject: Re: [stable] [patch 37/54] SCSI: aacraid: Correct sa platformsupport. (Was: [Bug 8469] Bad EIP value on pentium3 SMPkernel-2.6.21.1)

* Salyzyn, Mark ([email protected]) wrote:
> Yes, split the patch into the two pieces for 2.6.21.1/2.6.21.4

Sorry, didn't parse. Are you suggesting to use the patch I included
(which simply drops the ->adapter_restart init), or the original patch
plus Mark Havercamp's patch to add ->adapter_restart?

thanks,
-chris

2007-06-08 18:32:40

by Mark Salyzyn

[permalink] [raw]
Subject: RE: [stable] [patch 37/54] SCSI: aacraid: Correct saplatformsupport. (Was: [Bug 8469] Bad EIP value on pentium3SMPkernel-2.6.21.1)

Drop the setting of restart, drop the dummy restart handler in sa.c.

I will send you what I mean later when I have time ...

Sincerely -- Mark Salyzyn

> -----Original Message-----
> From: Chris Wright [mailto:[email protected]]
> Sent: Friday, June 08, 2007 2:29 PM
> To: Salyzyn, Mark
> Cc: Chris Wright; Stefan Lippers-Hollmann; James Bottomley;
> AACRAID; Greg Kroah-Hartman; [email protected];
> [email protected]
> Subject: Re: [stable] [patch 37/54] SCSI: aacraid: Correct
> saplatformsupport. (Was: [Bug 8469] Bad EIP value on
> pentium3SMPkernel-2.6.21.1)
>
>
> * Salyzyn, Mark ([email protected]) wrote:
> > Yes, split the patch into the two pieces for 2.6.21.1/2.6.21.4
>
> Sorry, didn't parse. Are you suggesting to use the patch I included
> (which simply drops the ->adapter_restart init), or the original patch
> plus Mark Havercamp's patch to add ->adapter_restart?
>
> thanks,
> -chris
>

2007-06-08 18:33:33

by Dave Jones

[permalink] [raw]
Subject: Re: [patch 37/54] SCSI: aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)

On Fri, Jun 08, 2007 at 12:22:04AM -0700, Chris Wright wrote:
> -stable review patch. If anyone has any objections, please let us know.
> ---------------------
>
> From: Mark Salyzyn <[email protected]>
>
> As discussed in the bugzilla outlined below, we have an sa based
> (Mustang) RAID adapter on the system, a Dell PERC2/QC. Affected
> controllers are HP NetRAID, Adaptec AAC-364, Dell PERC2/QC or Adaptec
> 5400S. This problem coincides with the introduction of the adapter_comm
> and adapter_deliver platform functions (Message [PATCH 1/4] aacraid:
> rework communication support code, January 23 2007, which initially
> migrated to 2.6.21)
>
> The panic occurs with an uninitialized adapter_deliver platform function
> pointer. The enclosed patch, unmodified as tested by Rainer, solves the
> problem.
>
> Signed-off-by: Mark Salyzyn <[email protected]>
> Signed-off-by: James Bottomley <[email protected]>
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> Signed-off-by: Chris Wright <[email protected]>


drivers/scsi/aacraid/sa.c: In function 'aac_sa_init':
drivers/scsi/aacraid/sa.c:375: error: 'struct adapter_ops' has no member named 'adapter_restart'

Dave

--
http://www.codemonkey.org.uk

2007-06-08 18:41:16

by Chris Wright

[permalink] [raw]
Subject: Re: [stable] [patch 37/54] SCSI: aacraid: Correct saplatformsupport. (Was: [Bug 8469] Bad EIP value on pentium3SMPkernel-2.6.21.1)

* Salyzyn, Mark ([email protected]) wrote:
> Drop the setting of restart, drop the dummy restart handler in sa.c.

Yup, OK. That's exactly the updated patch I included. Here it is again:

From: Salyzyn, Mark <[email protected]>
Subject: SCSI: aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)


http://bugzilla.kernel.org/show_bug.cgi?id=8469

As discussed in the bugzilla outlined below, we have an sa based
(Mustang) RAID adapter on the system, a Dell PERC2/QC. Affected
controllers are HP NetRAID, Adaptec AAC-364, Dell PERC2/QC or Adaptec
5400S. This problem coincides with the introduction of the adapter_comm
and adapter_deliver platform functions (Message [PATCH 1/4] aacraid:
rework communication support code, January 23 2007, which initially
migrated to 2.6.21)

The panic occurs with an uninitialized adapter_deliver platform function
pointer. The enclosed patch, unmodified as tested by Rainer, solves the
problem.

Signed-off-by: Mark Salyzyn <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
[chrisw: backport to 2.6.21.4]
Signed-off-by: Chris Wright <[email protected]>

---
drivers/scsi/aacraid/aacraid.h | 1 +
drivers/scsi/aacraid/rx.c | 2 +-
drivers/scsi/aacraid/sa.c | 3 ++-
3 files changed, 4 insertions(+), 2 deletions(-)

--- linux-2.6.21.4.orig/drivers/scsi/aacraid/aacraid.h
+++ linux-2.6.21.4/drivers/scsi/aacraid/aacraid.h
@@ -1840,6 +1840,7 @@ struct aac_driver_ident* aac_get_driver_
int aac_get_adapter_info(struct aac_dev* dev);
int aac_send_shutdown(struct aac_dev *dev);
int aac_probe_container(struct aac_dev *dev, int cid);
+int aac_rx_deliver_producer(struct fib * fib);
extern int numacb;
extern int acbsize;
extern char aac_driver_version[];
--- linux-2.6.21.4.orig/drivers/scsi/aacraid/rx.c
+++ linux-2.6.21.4/drivers/scsi/aacraid/rx.c
@@ -378,7 +378,7 @@ static int aac_rx_check_health(struct aa
*
* Will send a fib, returning 0 if successful.
*/
-static int aac_rx_deliver_producer(struct fib * fib)
+int aac_rx_deliver_producer(struct fib * fib)
{
struct aac_dev *dev = fib->dev;
struct aac_queue *q = &dev->queues->queue[AdapNormCmdQueue];
--- linux-2.6.21.4.orig/drivers/scsi/aacraid/sa.c
+++ linux-2.6.21.4/drivers/scsi/aacraid/sa.c
@@ -5,7 +5,7 @@
* based on the old aacraid driver that is..
* Adaptec aacraid device driver for Linux.
*
- * Copyright (c) 2000 Adaptec, Inc. ([email protected])
+ * Copyright (c) 2000-2007 Adaptec, Inc. ([email protected])
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -368,6 +368,7 @@ int aac_sa_init(struct aac_dev *dev)
dev->a_ops.adapter_sync_cmd = sa_sync_cmd;
dev->a_ops.adapter_check_health = aac_sa_check_health;
dev->a_ops.adapter_intr = aac_sa_intr;
+ dev->a_ops.adapter_deliver = aac_rx_deliver_producer;
dev->a_ops.adapter_ioremap = aac_sa_ioremap;

/*

2007-06-08 19:23:21

by Mark Salyzyn

[permalink] [raw]
Subject: RE: [stable] [patch 37/54] SCSI: aacraid: Correctsaplatformsupport. (Was: [Bug 8469] Bad EIP value onpentium3SMPkernel-2.6.21.1)

Poifect (for earlier kernels without the restart adapter function added)

Sincerely -- Mark Salyzyn

> -----Original Message-----
> From: Chris Wright [mailto:[email protected]]
> Sent: Friday, June 08, 2007 2:41 PM
> To: Salyzyn, Mark
> Cc: Chris Wright; Stefan Lippers-Hollmann; James Bottomley;
> AACRAID; Greg Kroah-Hartman; [email protected];
> [email protected]; [email protected]
> Subject: Re: [stable] [patch 37/54] SCSI: aacraid:
> Correctsaplatformsupport. (Was: [Bug 8469] Bad EIP value
> onpentium3SMPkernel-2.6.21.1)
>
>
> * Salyzyn, Mark ([email protected]) wrote:
> > Drop the setting of restart, drop the dummy restart handler in sa.c.
>
> Yup, OK. That's exactly the updated patch I included. Here
> it is again:
>
> From: Salyzyn, Mark <[email protected]>
> Subject: SCSI: aacraid: Correct sa platform support. (Was:
> [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)
>
>
> http://bugzilla.kernel.org/show_bug.cgi?id=8469
>
> As discussed in the bugzilla outlined below, we have an sa based
> (Mustang) RAID adapter on the system, a Dell PERC2/QC. Affected
> controllers are HP NetRAID, Adaptec AAC-364, Dell PERC2/QC or Adaptec
> 5400S. This problem coincides with the introduction of the
> adapter_comm
> and adapter_deliver platform functions (Message [PATCH 1/4] aacraid:
> rework communication support code, January 23 2007, which initially
> migrated to 2.6.21)
>
> The panic occurs with an uninitialized adapter_deliver
> platform function
> pointer. The enclosed patch, unmodified as tested by Rainer,
> solves the
> problem.
>
> Signed-off-by: Mark Salyzyn <[email protected]>
> Signed-off-by: James Bottomley <[email protected]>
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> [chrisw: backport to 2.6.21.4]
> Signed-off-by: Chris Wright <[email protected]>
>
> ---
> drivers/scsi/aacraid/aacraid.h | 1 +
> drivers/scsi/aacraid/rx.c | 2 +-
> drivers/scsi/aacraid/sa.c | 3 ++-
> 3 files changed, 4 insertions(+), 2 deletions(-)
>
> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/aacraid.h
> +++ linux-2.6.21.4/drivers/scsi/aacraid/aacraid.h
> @@ -1840,6 +1840,7 @@ struct aac_driver_ident* aac_get_driver_
> int aac_get_adapter_info(struct aac_dev* dev);
> int aac_send_shutdown(struct aac_dev *dev);
> int aac_probe_container(struct aac_dev *dev, int cid);
> +int aac_rx_deliver_producer(struct fib * fib);
> extern int numacb;
> extern int acbsize;
> extern char aac_driver_version[];
> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/rx.c
> +++ linux-2.6.21.4/drivers/scsi/aacraid/rx.c
> @@ -378,7 +378,7 @@ static int aac_rx_check_health(struct aa
> *
> * Will send a fib, returning 0 if successful.
> */
> -static int aac_rx_deliver_producer(struct fib * fib)
> +int aac_rx_deliver_producer(struct fib * fib)
> {
> struct aac_dev *dev = fib->dev;
> struct aac_queue *q = &dev->queues->queue[AdapNormCmdQueue];
> --- linux-2.6.21.4.orig/drivers/scsi/aacraid/sa.c
> +++ linux-2.6.21.4/drivers/scsi/aacraid/sa.c
> @@ -5,7 +5,7 @@
> * based on the old aacraid driver that is..
> * Adaptec aacraid device driver for Linux.
> *
> - * Copyright (c) 2000 Adaptec, Inc. ([email protected])
> + * Copyright (c) 2000-2007 Adaptec, Inc. ([email protected])
> *
> * This program is free software; you can redistribute it
> and/or modify
> * it under the terms of the GNU General Public License as
> published by
> @@ -368,6 +368,7 @@ int aac_sa_init(struct aac_dev *dev)
> dev->a_ops.adapter_sync_cmd = sa_sync_cmd;
> dev->a_ops.adapter_check_health = aac_sa_check_health;
> dev->a_ops.adapter_intr = aac_sa_intr;
> + dev->a_ops.adapter_deliver = aac_rx_deliver_producer;
> dev->a_ops.adapter_ioremap = aac_sa_ioremap;
>
> /*
>