[PATCH] SCSI: aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value...
authorSalyzyn, Mark <mark_salyzyn@adaptec.com>
Tue, 15 May 2007 13:14:21 +0000 (09:14 -0400)
committerChris Wright <chrisw@sous-sol.org>
Mon, 11 Jun 2007 18:36:50 +0000 (11:36 -0700)
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 <aacraid@adaptec.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
[chrisw: backport to 2.6.21.4]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/rx.c
drivers/scsi/aacraid/sa.c

index 39ecd0d22eb0dcc5e1b6397ec98ee84903a0c8da..1eca9cda6670845c4abf92d7964e4c2c0437f03b 100644 (file)
@@ -1840,6 +1840,7 @@ struct aac_driver_ident* aac_get_driver_ident(int devtype);
 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[];
index d242e2611d672dc4df6a2a985187483cd99a2384..4431a5d3fac086eb34f9973bf0d621886602fec2 100644 (file)
@@ -378,7 +378,7 @@ static int aac_rx_check_health(struct aac_dev *dev)
  *
  *     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];
index 6f1a1780efce4e8e4a4a2f82564e81f498ad299f..06744f010f84ea6725d63b33cf1caac7609f51e6 100644 (file)
@@ -5,7 +5,7 @@
  * based on the old aacraid driver that is..
  * Adaptec aacraid device driver for Linux.
  *
- * Copyright (c) 2000 Adaptec, Inc. (aacraid@adaptec.com)
+ * Copyright (c) 2000-2007 Adaptec, Inc. (aacraid@adaptec.com)
  *
  * 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;
 
        /*