Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (170 commits) [SCSI] scsi_dh_rdac: Add MD36xxf into device list [SCSI] scsi_debug: add consecutive medium errors [SCSI] libsas: fix ata list corruption issue [SCSI] hpsa: export resettable host attribute [SCSI] hpsa: move device attributes to avoid forward declarations [SCSI] scsi_debug: Logical Block Provisioning (SBC3r26) [SCSI] sd: Logical Block Provisioning update [SCSI] Include protection operation in SCSI command trace [SCSI] hpsa: fix incorrect PCI IDs and add two new ones (2nd try) [SCSI] target: Fix volume size misreporting for volumes > 2TB [SCSI] bnx2fc: Broadcom FCoE offload driver [SCSI] fcoe: fix broken fcoe interface reset [SCSI] fcoe: precedence bug in fcoe_filter_frames() [SCSI] libfcoe: Remove stale fcoe-netdev entries [SCSI] libfcoe: Move FCOE_MTU definition from fcoe.h to libfcoe.h [SCSI] libfc: introduce __fc_fill_fc_hdr that accepts fc_hdr as an argument [SCSI] fcoe, libfc: initialize EM anchors list and then update npiv EMs [SCSI] Revert "[SCSI] libfc: fix exchange being deleted when the abort itself is timed out" [SCSI] libfc: Fixing a memory leak when destroying an interface [SCSI] megaraid_sas: Version and Changelog update ... Fix up trivial conflicts due to whitespace differences in drivers/scsi/libsas/{sas_ata.c,sas_scsi_host.c}
This commit is contained in:
@@ -752,20 +752,19 @@ static u8
|
||||
_base_get_cb_idx(struct MPT2SAS_ADAPTER *ioc, u16 smid)
|
||||
{
|
||||
int i;
|
||||
u8 cb_idx = 0xFF;
|
||||
u8 cb_idx;
|
||||
|
||||
if (smid >= ioc->hi_priority_smid) {
|
||||
if (smid < ioc->internal_smid) {
|
||||
i = smid - ioc->hi_priority_smid;
|
||||
cb_idx = ioc->hpr_lookup[i].cb_idx;
|
||||
} else if (smid <= ioc->hba_queue_depth) {
|
||||
i = smid - ioc->internal_smid;
|
||||
cb_idx = ioc->internal_lookup[i].cb_idx;
|
||||
}
|
||||
} else {
|
||||
if (smid < ioc->hi_priority_smid) {
|
||||
i = smid - 1;
|
||||
cb_idx = ioc->scsi_lookup[i].cb_idx;
|
||||
}
|
||||
} else if (smid < ioc->internal_smid) {
|
||||
i = smid - ioc->hi_priority_smid;
|
||||
cb_idx = ioc->hpr_lookup[i].cb_idx;
|
||||
} else if (smid <= ioc->hba_queue_depth) {
|
||||
i = smid - ioc->internal_smid;
|
||||
cb_idx = ioc->internal_lookup[i].cb_idx;
|
||||
} else
|
||||
cb_idx = 0xFF;
|
||||
return cb_idx;
|
||||
}
|
||||
|
||||
@@ -1430,7 +1429,7 @@ mpt2sas_base_get_smid_scsiio(struct MPT2SAS_ADAPTER *ioc, u8 cb_idx,
|
||||
struct scsi_cmnd *scmd)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct request_tracker *request;
|
||||
struct scsiio_tracker *request;
|
||||
u16 smid;
|
||||
|
||||
spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
|
||||
@@ -1442,7 +1441,7 @@ mpt2sas_base_get_smid_scsiio(struct MPT2SAS_ADAPTER *ioc, u8 cb_idx,
|
||||
}
|
||||
|
||||
request = list_entry(ioc->free_list.next,
|
||||
struct request_tracker, tracker_list);
|
||||
struct scsiio_tracker, tracker_list);
|
||||
request->scmd = scmd;
|
||||
request->cb_idx = cb_idx;
|
||||
smid = request->smid;
|
||||
@@ -1496,48 +1495,47 @@ mpt2sas_base_free_smid(struct MPT2SAS_ADAPTER *ioc, u16 smid)
|
||||
struct chain_tracker *chain_req, *next;
|
||||
|
||||
spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
|
||||
if (smid >= ioc->hi_priority_smid) {
|
||||
if (smid < ioc->internal_smid) {
|
||||
/* hi-priority */
|
||||
i = smid - ioc->hi_priority_smid;
|
||||
ioc->hpr_lookup[i].cb_idx = 0xFF;
|
||||
list_add_tail(&ioc->hpr_lookup[i].tracker_list,
|
||||
&ioc->hpr_free_list);
|
||||
} else {
|
||||
/* internal queue */
|
||||
i = smid - ioc->internal_smid;
|
||||
ioc->internal_lookup[i].cb_idx = 0xFF;
|
||||
list_add_tail(&ioc->internal_lookup[i].tracker_list,
|
||||
&ioc->internal_free_list);
|
||||
if (smid < ioc->hi_priority_smid) {
|
||||
/* scsiio queue */
|
||||
i = smid - 1;
|
||||
if (!list_empty(&ioc->scsi_lookup[i].chain_list)) {
|
||||
list_for_each_entry_safe(chain_req, next,
|
||||
&ioc->scsi_lookup[i].chain_list, tracker_list) {
|
||||
list_del_init(&chain_req->tracker_list);
|
||||
list_add_tail(&chain_req->tracker_list,
|
||||
&ioc->free_chain_list);
|
||||
}
|
||||
}
|
||||
ioc->scsi_lookup[i].cb_idx = 0xFF;
|
||||
ioc->scsi_lookup[i].scmd = NULL;
|
||||
list_add_tail(&ioc->scsi_lookup[i].tracker_list,
|
||||
&ioc->free_list);
|
||||
spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
/* scsiio queue */
|
||||
i = smid - 1;
|
||||
if (!list_empty(&ioc->scsi_lookup[i].chain_list)) {
|
||||
list_for_each_entry_safe(chain_req, next,
|
||||
&ioc->scsi_lookup[i].chain_list, tracker_list) {
|
||||
list_del_init(&chain_req->tracker_list);
|
||||
list_add_tail(&chain_req->tracker_list,
|
||||
&ioc->free_chain_list);
|
||||
/*
|
||||
* See _wait_for_commands_to_complete() call with regards
|
||||
* to this code.
|
||||
*/
|
||||
if (ioc->shost_recovery && ioc->pending_io_count) {
|
||||
if (ioc->pending_io_count == 1)
|
||||
wake_up(&ioc->reset_wq);
|
||||
ioc->pending_io_count--;
|
||||
}
|
||||
return;
|
||||
} else if (smid < ioc->internal_smid) {
|
||||
/* hi-priority */
|
||||
i = smid - ioc->hi_priority_smid;
|
||||
ioc->hpr_lookup[i].cb_idx = 0xFF;
|
||||
list_add_tail(&ioc->hpr_lookup[i].tracker_list,
|
||||
&ioc->hpr_free_list);
|
||||
} else if (smid <= ioc->hba_queue_depth) {
|
||||
/* internal queue */
|
||||
i = smid - ioc->internal_smid;
|
||||
ioc->internal_lookup[i].cb_idx = 0xFF;
|
||||
list_add_tail(&ioc->internal_lookup[i].tracker_list,
|
||||
&ioc->internal_free_list);
|
||||
}
|
||||
ioc->scsi_lookup[i].cb_idx = 0xFF;
|
||||
ioc->scsi_lookup[i].scmd = NULL;
|
||||
list_add_tail(&ioc->scsi_lookup[i].tracker_list,
|
||||
&ioc->free_list);
|
||||
spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
|
||||
|
||||
/*
|
||||
* See _wait_for_commands_to_complete() call with regards to this code.
|
||||
*/
|
||||
if (ioc->shost_recovery && ioc->pending_io_count) {
|
||||
if (ioc->pending_io_count == 1)
|
||||
wake_up(&ioc->reset_wq);
|
||||
ioc->pending_io_count--;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1724,6 +1722,31 @@ _base_display_dell_branding(struct MPT2SAS_ADAPTER *ioc)
|
||||
ioc->pdev->subsystem_device);
|
||||
}
|
||||
|
||||
/**
|
||||
* _base_display_intel_branding - Display branding string
|
||||
* @ioc: per adapter object
|
||||
*
|
||||
* Return nothing.
|
||||
*/
|
||||
static void
|
||||
_base_display_intel_branding(struct MPT2SAS_ADAPTER *ioc)
|
||||
{
|
||||
if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_INTEL &&
|
||||
ioc->pdev->device == MPI2_MFGPAGE_DEVID_SAS2008) {
|
||||
|
||||
switch (ioc->pdev->subsystem_device) {
|
||||
case MPT2SAS_INTEL_RMS2LL080_SSDID:
|
||||
printk(MPT2SAS_INFO_FMT "%s\n", ioc->name,
|
||||
MPT2SAS_INTEL_RMS2LL080_BRANDING);
|
||||
break;
|
||||
case MPT2SAS_INTEL_RMS2LL040_SSDID:
|
||||
printk(MPT2SAS_INFO_FMT "%s\n", ioc->name,
|
||||
MPT2SAS_INTEL_RMS2LL040_BRANDING);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* _base_display_ioc_capabilities - Disply IOC's capabilities.
|
||||
* @ioc: per adapter object
|
||||
@@ -1754,6 +1777,7 @@ _base_display_ioc_capabilities(struct MPT2SAS_ADAPTER *ioc)
|
||||
ioc->bios_pg3.BiosVersion & 0x000000FF);
|
||||
|
||||
_base_display_dell_branding(ioc);
|
||||
_base_display_intel_branding(ioc);
|
||||
|
||||
printk(MPT2SAS_INFO_FMT "Protocol=(", ioc->name);
|
||||
|
||||
@@ -2252,9 +2276,9 @@ _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
|
||||
ioc->name, (unsigned long long) ioc->request_dma));
|
||||
total_sz += sz;
|
||||
|
||||
sz = ioc->scsiio_depth * sizeof(struct request_tracker);
|
||||
sz = ioc->scsiio_depth * sizeof(struct scsiio_tracker);
|
||||
ioc->scsi_lookup_pages = get_order(sz);
|
||||
ioc->scsi_lookup = (struct request_tracker *)__get_free_pages(
|
||||
ioc->scsi_lookup = (struct scsiio_tracker *)__get_free_pages(
|
||||
GFP_KERNEL, ioc->scsi_lookup_pages);
|
||||
if (!ioc->scsi_lookup) {
|
||||
printk(MPT2SAS_ERR_FMT "scsi_lookup: get_free_pages failed, "
|
||||
|
Reference in New Issue
Block a user