diff mbox series

[2/2] qla2xxx: Fix a dma_pool_free() call

Message ID 20191106044226.5207-3-bvanassche@acm.org (mailing list archive)
State Mainlined
Commit 162b805e38327135168cb0938bd37b131b481cb0
Headers show
Series Two qla2xxx fixes | expand

Commit Message

Bart Van Assche Nov. 6, 2019, 4:42 a.m. UTC
This patch fixes the following kernel warning:

DMA-API: qla2xxx 0000:00:0a.0: device driver frees DMA memory with different size [device address=0x00000000c7b60000] [map size=4088 bytes] [unmap size=512 bytes]
WARNING: CPU: 3 PID: 1122 at kernel/dma/debug.c:1021 check_unmap+0x4d0/0xbd0
CPU: 3 PID: 1122 Comm: rmmod Tainted: G           O      5.4.0-rc1-dbg+ #1
RIP: 0010:check_unmap+0x4d0/0xbd0
Call Trace:
 debug_dma_free_coherent+0x123/0x173
 dma_free_attrs+0x76/0xe0
 qla2x00_mem_free+0x329/0xc40 [qla2xxx_scst]
 qla2x00_free_device+0x170/0x1c0 [qla2xxx_scst]
 qla2x00_remove_one+0x4f0/0x6d0 [qla2xxx_scst]
 pci_device_remove+0xd5/0x1f0
 device_release_driver_internal+0x159/0x280
 driver_detach+0x8b/0xf2
 bus_remove_driver+0x9a/0x15a
 driver_unregister+0x51/0x70
 pci_unregister_driver+0x2d/0x130
 qla2x00_module_exit+0x1c/0xbc [qla2xxx_scst]
 __x64_sys_delete_module+0x22a/0x300
 do_syscall_64+0x6f/0x2e0
 entry_SYSCALL_64_after_hwframe+0x49/0xbe

Cc: Michael Hernandez <mhernandez@marvell.com>
Cc: Himanshu Madhani <hmadhani@marvell.com>
Fixes: 3f006ac342c0 ("scsi: qla2xxx: Secure flash update support for ISP28XX") # v5.2-rc1~130^2~270.
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/qla2xxx/qla_os.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Martin Wilck Nov. 6, 2019, 9:52 p.m. UTC | #1
On Tue, 2019-11-05 at 20:42 -0800, Bart Van Assche wrote:
> This patch fixes the following kernel warning:
> 
> DMA-API: qla2xxx 0000:00:0a.0: device driver frees DMA memory with
> different size [device address=0x00000000c7b60000] [map size=4088
> bytes] [unmap size=512 bytes]
> WARNING: CPU: 3 PID: 1122 at kernel/dma/debug.c:1021
> check_unmap+0x4d0/0xbd0
> CPU: 3 PID: 1122 Comm: rmmod Tainted: G           O      5.4.0-rc1-
> dbg+ #1
> RIP: 0010:check_unmap+0x4d0/0xbd0
> Call Trace:
>  debug_dma_free_coherent+0x123/0x173
>  dma_free_attrs+0x76/0xe0
>  qla2x00_mem_free+0x329/0xc40 [qla2xxx_scst]
>  qla2x00_free_device+0x170/0x1c0 [qla2xxx_scst]
>  qla2x00_remove_one+0x4f0/0x6d0 [qla2xxx_scst]
>  pci_device_remove+0xd5/0x1f0
>  device_release_driver_internal+0x159/0x280
>  driver_detach+0x8b/0xf2
>  bus_remove_driver+0x9a/0x15a
>  driver_unregister+0x51/0x70
>  pci_unregister_driver+0x2d/0x130
>  qla2x00_module_exit+0x1c/0xbc [qla2xxx_scst]
>  __x64_sys_delete_module+0x22a/0x300
>  do_syscall_64+0x6f/0x2e0
>  entry_SYSCALL_64_after_hwframe+0x49/0xbe
> 
> Cc: Michael Hernandez <mhernandez@marvell.com>
> Cc: Himanshu Madhani <hmadhani@marvell.com>
> Fixes: 3f006ac342c0 ("scsi: qla2xxx: Secure flash update support for
> ISP28XX") # v5.2-rc1~130^2~270.
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
>  drivers/scsi/qla2xxx/qla_os.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_os.c
> b/drivers/scsi/qla2xxx/qla_os.c
> index 16f9b6ed574a..05fba5c2c926 100644
> --- a/drivers/scsi/qla2xxx/qla_os.c
> +++ b/drivers/scsi/qla2xxx/qla_os.c
> @@ -4676,7 +4676,8 @@ qla2x00_mem_free(struct qla_hw_data *ha)
>  	ha->sfp_data = NULL;
>  
>  	if (ha->flt)
> -		dma_free_coherent(&ha->pdev->dev, SFP_DEV_SIZE,
> +		dma_free_coherent(&ha->pdev->dev,
> +		    sizeof(struct qla_flt_header) + FLT_REGIONS_SIZE,
>  		    ha->flt, ha->flt_dma);
>  	ha->flt = NULL;
>  	ha->flt_dma = 0;

Reviewed-by: Martin Wilck <mwilck@suse.com>
diff mbox series

Patch

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 16f9b6ed574a..05fba5c2c926 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -4676,7 +4676,8 @@  qla2x00_mem_free(struct qla_hw_data *ha)
 	ha->sfp_data = NULL;
 
 	if (ha->flt)
-		dma_free_coherent(&ha->pdev->dev, SFP_DEV_SIZE,
+		dma_free_coherent(&ha->pdev->dev,
+		    sizeof(struct qla_flt_header) + FLT_REGIONS_SIZE,
 		    ha->flt, ha->flt_dma);
 	ha->flt = NULL;
 	ha->flt_dma = 0;