Commit 33d15a8b authored by James Bottomley's avatar James Bottomley

MPT Fusion driver 3.01.01 update

From: 	Moore, Eric Dean <Emoore@lsil.com>

This is an update for the MPT Fusion drivers 2.6 kernel.
Version 3.01.01.

This is a fix for poor performance in RAID Volumes. 
The dvStatus was being cleared for hidden physical disks
when mptscsih_slave_destroy is called.

Also, I have fixed the warning comming from mptscsih_reset_timeouts.
parent a8b828f4
...@@ -81,8 +81,8 @@ ...@@ -81,8 +81,8 @@
#define COPYRIGHT "Copyright (c) 1999-2004 " MODULEAUTHOR #define COPYRIGHT "Copyright (c) 1999-2004 " MODULEAUTHOR
#endif #endif
#define MPT_LINUX_VERSION_COMMON "3.01.00" #define MPT_LINUX_VERSION_COMMON "3.01.01"
#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.01.00" #define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.01.01"
#define WHAT_MAGIC_STRING "@" "(" "#" ")" #define WHAT_MAGIC_STRING "@" "(" "#" ")"
#define show_mptmod_ver(s,ver) \ #define show_mptmod_ver(s,ver) \
......
...@@ -199,8 +199,8 @@ static void mptscsih_fillbuf(char *buffer, int size, int index, int width); ...@@ -199,8 +199,8 @@ static void mptscsih_fillbuf(char *buffer, int size, int index, int width);
static int mptscsih_setup(char *str); static int mptscsih_setup(char *str);
/* module entry point */ /* module entry point */
static int __init mptscsih_init (void); static int __init mptscsih_init (void);
static void __exit mptscsih_exit (void); static void __exit mptscsih_exit (void);
static int mptscsih_probe (struct pci_dev *, const struct pci_device_id *); static int mptscsih_probe (struct pci_dev *, const struct pci_device_id *);
static void mptscsih_remove(struct pci_dev *); static void mptscsih_remove(struct pci_dev *);
...@@ -1067,10 +1067,14 @@ mptscsih_reset_timeouts (MPT_SCSI_HOST *hd) ...@@ -1067,10 +1067,14 @@ mptscsih_reset_timeouts (MPT_SCSI_HOST *hd)
Scsi_Cmnd *SCpnt; Scsi_Cmnd *SCpnt;
int ii; int ii;
int max = hd->ioc->req_depth; int max = hd->ioc->req_depth;
for (ii= 0; ii < max; ii++) { for (ii= 0; ii < max; ii++) {
if ((SCpnt = hd->ScsiLookup[ii]) != NULL) { if ((SCpnt = hd->ScsiLookup[ii]) != NULL) {
mod_timer(&SCpnt->eh_timeout, jiffies + (HZ * 60)); /* calling mod_timer() panics in 2.6 kernel...
* need to investigate
*/
// mod_timer(&SCpnt->eh_timeout, jiffies + (HZ * 60));
dtmprintk((MYIOC_s_WARN_FMT "resetting SCpnt=%p timeout + 60HZ", dtmprintk((MYIOC_s_WARN_FMT "resetting SCpnt=%p timeout + 60HZ",
(hd && hd->ioc) ? hd->ioc->name : "ioc?", SCpnt)); (hd && hd->ioc) ? hd->ioc->name : "ioc?", SCpnt));
} }
...@@ -1978,8 +1982,8 @@ mptscsih_init(void) ...@@ -1978,8 +1982,8 @@ mptscsih_init(void)
* mptscsih_exit - Unregisters MPT adapter(s) * mptscsih_exit - Unregisters MPT adapter(s)
* *
*/ */
static void static void __exit
__exit mptscsih_exit(void) mptscsih_exit(void)
{ {
MPT_ADAPTER *ioc; MPT_ADAPTER *ioc;
...@@ -3339,6 +3343,7 @@ mptscsih_slave_destroy(Scsi_Device *device) ...@@ -3339,6 +3343,7 @@ mptscsih_slave_destroy(Scsi_Device *device)
struct Scsi_Host *host = device->host; struct Scsi_Host *host = device->host;
MPT_SCSI_HOST *hd; MPT_SCSI_HOST *hd;
VirtDevice *vdev; VirtDevice *vdev;
int raid_volume=0;
hd = (MPT_SCSI_HOST *)host->hostdata; hd = (MPT_SCSI_HOST *)host->hostdata;
...@@ -3361,25 +3366,33 @@ mptscsih_slave_destroy(Scsi_Device *device) ...@@ -3361,25 +3366,33 @@ mptscsih_slave_destroy(Scsi_Device *device)
kfree(hd->Targets[device->id]); kfree(hd->Targets[device->id]);
hd->Targets[device->id] = NULL; hd->Targets[device->id] = NULL;
if (hd->is_spi) { if (!hd->is_spi)
return;
if((hd->ioc->spi_data.isRaid) && (hd->ioc->spi_data.pIocPg3)) {
int i;
for(i=0;i<hd->ioc->spi_data.pIocPg3->NumPhysDisks &&
raid_volume==0;i++)
if(device->id ==
hd->ioc->spi_data.pIocPg3->PhysDisk[i].PhysDiskNum) {
raid_volume=1;
hd->ioc->spi_data.forceDv |=
MPT_SCSICFG_RELOAD_IOC_PG3;
}
}
if(!raid_volume){
hd->ioc->spi_data.dvStatus[device->id] = hd->ioc->spi_data.dvStatus[device->id] =
MPT_SCSICFG_NEGOTIATE; MPT_SCSICFG_NEGOTIATE;
if (hd->negoNvram == 0) if (hd->negoNvram == 0)
hd->ioc->spi_data.dvStatus[device->id] hd->ioc->spi_data.dvStatus[device->id]
|= MPT_SCSICFG_DV_NOT_DONE; |= MPT_SCSICFG_DV_NOT_DONE;
/* Don't alter isRaid, not allowed to move
* volumes on a running system.
*/
if (hd->ioc->spi_data.isRaid & (1 <<
(device->id)))
hd->ioc->spi_data.forceDv |=
MPT_SCSICFG_RELOAD_IOC_PG3;
} }
} }
} }
return; return;
} }
...@@ -3693,12 +3706,8 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) ...@@ -3693,12 +3706,8 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
*/ */
hd->resetPending = 1; hd->resetPending = 1;
#if 0
/* calling mod_timer() panics in 2.6 kernel...
* need to investigate
*/
mptscsih_reset_timeouts (hd); mptscsih_reset_timeouts (hd);
#endif
} else if (reset_phase == MPT_IOC_PRE_RESET) { } else if (reset_phase == MPT_IOC_PRE_RESET) {
dtmprintk((MYIOC_s_WARN_FMT "Pre-Diag Reset\n", ioc->name)); dtmprintk((MYIOC_s_WARN_FMT "Pre-Diag Reset\n", ioc->name));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment