aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 aacraid: Correct sa platform support. (Was: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1)
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.
This attached patch is against current scsi-misc-2.6, applies cleanly to 2.6.21-git12. It may require manual intervention to be applied to 2.6.21 or 2.6.21.1, simple breakage when merely adding a single line to aacraid.h:
. . .
+ int aac_rx_deliver_producer(struct fib * fib);
extern int numacb;
. . .
ObligatoryDisclaimer: Please accept my condolences regarding Outlook's handling of patch attachments.
Sincerely -- Mark Salyzyn
Quoted 6 lines
-----Original Message-----
From: Andrew Morton [mailto:[email protected]]
Sent: Tuesday, May 15, 2007 1:30 AM
To: Salyzyn, Mark
Subject: Re: [Bug 8469] Bad EIP value on pentium3 SMP kernel-2.6.21.1
Quoted 8 lines
Quoted 1 line · On Mon, 14 May 2007 22:10:20 -0700 [email protected] wrote:
we appear to have a thumbs-up. Please cc me on the final patch?
Please also consider ccing [email protected], as this bug affects
2.6.21.x.
Quoted 2 lines
Thanks.
drivers/scsi/aacraid/aacraid.h +1 -0
@@ -1823,6 +1823,7 @@int aac_probe_container (struct aac_dev *dev,int cid);int _aac_rx_init (struct aac_dev *dev);int aac_rx_select_comm (struct aac_dev *dev,int comm); +int aac_rx_deliver_producer (struct fib * fib);extern int numacb;extern int acbsize;extern char aac_driver_version[];
drivers/scsi/aacraid/rx.c +1 -1
@@ -378,7 +378,7 @@* * 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];
drivers/scsi/aacraid/sa.c +8 -1
@@ -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
@@ -257,6 +257,11 @@ 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
@@ -366,7 +371,9 @@ 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;/*