From nobody Fri Jun 6 13:57:10 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bDND66SBVz5xB54; Fri, 06 Jun 2025 13:57:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bDND65wmfz3mMF; Fri, 06 Jun 2025 13:57:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1749218230; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hiV1EHdqlKL/Ql+Gre6Q+ulavKbIkp/8GeboPml/53Q=; b=asx2B0YP4hYGZVBCuwPuROPcXPx1f/I/MBAZpowhndV5xcnlUacX5af7zAKV4kDo+vfqT7 27Pp++neohlvJLHlR97n6CEJVE3IBAjhJwy/yGmBNDiJa6g900wwIoUNBMxP8JrUHgXjiD /1B0NspNuxh9kwZGWrjUTT+UfHbg7y6vOygL//cJM2bzWUHB0GJ74l+higQMZrcxVNNJ3W YAZjMiXWmUpxe7gLKcTnBTuKiqxWnMS+NljNxsz5IyWU/xwyD+63B95W6LDmWPDHC2bx1f QI2+4YThdSNEZr9i7VRfLSpmD71iMjADVQJel4MHFXslUL/8/egHPqRaxrv2AQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1749218230; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hiV1EHdqlKL/Ql+Gre6Q+ulavKbIkp/8GeboPml/53Q=; b=oubT3zL+crBZoeBk3tKA2BoSycrGHNjNdyh3cXS0VaOrH6QrW+BwBk5P6mOXstRSWtm5t5 DY6QfNJvIq2/2TkdiH2FE7pJGePjqkT+JfaPdD+D52Ov8CRyG3ZQgohwXmznqrCPjuGtXv 9VU5jKtK5g+w5LDPgPPtPlPNL2MCOsM1QmXz9QyLT6KilnrgGTHuvorIF3Cej4sJGDN/4s 7wJSzslCw29oS/XdvqPIyeq1xlK28KtT8fzXn3OeSWDP2AJC6aYGkYLQT/Y3mdUWgVOav/ 3SxmRcGdCQJqEnVxxLgA3lGKN+N1rrw28T+/qxtxjqFXsLJKKVPaAKcVHHE0dw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1749218230; a=rsa-sha256; cv=none; b=pQn7wMXsM97rX4VfedKex91Vd8C0oJtMxIbvDnW9YOAkB8wpf4u4d5oEYUWqGCs0BAqdsE Y/fwZ8tZiMiYYFo5pkc/VVij7iPL23HtRaNh7i/lhSFSxCPa0tYdaggwIc0lwejX+h0PLD xY2Xm2Qbm1WAqz/tRpdMUlv+BcFSpo3vonl1HGl0+5rgBBdgP+C/ifxZuQqal82+ekAOrU C1DcYmYWI7dbRiUOKW4y0qVQKVmOpd6OwQr0CYc1YvD+GJvzPUH+p/8HHW0mjwUW7JSg2Z qL3PrjOHCIonYfm7I2eiYU4Pg9tU65Kn4tGvy5X4tBSrDPJPwkWJLihq7x1sdg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bDND65H11zxl5; Fri, 06 Jun 2025 13:57:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 556DvAVO084124; Fri, 6 Jun 2025 13:57:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 556DvAUS084121; Fri, 6 Jun 2025 13:57:10 GMT (envelope-from git) Date: Fri, 6 Jun 2025 13:57:10 GMT Message-Id: <202506061357.556DvAUS084121@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: ae1dc27639c8 - main - qat: refactor error handling and add mutex locks List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ae1dc27639c88038d150660c4096753e210aec42 Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=ae1dc27639c88038d150660c4096753e210aec42 commit ae1dc27639c88038d150660c4096753e210aec42 Author: Hareshx Sankar Raj AuthorDate: 2025-05-07 09:32:10 +0000 Commit: Mark Johnston CommitDate: 2025-06-06 13:49:51 +0000 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 --- sys/dev/qat/qat_common/adf_init.c | 13 ------------- sys/dev/qat/qat_hw/qat_200xx/adf_drv.c | 23 +++++++++++++++++------ sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c | 23 +++++++++++++++++------ sys/dev/qat/qat_hw/qat_4xxxvf/adf_drv.c | 22 ++++++++++++++++++---- sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c | 23 +++++++++++++++++------ sys/dev/qat/qat_hw/qat_c4xxx/adf_drv.c | 23 +++++++++++++++++------ sys/dev/qat/qat_hw/qat_c62x/adf_drv.c | 23 +++++++++++++++++------ sys/dev/qat/qat_hw/qat_dh895xcc/adf_drv.c | 24 ++++++++++++++++++------ 8 files changed, 121 insertions(+), 53 deletions(-) diff --git a/sys/dev/qat/qat_common/adf_init.c b/sys/dev/qat/qat_common/adf_init.c index 6bd0d85aae69..a7ebb70dde3d 100644 --- a/sys/dev/qat/qat_common/adf_init.c +++ b/sys/dev/qat/qat_common/adf_init.c @@ -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; diff --git a/sys/dev/qat/qat_hw/qat_200xx/adf_drv.c b/sys/dev/qat/qat_hw/qat_200xx/adf_drv.c index 9e2462c05657..816010dc06f8 100644 --- a/sys/dev/qat/qat_hw/qat_200xx/adf_drv.c +++ b/sys/dev/qat/qat_hw/qat_200xx/adf_drv.c @@ -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; } diff --git a/sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c b/sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c index 0813ccf5baf0..cb534dd03b86 100644 --- a/sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c +++ b/sys/dev/qat/qat_hw/qat_4xxx/adf_drv.c @@ -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; } diff --git a/sys/dev/qat/qat_hw/qat_4xxxvf/adf_drv.c b/sys/dev/qat/qat_hw/qat_4xxxvf/adf_drv.c index 42189c28b21a..2bbccb4d6b17 100644 --- a/sys/dev/qat/qat_hw/qat_4xxxvf/adf_drv.c +++ b/sys/dev/qat/qat_hw/qat_4xxxvf/adf_drv.c @@ -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; } diff --git a/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c b/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c index 9f2c9374e968..b91daefb45d4 100644 --- a/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c +++ b/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c @@ -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; } diff --git a/sys/dev/qat/qat_hw/qat_c4xxx/adf_drv.c b/sys/dev/qat/qat_hw/qat_c4xxx/adf_drv.c index 697f5b1ce786..f333101cce50 100644 --- a/sys/dev/qat/qat_hw/qat_c4xxx/adf_drv.c +++ b/sys/dev/qat/qat_hw/qat_c4xxx/adf_drv.c @@ -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; } diff --git a/sys/dev/qat/qat_hw/qat_c62x/adf_drv.c b/sys/dev/qat/qat_hw/qat_c62x/adf_drv.c index 1d48b85b2e12..955f6c48a071 100644 --- a/sys/dev/qat/qat_hw/qat_c62x/adf_drv.c +++ b/sys/dev/qat/qat_hw/qat_c62x/adf_drv.c @@ -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; } diff --git a/sys/dev/qat/qat_hw/qat_dh895xcc/adf_drv.c b/sys/dev/qat/qat_hw/qat_dh895xcc/adf_drv.c index d8f2ba0a99b7..a74de5eb592d 100644 --- a/sys/dev/qat/qat_hw/qat_dh895xcc/adf_drv.c +++ b/sys/dev/qat/qat_hw/qat_dh895xcc/adf_drv.c @@ -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; }