From 3014b9c4b33719e8a9411e1fbb663aadced76354 Mon Sep 17 00:00:00 2001 From: "Stephen M. Cameron" Date: Wed, 16 Jun 2010 13:51:56 -0500 Subject: [PATCH] --- yaml --- r: 204135 b: refs/heads/master c: cba3d38b6cf85bd91b7c6f65f43863d1fd19259c h: refs/heads/master i: 204133: bed098854aac9a2010658dc72ea9727e38bb3de9 204131: c10973c7ac60c448c687b276bf96dacf7be99121 204127: aa9d0ee83d55661bf627b37e0126d1963f6fd17f v: v3 --- [refs] | 2 +- trunk/drivers/scsi/hpsa.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index a1703f31e353..06ca83893bf6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 10f66018088fd0c9fe81b1e328e3264c7b10caa5 +refs/heads/master: cba3d38b6cf85bd91b7c6f65f43863d1fd19259c diff --git a/trunk/drivers/scsi/hpsa.c b/trunk/drivers/scsi/hpsa.c index f8b614b591e4..4f5551b5fe53 100644 --- a/trunk/drivers/scsi/hpsa.c +++ b/trunk/drivers/scsi/hpsa.c @@ -3505,13 +3505,25 @@ static int __devinit hpsa_find_cfgtables(struct ctlr_info *h) return 0; } +static void __devinit hpsa_get_max_perf_mode_cmds(struct ctlr_info *h) +{ + h->max_commands = readl(&(h->cfgtable->MaxPerformantModeCommands)); + if (h->max_commands < 16) { + dev_warn(&h->pdev->dev, "Controller reports " + "max supported commands of %d, an obvious lie. " + "Using 16. Ensure that firmware is up to date.\n", + h->max_commands); + h->max_commands = 16; + } +} + /* Interrogate the hardware for some limits: * max commands, max SG elements without chaining, and with chaining, * SG chain block size, etc. */ static void __devinit hpsa_find_board_params(struct ctlr_info *h) { - h->max_commands = readl(&(h->cfgtable->MaxPerformantModeCommands)); + hpsa_get_max_perf_mode_cmds(h); h->nr_cmds = h->max_commands - 4; /* Allow room for some ioctls */ h->maxsgentries = readl(&(h->cfgtable->MaxScatterGatherElements)); /* @@ -4056,7 +4068,7 @@ static __devinit void hpsa_put_ctlr_into_performant_mode(struct ctlr_info *h) if (!(trans_support & PERFORMANT_MODE)) return; - h->max_commands = readl(&(h->cfgtable->MaxPerformantModeCommands)); + hpsa_get_max_perf_mode_cmds(h); h->max_sg_entries = 32; /* Performant mode ring buffer and supporting data structures */ h->reply_pool_size = h->max_commands * sizeof(u64);