diff options
author | Sreekanth Reddy <sreekanth.reddy@avagotech.com> | 2015-01-12 01:09:00 -0500 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2015-01-13 10:27:26 -0500 |
commit | ad666a0f41d98e4420acdbfd0e5f25e10f768e13 (patch) | |
tree | 10b478c683995e440e96f50424cb6c32f2621380 | |
parent | d42432ad6c5cb8e9dea43e3cef711ef740d8a34a (diff) |
mpt2sas, mpt3sas: fix upper bound for the module parameter max_sgl_entries
Change Set:
1. Extended the upper boundary restriction for the module parameter
max_sgl_entries. Earlier, the max_sgl_entries was capped at the
SCSI_MAX_SG_SEGMENTS kernel definition. With this change, the user
would be able to set the max_sgl_entries to any value which is
greater than SCSI_MAX_SG_SEGMENTS and less than the minimum of
SCSI_MAX_SG_CHAIN_SEGMENTS & hardware limit (Calculated using
IOCFacts's MaxChainDepth).
2. Added a print for the message log whenever the user sets the
max_sgl_entries to a value greater than SCSI_MAX_SG_SEGMENTS to
warn about the kernel definition overriding.
Signed-off-by: Sreekanth Reddy <Sreekanth.Reddy@avagotech.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
-rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_base.c | 10 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_base.c | 10 |
2 files changed, 15 insertions, 5 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c index 14ebb54fae33..88c80efa7d7b 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_base.c +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c | |||
@@ -2492,9 +2492,13 @@ _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag) | |||
2492 | 2492 | ||
2493 | /* command line tunables for max sgl entries */ | 2493 | /* command line tunables for max sgl entries */ |
2494 | if (max_sgl_entries != -1) { | 2494 | if (max_sgl_entries != -1) { |
2495 | ioc->shost->sg_tablesize = (max_sgl_entries < | 2495 | ioc->shost->sg_tablesize = min_t(unsigned short, |
2496 | MPT2SAS_SG_DEPTH) ? max_sgl_entries : | 2496 | max_sgl_entries, SCSI_MAX_SG_CHAIN_SEGMENTS); |
2497 | MPT2SAS_SG_DEPTH; | 2497 | if (ioc->shost->sg_tablesize > MPT2SAS_SG_DEPTH) |
2498 | printk(MPT2SAS_WARN_FMT | ||
2499 | "sg_tablesize(%u) is bigger than kernel defined" | ||
2500 | " SCSI_MAX_SG_SEGMENTS(%u)\n", ioc->name, | ||
2501 | ioc->shost->sg_tablesize, MPT2SAS_SG_DEPTH); | ||
2498 | } else { | 2502 | } else { |
2499 | ioc->shost->sg_tablesize = MPT2SAS_SG_DEPTH; | 2503 | ioc->shost->sg_tablesize = MPT2SAS_SG_DEPTH; |
2500 | } | 2504 | } |
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index 678e1ff33f1e..a428fdd43df5 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c | |||
@@ -2666,8 +2666,14 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc, int sleep_flag) | |||
2666 | 2666 | ||
2667 | if (sg_tablesize < MPT3SAS_MIN_PHYS_SEGMENTS) | 2667 | if (sg_tablesize < MPT3SAS_MIN_PHYS_SEGMENTS) |
2668 | sg_tablesize = MPT3SAS_MIN_PHYS_SEGMENTS; | 2668 | sg_tablesize = MPT3SAS_MIN_PHYS_SEGMENTS; |
2669 | else if (sg_tablesize > MPT3SAS_MAX_PHYS_SEGMENTS) | 2669 | else if (sg_tablesize > MPT3SAS_MAX_PHYS_SEGMENTS) { |
2670 | sg_tablesize = MPT3SAS_MAX_PHYS_SEGMENTS; | 2670 | sg_tablesize = min_t(unsigned short, sg_tablesize, |
2671 | SCSI_MAX_SG_CHAIN_SEGMENTS); | ||
2672 | pr_warn(MPT3SAS_FMT | ||
2673 | "sg_tablesize(%u) is bigger than kernel" | ||
2674 | " defined SCSI_MAX_SG_SEGMENTS(%u)\n", ioc->name, | ||
2675 | sg_tablesize, MPT3SAS_MAX_PHYS_SEGMENTS); | ||
2676 | } | ||
2671 | ioc->shost->sg_tablesize = sg_tablesize; | 2677 | ioc->shost->sg_tablesize = sg_tablesize; |
2672 | 2678 | ||
2673 | ioc->hi_priority_depth = facts->HighPriorityCredit; | 2679 | ioc->hi_priority_depth = facts->HighPriorityCredit; |