Patch 5 of 6
This patch adds a mode of controller operation called Performant Mode. Even
though cciss has been deprecated in favor of hpsa there are new controllers
due out next year that HP must support in older vendor distros. Vendors
require all fixes/features be upstream. These new controllers support only
16 commands in simple mode but support up to 1024 in performant mode. This
requires us to add this support at this late date.
The performant mode transport minimizes host PCI accesses by performinf many
completions per read. PCI writes are posted so the host can write then
immediately get off the bus not waiting for the writwe to complete to the
target. In the context of performant mode the host read out to a controller
pulls all posted writes into host memory ensuring the reply queue is
coherent.
cciss: add performant mode support for Stars/Sirius
From: Mike Miller <mike.miller@hp.com>
Cc: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: Mike Miller <mike.miller@hp.com>
cciss: add performant mode support for Stars/Sirius
---
drivers/block/cciss.c | 267 ++++++++++++++++++++++++++++++++++++--------
drivers/block/cciss.h | 109 +++++++++++++++++-
drivers/block/cciss_cmd.h | 34 +++++-
drivers/block/cciss_scsi.c | 6 +
4 files changed, 353 insertions(+), 63 deletions(-)
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index cd830cb..08a2e61 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -206,6 +206,11 @@ static void cciss_device_release(struct device *dev);
static void cciss_free_gendisk(ctlr_info_t *h, int drv_index);
static void cciss_free_drive_info(ctlr_info_t *h, int drv_index);
+/* performant mode helper functions */
+static void calc_bucket_map(int *bucket, int num_buckets, int nsgs,
+ int *bucket_map);
+static void cciss_put_controller_into_performant_mode(ctlr_info_t *h);
+
#ifdef CONFIG_PROC_FS
static void cciss_procinit(int i);
#else
@@ -231,6 +236,16 @@ static const ...