lkml.org 
[lkml]   [2012]   [Mar]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] scsi/mpt2sas: fix unsafe preempt setting for ioc
    Date
    commit 911ae943 add a new function:
    +_base_get_msix_index(struct MPT2SAS_ADAPTER *ioc)
    +{
    + return ioc->cpu_msix_table[smp_processor_id()];
    +}
    Here smp_processor_id() need be used in preempt safe condition. but
    caller did not give this assurance. So fix this in caller.

    Signed-off-by: Alex Shi <alex.shi@intel.com>
    ---
    drivers/scsi/mpt2sas/mpt2sas_base.c | 6 ++++++
    1 files changed, 6 insertions(+), 0 deletions(-)

    diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
    index a78036f..55a368e 100644
    --- a/drivers/scsi/mpt2sas/mpt2sas_base.c
    +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
    @@ -1803,6 +1803,7 @@ mpt2sas_base_put_smid_scsi_io(struct MPT2SAS_ADAPTER *ioc, u16 smid, u16 handle)
    u64 *request = (u64 *)&descriptor;


    + preempt_disable();
    descriptor.SCSIIO.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO;
    descriptor.SCSIIO.MSIxIndex = _base_get_msix_index(ioc);
    descriptor.SCSIIO.SMID = cpu_to_le16(smid);
    @@ -1810,6 +1811,7 @@ mpt2sas_base_put_smid_scsi_io(struct MPT2SAS_ADAPTER *ioc, u16 smid, u16 handle)
    descriptor.SCSIIO.LMID = 0;
    _base_writeq(*request, &ioc->chip->RequestDescriptorPostLow,
    &ioc->scsi_lookup_lock);
    + preempt_enable();
    }


    @@ -1849,6 +1851,7 @@ mpt2sas_base_put_smid_default(struct MPT2SAS_ADAPTER *ioc, u16 smid)
    Mpi2RequestDescriptorUnion_t descriptor;
    u64 *request = (u64 *)&descriptor;

    + preempt_disable();
    descriptor.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE;
    descriptor.Default.MSIxIndex = _base_get_msix_index(ioc);
    descriptor.Default.SMID = cpu_to_le16(smid);
    @@ -1856,6 +1859,7 @@ mpt2sas_base_put_smid_default(struct MPT2SAS_ADAPTER *ioc, u16 smid)
    descriptor.Default.DescriptorTypeDependent = 0;
    _base_writeq(*request, &ioc->chip->RequestDescriptorPostLow,
    &ioc->scsi_lookup_lock);
    + preempt_enable();
    }

    /**
    @@ -1873,6 +1877,7 @@ mpt2sas_base_put_smid_target_assist(struct MPT2SAS_ADAPTER *ioc, u16 smid,
    Mpi2RequestDescriptorUnion_t descriptor;
    u64 *request = (u64 *)&descriptor;

    + preempt_disable();
    descriptor.SCSITarget.RequestFlags =
    MPI2_REQ_DESCRIPT_FLAGS_SCSI_TARGET;
    descriptor.SCSITarget.MSIxIndex = _base_get_msix_index(ioc);
    @@ -1881,6 +1886,7 @@ mpt2sas_base_put_smid_target_assist(struct MPT2SAS_ADAPTER *ioc, u16 smid,
    descriptor.SCSITarget.IoIndex = cpu_to_le16(io_index);
    _base_writeq(*request, &ioc->chip->RequestDescriptorPostLow,
    &ioc->scsi_lookup_lock);
    + preempt_enable();
    }

    /**
    --
    1.7.5.4


    \
     
     \ /
      Last update: 2012-03-26 08:23    [W:0.030 / U:0.012 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site