From patchwork Mon Jan 15 06:35:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil Goyal X-Patchwork-Id: 124476 Delivered-To: patch@linaro.org Received: by 10.46.64.148 with SMTP id r20csp573746lje; Sun, 14 Jan 2018 22:40:20 -0800 (PST) X-Google-Smtp-Source: ACJfBou8J0fYdZVoha4RnSmELTON7qw9BVHgvXZTdrvU1FByzraR+0h8b/7vn4dQ3Umru8a2CsjD X-Received: by 10.28.230.13 with SMTP id d13mr9997615wmh.125.1515998420776; Sun, 14 Jan 2018 22:40:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515998420; cv=none; d=google.com; s=arc-20160816; b=hkHQ1hvZKeK6lCUJQBmtgPH40MRtUodzCuUtSMnCwJploJlVJek3z8+Y9AgnQNO671 +VYBMWQgA8dKynx6cl2+LDKj64Bypnzw0WkSVFDk9DmJfZ2B6seSoT6GBcVi3qxmpXo0 MQXloEeZNeaeav/9oeqrvZTskqy3QIoCznaudw/7AMZwXc1xx4T6VYc6GotBZttNxVvV n0XWlbC3P4IkGsIMvmo2dkbMHWxDXzHqBV7WFi1pkIp+f+Eimw8RR5wn7AsTriN91GCb V2419JEcaRHyeKvWprrwm7KI3YwyhzDnh/j7CyDT8RS4Uo8ysxsDSeXqDYXjsaJ5nOVo mShg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:spamdiagnosticmetadata :spamdiagnosticoutput:mime-version:references:in-reply-to:message-id :date:cc:to:from:arc-authentication-results; bh=Fu7eAo93WCkXOzj4uiCNzBvIu0B/pbINiZjHU1qVZyk=; b=sm4YJPrQT4scMfYYNXL6QF1h1Yh7zs3YlP0z8/OGLOAO8uMpIEMDjJ98QxZa2sOQ62 dJr7wC2ZFwUjODzkvk3YAzc3E9UlKCdfu4vyS09sEAPFT5AhJZeFy2VmbNKiSHjxbszi Hybxfl/Xy4pyFjK/JsXbRItFY67dj37kZjfnf1pC5L5yT4SxcZNKYmU4jP3USAOTfWxK zQsrC/gMfZwhFtdSgNRZ7B6Qyiikb+R+ZbDQlS3Yv8VcaO9YBMbv1uowJhUgnV4y6WiB lq1fGoZIoc/WL6a61EUctEBDjj+iNi2BcmllyntdH3iMXXWAHWvYW7vTneXcxOR4gtv3 YFTA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id v1si7829130wrd.66.2018.01.14.22.40.20; Sun, 14 Jan 2018 22:40:20 -0800 (PST) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 36208A495; Mon, 15 Jan 2018 07:40:09 +0100 (CET) Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0067.outbound.protection.outlook.com [104.47.41.67]) by dpdk.org (Postfix) with ESMTP id 9F42EA48C for ; Mon, 15 Jan 2018 07:40:07 +0100 (CET) Received: from BN3PR03CA0116.namprd03.prod.outlook.com (10.174.66.34) by DM5PR03MB2698.namprd03.prod.outlook.com (10.168.197.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.407.7; Mon, 15 Jan 2018 06:40:06 +0000 Received: from BN1AFFO11FD030.protection.gbl (2a01:111:f400:7c10::171) by BN3PR03CA0116.outlook.office365.com (2603:10b6:400:4::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.407.7 via Frontend Transport; Mon, 15 Jan 2018 06:40:06 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; NXP1.onmicrosoft.com; dkim=none (message not signed) header.d=none;NXP1.onmicrosoft.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD030.mail.protection.outlook.com (10.58.52.168) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.345.12 via Frontend Transport; Mon, 15 Jan 2018 06:40:03 +0000 Received: from netperf2.ap.freescale.net ([10.232.133.164]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id w0F6drN8007259; Sun, 14 Jan 2018 23:40:01 -0700 From: Akhil Goyal To: CC: , Date: Mon, 15 Jan 2018 12:05:52 +0530 Message-ID: <20180115063553.12703-3-akhil.goyal@nxp.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20180115063553.12703-1-akhil.goyal@nxp.com> References: <20180111113304.19709-1-akhil.goyal@nxp.com> <20180115063553.12703-1-akhil.goyal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131604720054556228; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(396003)(39380400002)(39860400002)(346002)(376002)(2980300002)(1109001)(1110001)(339900001)(199004)(189003)(2906002)(81166006)(305945005)(8936002)(36756003)(105606002)(68736007)(50226002)(356003)(498600001)(51416003)(77096006)(8676002)(81156014)(4326008)(5660300001)(97736004)(48376002)(86362001)(53936002)(575784001)(59450400001)(76176011)(16586007)(6666003)(296002)(316002)(2950100002)(2351001)(1076002)(106466001)(104016004)(54906003)(5890100001)(47776003)(6916009)(50466002)(8656006)(85426001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR03MB2698; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD030; 1:zg307D0qo8L15zfaTxHOMwW20RH4RR0WhP8t2dk8VXY2L5xkZWVlMRGsVHpT2SW1rEV/1pfAbynBtGITtJN56XP+WzmrIZuOsFSqaKDDSWFXpmuBOnvUbAQDuGmape3k MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9a3ef24c-1c1f-487d-d644-08d55be2d014 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(5600026)(4604075)(2017052603307); SRVR:DM5PR03MB2698; X-Microsoft-Exchange-Diagnostics: 1; DM5PR03MB2698; 3:TCnG5Ap/D0Af4j90QIEXKUB6kWtoWxzeSSx0OAVdrZR1bO/t2qxKgNO8Vevzn5gC2cdDs3pSLpE7aVFScOW+VUIK3F5+J4M9DL+zVRo0r0A4i1CkQuG+3sW8T6fbLp2yemPIl/DE8h6k+nuGNuY7Lu0y0YfOE9zuszi1xR5/4cTnz6NZZ9AfIZ2Jt2J3leUNUEDfsQvLfRto/LK6c2TTW9csGz21zr7c5wd9Rs0sEp/LbwRoW2cKoi6+eU7uOLbFuwV/NN4AhNSMiKWlwK3P6Rc4hJvpHDyg3nX/BEH14xWbMygIBQq/1sRJHWrDmXNf8wVwD3SPlg2Lltaa3MNsIqdkEE6ajiOIH4R/++8zVYw=; 25:PIPQjQmo4qUxOI48Ukk0Ywbh+Li23ElICnUu605lEeKNiO/36ScHAsbZKYAxLWoa2YGwGwXkQuBgKbpYQ9cM8hjTBZxDzGZ7tUhMBfrplgDtbZbWNPafrHRPEJe4KAr3xKTSfFjI7RhVbKirNSwiUEIXR3lO/OcQ19kRtp0klv3eoK1bm5a/p+EINl5cr9rqeYDhgxpola9xUO0OOuV2G1L9Apavq/iLUo2N2KaQyn3G/RLEoWPh2ZDJEmRFWHsKwpiMvhoKs6AEkqSraVhmJeTJGoU1vT5LxdJexZpyHfPgnYix5svvwwh+yiadnhlR4GtmnO7S2XNAHC27w5RtEA== X-MS-TrafficTypeDiagnostic: DM5PR03MB2698: X-Microsoft-Exchange-Diagnostics: 1; DM5PR03MB2698; 31:mlUgBvSED+yMvAj3Wxll/4Zc4JWR+ETzhNeRTnwi1U2uz+sca38xKZhXS+NhH9XR6eiJGA9rS7yLBNeLzc4xKLDWWYSBR3zJ0oVorWrjLq26QJK6bzvntYKi7QJuKZHhSe+0LqsdDZF5/hTj6Yc0q/CtAKRjRPvxor3VplwLiFg8TdGCZU0WBUeXeXHoC3BT5XyAd6jqYaDOlkK3CEQ/37cIliXzawoF0/sgqUPGwFM=; 4:E9/cmvbvctB3HE8Sdz/iWAfWaZtGRci0m3mVIUqSTb0MHxPW0PwJnSXquHhWWK40AxJQLWZ5N+tUHQj/CdlvtjOozujp6n4xiRYM9puZbmgWdlNM27RRbiHYa9Miqa/2ha7y7MhHWAgFdVzMEIpuSGny6wHw1gDgGK/Z+fvorwJ1FlfIKO8g5iLTNyeWQKOl6Kugnu+vpUjJhMyg50cmMXmoR/LiD/8cFrbh4Lia80GrhAsteDspcUdiQI1GMfV6Wgoa4zeB/yjOtyMmqwhBsu5hsEJnP/2gRtAqh8qhPOVXcDxmP6Xz26MJFZYRSnkT X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(2401047)(5005006)(8121501046)(3231023)(944501161)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123556025)(20161123565025)(20161123563025)(20161123561025)(201703131430075)(201703131520075)(201703131433075)(201703131448075)(201703151042153)(20161123559100)(201708071742011); SRVR:DM5PR03MB2698; BCL:0; PCL:0; RULEID:(100000803101)(100110400095)(400006); SRVR:DM5PR03MB2698; X-Forefront-PRVS: 0553CBB77A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR03MB2698; 23:Vc05xHEkfLjZZ1LT1w5qkt3mbbRwS4qmB58ajua/q?= xwRj12o10s9RQcLoWwOEfv/Z7SARi56OPMQNPY0bY3fWfgG0MI3QjJ5CBQWO8wpmPvR5MXQzC5yiXJ2VWu13LaOA/8xZQcLJr4Y9ItzZ8DkOiWHaVxZp9FwPBkMPBU/sMfC1/zJNCLSOugAaeDZp3TNxm894hNvqs3u9Rzgy/SKSvvroONYZsZBKrTHc97tIcrj2rjpzv7WFGCwI31Xgq5rF4ITn0HS+PRexVkhLCrW4aY1vYKFHfdCS379WiVvwibeDteFKdxfDFnD6PqhmKmNHxgCoWbh4jM1e8Mr4gi+XwD/ynOs6SLTapNPdTm07v0m64LTTDbiwRm0oZwPCHL9H1FV6Ud9+V1dZgSqfoclk580nSq9cMEXKdSwHGbiFDatc131NMOsbvIZMcpnvMt+RynLHJYPOR+qkSpXeXtRVCYx5Q5PqXBsRjOyXXoiRtPGeJqByhnthcxMdAX67OL3VSPKpztKwj8oCRS/pflJkA+UgS9KA24dhMc5rr5R51UR95vGeKVKBrZmfssz70GC2yBgS6rq+FEzR2zroAladmou7O+dn6JKo3hCZqEWAvldlCNuWSO7AOsRXhAqJQ9chnS+kuyGCZekuA8LYKhHElYUeYsdnb1pMR/YzojHRoc8v/EOiJaq7lIO6BmgoyyRidBI7in3No50rw9BUB01wIa6DEXzzHMVjTJtDyJzsMyc+z0LZSaNcDdefVlSPots+uf4qj14HRhRs1CA+GVo7UVym6WOZ4rCuotlvvHd0c++j6/i4ckMYgIkDSjvHeqd7hj9aHRJgunn3/ZQQp8P3lgPJwS6lJTdCYzJEqvV5liVhxuK2BwWXWdMIZqw2vQsBW2WF3a+KwnUPeUzsUYHhr2UcJlD4cAWIn9nyc5IAux7er51FPS4jrW2BJ3Okz2uBGhNZkehFoc8rhIcX6149P2Lrt8MgOujKNYhAtsg3o1v6tNQhxuATMlCiT4jxmXMS8QOQ8UTyhqopksIsrSxnKGYGmYY3dkbmyqaBJmkK6zvIKomtJ8PBZOV8z4kd0LS/5DfO91MTZUcVVuLfxnOQwI69773qmTPi+Cq23HAO5KyKdqVKFD282bIbsMx48LRUZaTFq8wDMLECcT0We3tAJOnznL7NWriChW6gcHcKLY= X-Microsoft-Exchange-Diagnostics: 1; DM5PR03MB2698; 6:sQkHu+wePioJiJIh0ZPPXYvzpHUQvO8BaHYcvA+XzUKbzEjAUN6yDFV+nCdzF0o7u0dsjhiHNOZypO88KBwc72lEiLegrScKssvezy3mvr3Dg/mlvfhFGwDAafxjviN0y3vJ3CrpxRECv89mc50ZqcuvY7MpVchOvrZRy6L1o7yK8Ak6XHv6oEoUvj61PrxZkBu0vhdTtcUu+RmuFc5zz+eCJS+rWgcxKy/yNBpDSjxUDRILpieICfgqa8OVtV+SSU77Y6gp0q/fhUC4mktCG30rCs2Lib+TWmf6IGlHDJ3RVRsv7IncQhZXdclIuC7mwvKIuXxQxP08IhHf7WkR/DXBj4tUonBQVtIsz5NESGc=; 5:Y7/WHkBS+kAyzLfYU9GcvF6mgCt84GxSns+uqySm+XyRK4FcdXeZXoqzs3ARlWLVfPnEdzblnS7Mi5eTWe3E3v+gU6sICPGJCjZsxVx7ZhbfmcgkmBjwrQ9JESVSMGZXiJjQQqkGW3Cwa4oWLlQdn/P9o6S2Uc4ATvEU2GUzL0A=; 24:v86U7igePypWfjslCe0tTQBGAdlRilixEbMt321NHmfVtaZ8A8bmB3gPikLc8Wtbdz7GYXyXtFJabYAODHKf4q4+WRdGUKYvIbcp070lReQ=; 7:Ho1+X0NuNhyO1VrL7TEAVL/g+x/jPmNTnmdZvdzl33vHZjn6i/Zp8Sj4+ANcfMfMnSiTMdE0Qj1ssbHJleki6FGJNbJ9waOa7i0WY9FzCWPlvtikb5IQise74pE7d28p7js8r3B/ATt007e1qCzXOCEWHzOc42T/L48gEENLFCevwgtufpq4po8wCVEunkTudl0urQ3S+rIto80qmcZW/emL5MgKAQ+O3R0QqOfGDlKT2i/ehCzU1N4HQ2WZLfNx SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jan 2018 06:40:03.8956 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9a3ef24c-1c1f-487d-d644-08d55be2d014 X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR03MB2698 Subject: [dpdk-dev] [PATCH v3 2/3] crypto/dpaa_sec: support multiple sessions per qp X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Hemant Agrawal Signed-off-by: Hemant Agrawal Acked-by: Akhil Goyal --- drivers/crypto/dpaa_sec/dpaa_sec.c | 154 +++++++++++++++++++++++++------------ drivers/crypto/dpaa_sec/dpaa_sec.h | 74 +++++++++--------- 2 files changed, 145 insertions(+), 83 deletions(-) -- 2.9.3 diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index 157eace..f433f0a 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -43,6 +43,9 @@ static uint8_t cryptodev_driver_id; static __thread struct rte_crypto_op **dpaa_sec_ops; static __thread int dpaa_sec_op_nb; +static int +dpaa_sec_attach_sess_q(struct dpaa_sec_qp *qp, dpaa_sec_session *sess); + static inline void dpaa_sec_op_ending(struct dpaa_sec_op_ctx *ctx) { @@ -151,15 +154,6 @@ dpaa_sec_init_rx(struct qman_fq *fq_in, rte_iova_t hwdesc, /* Clear FQ options */ memset(&fq_opts, 0x00, sizeof(struct qm_mcc_initfq)); - flags = QMAN_FQ_FLAG_LOCKED | QMAN_FQ_FLAG_DYNAMIC_FQID | - QMAN_FQ_FLAG_TO_DCPORTAL; - - ret = qman_create_fq(0, flags, fq_in); - if (unlikely(ret != 0)) { - PMD_INIT_LOG(ERR, "qman_create_fq failed"); - return ret; - } - flags = QMAN_INITFQ_FLAG_SCHED; fq_opts.we_mask = QM_INITFQ_WE_DESTWQ | QM_INITFQ_WE_CONTEXTA | QM_INITFQ_WE_CONTEXTB; @@ -171,9 +165,11 @@ dpaa_sec_init_rx(struct qman_fq *fq_in, rte_iova_t hwdesc, fq_in->cb.ern = ern_sec_fq_handler; + PMD_INIT_LOG(DEBUG, "in-%x out-%x", fq_in->fqid, fqid_out); + ret = qman_init_fq(fq_in, flags, &fq_opts); if (unlikely(ret != 0)) - PMD_INIT_LOG(ERR, "qman_init_fq failed"); + PMD_INIT_LOG(ERR, "qman_init_fq failed %d", ret); return ret; } @@ -357,7 +353,7 @@ dpaa_sec_prep_cdb(dpaa_sec_session *ses) { struct alginfo alginfo_c = {0}, alginfo_a = {0}, alginfo = {0}; uint32_t shared_desc_len = 0; - struct sec_cdb *cdb = &ses->qp->cdb; + struct sec_cdb *cdb = &ses->cdb; int err; #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN int swap = false; @@ -877,12 +873,10 @@ dpaa_sec_enqueue_op(struct rte_crypto_op *op, struct dpaa_sec_qp *qp) ses = (dpaa_sec_session *)get_session_private_data(op->sym->session, cryptodev_driver_id); - if (unlikely(!qp->ses || qp->ses != ses)) { - qp->ses = ses; - ses->qp = qp; - ret = dpaa_sec_prep_cdb(ses); - if (ret) - return ret; + if (unlikely(!ses->qp || ses->qp != qp)) { + PMD_INIT_LOG(DEBUG, "sess->qp - %p qp %p", ses->qp, qp); + if (dpaa_sec_attach_sess_q(qp, ses)) + return -1; } /* @@ -918,7 +912,7 @@ dpaa_sec_enqueue_op(struct rte_crypto_op *op, struct dpaa_sec_qp *qp) if (auth_only_len) fd.cmd = 0x80000000 | auth_only_len; do { - ret = qman_enqueue(&qp->inq, &fd, 0); + ret = qman_enqueue(ses->inq, &fd, 0); } while (ret != 0); return 0; @@ -1134,43 +1128,82 @@ dpaa_sec_aead_init(struct rte_cryptodev *dev __rte_unused, return 0; } -static int -dpaa_sec_qp_attach_sess(struct rte_cryptodev *dev, uint16_t qp_id, void *ses) +static struct qman_fq * +dpaa_sec_attach_rxq(struct dpaa_sec_dev_private *qi) { - dpaa_sec_session *sess = ses; - struct dpaa_sec_qp *qp; + unsigned int i; - PMD_INIT_FUNC_TRACE(); + for (i = 0; i < qi->max_nb_sessions; i++) { + if (qi->inq_attach[i] == 0) { + qi->inq_attach[i] = 1; + return &qi->inq[i]; + } + } + PMD_DRV_LOG(ERR, "All ses session in use %x", qi->max_nb_sessions); + + return NULL; +} - qp = dev->data->queue_pairs[qp_id]; - if (qp->ses != NULL) { - PMD_INIT_LOG(ERR, "qp in-use by another session\n"); - return -EBUSY; +static int +dpaa_sec_detach_rxq(struct dpaa_sec_dev_private *qi, struct qman_fq *fq) +{ + unsigned int i; + + for (i = 0; i < qi->max_nb_sessions; i++) { + if (&qi->inq[i] == fq) { + qi->inq_attach[i] = 0; + return 0; + } } + return -1; +} + +static int +dpaa_sec_attach_sess_q(struct dpaa_sec_qp *qp, dpaa_sec_session *sess) +{ + int ret; - qp->ses = sess; sess->qp = qp; + ret = dpaa_sec_prep_cdb(sess); + if (ret) { + PMD_DRV_LOG(ERR, "Unable to prepare sec cdb"); + return -1; + } - return dpaa_sec_prep_cdb(sess); + ret = dpaa_sec_init_rx(sess->inq, dpaa_mem_vtop(&sess->cdb), + qman_fq_fqid(&qp->outq)); + if (ret) + PMD_DRV_LOG(ERR, "Unable to init sec queue"); + + return ret; +} + +static int +dpaa_sec_qp_attach_sess(struct rte_cryptodev *dev __rte_unused, + uint16_t qp_id __rte_unused, + void *ses __rte_unused) +{ + PMD_INIT_FUNC_TRACE(); + return 0; } static int -dpaa_sec_qp_detach_sess(struct rte_cryptodev *dev, uint16_t qp_id, void *ses) +dpaa_sec_qp_detach_sess(struct rte_cryptodev *dev, + uint16_t qp_id __rte_unused, + void *ses) { dpaa_sec_session *sess = ses; - struct dpaa_sec_qp *qp; + struct dpaa_sec_dev_private *qi = dev->data->dev_private; PMD_INIT_FUNC_TRACE(); - qp = dev->data->queue_pairs[qp_id]; - if (qp->ses != NULL) { - qp->ses = NULL; - sess->qp = NULL; - return 0; - } + if (sess->inq) + dpaa_sec_detach_rxq(qi, sess->inq); + sess->inq = NULL; - PMD_DRV_LOG(ERR, "No session attached to qp"); - return -EINVAL; + sess->qp = NULL; + + return 0; } static int @@ -1233,8 +1266,20 @@ dpaa_sec_set_session_parameters(struct rte_cryptodev *dev, return -EINVAL; } session->ctx_pool = internals->ctx_pool; + session->inq = dpaa_sec_attach_rxq(internals); + if (session->inq == NULL) { + PMD_DRV_LOG(ERR, "unable to attach sec queue"); + goto err1; + } return 0; + +err1: + rte_free(session->cipher_key.data); + rte_free(session->auth_key.data); + memset(session, 0, sizeof(dpaa_sec_session)); + + return -EINVAL; } static int @@ -1267,6 +1312,7 @@ dpaa_sec_session_configure(struct rte_cryptodev *dev, set_session_private_data(sess, dev->driver_id, sess_private_data); + return 0; } @@ -1275,16 +1321,22 @@ static void dpaa_sec_session_clear(struct rte_cryptodev *dev, struct rte_cryptodev_sym_session *sess) { - PMD_INIT_FUNC_TRACE(); + struct dpaa_sec_dev_private *qi = dev->data->dev_private; uint8_t index = dev->driver_id; void *sess_priv = get_session_private_data(sess, index); + + PMD_INIT_FUNC_TRACE(); + dpaa_sec_session *s = (dpaa_sec_session *)sess_priv; if (sess_priv) { + struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); + + if (s->inq) + dpaa_sec_detach_rxq(qi, s->inq); rte_free(s->cipher_key.data); rte_free(s->auth_key.data); memset(s, 0, sizeof(dpaa_sec_session)); - struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); set_session_private_data(sess, index, NULL); rte_mempool_put(sess_mp, sess_priv); } @@ -1332,7 +1384,8 @@ dpaa_sec_dev_infos_get(struct rte_cryptodev *dev, info->capabilities = dpaa_sec_capabilities; info->sym.max_nb_sessions = internals->max_nb_sessions; info->sym.max_nb_sessions_per_qp = - RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS / RTE_MAX_NB_SEC_QPS; + RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS / + RTE_DPAA_MAX_NB_SEC_QPS; info->driver_id = cryptodev_driver_id; } } @@ -1377,7 +1430,7 @@ dpaa_sec_dev_init(struct rte_cryptodev *cryptodev) { struct dpaa_sec_dev_private *internals; struct dpaa_sec_qp *qp; - uint32_t i; + uint32_t i, flags; int ret; char str[20]; @@ -1393,7 +1446,7 @@ dpaa_sec_dev_init(struct rte_cryptodev *cryptodev) RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING; internals = cryptodev->data->dev_private; - internals->max_nb_queue_pairs = RTE_MAX_NB_SEC_QPS; + internals->max_nb_queue_pairs = RTE_DPAA_MAX_NB_SEC_QPS; internals->max_nb_sessions = RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS; for (i = 0; i < internals->max_nb_queue_pairs; i++) { @@ -1404,10 +1457,15 @@ dpaa_sec_dev_init(struct rte_cryptodev *cryptodev) PMD_INIT_LOG(ERR, "config tx of queue pair %d", i); goto init_error; } - ret = dpaa_sec_init_rx(&qp->inq, dpaa_mem_vtop(&qp->cdb), - qman_fq_fqid(&qp->outq)); - if (ret) { - PMD_INIT_LOG(ERR, "config rx of queue pair %d", i); + } + + flags = QMAN_FQ_FLAG_LOCKED | QMAN_FQ_FLAG_DYNAMIC_FQID | + QMAN_FQ_FLAG_TO_DCPORTAL; + for (i = 0; i < internals->max_nb_sessions; i++) { + /* create rx qman fq for sessions*/ + ret = qman_create_fq(0, flags, &internals->inq[i]); + if (unlikely(ret != 0)) { + PMD_INIT_LOG(ERR, "sec qman_create_fq failed"); goto init_error; } } diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.h b/drivers/crypto/dpaa_sec/dpaa_sec.h index e82f4fb..93369e4 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.h +++ b/drivers/crypto/dpaa_sec/dpaa_sec.h @@ -38,36 +38,6 @@ enum dpaa_sec_op_type { DPAA_SEC_MAX }; -typedef struct dpaa_sec_session_entry { - uint8_t dir; /*!< Operation Direction */ - enum rte_crypto_cipher_algorithm cipher_alg; /*!< Cipher Algorithm*/ - enum rte_crypto_auth_algorithm auth_alg; /*!< Authentication Algorithm*/ - enum rte_crypto_aead_algorithm aead_alg; /*!< Authentication Algorithm*/ - union { - struct { - uint8_t *data; /**< pointer to key data */ - size_t length; /**< key length in bytes */ - } aead_key; - struct { - struct { - uint8_t *data; /**< pointer to key data */ - size_t length; /**< key length in bytes */ - } cipher_key; - struct { - uint8_t *data; /**< pointer to key data */ - size_t length; /**< key length in bytes */ - } auth_key; - }; - }; - struct { - uint16_t length; - uint16_t offset; - } iv; /**< Initialisation vector parameters */ - uint16_t auth_only_len; /*!< Length of data for Auth only */ - uint32_t digest_length; - struct dpaa_sec_qp *qp; - struct rte_mempool *ctx_pool; /* session mempool for dpaa_sec_op_ctx */ -} dpaa_sec_session; #define DPAA_SEC_MAX_DESC_SIZE 64 /* code or cmd block to caam */ @@ -117,11 +87,41 @@ struct sec_cdb { uint32_t sh_desc[DPAA_SEC_MAX_DESC_SIZE]; }; +typedef struct dpaa_sec_session_entry { + uint8_t dir; /*!< Operation Direction */ + enum rte_crypto_cipher_algorithm cipher_alg; /*!< Cipher Algorithm*/ + enum rte_crypto_auth_algorithm auth_alg; /*!< Authentication Algorithm*/ + enum rte_crypto_aead_algorithm aead_alg; /*!< Authentication Algorithm*/ + union { + struct { + uint8_t *data; /**< pointer to key data */ + size_t length; /**< key length in bytes */ + } aead_key; + struct { + struct { + uint8_t *data; /**< pointer to key data */ + size_t length; /**< key length in bytes */ + } cipher_key; + struct { + uint8_t *data; /**< pointer to key data */ + size_t length; /**< key length in bytes */ + } auth_key; + }; + }; + struct { + uint16_t length; + uint16_t offset; + } iv; /**< Initialisation vector parameters */ + uint16_t auth_only_len; /*!< Length of data for Auth only */ + uint32_t digest_length; + struct dpaa_sec_qp *qp; + struct qman_fq *inq; + struct sec_cdb cdb; /**< cmd block associated with qp */ + struct rte_mempool *ctx_pool; /* session mempool for dpaa_sec_op_ctx */ +} dpaa_sec_session; + struct dpaa_sec_qp { struct dpaa_sec_dev_private *internals; - struct sec_cdb cdb; /* cmd block associated with qp */ - dpaa_sec_session *ses; /* session associated with qp */ - struct qman_fq inq; struct qman_fq outq; int rx_pkts; int rx_errs; @@ -129,12 +129,16 @@ struct dpaa_sec_qp { int tx_errs; }; -#define RTE_MAX_NB_SEC_QPS RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS +#define RTE_DPAA_MAX_NB_SEC_QPS 1 +#define RTE_DPAA_MAX_RX_QUEUE RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS + /* internal sec queue interface */ struct dpaa_sec_dev_private { void *sec_hw; struct rte_mempool *ctx_pool; /* per dev mempool for dpaa_sec_op_ctx */ - struct dpaa_sec_qp qps[RTE_MAX_NB_SEC_QPS]; /* i/o queue for sec */ + struct dpaa_sec_qp qps[RTE_DPAA_MAX_NB_SEC_QPS]; /* i/o queue for sec */ + struct qman_fq inq[RTE_DPAA_MAX_RX_QUEUE]; + unsigned char inq_attach[RTE_DPAA_MAX_RX_QUEUE]; unsigned int max_nb_queue_pairs; unsigned int max_nb_sessions; };