From patchwork Fri Sep 21 13:24:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Ostruszka X-Patchwork-Id: 45104 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A95924CA6; Fri, 21 Sep 2018 15:25:00 +0200 (CEST) Received: from mail-lj1-f195.google.com (mail-lj1-f195.google.com [209.85.208.195]) by dpdk.org (Postfix) with ESMTP id 50FA24C96 for ; Fri, 21 Sep 2018 15:24:58 +0200 (CEST) Received: by mail-lj1-f195.google.com with SMTP id l15-v6so11636000lji.6 for ; Fri, 21 Sep 2018 06:24:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0IdQv9gF0c7CQbnJiOukcu5LfXJpigAZY/APRZFTTb0=; b=TqMe14xKjeR0qzdtQdrJMmM8EYe5uYvY1eUgaJHRB0QQoeXQKXmgWdoAOlhz22OwYm PN1Mrb3yN1GZUYNEig1xk2XHydkMR13bTVsPnwA9/LCVH1VtN1pRLlMdjx43D5fK2rWg 8QQRjVgloamwk5SQiExa7XJYJ5XDLkg97jCfiC0NL3dAW7Swu2PpqiDiWjfQH4NCjmx/ dCVL3t9FvIooXGFe4qsb8Dl94GZu1dvGJUcB0oF08bBOtroGrFtFp/kL8J7yxPf7NlT5 OCDCOThAyMAIh8V1nQNIeRdmzatc+GUHQ41CSpZCjiZBjfpQ0/Hy6+E2nczFs1ppjGM0 nq2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0IdQv9gF0c7CQbnJiOukcu5LfXJpigAZY/APRZFTTb0=; b=YGnjwc/N18vtA7DvlvKakBZtC9WAiueIbu0dPWaHwMLK8JZ1sw9wojak+s+vEUBmQb IoFkNhDQK6CXrgDqyXG+3GhBtSUCCom38vLzAlEERqjSY9F3RMbUxcpYT3Q9Lo2E6S6E b2ppF1CUefOc8x5oWvPpgMQKhquf7eTGOWmxinltWZ+igFfgxDKdRlq8njwRrYtQ7Pd8 XUFw52gVHjm9fL7DM3f8sq97KR4qtpJUjTo3IEtA+5O5ZnHmzL7Ls9q6hMBHTRFf9fjz vYHsh7+7XnNG7pq83ebmpZTRxKdFVq02fUpkspUPH1yJdQSYmGsq1iJvd28HADhT/8zV RdgA== X-Gm-Message-State: ABuFfog5EvqASKo58bwy9EW2i2DtktNnTZj/T0Dl+lo4ZvmHWG+p0yaj IyMANQwcdg9Jt9+BwQKiU+CxUaLKijU= X-Google-Smtp-Source: ACcGV62HOtnniMSGPeSU+ubBFuUMnIVbVHeWAA1AQ4R/hWHGNtwy8YV7BfzBU5J1yXwfu888IPFgDw== X-Received: by 2002:a2e:8188:: with SMTP id e8-v6mr1846628ljg.138.1537536297607; Fri, 21 Sep 2018 06:24:57 -0700 (PDT) Received: from amok.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.googlemail.com with ESMTPSA id v14-v6sm4868767lji.80.2018.09.21.06.24.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 21 Sep 2018 06:24:56 -0700 (PDT) From: Andrzej Ostruszka To: dev@dpdk.org Cc: mw@semihalf.com, nadavh@marvell.com, Zyta Szpak , Natalie Samsonov Date: Fri, 21 Sep 2018 15:24:52 +0200 Message-Id: <1537536294-16703-2-git-send-email-amo@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1537536294-16703-1-git-send-email-amo@semihalf.com> References: <1535372574-18950-1-git-send-email-tdu@semihalf.com> <1537536294-16703-1-git-send-email-amo@semihalf.com> Subject: [dpdk-dev] [PATCH v2 1/3] crypto/mvsam: add S/G support to crypto dirver 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: Zyta Szpak The patch adds support for chained source mbufs given to crypto operations. The crypto engine accepts source buffer containing a number of segments. The destination buffer stays the same - always one segment. On decryption, EIP engine will look for digest at 'auth_icv_offset' offset in SRC buffer.It must be placed in the last segment and the offset must be set to reach digest in the last segment. If application doesn't placed digest in source mbuf, driver try to copy it to a last segment. Signed-off-by: Zyta Szpak Signed-off-by: Natalie Samsonov Reviewed-by: Dmitri Epshtein --- drivers/crypto/mvsam/rte_mrvl_pmd.c | 96 +++++++++++++++++++++-------- drivers/crypto/mvsam/rte_mrvl_pmd_private.h | 7 +++ 2 files changed, 76 insertions(+), 27 deletions(-) diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd.c b/drivers/crypto/mvsam/rte_mrvl_pmd.c index 73eff75..977e478 100644 --- a/drivers/crypto/mvsam/rte_mrvl_pmd.c +++ b/drivers/crypto/mvsam/rte_mrvl_pmd.c @@ -437,8 +437,10 @@ mrvl_request_prepare(struct sam_cio_op_params *request, struct rte_crypto_op *op) { struct mrvl_crypto_session *sess; - struct rte_mbuf *dst_mbuf; + struct rte_mbuf *src_mbuf, *dst_mbuf; + uint16_t segments_nb; uint8_t *digest; + int i; if (unlikely(op->sess_type == RTE_CRYPTO_OP_SESSIONLESS)) { MRVL_CRYPTO_LOG_ERR("MRVL CRYPTO PMD only supports session " @@ -454,29 +456,47 @@ mrvl_request_prepare(struct sam_cio_op_params *request, return -EINVAL; } - /* + request->sa = sess->sam_sess; + request->cookie = op; + + src_mbuf = op->sym->m_src; + segments_nb = src_mbuf->nb_segs; + /* The following conditions must be met: + * - Destination buffer is required when segmented source buffer + * - Segmented destination buffer is not supported + */ + if ((segments_nb > 1) && (!op->sym->m_dst)) { + MRVL_CRYPTO_LOG_ERR("op->sym->m_dst = NULL!\n"); + return -1; + } + /* For non SG case: * If application delivered us null dst buffer, it means it expects * us to deliver the result in src buffer. */ dst_mbuf = op->sym->m_dst ? op->sym->m_dst : op->sym->m_src; - request->sa = sess->sam_sess; - request->cookie = op; - - /* Single buffers only, sorry. */ - request->num_bufs = 1; - request->src = src_bd; - src_bd->vaddr = rte_pktmbuf_mtod(op->sym->m_src, void *); - src_bd->paddr = rte_pktmbuf_iova(op->sym->m_src); - src_bd->len = rte_pktmbuf_data_len(op->sym->m_src); - - /* Empty source. */ - if (rte_pktmbuf_data_len(op->sym->m_src) == 0) { - /* EIP does not support 0 length buffers. */ - MRVL_CRYPTO_LOG_ERR("Buffer length == 0 not supported!"); + if (!rte_pktmbuf_is_contiguous(dst_mbuf)) { + MRVL_CRYPTO_LOG_ERR("Segmented destination buffer " + "not supported.\n"); return -1; } + request->num_bufs = segments_nb; + for (i = 0; i < segments_nb; i++) { + /* Empty source. */ + if (rte_pktmbuf_data_len(src_mbuf) == 0) { + /* EIP does not support 0 length buffers. */ + MRVL_CRYPTO_LOG_ERR("Buffer length == 0 not supported!"); + return -1; + } + src_bd[i].vaddr = rte_pktmbuf_mtod(src_mbuf, void *); + src_bd[i].paddr = rte_pktmbuf_iova(src_mbuf); + src_bd[i].len = rte_pktmbuf_data_len(src_mbuf); + + src_mbuf = src_mbuf->next; + } + request->src = src_bd; + /* Empty destination. */ if (rte_pktmbuf_data_len(dst_mbuf) == 0) { /* Make dst buffer fit at least source data. */ @@ -527,7 +547,7 @@ mrvl_request_prepare(struct sam_cio_op_params *request, /* * EIP supports only scenarios where ICV(digest buffer) is placed at - * auth_icv_offset. Any other placement means risking errors. + * auth_icv_offset. */ if (sess->sam_sess_params.dir == SAM_DIR_ENCRYPT) { /* @@ -536,17 +556,36 @@ mrvl_request_prepare(struct sam_cio_op_params *request, */ if (rte_pktmbuf_mtod_offset( dst_mbuf, uint8_t *, - request->auth_icv_offset) == digest) { + request->auth_icv_offset) == digest) return 0; - } } else {/* sess->sam_sess_params.dir == SAM_DIR_DECRYPT */ /* * EIP will look for digest at auth_icv_offset - * offset in SRC buffer. + * offset in SRC buffer. It must be placed in the last + * segment and the offset must be set to reach digest + * in the last segment */ - if (rte_pktmbuf_mtod_offset( - op->sym->m_src, uint8_t *, - request->auth_icv_offset) == digest) { + struct rte_mbuf *last_seg = op->sym->m_src; + uint32_t d_offset = request->auth_icv_offset; + u32 d_size = sess->sam_sess_params.u.basic.auth_icv_len; + unsigned char *d_ptr; + + /* Find the last segment and the offset for the last segment */ + while ((last_seg->next != NULL) && + (d_offset >= last_seg->data_len)) { + d_offset -= last_seg->data_len; + last_seg = last_seg->next; + } + + if (rte_pktmbuf_mtod_offset(last_seg, uint8_t *, + d_offset) == digest) + return 0; + + /* copy digest to last segment */ + if (last_seg->buf_len >= (d_size + d_offset)) { + d_ptr = (unsigned char *)last_seg->buf_addr + + d_offset; + rte_memcpy(d_ptr, digest, d_size); return 0; } } @@ -582,11 +621,10 @@ mrvl_crypto_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops, int ret; struct sam_cio_op_params requests[nb_ops]; /* - * DPDK uses single fragment buffers, so we can KISS descriptors. * SAM does not store bd pointers, so on-stack scope will be enough. */ - struct sam_buf_info src_bd[nb_ops]; - struct sam_buf_info dst_bd[nb_ops]; + struct mrvl_crypto_src_table src_bd[nb_ops]; + struct sam_buf_info dst_bd[nb_ops]; struct mrvl_crypto_qp *qp = (struct mrvl_crypto_qp *)queue_pair; if (nb_ops == 0) @@ -594,11 +632,14 @@ mrvl_crypto_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops, /* Prepare the burst. */ memset(&requests, 0, sizeof(requests)); + memset(&src_bd, 0, sizeof(src_bd)); /* Iterate through */ for (; iter_ops < nb_ops; ++iter_ops) { + /* store the op id for debug */ + src_bd[iter_ops].iter_ops = iter_ops; if (mrvl_request_prepare(&requests[iter_ops], - &src_bd[iter_ops], + src_bd[iter_ops].src_bd, &dst_bd[iter_ops], ops[iter_ops]) < 0) { MRVL_CRYPTO_LOG_ERR( @@ -752,6 +793,7 @@ cryptodev_mrvl_crypto_create(const char *name, sam_params.max_num_sessions = internals->max_nb_sessions; + /* sam_set_debug_flags(3); */ return sam_init(&sam_params); init_error: diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd_private.h b/drivers/crypto/mvsam/rte_mrvl_pmd_private.h index c16d95b..0689fc3 100644 --- a/drivers/crypto/mvsam/rte_mrvl_pmd_private.h +++ b/drivers/crypto/mvsam/rte_mrvl_pmd_private.h @@ -38,6 +38,8 @@ */ #define BITS2BYTES(x) ((x) >> 3) +#define MRVL_MAX_SEGMENTS 16 + /** The operation order mode enumerator. */ enum mrvl_crypto_chain_order { MRVL_CRYPTO_CHAIN_CIPHER_ONLY, @@ -84,6 +86,11 @@ struct mrvl_crypto_session { uint16_t cipher_iv_offset; } __rte_cache_aligned; +struct mrvl_crypto_src_table { + uint16_t iter_ops; + struct sam_buf_info src_bd[MRVL_MAX_SEGMENTS]; +} __rte_cache_aligned; + /** Set and validate MRVL crypto session parameters */ extern int mrvl_crypto_set_session_parameters(struct mrvl_crypto_session *sess, From patchwork Fri Sep 21 13:24:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Ostruszka X-Patchwork-Id: 45105 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E55284F98; Fri, 21 Sep 2018 15:25:02 +0200 (CEST) Received: from mail-lf1-f65.google.com (mail-lf1-f65.google.com [209.85.167.65]) by dpdk.org (Postfix) with ESMTP id 7ED434CA1 for ; Fri, 21 Sep 2018 15:24:59 +0200 (CEST) Received: by mail-lf1-f65.google.com with SMTP id b12-v6so4124350lfa.4 for ; Fri, 21 Sep 2018 06:24:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iHNzJsEN1DmesPWsBU2inuRAfsBFcC3KdKHwdA/01Fw=; b=nzVFblrP4WlTF5O9OIxl3cc7Y1y+rR0KgQ0hRZ35XVisQx/1a5YR2FlqNT8CdHlECp u+x+/yd0AENlRsF0D6qgMNl/qUivEQNFH9WeMflCx1w4xZZYCuHlQSZvrbIU6B7ooOp0 PWICkyeQeQ5HpcROqb4SDQa51penxzeG9d79dOO05Ip3rxPcA3s1S9Db0d2lMDcZlMr2 1X4Breh3TTsKQEx4f0nI0pntrd7BOOP94Ow0azMvNEHEYW1wJLDwLtcAkml8wYm+PUZ1 uxKEElUU9LJWIH/5G7gqc5ll8WLNgLvvYgT7WoFqHWKRU/JMxuTramhNj13bykpiFvmq Up8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=iHNzJsEN1DmesPWsBU2inuRAfsBFcC3KdKHwdA/01Fw=; b=JicOf/NJpfUfLMz6RXmF1KR49wU1ziymqRncbl4QQbTuckywrQ1VM0LBX9HOC0bLRX CLHKKBBUraqkyQK9BTn2SS15/reJ5L7SMKIl8YukHFnd4OhEsQIe2j6wGKd2ugbrIysh QaDrpiNfB3yEEPpOjul6FsLNS0imN6o+Sn9mkXvF0HQEkTpOG0pEaP33l+qgUBZ/96Gq D/Es2zXPS+BpK3lpPoU0cnytE/wLrc+oyAkGeHlsawX9Cv3Osa98AwApszRYO20PxIPR k6ruAm0wTqARgeraCMlWx2NnXud6hQANLZUPhKg5vOAVhbm3xbXo+/eW0TFEPbB6fXUi XyLA== X-Gm-Message-State: APzg51ArWMUTDvmDM1tnS0jcZjFOVGnT6P8l1oj5Xv0XFUfbmeg1Kuky lC+GRzZSvrGX5GHXJzfOTQmU8GKwbiw= X-Google-Smtp-Source: ANB0VdZTrPUvxI4OaXjCuFW3Uvbgm10i3IMi4HwvbfAw1oRMXDvtFWCoSj6OoQvN3NzEnk6MeCiPww== X-Received: by 2002:a19:4c41:: with SMTP id z62-v6mr3732289lfa.127.1537536298809; Fri, 21 Sep 2018 06:24:58 -0700 (PDT) Received: from amok.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.googlemail.com with ESMTPSA id v14-v6sm4868767lji.80.2018.09.21.06.24.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 21 Sep 2018 06:24:57 -0700 (PDT) From: Andrzej Ostruszka To: dev@dpdk.org Cc: mw@semihalf.com, nadavh@marvell.com, Dmitri Epshtein , Tomasz Duszynski Date: Fri, 21 Sep 2018 15:24:53 +0200 Message-Id: <1537536294-16703-3-git-send-email-amo@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1537536294-16703-1-git-send-email-amo@semihalf.com> References: <1535372574-18950-1-git-send-email-tdu@semihalf.com> <1537536294-16703-1-git-send-email-amo@semihalf.com> Subject: [dpdk-dev] [PATCH v2 2/3] crypto/mvsam: use common initialization 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: Dmitri Epshtein Use common initialization to reduce boilerplate code. Signed-off-by: Dmitri Epshtein Signed-off-by: Tomasz Duszynski Reviewed-by: Natalie Samsonov --- drivers/common/Makefile | 4 +++- drivers/crypto/mvsam/Makefile | 3 ++- drivers/crypto/mvsam/meson.build | 2 +- drivers/crypto/mvsam/rte_mrvl_pmd.c | 31 ++++++++++++++----------------- mk/rte.app.mk | 4 +++- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/drivers/common/Makefile b/drivers/common/Makefile index 5f72da0..0859601 100644 --- a/drivers/common/Makefile +++ b/drivers/common/Makefile @@ -8,7 +8,9 @@ ifeq ($(CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF)$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOO DIRS-y += octeontx endif -ifeq ($(CONFIG_RTE_LIBRTE_MVPP2_PMD),y) +MVEP-y += $(CONFIG_RTE_LIBRTE_MVPP2_PMD) +MVEP-y += $(CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO) +ifneq (,$(findstring y,$(MVEP-y))) DIRS-y += mvep endif diff --git a/drivers/crypto/mvsam/Makefile b/drivers/crypto/mvsam/Makefile index c3dc72c..9850fda 100644 --- a/drivers/crypto/mvsam/Makefile +++ b/drivers/crypto/mvsam/Makefile @@ -19,6 +19,7 @@ LIB = librte_pmd_mvsam_crypto.a # build flags CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) +CFLAGS += -I$(RTE_SDK)/drivers/common/mvep CFLAGS += -I$(LIBMUSDK_PATH)/include CFLAGS += -DMVCONF_TYPES_PUBLIC CFLAGS += -DMVCONF_DMA_PHYS_ADDR_T_PUBLIC @@ -33,7 +34,7 @@ EXPORT_MAP := rte_pmd_mvsam_version.map LDLIBS += -L$(LIBMUSDK_PATH)/lib -lmusdk LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool LDLIBS += -lrte_cryptodev -LDLIBS += -lrte_bus_vdev +LDLIBS += -lrte_bus_vdev -lrte_common_mvep # library source files SRCS-$(CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO) += rte_mrvl_pmd.c diff --git a/drivers/crypto/mvsam/meson.build b/drivers/crypto/mvsam/meson.build index 3c8ea3c..f1c8796 100644 --- a/drivers/crypto/mvsam/meson.build +++ b/drivers/crypto/mvsam/meson.build @@ -18,4 +18,4 @@ endif sources = files('rte_mrvl_pmd.c', 'rte_mrvl_pmd_ops.c') -deps += ['bus_vdev'] +deps += ['bus_vdev', 'common_mvep'] diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd.c b/drivers/crypto/mvsam/rte_mrvl_pmd.c index 977e478..35dd659 100644 --- a/drivers/crypto/mvsam/rte_mrvl_pmd.c +++ b/drivers/crypto/mvsam/rte_mrvl_pmd.c @@ -11,11 +11,11 @@ #include #include #include +#include +#include #include "rte_mrvl_pmd_private.h" -#define MRVL_MUSDK_DMA_MEMSIZE 41943040 - #define MRVL_PMD_MAX_NB_SESS_ARG ("max_nb_sessions") #define MRVL_PMD_DEFAULT_MAX_NB_SESSIONS 2048 @@ -752,7 +752,7 @@ cryptodev_mrvl_crypto_create(const char *name, struct rte_cryptodev *dev; struct mrvl_crypto_private *internals; struct sam_init_params sam_params; - int ret; + int ret = -EINVAL; dev = rte_cryptodev_pmd_create(name, &vdev->device, &init_params->common); @@ -778,30 +778,26 @@ cryptodev_mrvl_crypto_create(const char *name, internals->max_nb_qpairs = init_params->common.max_nb_queue_pairs; internals->max_nb_sessions = init_params->max_nb_sessions; - /* - * ret == -EEXIST is correct, it means DMA - * has been already initialized. - */ - ret = mv_sys_dma_mem_init(MRVL_MUSDK_DMA_MEMSIZE); - if (ret < 0) { - if (ret != -EEXIST) - return ret; - - MRVL_CRYPTO_LOG_INFO( - "DMA memory has been already initialized by a different driver."); - } + ret = rte_mvep_init(MVEP_MOD_T_SAM, NULL); + if (ret) + goto init_error; sam_params.max_num_sessions = internals->max_nb_sessions; /* sam_set_debug_flags(3); */ - return sam_init(&sam_params); + + ret = sam_init(&sam_params); + if (ret) + goto init_error; + + return 0; init_error: MRVL_CRYPTO_LOG_ERR( "driver %s: %s failed", init_params->common.name, __func__); cryptodev_mrvl_crypto_uninit(vdev); - return -EFAULT; + return ret; } /** Parse integer from integer argument */ @@ -951,6 +947,7 @@ cryptodev_mrvl_crypto_uninit(struct rte_vdev_device *vdev) name, rte_socket_id()); sam_deinit(); + rte_mvep_deinit(MVEP_MOD_T_SAM); cryptodev = rte_cryptodev_pmd_get_named_dev(name); if (cryptodev == NULL) diff --git a/mk/rte.app.mk b/mk/rte.app.mk index 899d51a..4278ebb 100644 --- a/mk/rte.app.mk +++ b/mk/rte.app.mk @@ -98,7 +98,9 @@ ifeq ($(CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF)$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOO _LDLIBS-y += -lrte_common_octeontx endif -ifeq ($(CONFIG_RTE_LIBRTE_MVPP2_PMD),y) +MVEP-y += $(CONFIG_RTE_LIBRTE_MVPP2_PMD) +MVEP-y += $(CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO) +ifneq (,$(findstring y,$(MVEP-y))) _LDLIBS-y += -lrte_common_mvep -L$(LIBMUSDK_PATH)/lib -lmusdk endif From patchwork Fri Sep 21 13:24:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Ostruszka X-Patchwork-Id: 45106 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CA380532C; Fri, 21 Sep 2018 15:25:04 +0200 (CEST) Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) by dpdk.org (Postfix) with ESMTP id 28D4F4CC3 for ; Fri, 21 Sep 2018 15:25:01 +0200 (CEST) Received: by mail-lf1-f46.google.com with SMTP id g24-v6so11428728lfb.11 for ; Fri, 21 Sep 2018 06:25:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6FCrI51fp2KRdC+ZHqf1JIjssn0cwJRZlYySkUQ785s=; b=ulkUO3QwxuBLUVxNbq8CIaoMj2+J+Vckn4J8j6Vdxv2i9+QNa8LmCQxcifhjTVUIV3 ec9H51T5xvlTC5sDuN+tOnob87rY0Aj17DZJ6PCyVic2CMOr+EH14ZKU4Fs65fQ1zczN IBnvlN+fI2VcEx3spNsUXH3iXR94ipRk4/2FjghFB9fdirFS0Od4j8tZQGa9OBFV5uE7 TrPZZa3+m7AWqiwm9ASyYWGfJO+4dkNMyq8jifYJrm/sHv4vi9TTRVAnMWkdSnZnNuUR oU37NUI9xSG1IFl3x2hJRA5A+vG2lh+Qbew+TvsX8K5OrCpoUFN0k0SQCqGgGc1bEHTN hGFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6FCrI51fp2KRdC+ZHqf1JIjssn0cwJRZlYySkUQ785s=; b=bx+9jAh9K9B0x9DqfNoegUCSe2uK1cyy0cp9aDOZHVVYvEqYbQfs9aST1FpqR9evXS Vb0bGr+sYTJRnd+v2E5aNwW1yvW4/eX6NpylnvgGpoaKurItxnzsiq9qIF9+IHzejOuL iQjbA81eJmhJ9LngH33g2YuY1KhLlt8kgMLwgUaiEVWLON3WKuErK4I1Mn35OE7uvaiF cuaP3lsTqBp7LSP/VCNlBzsYVP1bALPpFuT51HsxzlKaaVqVHkcaQ0cdzOBsFi3lD3T+ o/ovsv+oGTuQaC7r2eFdFYnXBgAZ17kidvSduwUsoDmTjrbL07OrornmSWjCvMPAmdhj oH9A== X-Gm-Message-State: APzg51C59hXQneHTYSLRibKQtlkuitDoVTH7GXcYJzmceYzm5N1CyM7z Sdsngre2vcPZIlICdshXQpYsAMU0534= X-Google-Smtp-Source: ANB0VdaMB6i3NB0G3LeF3ccQBGEZcxL7vcbMUDVG5MRhb8iHl1qhcFs4s7OTlV//WNZBoewa4wQWKw== X-Received: by 2002:a19:1853:: with SMTP id o80-v6mr17337808lfi.10.1537536300368; Fri, 21 Sep 2018 06:25:00 -0700 (PDT) Received: from amok.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.googlemail.com with ESMTPSA id v14-v6sm4868767lji.80.2018.09.21.06.24.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 21 Sep 2018 06:24:59 -0700 (PDT) From: Andrzej Ostruszka To: dev@dpdk.org Cc: mw@semihalf.com, nadavh@marvell.com, Tomasz Duszynski Date: Fri, 21 Sep 2018 15:24:54 +0200 Message-Id: <1537536294-16703-4-git-send-email-amo@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1537536294-16703-1-git-send-email-amo@semihalf.com> References: <1535372574-18950-1-git-send-email-tdu@semihalf.com> <1537536294-16703-1-git-send-email-amo@semihalf.com> Subject: [dpdk-dev] [PATCH v2 3/3] crypto/mvsam: add dynamic logging support 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: Tomasz Duszynski Add dynamic logging support to mvsam crypto PMD. Signed-off-by: Tomasz Duszynski --- config/common_base | 1 - drivers/crypto/mvsam/rte_mrvl_pmd.c | 74 ++++++++++++++--------------- drivers/crypto/mvsam/rte_mrvl_pmd_ops.c | 10 ++-- drivers/crypto/mvsam/rte_mrvl_pmd_private.h | 27 +++-------- 4 files changed, 49 insertions(+), 63 deletions(-) diff --git a/config/common_base b/config/common_base index 155c7d4..61c7f6d 100644 --- a/config/common_base +++ b/config/common_base @@ -559,7 +559,6 @@ CONFIG_RTE_LIBRTE_PMD_CCP=n # Compile PMD for Marvell Crypto device # CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO=n -CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO_DEBUG=n # # Compile generic security library diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd.c b/drivers/crypto/mvsam/rte_mrvl_pmd.c index 35dd659..2afdd3b 100644 --- a/drivers/crypto/mvsam/rte_mrvl_pmd.c +++ b/drivers/crypto/mvsam/rte_mrvl_pmd.c @@ -210,7 +210,7 @@ mrvl_crypto_set_cipher_session_parameters(struct mrvl_crypto_session *sess, { /* Make sure we've got proper struct */ if (cipher_xform->type != RTE_CRYPTO_SYM_XFORM_CIPHER) { - MRVL_CRYPTO_LOG_ERR("Wrong xform struct provided!"); + MRVL_LOG(ERR, "Wrong xform struct provided!"); return -EINVAL; } @@ -218,7 +218,7 @@ mrvl_crypto_set_cipher_session_parameters(struct mrvl_crypto_session *sess, if ((cipher_xform->cipher.algo > RTE_DIM(cipher_map)) || (cipher_map[cipher_xform->cipher.algo].supported != ALGO_SUPPORTED)) { - MRVL_CRYPTO_LOG_ERR("Cipher algorithm not supported!"); + MRVL_LOG(ERR, "Cipher algorithm not supported!"); return -EINVAL; } @@ -238,7 +238,7 @@ mrvl_crypto_set_cipher_session_parameters(struct mrvl_crypto_session *sess, /* Get max key length. */ if (cipher_xform->cipher.key.length > cipher_map[cipher_xform->cipher.algo].max_key_len) { - MRVL_CRYPTO_LOG_ERR("Wrong key length!"); + MRVL_LOG(ERR, "Wrong key length!"); return -EINVAL; } @@ -261,14 +261,14 @@ mrvl_crypto_set_auth_session_parameters(struct mrvl_crypto_session *sess, { /* Make sure we've got proper struct */ if (auth_xform->type != RTE_CRYPTO_SYM_XFORM_AUTH) { - MRVL_CRYPTO_LOG_ERR("Wrong xform struct provided!"); + MRVL_LOG(ERR, "Wrong xform struct provided!"); return -EINVAL; } /* See if map data is present and valid */ if ((auth_xform->auth.algo > RTE_DIM(auth_map)) || (auth_map[auth_xform->auth.algo].supported != ALGO_SUPPORTED)) { - MRVL_CRYPTO_LOG_ERR("Auth algorithm not supported!"); + MRVL_LOG(ERR, "Auth algorithm not supported!"); return -EINVAL; } @@ -300,7 +300,7 @@ mrvl_crypto_set_aead_session_parameters(struct mrvl_crypto_session *sess, { /* Make sure we've got proper struct */ if (aead_xform->type != RTE_CRYPTO_SYM_XFORM_AEAD) { - MRVL_CRYPTO_LOG_ERR("Wrong xform struct provided!"); + MRVL_LOG(ERR, "Wrong xform struct provided!"); return -EINVAL; } @@ -308,7 +308,7 @@ mrvl_crypto_set_aead_session_parameters(struct mrvl_crypto_session *sess, if ((aead_xform->aead.algo > RTE_DIM(aead_map)) || (aead_map[aead_xform->aead.algo].supported != ALGO_SUPPORTED)) { - MRVL_CRYPTO_LOG_ERR("AEAD algorithm not supported!"); + MRVL_LOG(ERR, "AEAD algorithm not supported!"); return -EINVAL; } @@ -326,7 +326,7 @@ mrvl_crypto_set_aead_session_parameters(struct mrvl_crypto_session *sess, /* Get max key length. */ if (aead_xform->aead.key.length > aead_map[aead_xform->aead.algo].max_key_len) { - MRVL_CRYPTO_LOG_ERR("Wrong key length!"); + MRVL_LOG(ERR, "Wrong key length!"); return -EINVAL; } @@ -391,21 +391,21 @@ mrvl_crypto_set_session_parameters(struct mrvl_crypto_session *sess, if ((cipher_xform != NULL) && (mrvl_crypto_set_cipher_session_parameters( sess, cipher_xform) < 0)) { - MRVL_CRYPTO_LOG_ERR("Invalid/unsupported cipher parameters"); + MRVL_LOG(ERR, "Invalid/unsupported cipher parameters!"); return -EINVAL; } if ((auth_xform != NULL) && (mrvl_crypto_set_auth_session_parameters( sess, auth_xform) < 0)) { - MRVL_CRYPTO_LOG_ERR("Invalid/unsupported auth parameters"); + MRVL_LOG(ERR, "Invalid/unsupported auth parameters!"); return -EINVAL; } if ((aead_xform != NULL) && (mrvl_crypto_set_aead_session_parameters( sess, aead_xform) < 0)) { - MRVL_CRYPTO_LOG_ERR("Invalid/unsupported aead parameters"); + MRVL_LOG(ERR, "Invalid/unsupported aead parameters!"); return -EINVAL; } @@ -443,8 +443,8 @@ mrvl_request_prepare(struct sam_cio_op_params *request, int i; if (unlikely(op->sess_type == RTE_CRYPTO_OP_SESSIONLESS)) { - MRVL_CRYPTO_LOG_ERR("MRVL CRYPTO PMD only supports session " - "oriented requests, op (%p) is sessionless.", + MRVL_LOG(ERR, "MRVL CRYPTO PMD only supports session " + "oriented requests, op (%p) is sessionless!", op); return -EINVAL; } @@ -452,7 +452,7 @@ mrvl_request_prepare(struct sam_cio_op_params *request, sess = (struct mrvl_crypto_session *)get_sym_session_private_data( op->sym->session, cryptodev_driver_id); if (unlikely(sess == NULL)) { - MRVL_CRYPTO_LOG_ERR("Session was not created for this device"); + MRVL_LOG(ERR, "Session was not created for this device!"); return -EINVAL; } @@ -466,7 +466,7 @@ mrvl_request_prepare(struct sam_cio_op_params *request, * - Segmented destination buffer is not supported */ if ((segments_nb > 1) && (!op->sym->m_dst)) { - MRVL_CRYPTO_LOG_ERR("op->sym->m_dst = NULL!\n"); + MRVL_LOG(ERR, "op->sym->m_dst = NULL!"); return -1; } /* For non SG case: @@ -476,8 +476,7 @@ mrvl_request_prepare(struct sam_cio_op_params *request, dst_mbuf = op->sym->m_dst ? op->sym->m_dst : op->sym->m_src; if (!rte_pktmbuf_is_contiguous(dst_mbuf)) { - MRVL_CRYPTO_LOG_ERR("Segmented destination buffer " - "not supported.\n"); + MRVL_LOG(ERR, "Segmented destination buffer not supported!"); return -1; } @@ -486,7 +485,7 @@ mrvl_request_prepare(struct sam_cio_op_params *request, /* Empty source. */ if (rte_pktmbuf_data_len(src_mbuf) == 0) { /* EIP does not support 0 length buffers. */ - MRVL_CRYPTO_LOG_ERR("Buffer length == 0 not supported!"); + MRVL_LOG(ERR, "Buffer length == 0 not supported!"); return -1; } src_bd[i].vaddr = rte_pktmbuf_mtod(src_mbuf, void *); @@ -502,7 +501,7 @@ mrvl_request_prepare(struct sam_cio_op_params *request, /* Make dst buffer fit at least source data. */ if (rte_pktmbuf_append(dst_mbuf, rte_pktmbuf_data_len(op->sym->m_src)) == NULL) { - MRVL_CRYPTO_LOG_ERR("Unable to set big enough dst buffer!"); + MRVL_LOG(ERR, "Unable to set big enough dst buffer!"); return -1; } } @@ -642,8 +641,7 @@ mrvl_crypto_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops, src_bd[iter_ops].src_bd, &dst_bd[iter_ops], ops[iter_ops]) < 0) { - MRVL_CRYPTO_LOG_ERR( - "Error while parameters preparation!"); + MRVL_LOG(ERR, "Error while preparing parameters!"); qp->stats.enqueue_err_count++; ops[iter_ops]->status = RTE_CRYPTO_OP_STATUS_ERROR; @@ -721,12 +719,12 @@ mrvl_crypto_pmd_dequeue_burst(void *queue_pair, ops[i]->status = RTE_CRYPTO_OP_STATUS_SUCCESS; break; case SAM_CIO_ERR_ICV: - MRVL_CRYPTO_LOG_DBG("CIO returned SAM_CIO_ERR_ICV."); + MRVL_LOG(DEBUG, "CIO returned SAM_CIO_ERR_ICV."); ops[i]->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED; break; default: - MRVL_CRYPTO_LOG_DBG( - "CIO returned Error: %d", results[i].status); + MRVL_LOG(DEBUG, + "CIO returned Error: %d.", results[i].status); ops[i]->status = RTE_CRYPTO_OP_STATUS_ERROR; break; } @@ -757,7 +755,7 @@ cryptodev_mrvl_crypto_create(const char *name, dev = rte_cryptodev_pmd_create(name, &vdev->device, &init_params->common); if (dev == NULL) { - MRVL_CRYPTO_LOG_ERR("failed to create cryptodev vdev"); + MRVL_LOG(ERR, "Failed to create cryptodev vdev!"); goto init_error; } @@ -793,8 +791,8 @@ cryptodev_mrvl_crypto_create(const char *name, return 0; init_error: - MRVL_CRYPTO_LOG_ERR( - "driver %s: %s failed", init_params->common.name, __func__); + MRVL_LOG(ERR, + "Driver %s: %s failed!", init_params->common.name, __func__); cryptodev_mrvl_crypto_uninit(vdev); return ret; @@ -809,7 +807,7 @@ parse_integer_arg(const char *key __rte_unused, *i = atoi(value); if (*i < 0) { - MRVL_CRYPTO_LOG_ERR("Argument has to be positive.\n"); + MRVL_LOG(ERR, "Argument has to be positive!"); return -EINVAL; } @@ -824,9 +822,8 @@ parse_name_arg(const char *key __rte_unused, struct rte_cryptodev_pmd_init_params *params = extra_args; if (strlen(value) >= RTE_CRYPTODEV_NAME_MAX_LEN - 1) { - MRVL_CRYPTO_LOG_ERR("Invalid name %s, should be less than " - "%u bytes.\n", value, - RTE_CRYPTODEV_NAME_MAX_LEN - 1); + MRVL_LOG(ERR, "Invalid name %s, should be less than %u bytes!", + value, RTE_CRYPTODEV_NAME_MAX_LEN - 1); return -EINVAL; } @@ -918,9 +915,8 @@ cryptodev_mrvl_crypto_init(struct rte_vdev_device *vdev) ret = mrvl_pmd_parse_input_args(&init_params, args); if (ret) { - RTE_LOG(ERR, PMD, - "Failed to parse initialisation arguments[%s]\n", - args); + MRVL_LOG(ERR, "Failed to parse initialisation arguments[%s]!", + args); return -EINVAL; } @@ -942,9 +938,8 @@ cryptodev_mrvl_crypto_uninit(struct rte_vdev_device *vdev) if (name == NULL) return -EINVAL; - RTE_LOG(INFO, PMD, - "Closing Marvell crypto device %s on numa socket %u\n", - name, rte_socket_id()); + MRVL_LOG(INFO, "Closing Marvell crypto device %s on numa socket %u.", + name, rte_socket_id()); sam_deinit(); rte_mvep_deinit(MVEP_MOD_T_SAM); @@ -974,3 +969,8 @@ RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_MRVL_PMD, "socket_id="); RTE_PMD_REGISTER_CRYPTO_DRIVER(mrvl_crypto_drv, cryptodev_mrvl_pmd_drv.driver, cryptodev_driver_id); + +RTE_INIT(crypto_mrvl_init_log) +{ + mrvl_logtype_driver = rte_log_register("pmd.crypto.mvsam"); +} diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd_ops.c b/drivers/crypto/mvsam/rte_mrvl_pmd_ops.c index c045562..ba6eef3 100644 --- a/drivers/crypto/mvsam/rte_mrvl_pmd_ops.c +++ b/drivers/crypto/mvsam/rte_mrvl_pmd_ops.c @@ -551,7 +551,7 @@ mrvl_crypto_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id, */ int num = sam_get_num_inst(); if (num == 0) { - MRVL_CRYPTO_LOG_ERR("No crypto engines detected.\n"); + MRVL_LOG(ERR, "No crypto engines detected!"); return -1; } @@ -635,7 +635,7 @@ mrvl_crypto_pmd_sym_session_configure(__rte_unused struct rte_cryptodev *dev, int ret; if (sess == NULL) { - MRVL_CRYPTO_LOG_ERR("Invalid session struct."); + MRVL_LOG(ERR, "Invalid session struct!"); return -EINVAL; } @@ -646,7 +646,7 @@ mrvl_crypto_pmd_sym_session_configure(__rte_unused struct rte_cryptodev *dev, ret = mrvl_crypto_set_session_parameters(sess_private_data, xform); if (ret != 0) { - MRVL_CRYPTO_LOG_ERR("Failed to configure session parameters."); + MRVL_LOG(ERR, "Failed to configure session parameters!"); /* Return session to mempool */ rte_mempool_put(mp, sess_private_data); @@ -658,7 +658,7 @@ mrvl_crypto_pmd_sym_session_configure(__rte_unused struct rte_cryptodev *dev, mrvl_sess = (struct mrvl_crypto_session *)sess_private_data; if (sam_session_create(&mrvl_sess->sam_sess_params, &mrvl_sess->sam_sess) < 0) { - MRVL_CRYPTO_LOG_DBG("Failed to create session!"); + MRVL_LOG(DEBUG, "Failed to create session!"); return -EIO; } @@ -686,7 +686,7 @@ mrvl_crypto_pmd_sym_session_clear(struct rte_cryptodev *dev, if (mrvl_sess->sam_sess && sam_session_destroy(mrvl_sess->sam_sess) < 0) { - MRVL_CRYPTO_LOG_INFO("Error while destroying session!"); + MRVL_LOG(ERR, "Error while destroying session!"); } memset(sess, 0, sizeof(struct mrvl_crypto_session)); diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd_private.h b/drivers/crypto/mvsam/rte_mrvl_pmd_private.h index 0689fc3..6f8cf56 100644 --- a/drivers/crypto/mvsam/rte_mrvl_pmd_private.h +++ b/drivers/crypto/mvsam/rte_mrvl_pmd_private.h @@ -12,26 +12,13 @@ #define CRYPTODEV_NAME_MRVL_PMD crypto_mvsam /**< Marvell PMD device name */ -#define MRVL_CRYPTO_LOG_ERR(fmt, args...) \ - RTE_LOG(ERR, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \ - RTE_STR(CRYPTODEV_NAME_MRVL_PMD), \ - __func__, __LINE__, ## args) - -#ifdef RTE_LIBRTE_PMD_MRVL_CRYPTO_DEBUG -#define MRVL_CRYPTO_LOG_INFO(fmt, args...) \ - RTE_LOG(INFO, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \ - RTE_STR(CRYPTODEV_NAME_MRVL_PMD), \ - __func__, __LINE__, ## args) - -#define MRVL_CRYPTO_LOG_DBG(fmt, args...) \ - RTE_LOG(DEBUG, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \ - RTE_STR(CRYPTODEV_NAME_MRVL_PMD), \ - __func__, __LINE__, ## args) - -#else -#define MRVL_CRYPTO_LOG_INFO(fmt, args...) -#define MRVL_CRYPTO_LOG_DBG(fmt, args...) -#endif +/** MRVL PMD LOGTYPE DRIVER */ +int mrvl_logtype_driver; + +#define MRVL_LOG(level, fmt, ...) \ + rte_log(RTE_LOG_ ## level, mrvl_logtype_driver, \ + "%s() line %u: " fmt "\n", __func__, __LINE__, \ + ## __VA_ARGS__) /** * Handy bits->bytes conversion macro.