aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMoore, Eric <Eric.Moore@lsil.com>2006-01-17 19:06:26 -0500
committerJames Bottomley <jejb@mulgrave.(none)>2006-01-31 15:40:04 -0500
commita69ac3248513ff0fbbdd8f316136036b3b8067a9 (patch)
tree311845a1d317ab96036387269b589331e6796c64 /drivers
parent335a94124470dd5be6c42378d1b7f7af9a80919e (diff)
[SCSI] fusion: unloading the driver - only set asyn narrow for configured devices
This patch inhibits sending spi negotiation parameters for non-configured devices from the slave_destroy function. Signed-off-by: Eric Moore <Eric.Moore@lsil.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/message/fusion/mptscsih.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c
index d6ccd6aa4348..2e1c9ff4b028 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -158,7 +158,7 @@ static int mptscsih_writeIOCPage4(MPT_SCSI_HOST *hd, int target_id, int bus);
158int mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r); 158int mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r);
159static int mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *iocmd); 159static int mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *iocmd);
160static void mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, VirtDevice *vdevice); 160static void mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, VirtDevice *vdevice);
161static void mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget); 161static void mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtDevice *vdevice);
162static int mptscsih_is_phys_disk(MPT_ADAPTER *ioc, int id); 162static int mptscsih_is_phys_disk(MPT_ADAPTER *ioc, int id);
163 163
164#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION 164#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION
@@ -2308,7 +2308,7 @@ mptscsih_slave_destroy(struct scsi_device *sdev)
2308 vtarget->luns[0] &= ~(1 << vdevice->lun); 2308 vtarget->luns[0] &= ~(1 << vdevice->lun);
2309 vtarget->num_luns--; 2309 vtarget->num_luns--;
2310 if (vtarget->num_luns == 0) { 2310 if (vtarget->num_luns == 0) {
2311 mptscsih_negotiate_to_asyn_narrow(hd, vtarget); 2311 mptscsih_negotiate_to_asyn_narrow(hd, vdevice);
2312 if (hd->ioc->bus_type == SPI) { 2312 if (hd->ioc->bus_type == SPI) {
2313 if (mptscsih_is_phys_disk(hd->ioc, vtarget->target_id)) { 2313 if (mptscsih_is_phys_disk(hd->ioc, vtarget->target_id)) {
2314 hd->ioc->spi_data.forceDv |= MPT_SCSICFG_RELOAD_IOC_PG3; 2314 hd->ioc->spi_data.forceDv |= MPT_SCSICFG_RELOAD_IOC_PG3;
@@ -3899,8 +3899,9 @@ mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *io)
3899 * 3899 *
3900 */ 3900 */
3901static void 3901static void
3902mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget) 3902mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtDevice *vdevice)
3903{ 3903{
3904 VirtTarget *vtarget = vdevice->vtarget;
3904 MPT_ADAPTER *ioc= hd->ioc; 3905 MPT_ADAPTER *ioc= hd->ioc;
3905 SCSIDevicePage1_t *pcfg1Data; 3906 SCSIDevicePage1_t *pcfg1Data;
3906 CONFIGPARMS cfg; 3907 CONFIGPARMS cfg;
@@ -3910,7 +3911,8 @@ mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget)
3910 int requested, configuration, data,i; 3911 int requested, configuration, data,i;
3911 u8 flags, factor; 3912 u8 flags, factor;
3912 3913
3913 if (ioc->bus_type != SPI) 3914 if ((ioc->bus_type != SPI) ||
3915 (!vdevice->configured_lun))
3914 return; 3916 return;
3915 3917
3916 if (!ioc->spi_data.sdp1length) 3918 if (!ioc->spi_data.sdp1length)
@@ -3946,7 +3948,7 @@ mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget)
3946 } 3948 }
3947 mptscsih_setDevicePage1Flags(0, MPT_ASYNC, 0, &requested, 3949 mptscsih_setDevicePage1Flags(0, MPT_ASYNC, 0, &requested,
3948 &configuration, flags); 3950 &configuration, flags);
3949 dnegoprintk(("syncronize cache: id=%d width=0 factor=MPT_ASYNC " 3951 dnegoprintk(("nego asyn narrow: id=%d width=0 factor=MPT_ASYNC "
3950 "offset=0 negoFlags=%x request=%x config=%x\n", 3952 "offset=0 negoFlags=%x request=%x config=%x\n",
3951 id, flags, requested, configuration)); 3953 id, flags, requested, configuration));
3952 pcfg1Data->RequestedParameters = cpu_to_le32(requested); 3954 pcfg1Data->RequestedParameters = cpu_to_le32(requested);
@@ -3959,7 +3961,7 @@ mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget)
3959 flags = vtarget->negoFlags; 3961 flags = vtarget->negoFlags;
3960 mptscsih_setDevicePage1Flags(0, MPT_ASYNC, 0, &requested, 3962 mptscsih_setDevicePage1Flags(0, MPT_ASYNC, 0, &requested,
3961 &configuration, flags); 3963 &configuration, flags);
3962 dnegoprintk(("syncronize cache: id=%d width=0 factor=MPT_ASYNC " 3964 dnegoprintk(("nego asyn narrow: id=%d width=0 factor=MPT_ASYNC "
3963 "offset=0 negoFlags=%x request=%x config=%x\n", 3965 "offset=0 negoFlags=%x request=%x config=%x\n",
3964 vtarget->target_id, flags, requested, configuration)); 3966 vtarget->target_id, flags, requested, configuration));
3965 pcfg1Data->RequestedParameters = cpu_to_le32(requested); 3967 pcfg1Data->RequestedParameters = cpu_to_le32(requested);