Browse Source

[SCSI] hpsa: allow driver to put controller in either simple or performant mode

Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Stephen M. Cameron 14 years ago
parent
commit
02ec19c82e
2 changed files with 13 additions and 0 deletions
  1. 6 0
      Documentation/scsi/hpsa.txt
  2. 7 0
      drivers/scsi/hpsa.c

+ 6 - 0
Documentation/scsi/hpsa.txt

@@ -28,6 +28,12 @@ boot parameter "hpsa_allow_any=1" is specified, however these are not tested
 nor supported by HP with this driver.  For older Smart Arrays, the cciss
 nor supported by HP with this driver.  For older Smart Arrays, the cciss
 driver should still be used.
 driver should still be used.
 
 
+The "hpsa_simple_mode=1" boot parameter may be used to prevent the driver from
+putting the controller into "performant" mode.  The difference is that with simple
+mode, each command completion requires an interrupt, while with "performant mode"
+(the default, and ordinarily better performing) it is possible to have multiple
+command completions indicated by a single interrupt.
+
 HPSA specific entries in /sys
 HPSA specific entries in /sys
 -----------------------------
 -----------------------------
 
 

+ 7 - 0
drivers/scsi/hpsa.c

@@ -74,6 +74,10 @@ static int hpsa_allow_any;
 module_param(hpsa_allow_any, int, S_IRUGO|S_IWUSR);
 module_param(hpsa_allow_any, int, S_IRUGO|S_IWUSR);
 MODULE_PARM_DESC(hpsa_allow_any,
 MODULE_PARM_DESC(hpsa_allow_any,
 		"Allow hpsa driver to access unknown HP Smart Array hardware");
 		"Allow hpsa driver to access unknown HP Smart Array hardware");
+static int hpsa_simple_mode;
+module_param(hpsa_simple_mode, int, S_IRUGO|S_IWUSR);
+MODULE_PARM_DESC(hpsa_simple_mode,
+	"Use 'simple mode' rather than 'performant mode'");
 
 
 /* define the PCI info for the cards we can control */
 /* define the PCI info for the cards we can control */
 static const struct pci_device_id hpsa_pci_device_id[] = {
 static const struct pci_device_id hpsa_pci_device_id[] = {
@@ -4038,6 +4042,9 @@ static __devinit void hpsa_put_ctlr_into_performant_mode(struct ctlr_info *h)
 {
 {
 	u32 trans_support;
 	u32 trans_support;
 
 
+	if (hpsa_simple_mode)
+		return;
+
 	trans_support = readl(&(h->cfgtable->TransportSupport));
 	trans_support = readl(&(h->cfgtable->TransportSupport));
 	if (!(trans_support & PERFORMANT_MODE))
 	if (!(trans_support & PERFORMANT_MODE))
 		return;
 		return;