diff mbox series

[V2] megaraid_sas: silence a warning

Message ID 20200204152413.7107-1-thenzl@redhat.com (mailing list archive)
State Mainlined
Commit 0e99b2c625da181aebf1a3d13493e3f7a5057a9c
Headers show
Series [V2] megaraid_sas: silence a warning | expand

Commit Message

Tomas Henzl Feb. 4, 2020, 3:24 p.m. UTC
Add a flag to dma mem allocation to silence a warning.

This code allocates DMA memory for driver's IO frames which may exceed
MAX_ORDER pages for few megaraid_sas controllers(controllers
with High Queue Depth). So there is logic to keep on reducing controller
Queue Depth until DMA memory required for IO frames fits within
MAX_ORDER. So or impacted megaraid_sas controllers,
there would be multiple DMA allocation failure until driver settles
down to Controller Queue Depth which has memory requirement
within MAX_ORDER. These failed DMA allocation requests causes stack
traces in system logs which is not harmful and this patch
would silence those warnings/stack traces.

With CMA (Contiguous Memory Allocator) enabled, it's possible  to
allocate DMA memory exceeding MAX_ORDER.
And that is the reason of keeping this retry logic with less
controller Queue Depth instead of calculating controller Queue depth
at first hand which has memory requirement less than MAX_ORDER.

Signed-off-by: Tomas Henzl <thenzl@redhat.com>
---
V2: A change in the description, additional information is added,
kindly written by Sumit.

 drivers/scsi/megaraid/megaraid_sas_fusion.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Lee Duncan Feb. 4, 2020, 5:41 p.m. UTC | #1
