mirror of
https://github.com/opnsense/src.git
synced 2026-06-10 01:00:30 -04:00
qat: refactor error handling and add mutex locks
Error handling in qat driver code has been refactored.
Mutex lock handling has also been added during driver
attach and detach. Also pci_disable_busmaster() is called in
adf_detach() to ensure proper cleanup during device detachment.
Reviewed by: markj, ziaee
MFC after: 2 weeks
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D50379
(cherry picked from commit ae1dc27639)
This commit is contained in:
parent
cfb6574431
commit
4e2ec609ae
8 changed files with 121 additions and 53 deletions
|
|
@ -449,12 +449,6 @@ adf_dev_start_locked(struct adf_accel_dev *accel_dev)
|
|||
struct list_head *list_itr;
|
||||
|
||||
set_bit(ADF_STATUS_STARTING, &accel_dev->status);
|
||||
if (adf_devmgr_verify_id(&accel_dev->accel_id)) {
|
||||
device_printf(GET_DEV(accel_dev),
|
||||
"QAT: Device %d not found\n",
|
||||
accel_dev->accel_id);
|
||||
return ENODEV;
|
||||
}
|
||||
if (adf_ae_start(accel_dev)) {
|
||||
device_printf(GET_DEV(accel_dev), "AE Start Failed\n");
|
||||
return EFAULT;
|
||||
|
|
@ -556,13 +550,6 @@ adf_dev_stop_locked(struct adf_accel_dev *accel_dev)
|
|||
struct service_hndl *service;
|
||||
struct list_head *list_itr;
|
||||
|
||||
if (adf_devmgr_verify_id(&accel_dev->accel_id)) {
|
||||
device_printf(GET_DEV(accel_dev),
|
||||
"QAT: Device %d not found\n",
|
||||
accel_dev->accel_id);
|
||||
return ENODEV;
|
||||
}
|
||||
|
||||
if (!test_bit(ADF_STATUS_CONFIGURED, &accel_dev->status))
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ adf_attach(device_t dev)
|
|||
struct adf_accel_pci *accel_pci_dev;
|
||||
struct adf_hw_device_data *hw_data;
|
||||
unsigned int i = 0, bar_nr = 0, reg_val = 0;
|
||||
int ret, rid;
|
||||
int ret = 0, rid;
|
||||
struct adf_cfg_device *cfg_dev = NULL;
|
||||
|
||||
/* Set pci MaxPayLoad to 256. Implemented to avoid the issue of
|
||||
|
|
@ -96,6 +96,7 @@ adf_attach(device_t dev)
|
|||
|
||||
accel_dev = device_get_softc(dev);
|
||||
|
||||
mutex_init(&accel_dev->lock);
|
||||
INIT_LIST_HEAD(&accel_dev->crypto_list);
|
||||
accel_pci_dev = &accel_dev->accel_pci_dev;
|
||||
accel_pci_dev->pci_dev = dev;
|
||||
|
|
@ -108,9 +109,10 @@ adf_attach(device_t dev)
|
|||
/* Add accel device to accel table.
|
||||
* This should be called before adf_cleanup_accel is called
|
||||
*/
|
||||
if (adf_devmgr_add_dev(accel_dev, NULL)) {
|
||||
ret = adf_devmgr_add_dev(accel_dev, NULL);
|
||||
if (ret) {
|
||||
device_printf(dev, "Failed to add new accelerator device.\n");
|
||||
return ENXIO;
|
||||
goto out_err_lock;
|
||||
}
|
||||
|
||||
/* Allocate and configure device configuration structure */
|
||||
|
|
@ -213,18 +215,20 @@ adf_attach(device_t dev)
|
|||
bar->base_addr = rman_get_start(bar->virt_addr);
|
||||
bar->size = rman_get_size(bar->virt_addr);
|
||||
}
|
||||
pci_enable_busmaster(dev);
|
||||
ret = pci_enable_busmaster(dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
adf_dbgfs_init(accel_dev);
|
||||
|
||||
if (!accel_dev->hw_device->config_device) {
|
||||
ret = EFAULT;
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
}
|
||||
|
||||
ret = accel_dev->hw_device->config_device(accel_dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (ret)
|
||||
|
|
@ -243,8 +247,13 @@ out_dev_stop:
|
|||
adf_dev_stop(accel_dev);
|
||||
out_dev_shutdown:
|
||||
adf_dev_shutdown(accel_dev);
|
||||
out_err_disable:
|
||||
pci_disable_busmaster(dev);
|
||||
out_err:
|
||||
adf_cleanup_accel(accel_dev);
|
||||
out_err_lock:
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -260,7 +269,9 @@ adf_detach(device_t dev)
|
|||
|
||||
adf_dev_shutdown(accel_dev);
|
||||
|
||||
pci_disable_busmaster(dev);
|
||||
adf_cleanup_accel(accel_dev);
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ adf_attach(device_t dev)
|
|||
struct adf_accel_pci *accel_pci_dev;
|
||||
struct adf_hw_device_data *hw_data;
|
||||
unsigned int bar_nr;
|
||||
int ret, rid;
|
||||
int ret = 0, rid;
|
||||
struct adf_cfg_device *cfg_dev = NULL;
|
||||
|
||||
/* Set pci MaxPayLoad to 512. Implemented to avoid the issue of
|
||||
|
|
@ -170,6 +170,7 @@ adf_attach(device_t dev)
|
|||
|
||||
accel_dev = device_get_softc(dev);
|
||||
|
||||
mutex_init(&accel_dev->lock);
|
||||
INIT_LIST_HEAD(&accel_dev->crypto_list);
|
||||
accel_pci_dev = &accel_dev->accel_pci_dev;
|
||||
accel_pci_dev->pci_dev = dev;
|
||||
|
|
@ -180,9 +181,10 @@ adf_attach(device_t dev)
|
|||
/* Add accel device to accel table.
|
||||
* This should be called before adf_cleanup_accel is called
|
||||
*/
|
||||
if (adf_devmgr_add_dev(accel_dev, NULL)) {
|
||||
ret = adf_devmgr_add_dev(accel_dev, NULL);
|
||||
if (ret) {
|
||||
device_printf(dev, "Failed to add new accelerator device.\n");
|
||||
return ENXIO;
|
||||
goto out_err_lock;
|
||||
}
|
||||
|
||||
/* Allocate and configure device configuration structure */
|
||||
|
|
@ -273,18 +275,20 @@ adf_attach(device_t dev)
|
|||
bar->base_addr = rman_get_start(bar->virt_addr);
|
||||
bar->size = rman_get_size(bar->virt_addr);
|
||||
}
|
||||
pci_enable_busmaster(dev);
|
||||
ret = pci_enable_busmaster(dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
adf_dbgfs_init(accel_dev);
|
||||
|
||||
if (!accel_dev->hw_device->config_device) {
|
||||
ret = EFAULT;
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
}
|
||||
|
||||
ret = accel_dev->hw_device->config_device(accel_dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (ret)
|
||||
|
|
@ -303,8 +307,13 @@ out_dev_stop:
|
|||
adf_dev_stop(accel_dev);
|
||||
out_dev_shutdown:
|
||||
adf_dev_shutdown(accel_dev);
|
||||
out_err_disable:
|
||||
pci_disable_busmaster(dev);
|
||||
out_err:
|
||||
adf_cleanup_accel(accel_dev);
|
||||
out_err_lock:
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -320,7 +329,9 @@ adf_detach(device_t dev)
|
|||
|
||||
adf_dev_shutdown(accel_dev);
|
||||
|
||||
pci_disable_busmaster(dev);
|
||||
adf_cleanup_accel(accel_dev);
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ adf_attach(device_t dev)
|
|||
struct adf_cfg_device *cfg_dev = NULL;
|
||||
|
||||
accel_dev = device_get_softc(dev);
|
||||
mutex_init(&accel_dev->lock);
|
||||
accel_dev->is_vf = true;
|
||||
pf = adf_devmgr_pci_to_accel_dev(pci_find_pf(dev));
|
||||
|
||||
|
|
@ -112,11 +113,13 @@ adf_attach(device_t dev)
|
|||
accel_pci_dev->node = 0;
|
||||
|
||||
/* Add accel device to accel table */
|
||||
if (adf_devmgr_add_dev(accel_dev, pf)) {
|
||||
ret = adf_devmgr_add_dev(accel_dev, pf);
|
||||
if (ret) {
|
||||
device_printf(GET_DEV(accel_dev),
|
||||
"Failed to add new accelerator device.\n");
|
||||
return -EFAULT;
|
||||
goto out_err_lock;
|
||||
}
|
||||
|
||||
/* Allocate and configure device configuration structure */
|
||||
hw_data = malloc(sizeof(*hw_data), M_QAT_4XXXVF, M_WAITOK | M_ZERO);
|
||||
accel_dev->hw_device = hw_data;
|
||||
|
|
@ -152,6 +155,8 @@ adf_attach(device_t dev)
|
|||
NULL,
|
||||
NULL,
|
||||
&accel_dev->dma_tag);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
hw_data->accel_capabilities_mask = adf_4xxxvf_get_hw_cap(accel_dev);
|
||||
|
||||
|
|
@ -180,7 +185,9 @@ adf_attach(device_t dev)
|
|||
bar->base_addr = rman_get_start(bar->virt_addr);
|
||||
bar->size = rman_get_size(bar->virt_addr);
|
||||
}
|
||||
pci_enable_busmaster(dev);
|
||||
ret = pci_enable_busmaster(dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
adf_dbgfs_init(accel_dev);
|
||||
|
||||
|
|
@ -190,7 +197,7 @@ adf_attach(device_t dev)
|
|||
|
||||
ret = hw_data->config_device(accel_dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (!ret)
|
||||
|
|
@ -212,8 +219,13 @@ adf_attach(device_t dev)
|
|||
|
||||
return ret;
|
||||
|
||||
out_err_disable:
|
||||
pci_disable_busmaster(dev);
|
||||
out_err:
|
||||
adf_cleanup_accel(accel_dev);
|
||||
out_err_lock:
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -231,7 +243,9 @@ adf_detach(device_t dev)
|
|||
clear_bit(ADF_STATUS_RESTARTING, &accel_dev->status);
|
||||
adf_dev_stop(accel_dev);
|
||||
adf_dev_shutdown(accel_dev);
|
||||
pci_disable_busmaster(dev);
|
||||
adf_cleanup_accel(accel_dev);
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ adf_attach(device_t dev)
|
|||
struct adf_accel_pci *accel_pci_dev;
|
||||
struct adf_hw_device_data *hw_data;
|
||||
unsigned int i, bar_nr;
|
||||
int ret, rid;
|
||||
int ret = 0, rid;
|
||||
struct adf_cfg_device *cfg_dev = NULL;
|
||||
|
||||
/* Set pci MaxPayLoad to 256. Implemented to avoid the issue of
|
||||
|
|
@ -95,6 +95,7 @@ adf_attach(device_t dev)
|
|||
|
||||
accel_dev = device_get_softc(dev);
|
||||
|
||||
mutex_init(&accel_dev->lock);
|
||||
INIT_LIST_HEAD(&accel_dev->crypto_list);
|
||||
accel_pci_dev = &accel_dev->accel_pci_dev;
|
||||
accel_pci_dev->pci_dev = dev;
|
||||
|
|
@ -106,9 +107,10 @@ adf_attach(device_t dev)
|
|||
|
||||
/* Add accel device to accel table.
|
||||
* This should be called before adf_cleanup_accel is called */
|
||||
if (adf_devmgr_add_dev(accel_dev, NULL)) {
|
||||
ret = adf_devmgr_add_dev(accel_dev, NULL);
|
||||
if (ret) {
|
||||
device_printf(dev, "Failed to add new accelerator device.\n");
|
||||
return ENXIO;
|
||||
goto out_err_lock;
|
||||
}
|
||||
|
||||
/* Allocate and configure device configuration structure */
|
||||
|
|
@ -202,18 +204,20 @@ adf_attach(device_t dev)
|
|||
bar->base_addr = rman_get_start(bar->virt_addr);
|
||||
bar->size = rman_get_size(bar->virt_addr);
|
||||
}
|
||||
pci_enable_busmaster(dev);
|
||||
ret = pci_enable_busmaster(dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
adf_dbgfs_init(accel_dev);
|
||||
|
||||
if (!accel_dev->hw_device->config_device) {
|
||||
ret = EFAULT;
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
}
|
||||
|
||||
ret = accel_dev->hw_device->config_device(accel_dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (ret)
|
||||
|
|
@ -232,8 +236,13 @@ out_dev_stop:
|
|||
adf_dev_stop(accel_dev);
|
||||
out_dev_shutdown:
|
||||
adf_dev_shutdown(accel_dev);
|
||||
out_err_disable:
|
||||
pci_disable_busmaster(dev);
|
||||
out_err:
|
||||
adf_cleanup_accel(accel_dev);
|
||||
out_err_lock:
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -249,7 +258,9 @@ adf_detach(device_t dev)
|
|||
|
||||
adf_dev_shutdown(accel_dev);
|
||||
|
||||
pci_disable_busmaster(dev);
|
||||
adf_cleanup_accel(accel_dev);
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ adf_attach(device_t dev)
|
|||
struct adf_accel_pci *accel_pci_dev;
|
||||
struct adf_hw_device_data *hw_data;
|
||||
unsigned int i, bar_nr;
|
||||
int ret, rid;
|
||||
int ret = 0, rid;
|
||||
struct adf_cfg_device *cfg_dev = NULL;
|
||||
|
||||
/* Set pci MaxPayLoad to 256. Implemented to avoid the issue of
|
||||
|
|
@ -96,6 +96,7 @@ adf_attach(device_t dev)
|
|||
|
||||
accel_dev = device_get_softc(dev);
|
||||
|
||||
mutex_init(&accel_dev->lock);
|
||||
INIT_LIST_HEAD(&accel_dev->crypto_list);
|
||||
accel_pci_dev = &accel_dev->accel_pci_dev;
|
||||
accel_pci_dev->pci_dev = dev;
|
||||
|
|
@ -108,9 +109,10 @@ adf_attach(device_t dev)
|
|||
/* Add accel device to accel table.
|
||||
* This should be called before adf_cleanup_accel is called
|
||||
*/
|
||||
if (adf_devmgr_add_dev(accel_dev, NULL)) {
|
||||
ret = adf_devmgr_add_dev(accel_dev, NULL);
|
||||
if (ret) {
|
||||
device_printf(dev, "Failed to add new accelerator device.\n");
|
||||
return ENXIO;
|
||||
goto out_err_lock;
|
||||
}
|
||||
|
||||
/* Allocate and configure device configuration structure */
|
||||
|
|
@ -201,18 +203,20 @@ adf_attach(device_t dev)
|
|||
bar->base_addr = rman_get_start(bar->virt_addr);
|
||||
bar->size = rman_get_start(bar->virt_addr);
|
||||
}
|
||||
pci_enable_busmaster(dev);
|
||||
ret = pci_enable_busmaster(dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
adf_dbgfs_init(accel_dev);
|
||||
|
||||
if (!accel_dev->hw_device->config_device) {
|
||||
ret = EFAULT;
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
}
|
||||
|
||||
ret = accel_dev->hw_device->config_device(accel_dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (ret)
|
||||
|
|
@ -231,8 +235,13 @@ out_dev_stop:
|
|||
adf_dev_stop(accel_dev);
|
||||
out_dev_shutdown:
|
||||
adf_dev_shutdown(accel_dev);
|
||||
out_err_disable:
|
||||
pci_disable_busmaster(dev);
|
||||
out_err:
|
||||
adf_cleanup_accel(accel_dev);
|
||||
out_err_lock:
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -248,7 +257,9 @@ adf_detach(device_t dev)
|
|||
|
||||
adf_dev_shutdown(accel_dev);
|
||||
|
||||
pci_disable_busmaster(dev);
|
||||
adf_cleanup_accel(accel_dev);
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ adf_attach(device_t dev)
|
|||
struct adf_accel_pci *accel_pci_dev;
|
||||
struct adf_hw_device_data *hw_data;
|
||||
unsigned int i, bar_nr;
|
||||
int ret, rid;
|
||||
int ret = 0, rid;
|
||||
struct adf_cfg_device *cfg_dev = NULL;
|
||||
|
||||
/* Set pci MaxPayLoad to 256. Implemented to avoid the issue of
|
||||
|
|
@ -95,6 +95,7 @@ adf_attach(device_t dev)
|
|||
|
||||
accel_dev = device_get_softc(dev);
|
||||
|
||||
mutex_init(&accel_dev->lock);
|
||||
INIT_LIST_HEAD(&accel_dev->crypto_list);
|
||||
accel_pci_dev = &accel_dev->accel_pci_dev;
|
||||
accel_pci_dev->pci_dev = dev;
|
||||
|
|
@ -106,9 +107,10 @@ adf_attach(device_t dev)
|
|||
|
||||
/* Add accel device to accel table.
|
||||
* This should be called before adf_cleanup_accel is called */
|
||||
if (adf_devmgr_add_dev(accel_dev, NULL)) {
|
||||
ret = adf_devmgr_add_dev(accel_dev, NULL);
|
||||
if (ret) {
|
||||
device_printf(dev, "Failed to add new accelerator device.\n");
|
||||
return ENXIO;
|
||||
goto out_err_lock;
|
||||
}
|
||||
|
||||
/* Allocate and configure device configuration structure */
|
||||
|
|
@ -203,18 +205,20 @@ adf_attach(device_t dev)
|
|||
bar->base_addr = rman_get_start(bar->virt_addr);
|
||||
bar->size = rman_get_size(bar->virt_addr);
|
||||
}
|
||||
pci_enable_busmaster(dev);
|
||||
ret = pci_enable_busmaster(dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
adf_dbgfs_init(accel_dev);
|
||||
|
||||
if (!accel_dev->hw_device->config_device) {
|
||||
ret = EFAULT;
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
}
|
||||
|
||||
ret = accel_dev->hw_device->config_device(accel_dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (ret)
|
||||
|
|
@ -233,8 +237,13 @@ out_dev_stop:
|
|||
adf_dev_stop(accel_dev);
|
||||
out_dev_shutdown:
|
||||
adf_dev_shutdown(accel_dev);
|
||||
out_err_disable:
|
||||
pci_disable_busmaster(dev);
|
||||
out_err:
|
||||
adf_cleanup_accel(accel_dev);
|
||||
out_err_lock:
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -250,7 +259,9 @@ adf_detach(device_t dev)
|
|||
|
||||
adf_dev_shutdown(accel_dev);
|
||||
|
||||
pci_disable_busmaster(dev);
|
||||
adf_cleanup_accel(accel_dev);
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ adf_attach(device_t dev)
|
|||
struct adf_accel_pci *accel_pci_dev;
|
||||
struct adf_hw_device_data *hw_data;
|
||||
unsigned int i, bar_nr;
|
||||
int ret, rid;
|
||||
int ret = 0, rid;
|
||||
struct adf_cfg_device *cfg_dev = NULL;
|
||||
|
||||
/* Set pci MaxPayLoad to 256. Implemented to avoid the issue of
|
||||
|
|
@ -95,6 +95,7 @@ adf_attach(device_t dev)
|
|||
|
||||
accel_dev = device_get_softc(dev);
|
||||
|
||||
mutex_init(&accel_dev->lock);
|
||||
INIT_LIST_HEAD(&accel_dev->crypto_list);
|
||||
accel_pci_dev = &accel_dev->accel_pci_dev;
|
||||
accel_pci_dev->pci_dev = dev;
|
||||
|
|
@ -104,9 +105,10 @@ adf_attach(device_t dev)
|
|||
|
||||
/* Add accel device to accel table.
|
||||
* This should be called before adf_cleanup_accel is called */
|
||||
if (adf_devmgr_add_dev(accel_dev, NULL)) {
|
||||
ret = adf_devmgr_add_dev(accel_dev, NULL);
|
||||
if (ret) {
|
||||
device_printf(dev, "Failed to add new accelerator device.\n");
|
||||
return ENXIO;
|
||||
goto out_err_lock;
|
||||
}
|
||||
|
||||
/* Allocate and configure device configuration structure */
|
||||
|
|
@ -191,18 +193,20 @@ adf_attach(device_t dev)
|
|||
bar->base_addr = rman_get_start(bar->virt_addr);
|
||||
bar->size = rman_get_size(bar->virt_addr);
|
||||
}
|
||||
pci_enable_busmaster(dev);
|
||||
ret = pci_enable_busmaster(dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
adf_dbgfs_init(accel_dev);
|
||||
|
||||
if (!accel_dev->hw_device->config_device) {
|
||||
ret = EFAULT;
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
}
|
||||
|
||||
ret = accel_dev->hw_device->config_device(accel_dev);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
goto out_err_disable;
|
||||
|
||||
ret = adf_dev_init(accel_dev);
|
||||
if (ret)
|
||||
|
|
@ -221,8 +225,13 @@ out_dev_stop:
|
|||
adf_dev_stop(accel_dev);
|
||||
out_dev_shutdown:
|
||||
adf_dev_shutdown(accel_dev);
|
||||
out_err_disable:
|
||||
pci_disable_busmaster(dev);
|
||||
out_err:
|
||||
adf_cleanup_accel(accel_dev);
|
||||
out_err_lock:
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -238,7 +247,10 @@ adf_detach(device_t dev)
|
|||
|
||||
adf_dev_shutdown(accel_dev);
|
||||
|
||||
pci_disable_busmaster(dev);
|
||||
adf_cleanup_accel(accel_dev);
|
||||
mutex_destroy(&accel_dev->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue