aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/pm8001
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-03-31 16:31:23 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-31 16:31:23 -0400
commita75ee6ecd411a50bf4da927c2fdb2cb56246a2bd (patch)
treefcb06e1940152b115901fda68e7eea1cc1196ff3 /drivers/scsi/pm8001
parentc9651e70ad0aa499814817cbf3cc1d0b806ed3a1 (diff)
parent699316948628dab9e813c415640fe5b9f65cd5e3 (diff)
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
Pull SCSI updates from James Bottomley: "This is primarily another round of driver updates (lpfc, bfa, fcoe, ipr) plus a new ufshcd driver. There shouldn't be anything controversial in here (The final deletion of scsi proc_ops which caused some build breakage has been held over until the next merge window to give us more time to stabilise it). I'm afraid, with me moving continents at exactly the wrong time, anything submitted after the merge window opened has been held over to the next merge window." * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (63 commits) [SCSI] ipr: Driver version 2.5.3 [SCSI] ipr: Increase alignment boundary of command blocks [SCSI] ipr: Increase max concurrent oustanding commands [SCSI] ipr: Remove unnecessary memory barriers [SCSI] ipr: Remove unnecessary interrupt clearing on new adapters [SCSI] ipr: Fix target id allocation re-use problem [SCSI] atp870u, mpt2sas, qla4xxx use pci_dev->revision [SCSI] fcoe: Drop the rtnl_mutex before calling fcoe_ctlr_link_up [SCSI] bfa: Update the driver version to 3.0.23.0 [SCSI] bfa: BSG and User interface fixes. [SCSI] bfa: Fix to avoid vport delete hang on request queue full scenario. [SCSI] bfa: Move service parameter programming logic into firmware. [SCSI] bfa: Revised Fabric Assigned Address(FAA) feature implementation. [SCSI] bfa: Flash controller IOC pll init fixes. [SCSI] bfa: Serialize the IOC hw semaphore unlock logic. [SCSI] bfa: Modify ISR to process pending completions [SCSI] bfa: Add fc host issue lip support [SCSI] mpt2sas: remove extraneous sas_log_info messages [SCSI] libfc: fcoe_transport_create fails in single-CPU environment [SCSI] fcoe: reduce contention for fcoe_rx_list lock [v2] ...
Diffstat (limited to 'drivers/scsi/pm8001')
-rw-r--r--drivers/scsi/pm8001/pm8001_hwi.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
index 3619f6eeeeda..9d82ee5c10de 100644
--- a/drivers/scsi/pm8001/pm8001_hwi.c
+++ b/drivers/scsi/pm8001/pm8001_hwi.c
@@ -2093,6 +2093,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
2093 struct ata_task_resp *resp ; 2093 struct ata_task_resp *resp ;
2094 u32 *sata_resp; 2094 u32 *sata_resp;
2095 struct pm8001_device *pm8001_dev; 2095 struct pm8001_device *pm8001_dev;
2096 unsigned long flags;
2096 2097
2097 psataPayload = (struct sata_completion_resp *)(piomb + 4); 2098 psataPayload = (struct sata_completion_resp *)(piomb + 4);
2098 status = le32_to_cpu(psataPayload->status); 2099 status = le32_to_cpu(psataPayload->status);
@@ -2382,26 +2383,26 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
2382 ts->stat = SAS_DEV_NO_RESPONSE; 2383 ts->stat = SAS_DEV_NO_RESPONSE;
2383 break; 2384 break;
2384 } 2385 }
2385 spin_lock_irq(&t->task_state_lock); 2386 spin_lock_irqsave(&t->task_state_lock, flags);
2386 t->task_state_flags &= ~SAS_TASK_STATE_PENDING; 2387 t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
2387 t->task_state_flags &= ~SAS_TASK_AT_INITIATOR; 2388 t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
2388 t->task_state_flags |= SAS_TASK_STATE_DONE; 2389 t->task_state_flags |= SAS_TASK_STATE_DONE;
2389 if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) { 2390 if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
2390 spin_unlock_irq(&t->task_state_lock); 2391 spin_unlock_irqrestore(&t->task_state_lock, flags);
2391 PM8001_FAIL_DBG(pm8001_ha, 2392 PM8001_FAIL_DBG(pm8001_ha,
2392 pm8001_printk("task 0x%p done with io_status 0x%x" 2393 pm8001_printk("task 0x%p done with io_status 0x%x"
2393 " resp 0x%x stat 0x%x but aborted by upper layer!\n", 2394 " resp 0x%x stat 0x%x but aborted by upper layer!\n",
2394 t, status, ts->resp, ts->stat)); 2395 t, status, ts->resp, ts->stat));
2395 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); 2396 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
2396 } else if (t->uldd_task) { 2397 } else if (t->uldd_task) {
2397 spin_unlock_irq(&t->task_state_lock); 2398 spin_unlock_irqrestore(&t->task_state_lock, flags);
2398 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); 2399 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
2399 mb();/* ditto */ 2400 mb();/* ditto */
2400 spin_unlock_irq(&pm8001_ha->lock); 2401 spin_unlock_irq(&pm8001_ha->lock);
2401 t->task_done(t); 2402 t->task_done(t);
2402 spin_lock_irq(&pm8001_ha->lock); 2403 spin_lock_irq(&pm8001_ha->lock);
2403 } else if (!t->uldd_task) { 2404 } else if (!t->uldd_task) {
2404 spin_unlock_irq(&t->task_state_lock); 2405 spin_unlock_irqrestore(&t->task_state_lock, flags);
2405 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); 2406 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
2406 mb();/*ditto*/ 2407 mb();/*ditto*/
2407 spin_unlock_irq(&pm8001_ha->lock); 2408 spin_unlock_irq(&pm8001_ha->lock);
@@ -2423,6 +2424,7 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
2423 u32 tag = le32_to_cpu(psataPayload->tag); 2424 u32 tag = le32_to_cpu(psataPayload->tag);
2424 u32 port_id = le32_to_cpu(psataPayload->port_id); 2425 u32 port_id = le32_to_cpu(psataPayload->port_id);
2425 u32 dev_id = le32_to_cpu(psataPayload->device_id); 2426 u32 dev_id = le32_to_cpu(psataPayload->device_id);
2427 unsigned long flags;
2426 2428
2427 ccb = &pm8001_ha->ccb_info[tag]; 2429 ccb = &pm8001_ha->ccb_info[tag];
2428 t = ccb->task; 2430 t = ccb->task;
@@ -2593,26 +2595,26 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
2593 ts->stat = SAS_OPEN_TO; 2595 ts->stat = SAS_OPEN_TO;
2594 break; 2596 break;
2595 } 2597 }
2596 spin_lock_irq(&t->task_state_lock); 2598 spin_lock_irqsave(&t->task_state_lock, flags);
2597 t->task_state_flags &= ~SAS_TASK_STATE_PENDING; 2599 t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
2598 t->task_state_flags &= ~SAS_TASK_AT_INITIATOR; 2600 t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
2599 t->task_state_flags |= SAS_TASK_STATE_DONE; 2601 t->task_state_flags |= SAS_TASK_STATE_DONE;
2600 if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) { 2602 if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
2601 spin_unlock_irq(&t->task_state_lock); 2603 spin_unlock_irqrestore(&t->task_state_lock, flags);
2602 PM8001_FAIL_DBG(pm8001_ha, 2604 PM8001_FAIL_DBG(pm8001_ha,
2603 pm8001_printk("task 0x%p done with io_status 0x%x" 2605 pm8001_printk("task 0x%p done with io_status 0x%x"
2604 " resp 0x%x stat 0x%x but aborted by upper layer!\n", 2606 " resp 0x%x stat 0x%x but aborted by upper layer!\n",
2605 t, event, ts->resp, ts->stat)); 2607 t, event, ts->resp, ts->stat));
2606 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); 2608 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
2607 } else if (t->uldd_task) { 2609 } else if (t->uldd_task) {
2608 spin_unlock_irq(&t->task_state_lock); 2610 spin_unlock_irqrestore(&t->task_state_lock, flags);
2609 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); 2611 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
2610 mb();/* ditto */ 2612 mb();/* ditto */
2611 spin_unlock_irq(&pm8001_ha->lock); 2613 spin_unlock_irq(&pm8001_ha->lock);
2612 t->task_done(t); 2614 t->task_done(t);
2613 spin_lock_irq(&pm8001_ha->lock); 2615 spin_lock_irq(&pm8001_ha->lock);
2614 } else if (!t->uldd_task) { 2616 } else if (!t->uldd_task) {
2615 spin_unlock_irq(&t->task_state_lock); 2617 spin_unlock_irqrestore(&t->task_state_lock, flags);
2616 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); 2618 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
2617 mb();/*ditto*/ 2619 mb();/*ditto*/
2618 spin_unlock_irq(&pm8001_ha->lock); 2620 spin_unlock_irq(&pm8001_ha->lock);