aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion/mptsas.c
diff options
context:
space:
mode:
authorEric Moore <eric.moore@lsi.com>2007-09-29 12:16:53 -0400
committerJames Bottomley <jejb@mulgrave.localdomain>2007-10-12 14:52:15 -0400
commite8206381f5842269691f3164ec0d79b7059bd710 (patch)
tree4d3db0df57f86b34425dcfe929c940d8d06fe614 /drivers/message/fusion/mptsas.c
parentbc6e089a13a5c0ac36247616baecd6fc77405e7f (diff)
[SCSI] mpt fusion: lock down ScsiLookup
ScsiLookup is an array of pending scmd pointers that the scsi lld maintains. This array is touched from queuecommand, eh threads, and interrupt context. This array should put under locks, hence this patch to synchronize its access. I've added some nice little function wrappers for this, and moved the ScsiLookup array over to MPT_ADAPTER struct. Signed-off-by: Eric Moore <Eric.Moore@lsi.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/message/fusion/mptsas.c')
-rw-r--r--drivers/message/fusion/mptsas.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index 4c641c6f98a6..ba4f5e7fcbc7 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -3221,15 +3221,16 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
3221 /* SCSI needs scsi_cmnd lookup table! 3221 /* SCSI needs scsi_cmnd lookup table!
3222 * (with size equal to req_depth*PtrSz!) 3222 * (with size equal to req_depth*PtrSz!)
3223 */ 3223 */
3224 hd->ScsiLookup = kcalloc(ioc->req_depth, sizeof(void *), GFP_ATOMIC); 3224 ioc->ScsiLookup = kcalloc(ioc->req_depth, sizeof(void *), GFP_ATOMIC);
3225 if (!hd->ScsiLookup) { 3225 if (!ioc->ScsiLookup) {
3226 error = -ENOMEM; 3226 error = -ENOMEM;
3227 spin_unlock_irqrestore(&ioc->FreeQlock, flags); 3227 spin_unlock_irqrestore(&ioc->FreeQlock, flags);
3228 goto out_mptsas_probe; 3228 goto out_mptsas_probe;
3229 } 3229 }
3230 spin_lock_init(&ioc->scsi_lookup_lock);
3230 3231
3231 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScsiLookup @ %p\n", 3232 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScsiLookup @ %p\n",
3232 ioc->name, hd->ScsiLookup)); 3233 ioc->name, ioc->ScsiLookup));
3233 3234
3234 /* Clear the TM flags 3235 /* Clear the TM flags
3235 */ 3236 */