linux/drivers/scsi/pm8001
Santosh Nayak 50ec5babd3 [SCSI] pm8001: Fix possible racing condition.
There is a possble racing scenario.

'process_oq' is called by two routines, as shown below.

pm8001_8001_dispatch = {
         .......

        .isr             = pm8001_chip_isr --> process_oq,// A
        .isr_process_oq  = process_oq,                   //  B
        .....
}

process_oq() --> process_one_iomb() --> mpi_sata_completion()

In 'mpi_sata_completion', "pm8001_ha->lock" is first released.
It means lock is taken before,  which is true for
the context A, as 'pm8001_ha->lock' is taken in 'pm8001_chip_isr()'

But for context B there is no lock taken before and pm8001_ha->lock
is unlocked in 'mpi_sata_completion()'. This may unlock the lock
taken in context A. Possible racing ??

If 'pm8001_ha->lock' is taken in 'process_oq()' instead of
'pm8001_chip_isr' then the above issue can be avoided.

Signed-off-by: Santosh Nayak <santoshprasadnayak@gmail.com>
Acked-by: Jack Wang <jack_wang@usish.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
2012-02-29 16:52:59 -06:00
..
Makefile
pm8001_chips.h
pm8001_ctl.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pm8001_ctl.h [SCSI] pm8001: enable read HBA SAS address from VPD 2009-12-10 10:09:23 -06:00
pm8001_defs.h
pm8001_hwi.c [SCSI] pm8001: Fix possible racing condition. 2012-02-29 16:52:59 -06:00
pm8001_hwi.h Fix common misspellings 2011-03-31 11:26:23 -03:00
pm8001_init.c [SCSI] libsas: async ata scanning 2012-02-29 15:35:41 -06:00
pm8001_sas.c [SCSI] libsas: fix sas_find_local_phy(), take phy references 2012-02-29 13:01:06 -06:00
pm8001_sas.h [SCSI] pm8001: deficient responses to IO_XFER_ERROR_BREAK and IO_XFER_OPEN_RETRY_TIMEOUT 2012-02-19 08:08:52 -06:00