All per-device queueing is handled by the scsi midlayer for quite
a while so we can remove the code to deal with it. It has been
completly disabled at the cpp level already.
Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]>
Index: linux-2.6/drivers/scsi/sym53c8xx_2/sym_glue.h
===================================================================
--- linux-2.6.orig/drivers/scsi/sym53c8xx_2/sym_glue.h 2007-01-02
17:12:14.000000000 +0100
+++ linux-2.6/drivers/scsi/sym53c8xx_2/sym_glue.h 2007-01-02
17:12:18.000000000 +0100
@@ -67,7 +67,6 @@
*/
#define SYM_CONF_TIMER_INTERVAL ((HZ+1)/2)
-#undef SYM_OPT_HANDLE_DEVICE_QUEUEING
#define SYM_OPT_LIMIT_COMMAND_REORDERING
/*
Index: linux-2.6/drivers/scsi/sym53c8xx_2/sym_hipd.c
===================================================================
--- linux-2.6.orig/drivers/scsi/sym53c8xx_2/sym_hipd.c 2007-01-02
17:10:14.000000000 +0100
+++ linux-2.6/drivers/scsi/sym53c8xx_2/sym_hipd.c 2007-01-02
17:11:40.000000000 +0100
@@ -1529,57 +1529,6 @@
OUTB(np, nc_istat, SIGP|np->istat_sem);
}
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
-/*
- * Start next ready-to-start CCBs.
- */
-void sym_start_next_ccbs(struct sym_hcb *np, struct sym_lcb *lp, int maxn)
-{
- SYM_QUEHEAD *qp;
- struct sym_ccb *cp;
-
- /*
- * Paranoia, as usual. :-)
- */
- assert(!lp->started_tags || !lp->started_no_tag);
-
- /*
- * Try to start as many commands as asked by caller.
- * Prevent from having both tagged and untagged
- * commands queued to the device at the same time.
- */
- while (maxn--) {
- qp = sym_remque_head(&lp->waiting_ccbq);
- if (!qp)
- break;
- cp = sym_que_entry(qp, struct sym_ccb, link2_ccbq);
- if (cp->tag != NO_TAG) {
- if (lp->started_no_tag ||
- lp->started_tags >= lp->started_max) {
- sym_insque_head(qp, &lp->waiting_ccbq);
- break;
- }
- lp->itlq_tbl[cp->tag] = cpu_to_scr(cp->ccb_ba);
- lp->head.resel_sa =
- cpu_to_scr(SCRIPTA_BA(np, resel_tag));
- ++lp->started_tags;
- } else {
- if (lp->started_no_tag || lp->started_tags) {
- sym_insque_head(qp, &lp->waiting_ccbq);
- break;
- }
- lp->head.itl_task_sa = cpu_to_scr(cp->ccb_ba);
- lp->head.resel_sa =
- cpu_to_scr(SCRIPTA_BA(np, resel_no_tag));
- ++lp->started_no_tag;
- }
- cp->started = 1;
- sym_insque_tail(qp, &lp->started_ccbq);
- sym_put_start_queue(np, cp);
- }
-}
-#endif /* SYM_OPT_HANDLE_DEVICE_QUEUEING */
-
/*
* The chip may have completed jobs. Look at the DONE QUEUE.
*
@@ -1649,25 +1598,6 @@
cmd = cp->cmd;
if (cam_status)
sym_set_cam_status(cmd, cam_status);
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- if (sym_get_cam_status(cmd) == DID_SOFT_ERROR) {
- struct sym_tcb *tp = &np->target[cp->target];
- struct sym_lcb *lp = sym_lp(tp, cp->lun);
- if (lp) {
- sym_remque(&cp->link2_ccbq);
- sym_insque_tail(&cp->link2_ccbq,
- &lp->waiting_ccbq);
- if (cp->started) {
- if (cp->tag != NO_TAG)
- --lp->started_tags;
- else
- --lp->started_no_tag;
- }
- }
- cp->started = 0;
- continue;
- }
-#endif
sym_free_ccb(np, cp);
sym_xpt_done(np, cmd);
}
@@ -3327,12 +3257,7 @@
/*
* Make sure at least our IO to abort has been dequeued.
*/
-#ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING
assert(i && sym_get_cam_status(cp->cmd) == DID_SOFT_ERROR);
-#else
- sym_remque(&cp->link_ccbq);
- sym_insque_tail(&cp->link_ccbq, &np->comp_ccbq);
-#endif
/*
* Keep track in cam status of the reason of the abort.
*/
@@ -4606,10 +4531,8 @@
/*
* Debugging purpose.
*/
-#ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING
if (lp->busy_itl != 0)
goto out_free;
-#endif
/*
* Allocate resources for tags if not yet.
*/
@@ -4629,11 +4552,9 @@
if (++lp->ia_tag == SYM_CONF_MAX_TASK)
lp->ia_tag = 0;
++lp->busy_itlq;
-#ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING
lp->itlq_tbl[tag] = cpu_to_scr(cp->ccb_ba);
lp->head.resel_sa =
cpu_to_scr(SCRIPTA_BA(np, resel_tag));
-#endif
#ifdef SYM_OPT_LIMIT_COMMAND_REORDERING
cp->tags_si = lp->tags_si;
++lp->tags_sum[cp->tags_si];
@@ -4652,17 +4573,14 @@
/*
* Debugging purpose.
*/
-#ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING
if (lp->busy_itl != 0 || lp->busy_itlq != 0)
goto out_free;
-#endif
/*
* Count this nexus for this LUN.
* Set up the CCB bus address for reselection.
* Toggle reselect path to untagged.
*/
++lp->busy_itl;
-#ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING
if (lp->busy_itl == 1) {
lp->head.itl_task_sa = cpu_to_scr(cp->ccb_ba);
lp->head.resel_sa =
@@ -4670,20 +4588,12 @@
}
else
goto out_free;
-#endif
}
}
/*
* Put the CCB into the busy queue.
*/
sym_insque_tail(&cp->link_ccbq, &np->busy_ccbq);
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- if (lp) {
- sym_remque(&cp->link2_ccbq);
- sym_insque_tail(&cp->link2_ccbq, &lp->waiting_ccbq);
- }
-
-#endif
cp->to_abort = 0;
cp->odd_byte_adjustment = 0;
cp->tag = tag;
@@ -4778,20 +4688,6 @@
cp->host_status = HS_IDLE;
sym_remque(&cp->link_ccbq);
sym_insque_head(&cp->link_ccbq, &np->free_ccbq);
-
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- if (lp) {
- sym_remque(&cp->link2_ccbq);
- sym_insque_tail(&cp->link2_ccbq, &np->dummy_ccbq);
- if (cp->started) {
- if (cp->tag != NO_TAG)
- --lp->started_tags;
- else
- --lp->started_no_tag;
- }
- }
- cp->started = 0;
-#endif
}
/*
@@ -4848,13 +4744,6 @@
* Chain into free ccb queue.
*/
sym_insque_head(&cp->link_ccbq, &np->free_ccbq);
-
- /*
- * Chain into optionnal lists.
- */
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- sym_insque_head(&cp->link2_ccbq, &np->dummy_ccbq);
-#endif
return cp;
out_free:
if (cp)
@@ -4966,17 +4855,6 @@
* Set user capabilities.
*/
lp->user_flags = tp->usrflags & (SYM_DISC_ENABLED | SYM_TAGS_ENABLED);
-
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- /*
- * Initialize device queueing.
- */
- sym_que_init(&lp->waiting_ccbq);
- sym_que_init(&lp->started_ccbq);
- lp->started_max = SYM_CONF_MAX_TASK;
- lp->started_limit = SYM_CONF_MAX_TASK;
-#endif
-
fail:
return lp;
}
@@ -5303,44 +5181,11 @@
*/
OUTL_DSP(np, SCRIPTA_BA(np, start));
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- if (cp->host_status == HS_COMPLETE &&
- cp->ssss_status == S_QUEUE_FULL) {
- if (!lp || lp->started_tags - i < 2)
- goto weirdness;
- /*
- * Decrease queue depth as needed.
- */
- lp->started_max = lp->started_tags - i - 1;
- lp->num_sgood = 0;
-
- if (sym_verbose >= 2) {
- sym_print_addr(cmd, " queue depth is now %d\n",
- lp->started_max);
- }
-
- /*
- * Repair the CCB.
- */
- cp->host_status = HS_BUSY;
- cp->ssss_status = S_ILLEGAL;
-
- /*
- * Let's requeue it to device.
- */
- sym_set_cam_status(cmd, DID_SOFT_ERROR);
- goto finish;
- }
-weirdness:
-#endif
/*
* Build result in CAM ccb.
*/
sym_set_cam_result_error(np, cp, resid);
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
-finish:
-#endif
/*
* Add this one to the COMP queue.
*/
@@ -5352,13 +5197,6 @@
* or requeue condition.
*/
sym_flush_comp_queue(np, 0);
-
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- /*
- * Donnot start more than 1 command after an error.
- */
- sym_start_next_ccbs(np, lp, 1);
-#endif
}
/*
@@ -5420,36 +5258,11 @@
*/
sym_set_cam_result_ok(cp, cmd, resid);
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- /*
- * If max number of started ccbs had been reduced,
- * increase it if 200 good status received.
- */
- if (lp && lp->started_max < lp->started_limit) {
- ++lp->num_sgood;
- if (lp->num_sgood >= 200) {
- lp->num_sgood = 0;
- ++lp->started_max;
- if (sym_verbose >= 2) {
- sym_print_addr(cmd, " queue depth is now %d\n",
- lp->started_max);
- }
- }
- }
-#endif
-
/*
* Free our CCB.
*/
sym_free_ccb (np, cp);
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- /*
- * Requeue a couple of awaiting scsi commands.
- */
- if (!sym_que_empty(&lp->waiting_ccbq))
- sym_start_next_ccbs(np, lp, 2);
-#endif
/*
* Complete the command.
*/
@@ -5551,13 +5364,6 @@
sym_que_init(&np->comp_ccbq);
/*
- * Initialization for optional handling
- * of device queueing.
- */
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- sym_que_init(&np->dummy_ccbq);
-#endif
- /*
* Allocate some CCB. We need at least ONE.
*/
if (!sym_alloc_ccb(np))
Index: linux-2.6/drivers/scsi/sym53c8xx_2/sym_hipd.h
===================================================================
--- linux-2.6.orig/drivers/scsi/sym53c8xx_2/sym_hipd.h 2007-01-02
17:10:14.000000000 +0100
+++ linux-2.6/drivers/scsi/sym53c8xx_2/sym_hipd.h 2007-01-02
17:12:09.000000000 +0100
@@ -48,17 +48,12 @@
* They may be defined in platform specific headers, if they
* are useful.
*
- * SYM_OPT_HANDLE_DEVICE_QUEUEING
- * When this option is set, the driver will use a queue per
- * device and handle QUEUE FULL status requeuing internally.
- *
* SYM_OPT_LIMIT_COMMAND_REORDERING
* When this option is set, the driver tries to limit tagged
* command reordering to some reasonnable value.
* (set for Linux)
*/
#if 0
-#define SYM_OPT_HANDLE_DEVICE_QUEUEING
#define SYM_OPT_LIMIT_COMMAND_REORDERING
#endif
@@ -508,20 +503,6 @@
struct sym_slcb s;
#endif
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- /*
- * Optionnaly the driver can handle device queueing,
- * and requeues internally command to redo.
- */
- SYM_QUEHEAD waiting_ccbq;
- SYM_QUEHEAD started_ccbq;
- int num_sgood;
- u_short started_tags;
- u_short started_no_tag;
- u_short started_max;
- u_short started_limit;
-#endif
-
#ifdef SYM_OPT_LIMIT_COMMAND_REORDERING
/*
* Optionally the driver can try to prevent SCSI
@@ -785,10 +766,6 @@
u32 goalp; /* Expected last data pointer */
int ext_sg; /* Extreme data pointer, used */
int ext_ofs; /* to calculate the residual. */
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- SYM_QUEHEAD link2_ccbq; /* Link for device queueing */
- u_char started; /* CCB queued to the squeue */
-#endif
u_char to_abort; /* Want this IO to be aborted */
#ifdef SYM_OPT_LIMIT_COMMAND_REORDERING
u_char tags_si; /* Lun tags sum index (0,1) */
@@ -987,10 +964,6 @@
*/
SYM_QUEHEAD comp_ccbq;
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
- SYM_QUEHEAD dummy_ccbq;
-#endif
-
/*
* IMMEDIATE ARBITRATION (IARB) control.
*
@@ -1047,11 +1020,7 @@
void sym_print_xerr(struct scsi_cmnd *cmd, int x_status);
int sym_reset_scsi_bus(struct sym_hcb *np, int enab_int);
struct sym_chip *sym_lookup_chip_table(u_short device_id, u_char revision);
-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
-void sym_start_next_ccbs(struct sym_hcb *np, struct sym_lcb *lp, int maxn);
-#else
void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp);
-#endif
void sym_start_up(struct sym_hcb *np, int reason);
void sym_interrupt(struct sym_hcb *np);
int sym_clear_tasks(struct sym_hcb *np, int cam_status, int target, int lun,
int task);
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html