Received: by 2002:a05:7412:31a9:b0:e2:908c:2ebd with SMTP id et41csp4206955rdb; Thu, 14 Sep 2023 15:32:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEKYI6d1nLgY/8OrVKmXENPDSyd+/53Vw+KUq+RvTdipF/MEuRRhcD+OBScDfravVYVUOn6 X-Received: by 2002:a05:6a00:24c8:b0:68f:b5a3:5ec6 with SMTP id d8-20020a056a0024c800b0068fb5a35ec6mr14634pfv.0.1694730761967; Thu, 14 Sep 2023 15:32:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694730761; cv=none; d=google.com; s=arc-20160816; b=RBbipgTIXeYMah916IFrgxFiS3cBuSvJdAXJNnb4bk16V2QVhOJ1P1Zxg7uGoGz7i9 yY652vBWDvSZAOw/O4JsFrbdxkI/FUG5AcIgff8QziuRf2g3XHzfjTen+lON9HIym8WJ mNsK+RcirWaz38/rmmjg0jl1jXX/+2CnX9I6eyvk+fyRqp1WQmiKXz8KeLgVNJATZcVS MVireebGaEI/ZmPCcfC7px0idIGcsvmZ7cjBlwnnlVUTnIf98/3FOki5fJFedFOu5Gl7 nVxb4fukaPpUJCZSXqMj675j+iORPP+ekQstUG4BHvZdF0FgTPfx76967HRRXm5MhYAO IBXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:organization :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/jKABXvRybxOnnaZQ2GxJ0zKjOwmNuVmB+h8YEuBO5M=; fh=jcEcO8kvjVbjOnpJo+0CXMh8+lmy7ypg3mt+Q3PjQDE=; b=iXXR1x75gJnBI863sJbZHanrxUOq/P6ozaAt1H2DSqfDvy/56/r4hN+MXc278h48eC dbom8fwdOIWdU6iR0eJxSamfDE6ChCTph9zNJ62jNhEZUyqrf/4mhoTq2B2urhae7KB4 uqxviEpm9knFkhCqAy+PKPwU512ARVPeu7jRAnhy+KSbnzk60jBp1moLACklatWQpzwJ Ejo9+KL6Ke/T0rPMhIuKW0YPo0kedT0Z7c2CT1Lcj1ZmGaDs6opcYn4oSWlqcqtjkD72 wC0UGN5toV1yINRF4Hy0/2z+B0hn6VzXB78j4Jm5XNUN6vkHo43+zPJdVGWO42Sw7Yo3 w6Hw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=D+zb2tJS; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id dc14-20020a056a0035ce00b0068fc7938a28si2130445pfb.397.2023.09.14.15.32.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Sep 2023 15:32:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=D+zb2tJS; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id E7A9980E6CB4; Thu, 14 Sep 2023 02:57:22 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237603AbjINJ5Z (ORCPT + 99 others); Thu, 14 Sep 2023 05:57:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38084 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237638AbjINJ5V (ORCPT ); Thu, 14 Sep 2023 05:57:21 -0400 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 889241BFA for ; Thu, 14 Sep 2023 02:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694685437; x=1726221437; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HtNF+DodAJ+LzztCCgIMJt2A2eJ1Roc9kQ4m6N/xCek=; b=D+zb2tJSWPgcnFMdLI8OIjIh3BAyQMbqFTq8pUklQYppi8wtDgfcu0ls UH+9lONm8VhNe3oCODxXkFttdJXqkcVbtqjwoNulBqCTTMlEdwuugWI0U z5SfNyRfKwhFot/OIHfw19wFoiknaF20eZC3mtdG3hMJ4cBsQFqsHjTLz 3RIbvGu2j/zq8vBHIpYpjveCiIu0gm97l0FJ4gL/x92+uBqKiB/jcvg2X B6PDOs2rXayuJtLUwcA0hOWz7/Kz/wdBiCJzWxHmhALM9L8pXF4t5TXdb mPm5Qia8AlKkFMXQt1J8QYRXi2dlELxaoBMkHMWCO0ZJTmqnj7vlxgWot w==; X-IronPort-AV: E=McAfee;i="6600,9927,10832"; a="465279172" X-IronPort-AV: E=Sophos;i="6.02,145,1688454000"; d="scan'208";a="465279172" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Sep 2023 02:57:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10832"; a="814619756" X-IronPort-AV: E=Sophos;i="6.02,145,1688454000"; d="scan'208";a="814619756" Received: from silpixa00400314.ir.intel.com (HELO silpixa00400314.ger.corp.intel.com) ([10.237.222.216]) by fmsmga004.fm.intel.com with ESMTP; 14 Sep 2023 02:57:15 -0700 From: Giovanni Cabiddu To: herbert@gondor.apana.org.au Cc: linux-crypto@vger.kernel.org, qat-linux@intel.com, Giovanni Cabiddu , Adam Guerin Subject: [PATCH 4/5] crypto: qat - fix unregistration of crypto algorithms Date: Thu, 14 Sep 2023 10:55:48 +0100 Message-ID: <20230914095658.27166-5-giovanni.cabiddu@intel.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230914095658.27166-1-giovanni.cabiddu@intel.com> References: <20230914095658.27166-1-giovanni.cabiddu@intel.com> MIME-Version: 1.0 Organization: Intel Research and Development Ireland Ltd - Co. Reg. #308263 - Collinstown Industrial Park, Leixlip, County Kildare - Ireland Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Thu, 14 Sep 2023 02:57:23 -0700 (PDT) X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email The function adf_dev_init(), through the subsystem qat_crypto, populates the list of list of crypto instances accel_dev->crypto_list. If the list of instances is not empty, the function adf_dev_start() will then call qat_algs_registers() and qat_asym_algs_register() to register the crypto algorithms into the crypto framework. If any of the functions in adf_dev_start() fail, the caller of such function, in the error path calls adf_dev_down() which in turn call adf_dev_stop() and adf_dev_shutdown(), see for example the function state_store in adf_sriov.c. However, if the registration of crypto algorithms is not done, adf_dev_stop() will try to unregister the algorithms regardless. This might cause the counter active_devs in qat_algs.c and qat_asym_algs.c to get to a negative value. Add a new state, ADF_STATUS_CRYPTO_ALGS_REGISTERED, which tracks if the crypto algorithms are registered into the crypto framework. Then use this to unregister the algorithms if such flag is set. This ensures that the crypto algorithms are only unregistered if previously registered. Fixes: d8cba25d2c68 ("crypto: qat - Intel(R) QAT driver framework") Signed-off-by: Giovanni Cabiddu Reviewed-by: Adam Guerin --- drivers/crypto/intel/qat/qat_common/adf_common_drv.h | 1 + drivers/crypto/intel/qat/qat_common/adf_init.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/intel/qat/qat_common/adf_common_drv.h b/drivers/crypto/intel/qat/qat_common/adf_common_drv.h index d4c602b4fec7..95efe0f26811 100644 --- a/drivers/crypto/intel/qat/qat_common/adf_common_drv.h +++ b/drivers/crypto/intel/qat/qat_common/adf_common_drv.h @@ -25,6 +25,7 @@ #define ADF_STATUS_AE_STARTED 6 #define ADF_STATUS_PF_RUNNING 7 #define ADF_STATUS_IRQ_ALLOCATED 8 +#define ADF_STATUS_CRYPTO_ALGS_REGISTERED 9 enum adf_dev_reset_mode { ADF_DEV_RESET_ASYNC = 0, diff --git a/drivers/crypto/intel/qat/qat_common/adf_init.c b/drivers/crypto/intel/qat/qat_common/adf_init.c index 542318a5b771..37cf5ce99092 100644 --- a/drivers/crypto/intel/qat/qat_common/adf_init.c +++ b/drivers/crypto/intel/qat/qat_common/adf_init.c @@ -227,6 +227,7 @@ static int adf_dev_start(struct adf_accel_dev *accel_dev) clear_bit(ADF_STATUS_STARTED, &accel_dev->status); return -EFAULT; } + set_bit(ADF_STATUS_CRYPTO_ALGS_REGISTERED, &accel_dev->status); if (!list_empty(&accel_dev->compression_list) && qat_comp_algs_register()) { dev_err(&GET_DEV(accel_dev), @@ -267,10 +268,12 @@ static void adf_dev_stop(struct adf_accel_dev *accel_dev) clear_bit(ADF_STATUS_STARTING, &accel_dev->status); clear_bit(ADF_STATUS_STARTED, &accel_dev->status); - if (!list_empty(&accel_dev->crypto_list)) { + if (!list_empty(&accel_dev->crypto_list) && + test_bit(ADF_STATUS_CRYPTO_ALGS_REGISTERED, &accel_dev->status)) { qat_algs_unregister(); qat_asym_algs_unregister(); } + clear_bit(ADF_STATUS_CRYPTO_ALGS_REGISTERED, &accel_dev->status); if (!list_empty(&accel_dev->compression_list)) qat_comp_algs_unregister(); -- 2.41.0