diff options
author | Matthew Wilcox <matthew@wil.cx> | 2006-03-28 11:03:44 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-04-13 11:13:24 -0400 |
commit | 3bea15a76eecc03729bf74d6ab2a1f849c08423e (patch) | |
tree | 674e96482b034ed57222878816f87c63cc5d800f | |
parent | 76789f01768bb4cef706f4c9e7e2f3f4eb8c1431 (diff) |
[SCSI] Disable sym2 driver queueing
Undef SYM_OPT_HANDLE_DEVICE_QUEUEING.
Call sym_put_start_queue instead of sym_start_next_ccbs.
Turn asserts into checks that we can send the command to the adapter,
and return busy from queuecommand if we can't.
Signed-off-by: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
-rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_glue.c | 9 | ||||
-rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_glue.h | 2 | ||||
-rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_hipd.c | 8 | ||||
-rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_hipd.h | 2 |
4 files changed, 10 insertions, 11 deletions
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c index 052ce11806ad..a27dd66b6613 100644 --- a/drivers/scsi/sym53c8xx_2/sym_glue.c +++ b/drivers/scsi/sym53c8xx_2/sym_glue.c | |||
@@ -475,8 +475,6 @@ static inline int sym_setup_cdb(struct sym_hcb *np, struct scsi_cmnd *cmd, struc | |||
475 | */ | 475 | */ |
476 | int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct sym_ccb *cp) | 476 | int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct sym_ccb *cp) |
477 | { | 477 | { |
478 | struct sym_tcb *tp = &np->target[cp->target]; | ||
479 | struct sym_lcb *lp = sym_lp(tp, cp->lun); | ||
480 | u32 lastp, goalp; | 478 | u32 lastp, goalp; |
481 | int dir; | 479 | int dir; |
482 | 480 | ||
@@ -557,7 +555,7 @@ int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct s | |||
557 | /* | 555 | /* |
558 | * activate this job. | 556 | * activate this job. |
559 | */ | 557 | */ |
560 | sym_start_next_ccbs(np, lp, 2); | 558 | sym_put_start_queue(np, cp); |
561 | return 0; | 559 | return 0; |
562 | 560 | ||
563 | out_abort: | 561 | out_abort: |
@@ -871,15 +869,12 @@ static void sym_tune_dev_queuing(struct sym_tcb *tp, int lun, u_short reqtags) | |||
871 | if (reqtags > lp->s.scdev_depth) | 869 | if (reqtags > lp->s.scdev_depth) |
872 | reqtags = lp->s.scdev_depth; | 870 | reqtags = lp->s.scdev_depth; |
873 | 871 | ||
874 | lp->started_limit = reqtags ? reqtags : 2; | ||
875 | lp->started_max = 1; | ||
876 | lp->s.reqtags = reqtags; | 872 | lp->s.reqtags = reqtags; |
877 | 873 | ||
878 | if (reqtags != oldtags) { | 874 | if (reqtags != oldtags) { |
879 | dev_info(&tp->starget->dev, | 875 | dev_info(&tp->starget->dev, |
880 | "tagged command queuing %s, command queue depth %d.\n", | 876 | "tagged command queuing %s, command queue depth %d.\n", |
881 | lp->s.reqtags ? "enabled" : "disabled", | 877 | lp->s.reqtags ? "enabled" : "disabled", reqtags); |
882 | lp->started_limit); | ||
883 | } | 878 | } |
884 | } | 879 | } |
885 | 880 | ||
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.h b/drivers/scsi/sym53c8xx_2/sym_glue.h index cc92d0c70cd7..a446cda3f64c 100644 --- a/drivers/scsi/sym53c8xx_2/sym_glue.h +++ b/drivers/scsi/sym53c8xx_2/sym_glue.h | |||
@@ -68,7 +68,7 @@ | |||
68 | */ | 68 | */ |
69 | #define SYM_CONF_TIMER_INTERVAL ((HZ+1)/2) | 69 | #define SYM_CONF_TIMER_INTERVAL ((HZ+1)/2) |
70 | 70 | ||
71 | #define SYM_OPT_HANDLE_DEVICE_QUEUEING | 71 | #undef SYM_OPT_HANDLE_DEVICE_QUEUEING |
72 | #define SYM_OPT_LIMIT_COMMAND_REORDERING | 72 | #define SYM_OPT_LIMIT_COMMAND_REORDERING |
73 | 73 | ||
74 | /* | 74 | /* |
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c index b2ac482caae8..a6cbb90e2bb9 100644 --- a/drivers/scsi/sym53c8xx_2/sym_hipd.c +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c | |||
@@ -1469,7 +1469,7 @@ static int sym_prepare_nego(struct sym_hcb *np, struct sym_ccb *cp, u_char *msgp | |||
1469 | /* | 1469 | /* |
1470 | * Insert a job into the start queue. | 1470 | * Insert a job into the start queue. |
1471 | */ | 1471 | */ |
1472 | static void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp) | 1472 | void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp) |
1473 | { | 1473 | { |
1474 | u_short qidx; | 1474 | u_short qidx; |
1475 | 1475 | ||
@@ -4602,7 +4602,8 @@ struct sym_ccb *sym_get_ccb (struct sym_hcb *np, struct scsi_cmnd *cmd, u_char t | |||
4602 | * Debugging purpose. | 4602 | * Debugging purpose. |
4603 | */ | 4603 | */ |
4604 | #ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING | 4604 | #ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING |
4605 | assert(lp->busy_itl == 0); | 4605 | if (lp->busy_itl != 0) |
4606 | goto out_free; | ||
4606 | #endif | 4607 | #endif |
4607 | /* | 4608 | /* |
4608 | * Allocate resources for tags if not yet. | 4609 | * Allocate resources for tags if not yet. |
@@ -4647,7 +4648,8 @@ struct sym_ccb *sym_get_ccb (struct sym_hcb *np, struct scsi_cmnd *cmd, u_char t | |||
4647 | * Debugging purpose. | 4648 | * Debugging purpose. |
4648 | */ | 4649 | */ |
4649 | #ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING | 4650 | #ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING |
4650 | assert(lp->busy_itl == 0 && lp->busy_itlq == 0); | 4651 | if (lp->busy_itl != 0 || lp->busy_itlq != 0) |
4652 | goto out_free; | ||
4651 | #endif | 4653 | #endif |
4652 | /* | 4654 | /* |
4653 | * Count this nexus for this LUN. | 4655 | * Count this nexus for this LUN. |
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.h b/drivers/scsi/sym53c8xx_2/sym_hipd.h index 2456090bb241..79ab6a177039 100644 --- a/drivers/scsi/sym53c8xx_2/sym_hipd.h +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.h | |||
@@ -1049,6 +1049,8 @@ int sym_reset_scsi_bus(struct sym_hcb *np, int enab_int); | |||
1049 | struct sym_chip *sym_lookup_chip_table(u_short device_id, u_char revision); | 1049 | struct sym_chip *sym_lookup_chip_table(u_short device_id, u_char revision); |
1050 | #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING | 1050 | #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING |
1051 | void sym_start_next_ccbs(struct sym_hcb *np, struct sym_lcb *lp, int maxn); | 1051 | void sym_start_next_ccbs(struct sym_hcb *np, struct sym_lcb *lp, int maxn); |
1052 | #else | ||
1053 | void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp); | ||
1052 | #endif | 1054 | #endif |
1053 | void sym_start_up(struct sym_hcb *np, int reason); | 1055 | void sym_start_up(struct sym_hcb *np, int reason); |
1054 | void sym_interrupt(struct sym_hcb *np); | 1056 | void sym_interrupt(struct sym_hcb *np); |