diff mbox

crypto: qat - remove to call get_sram_bar_id for qat_c3xxx

Message ID 1452074194-115019-1-git-send-email-pingchao.yang@intel.com (mailing list archive)
State Accepted
Delegated to: Herbert Xu
Headers show

Commit Message

Pingchao Yang Jan. 6, 2016, 9:56 a.m. UTC
From: Pingchao Yang <pingchao.yang@intel.com>

Reported-by : Struk, Tadeusz <tadeusz.struk@intel.com>
Signed-off-by: Yang Pingchao <pingchao.yang@intel.com>
---
 drivers/crypto/qat/qat_common/qat_hal.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Tadeusz Struk Jan. 15, 2016, 6:28 p.m. UTC | #1
On 01/06/2016 01:56 AM, Pingchao Yang wrote:
> From: Pingchao Yang <pingchao.yang@intel.com>
> 
> Reported-by : Struk, Tadeusz <tadeusz.struk@intel.com>
> Signed-off-by: Yang Pingchao <pingchao.yang@intel.com>
> 
> ---
> drivers/crypto/qat/qat_common/qat_hal.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/crypto/qat/qat_common/qat_hal.c b/drivers/crypto/qat/qat_common/qat_hal.c
> index 0d0b5ed..bcb39b0 100644
> --- a/drivers/crypto/qat/qat_common/qat_hal.c
> +++ b/drivers/crypto/qat/qat_common/qat_hal.c
> @@ -693,14 +693,12 @@ int qat_hal_init(struct adf_accel_dev *accel_dev)
>  	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
>  	struct adf_bar *misc_bar =
>  			&pci_info->pci_bars[hw_data->get_misc_bar_id(hw_data)];
> -	struct adf_bar *sram_bar =
> -			&pci_info->pci_bars[hw_data->get_sram_bar_id(hw_data)];
> +	struct adf_bar *sram_bar;
>  
>  	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
>  	if (!handle)
>  		return -ENOMEM;
>  
> -	handle->hal_sram_addr_v = sram_bar->virt_addr;
>  	handle->hal_cap_g_ctl_csr_addr_v =
>  		(void __iomem *)((uintptr_t)misc_bar->virt_addr +
>  				 ICP_QAT_CAP_OFFSET);
> @@ -714,6 +712,11 @@ int qat_hal_init(struct adf_accel_dev *accel_dev)
>  		(void __iomem *)((uintptr_t)handle->hal_cap_ae_xfer_csr_addr_v +
>  				 LOCAL_TO_XFER_REG_OFFSET);
>  	handle->pci_dev = pci_info->pci_dev;
> +	if (handle->pci_dev->device != ADF_C3XXX_PCI_DEVICE_ID) {
> +		sram_bar =
> +			&pci_info->pci_bars[hw_data->get_sram_bar_id(hw_data)];
> +		handle->hal_sram_addr_v = sram_bar->virt_addr;
> +	}
>  	handle->fw_auth = (handle->pci_dev->device ==
>  			   ADF_DH895XCC_PCI_DEVICE_ID) ? false : true;
>  	handle->hal_handle = kzalloc(sizeof(*handle->hal_handle), GFP_KERNEL);
> 
Herbert,
This fixes issue related to invalid BAR mapping on C3XXX device,
which leads to memory corruption and kernel oops.
Please include this fix into 4.5.
Thanks,
Herbert Xu Jan. 18, 2016, 3:22 p.m. UTC | #2
On Fri, Jan 15, 2016 at 10:28:51AM -0800, Tadeusz Struk wrote:
> On 01/06/2016 01:56 AM, Pingchao Yang wrote:
> > From: Pingchao Yang <pingchao.yang@intel.com>
> > 
> > Reported-by : Struk, Tadeusz <tadeusz.struk@intel.com>
> > Signed-off-by: Yang Pingchao <pingchao.yang@intel.com>

Patch applied.  Thanks!
diff mbox

Patch

diff --git a/drivers/crypto/qat/qat_common/qat_hal.c b/drivers/crypto/qat/qat_common/qat_hal.c
index 0d0b5ed..bcb39b0 100644
--- a/drivers/crypto/qat/qat_common/qat_hal.c
+++ b/drivers/crypto/qat/qat_common/qat_hal.c
@@ -693,14 +693,12 @@  int qat_hal_init(struct adf_accel_dev *accel_dev)
 	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
 	struct adf_bar *misc_bar =
 			&pci_info->pci_bars[hw_data->get_misc_bar_id(hw_data)];
-	struct adf_bar *sram_bar =
-			&pci_info->pci_bars[hw_data->get_sram_bar_id(hw_data)];
+	struct adf_bar *sram_bar;
 
 	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;
 
-	handle->hal_sram_addr_v = sram_bar->virt_addr;
 	handle->hal_cap_g_ctl_csr_addr_v =
 		(void __iomem *)((uintptr_t)misc_bar->virt_addr +
 				 ICP_QAT_CAP_OFFSET);
@@ -714,6 +712,11 @@  int qat_hal_init(struct adf_accel_dev *accel_dev)
 		(void __iomem *)((uintptr_t)handle->hal_cap_ae_xfer_csr_addr_v +
 				 LOCAL_TO_XFER_REG_OFFSET);
 	handle->pci_dev = pci_info->pci_dev;
+	if (handle->pci_dev->device != ADF_C3XXX_PCI_DEVICE_ID) {
+		sram_bar =
+			&pci_info->pci_bars[hw_data->get_sram_bar_id(hw_data)];
+		handle->hal_sram_addr_v = sram_bar->virt_addr;
+	}
 	handle->fw_auth = (handle->pci_dev->device ==
 			   ADF_DH895XCC_PCI_DEVICE_ID) ? false : true;
 	handle->hal_handle = kzalloc(sizeof(*handle->hal_handle), GFP_KERNEL);