On 2/4/20 7:24 AM, Tomas Henzl wrote:
> Add a flag to dma mem allocation to silence a warning.
> 
> This code allocates DMA memory for driver's IO frames which may exceed
> MAX_ORDER pages for few megaraid_sas controllers(controllers
> with High Queue Depth). So there is logic to keep on reducing controller
> Queue Depth until DMA memory required for IO frames fits within
> MAX_ORDER. So or impacted megaraid_sas controllers,
> there would be multiple DMA allocation failure until driver settles
> down to Controller Queue Depth which has memory requirement
> within MAX_ORDER. These failed DMA allocation requests causes stack
> traces in system logs which is not harmful and this patch
> would silence those warnings/stack traces.
> 
> With CMA (Contiguous Memory Allocator) enabled, it's possible  to
> allocate DMA memory exceeding MAX_ORDER.
> And that is the reason of keeping this retry logic with less
> controller Queue Depth instead of calculating controller Queue depth
> at first hand which has memory requirement less than MAX_ORDER.
> 
> Signed-off-by: Tomas Henzl <thenzl@redhat.com>
> ---
> V2: A change in the description, additional information is added,
> kindly written by Sumit.
> 
>  drivers/scsi/megaraid/megaraid_sas_fusion.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> index 0f5399b3e..1fa2d1449 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> @@ -606,7 +606,8 @@ megasas_alloc_request_fusion(struct megasas_instance *instance)
>  
>  	fusion->io_request_frames =
>  			dma_pool_alloc(fusion->io_request_frames_pool,
> -				GFP_KERNEL, &fusion->io_request_frames_phys);
> +				GFP_KERNEL | __GFP_NOWARN,
> +				&fusion->io_request_frames_phys);
>  	if (!fusion->io_request_frames) {
>  		if (instance->max_fw_cmds >= (MEGASAS_REDUCE_QD_COUNT * 2)) {
>  			instance->max_fw_cmds -= MEGASAS_REDUCE_QD_COUNT;
> @@ -644,7 +645,7 @@ megasas_alloc_request_fusion(struct megasas_instance *instance)
>  
>  		fusion->io_request_frames =
>  			dma_pool_alloc(fusion->io_request_frames_pool,
> -				       GFP_KERNEL,
> +				       GFP_KERNEL | __GFP_NOWARN,
>  				       &fusion->io_request_frames_phys);
>  
>  		if (!fusion->io_request_frames) {
> 

Reviewed-by: Lee Duncan <lduncan@suse.com>
Sumit Saxena Feb. 5, 2020, 7:37 a.m. UTC | #2
On Tue, Feb 4, 2020 at 8:54 PM Tomas Henzl <thenzl@redhat.com> wrote:
>
> Add a flag to dma mem allocation to silence a warning.
>
> This code allocates DMA memory for driver's IO frames which may exceed
> MAX_ORDER pages for few megaraid_sas controllers(controllers
> with High Queue Depth). So there is logic to keep on reducing controller
> Queue Depth until DMA memory required for IO frames fits within
> MAX_ORDER. So or impacted megaraid_sas controllers,
> there would be multiple DMA allocation failure until driver settles
> down to Controller Queue Depth which has memory requirement
> within MAX_ORDER. These failed DMA allocation requests causes stack
> traces in system logs which is not harmful and this patch
> would silence those warnings/stack traces.
>
> With CMA (Contiguous Memory Allocator) enabled, it's possible  to
> allocate DMA memory exceeding MAX_ORDER.
> And that is the reason of keeping this retry logic with less
> controller Queue Depth instead of calculating controller Queue depth
> at first hand which has memory requirement less than MAX_ORDER.
>
> Signed-off-by: Tomas Henzl <thenzl@redhat.com>

Acked-by: Sumit Saxena <sumit.saxena@broadcom.com>

> ---
> V2: A change in the description, additional information is added,
> kindly written by Sumit.
>
>  drivers/scsi/megaraid/megaraid_sas_fusion.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> index 0f5399b3e..1fa2d1449 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> @@ -606,7 +606,8 @@ megasas_alloc_request_fusion(struct megasas_instance *instance)
>
>         fusion->io_request_frames =
>                         dma_pool_alloc(fusion->io_request_frames_pool,
> -                               GFP_KERNEL, &fusion->io_request_frames_phys);
> +                               GFP_KERNEL | __GFP_NOWARN,
> +                               &fusion->io_request_frames_phys);
>         if (!fusion->io_request_frames) {
>                 if (instance->max_fw_cmds >= (MEGASAS_REDUCE_QD_COUNT * 2)) {
>                         instance->max_fw_cmds -= MEGASAS_REDUCE_QD_COUNT;
> @@ -644,7 +645,7 @@ megasas_alloc_request_fusion(struct megasas_instance *instance)
>
>                 fusion->io_request_frames =
>                         dma_pool_alloc(fusion->io_request_frames_pool,
> -                                      GFP_KERNEL,
> +                                      GFP_KERNEL | __GFP_NOWARN,
>                                        &fusion->io_request_frames_phys);
>
>                 if (!fusion->io_request_frames) {
> --
> 2.21.1
>
Martin K. Petersen Feb. 13, 2020, 12:15 a.m. UTC | #3
Tomas,

> Add a flag to dma mem allocation to silence a warning.

Applied to 5.6/scsi-fixes, thank you!
diff mbox series

Patch

diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index 0f5399b3e..1fa2d1449 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -606,7 +606,8 @@  megasas_alloc_request_fusion(struct megasas_instance *instance)
 
 	fusion->io_request_frames =
 			dma_pool_alloc(fusion->io_request_frames_pool,
-				GFP_KERNEL, &fusion->io_request_frames_phys);
+				GFP_KERNEL | __GFP_NOWARN,
+				&fusion->io_request_frames_phys);
 	if (!fusion->io_request_frames) {
 		if (instance->max_fw_cmds >= (MEGASAS_REDUCE_QD_COUNT * 2)) {
 			instance->max_fw_cmds -= MEGASAS_REDUCE_QD_COUNT;
@@ -644,7 +645,7 @@  megasas_alloc_request_fusion(struct megasas_instance *instance)
 
 		fusion->io_request_frames =
 			dma_pool_alloc(fusion->io_request_frames_pool,
-				       GFP_KERNEL,
+				       GFP_KERNEL | __GFP_NOWARN,
 				       &fusion->io_request_frames_phys);
 
 		if (!fusion->io_request_frames) {