From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id C833E1D7 for ; Tue, 30 Oct 2018 15:48:55 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Oct 2018 07:48:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,444,1534834800"; d="scan'208";a="86323383" Received: from silpixa00398673.ir.intel.com (HELO silpixa00398673.ger.corp.intel.com) ([10.237.223.54]) by orsmga008.jf.intel.com with ESMTP; 30 Oct 2018 07:48:53 -0700 From: Fan Zhang To: dev@dpdk.org Cc: maxime.coquelin@redhat.com Date: Tue, 30 Oct 2018 14:48:52 +0000 Message-Id: <20181030144852.43339-1-roy.fan.zhang@intel.com> X-Mailer: git-send-email 2.13.6 Subject: [dpdk-dev] [PATCH] examples/vhost_crypto: fix zero copy 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: , X-List-Received-Date: Tue, 30 Oct 2018 14:48:56 -0000 This patch fixes the zero copy enable problem for vhost crypto sample application. For some Crypto PMDs such as AESNI-MB and AESNI-GCM the data to be processed will be made a copy in the same buffer but next to the data. For example, to encrypt 64 bytes data the PMD will copy this data from offset 64 to offset 123. This requires the application provides the buffer with at least double of the data size. However there is no way for VMs to know this limitation. When zero-copy is enabled in Vhost the PMD may overwrite the buffer next to the VM data to be processed, and further cause problems such as Segmentation Fault or even worse, crashes the VM. To fix the problem the user should avoid enabling the zero copy for these Crypto PMDs. This patch adds the checking of the PMD names to see if zero copy can be applied. Fixes: 709521f4c2cd ("examples/vhost_crypto: support multi-core") Signed-off-by: Fan Zhang --- examples/vhost_crypto/main.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/examples/vhost_crypto/main.c b/examples/vhost_crypto/main.c index cbb5e49d2..887e3eb6f 100644 --- a/examples/vhost_crypto/main.c +++ b/examples/vhost_crypto/main.c @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -442,8 +443,13 @@ free_resource(void) struct lcore_option *lo = &options.los[i]; struct vhost_crypto_info *info = options.infos[i]; - rte_mempool_free(info->cop_pool); - rte_mempool_free(info->sess_pool); + if (!info) + continue; + + if (info->cop_pool) + rte_mempool_free(info->cop_pool); + if (info->sess_pool) + rte_mempool_free(info->sess_pool); for (j = 0; j < lo->nb_sockets; j++) { rte_vhost_driver_unregister(lo->socket_files[i]); @@ -493,6 +499,19 @@ main(int argc, char *argv[]) info->nb_vids = lo->nb_sockets; rte_cryptodev_info_get(info->cid, &dev_info); + if (options.zero_copy == RTE_VHOST_CRYPTO_ZERO_COPY_ENABLE) { +#define VHOST_CRYPTO_CDEV_NAME_AESNI_MB_PMD crypto_aesni_mb +#define VHOST_CRYPTO_CDEV_NAME_AESNI_GCM_PMD crypto_aesni_gcm + if (strstr(dev_info.driver_name, + RTE_STR(VHOST_CRYPTO_CDEV_NAME_AESNI_MB_PMD)) || + strstr(dev_info.driver_name, + RTE_STR(VHOST_CRYPTO_CDEV_NAME_AESNI_GCM_PMD))) + RTE_LOG(ERR, USER1, "Cannot enable Zero Copy to %s\n", + dev_info.driver_name); + ret = -EPERM; + goto error_exit; + } + if (dev_info.max_nb_queue_pairs < info->qid + 1) { RTE_LOG(ERR, USER1, "Number of queues cannot over %u", dev_info.max_nb_queue_pairs); -- 2.13.6