Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 68959
b: refs/heads/master
c: 52fa077
h: refs/heads/master
i:
  68957: 9cedc8c
  68955: d96f570
  68951: fc80752
  68943: cf77b48
  68927: 73b8759
v: v3
  • Loading branch information
Matthew Wilcox authored and James Bottomley committed Oct 12, 2007
1 parent b0319ba commit 11b8e33
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 62 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 05848b6e66ee237c4496c2b49821d2622b0f677e
refs/heads/master: 52fa07770921d9cbe815d3aff36702c88cdec978
83 changes: 22 additions & 61 deletions trunk/drivers/scsi/advansys.c
Original file line number Diff line number Diff line change
Expand Up @@ -2229,7 +2229,6 @@ do { \
#define ASC_BOARDP(host) ((asc_board_t *) &((host)->hostdata))

/* asc_board_t flags */
#define ASC_HOST_IN_RESET 0x01
#define ASC_IS_WIDE_BOARD 0x04 /* AdvanSys Wide Board */
#define ASC_SELECT_QUEUE_DEPTHS 0x08

Expand Down Expand Up @@ -9751,106 +9750,68 @@ static int AscISR(ASC_DVC_VAR *asc_dvc)
*/
static int advansys_reset(struct scsi_cmnd *scp)
{
struct Scsi_Host *shost;
asc_board_t *boardp;
ASC_DVC_VAR *asc_dvc_varp;
ADV_DVC_VAR *adv_dvc_varp;
ulong flags;
struct Scsi_Host *shost = scp->device->host;
struct asc_board *boardp = ASC_BOARDP(shost);
unsigned long flags;
int status;
int ret = SUCCESS;

ASC_DBG1(1, "advansys_reset: 0x%lx\n", (ulong)scp);
ASC_DBG1(1, "advansys_reset: 0x%p\n", scp);

#ifdef ADVANSYS_STATS
if (scp->device->host != NULL) {
ASC_STATS(scp->device->host, reset);
}
#endif /* ADVANSYS_STATS */

if ((shost = scp->device->host) == NULL) {
scp->result = HOST_BYTE(DID_ERROR);
return FAILED;
}
ASC_STATS(shost, reset);

boardp = ASC_BOARDP(shost);

ASC_PRINT1("advansys_reset: board %d: SCSI bus reset started...\n",
boardp->id);
/*
* Check for re-entrancy.
*/
spin_lock_irqsave(&boardp->lock, flags);
if (boardp->flags & ASC_HOST_IN_RESET) {
spin_unlock_irqrestore(&boardp->lock, flags);
return FAILED;
}
boardp->flags |= ASC_HOST_IN_RESET;
spin_unlock_irqrestore(&boardp->lock, flags);
scmd_printk(KERN_INFO, scp, "SCSI bus reset started...\n");

if (ASC_NARROW_BOARD(boardp)) {
/*
* Narrow Board
*/
asc_dvc_varp = &boardp->dvc_var.asc_dvc_var;
ASC_DVC_VAR *asc_dvc = &boardp->dvc_var.asc_dvc_var;

/*
* Reset the chip and SCSI bus.
*/
/* Reset the chip and SCSI bus. */
ASC_DBG(1, "advansys_reset: before AscInitAsc1000Driver()\n");
status = AscInitAsc1000Driver(asc_dvc_varp);
status = AscInitAsc1000Driver(asc_dvc);

/* Refer to ASC_IERR_* defintions for meaning of 'err_code'. */
if (asc_dvc_varp->err_code) {
ASC_PRINT2("advansys_reset: board %d: SCSI bus reset "
"error: 0x%x\n", boardp->id,
asc_dvc_varp->err_code);
if (asc_dvc->err_code) {
scmd_printk(KERN_INFO, scp, "SCSI bus reset error: "
"0x%x\n", asc_dvc->err_code);
ret = FAILED;
} else if (status) {
ASC_PRINT2("advansys_reset: board %d: SCSI bus reset "
"warning: 0x%x\n", boardp->id, status);
scmd_printk(KERN_INFO, scp, "SCSI bus reset warning: "
"0x%x\n", status);
} else {
ASC_PRINT1("advansys_reset: board %d: SCSI bus reset "
"successful.\n", boardp->id);
scmd_printk(KERN_INFO, scp, "SCSI bus reset "
"successful\n");
}

ASC_DBG(1, "advansys_reset: after AscInitAsc1000Driver()\n");
spin_lock_irqsave(&boardp->lock, flags);

} else {
/*
* Wide Board
*
* If the suggest reset bus flags are set, then reset the bus.
* Otherwise only reset the device.
*/
adv_dvc_varp = &boardp->dvc_var.adv_dvc_var;
ADV_DVC_VAR *adv_dvc = &boardp->dvc_var.adv_dvc_var;

/*
* Reset the target's SCSI bus.
*/
ASC_DBG(1, "advansys_reset: before AdvResetChipAndSB()\n");
switch (AdvResetChipAndSB(adv_dvc_varp)) {
switch (AdvResetChipAndSB(adv_dvc)) {
case ASC_TRUE:
ASC_PRINT1("advansys_reset: board %d: SCSI bus reset "
"successful.\n", boardp->id);
scmd_printk(KERN_INFO, scp, "SCSI bus reset "
"successful\n");
break;
case ASC_FALSE:
default:
ASC_PRINT1("advansys_reset: board %d: SCSI bus reset "
"error.\n", boardp->id);
scmd_printk(KERN_INFO, scp, "SCSI bus reset error\n");
ret = FAILED;
break;
}
spin_lock_irqsave(&boardp->lock, flags);
AdvISR(adv_dvc_varp);
AdvISR(adv_dvc);
}
/* Board lock is held. */

/* Save the time of the most recently completed reset. */
boardp->last_reset = jiffies;

/* Clear reset flag. */
boardp->flags &= ~ASC_HOST_IN_RESET;
spin_unlock_irqrestore(&boardp->lock, flags);

ASC_DBG1(1, "advansys_reset: ret %d\n", ret);
Expand Down

0 comments on commit 11b8e33

Please sign in to comment.