| From foo@baz Sat Jun 13 09:48:35 PDT 2015 |
| From: Sriharsha Basavapatna <sriharsha.basavapatna@avagotech.com> |
| Date: Fri, 5 Jun 2015 15:33:59 +0530 |
| Subject: be2net: Replace dma/pci_alloc_coherent() calls with dma_zalloc_coherent() |
| |
| From: Sriharsha Basavapatna <sriharsha.basavapatna@avagotech.com> |
| |
| [ Upstream commit e51000db4c880165eab06ec0990605f24e75203f ] |
| |
| There are several places in the driver (all in control paths) where |
| coherent dma memory is being allocated using either dma_alloc_coherent() |
| or the deprecated pci_alloc_consistent(). All these calls should be |
| changed to use dma_zalloc_coherent() to avoid uninitialized fields in |
| data structures backed by this memory. |
| |
| Reported-by: Joerg Roedel <jroedel@suse.de> |
| Tested-by: Joerg Roedel <jroedel@suse.de> |
| Signed-off-by: Sriharsha Basavapatna <sriharsha.basavapatna@avagotech.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/emulex/benet/be_cmds.c | 87 ++++++++++++++----------- |
| drivers/net/ethernet/emulex/benet/be_ethtool.c | 18 ++--- |
| drivers/net/ethernet/emulex/benet/be_main.c | 16 ++-- |
| 3 files changed, 68 insertions(+), 53 deletions(-) |
| |
| --- a/drivers/net/ethernet/emulex/benet/be_cmds.c |
| +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c |
| @@ -1773,9 +1773,9 @@ int be_cmd_get_regs(struct be_adapter *a |
| total_size = buf_len; |
| |
| get_fat_cmd.size = sizeof(struct be_cmd_req_get_fat) + 60*1024; |
| - get_fat_cmd.va = pci_alloc_consistent(adapter->pdev, |
| - get_fat_cmd.size, |
| - &get_fat_cmd.dma); |
| + get_fat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
| + get_fat_cmd.size, |
| + &get_fat_cmd.dma, GFP_ATOMIC); |
| if (!get_fat_cmd.va) { |
| dev_err(&adapter->pdev->dev, |
| "Memory allocation failure while reading FAT data\n"); |
| @@ -1820,8 +1820,8 @@ int be_cmd_get_regs(struct be_adapter *a |
| log_offset += buf_size; |
| } |
| err: |
| - pci_free_consistent(adapter->pdev, get_fat_cmd.size, |
| - get_fat_cmd.va, get_fat_cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, get_fat_cmd.size, |
| + get_fat_cmd.va, get_fat_cmd.dma); |
| spin_unlock_bh(&adapter->mcc_lock); |
| return status; |
| } |
| @@ -2272,12 +2272,12 @@ int be_cmd_read_port_transceiver_data(st |
| return -EINVAL; |
| |
| cmd.size = sizeof(struct be_cmd_resp_port_type); |
| - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); |
| + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
| + GFP_ATOMIC); |
| if (!cmd.va) { |
| dev_err(&adapter->pdev->dev, "Memory allocation failed\n"); |
| return -ENOMEM; |
| } |
| - memset(cmd.va, 0, cmd.size); |
| |
| spin_lock_bh(&adapter->mcc_lock); |
| |
| @@ -2302,7 +2302,7 @@ int be_cmd_read_port_transceiver_data(st |
| } |
| err: |
| spin_unlock_bh(&adapter->mcc_lock); |
| - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); |
| return status; |
| } |
| |
| @@ -2777,7 +2777,8 @@ int be_cmd_get_phy_info(struct be_adapte |
| goto err; |
| } |
| cmd.size = sizeof(struct be_cmd_req_get_phy_info); |
| - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); |
| + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
| + GFP_ATOMIC); |
| if (!cmd.va) { |
| dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); |
| status = -ENOMEM; |
| @@ -2811,7 +2812,7 @@ int be_cmd_get_phy_info(struct be_adapte |
| BE_SUPPORTED_SPEED_1GBPS; |
| } |
| } |
| - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); |
| err: |
| spin_unlock_bh(&adapter->mcc_lock); |
| return status; |
| @@ -2862,8 +2863,9 @@ int be_cmd_get_cntl_attributes(struct be |
| |
| memset(&attribs_cmd, 0, sizeof(struct be_dma_mem)); |
| attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs); |
| - attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size, |
| - &attribs_cmd.dma); |
| + attribs_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
| + attribs_cmd.size, |
| + &attribs_cmd.dma, GFP_ATOMIC); |
| if (!attribs_cmd.va) { |
| dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); |
| status = -ENOMEM; |
| @@ -2890,8 +2892,8 @@ int be_cmd_get_cntl_attributes(struct be |
| err: |
| mutex_unlock(&adapter->mbox_lock); |
| if (attribs_cmd.va) |
| - pci_free_consistent(adapter->pdev, attribs_cmd.size, |
| - attribs_cmd.va, attribs_cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, attribs_cmd.size, |
| + attribs_cmd.va, attribs_cmd.dma); |
| return status; |
| } |
| |
| @@ -3029,9 +3031,10 @@ int be_cmd_get_mac_from_list(struct be_a |
| |
| memset(&get_mac_list_cmd, 0, sizeof(struct be_dma_mem)); |
| get_mac_list_cmd.size = sizeof(struct be_cmd_resp_get_mac_list); |
| - get_mac_list_cmd.va = pci_alloc_consistent(adapter->pdev, |
| - get_mac_list_cmd.size, |
| - &get_mac_list_cmd.dma); |
| + get_mac_list_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
| + get_mac_list_cmd.size, |
| + &get_mac_list_cmd.dma, |
| + GFP_ATOMIC); |
| |
| if (!get_mac_list_cmd.va) { |
| dev_err(&adapter->pdev->dev, |
| @@ -3104,8 +3107,8 @@ int be_cmd_get_mac_from_list(struct be_a |
| |
| out: |
| spin_unlock_bh(&adapter->mcc_lock); |
| - pci_free_consistent(adapter->pdev, get_mac_list_cmd.size, |
| - get_mac_list_cmd.va, get_mac_list_cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, get_mac_list_cmd.size, |
| + get_mac_list_cmd.va, get_mac_list_cmd.dma); |
| return status; |
| } |
| |
| @@ -3158,8 +3161,8 @@ int be_cmd_set_mac_list(struct be_adapte |
| |
| memset(&cmd, 0, sizeof(struct be_dma_mem)); |
| cmd.size = sizeof(struct be_cmd_req_set_mac_list); |
| - cmd.va = dma_alloc_coherent(&adapter->pdev->dev, cmd.size, |
| - &cmd.dma, GFP_KERNEL); |
| + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
| + GFP_KERNEL); |
| if (!cmd.va) |
| return -ENOMEM; |
| |
| @@ -3348,7 +3351,8 @@ int be_cmd_get_acpi_wol_cap(struct be_ad |
| |
| memset(&cmd, 0, sizeof(struct be_dma_mem)); |
| cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1); |
| - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); |
| + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
| + GFP_ATOMIC); |
| if (!cmd.va) { |
| dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); |
| status = -ENOMEM; |
| @@ -3383,7 +3387,8 @@ int be_cmd_get_acpi_wol_cap(struct be_ad |
| err: |
| mutex_unlock(&adapter->mbox_lock); |
| if (cmd.va) |
| - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, |
| + cmd.dma); |
| return status; |
| |
| } |
| @@ -3397,8 +3402,9 @@ int be_cmd_set_fw_log_level(struct be_ad |
| |
| memset(&extfat_cmd, 0, sizeof(struct be_dma_mem)); |
| extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps); |
| - extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size, |
| - &extfat_cmd.dma); |
| + extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
| + extfat_cmd.size, &extfat_cmd.dma, |
| + GFP_ATOMIC); |
| if (!extfat_cmd.va) |
| return -ENOMEM; |
| |
| @@ -3420,8 +3426,8 @@ int be_cmd_set_fw_log_level(struct be_ad |
| |
| status = be_cmd_set_ext_fat_capabilites(adapter, &extfat_cmd, cfgs); |
| err: |
| - pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va, |
| - extfat_cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va, |
| + extfat_cmd.dma); |
| return status; |
| } |
| |
| @@ -3434,8 +3440,9 @@ int be_cmd_get_fw_log_level(struct be_ad |
| |
| memset(&extfat_cmd, 0, sizeof(struct be_dma_mem)); |
| extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps); |
| - extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size, |
| - &extfat_cmd.dma); |
| + extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
| + extfat_cmd.size, &extfat_cmd.dma, |
| + GFP_ATOMIC); |
| |
| if (!extfat_cmd.va) { |
| dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n", |
| @@ -3453,8 +3460,8 @@ int be_cmd_get_fw_log_level(struct be_ad |
| level = cfgs->module[0].trace_lvl[j].dbg_lvl; |
| } |
| } |
| - pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va, |
| - extfat_cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va, |
| + extfat_cmd.dma); |
| err: |
| return level; |
| } |
| @@ -3652,7 +3659,8 @@ int be_cmd_get_func_config(struct be_ada |
| |
| memset(&cmd, 0, sizeof(struct be_dma_mem)); |
| cmd.size = sizeof(struct be_cmd_resp_get_func_config); |
| - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); |
| + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
| + GFP_ATOMIC); |
| if (!cmd.va) { |
| dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); |
| status = -ENOMEM; |
| @@ -3692,7 +3700,8 @@ int be_cmd_get_func_config(struct be_ada |
| err: |
| mutex_unlock(&adapter->mbox_lock); |
| if (cmd.va) |
| - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, |
| + cmd.dma); |
| return status; |
| } |
| |
| @@ -3713,7 +3722,8 @@ int be_cmd_get_profile_config(struct be_ |
| |
| memset(&cmd, 0, sizeof(struct be_dma_mem)); |
| cmd.size = sizeof(struct be_cmd_resp_get_profile_config); |
| - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); |
| + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
| + GFP_ATOMIC); |
| if (!cmd.va) |
| return -ENOMEM; |
| |
| @@ -3752,7 +3762,8 @@ int be_cmd_get_profile_config(struct be_ |
| res->vf_if_cap_flags = vf_res->cap_flags; |
| err: |
| if (cmd.va) |
| - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, |
| + cmd.dma); |
| return status; |
| } |
| |
| @@ -3767,7 +3778,8 @@ static int be_cmd_set_profile_config(str |
| |
| memset(&cmd, 0, sizeof(struct be_dma_mem)); |
| cmd.size = sizeof(struct be_cmd_req_set_profile_config); |
| - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); |
| + cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, |
| + GFP_ATOMIC); |
| if (!cmd.va) |
| return -ENOMEM; |
| |
| @@ -3783,7 +3795,8 @@ static int be_cmd_set_profile_config(str |
| status = be_cmd_notify_wait(adapter, &wrb); |
| |
| if (cmd.va) |
| - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, |
| + cmd.dma); |
| return status; |
| } |
| |
| --- a/drivers/net/ethernet/emulex/benet/be_ethtool.c |
| +++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c |
| @@ -264,8 +264,8 @@ static int lancer_cmd_read_file(struct b |
| int status = 0; |
| |
| read_cmd.size = LANCER_READ_FILE_CHUNK; |
| - read_cmd.va = pci_alloc_consistent(adapter->pdev, read_cmd.size, |
| - &read_cmd.dma); |
| + read_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, read_cmd.size, |
| + &read_cmd.dma, GFP_ATOMIC); |
| |
| if (!read_cmd.va) { |
| dev_err(&adapter->pdev->dev, |
| @@ -289,8 +289,8 @@ static int lancer_cmd_read_file(struct b |
| break; |
| } |
| } |
| - pci_free_consistent(adapter->pdev, read_cmd.size, read_cmd.va, |
| - read_cmd.dma); |
| + dma_free_coherent(&adapter->pdev->dev, read_cmd.size, read_cmd.va, |
| + read_cmd.dma); |
| |
| return status; |
| } |
| @@ -818,8 +818,9 @@ static int be_test_ddr_dma(struct be_ada |
| }; |
| |
| ddrdma_cmd.size = sizeof(struct be_cmd_req_ddrdma_test); |
| - ddrdma_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, ddrdma_cmd.size, |
| - &ddrdma_cmd.dma, GFP_KERNEL); |
| + ddrdma_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
| + ddrdma_cmd.size, &ddrdma_cmd.dma, |
| + GFP_KERNEL); |
| if (!ddrdma_cmd.va) |
| return -ENOMEM; |
| |
| @@ -941,8 +942,9 @@ static int be_read_eeprom(struct net_dev |
| |
| memset(&eeprom_cmd, 0, sizeof(struct be_dma_mem)); |
| eeprom_cmd.size = sizeof(struct be_cmd_req_seeprom_read); |
| - eeprom_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, eeprom_cmd.size, |
| - &eeprom_cmd.dma, GFP_KERNEL); |
| + eeprom_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, |
| + eeprom_cmd.size, &eeprom_cmd.dma, |
| + GFP_KERNEL); |
| |
| if (!eeprom_cmd.va) |
| return -ENOMEM; |
| --- a/drivers/net/ethernet/emulex/benet/be_main.c |
| +++ b/drivers/net/ethernet/emulex/benet/be_main.c |
| @@ -4392,8 +4392,8 @@ static int lancer_fw_download(struct be_ |
| |
| flash_cmd.size = sizeof(struct lancer_cmd_req_write_object) |
| + LANCER_FW_DOWNLOAD_CHUNK; |
| - flash_cmd.va = dma_alloc_coherent(dev, flash_cmd.size, |
| - &flash_cmd.dma, GFP_KERNEL); |
| + flash_cmd.va = dma_zalloc_coherent(dev, flash_cmd.size, |
| + &flash_cmd.dma, GFP_KERNEL); |
| if (!flash_cmd.va) |
| return -ENOMEM; |
| |
| @@ -4526,8 +4526,8 @@ static int be_fw_download(struct be_adap |
| } |
| |
| flash_cmd.size = sizeof(struct be_cmd_write_flashrom); |
| - flash_cmd.va = dma_alloc_coherent(dev, flash_cmd.size, &flash_cmd.dma, |
| - GFP_KERNEL); |
| + flash_cmd.va = dma_zalloc_coherent(dev, flash_cmd.size, &flash_cmd.dma, |
| + GFP_KERNEL); |
| if (!flash_cmd.va) |
| return -ENOMEM; |
| |
| @@ -4941,10 +4941,10 @@ static int be_ctrl_init(struct be_adapte |
| goto done; |
| |
| mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16; |
| - mbox_mem_alloc->va = dma_alloc_coherent(&adapter->pdev->dev, |
| - mbox_mem_alloc->size, |
| - &mbox_mem_alloc->dma, |
| - GFP_KERNEL); |
| + mbox_mem_alloc->va = dma_zalloc_coherent(&adapter->pdev->dev, |
| + mbox_mem_alloc->size, |
| + &mbox_mem_alloc->dma, |
| + GFP_KERNEL); |
| if (!mbox_mem_alloc->va) { |
| status = -ENOMEM; |
| goto unmap_pci_bars; |