diff options
author | Tomasz Chudy <Tomasz.Chudy@intel.com> | 2011-02-25 05:25:09 -0500 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 06:55:28 -0400 |
commit | a8d4b9fe911c7d48f7a75c37eb1bfa3273547d97 (patch) | |
tree | 8b5fbdb2b6ea0e31dfcfc4c336b8bb5f4ba7d84a /drivers/scsi/isci/host.c | |
parent | 7c40a8035815479c7c12ab0cdcea71e0f4c3a9c8 (diff) |
isci: workaround port task scheduler starvation issue
There is a condition whereby TCs (task contexts) can jump to the head of
the round robin queue causing indefinite starvation of pending tasks.
Posting a TC to a suspended RNC (remote node context) causes the
hardware to select that task first, but since the RNC is suspended the
scheduler proceeds to the next task in the expected round robin fashion,
restoring TC arbitration fairness.
Signed-off-by: Tomasz Chudy <tomasz.chudy@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/host.c')
-rw-r--r-- | drivers/scsi/isci/host.c | 7 |
1 files changed, 0 insertions, 7 deletions
diff --git a/drivers/scsi/isci/host.c b/drivers/scsi/isci/host.c index 1bc91f2b4f93..40614e9ab41b 100644 --- a/drivers/scsi/isci/host.c +++ b/drivers/scsi/isci/host.c | |||
@@ -381,7 +381,6 @@ int isci_host_init(struct isci_host *isci_host) | |||
381 | int index = 0; | 381 | int index = 0; |
382 | enum sci_status status; | 382 | enum sci_status status; |
383 | struct scic_sds_controller *controller; | 383 | struct scic_sds_controller *controller; |
384 | struct scic_sds_port *scic_port; | ||
385 | union scic_oem_parameters scic_oem_params; | 384 | union scic_oem_parameters scic_oem_params; |
386 | union scic_user_parameters scic_user_params; | 385 | union scic_user_parameters scic_user_params; |
387 | 386 | ||
@@ -517,11 +516,5 @@ int isci_host_init(struct isci_host *isci_host) | |||
517 | for (index = 0; index < SCI_MAX_PHYS; index++) | 516 | for (index = 0; index < SCI_MAX_PHYS; index++) |
518 | isci_phy_init(&isci_host->phys[index], isci_host, index); | 517 | isci_phy_init(&isci_host->phys[index], isci_host, index); |
519 | 518 | ||
520 | /* Start the ports */ | ||
521 | for (index = 0; index < SCI_MAX_PORTS; index++) { | ||
522 | scic_controller_get_port_handle(controller, index, &scic_port); | ||
523 | scic_port_start(scic_port); | ||
524 | } | ||
525 | |||
526 | return 0; | 519 | return 0; |
527 | } | 520 | } |