Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (87 commits) [SCSI] fusion: fix domain validation loops [SCSI] qla2xxx: fix regression on sparc64 [SCSI] modalias for scsi devices [SCSI] sg: cap reserved_size values at max_sectors [SCSI] BusLogic: stop using check_region [SCSI] tgt: fix rdma transfer bugs [SCSI] aacraid: fix aacraid not finding device [SCSI] aacraid: Correct SMC products in aacraid.txt [SCSI] scsi_error.c: Add EH Start Unit retry [SCSI] aacraid: [Fastboot] Panics for AACRAID driver during 'insmod' for kexec test. [SCSI] ipr: Driver version to 2.3.2 [SCSI] ipr: Faster sg list fetch [SCSI] ipr: Return better qc_issue errors [SCSI] ipr: Disrupt device error [SCSI] ipr: Improve async error logging level control [SCSI] ipr: PCI unblock config access fix [SCSI] ipr: Fix for oops following SATA request sense [SCSI] ipr: Log error for SAS dual path switch [SCSI] ipr: Enable logging of debug error data for all devices [SCSI] ipr: Add new PCI-E IDs to device table ...
This commit is contained in:
@@ -1531,6 +1531,7 @@ mpt_resume(struct pci_dev *pdev)
|
||||
MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
|
||||
u32 device_state = pdev->current_state;
|
||||
int recovery_state;
|
||||
int err;
|
||||
|
||||
printk(MYIOC_s_INFO_FMT
|
||||
"pci-resume: pdev=0x%p, slot=%s, Previous operating state [D%d]\n",
|
||||
@@ -1538,7 +1539,9 @@ mpt_resume(struct pci_dev *pdev)
|
||||
|
||||
pci_set_power_state(pdev, 0);
|
||||
pci_restore_state(pdev);
|
||||
pci_enable_device(pdev);
|
||||
err = pci_enable_device(pdev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* enable interrupts */
|
||||
CHIPREG_WRITE32(&ioc->chip->IntMask, MPI_HIM_DIM);
|
||||
@@ -4739,12 +4742,8 @@ mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum)
|
||||
}
|
||||
|
||||
/**
|
||||
* mpt_inactive_raid_list_free
|
||||
*
|
||||
* This clears this link list.
|
||||
*
|
||||
* @ioc - pointer to per adapter structure
|
||||
*
|
||||
* mpt_inactive_raid_list_free - This clears this link list.
|
||||
* @ioc : pointer to per adapter structure
|
||||
**/
|
||||
static void
|
||||
mpt_inactive_raid_list_free(MPT_ADAPTER *ioc)
|
||||
@@ -4764,15 +4763,11 @@ mpt_inactive_raid_list_free(MPT_ADAPTER *ioc)
|
||||
}
|
||||
|
||||
/**
|
||||
* mpt_inactive_raid_volumes
|
||||
*
|
||||
* This sets up link list of phy_disk_nums for devices belonging in an inactive volume
|
||||
*
|
||||
* @ioc - pointer to per adapter structure
|
||||
* @channel - volume channel
|
||||
* @id - volume target id
|
||||
*
|
||||
* mpt_inactive_raid_volumes - sets up link list of phy_disk_nums for devices belonging in an inactive volume
|
||||
*
|
||||
* @ioc : pointer to per adapter structure
|
||||
* @channel : volume channel
|
||||
* @id : volume target id
|
||||
**/
|
||||
static void
|
||||
mpt_inactive_raid_volumes(MPT_ADAPTER *ioc, u8 channel, u8 id)
|
||||
@@ -6663,7 +6658,7 @@ union loginfo_type {
|
||||
/**
|
||||
* mpt_iocstatus_info_config - IOCSTATUS information for config pages
|
||||
* @ioc: Pointer to MPT_ADAPTER structure
|
||||
* ioc_status: U32 IOCStatus word from IOC
|
||||
* @ioc_status: U32 IOCStatus word from IOC
|
||||
* @mf: Pointer to MPT request frame
|
||||
*
|
||||
* Refer to lsi/mpi.h.
|
||||
|
@@ -994,6 +994,7 @@ typedef struct _MPT_SCSI_HOST {
|
||||
int scandv_wait_done;
|
||||
long last_queue_full;
|
||||
u16 tm_iocstatus;
|
||||
u16 spi_pending;
|
||||
struct list_head target_reset_list;
|
||||
} MPT_SCSI_HOST;
|
||||
|
||||
|
@@ -819,10 +819,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
|
||||
sc->resid=0;
|
||||
case MPI_IOCSTATUS_SCSI_RECOVERED_ERROR: /* 0x0040 */
|
||||
case MPI_IOCSTATUS_SUCCESS: /* 0x0000 */
|
||||
if (scsi_status == MPI_SCSI_STATUS_BUSY)
|
||||
sc->result = (DID_BUS_BUSY << 16) | scsi_status;
|
||||
else
|
||||
sc->result = (DID_OK << 16) | scsi_status;
|
||||
sc->result = (DID_OK << 16) | scsi_status;
|
||||
if (scsi_state == 0) {
|
||||
;
|
||||
} else if (scsi_state & MPI_SCSI_STATE_AUTOSENSE_VALID) {
|
||||
@@ -1188,20 +1185,7 @@ mptscsih_suspend(struct pci_dev *pdev, pm_message_t state)
|
||||
int
|
||||
mptscsih_resume(struct pci_dev *pdev)
|
||||
{
|
||||
MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
|
||||
struct Scsi_Host *host = ioc->sh;
|
||||
MPT_SCSI_HOST *hd;
|
||||
|
||||
mpt_resume(pdev);
|
||||
|
||||
if(!host)
|
||||
return 0;
|
||||
|
||||
hd = (MPT_SCSI_HOST *)host->hostdata;
|
||||
if(!hd)
|
||||
return 0;
|
||||
|
||||
return 0;
|
||||
return mpt_resume(pdev);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1537,21 +1521,23 @@ mptscsih_freeChainBuffers(MPT_ADAPTER *ioc, int req_idx)
|
||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||
/**
|
||||
* mptscsih_TMHandler - Generic handler for SCSI Task Management.
|
||||
* Fall through to mpt_HardResetHandler if: not operational, too many
|
||||
* failed TM requests or handshake failure.
|
||||
*
|
||||
* @ioc: Pointer to MPT_ADAPTER structure
|
||||
* @hd: Pointer to MPT SCSI HOST structure
|
||||
* @type: Task Management type
|
||||
* @channel: channel number for task management
|
||||
* @id: Logical Target ID for reset (if appropriate)
|
||||
* @lun: Logical Unit for reset (if appropriate)
|
||||
* @ctx2abort: Context for the task to be aborted (if appropriate)
|
||||
* @timeout: timeout for task management control
|
||||
*
|
||||
* Fall through to mpt_HardResetHandler if: not operational, too many
|
||||
* failed TM requests or handshake failure.
|
||||
*
|
||||
* Remark: Currently invoked from a non-interrupt thread (_bh).
|
||||
*
|
||||
* Remark: With old EH code, at most 1 SCSI TaskMgmt function per IOC
|
||||
* will be active.
|
||||
*
|
||||
* Returns 0 for SUCCESS, or FAILED.
|
||||
* Returns 0 for SUCCESS, or %FAILED.
|
||||
**/
|
||||
int
|
||||
mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, int ctx2abort, ulong timeout)
|
||||
@@ -1650,9 +1636,11 @@ mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, int c
|
||||
* mptscsih_IssueTaskMgmt - Generic send Task Management function.
|
||||
* @hd: Pointer to MPT_SCSI_HOST structure
|
||||
* @type: Task Management type
|
||||
* @channel: channel number for task management
|
||||
* @id: Logical Target ID for reset (if appropriate)
|
||||
* @lun: Logical Unit for reset (if appropriate)
|
||||
* @ctx2abort: Context for the task to be aborted (if appropriate)
|
||||
* @timeout: timeout for task management control
|
||||
*
|
||||
* Remark: _HardResetHandler can be invoked from an interrupt thread (timer)
|
||||
* or a non-interrupt thread. In the former, must not call schedule().
|
||||
@@ -2022,6 +2010,7 @@ mptscsih_tm_pending_wait(MPT_SCSI_HOST * hd)
|
||||
/**
|
||||
* mptscsih_tm_wait_for_completion - wait for completion of TM task
|
||||
* @hd: Pointer to MPT host structure.
|
||||
* @timeout: timeout value
|
||||
*
|
||||
* Returns {SUCCESS,FAILED}.
|
||||
*/
|
||||
|
@@ -96,14 +96,13 @@ static int mptspiTaskCtx = -1;
|
||||
static int mptspiInternalCtx = -1; /* Used only for internal commands */
|
||||
|
||||
/**
|
||||
* mptspi_setTargetNegoParms - Update the target negotiation
|
||||
* parameters based on the the Inquiry data, adapter capabilities,
|
||||
* and NVRAM settings
|
||||
*
|
||||
* mptspi_setTargetNegoParms - Update the target negotiation parameters
|
||||
* @hd: Pointer to a SCSI Host Structure
|
||||
* @vtarget: per target private data
|
||||
* @target: per target private data
|
||||
* @sdev: SCSI device
|
||||
*
|
||||
* Update the target negotiation parameters based on the the Inquiry
|
||||
* data, adapter capabilities, and NVRAM settings.
|
||||
**/
|
||||
static void
|
||||
mptspi_setTargetNegoParms(MPT_SCSI_HOST *hd, VirtTarget *target,
|
||||
@@ -234,7 +233,7 @@ mptspi_setTargetNegoParms(MPT_SCSI_HOST *hd, VirtTarget *target,
|
||||
/**
|
||||
* mptspi_writeIOCPage4 - write IOC Page 4
|
||||
* @hd: Pointer to a SCSI Host Structure
|
||||
* @channel:
|
||||
* @channel: channel number
|
||||
* @id: write IOC Page4 for this ID & Bus
|
||||
*
|
||||
* Return: -EAGAIN if unable to obtain a Message Frame
|
||||
@@ -446,7 +445,7 @@ static int mptspi_target_alloc(struct scsi_target *starget)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
mptspi_target_destroy(struct scsi_target *starget)
|
||||
{
|
||||
if (starget->hostdata)
|
||||
@@ -677,7 +676,9 @@ static void mptspi_dv_device(struct _MPT_SCSI_HOST *hd,
|
||||
return;
|
||||
}
|
||||
|
||||
hd->spi_pending |= (1 << sdev->id);
|
||||
spi_dv_device(sdev);
|
||||
hd->spi_pending &= ~(1 << sdev->id);
|
||||
|
||||
if (sdev->channel == 1 &&
|
||||
mptscsih_quiesce_raid(hd, 0, vtarget->channel, vtarget->id) < 0)
|
||||
@@ -1203,11 +1204,27 @@ mptspi_dv_renegotiate_work(struct work_struct *work)
|
||||
container_of(work, struct work_queue_wrapper, work);
|
||||
struct _MPT_SCSI_HOST *hd = wqw->hd;
|
||||
struct scsi_device *sdev;
|
||||
struct scsi_target *starget;
|
||||
struct _CONFIG_PAGE_SCSI_DEVICE_1 pg1;
|
||||
u32 nego;
|
||||
|
||||
kfree(wqw);
|
||||
|
||||
shost_for_each_device(sdev, hd->ioc->sh)
|
||||
mptspi_dv_device(hd, sdev);
|
||||
if (hd->spi_pending) {
|
||||
shost_for_each_device(sdev, hd->ioc->sh) {
|
||||
if (hd->spi_pending & (1 << sdev->id))
|
||||
continue;
|
||||
starget = scsi_target(sdev);
|
||||
nego = mptspi_getRP(starget);
|
||||
pg1.RequestedParameters = cpu_to_le32(nego);
|
||||
pg1.Reserved = 0;
|
||||
pg1.Configuration = 0;
|
||||
mptspi_write_spi_device_pg1(starget, &pg1);
|
||||
}
|
||||
} else {
|
||||
shost_for_each_device(sdev, hd->ioc->sh)
|
||||
mptspi_dv_device(hd, sdev);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1453,6 +1470,7 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
init_waitqueue_head(&hd->scandv_waitq);
|
||||
hd->scandv_wait_done = 0;
|
||||
hd->last_queue_full = 0;
|
||||
hd->spi_pending = 0;
|
||||
|
||||
/* Some versions of the firmware don't support page 0; without
|
||||
* that we can't get the parameters */
|
||||
|
Reference in New Issue
Block a user