From patchwork Thu Nov 2 09:41:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadiusz Kusztal X-Patchwork-Id: 133782 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 716D24326D; Thu, 2 Nov 2023 11:53:48 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 44F8440282; Thu, 2 Nov 2023 11:53:48 +0100 (CET) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 0168940262 for ; Thu, 2 Nov 2023 11:53:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698922426; x=1730458426; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=sEW4TgldCyD10PBIAfoRObRf10RO8NPpGRiysHyRU24=; b=ET3H/iXQYWtIn1vb9W3lN4tyL6Ffw75op7vPfvuCNyaCq6OWFxMGA/ms 6ydKq9yKN6kFboa2g0g2OccP4g0JfQ8vjyb/Ujod3ElUzNWh+X6aqg/KO IzXWHtIxorihn8OArupcGUM2HNS8WZuyU1FwZcB4zj6gK+0nXK08EgvzX Y4w1dWdqBDHarqc+40o0Zvlyexp3DMzi+HvoWMdVgHioYMdiqnxC67w+h BgphWqFvdBs1pIAgMc7tNOnJA62cyE5ot9VWEzAwuRMKfDuQ35yQCxFSt nDImx0wJiCxfkKhN5+8E3s3sjkZYkP2/AsWQKu41Ohwlq06YWuqIb+SH6 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10881"; a="392571364" X-IronPort-AV: E=Sophos;i="6.03,271,1694761200"; d="scan'208";a="392571364" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Nov 2023 03:53:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10881"; a="934748692" X-IronPort-AV: E=Sophos;i="6.03,271,1694761200"; d="scan'208";a="934748692" Received: from silpixa00399302.ir.intel.com ([10.237.214.136]) by orsmga005.jf.intel.com with ESMTP; 02 Nov 2023 03:53:43 -0700 From: Arkadiusz Kusztal To: dev@dpdk.org Cc: gakhil@marvell.com, kai.ji@intel.com, ciara.power@intel.com, Arkadiusz Kusztal Subject: [PATCH v3] common/qat: limit configuration to the primary process Date: Thu, 2 Nov 2023 09:41:35 +0000 Message-Id: <20231102094135.6689-1-arkadiuszx.kusztal@intel.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20231023035235.52694-1-arkadiuszx.kusztal@intel.com> References: <20231023035235.52694-1-arkadiuszx.kusztal@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This change prevents certain configuration functions from being called by the secondary process. Signed-off-by: Arkadiusz Kusztal Acked-by: Ciara Power --- v2: - fixed incorrect function call - rephrased comments v3: - fixed incorrect debug message drivers/common/qat/qat_device.c | 115 +++++++++++++++++++++++----------------- drivers/common/qat/qat_device.h | 2 + 2 files changed, 67 insertions(+), 50 deletions(-) diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c index cbf1e6a988..f55dc3c6f0 100644 --- a/drivers/common/qat/qat_device.c +++ b/drivers/common/qat/qat_device.c @@ -13,6 +13,15 @@ #include "adf_pf2vf_msg.h" #include "qat_pf2vf.h" +#define NOT_NULL(arg, func, msg, ...) \ + do { \ + if (arg == NULL) { \ + QAT_LOG(ERR, \ + msg, ##__VA_ARGS__); \ + func; \ + } \ + } while (0) + /* Hardware device information per generation */ struct qat_gen_hw_data qat_gen_config[QAT_N_GENS]; struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS]; @@ -173,6 +182,29 @@ qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param } } +static enum qat_device_gen +pick_gen(const struct rte_pci_device *pci_dev) +{ + switch (pci_dev->id.device_id) { + case 0x0443: + return QAT_GEN1; + case 0x37c9: + case 0x19e3: + case 0x6f55: + case 0x18ef: + return QAT_GEN2; + case 0x18a1: + return QAT_GEN3; + case 0x4941: + case 0x4943: + case 0x4945: + return QAT_GEN4; + default: + QAT_LOG(ERR, "Invalid dev_id, can't determine generation"); + return QAT_N_GENS; + } +} + struct qat_pci_device * qat_pci_device_allocate(struct rte_pci_device *pci_dev, struct qat_dev_cmd_param *qat_dev_cmd_param) @@ -190,25 +222,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev, rte_pci_device_name(&pci_dev->addr, name, sizeof(name)); snprintf(name+strlen(name), QAT_DEV_NAME_MAX_LEN-strlen(name), "_qat"); - switch (pci_dev->id.device_id) { - case 0x0443: - qat_dev_gen = QAT_GEN1; - break; - case 0x37c9: - case 0x19e3: - case 0x6f55: - case 0x18ef: - qat_dev_gen = QAT_GEN2; - break; - case 0x18a1: - qat_dev_gen = QAT_GEN3; - break; - case 0x4941: - case 0x4943: - case 0x4945: - qat_dev_gen = QAT_GEN4; - break; - default: + qat_dev_gen = pick_gen(pci_dev); + if (qat_dev_gen == QAT_N_GENS) { QAT_LOG(ERR, "Invalid dev_id, can't determine generation"); return NULL; } @@ -265,20 +280,15 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev, qat_dev->dev_private = qat_dev + 1; strlcpy(qat_dev->name, name, QAT_DEV_NAME_MAX_LEN); qat_dev->qat_dev_id = qat_dev_id; - qat_pci_devs[qat_dev_id].pci_dev = pci_dev; qat_dev->qat_dev_gen = qat_dev_gen; ops_hw = qat_dev_hw_spec[qat_dev->qat_dev_gen]; - if (ops_hw->qat_dev_get_misc_bar == NULL) { - QAT_LOG(ERR, "qat_dev_get_misc_bar function pointer not set"); - rte_memzone_free(qat_dev_mz); - return NULL; - } + NOT_NULL(ops_hw->qat_dev_get_misc_bar, goto error, + "QAT internal error! qat_dev_get_misc_bar function not set"); if (ops_hw->qat_dev_get_misc_bar(&mem_resource, pci_dev) == 0) { if (mem_resource->addr == NULL) { QAT_LOG(ERR, "QAT cannot get access to VF misc bar"); - rte_memzone_free(qat_dev_mz); - return NULL; + goto error; } qat_dev->misc_bar_io_addr = mem_resource->addr; } else @@ -291,22 +301,45 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev, QAT_LOG(ERR, "Cannot acquire ring configuration for QAT_%d", qat_dev_id); - rte_memzone_free(qat_dev_mz); - return NULL; + goto error; + } + NOT_NULL(ops_hw->qat_dev_reset_ring_pairs, goto error, + "QAT internal error! Reset ring pairs function not set, gen : %d", + qat_dev_gen); + if (ops_hw->qat_dev_reset_ring_pairs(qat_dev)) { + QAT_LOG(ERR, + "Cannot reset ring pairs, does pf driver supports pf2vf comms?" + ); + goto error; } + NOT_NULL(ops_hw->qat_dev_get_slice_map, goto error, + "QAT internal error! Read slice function not set, gen : %d", + qat_dev_gen); + if (ops_hw->qat_dev_get_slice_map(&qat_dev->slice_map, pci_dev) < 0) { + RTE_LOG(ERR, EAL, + "Cannot read slice configuration\n"); + goto error; + } + rte_spinlock_init(&qat_dev->arb_csr_lock); /* No errors when allocating, attach memzone with * qat_dev to list of devices */ qat_pci_devs[qat_dev_id].mz = qat_dev_mz; - - rte_spinlock_init(&qat_dev->arb_csr_lock); + qat_pci_devs[qat_dev_id].pci_dev = pci_dev; qat_nb_pci_devices++; QAT_LOG(DEBUG, "QAT device %d found, name %s, total QATs %d", qat_dev->qat_dev_id, qat_dev->name, qat_nb_pci_devices); return qat_dev; +error: + if (rte_memzone_free(qat_dev_mz)) { + QAT_LOG(DEBUG, + "QAT internal error! Trying to free already allocated memzone: %s", + qat_dev_mz->name); + } + return NULL; } static int @@ -371,9 +404,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, { int sym_ret = 0, asym_ret = 0, comp_ret = 0; int num_pmds_created = 0; - uint32_t capa = 0; struct qat_pci_device *qat_pci_dev; - struct qat_dev_hw_spec_funcs *ops_hw; struct qat_dev_cmd_param qat_dev_cmd_param[] = { { QAT_LEGACY_CAPA, 0 }, { SYM_ENQ_THRESHOLD_NAME, 0 }, @@ -393,23 +424,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, if (qat_pci_dev == NULL) return -ENODEV; - ops_hw = qat_dev_hw_spec[qat_pci_dev->qat_dev_gen]; - if (ops_hw->qat_dev_reset_ring_pairs == NULL) - return -ENOTSUP; - if (ops_hw->qat_dev_reset_ring_pairs(qat_pci_dev)) { - QAT_LOG(ERR, - "Cannot reset ring pairs, does pf driver supports pf2vf comms?" - ); - return -ENODEV; - } - - if (ops_hw->qat_dev_get_slice_map(&capa, pci_dev) < 0) { - RTE_LOG(ERR, EAL, - "Cannot read slice configuration\n"); - return -1; - } - qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = capa; - + qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = qat_pci_dev->slice_map; sym_ret = qat_sym_dev_create(qat_pci_dev, qat_dev_cmd_param); if (sym_ret == 0) { num_pmds_created++; diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h index afee83017b..aa7988bb74 100644 --- a/drivers/common/qat/qat_device.h +++ b/drivers/common/qat/qat_device.h @@ -133,6 +133,8 @@ struct qat_pci_device { /**< Address of misc bar */ void *dev_private; /**< Per generation specific information */ + uint32_t slice_map; + /**< Map of the crypto and compression slices */ }; struct qat_gen_hw_data {