[dpdk-dev] [PATCH v5 0/5] add initial version of compress-perf

2018-12-05 Thread Tomasz Jozwiak
This patchset adds initial version of compression performance
test.

v5 changes:
  - Fixed documentation
  - Added op's status checking after rte_compressdev_dequeue_burst
  - code cleanup

  Note: The 19.02 release notes will be updated once the file has been created

v4 changes:
  - fixed checkpatch issues
  - code cleanup

v3 changes:
  - Added dynamic compression
  - Code refactoring to separate validation
from benchmarking part
  - Updated documentation
  - Added fail detection from rte_compressdev_enqueue_burst
and rte_compressdev_dequeue_burst functions
  - Code cleanup

v2 changes:

  -  Added release note
  -  Added new cleanup flow into main function
  -  Blocked dynamic compression test because it hasn't been
 tested enough
  -  Changed `--max-num-sgl-segs' default value to 16
  -  Updated documentation


Tomasz Jozwiak (5):
  app/compress-perf: add parser
  app/compress-perf: add performance measurement
  doc/guides/tools: add doc files
  app/compress-perf: add dynamic compression test
  app/compress-perf: code refactoring

 MAINTAINERS   |   5 +
 app/Makefile  |   4 +
 app/meson.build   |   1 +
 app/test-compress-perf/Makefile   |  18 +
 app/test-compress-perf/comp_perf_options.h|  71 +++
 app/test-compress-perf/comp_perf_options_parse.c  | 596 ++
 app/test-compress-perf/comp_perf_test_benchmark.c | 308 +++
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 353 +
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 590 +
 app/test-compress-perf/meson.build|   9 +
 config/common_base|   5 +
 doc/guides/rel_notes/release_18_11.rst|   4 +
 doc/guides/tools/comp_perf.rst|  81 +++
 doc/guides/tools/index.rst|   1 +
 16 files changed, 2072 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build
 create mode 100644 doc/guides/tools/comp_perf.rst

-- 
2.7.4



[dpdk-dev] [PATCH v5 3/5] doc/guides/tools: add doc files

2018-12-05 Thread Tomasz Jozwiak
Added:
 -  initial version of compression performance test
description file.
 -  release note in release_18_11.rst

Updated index.rst file

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 MAINTAINERS|  5 +++
 doc/guides/rel_notes/release_18_11.rst |  5 +++
 doc/guides/tools/comp_perf.rst | 81 ++
 doc/guides/tools/index.rst |  1 +
 4 files changed, 92 insertions(+)
 create mode 100644 doc/guides/tools/comp_perf.rst

diff --git a/MAINTAINERS b/MAINTAINERS
index 71ba312..dd0c131 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1242,6 +1242,11 @@ M: Bernard Iremonger 
 F: app/test-pmd/
 F: doc/guides/testpmd_app_ug/
 
+Compression performance test application
+M: De Lara Guarch, Pablo 
+F: app/test-compress-perf/
+F: doc/guides/tools/comp_perf.rst
+
 Crypto performance test application
 M: Declan Doherty 
 F: app/test-crypto-perf/
diff --git a/doc/guides/rel_notes/release_18_11.rst 
b/doc/guides/rel_notes/release_18_11.rst
index 65bab55..e6652a5 100644
--- a/doc/guides/rel_notes/release_18_11.rst
+++ b/doc/guides/rel_notes/release_18_11.rst
@@ -352,6 +352,11 @@ New Features
   additional command-line parameter values from the ``DPDK_TEST_PARAMS``
   environment variable to make this application easier to use.
 
+* **Added a compression performance test tool.**
+
+   Added a new performance test tool to test the compressdev PMD. The tool 
tests
+   compression ratio and compression throughput. Dynamic compression test is 
not
+   supported yet.
 
 API Changes
 ---
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
new file mode 100644
index 000..d343408
--- /dev/null
+++ b/doc/guides/tools/comp_perf.rst
@@ -0,0 +1,81 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+Copyright(c) 2018 Intel Corporation.
+
+dpdk-test-compress-perf Tool
+
+
+The ``dpdk-test-compress-perf`` tool is a Data Plane Development Kit (DPDK)
+utility that allows measuring performance parameters of PMDs available in the
+compress tree. The tool reads the data from a file (--input-file),
+dumps all the file into a buffer and fills out the data of input mbufs,
+which are passed to compress device with compression operations.
+Then, the output buffers are fed into the decompression stage, and the 
resulting
+data is compared against the original data (verification phase). After that,
+a number of iterations are performed, compressing first and decompressing 
later,
+to check the throughput rate
+(showing cycles/iteration, cycles/Byte and Gbps, for compression and 
decompression).
+
+.. Note::
+
+   if the max-num-sgl-segs x seg_sz > input size then segments number in
+   the chain will be lower than value passed into max-num-sgl-segs.
+
+
+Limitations
+~~~
+
+* Stateful operation and dynamic compression are not supported in this version.
+
+
+Command line options
+
+
+ ``--driver-name NAME``: compress driver to use
+
+ ``--input-file NAME``: file to compress and decompress
+
+ ``--extended-input-sz N``: extend file data up to this size (default: no 
extension)
+
+ ``--seg-sz N``: size of segment to store the data (default: 2048)
+
+ ``--burst-sz N``: compress operation burst size
+
+ ``--pool-sz N``: mempool size for compress operations/mbufs (default: 8192)
+
+ ``--max-num-sgl-segs N``: maximum number of segments for each mbuf (default: 
16)
+
+ ``--num-iter N``: number of times the file will be compressed/decompressed 
(default: 1)
+
+ ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
+
+ ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+
+ ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
+
+ ``--window-sz N``: base two log value of compression window size (default: 
max supported by PMD)
+
+ ``-h``: prints this help
+
+
+Compiling the Tool
+--
+
+**Step 1: PMD setting**
+
+The ``dpdk-test-compress-perf`` tool depends on compression device drivers PMD 
which
+can be disabled by default in the build configuration file ``common_base``.
+The compression device drivers PMD which should be tested can be enabled by 
setting e.g.::
+
+   CONFIG_RTE_LIBRTE_PMD_ISAL=y
+
+
+Running the Tool
+
+
+The tool has a number of command line options. Here is the sample command line:
+
+.. code-block:: console
+
+   ./build/app/dpdk-test-compress-perf  -l 4 -- --driver-name compress_qat 
--input-file test.txt --seg-sz 8192
+--compress-level 1:1:9 --num-iter 10 --extended-input-sz 1048576  
--max-num-sgl-segs 16 --huffman-enc fixed
+
diff --git a/doc/guides/tools/index.rst b/doc/guides/tools/index.rst
index a6e2c4c..24235ba 100644
--- a/doc/guides/tools/index.rst
+++ b/doc/guides/tools/index.rst
@@ -42,3 +42,4 @@ DPDK Tools User Guides
 testbb

[dpdk-dev] [PATCH v5 1/5] app/compress-perf: add parser

2018-12-05 Thread Tomasz Jozwiak
Added parser part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/Makefile |   4 +
 app/meson.build  |   1 +
 app/test-compress-perf/Makefile  |  16 +
 app/test-compress-perf/comp_perf_options.h   |  59 +++
 app/test-compress-perf/comp_perf_options_parse.c | 592 +++
 app/test-compress-perf/main.c|  52 ++
 app/test-compress-perf/meson.build   |   7 +
 config/common_base   |   5 +
 8 files changed, 736 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build

diff --git a/app/Makefile b/app/Makefile
index 069fa98..d6641ef 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -11,6 +11,10 @@ ifeq ($(CONFIG_RTE_LIBRTE_BBDEV),y)
 DIRS-$(CONFIG_RTE_TEST_BBDEV) += test-bbdev
 endif
 
+ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV),y)
+DIRS-$(CONFIG_RTE_APP_COMPRESS_PERF) += test-compress-perf
+endif
+
 ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
 DIRS-$(CONFIG_RTE_APP_CRYPTO_PERF) += test-crypto-perf
 endif
diff --git a/app/meson.build b/app/meson.build
index a9a026b..47a2a86 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -4,6 +4,7 @@
 apps = ['pdump',
'proc-info',
'test-bbdev',
+   'test-compress-perf',
'test-crypto-perf',
'test-eventdev',
'test-pmd']
diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
new file mode 100644
index 000..8aa7a22
--- /dev/null
+++ b/app/test-compress-perf/Makefile
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Intel Corporation
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+APP = dpdk-test-compress-perf
+
+CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -O3
+
+# all source are stored in SRCS-y
+SRCS-y := main.c
+SRCS-y += comp_perf_options_parse.c
+
+include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
new file mode 100644
index 000..7516ea0
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#define MAX_DRIVER_NAME64
+#define MAX_INPUT_FILE_NAME64
+#define MAX_LIST   32
+
+enum comp_operation {
+   COMPRESS_ONLY,
+   DECOMPRESS_ONLY,
+   COMPRESS_DECOMPRESS
+};
+
+struct range_list {
+   uint8_t min;
+   uint8_t max;
+   uint8_t inc;
+   uint8_t count;
+   uint8_t list[MAX_LIST];
+};
+
+struct comp_test_data {
+   char driver_name[64];
+   char input_file[64];
+   struct rte_mbuf **comp_bufs;
+   struct rte_mbuf **decomp_bufs;
+   uint32_t total_bufs;
+   uint8_t *input_data;
+   size_t input_data_sz;
+   uint8_t *compressed_data;
+   uint8_t *decompressed_data;
+   struct rte_mempool *comp_buf_pool;
+   struct rte_mempool *decomp_buf_pool;
+   struct rte_mempool *op_pool;
+   int8_t cdev_id;
+   uint16_t seg_sz;
+   uint16_t burst_sz;
+   uint32_t pool_sz;
+   uint32_t num_iter;
+   uint16_t max_sgl_segs;
+   enum rte_comp_huffman huffman_enc;
+   enum comp_operation test_op;
+   int window_sz;
+   struct range_list level;
+   /* Store TSC duration for all levels (including level 0) */
+   uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+};
+
+int
+comp_perf_options_parse(struct comp_test_data *test_data, int argc,
+   char **argv);
+
+void
+comp_perf_options_default(struct comp_test_data *test_data);
+
+int
+comp_perf_options_check(struct comp_test_data *test_data);
diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
new file mode 100644
index 000..7f1a7ff
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -0,0 +1,592 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include "comp_perf_options.h"
+
+#define CPERF_DRIVER_NAME  ("driver-name")
+#define CPERF_TEST_FILE("input-file")
+#define CPERF_SEG_SIZE ("seg-sz")
+#define CPERF_BURST_SIZE   ("burst-sz")
+#define CPERF_EXTENDED_SIZE("extended-input-sz")
+#define CPERF_POOL_SIZE("pool-sz")
+

[dpdk-dev] [PATCH v5 2/5] app/compress-perf: add performance measurement

2018-12-05 Thread Tomasz Jozwiak
Added performance measurement part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c |   2 +-
 app/test-compress-perf/main.c| 888 ++-
 2 files changed, 884 insertions(+), 6 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index 7f1a7ff..add5c8a 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -565,7 +565,7 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->seg_sz = 2048;
test_data->burst_sz = 32;
test_data->pool_sz = 8192;
-   test_data->max_sgl_segs = UINT16_MAX;
+   test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
test_data->test_op = COMPRESS_DECOMPRESS;
diff --git a/app/test-compress-perf/main.c b/app/test-compress-perf/main.c
index f52b98d..4b183a8 100644
--- a/app/test-compress-perf/main.c
+++ b/app/test-compress-perf/main.c
@@ -5,14 +5,730 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include "comp_perf_options.h"
 
+#define NUM_MAX_XFORMS 16
+#define NUM_MAX_INFLIGHT_OPS 512
+#define EXPANSE_RATIO 1.05
+#define MIN_COMPRESSED_BUF_SIZE 8
+
+#define DIV_CEIL(a, b)  ((a) / (b) + ((a) % (b) != 0))
+
+/* Cleanup state machine */
+static enum cleanup_st {
+   ST_CLEAR = 0,
+   ST_TEST_DATA,
+   ST_COMPDEV,
+   ST_INPUT_DATA,
+   ST_MEMORY_ALLOC,
+   ST_PREPARE_BUF,
+   ST_DURING_TEST
+} cleanup = ST_CLEAR;
+
+static int
+param_range_check(uint16_t size, const struct rte_param_log2_range *range)
+{
+   unsigned int next_size;
+
+   /* Check lower/upper bounds */
+   if (size < range->min)
+   return -1;
+
+   if (size > range->max)
+   return -1;
+
+   /* If range is actually only one value, size is correct */
+   if (range->increment == 0)
+   return 0;
+
+   /* Check if value is one of the supported sizes */
+   for (next_size = range->min; next_size <= range->max;
+   next_size += range->increment)
+   if (size == next_size)
+   return 0;
+
+   return -1;
+}
+
+static int
+comp_perf_check_capabilities(struct comp_test_data *test_data)
+{
+   const struct rte_compressdev_capabilities *cap;
+
+   cap = rte_compressdev_capability_get(test_data->cdev_id,
+RTE_COMP_ALGO_DEFLATE);
+
+   if (cap == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support DEFLATE\n");
+   return -1;
+   }
+
+   uint64_t comp_flags = cap->comp_feature_flags;
+
+   /* Huffman enconding */
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_FIXED &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Fixed Huffman\n");
+   return -1;
+   }
+
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_DYNAMIC &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Dynamic Huffman\n");
+   return -1;
+   }
+
+   /* Window size */
+   if (test_data->window_sz != -1) {
+   if (param_range_check(test_data->window_sz, &cap->window_size)
+   < 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support "
+   "this window size\n");
+   return -1;
+   }
+   } else
+   /* Set window size to PMD maximum if none was specified */
+   test_data->window_sz = cap->window_size.max;
+
+   /* Check if chained mbufs is supported */
+   if (test_data->max_sgl_segs > 1  &&
+   (comp_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0) {
+   RTE_LOG(INFO, USER1, "Compress device does not support "
+   "chained mbufs. Max SGL segments set to 1\n");
+   test_data->max_sgl_segs = 1;
+   }
+
+   /* Level 0 support */
+   if (test_data->level.min == 0 &&
+   (comp_flags & RTE_COMP_FF_NONCOMPRESSED_BLOCKS) == 0) {
+   RTE_LOG(ERR, USER1, "Compress device does not support "
+   "level 0 (no compress

[dpdk-dev] [PATCH v5 4/5] app/compress-perf: add dynamic compression test

2018-12-05 Thread Tomasz Jozwiak
Added dynamic compression feature into compression perf. test.

Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c | 10 +++---
 doc/guides/rel_notes/release_18_11.rst   |  3 +--
 doc/guides/tools/comp_perf.rst   |  4 ++--
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index add5c8a..66eb81f 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -50,8 +50,8 @@ usage(char *progname)
"   compressed/decompressed (default: 1)\n"
" --operation [comp/decomp/comp_and_decomp]: perform test on\n"
"   compression, decompression or both operations\n"
-   " --huffman-enc [fixed/default]: Huffman encoding\n"
-   "   (default: fixed)\n"
+   " --huffman-enc [fixed/dynamic/default]: Huffman encoding\n"
+   "   (default: dynamic)\n"
" --compress-level N: compression level, which could be a 
single value, list or range\n"
"   (default: range between 1 and 9)\n"
" --window-sz N: base two log value of compression window 
size\n"
@@ -431,6 +431,10 @@ parse_huffman_enc(struct comp_test_data *test_data, const 
char *arg)
{
"fixed",
RTE_COMP_HUFFMAN_FIXED
+   },
+   {
+   "dynamic",
+   RTE_COMP_HUFFMAN_DYNAMIC
}
};
 
@@ -567,7 +571,7 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->pool_sz = 8192;
test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
-   test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
+   test_data->huffman_enc = RTE_COMP_HUFFMAN_DYNAMIC;
test_data->test_op = COMPRESS_DECOMPRESS;
test_data->window_sz = -1;
test_data->level.min = 1;
diff --git a/doc/guides/rel_notes/release_18_11.rst 
b/doc/guides/rel_notes/release_18_11.rst
index e6652a5..8d9cdd2 100644
--- a/doc/guides/rel_notes/release_18_11.rst
+++ b/doc/guides/rel_notes/release_18_11.rst
@@ -355,8 +355,7 @@ New Features
 * **Added a compression performance test tool.**
 
Added a new performance test tool to test the compressdev PMD. The tool 
tests
-   compression ratio and compression throughput. Dynamic compression test is 
not
-   supported yet.
+   compression ratio and compression throughput.
 
 API Changes
 ---
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
index d343408..e086c2a 100644
--- a/doc/guides/tools/comp_perf.rst
+++ b/doc/guides/tools/comp_perf.rst
@@ -24,7 +24,7 @@ to check the throughput rate
 Limitations
 ~~~
 
-* Stateful operation and dynamic compression are not supported in this version.
+* Stateful operation is not supported in this version.
 
 
 Command line options
@@ -48,7 +48,7 @@ Command line options
 
  ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
 
- ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+ ``--huffman-enc [fixed/dynamic/default]``: Huffman encoding (default: dynamic)
 
  ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
 
-- 
2.7.4



[dpdk-dev] [PATCH v5 5/5] app/compress-perf: code refactoring

2018-12-05 Thread Tomasz Jozwiak
Code refactoring to separate validation from benchmarking part.
Added op's status checking after rte_compressdev_dequeue_burst
function.

Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/Makefile   |   2 +
 app/test-compress-perf/comp_perf_options.h|  12 +
 app/test-compress-perf/comp_perf_test_benchmark.c | 308 ++
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 353 +
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 368 +-
 app/test-compress-perf/meson.build|   4 +-
 8 files changed, 718 insertions(+), 355 deletions(-)
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h

diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
index 8aa7a22..d20e17e 100644
--- a/app/test-compress-perf/Makefile
+++ b/app/test-compress-perf/Makefile
@@ -12,5 +12,7 @@ CFLAGS += -O3
 # all source are stored in SRCS-y
 SRCS-y := main.c
 SRCS-y += comp_perf_options_parse.c
+SRCS-y += comp_perf_test_verify.c
+SRCS-y += comp_perf_test_benchmark.c
 
 include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
index 7516ea0..ca96a3c 100644
--- a/app/test-compress-perf/comp_perf_options.h
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -2,6 +2,9 @@
  * Copyright(c) 2018 Intel Corporation
  */
 
+#ifndef _COMP_PERF_OPS_
+#define _COMP_PERF_OPS_
+
 #define MAX_DRIVER_NAME64
 #define MAX_INPUT_FILE_NAME64
 #define MAX_LIST   32
@@ -46,6 +49,13 @@ struct comp_test_data {
/* Store TSC duration for all levels (including level 0) */
uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   size_t comp_data_sz;
+   size_t decomp_data_sz;
+   double ratio;
+   double comp_gbps;
+   double decomp_gbps;
+   double comp_tsc_byte;
+   double decomp_tsc_byte;
 };
 
 int
@@ -57,3 +67,5 @@ comp_perf_options_default(struct comp_test_data *test_data);
 
 int
 comp_perf_options_check(struct comp_test_data *test_data);
+
+#endif
diff --git a/app/test-compress-perf/comp_perf_test_benchmark.c 
b/app/test-compress-perf/comp_perf_test_benchmark.c
new file mode 100644
index 000..9aa2665
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_test_benchmark.c
@@ -0,0 +1,308 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "comp_perf_test_benchmark.h"
+
+static int
+main_loop(struct comp_test_data *test_data, uint8_t level,
+   enum rte_comp_xform_type type)
+{
+   uint8_t dev_id = test_data->cdev_id;
+   uint32_t i, iter, num_iter;
+   struct rte_comp_op **ops, **deq_ops;
+   void *priv_xform = NULL;
+   struct rte_comp_xform xform;
+   struct rte_mbuf **input_bufs, **output_bufs;
+   int res = 0;
+   int allocated = 0;
+
+   if (test_data == NULL || !test_data->burst_sz) {
+   RTE_LOG(ERR, USER1,
+   "Unknown burst size\n");
+   return -1;
+   }
+
+   ops = rte_zmalloc_socket(NULL,
+   2 * test_data->total_bufs * sizeof(struct rte_comp_op *),
+   0, rte_socket_id());
+
+   if (ops == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Can't allocate memory for ops strucures\n");
+   return -1;
+   }
+
+   deq_ops = &ops[test_data->total_bufs];
+
+   if (type == RTE_COMP_COMPRESS) {
+   xform = (struct rte_comp_xform) {
+   .type = RTE_COMP_COMPRESS,
+   .compress = {
+   .algo = RTE_COMP_ALGO_DEFLATE,
+   .deflate.huffman = test_data->huffman_enc,
+   .level = level,
+   .window_size = test_data->window_sz,
+   .chksum = RTE_COMP_CHECKSUM_NONE,
+   .hash_algo = RTE_COMP_HASH_ALGO_NONE
+   }
+   };
+   input_bufs = test_data->decomp_bufs;
+   output_bufs = test_data->comp_bufs;
+   } else {
+   xform = (struct rte_comp_xform) {
+   .type = RTE_COMP_DECOMPRESS,
+   .decompress = {
+   .algo = RTE_COMP_ALGO_DEFLATE,
+   .chksum = RTE_COMP_CHE

[dpdk-dev] [PATCH v6 0/5] add initial version of compress-perf

2018-12-12 Thread Tomasz Jozwiak
This patchset adds initial version of compression performance
test.

v6 changes:
  - Updated the 19.02 release notes

v5 changes:
  - Fixed documentation
  - Added op's status checking after rte_compressdev_dequeue_burst
  - code cleanup

v4 changes:
  - fixed checkpatch issues
  - code cleanup

v3 changes:
  - Added dynamic compression
  - Code refactoring to separate validation
from benchmarking part
  - Updated documentation
  - Added fail detection from rte_compressdev_enqueue_burst
and rte_compressdev_dequeue_burst functions
  - Code cleanup

v2 changes:

  -  Added release note
  -  Added new cleanup flow into main function
  -  Blocked dynamic compression test because it hasn't been
 tested enough
  -  Changed `--max-num-sgl-segs' default value to 16
  -  Updated documentation

Tomasz Jozwiak (5):
  app/compress-perf: add parser
  app/compress-perf: add performance measurement
  doc/guides/tools: add doc files
  app/compress-perf: add dynamic compression test
  app/compress-perf: code refactoring

 MAINTAINERS   |   5 +
 app/Makefile  |   4 +
 app/meson.build   |   1 +
 app/test-compress-perf/Makefile   |  18 +
 app/test-compress-perf/comp_perf_options.h|  71 +++
 app/test-compress-perf/comp_perf_options_parse.c  | 596 ++
 app/test-compress-perf/comp_perf_test_benchmark.c | 308 +++
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 353 +
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 590 +
 app/test-compress-perf/meson.build|   9 +
 config/common_base|   5 +
 doc/guides/rel_notes/release_19_02.rst|   5 +
 doc/guides/tools/comp_perf.rst|  81 +++
 doc/guides/tools/index.rst|   1 +
 16 files changed, 2073 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build
 create mode 100644 doc/guides/tools/comp_perf.rst

-- 
2.7.4



[dpdk-dev] [PATCH v6 1/5] app/compress-perf: add parser

2018-12-12 Thread Tomasz Jozwiak
Added parser part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/Makefile |   4 +
 app/meson.build  |   1 +
 app/test-compress-perf/Makefile  |  16 +
 app/test-compress-perf/comp_perf_options.h   |  59 +++
 app/test-compress-perf/comp_perf_options_parse.c | 592 +++
 app/test-compress-perf/main.c|  52 ++
 app/test-compress-perf/meson.build   |   7 +
 config/common_base   |   5 +
 8 files changed, 736 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build

diff --git a/app/Makefile b/app/Makefile
index 069fa98..d6641ef 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -11,6 +11,10 @@ ifeq ($(CONFIG_RTE_LIBRTE_BBDEV),y)
 DIRS-$(CONFIG_RTE_TEST_BBDEV) += test-bbdev
 endif
 
+ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV),y)
+DIRS-$(CONFIG_RTE_APP_COMPRESS_PERF) += test-compress-perf
+endif
+
 ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
 DIRS-$(CONFIG_RTE_APP_CRYPTO_PERF) += test-crypto-perf
 endif
diff --git a/app/meson.build b/app/meson.build
index a9a026b..47a2a86 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -4,6 +4,7 @@
 apps = ['pdump',
'proc-info',
'test-bbdev',
+   'test-compress-perf',
'test-crypto-perf',
'test-eventdev',
'test-pmd']
diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
new file mode 100644
index 000..8aa7a22
--- /dev/null
+++ b/app/test-compress-perf/Makefile
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Intel Corporation
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+APP = dpdk-test-compress-perf
+
+CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -O3
+
+# all source are stored in SRCS-y
+SRCS-y := main.c
+SRCS-y += comp_perf_options_parse.c
+
+include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
new file mode 100644
index 000..7516ea0
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#define MAX_DRIVER_NAME64
+#define MAX_INPUT_FILE_NAME64
+#define MAX_LIST   32
+
+enum comp_operation {
+   COMPRESS_ONLY,
+   DECOMPRESS_ONLY,
+   COMPRESS_DECOMPRESS
+};
+
+struct range_list {
+   uint8_t min;
+   uint8_t max;
+   uint8_t inc;
+   uint8_t count;
+   uint8_t list[MAX_LIST];
+};
+
+struct comp_test_data {
+   char driver_name[64];
+   char input_file[64];
+   struct rte_mbuf **comp_bufs;
+   struct rte_mbuf **decomp_bufs;
+   uint32_t total_bufs;
+   uint8_t *input_data;
+   size_t input_data_sz;
+   uint8_t *compressed_data;
+   uint8_t *decompressed_data;
+   struct rte_mempool *comp_buf_pool;
+   struct rte_mempool *decomp_buf_pool;
+   struct rte_mempool *op_pool;
+   int8_t cdev_id;
+   uint16_t seg_sz;
+   uint16_t burst_sz;
+   uint32_t pool_sz;
+   uint32_t num_iter;
+   uint16_t max_sgl_segs;
+   enum rte_comp_huffman huffman_enc;
+   enum comp_operation test_op;
+   int window_sz;
+   struct range_list level;
+   /* Store TSC duration for all levels (including level 0) */
+   uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+};
+
+int
+comp_perf_options_parse(struct comp_test_data *test_data, int argc,
+   char **argv);
+
+void
+comp_perf_options_default(struct comp_test_data *test_data);
+
+int
+comp_perf_options_check(struct comp_test_data *test_data);
diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
new file mode 100644
index 000..7f1a7ff
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -0,0 +1,592 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include "comp_perf_options.h"
+
+#define CPERF_DRIVER_NAME  ("driver-name")
+#define CPERF_TEST_FILE("input-file")
+#define CPERF_SEG_SIZE ("seg-sz")
+#define CPERF_BURST_SIZE   ("burst-sz")
+#define CPERF_EXTENDED_SIZE("extended-input-sz")
+#define CPERF_POOL_SIZE("pool-sz")
+

[dpdk-dev] [PATCH v6 0/5] add initial version of compress-perf

2018-12-12 Thread Tomasz Jozwiak
This patchset adds initial version of compression performance
test.

v6 changes:
  - Updated the 19.02 release notes

v5 changes:
  - Fixed documentation
  - Added op's status checking after rte_compressdev_dequeue_burst
  - code cleanup

v4 changes:
  - fixed checkpatch issues
  - code cleanup

v3 changes:
  - Added dynamic compression
  - Code refactoring to separate validation
from benchmarking part
  - Updated documentation
  - Added fail detection from rte_compressdev_enqueue_burst
and rte_compressdev_dequeue_burst functions
  - Code cleanup

v2 changes:

  -  Added release note
  -  Added new cleanup flow into main function
  -  Blocked dynamic compression test because it hasn't been
 tested enough
  -  Changed `--max-num-sgl-segs' default value to 16
  -  Updated documentation

Tomasz Jozwiak (5):
  app/compress-perf: add parser
  app/compress-perf: add performance measurement
  doc/guides/tools: add doc files
  app/compress-perf: add dynamic compression test
  app/compress-perf: code refactoring

 MAINTAINERS   |   5 +
 app/Makefile  |   4 +
 app/meson.build   |   1 +
 app/test-compress-perf/Makefile   |  18 +
 app/test-compress-perf/comp_perf_options.h|  71 +++
 app/test-compress-perf/comp_perf_options_parse.c  | 596 ++
 app/test-compress-perf/comp_perf_test_benchmark.c | 308 +++
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 353 +
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 590 +
 app/test-compress-perf/meson.build|   9 +
 config/common_base|   5 +
 doc/guides/rel_notes/release_19_02.rst|   5 +
 doc/guides/tools/comp_perf.rst|  81 +++
 doc/guides/tools/index.rst|   1 +
 16 files changed, 2073 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build
 create mode 100644 doc/guides/tools/comp_perf.rst

-- 
2.7.4



[dpdk-dev] [PATCH v6 2/5] app/compress-perf: add performance measurement

2018-12-12 Thread Tomasz Jozwiak
Added performance measurement part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c |   2 +-
 app/test-compress-perf/main.c| 888 ++-
 2 files changed, 884 insertions(+), 6 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index 7f1a7ff..add5c8a 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -565,7 +565,7 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->seg_sz = 2048;
test_data->burst_sz = 32;
test_data->pool_sz = 8192;
-   test_data->max_sgl_segs = UINT16_MAX;
+   test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
test_data->test_op = COMPRESS_DECOMPRESS;
diff --git a/app/test-compress-perf/main.c b/app/test-compress-perf/main.c
index f52b98d..4b183a8 100644
--- a/app/test-compress-perf/main.c
+++ b/app/test-compress-perf/main.c
@@ -5,14 +5,730 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include "comp_perf_options.h"
 
+#define NUM_MAX_XFORMS 16
+#define NUM_MAX_INFLIGHT_OPS 512
+#define EXPANSE_RATIO 1.05
+#define MIN_COMPRESSED_BUF_SIZE 8
+
+#define DIV_CEIL(a, b)  ((a) / (b) + ((a) % (b) != 0))
+
+/* Cleanup state machine */
+static enum cleanup_st {
+   ST_CLEAR = 0,
+   ST_TEST_DATA,
+   ST_COMPDEV,
+   ST_INPUT_DATA,
+   ST_MEMORY_ALLOC,
+   ST_PREPARE_BUF,
+   ST_DURING_TEST
+} cleanup = ST_CLEAR;
+
+static int
+param_range_check(uint16_t size, const struct rte_param_log2_range *range)
+{
+   unsigned int next_size;
+
+   /* Check lower/upper bounds */
+   if (size < range->min)
+   return -1;
+
+   if (size > range->max)
+   return -1;
+
+   /* If range is actually only one value, size is correct */
+   if (range->increment == 0)
+   return 0;
+
+   /* Check if value is one of the supported sizes */
+   for (next_size = range->min; next_size <= range->max;
+   next_size += range->increment)
+   if (size == next_size)
+   return 0;
+
+   return -1;
+}
+
+static int
+comp_perf_check_capabilities(struct comp_test_data *test_data)
+{
+   const struct rte_compressdev_capabilities *cap;
+
+   cap = rte_compressdev_capability_get(test_data->cdev_id,
+RTE_COMP_ALGO_DEFLATE);
+
+   if (cap == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support DEFLATE\n");
+   return -1;
+   }
+
+   uint64_t comp_flags = cap->comp_feature_flags;
+
+   /* Huffman enconding */
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_FIXED &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Fixed Huffman\n");
+   return -1;
+   }
+
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_DYNAMIC &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Dynamic Huffman\n");
+   return -1;
+   }
+
+   /* Window size */
+   if (test_data->window_sz != -1) {
+   if (param_range_check(test_data->window_sz, &cap->window_size)
+   < 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support "
+   "this window size\n");
+   return -1;
+   }
+   } else
+   /* Set window size to PMD maximum if none was specified */
+   test_data->window_sz = cap->window_size.max;
+
+   /* Check if chained mbufs is supported */
+   if (test_data->max_sgl_segs > 1  &&
+   (comp_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0) {
+   RTE_LOG(INFO, USER1, "Compress device does not support "
+   "chained mbufs. Max SGL segments set to 1\n");
+   test_data->max_sgl_segs = 1;
+   }
+
+   /* Level 0 support */
+   if (test_data->level.min == 0 &&
+   (comp_flags & RTE_COMP_FF_NONCOMPRESSED_BLOCKS) == 0) {
+   RTE_LOG(ERR, USER1, "Compress device does not support "
+   "level 0 (no compress

[dpdk-dev] [PATCH v6 3/5] doc/guides/tools: add doc files

2018-12-12 Thread Tomasz Jozwiak
Added:
 -  initial version of compression performance test
description file.
 -  release note in release_18_11.rst

Updated index.rst file

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 MAINTAINERS|  5 +++
 doc/guides/rel_notes/release_19_02.rst |  6 +++
 doc/guides/tools/comp_perf.rst | 81 ++
 doc/guides/tools/index.rst |  1 +
 4 files changed, 93 insertions(+)
 create mode 100644 doc/guides/tools/comp_perf.rst

diff --git a/MAINTAINERS b/MAINTAINERS
index 71ba312..dd0c131 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1242,6 +1242,11 @@ M: Bernard Iremonger 
 F: app/test-pmd/
 F: doc/guides/testpmd_app_ug/
 
+Compression performance test application
+M: De Lara Guarch, Pablo 
+F: app/test-compress-perf/
+F: doc/guides/tools/comp_perf.rst
+
 Crypto performance test application
 M: Declan Doherty 
 F: app/test-crypto-perf/
diff --git a/doc/guides/rel_notes/release_19_02.rst 
b/doc/guides/rel_notes/release_19_02.rst
index a94fa86..6701d2e 100644
--- a/doc/guides/rel_notes/release_19_02.rst
+++ b/doc/guides/rel_notes/release_19_02.rst
@@ -54,6 +54,12 @@ New Features
  Also, make sure to start the actual text at the margin.
  =
 
+   * **Added a compression performance test tool.**
+
+ Added a new performance test tool to test the compressdev PMD. The tool 
tests
+ compression ratio and compression throughput. Dynamic compression test is 
not
+ supported yet.
+
 
 Removed Items
 -
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
new file mode 100644
index 000..d343408
--- /dev/null
+++ b/doc/guides/tools/comp_perf.rst
@@ -0,0 +1,81 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+Copyright(c) 2018 Intel Corporation.
+
+dpdk-test-compress-perf Tool
+
+
+The ``dpdk-test-compress-perf`` tool is a Data Plane Development Kit (DPDK)
+utility that allows measuring performance parameters of PMDs available in the
+compress tree. The tool reads the data from a file (--input-file),
+dumps all the file into a buffer and fills out the data of input mbufs,
+which are passed to compress device with compression operations.
+Then, the output buffers are fed into the decompression stage, and the 
resulting
+data is compared against the original data (verification phase). After that,
+a number of iterations are performed, compressing first and decompressing 
later,
+to check the throughput rate
+(showing cycles/iteration, cycles/Byte and Gbps, for compression and 
decompression).
+
+.. Note::
+
+   if the max-num-sgl-segs x seg_sz > input size then segments number in
+   the chain will be lower than value passed into max-num-sgl-segs.
+
+
+Limitations
+~~~
+
+* Stateful operation and dynamic compression are not supported in this version.
+
+
+Command line options
+
+
+ ``--driver-name NAME``: compress driver to use
+
+ ``--input-file NAME``: file to compress and decompress
+
+ ``--extended-input-sz N``: extend file data up to this size (default: no 
extension)
+
+ ``--seg-sz N``: size of segment to store the data (default: 2048)
+
+ ``--burst-sz N``: compress operation burst size
+
+ ``--pool-sz N``: mempool size for compress operations/mbufs (default: 8192)
+
+ ``--max-num-sgl-segs N``: maximum number of segments for each mbuf (default: 
16)
+
+ ``--num-iter N``: number of times the file will be compressed/decompressed 
(default: 1)
+
+ ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
+
+ ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+
+ ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
+
+ ``--window-sz N``: base two log value of compression window size (default: 
max supported by PMD)
+
+ ``-h``: prints this help
+
+
+Compiling the Tool
+--
+
+**Step 1: PMD setting**
+
+The ``dpdk-test-compress-perf`` tool depends on compression device drivers PMD 
which
+can be disabled by default in the build configuration file ``common_base``.
+The compression device drivers PMD which should be tested can be enabled by 
setting e.g.::
+
+   CONFIG_RTE_LIBRTE_PMD_ISAL=y
+
+
+Running the Tool
+
+
+The tool has a number of command line options. Here is the sample command line:
+
+.. code-block:: console
+
+   ./build/app/dpdk-test-compress-perf  -l 4 -- --driver-name compress_qat 
--input-file test.txt --seg-sz 8192
+--compress-level 1:1:9 --num-iter 10 --extended-input-sz 1048576  
--max-num-sgl-segs 16 --huffman-enc fixed
+
diff --git a/doc/guides/tools/index.rst b/doc/guides/tools/index.rst
index a6e2c4c..24235ba 100644
--- a/doc/guides/tools/index.rst
+++ b/doc/guides/tools/index.rst
@@ -42,3 +42,4 @@ DPDK Tools User Guides
 testbb

[dpdk-dev] [PATCH v6 4/5] app/compress-perf: add dynamic compression test

2018-12-12 Thread Tomasz Jozwiak
Added dynamic compression feature into compression perf. test.

Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c | 10 +++---
 doc/guides/rel_notes/release_19_02.rst   |  3 +--
 doc/guides/tools/comp_perf.rst   |  4 ++--
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index add5c8a..66eb81f 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -50,8 +50,8 @@ usage(char *progname)
"   compressed/decompressed (default: 1)\n"
" --operation [comp/decomp/comp_and_decomp]: perform test on\n"
"   compression, decompression or both operations\n"
-   " --huffman-enc [fixed/default]: Huffman encoding\n"
-   "   (default: fixed)\n"
+   " --huffman-enc [fixed/dynamic/default]: Huffman encoding\n"
+   "   (default: dynamic)\n"
" --compress-level N: compression level, which could be a 
single value, list or range\n"
"   (default: range between 1 and 9)\n"
" --window-sz N: base two log value of compression window 
size\n"
@@ -431,6 +431,10 @@ parse_huffman_enc(struct comp_test_data *test_data, const 
char *arg)
{
"fixed",
RTE_COMP_HUFFMAN_FIXED
+   },
+   {
+   "dynamic",
+   RTE_COMP_HUFFMAN_DYNAMIC
}
};
 
@@ -567,7 +571,7 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->pool_sz = 8192;
test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
-   test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
+   test_data->huffman_enc = RTE_COMP_HUFFMAN_DYNAMIC;
test_data->test_op = COMPRESS_DECOMPRESS;
test_data->window_sz = -1;
test_data->level.min = 1;
diff --git a/doc/guides/rel_notes/release_19_02.rst 
b/doc/guides/rel_notes/release_19_02.rst
index 6701d2e..6ca4a62 100644
--- a/doc/guides/rel_notes/release_19_02.rst
+++ b/doc/guides/rel_notes/release_19_02.rst
@@ -57,8 +57,7 @@ New Features
* **Added a compression performance test tool.**
 
  Added a new performance test tool to test the compressdev PMD. The tool 
tests
- compression ratio and compression throughput. Dynamic compression test is 
not
- supported yet.
+ compression ratio and compression throughput.
 
 
 Removed Items
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
index d343408..e086c2a 100644
--- a/doc/guides/tools/comp_perf.rst
+++ b/doc/guides/tools/comp_perf.rst
@@ -24,7 +24,7 @@ to check the throughput rate
 Limitations
 ~~~
 
-* Stateful operation and dynamic compression are not supported in this version.
+* Stateful operation is not supported in this version.
 
 
 Command line options
@@ -48,7 +48,7 @@ Command line options
 
  ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
 
- ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+ ``--huffman-enc [fixed/dynamic/default]``: Huffman encoding (default: dynamic)
 
  ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
 
-- 
2.7.4



[dpdk-dev] [PATCH v6 5/5] app/compress-perf: code refactoring

2018-12-12 Thread Tomasz Jozwiak
Code refactoring to separate validation from benchmarking part.
Added op's status checking after rte_compressdev_dequeue_burst
function.

Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/Makefile   |   2 +
 app/test-compress-perf/comp_perf_options.h|  12 +
 app/test-compress-perf/comp_perf_test_benchmark.c | 308 ++
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 353 +
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 368 +-
 app/test-compress-perf/meson.build|   4 +-
 8 files changed, 718 insertions(+), 355 deletions(-)
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h

diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
index 8aa7a22..d20e17e 100644
--- a/app/test-compress-perf/Makefile
+++ b/app/test-compress-perf/Makefile
@@ -12,5 +12,7 @@ CFLAGS += -O3
 # all source are stored in SRCS-y
 SRCS-y := main.c
 SRCS-y += comp_perf_options_parse.c
+SRCS-y += comp_perf_test_verify.c
+SRCS-y += comp_perf_test_benchmark.c
 
 include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
index 7516ea0..ca96a3c 100644
--- a/app/test-compress-perf/comp_perf_options.h
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -2,6 +2,9 @@
  * Copyright(c) 2018 Intel Corporation
  */
 
+#ifndef _COMP_PERF_OPS_
+#define _COMP_PERF_OPS_
+
 #define MAX_DRIVER_NAME64
 #define MAX_INPUT_FILE_NAME64
 #define MAX_LIST   32
@@ -46,6 +49,13 @@ struct comp_test_data {
/* Store TSC duration for all levels (including level 0) */
uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   size_t comp_data_sz;
+   size_t decomp_data_sz;
+   double ratio;
+   double comp_gbps;
+   double decomp_gbps;
+   double comp_tsc_byte;
+   double decomp_tsc_byte;
 };
 
 int
@@ -57,3 +67,5 @@ comp_perf_options_default(struct comp_test_data *test_data);
 
 int
 comp_perf_options_check(struct comp_test_data *test_data);
+
+#endif
diff --git a/app/test-compress-perf/comp_perf_test_benchmark.c 
b/app/test-compress-perf/comp_perf_test_benchmark.c
new file mode 100644
index 000..9aa2665
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_test_benchmark.c
@@ -0,0 +1,308 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "comp_perf_test_benchmark.h"
+
+static int
+main_loop(struct comp_test_data *test_data, uint8_t level,
+   enum rte_comp_xform_type type)
+{
+   uint8_t dev_id = test_data->cdev_id;
+   uint32_t i, iter, num_iter;
+   struct rte_comp_op **ops, **deq_ops;
+   void *priv_xform = NULL;
+   struct rte_comp_xform xform;
+   struct rte_mbuf **input_bufs, **output_bufs;
+   int res = 0;
+   int allocated = 0;
+
+   if (test_data == NULL || !test_data->burst_sz) {
+   RTE_LOG(ERR, USER1,
+   "Unknown burst size\n");
+   return -1;
+   }
+
+   ops = rte_zmalloc_socket(NULL,
+   2 * test_data->total_bufs * sizeof(struct rte_comp_op *),
+   0, rte_socket_id());
+
+   if (ops == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Can't allocate memory for ops strucures\n");
+   return -1;
+   }
+
+   deq_ops = &ops[test_data->total_bufs];
+
+   if (type == RTE_COMP_COMPRESS) {
+   xform = (struct rte_comp_xform) {
+   .type = RTE_COMP_COMPRESS,
+   .compress = {
+   .algo = RTE_COMP_ALGO_DEFLATE,
+   .deflate.huffman = test_data->huffman_enc,
+   .level = level,
+   .window_size = test_data->window_sz,
+   .chksum = RTE_COMP_CHECKSUM_NONE,
+   .hash_algo = RTE_COMP_HASH_ALGO_NONE
+   }
+   };
+   input_bufs = test_data->decomp_bufs;
+   output_bufs = test_data->comp_bufs;
+   } else {
+   xform = (struct rte_comp_xform) {
+   .type = RTE_COMP_DECOMPRESS,
+   .decompress = {
+   .algo = RTE_COMP_ALGO_DEFLATE,
+   .chksum = RTE_COMP_CHE

[dpdk-dev] [PATCH] common/qat: revert fix for invalid response from firmware

2018-12-14 Thread Tomasz Jozwiak
This reverts commit d09973f6c4df ("common/qat: fix for invalid
response from firmware") due to incorrectly reporting failures
on some older firmware versions.

Fixes: d09973f6c4df ("common/qat: fix for invalid response from firmware")
Cc: sta...@dpdk.org

Signed-off-by: Tomasz Jozwiak 
---
 drivers/common/qat/qat_qp.c | 8 
 1 file changed, 8 deletions(-)

diff --git a/drivers/common/qat/qat_qp.c b/drivers/common/qat/qat_qp.c
index 79f6a01..ec7f2b3 100644
--- a/drivers/common/qat/qat_qp.c
+++ b/drivers/common/qat/qat_qp.c
@@ -634,23 +634,15 @@ qat_dequeue_op_burst(void *qp, void **ops, uint16_t 
nb_ops)
uint32_t head;
uint32_t resp_counter = 0;
uint8_t *resp_msg;
-   uint8_t hdr_flags;
 
rx_queue = &(tmp_qp->rx_q);
tx_queue = &(tmp_qp->tx_q);
head = rx_queue->head;
resp_msg = (uint8_t *)rx_queue->base_addr + rx_queue->head;
-   hdr_flags = ((struct icp_qat_fw_comn_resp_hdr *)resp_msg)->hdr_flags;
 
while (*(uint32_t *)resp_msg != ADF_RING_EMPTY_SIG &&
resp_counter != nb_ops) {
 
-   if (unlikely(!ICP_QAT_FW_COMN_VALID_FLAG_GET(hdr_flags))) {
-   /* Fatal firmware error */
-   QAT_LOG(ERR, "QAT Firmware returned invalid response");
-   return 0;
-   }
-
if (tmp_qp->service_type == QAT_SERVICE_SYMMETRIC)
qat_sym_process_response(ops, resp_msg);
else if (tmp_qp->service_type == QAT_SERVICE_COMPRESSION)
-- 
2.7.4



[dpdk-dev] [PATCH] compress/qat: fix status return on error building request

2018-12-14 Thread Tomasz Jozwiak
This patch fixes error status which should be set inside
qat_comp_build_request function in case any errors are detected.
In these cases op.status is set to
RTE_COMP_OP_STATUS_INVALID_ARGS to help application debug.

Fixes: 1947bd18580b ("compress/qat: support scatter-gather buffers")
Cc: sta...@dpdk.org

Signed-off-by: Tomasz Jozwiak 
---
 drivers/compress/qat/qat_comp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c
index 2754742..8a6fad0 100644
--- a/drivers/compress/qat/qat_comp.c
+++ b/drivers/compress/qat/qat_comp.c
@@ -36,6 +36,7 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg,
QAT_DP_LOG(ERR, "QAT PMD only supports stateless compression "
"operation requests, op (%p) is not a "
"stateless operation.", op);
+   op->status = RTE_COMP_OP_STATUS_INVALID_ARGS;
return -EINVAL;
}
 
@@ -61,6 +62,7 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg,
RTE_PMD_QAT_COMP_SGL_MAX_SEGMENTS);
if (ret) {
QAT_DP_LOG(ERR, "QAT PMD Cannot fill source sgl array");
+   op->status = RTE_COMP_OP_STATUS_INVALID_ARGS;
return ret;
}
 
@@ -71,6 +73,7 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg,
RTE_PMD_QAT_COMP_SGL_MAX_SEGMENTS);
if (ret) {
QAT_DP_LOG(ERR, "QAT PMD Cannot fill dest. sgl array");
+   op->status = RTE_COMP_OP_STATUS_INVALID_ARGS;
return ret;
}
 
-- 
2.7.4



[dpdk-dev] [PATCH] compress/qat: fix error counter in dequeue errors

2018-12-14 Thread Tomasz Jozwiak
This patch increments error counter (stats.dequeue_err_count)
in case of any error detection during qat_comp_process_response
function.

Fixes: 3cc14fc48e35 ("compress/qat: check that correct firmware is in use")
Fixes: 32842f2a6d7d ("compress/qat: create FW request and process response")
Cc: sta...@dpdk.org

Signed-off-by: Tomasz Jozwiak 
---
 drivers/common/qat/qat_qp.c | 6 --
 drivers/common/qat/qat_qp.h | 3 ++-
 drivers/compress/qat/qat_comp.c | 4 +++-
 drivers/compress/qat/qat_comp.h | 4 ++--
 4 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/common/qat/qat_qp.c b/drivers/common/qat/qat_qp.c
index 79f6a01..f0386ac 100644
--- a/drivers/common/qat/qat_qp.c
+++ b/drivers/common/qat/qat_qp.c
@@ -654,7 +654,8 @@ qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops)
if (tmp_qp->service_type == QAT_SERVICE_SYMMETRIC)
qat_sym_process_response(ops, resp_msg);
else if (tmp_qp->service_type == QAT_SERVICE_COMPRESSION)
-   qat_comp_process_response(ops, resp_msg);
+   qat_comp_process_response(ops, resp_msg,
+   &tmp_qp->stats.dequeue_err_count);
 
head = adf_modulo(head + rx_queue->msg_size,
  rx_queue->modulo_mask);
@@ -682,7 +683,8 @@ qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops)
 }
 
 __rte_weak int
-qat_comp_process_response(void **op __rte_unused, uint8_t *resp __rte_unused)
+qat_comp_process_response(void **op __rte_unused, uint8_t *resp __rte_unused,
+ uint64_t *dequeue_err_count __rte_unused)
 {
return  0;
 }
diff --git a/drivers/common/qat/qat_qp.h b/drivers/common/qat/qat_qp.h
index 6f1525e..9833bcb 100644
--- a/drivers/common/qat/qat_qp.h
+++ b/drivers/common/qat/qat_qp.h
@@ -107,6 +107,7 @@ qat_qps_per_service(const struct qat_qp_hw_data *qp_hw_data,
 
 /* Needed for weak function*/
 int
-qat_comp_process_response(void **op __rte_unused, uint8_t *resp __rte_unused);
+qat_comp_process_response(void **op __rte_unused, uint8_t *resp __rte_unused,
+ uint64_t *dequeue_err_count);
 
 #endif /* _QAT_QP_H_ */
diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c
index 2754742..342d2f7 100644
--- a/drivers/compress/qat/qat_comp.c
+++ b/drivers/compress/qat/qat_comp.c
@@ -106,7 +106,7 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg,
 }
 
 int
-qat_comp_process_response(void **op, uint8_t *resp)
+qat_comp_process_response(void **op, uint8_t *resp, uint64_t 
*dequeue_err_count)
 {
struct icp_qat_fw_comp_resp *resp_msg =
(struct icp_qat_fw_comp_resp *)resp;
@@ -132,6 +132,7 @@ qat_comp_process_response(void **op, uint8_t *resp)
rx_op->debug_status = ERR_CODE_QAT_COMP_WRONG_FW;
*op = (void *)rx_op;
QAT_DP_LOG(ERR, "QAT has wrong firmware");
+   ++(*dequeue_err_count);
return 0;
}
}
@@ -149,6 +150,7 @@ qat_comp_process_response(void **op, uint8_t *resp)
QAT_DP_LOG(ERR, "QAT intermediate buffer may be too "
"small for output, try configuring a larger size");
 
+   ++(*dequeue_err_count);
rx_op->status = RTE_COMP_OP_STATUS_ERROR;
rx_op->debug_status =
*((uint16_t *)(&resp_msg->comn_resp.comn_error));
diff --git a/drivers/compress/qat/qat_comp.h b/drivers/compress/qat/qat_comp.h
index 99a4462..19f48df 100644
--- a/drivers/compress/qat/qat_comp.h
+++ b/drivers/compress/qat/qat_comp.h
@@ -60,8 +60,8 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg, void 
*op_cookie,
   enum qat_device_gen qat_dev_gen __rte_unused);
 
 int
-qat_comp_process_response(void **op, uint8_t *resp);
-
+qat_comp_process_response(void **op, uint8_t *resp,
+ uint64_t *dequeue_err_count);
 
 int
 qat_comp_private_xform_create(struct rte_compressdev *dev,
-- 
2.7.4



[dpdk-dev] [PATCH] compress/qat: fix return correct status on qat overflow

2018-12-21 Thread Tomasz Jozwiak
This patch fixes correct status in case of overflow on
QAT is detected.
In that case RTE_COMP_OP_STATUS_OUT_OF_SPACE_TERMINATED value is set in
rte_comp_op.status field instead of RTE_COMP_OP_STATUS_ERROR

Fixes: 32842f2a6d7d ("compress/qat: create FW request and process response")
Cc: sta...@dpdk.org

Signed-off-by: Tomasz Jozwiak 
---
 drivers/compress/qat/qat_comp.c | 34 +++---
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c
index bb00610..4edf4c8 100644
--- a/drivers/compress/qat/qat_comp.c
+++ b/drivers/compress/qat/qat_comp.c
@@ -117,6 +117,9 @@ qat_comp_process_response(void **op, uint8_t *resp, 
uint64_t *dequeue_err_count)
(resp_msg->opaque_data);
struct qat_comp_xform *qat_xform = (struct qat_comp_xform *)
(rx_op->private_xform);
+   int err = resp_msg->comn_resp.comn_status &
+   ((1 << QAT_COMN_RESP_CMP_STATUS_BITPOS) |
+(1 << QAT_COMN_RESP_XLAT_STATUS_BITPOS));
 
 #if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG
QAT_DP_LOG(DEBUG, "Direction: %s",
@@ -140,21 +143,30 @@ qat_comp_process_response(void **op, uint8_t *resp, 
uint64_t *dequeue_err_count)
}
}
 
-   if ((ICP_QAT_FW_COMN_RESP_CMP_STAT_GET(resp_msg->comn_resp.comn_status)
-   | ICP_QAT_FW_COMN_RESP_XLAT_STAT_GET(
-   resp_msg->comn_resp.comn_status)) !=
-   ICP_QAT_FW_COMN_STATUS_FLAG_OK) {
-
-   if (unlikely((ICP_QAT_FW_COMN_RESP_XLAT_STAT_GET(
-   resp_msg->comn_resp.comn_status) !=
-   ICP_QAT_FW_COMN_STATUS_FLAG_OK) &&
-   (qat_xform->qat_comp_request_type
-   == QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS)))
+   if (err) {
+   if (unlikely((err & (1 << QAT_COMN_RESP_XLAT_STATUS_BITPOS))
+&& (qat_xform->qat_comp_request_type
+== QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS))) {
QAT_DP_LOG(ERR, "QAT intermediate buffer may be too "
"small for output, try configuring a larger size");
+   }
+
+   int8_t cmp_err_code =
+   (int8_t)resp_msg->comn_resp.comn_error.cmp_err_code;
+   int8_t xlat_err_code =
+   (int8_t)resp_msg->comn_resp.comn_error.xlat_err_code;
+
+   if ((cmp_err_code == ERR_CODE_OVERFLOW_ERROR && !xlat_err_code)
+   ||
+   (!cmp_err_code && xlat_err_code == ERR_CODE_OVERFLOW_ERROR)
+   ||
+   ((cmp_err_code | xlat_err_code) == ERR_CODE_OVERFLOW_ERROR))
+   rx_op->status =
+   RTE_COMP_OP_STATUS_OUT_OF_SPACE_TERMINATED;
+   else
+   rx_op->status = RTE_COMP_OP_STATUS_ERROR;
 
++(*dequeue_err_count);
-   rx_op->status = RTE_COMP_OP_STATUS_ERROR;
rx_op->debug_status =
*((uint16_t *)(&resp_msg->comn_resp.comn_error));
} else {
-- 
2.7.4



[dpdk-dev] [PATCH] compress/qat: add compression on dh895x

2018-12-21 Thread Tomasz Jozwiak
This patch enables compression on dh895x HW series
and updates supported hardware accelerator devices list.

Signed-off-by: Tomasz Jozwiak 
---
 doc/guides/compressdevs/qat_comp.rst | 1 +
 drivers/compress/qat/qat_comp.c  | 2 +-
 drivers/compress/qat/qat_comp_pmd.c  | 4 
 3 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/doc/guides/compressdevs/qat_comp.rst 
b/doc/guides/compressdevs/qat_comp.rst
index aee3b99..1c24ebb 100644
--- a/doc/guides/compressdevs/qat_comp.rst
+++ b/doc/guides/compressdevs/qat_comp.rst
@@ -9,6 +9,7 @@ support for the following hardware accelerator devices:
 
 * ``Intel QuickAssist Technology C62x``
 * ``Intel QuickAssist Technology C3xxx``
+* ``Intel QuickAssist Technology dh895x``
 
 
 Features
diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c
index bb00610..e745d13 100644
--- a/drivers/compress/qat/qat_comp.c
+++ b/drivers/compress/qat/qat_comp.c
@@ -270,7 +270,7 @@ static int qat_comp_create_templates(struct qat_comp_xform 
*qat_xform,
ICP_QAT_FW_COMP_NOT_AUTO_SELECT_BEST,
ICP_QAT_FW_COMP_NOT_ENH_AUTO_SELECT_BEST,
ICP_QAT_FW_COMP_NOT_DISABLE_TYPE0_ENH_AUTO_SELECT_BEST,
-   ICP_QAT_FW_COMP_DISABLE_SECURE_RAM_USED_AS_INTMD_BUF);
+   ICP_QAT_FW_COMP_ENABLE_SECURE_RAM_USED_AS_INTMD_BUF);
 
comp_req->cd_pars.sl.comp_slice_cfg_word[0] =
ICP_QAT_HW_COMPRESSION_CONFIG_BUILD(
diff --git a/drivers/compress/qat/qat_comp_pmd.c 
b/drivers/compress/qat/qat_comp_pmd.c
index ea93077..27c8856 100644
--- a/drivers/compress/qat/qat_comp_pmd.c
+++ b/drivers/compress/qat/qat_comp_pmd.c
@@ -484,10 +484,6 @@ static const struct rte_driver compdev_qat_driver = {
 int
 qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 {
-   if (qat_pci_dev->qat_dev_gen == QAT_GEN1) {
-   QAT_LOG(ERR, "Compression PMD not supported on QAT dh895xcc");
-   return 0;
-   }
if (qat_pci_dev->qat_dev_gen == QAT_GEN3) {
QAT_LOG(ERR, "Compression PMD not supported on QAT c4xxx");
return 0;
-- 
2.7.4



[dpdk-dev] [PATCH v2] compress/qat: fix return correct status on qat overflow

2018-12-27 Thread Tomasz Jozwiak
v2 changes:

  - Fixed wrong condition

Tomasz Jozwiak (1):
  compress/qat: fix return correct status on qat overflow

 drivers/compress/qat/qat_comp.c | 35 ---
 1 file changed, 24 insertions(+), 11 deletions(-)

-- 
2.7.4



[dpdk-dev] [PATCH v2] compress/qat: fix return correct status on qat overflow

2018-12-27 Thread Tomasz Jozwiak
This patch fixes correct status in case of overflow on
QAT is detected.
In that case RTE_COMP_OP_STATUS_OUT_OF_SPACE_TERMINATED value is set in
rte_comp_op.status field instead of RTE_COMP_OP_STATUS_ERROR

Fixes: 32842f2a6d7d ("compress/qat: create FW request and process response")
Cc: sta...@dpdk.org

Signed-off-by: Tomasz Jozwiak 
---
 drivers/compress/qat/qat_comp.c | 35 ---
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c
index bb00610..450cfd6 100644
--- a/drivers/compress/qat/qat_comp.c
+++ b/drivers/compress/qat/qat_comp.c
@@ -117,6 +117,9 @@ qat_comp_process_response(void **op, uint8_t *resp, 
uint64_t *dequeue_err_count)
(resp_msg->opaque_data);
struct qat_comp_xform *qat_xform = (struct qat_comp_xform *)
(rx_op->private_xform);
+   int err = resp_msg->comn_resp.comn_status &
+   ((1 << QAT_COMN_RESP_CMP_STATUS_BITPOS) |
+(1 << QAT_COMN_RESP_XLAT_STATUS_BITPOS));
 
 #if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG
QAT_DP_LOG(DEBUG, "Direction: %s",
@@ -140,21 +143,31 @@ qat_comp_process_response(void **op, uint8_t *resp, 
uint64_t *dequeue_err_count)
}
}
 
-   if ((ICP_QAT_FW_COMN_RESP_CMP_STAT_GET(resp_msg->comn_resp.comn_status)
-   | ICP_QAT_FW_COMN_RESP_XLAT_STAT_GET(
-   resp_msg->comn_resp.comn_status)) !=
-   ICP_QAT_FW_COMN_STATUS_FLAG_OK) {
-
-   if (unlikely((ICP_QAT_FW_COMN_RESP_XLAT_STAT_GET(
-   resp_msg->comn_resp.comn_status) !=
-   ICP_QAT_FW_COMN_STATUS_FLAG_OK) &&
-   (qat_xform->qat_comp_request_type
-   == QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS)))
+   if (err) {
+   if (unlikely((err & (1 << QAT_COMN_RESP_XLAT_STATUS_BITPOS))
+&& (qat_xform->qat_comp_request_type
+== QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS))) {
QAT_DP_LOG(ERR, "QAT intermediate buffer may be too "
"small for output, try configuring a larger size");
+   }
+
+   int8_t cmp_err_code =
+   (int8_t)resp_msg->comn_resp.comn_error.cmp_err_code;
+   int8_t xlat_err_code =
+   (int8_t)resp_msg->comn_resp.comn_error.xlat_err_code;
+
+   if ((cmp_err_code == ERR_CODE_OVERFLOW_ERROR && !xlat_err_code)
+   ||
+   (!cmp_err_code && xlat_err_code == ERR_CODE_OVERFLOW_ERROR)
+   ||
+   (cmp_err_code == ERR_CODE_OVERFLOW_ERROR &&
+xlat_err_code == ERR_CODE_OVERFLOW_ERROR))
+   rx_op->status =
+   RTE_COMP_OP_STATUS_OUT_OF_SPACE_TERMINATED;
+   else
+   rx_op->status = RTE_COMP_OP_STATUS_ERROR;
 
++(*dequeue_err_count);
-   rx_op->status = RTE_COMP_OP_STATUS_ERROR;
rx_op->debug_status =
*((uint16_t *)(&resp_msg->comn_resp.comn_error));
} else {
-- 
2.7.4



[dpdk-dev] [PATCH 0/3] app: add initial version of compress-perf

2018-10-01 Thread Tomasz Jozwiak
This patchset adds initial version of compression performance
test.

Tomasz Jozwiak (3):
  app/compress-perf: add parser
  app/compress-perf: add performance measurement
  doc/guides/tools: add doc file

 MAINTAINERS  |   5 +
 app/Makefile |   4 +
 app/meson.build  |   1 +
 app/test-compress-perf/Makefile  |  16 +
 app/test-compress-perf/comp_perf_options.h   |  59 ++
 app/test-compress-perf/comp_perf_options_parse.c | 596 +++
 app/test-compress-perf/main.c| 896 +++
 app/test-compress-perf/meson.build   |   7 +
 config/common_base   |   5 +
 doc/guides/tools/comp_perf.rst   |  73 ++
 10 files changed, 1662 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build
 create mode 100644 doc/guides/tools/comp_perf.rst

-- 
2.7.4



[dpdk-dev] [PATCH 3/3] doc/guides/tools: add doc file

2018-10-01 Thread Tomasz Jozwiak
Added initial version of compression performance test
description file.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 MAINTAINERS|  5 +++
 doc/guides/tools/comp_perf.rst | 73 ++
 2 files changed, 78 insertions(+)
 create mode 100644 doc/guides/tools/comp_perf.rst

diff --git a/MAINTAINERS b/MAINTAINERS
index 5967c1d..f8c3820 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1184,6 +1184,11 @@ M: Bernard Iremonger 
 F: app/test-pmd/
 F: doc/guides/testpmd_app_ug/
 
+Compression performance test application
+M: De Lara Guarch, Pablo 
+F: app/test-compress-perf/
+F: doc/guides/tools/comp_perf.rst
+
 Crypto performance test application
 M: Declan Doherty 
 F: app/test-crypto-perf/
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
new file mode 100644
index 000..14abe8b
--- /dev/null
+++ b/doc/guides/tools/comp_perf.rst
@@ -0,0 +1,73 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+Copyright(c) 2018 Intel Corporation.
+
+dpdk-test-crypto-perf Application
+=
+
+The ``dpdk-test-compress-perf`` tool is a Data Plane Development Kit (DPDK)
+utility that allows measuring performance parameters of PMDs available in the
+compress tree. The application reads the data from a file (--input-file),
+dumps all the file into a buffer and fill out the data of input mbufs,
+which are passed to compress device with compression operations.
+Then, the output buffers are fed into the decompression stage, and the resulted
+data is compared against the original data (verification phase). After that,
+a number of iterations are performed, compressing first and decompressing 
later,
+to check the throughput rate
+(showing cycles/iteration, cycles/Byte and Gbps, for compression and 
decompression).
+
+.. Note::
+
+This is the initial version of this document
+
+Command line options
+
+
+ ``--driver-name NAME``: compress driver to use
+
+ ``--input-file NAME``: file to compress and decompress
+
+ ``--extended-input-sz N``: extend file data up to this size (default: no 
extension)
+
+ ``--seg-sz N``: size of segment to store the data (default: 2048)
+
+ ``--burst-sz N``: compress operation burst size
+
+ ``--pool-sz N``: mempool size for compress operations/mbufs (default: 8192)
+
+ ``--max-num-sgl-segs N``: maximum number of segments for each mbuf (default: 
65535)
+
+ ``--num-iter N``: number of times the file will be compressed/decompressed 
(default: 1)
+
+ ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
+
+ ``--huffman-enc [fixed/dynamic/default]``: Huffman encoding (default: dynamic)
+
+ ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
+
+ ``--window-sz N``: base two log value of compression window size (default: 
max supported by PMD)
+
+ ``-h``: prints this help
+
+
+Compiling the Application
+-
+
+**Step 1: PMD setting**
+
+The ``dpdk-test-compress-perf`` tool depends on compression device drivers PMD 
which
+can be disabled by default in the build configuration file ``common_base``.
+The compression device drivers PMD which should be tested can be enabled by 
setting::
+
+   CONFIG_RTE_LIBRTE_PMD_ISAL=y
+
+
+Running the Application
+---
+
+The tool application has a number of command line options. Here is the sample 
command line:
+
+.. code-block:: console
+
+   ./build/app/dpdk-test-compress-perf  -l 4 -- --driver-name compress_qat 
--input-file test.txt --seg-sz 8192
+--compress-level 1:1:9 --num-iter 10 --extended-input-sz 1048576  
--max-num-sgl-segs 16 --huffman-enc fixed
+
-- 
2.7.4



[dpdk-dev] [PATCH 1/3] app/compress-perf: add parser

2018-10-01 Thread Tomasz Jozwiak
Added parser part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/Makefile |   4 +
 app/meson.build  |   1 +
 app/test-compress-perf/Makefile  |  16 +
 app/test-compress-perf/comp_perf_options.h   |  59 +++
 app/test-compress-perf/comp_perf_options_parse.c | 596 +++
 app/test-compress-perf/main.c|  52 ++
 app/test-compress-perf/meson.build   |   7 +
 config/common_base   |   5 +
 8 files changed, 740 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build

diff --git a/app/Makefile b/app/Makefile
index 069fa98..d6641ef 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -11,6 +11,10 @@ ifeq ($(CONFIG_RTE_LIBRTE_BBDEV),y)
 DIRS-$(CONFIG_RTE_TEST_BBDEV) += test-bbdev
 endif
 
+ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV),y)
+DIRS-$(CONFIG_RTE_APP_COMPRESS_PERF) += test-compress-perf
+endif
+
 ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
 DIRS-$(CONFIG_RTE_APP_CRYPTO_PERF) += test-crypto-perf
 endif
diff --git a/app/meson.build b/app/meson.build
index 99e0b93..c2ebb11 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -4,6 +4,7 @@
 apps = ['pdump',
'proc-info',
'test-bbdev',
+   'test-compress-perf',
'test-crypto-perf',
'test-eventdev',
'test-pmd']
diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
new file mode 100644
index 000..8aa7a22
--- /dev/null
+++ b/app/test-compress-perf/Makefile
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Intel Corporation
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+APP = dpdk-test-compress-perf
+
+CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -O3
+
+# all source are stored in SRCS-y
+SRCS-y := main.c
+SRCS-y += comp_perf_options_parse.c
+
+include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
new file mode 100644
index 000..7516ea0
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#define MAX_DRIVER_NAME64
+#define MAX_INPUT_FILE_NAME64
+#define MAX_LIST   32
+
+enum comp_operation {
+   COMPRESS_ONLY,
+   DECOMPRESS_ONLY,
+   COMPRESS_DECOMPRESS
+};
+
+struct range_list {
+   uint8_t min;
+   uint8_t max;
+   uint8_t inc;
+   uint8_t count;
+   uint8_t list[MAX_LIST];
+};
+
+struct comp_test_data {
+   char driver_name[64];
+   char input_file[64];
+   struct rte_mbuf **comp_bufs;
+   struct rte_mbuf **decomp_bufs;
+   uint32_t total_bufs;
+   uint8_t *input_data;
+   size_t input_data_sz;
+   uint8_t *compressed_data;
+   uint8_t *decompressed_data;
+   struct rte_mempool *comp_buf_pool;
+   struct rte_mempool *decomp_buf_pool;
+   struct rte_mempool *op_pool;
+   int8_t cdev_id;
+   uint16_t seg_sz;
+   uint16_t burst_sz;
+   uint32_t pool_sz;
+   uint32_t num_iter;
+   uint16_t max_sgl_segs;
+   enum rte_comp_huffman huffman_enc;
+   enum comp_operation test_op;
+   int window_sz;
+   struct range_list level;
+   /* Store TSC duration for all levels (including level 0) */
+   uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+};
+
+int
+comp_perf_options_parse(struct comp_test_data *test_data, int argc,
+   char **argv);
+
+void
+comp_perf_options_default(struct comp_test_data *test_data);
+
+int
+comp_perf_options_check(struct comp_test_data *test_data);
diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
new file mode 100644
index 000..bef4d2f
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -0,0 +1,596 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include "comp_perf_options.h"
+
+#define CPERF_DRIVER_NAME  ("driver-name")
+#define CPERF_TEST_FILE("input-file")
+#define CPERF_SEG_SIZE ("seg-sz")
+#define CPERF_BURST_SIZE   ("burst-sz")
+#define CPERF_EXTENDED_SIZE("extended-input-sz")
+#define CPERF_POOL_SIZE("pool-sz")
+

[dpdk-dev] [PATCH 2/3] app/compress-perf: add performance measurement

2018-10-01 Thread Tomasz Jozwiak
Added performance measurement part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/main.c | 844 ++
 1 file changed, 844 insertions(+)

diff --git a/app/test-compress-perf/main.c b/app/test-compress-perf/main.c
index f52b98d..093dfaf 100644
--- a/app/test-compress-perf/main.c
+++ b/app/test-compress-perf/main.c
@@ -5,13 +5,721 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include "comp_perf_options.h"
 
+#define NUM_MAX_XFORMS 16
+#define NUM_MAX_INFLIGHT_OPS 512
+#define EXPANSE_RATIO 1.05
+#define MIN_ISAL_SIZE 8
+
+#define DIV_CEIL(a, b)  ((a) / (b) + ((a) % (b) != 0))
+
+static int
+param_range_check(uint16_t size, const struct rte_param_log2_range *range)
+{
+   unsigned int next_size;
+
+   /* Check lower/upper bounds */
+   if (size < range->min)
+   return -1;
+
+   if (size > range->max)
+   return -1;
+
+   /* If range is actually only one value, size is correct */
+   if (range->increment == 0)
+   return 0;
+
+   /* Check if value is one of the supported sizes */
+   for (next_size = range->min; next_size <= range->max;
+   next_size += range->increment)
+   if (size == next_size)
+   return 0;
+
+   return -1;
+}
+
+static int
+comp_perf_check_capabilities(struct comp_test_data *test_data)
+{
+   const struct rte_compressdev_capabilities *cap;
+
+   cap = rte_compressdev_capability_get(test_data->cdev_id,
+RTE_COMP_ALGO_DEFLATE);
+
+   if (cap == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support DEFLATE\n");
+   return -1;
+   }
+
+   uint64_t comp_flags = cap->comp_feature_flags;
+
+   /* Huffman enconding */
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_FIXED &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Fixed Huffman\n");
+   return -1;
+   }
+
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_DYNAMIC &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Dynamic Huffman\n");
+   return -1;
+   }
+
+   /* Window size */
+   if (test_data->window_sz != -1) {
+   if (param_range_check(test_data->window_sz, &cap->window_size)
+   < 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support "
+   "this window size\n");
+   return -1;
+   }
+   } else
+   /* Set window size to PMD maximum if none was specified */
+   test_data->window_sz = cap->window_size.max;
+
+   /* Check if chained mbufs is supported */
+   if (test_data->max_sgl_segs > 1  &&
+   (comp_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0) {
+   RTE_LOG(INFO, USER1, "Compress device does not support "
+   "chained mbufs. Max SGL segments set to 1\n");
+   test_data->max_sgl_segs = 1;
+   }
+
+   /* Level 0 support */
+   if (test_data->level.min == 0 &&
+   (comp_flags & RTE_COMP_FF_NONCOMPRESSED_BLOCKS) == 0) {
+   RTE_LOG(ERR, USER1, "Compress device does not support "
+   "level 0 (no compression)\n");
+   return -1;
+   }
+
+   return 0;
+}
+
+static int
+comp_perf_allocate_memory(struct comp_test_data *test_data)
+{
+   /* Number of segments for input and output
+* (compression and decompression)
+*/
+   uint32_t total_segs = DIV_CEIL(test_data->input_data_sz,
+   test_data->seg_sz);
+   test_data->comp_buf_pool = rte_pktmbuf_pool_create("comp_buf_pool",
+   total_segs,
+   0, 0, test_data->seg_sz + RTE_PKTMBUF_HEADROOM,
+   rte_socket_id());
+   if (test_data->comp_buf_pool == NULL) {
+   RTE_LOG(ERR, USER1, "Mbuf mempool could not be created\n");
+   return -1;
+   }
+
+   test_data->decomp_buf_pool = rte_pktmbuf_pool_create("decomp_buf_pool",
+   total_segs,
+   0, 0, test_data->seg_sz + RTE_PKTMBUF_HEAD

[dpdk-dev] [PATCH v3 02/38] crypto/qat: add qat device files

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

This commit adds new qat_device file.
Following objects were moved:

qat_crypto.h => qat_device.h
- struct qat_pmd_private
- uint8_t cryptodev_qat_driver_id
- int qat_crypto_sym_qp_release (EXTERN)
- int qat_dev_config()
- int qat_dev_start()
- void qat_dev_stop()
- int qat_dev_close()
- void qat_dev_info_get()
qat_crypto.c => qat_device.c
- int qat_dev_config()
- int qat_dev_start()
- void qat_dev_stop()
- int qat_dev_close()
- void qat_dev_info_get()

Signed-off-by: ArkadiuszX Kusztal 
Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile |  1 +
 drivers/crypto/qat/meson.build  |  3 +-
 drivers/crypto/qat/qat_crypto.c | 51 -
 drivers/crypto/qat/qat_crypto.h | 22 +
 drivers/crypto/qat/qat_device.c | 57 +
 drivers/crypto/qat/qat_device.h | 36 +
 6 files changed, 97 insertions(+), 73 deletions(-)
 create mode 100644 drivers/crypto/qat/qat_device.c
 create mode 100644 drivers/crypto/qat/qat_device.h

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index 07266a5e9..6bdd11679 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -22,6 +22,7 @@ LDLIBS += -lrte_pci -lrte_bus_pci
 
 # library source files
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_crypto.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_adf/qat_algs_build_desc.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += rte_qat_cryptodev.c
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index 006cd6557..51630e31b 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -7,7 +7,8 @@ if not dep.found()
 endif
 sources = files('qat_crypto.c', 'qat_qp.c',
'qat_adf/qat_algs_build_desc.c',
-   'rte_qat_cryptodev.c')
+   'rte_qat_cryptodev.c',
+   'qat_device.c')
 includes += include_directories('qat_adf')
 deps += ['bus_pci']
 ext_deps += dep
diff --git a/drivers/crypto/qat/qat_crypto.c b/drivers/crypto/qat/qat_crypto.c
index d9ce2a136..928a50475 100644
--- a/drivers/crypto/qat/qat_crypto.c
+++ b/drivers/crypto/qat/qat_crypto.c
@@ -1609,57 +1609,6 @@ static inline uint32_t adf_modulo(uint32_t data, 
uint32_t shift)
return data - mult;
 }
 
-int qat_dev_config(__rte_unused struct rte_cryptodev *dev,
-   __rte_unused struct rte_cryptodev_config *config)
-{
-   PMD_INIT_FUNC_TRACE();
-   return 0;
-}
-
-int qat_dev_start(__rte_unused struct rte_cryptodev *dev)
-{
-   PMD_INIT_FUNC_TRACE();
-   return 0;
-}
-
-void qat_dev_stop(__rte_unused struct rte_cryptodev *dev)
-{
-   PMD_INIT_FUNC_TRACE();
-}
-
-int qat_dev_close(struct rte_cryptodev *dev)
-{
-   int i, ret;
-
-   PMD_INIT_FUNC_TRACE();
-
-   for (i = 0; i < dev->data->nb_queue_pairs; i++) {
-   ret = qat_crypto_sym_qp_release(dev, i);
-   if (ret < 0)
-   return ret;
-   }
-
-   return 0;
-}
-
-void qat_dev_info_get(struct rte_cryptodev *dev,
-   struct rte_cryptodev_info *info)
-{
-   struct qat_pmd_private *internals = dev->data->dev_private;
-
-   PMD_INIT_FUNC_TRACE();
-   if (info != NULL) {
-   info->max_nb_queue_pairs =
-   ADF_NUM_SYM_QPS_PER_BUNDLE *
-   ADF_NUM_BUNDLES_PER_DEV;
-   info->feature_flags = dev->feature_flags;
-   info->capabilities = internals->qat_dev_capabilities;
-   info->sym.max_nb_sessions = internals->max_nb_sessions;
-   info->driver_id = cryptodev_qat_driver_id;
-   info->pci_dev = RTE_DEV_TO_PCI(dev->device);
-   }
-}
-
 void qat_crypto_sym_stats_get(struct rte_cryptodev *dev,
struct rte_cryptodev_stats *stats)
 {
diff --git a/drivers/crypto/qat/qat_crypto.h b/drivers/crypto/qat/qat_crypto.h
index 5190d25e5..46f03ccde 100644
--- a/drivers/crypto/qat/qat_crypto.h
+++ b/drivers/crypto/qat/qat_crypto.h
@@ -9,6 +9,7 @@
 #include 
 
 #include "qat_common.h"
+#include "qat_device.h"
 #include "qat_crypto_capabilities.h"
 
 /*
@@ -64,27 +65,6 @@ struct qat_qp {
enum qat_device_gen qat_dev_gen;
 } __rte_cache_aligned;
 
-/** private data structure for each QAT device */
-struct qat_pmd_private {
-   unsigned max_nb_queue_pairs;
-   /**< Max number of queue pairs supported by device */
-   unsigned max_nb_sessions;
-   /**< Max number of sessions supported by device */
-   enum qat_device_gen qat_dev_gen;
-   /**< QAT device generation */
-   const struct rte_cryptodev_capabilities *qat_dev_capabilities;
-};
-
-extern uint8_t cryptodev_qat_driver_id;
-
-int qat_dev_config(struct rte_cryptodev *dev,
-   struct rte_cryptodev_config *config);
-int qat_dev_start(struct rte_cryptodev *dev);
-void qat_dev_stop(st

[dpdk-dev] [PATCH v3 01/38] crypto/qat: add qat common header

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

This commit adds qat_common.h header file.
Following objects were moved to it:

qat_algs.h =>. qat_common.h
- struct qat_alg_buf
- struct qat_alg_buf_list
- struct qat_crypto_op_cookie
- QAT_SGL_MAX_NUMBER
qat_crypto.h => qat_common.h
- CRYPTODEV_NAME_QAT_SYM_PMD

Signed-off-by: ArkadiuszX Kusztal 
Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_adf/qat_algs.h | 25 --
 drivers/crypto/qat/qat_common.h   | 47 +++
 drivers/crypto/qat/qat_crypto.h   |  9 +
 3 files changed, 48 insertions(+), 33 deletions(-)
 create mode 100644 drivers/crypto/qat/qat_common.h

diff --git a/drivers/crypto/qat/qat_adf/qat_algs.h 
b/drivers/crypto/qat/qat_adf/qat_algs.h
index 88bd5f00e..6c49c6529 100644
--- a/drivers/crypto/qat/qat_adf/qat_algs.h
+++ b/drivers/crypto/qat/qat_adf/qat_algs.h
@@ -32,12 +32,6 @@
ICP_QAT_HW_CIPHER_KEY_CONVERT, \
ICP_QAT_HW_CIPHER_DECRYPT)
 
-struct qat_alg_buf {
-   uint32_t len;
-   uint32_t resrvd;
-   uint64_t addr;
-} __rte_packed;
-
 enum qat_crypto_proto_flag {
QAT_CRYPTO_PROTO_FLAG_NONE = 0,
QAT_CRYPTO_PROTO_FLAG_CCM = 1,
@@ -46,25 +40,6 @@ enum qat_crypto_proto_flag {
QAT_CRYPTO_PROTO_FLAG_ZUC = 4
 };
 
-/*
- * Maximum number of SGL entries
- */
-#define QAT_SGL_MAX_NUMBER 16
-
-struct qat_alg_buf_list {
-   uint64_t resrvd;
-   uint32_t num_bufs;
-   uint32_t num_mapped_bufs;
-   struct qat_alg_buf bufers[QAT_SGL_MAX_NUMBER];
-} __rte_packed __rte_cache_aligned;
-
-struct qat_crypto_op_cookie {
-   struct qat_alg_buf_list qat_sgl_list_src;
-   struct qat_alg_buf_list qat_sgl_list_dst;
-   rte_iova_t qat_sgl_src_phys_addr;
-   rte_iova_t qat_sgl_dst_phys_addr;
-};
-
 /* Common content descriptor */
 struct qat_alg_cd {
struct icp_qat_hw_cipher_algo_blk cipher;
diff --git a/drivers/crypto/qat/qat_common.h b/drivers/crypto/qat/qat_common.h
new file mode 100644
index 0..293b6f700
--- /dev/null
+++ b/drivers/crypto/qat/qat_common.h
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+#ifndef _QAT_COMMON_H_
+#define _QAT_COMMON_H_
+
+#include 
+
+/**< Intel(R) QAT Symmetric Crypto PMD device name */
+#define CRYPTODEV_NAME_QAT_SYM_PMD crypto_qat
+
+/*
+ * Maximum number of SGL entries
+ */
+#define QAT_SGL_MAX_NUMBER 16
+
+/* Intel(R) QuickAssist Technology device generation is enumerated
+ * from one according to the generation of the device
+ */
+
+enum qat_device_gen {
+   QAT_GEN1 = 1,
+   QAT_GEN2,
+};
+
+/**< Common struct for scatter-gather list operations */
+struct qat_alg_buf {
+   uint32_t len;
+   uint32_t resrvd;
+   uint64_t addr;
+} __rte_packed;
+
+struct qat_alg_buf_list {
+   uint64_t resrvd;
+   uint32_t num_bufs;
+   uint32_t num_mapped_bufs;
+   struct qat_alg_buf bufers[QAT_SGL_MAX_NUMBER];
+} __rte_packed __rte_cache_aligned;
+
+struct qat_crypto_op_cookie {
+   struct qat_alg_buf_list qat_sgl_list_src;
+   struct qat_alg_buf_list qat_sgl_list_dst;
+   phys_addr_t qat_sgl_src_phys_addr;
+   phys_addr_t qat_sgl_dst_phys_addr;
+};
+
+#endif /* _QAT_QAT_COMMON_H_ */
diff --git a/drivers/crypto/qat/qat_crypto.h b/drivers/crypto/qat/qat_crypto.h
index 281a142b9..5190d25e5 100644
--- a/drivers/crypto/qat/qat_crypto.h
+++ b/drivers/crypto/qat/qat_crypto.h
@@ -8,11 +8,9 @@
 #include 
 #include 
 
+#include "qat_common.h"
 #include "qat_crypto_capabilities.h"
 
-#define CRYPTODEV_NAME_QAT_SYM_PMD crypto_qat
-/**< Intel QAT Symmetric Crypto PMD device name */
-
 /*
  * This macro rounds up a number to a be a multiple of
  * the alignment when the alignment is a power of 2
@@ -30,11 +28,6 @@
 
 struct qat_session;
 
-enum qat_device_gen {
-   QAT_GEN1 = 1,
-   QAT_GEN2,
-};
-
 /**
  * Structure associated with each queue.
  */
-- 
2.17.0



[dpdk-dev] [PATCH v3 03/38] crypto/qat: remove unused includes

2018-06-13 Thread Tomasz Jozwiak
This commit removes unused includes from qat_crypto.c

Signed-off-by: ArkadiuszX Kusztal 
Signed-off-by: Fiona Trahe 
Signed-off-by: Tomasz Jozwiak 
---
 drivers/crypto/qat/qat_crypto.c | 22 --
 1 file changed, 22 deletions(-)

diff --git a/drivers/crypto/qat/qat_crypto.c b/drivers/crypto/qat/qat_crypto.c
index 928a50475..7f2c2c86b 100644
--- a/drivers/crypto/qat/qat_crypto.c
+++ b/drivers/crypto/qat/qat_crypto.c
@@ -2,30 +2,8 @@
  * Copyright(c) 2015-2018 Intel Corporation
  */
 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
 #include 
 #include 
-#include 
-#include 
 #include 
 #include 
 #include 
-- 
2.17.0



[dpdk-dev] [PATCH v3 00/38] crypto/qat: refactor to support multiple services

2018-06-13 Thread Tomasz Jozwiak
From: Pablo de Lara 

The QAT crypto PMD was peppered with references to rte_cryptodev artefacts.
Also the pci device it presented to the API layer was entirely owned by the one
cryptodev device instance created by the probe.
This patchset refactors the PMD so one pci device can present out multiple 
different
device instances to implement different APIs, specifically cryptodev and 
compressdev instances.
The code is refactored into
 - common code which handles the pci device discovery, configuration,
   queue-pair setup, stats gathering and data-path enqueue and dequeue.
 - service-specific code for symmetric crypto, which is a thin layer
   implementing the cryptodev API and using the common code.
 - place-holder files for service-specific code to support asymmetric
   crypto and compression services in future.
The code is all still in the crypto/qat directory as it is functionally 
unchanged,
still only supporting a symmetric crypto service. The code will move to 
drivers/common,
/crypto and /compress in a future patch when this is needed for a compression 
PMD.

Changes for v3:
 - fixed some commit messages
 - fixed compilation issue in one of the patches
 - split two commits into multiple commits

Changes for v2:
 - fixed some bugs compiled in when debug enabled
 - added patch to remove MAX_NB_SESSIONS from config file
 - removed SPDX license patch as already applied
 - documented device name formats

Fiona Trahe (36):
  crypto/qat: add qat common header
  crypto/qat: add qat device files
  crypto/qat: add symmetric session file
  crypto/qat: change filename crypto to sym
  crypto/qat: rename fns for consistency
  crypto/qat: renamed sym-specific structs
  crypto/qat: make enqueue function generic
  crypto/qat: make dequeue function generic
  crypto/qat: move generic qp fn to qp file
  crypto/qat: separate sym-specific from generic qp setup
  crypto/qat: move sym-specific qp code to sym file
  crypto/qat: remove dependencies on cryptodev from common
  crypto/qat: move defines from sym to qp header file
  crypto/qat: create structures to support various generations
  crypto/qat: rename sgl related objects
  crypto/qat: move sgl related element to appropriate files
  crypto/qat: add QAT PCI device struct
  crypto/qat: use generic driver name for PCI registration
  crypto/qat: move to using new device structure
  crypto/qat: use common stats structures
  crypto/qat: rename functions which depend on cryptodev
  crypto/qat: move code into appropriate files
  crypto/qat: add lock around csr access and change logic
  crypto/qat: remove incorrect usage of bundle number
  crypto/qat: rename variables
  crypto/qat: modify debug message
  crypto/qat: free cookie pool on queue creation error
  crypto/qat: remove unused macro
  crypto/qat: move macro to common file
  crypto/qat: register appropriately named device
  crypto/qat: add max PCI devices to config file
  crypto/qat: optimize adf modulo function
  crypto/qat: remove unused arguments
  crypto/qat: make response process function inline
  crypto/qat: check for service type
  doc/qat: specify QAT driver and device name formats

Tomasz Jozwiak (2):
  crypto/qat: remove unused includes
  crypto/qat: remove configurable max number of sessions

 config/common_base|6 +-
 config/rte_config.h   |7 +-
 doc/guides/cryptodevs/qat.rst |   12 +
 drivers/crypto/qat/Makefile   |   10 +-
 drivers/crypto/qat/meson.build|9 +-
 .../qat/qat_adf/adf_transport_access_macros.h |9 +-
 drivers/crypto/qat/qat_adf/qat_algs.h |  126 --
 drivers/crypto/qat/qat_asym_pmd.c |   17 +
 drivers/crypto/qat/qat_asym_pmd.h |   15 +
 drivers/crypto/qat/qat_common.c   |  107 ++
 drivers/crypto/qat/qat_common.h   |   76 +
 drivers/crypto/qat/qat_comp_pmd.c |   18 +
 drivers/crypto/qat/qat_comp_pmd.h |   29 +
 drivers/crypto/qat/qat_crypto.c   | 1696 -
 drivers/crypto/qat/qat_crypto.h   |  150 --
 drivers/crypto/qat/qat_device.c   |  242 +++
 drivers/crypto/qat/qat_device.h   |   78 +
 drivers/crypto/qat/qat_qp.c   |  463 +++--
 drivers/crypto/qat/qat_qp.h   |  106 ++
 drivers/crypto/qat/qat_sym.c  |  568 ++
 drivers/crypto/qat/qat_sym.h  |  154 ++
 ..._capabilities.h => qat_sym_capabilities.h} |6 +-
 drivers/crypto/qat/qat_sym_pmd.c  |  335 
 drivers/crypto/qat/qat_sym_pmd.h  |   40 +
 ...at_algs_build_desc.c => qat_sym_session.c} |  786 +++-
 drivers/crypto/qat/qat_sym_session.h  |  143 ++
 drivers/crypto/qat/rte_qat_cryptodev.c|  180 --
 27 files changed, 3042 insertions(+), 2346 deletions(-)
 delete mode 100644 drivers/crypto/qat/qat_adf/qat_algs.h
 create mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 create mode 

[dpdk-dev] [PATCH v3 07/38] crypto/qat: renamed sym-specific structs

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

qat_session   -> qat_sym_session
qat_crypto_proto_flag -> qat_sym_proto_flag
qat_alg_cd-> qat_sym_cd
qat_crypto_op_cookie  -> qat_sym_op_cookie
qat_gen1_capabilities -> qat_gen1_sym_capabilities
qat_gen2_capabilities -> qat_gen2_sym_capabilities

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_common.h|  4 ++--
 drivers/crypto/qat/qat_qp.c|  8 
 drivers/crypto/qat/qat_sym.c   | 19 -
 drivers/crypto/qat/qat_sym.h   |  2 +-
 drivers/crypto/qat/qat_sym_session.c   | 28 +-
 drivers/crypto/qat/qat_sym_session.h   | 20 +-
 drivers/crypto/qat/rte_qat_cryptodev.c |  8 
 7 files changed, 45 insertions(+), 44 deletions(-)

diff --git a/drivers/crypto/qat/qat_common.h b/drivers/crypto/qat/qat_common.h
index 293b6f700..7802e96f9 100644
--- a/drivers/crypto/qat/qat_common.h
+++ b/drivers/crypto/qat/qat_common.h
@@ -37,11 +37,11 @@ struct qat_alg_buf_list {
struct qat_alg_buf bufers[QAT_SGL_MAX_NUMBER];
 } __rte_packed __rte_cache_aligned;
 
-struct qat_crypto_op_cookie {
+struct qat_sym_op_cookie {
struct qat_alg_buf_list qat_sgl_list_src;
struct qat_alg_buf_list qat_sgl_list_dst;
phys_addr_t qat_sgl_src_phys_addr;
phys_addr_t qat_sgl_dst_phys_addr;
 };
 
-#endif /* _QAT_QAT_COMMON_H_ */
+#endif /* _QAT_COMMON_H_ */
diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index 23a9d5f01..fb9c2a7ef 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -165,7 +165,7 @@ int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
if (qp->op_cookie_pool == NULL)
qp->op_cookie_pool = rte_mempool_create(op_cookie_pool_name,
qp->nb_descriptors,
-   sizeof(struct qat_crypto_op_cookie), 64, 0,
+   sizeof(struct qat_sym_op_cookie), 64, 0,
NULL, NULL, NULL, NULL, socket_id,
0);
if (!qp->op_cookie_pool) {
@@ -180,17 +180,17 @@ int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
goto create_err;
}
 
-   struct qat_crypto_op_cookie *sql_cookie =
+   struct qat_sym_op_cookie *sql_cookie =
qp->op_cookies[i];
 
sql_cookie->qat_sgl_src_phys_addr =
rte_mempool_virt2iova(sql_cookie) +
-   offsetof(struct qat_crypto_op_cookie,
+   offsetof(struct qat_sym_op_cookie,
qat_sgl_list_src);
 
sql_cookie->qat_sgl_dst_phys_addr =
rte_mempool_virt2iova(sql_cookie) +
-   offsetof(struct qat_crypto_op_cookie,
+   offsetof(struct qat_sym_op_cookie,
qat_sgl_list_dst);
}
 
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index ae521c2b1..2dfdc9cce 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -88,10 +88,10 @@ adf_modulo(uint32_t data, uint32_t shift);
 
 static inline int
 qat_sym_build_request(struct rte_crypto_op *op, uint8_t *out_msg,
-   struct qat_crypto_op_cookie *qat_op_cookie, struct qat_qp *qp);
+   struct qat_sym_op_cookie *qat_op_cookie, struct qat_qp *qp);
 
 static inline uint32_t
-qat_bpicipher_preprocess(struct qat_session *ctx,
+qat_bpicipher_preprocess(struct qat_sym_session *ctx,
struct rte_crypto_op *op)
 {
int block_len = qat_cipher_get_block_size(ctx->qat_cipher_alg);
@@ -146,7 +146,7 @@ qat_bpicipher_preprocess(struct qat_session *ctx,
 }
 
 static inline uint32_t
-qat_bpicipher_postprocess(struct qat_session *ctx,
+qat_bpicipher_postprocess(struct qat_sym_session *ctx,
struct rte_crypto_op *op)
 {
int block_len = qat_cipher_get_block_size(ctx->qat_cipher_alg);
@@ -329,10 +329,11 @@ qat_sym_pmd_dequeue_op_burst(void *qp, struct 
rte_crypto_op **ops,
resp_msg->comn_hdr.comn_status)) {
rx_op->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
} else {
-   struct qat_session *sess = (struct qat_session *)
+   struct qat_sym_session *sess =
+   (struct qat_sym_session *)
get_session_private_data(
-   rx_op->sym->session,
-   cryptodev_qat_driver_id);
+   rx_op->sym->session,
+   cryptodev_qat_driver_id);
 
if

[dpdk-dev] [PATCH v3 05/38] crypto/qat: change filename crypto to sym

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

This commit renames qat_crypto.c/h to qat_sym.c/h
And makes a few whitespace changes to resolve line-length
issues.

Signed-off-by: ArkadiuszX Kusztal 
Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile   |  2 +-
 drivers/crypto/qat/meson.build|  2 +-
 drivers/crypto/qat/qat_qp.c   |  2 +-
 .../crypto/qat/{qat_crypto.c => qat_sym.c}| 60 +--
 .../crypto/qat/{qat_crypto.h => qat_sym.h}|  0
 drivers/crypto/qat/rte_qat_cryptodev.c|  2 +-
 6 files changed, 33 insertions(+), 35 deletions(-)
 rename drivers/crypto/qat/{qat_crypto.c => qat_sym.c} (95%)
 rename drivers/crypto/qat/{qat_crypto.h => qat_sym.h} (100%)

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index c63c1515e..8cb802b9d 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -21,7 +21,7 @@ LDLIBS += -lrte_cryptodev
 LDLIBS += -lrte_pci -lrte_bus_pci
 
 # library source files
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_crypto.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index be4282a83..e596006da 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -5,7 +5,7 @@ dep = dependency('libcrypto', required: false)
 if not dep.found()
build = false
 endif
-sources = files('qat_crypto.c', 'qat_qp.c',
+sources = files('qat_sym.c', 'qat_qp.c',
'qat_sym_session.c',
'rte_qat_cryptodev.c',
'qat_device.c')
diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index ee3b30a36..794a8d7c9 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -13,7 +13,7 @@
 #include 
 
 #include "qat_logs.h"
-#include "qat_crypto.h"
+#include "qat_sym.h"
 #include "adf_transport_access_macros.h"
 
 #define ADF_MAX_SYM_DESC   4096
diff --git a/drivers/crypto/qat/qat_crypto.c b/drivers/crypto/qat/qat_sym.c
similarity index 95%
rename from drivers/crypto/qat/qat_crypto.c
rename to drivers/crypto/qat/qat_sym.c
index 96a1b78f0..f5d542ae3 100644
--- a/drivers/crypto/qat/qat_crypto.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -6,15 +6,14 @@
 #include 
 #include 
 #include 
-#include 
-#include 
 #include 
+#include 
 
 #include 
 
 #include "qat_logs.h"
 #include "qat_sym_session.h"
-#include "qat_crypto.h"
+#include "qat_sym.h"
 #include "adf_transport_access_macros.h"
 
 #define BYTE_LENGTH8
@@ -500,8 +499,6 @@ qat_write_hw_desc_entry(struct rte_crypto_op *op, uint8_t 
*out_msg,
return -EINVAL;
}
 
-
-
qat_req = (struct icp_qat_fw_la_bulk_req *)out_msg;
rte_mov128((uint8_t *)qat_req, (const uint8_t *)&(ctx->fw_req));
qat_req->comn_mid.opaque_data = (uint64_t)(uintptr_t)op;
@@ -512,11 +509,11 @@ qat_write_hw_desc_entry(struct rte_crypto_op *op, uint8_t 
*out_msg,
ctx->qat_cmd == ICP_QAT_FW_LA_CMD_CIPHER_HASH) {
/* AES-GCM or AES-CCM */
if (ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_GALOIS_128 ||
-   ctx->qat_hash_alg == 
ICP_QAT_HW_AUTH_ALGO_GALOIS_64 ||
-   (ctx->qat_cipher_alg == 
ICP_QAT_HW_CIPHER_ALGO_AES128
-   && ctx->qat_mode == ICP_QAT_HW_CIPHER_CTR_MODE
-   && ctx->qat_hash_alg ==
-   
ICP_QAT_HW_AUTH_ALGO_AES_CBC_MAC)) {
+   ctx->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_GALOIS_64 ||
+   (ctx->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_AES128
+   && ctx->qat_mode == ICP_QAT_HW_CIPHER_CTR_MODE
+   && ctx->qat_hash_alg ==
+   ICP_QAT_HW_AUTH_ALGO_AES_CBC_MAC)) {
do_aead = 1;
} else {
do_auth = 1;
@@ -642,7 +639,6 @@ qat_write_hw_desc_entry(struct rte_crypto_op *op, uint8_t 
*out_msg,
qat_req->comn_hdr.serv_specif_flags,
ICP_QAT_FW_LA_GCM_IV_LEN_12_OCTETS);
}
-
set_cipher_iv(ctx->cipher_iv.length,
ctx->cipher_iv.offset,
cipher_param, op, qat_req);
@@ -650,15 +646,14 @@ qat_write_hw_desc_entry(struct rte_crypto_op *op, uint8_t 
*out_msg,
} else if (ctx->qat_hash_alg ==
ICP_QAT_HW_AUTH_ALGO_AES_CBC_MAC) {
 
-   /* In case of AES-CCM this may point to user selected 
memory
-* or iv offset in cypto_op
+   /* In case of AE

[dpdk-dev] [PATCH v3 06/38] crypto/qat: rename fns for consistency

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Rename fn names to shorten them, i.e.
  qat_crypto_sym_xxx to qat_sym_xxx
  _content_desc_ to _cd_
Renaming symmetric crypto specific with consistent names:
  qat_crypto_set_session_parameters->qat_sym_set_session_parameters
  qat_write_hw_desc_entry()->qat_sym_build_request()
  qat_alg_xxx ->qat_sym_xxx
  qat_sym_xxx_session_yyy()->qat_sym_session_xxx_yyy()
Removed unused prototypes:
  qat_get_inter_state_size()
  qat_pmd_session_mempool_create()
Removed 2 unnecessary extern declarations

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_device.c|   2 +-
 drivers/crypto/qat/qat_device.h|   2 +-
 drivers/crypto/qat/qat_qp.c|   6 +-
 drivers/crypto/qat/qat_sym.c   |  14 +--
 drivers/crypto/qat/qat_sym.h   |  22 ++---
 drivers/crypto/qat/qat_sym_session.c   | 131 -
 drivers/crypto/qat/qat_sym_session.h   |  53 +-
 drivers/crypto/qat/rte_qat_cryptodev.c |  18 ++--
 8 files changed, 123 insertions(+), 125 deletions(-)

diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index c2bf9b7a7..ac6bd1af6 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -30,7 +30,7 @@ int qat_dev_close(struct rte_cryptodev *dev)
PMD_INIT_FUNC_TRACE();
 
for (i = 0; i < dev->data->nb_queue_pairs; i++) {
-   ret = qat_crypto_sym_qp_release(dev, i);
+   ret = qat_sym_qp_release(dev, i);
if (ret < 0)
return ret;
}
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index 5c48fdb93..2cb8e7612 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -11,7 +11,7 @@
 
 extern uint8_t cryptodev_qat_driver_id;
 
-extern int qat_crypto_sym_qp_release(struct rte_cryptodev *dev,
+extern int qat_sym_qp_release(struct rte_cryptodev *dev,
uint16_t queue_pair_id);
 
 /** private data structure for each QAT device */
diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index 794a8d7c9..23a9d5f01 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -79,7 +79,7 @@ queue_dma_zone_reserve(const char *queue_name, uint32_t 
queue_size,
socket_id, RTE_MEMZONE_IOVA_CONTIG, queue_size);
 }
 
-int qat_crypto_sym_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id,
+int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id,
const struct rte_cryptodev_qp_conf *qp_conf,
int socket_id, struct rte_mempool *session_pool __rte_unused)
 {
@@ -93,7 +93,7 @@ int qat_crypto_sym_qp_setup(struct rte_cryptodev *dev, 
uint16_t queue_pair_id,
 
/* If qp is already in use free ring memory and qp metadata. */
if (dev->data->queue_pairs[queue_pair_id] != NULL) {
-   ret = qat_crypto_sym_qp_release(dev, queue_pair_id);
+   ret = qat_sym_qp_release(dev, queue_pair_id);
if (ret < 0)
return ret;
}
@@ -209,7 +209,7 @@ int qat_crypto_sym_qp_setup(struct rte_cryptodev *dev, 
uint16_t queue_pair_id,
return -EFAULT;
 }
 
-int qat_crypto_sym_qp_release(struct rte_cryptodev *dev, uint16_t 
queue_pair_id)
+int qat_sym_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id)
 {
struct qat_qp *qp =
(struct qat_qp *)dev->data->queue_pairs[queue_pair_id];
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index f5d542ae3..ae521c2b1 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -87,7 +87,7 @@ static inline uint32_t
 adf_modulo(uint32_t data, uint32_t shift);
 
 static inline int
-qat_write_hw_desc_entry(struct rte_crypto_op *op, uint8_t *out_msg,
+qat_sym_build_request(struct rte_crypto_op *op, uint8_t *out_msg,
struct qat_crypto_op_cookie *qat_op_cookie, struct qat_qp *qp);
 
 static inline uint32_t
@@ -210,7 +210,7 @@ txq_write_tail(struct qat_qp *qp, struct qat_queue *q) {
 }
 
 uint16_t
-qat_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op **ops,
+qat_sym_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op **ops,
uint16_t nb_ops)
 {
register struct qat_queue *queue;
@@ -242,7 +242,7 @@ qat_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op 
**ops,
}
 
while (nb_ops_sent != nb_ops_possible) {
-   ret = qat_write_hw_desc_entry(*cur_op, base_addr + tail,
+   ret = qat_sym_build_request(*cur_op, base_addr + tail,
tmp_qp->op_cookies[tail / queue->msg_size], tmp_qp);
if (ret != 0) {
tmp_qp->stats.enqueue_err_count++;
@@ -299,7 +299,7 @@ void rxq_free_desc(struct qat_qp *qp, struct qat_queue *q)
 }
 
 uint16_t
-qat_pmd_dequeue_op_burst(void *qp, struct rte_crypto_op **ops,
+qat_sym_pmd_dequeue_op_burst(void *qp, struct rte_crypto_op **ops,
uint16_t n

[dpdk-dev] [PATCH v3 04/38] crypto/qat: add symmetric session file

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

This commit adds qat_sym_session.c/h files and moves objects
from qat_algs_build_desc and qat_algs.h

Following objects were moved:
qat_adf/qat_algs_build_desc.c => qat_sym_session.c
- all objects -
qat_adf/qat_algs.h => qat_sym_session.h
- enum qat_crypto_proto_flag
- struct qat_alg_cd
- struct qat_session
- int qat_get_inter_state_size()
- int qat_alg_aead_session_create_content_desc_cipher()
- int qat_alg_aead_session_create_content_desc_auth()
- void qat_alg_init_common_hdr()
- int qat_alg_validate_aes_key()
- int qat_alg_validate_aes_docsisbpi_key()
- int qat_alg_validate_snow3g_key()
- int qat_alg_validate_kasumi_key()
- int qat_alg_validate_3des_key()
- int qat_alg_validate_des_key()
- int qat_cipher_get_block_size()
- int qat_alg_validate_zuc_key()
-- all macros
qat_crypto.h => qat_sym_session.h
int qat_crypto_sym_configure_session()
int qat_crypto_set_session_parameters()
int qat_crypto_sym_configure_session_aead()
int qat_crypto_sym_configure_session_cipher()
int qat_crypto_sym_configure_session_auth()
int qat_alg_aead_session_create_content_desc_cipher()
int qat_alg_aead_session_create_content_desc_auth()
static struct rte_crypto_auth_xform qat_get_auth_xform()
static struct rte_crypto_cipher_xform qat_get_cipher_xform()

Signed-off-by: ArkadiuszX Kusztal 
Signed-off-by: Fiona Trahe 
Signed-off-by: Tomasz Jozwiak 
---
 drivers/crypto/qat/Makefile   |   2 +-
 drivers/crypto/qat/meson.build|   2 +-
 drivers/crypto/qat/qat_crypto.c   | 704 +
 drivers/crypto/qat/qat_crypto.h   |  36 -
 drivers/crypto/qat/qat_qp.c   |   1 -
 ...at_algs_build_desc.c => qat_sym_session.c} | 728 +-
 .../{qat_adf/qat_algs.h => qat_sym_session.h} |  63 +-
 drivers/crypto/qat/rte_qat_cryptodev.c|   1 +
 8 files changed, 775 insertions(+), 762 deletions(-)
 rename drivers/crypto/qat/{qat_adf/qat_algs_build_desc.c => qat_sym_session.c} 
(61%)
 rename drivers/crypto/qat/{qat_adf/qat_algs.h => qat_sym_session.h} (66%)

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index 6bdd11679..c63c1515e 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -24,7 +24,7 @@ LDLIBS += -lrte_pci -lrte_bus_pci
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_crypto.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_adf/qat_algs_build_desc.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += rte_qat_cryptodev.c
 
 # export include files
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index 51630e31b..be4282a83 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -6,7 +6,7 @@ if not dep.found()
build = false
 endif
 sources = files('qat_crypto.c', 'qat_qp.c',
-   'qat_adf/qat_algs_build_desc.c',
+   'qat_sym_session.c',
'rte_qat_cryptodev.c',
'qat_device.c')
 includes += include_directories('qat_adf')
diff --git a/drivers/crypto/qat/qat_crypto.c b/drivers/crypto/qat/qat_crypto.c
index 7f2c2c86b..96a1b78f0 100644
--- a/drivers/crypto/qat/qat_crypto.c
+++ b/drivers/crypto/qat/qat_crypto.c
@@ -13,7 +13,7 @@
 #include 
 
 #include "qat_logs.h"
-#include "qat_algs.h"
+#include "qat_sym_session.h"
 #include "qat_crypto.h"
 #include "adf_transport_access_macros.h"
 
@@ -23,46 +23,6 @@
  */
 #define BPI_MAX_ENCR_IV_LEN ICP_QAT_HW_AES_BLK_SZ
 
-static int
-qat_is_cipher_alg_supported(enum rte_crypto_cipher_algorithm algo,
-   struct qat_pmd_private *internals) {
-   int i = 0;
-   const struct rte_cryptodev_capabilities *capability;
-
-   while ((capability = &(internals->qat_dev_capabilities[i++]))->op !=
-   RTE_CRYPTO_OP_TYPE_UNDEFINED) {
-   if (capability->op != RTE_CRYPTO_OP_TYPE_SYMMETRIC)
-   continue;
-
-   if (capability->sym.xform_type != RTE_CRYPTO_SYM_XFORM_CIPHER)
-   continue;
-
-   if (capability->sym.cipher.algo == algo)
-   return 1;
-   }
-   return 0;
-}
-
-static int
-qat_is_auth_alg_supported(enum rte_crypto_auth_algorithm algo,
-   struct qat_pmd_private *internals) {
-   int i = 0;
-   const struct rte_cryptodev_capabilities *capability;
-
-   while ((capability = &(internals->qat_dev_capabilities[i++]))->op !=
-   RTE_CRYPTO_OP_TYPE_UNDEFINED) {
-   if (capability->op != RTE_CRYPTO_OP_TYPE_SYMMETRIC)
-   continue;
-
-   if (capability->sym.xform_type != RTE_CRYPTO_SYM_XFORM_AUTH)
-

[dpdk-dev] [PATCH v3 10/38] crypto/qat: move generic qp fn to qp file

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Move the generic enqueue and dequeue fns from
the qat_sym.c file to the qat_qp.c file
Move generic qp structs to a new qat_qp.h file

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c  | 152 +++
 drivers/crypto/qat/qat_qp.h  |  63 +++
 drivers/crypto/qat/qat_sym.c | 149 +-
 drivers/crypto/qat/qat_sym.h |  49 ---
 4 files changed, 216 insertions(+), 197 deletions(-)
 create mode 100644 drivers/crypto/qat/qat_qp.h

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index bae6cf114..56ea10242 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -13,7 +13,9 @@
 #include 
 
 #include "qat_logs.h"
+#include "qat_qp.h"
 #include "qat_sym.h"
+
 #include "adf_transport_access_macros.h"
 
 #define ADF_MAX_SYM_DESC   4096
@@ -450,3 +452,153 @@ static void adf_configure_queues(struct qat_qp *qp)
WRITE_CSR_RING_CONFIG(qp->mmap_bar_addr, queue->hw_bundle_number,
queue->hw_queue_number, queue_config);
 }
+
+
+static inline uint32_t adf_modulo(uint32_t data, uint32_t shift)
+{
+   uint32_t div = data >> shift;
+   uint32_t mult = div << shift;
+
+   return data - mult;
+}
+
+static inline void
+txq_write_tail(struct qat_qp *qp, struct qat_queue *q) {
+   WRITE_CSR_RING_TAIL(qp->mmap_bar_addr, q->hw_bundle_number,
+   q->hw_queue_number, q->tail);
+   q->nb_pending_requests = 0;
+   q->csr_tail = q->tail;
+}
+
+static inline
+void rxq_free_desc(struct qat_qp *qp, struct qat_queue *q)
+{
+   uint32_t old_head, new_head;
+   uint32_t max_head;
+
+   old_head = q->csr_head;
+   new_head = q->head;
+   max_head = qp->nb_descriptors * q->msg_size;
+
+   /* write out free descriptors */
+   void *cur_desc = (uint8_t *)q->base_addr + old_head;
+
+   if (new_head < old_head) {
+   memset(cur_desc, ADF_RING_EMPTY_SIG_BYTE, max_head - old_head);
+   memset(q->base_addr, ADF_RING_EMPTY_SIG_BYTE, new_head);
+   } else {
+   memset(cur_desc, ADF_RING_EMPTY_SIG_BYTE, new_head - old_head);
+   }
+   q->nb_processed_responses = 0;
+   q->csr_head = new_head;
+
+   /* write current head to CSR */
+   WRITE_CSR_RING_HEAD(qp->mmap_bar_addr, q->hw_bundle_number,
+   q->hw_queue_number, new_head);
+}
+
+uint16_t
+qat_enqueue_op_burst(void *qp, void **ops, uint16_t nb_ops)
+{
+   register struct qat_queue *queue;
+   struct qat_qp *tmp_qp = (struct qat_qp *)qp;
+   register uint32_t nb_ops_sent = 0;
+   register int ret;
+   uint16_t nb_ops_possible = nb_ops;
+   register uint8_t *base_addr;
+   register uint32_t tail;
+   int overflow;
+
+   if (unlikely(nb_ops == 0))
+   return 0;
+
+   /* read params used a lot in main loop into registers */
+   queue = &(tmp_qp->tx_q);
+   base_addr = (uint8_t *)queue->base_addr;
+   tail = queue->tail;
+
+   /* Find how many can actually fit on the ring */
+   tmp_qp->inflights16 += nb_ops;
+   overflow = tmp_qp->inflights16 - queue->max_inflights;
+   if (overflow > 0) {
+   tmp_qp->inflights16 -= overflow;
+   nb_ops_possible = nb_ops - overflow;
+   if (nb_ops_possible == 0)
+   return 0;
+   }
+
+   while (nb_ops_sent != nb_ops_possible) {
+   ret = tmp_qp->build_request(*ops, base_addr + tail,
+   tmp_qp->op_cookies[tail / queue->msg_size],
+   tmp_qp->qat_dev_gen);
+   if (ret != 0) {
+   tmp_qp->stats.enqueue_err_count++;
+   /*
+* This message cannot be enqueued,
+* decrease number of ops that wasn't sent
+*/
+   tmp_qp->inflights16 -= nb_ops_possible - nb_ops_sent;
+   if (nb_ops_sent == 0)
+   return 0;
+   goto kick_tail;
+   }
+
+   tail = adf_modulo(tail + queue->msg_size, queue->modulo);
+   ops++;
+   nb_ops_sent++;
+   }
+kick_tail:
+   queue->tail = tail;
+   tmp_qp->stats.enqueued_count += nb_ops_sent;
+   queue->nb_pending_requests += nb_ops_sent;
+   if (tmp_qp->inflights16 < QAT_CSR_TAIL_FORCE_WRITE_THRESH ||
+   queue->nb_pending_requests > QAT_CSR_TAIL_WRITE_THRESH) {
+   txq_write_tail(tmp_qp, queue);
+   }
+   return nb_ops_sent;
+}
+
+uint16_t
+qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops)
+{
+   struct qat_queue *rx_queue, *tx_queue;
+   struct qat_qp *tmp_qp = (struct qat_qp *)qp;
+   uint32_t head;
+   uint32_t resp_counter = 0;
+   uint8_t *resp_msg;
+
+   

[dpdk-dev] [PATCH v3 12/38] crypto/qat: move sym-specific qp code to sym file

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Move sym qp setup code from qat_qp.c to qat_sym.c

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c  | 78 ++--
 drivers/crypto/qat/qat_qp.h  |  6 +++
 drivers/crypto/qat/qat_sym.c | 75 ++
 3 files changed, 84 insertions(+), 75 deletions(-)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index 5a543f6cb..d1d2be34f 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -20,11 +20,7 @@
 
 #define ADF_MAX_DESC   4096
 #define ADF_MIN_DESC   128
-#define ADF_SYM_TX_RING_DESC_SIZE  128
-#define ADF_SYM_RX_RING_DESC_SIZE  32
-#define ADF_SYM_TX_QUEUE_STARTOFF  2
-/* Offset from bundle start to 1st Sym Tx queue */
-#define ADF_SYM_RX_QUEUE_STARTOFF  10
+
 #define ADF_ARB_REG_SLOT   0x1000
 #define ADF_ARB_RINGSRVARBEN_OFFSET0x19C
 
@@ -74,7 +70,7 @@ queue_dma_zone_reserve(const char *queue_name, uint32_t 
queue_size,
socket_id, RTE_MEMZONE_IOVA_CONTIG, queue_size);
 }
 
-static int qat_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id,
+int qat_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id,
struct qat_qp_config *qat_qp_conf)
 {
struct qat_qp *qp;
@@ -174,71 +170,7 @@ static int qat_qp_setup(struct rte_cryptodev *dev, 
uint16_t queue_pair_id,
return -EFAULT;
 }
 
-
-
-int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
-   const struct rte_cryptodev_qp_conf *qp_conf,
-   int socket_id, struct rte_mempool *session_pool __rte_unused)
-{
-   struct qat_qp *qp;
-   int ret = 0;
-   uint32_t i;
-   struct qat_qp_config qat_qp_conf;
-
-   /* If qp is already in use free ring memory and qp metadata. */
-   if (dev->data->queue_pairs[qp_id] != NULL) {
-   ret = qat_sym_qp_release(dev, qp_id);
-   if (ret < 0)
-   return ret;
-   }
-   if (qp_id >= (ADF_NUM_SYM_QPS_PER_BUNDLE *
-   ADF_NUM_BUNDLES_PER_DEV)) {
-   PMD_DRV_LOG(ERR, "qp_id %u invalid for this device", qp_id);
-   return -EINVAL;
-   }
-
-
-   qat_qp_conf.hw_bundle_num = (qp_id/ADF_NUM_SYM_QPS_PER_BUNDLE);
-   qat_qp_conf.tx_ring_num = (qp_id%ADF_NUM_SYM_QPS_PER_BUNDLE) +
-   ADF_SYM_TX_QUEUE_STARTOFF;
-   qat_qp_conf.rx_ring_num = (qp_id%ADF_NUM_SYM_QPS_PER_BUNDLE) +
-   ADF_SYM_RX_QUEUE_STARTOFF;
-   qat_qp_conf.tx_msg_size = ADF_SYM_TX_RING_DESC_SIZE;
-   qat_qp_conf.rx_msg_size = ADF_SYM_RX_RING_DESC_SIZE;
-   qat_qp_conf.build_request = qat_sym_build_request;
-   qat_qp_conf.process_response = qat_sym_process_response;
-   qat_qp_conf.cookie_size = sizeof(struct qat_sym_op_cookie);
-   qat_qp_conf.nb_descriptors = qp_conf->nb_descriptors;
-   qat_qp_conf.socket_id = socket_id;
-   qat_qp_conf.service_str = "sym";
-
-   ret = qat_qp_setup(dev, qp_id, &qat_qp_conf);
-   if (ret != 0)
-   return ret;
-
-   qp = (struct qat_qp *)dev->data->queue_pairs[qp_id];
-
-   for (i = 0; i < qp->nb_descriptors; i++) {
-
-   struct qat_sym_op_cookie *sql_cookie =
-   qp->op_cookies[i];
-
-   sql_cookie->qat_sgl_src_phys_addr =
-   rte_mempool_virt2iova(sql_cookie) +
-   offsetof(struct qat_sym_op_cookie,
-   qat_sgl_list_src);
-
-   sql_cookie->qat_sgl_dst_phys_addr =
-   rte_mempool_virt2iova(sql_cookie) +
-   offsetof(struct qat_sym_op_cookie,
-   qat_sgl_list_dst);
-   }
-
-   return ret;
-
-}
-
-static int qat_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id)
+int qat_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id)
 {
struct qat_qp *qp =
(struct qat_qp *)dev->data->queue_pairs[queue_pair_id];
@@ -273,10 +205,6 @@ static int qat_qp_release(struct rte_cryptodev *dev, 
uint16_t queue_pair_id)
 }
 
 
-int qat_sym_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id)
-{
-   return qat_qp_release(dev, queue_pair_id);
-}
 
 
 static void qat_queue_delete(struct qat_queue *queue)
diff --git a/drivers/crypto/qat/qat_qp.h b/drivers/crypto/qat/qat_qp.h
index edebb8773..0cdf37f61 100644
--- a/drivers/crypto/qat/qat_qp.h
+++ b/drivers/crypto/qat/qat_qp.h
@@ -77,4 +77,10 @@ qat_enqueue_op_burst(void *qp, void **ops, uint16_t nb_ops);
 uint16_t
 qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops);
 
+int
+qat_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id);
+
+int
+qat_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id,
+   struct qat_q

[dpdk-dev] [PATCH v3 08/38] crypto/qat: make enqueue function generic

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Queue-handling code in enqueue is made generic, so it can
be used by other services in future. This is done by
 - Removing all sym-specific refs in input params - replace with void ptrs.
 - Wrapping this generic enqueue with the sym-specific enqueue
   called through the API.
 - Setting a fn ptr for build_request in qp on qp creation
 - Passing void * params to this, in the service-specific implementation
   qat_sym_build_request cast back to sym structs.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c  |  1 +
 drivers/crypto/qat/qat_sym.c | 46 
 drivers/crypto/qat/qat_sym.h | 11 +
 3 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index fb9c2a7ef..d7d79f1af 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -197,6 +197,7 @@ int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
struct qat_pmd_private *internals
= dev->data->dev_private;
qp->qat_dev_gen = internals->qat_dev_gen;
+   qp->build_request = qat_sym_build_request;
 
dev->data->queue_pairs[queue_pair_id] = qp;
return 0;
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 2dfdc9cce..4e404749a 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -86,10 +86,6 @@ bpi_cipher_decrypt(uint8_t *src, uint8_t *dst,
 static inline uint32_t
 adf_modulo(uint32_t data, uint32_t shift);
 
-static inline int
-qat_sym_build_request(struct rte_crypto_op *op, uint8_t *out_msg,
-   struct qat_sym_op_cookie *qat_op_cookie, struct qat_qp *qp);
-
 static inline uint32_t
 qat_bpicipher_preprocess(struct qat_sym_session *ctx,
struct rte_crypto_op *op)
@@ -209,14 +205,12 @@ txq_write_tail(struct qat_qp *qp, struct qat_queue *q) {
q->csr_tail = q->tail;
 }
 
-uint16_t
-qat_sym_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op **ops,
-   uint16_t nb_ops)
+static uint16_t
+qat_enqueue_op_burst(void *qp, void **ops, uint16_t nb_ops)
 {
register struct qat_queue *queue;
struct qat_qp *tmp_qp = (struct qat_qp *)qp;
register uint32_t nb_ops_sent = 0;
-   register struct rte_crypto_op **cur_op = ops;
register int ret;
uint16_t nb_ops_possible = nb_ops;
register uint8_t *base_addr;
@@ -242,8 +236,9 @@ qat_sym_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op 
**ops,
}
 
while (nb_ops_sent != nb_ops_possible) {
-   ret = qat_sym_build_request(*cur_op, base_addr + tail,
-   tmp_qp->op_cookies[tail / queue->msg_size], tmp_qp);
+   ret = tmp_qp->build_request(*ops, base_addr + tail,
+   tmp_qp->op_cookies[tail / queue->msg_size],
+   tmp_qp->qat_dev_gen);
if (ret != 0) {
tmp_qp->stats.enqueue_err_count++;
/*
@@ -257,8 +252,8 @@ qat_sym_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op 
**ops,
}
 
tail = adf_modulo(tail + queue->msg_size, queue->modulo);
+   ops++;
nb_ops_sent++;
-   cur_op++;
}
 kick_tail:
queue->tail = tail;
@@ -298,6 +293,13 @@ void rxq_free_desc(struct qat_qp *qp, struct qat_queue *q)
q->hw_queue_number, new_head);
 }
 
+uint16_t
+qat_sym_pmd_enqueue_op_burst(void *qp, struct rte_crypto_op **ops,
+   uint16_t nb_ops)
+{
+   return qat_enqueue_op_burst(qp, (void **)ops, nb_ops);
+}
+
 uint16_t
 qat_sym_pmd_dequeue_op_burst(void *qp, struct rte_crypto_op **ops,
uint16_t nb_ops)
@@ -456,9 +458,10 @@ set_cipher_iv_ccm(uint16_t iv_length, uint16_t iv_offset,
iv_length);
 }
 
-static inline int
-qat_sym_build_request(struct rte_crypto_op *op, uint8_t *out_msg,
-   struct qat_sym_op_cookie *qat_op_cookie, struct qat_qp *qp)
+
+int
+qat_sym_build_request(void *in_op, uint8_t *out_msg,
+   void *op_cookie, enum qat_device_gen qat_dev_gen)
 {
int ret = 0;
struct qat_sym_session *ctx;
@@ -471,6 +474,9 @@ qat_sym_build_request(struct rte_crypto_op *op, uint8_t 
*out_msg,
uint32_t min_ofs = 0;
uint64_t src_buf_start = 0, dst_buf_start = 0;
uint8_t do_sgl = 0;
+   struct rte_crypto_op *op = (struct rte_crypto_op *)in_op;
+   struct qat_sym_op_cookie *cookie =
+   (struct qat_sym_op_cookie *)op_cookie;
 
 #ifdef RTE_LIBRTE_PMD_QAT_DEBUG_TX
if (unlikely(op->type != RTE_CRYPTO_OP_TYPE_SYMMETRIC)) {
@@ -494,7 +500,7 @@ qat_sym_build_request(struct rte_crypto_op *op, uint8_t 
*out_msg,
return -EINVAL;
}
 
-   if (unlikely(ctx->min_qat_dev_gen > qp->qat_dev_gen)) {
+   if (unlikely(ctx-

[dpdk-dev] [PATCH v3 11/38] crypto/qat: separate sym-specific from generic qp setup

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Extracted all sym-specific code from qp setup fns, leaving
generic qat_qp_setup fn and helper fns. Created a new
meta-data struct qat_qp_config to hold all the data needed
to create a qp, filled this out in the sym-specific code
and passed to the generic qp_setup fn.
No need now for rx and tx queue_create fns, one generic
queue_create fn replaces these.
Included the service name (e.g. "sym") in the qp memzone
and cookie pool names.

Signed-off-by: Fiona Trahe 
---
 .../qat/qat_adf/adf_transport_access_macros.h |   2 +
 drivers/crypto/qat/qat_qp.c   | 220 ++
 drivers/crypto/qat/qat_qp.h   |  17 ++
 3 files changed, 137 insertions(+), 102 deletions(-)

diff --git a/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h 
b/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
index bfdbc979f..8b88b69de 100644
--- a/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
+++ b/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
@@ -52,6 +52,8 @@
 
 #define ADF_NUM_BUNDLES_PER_DEV 1
 #define ADF_NUM_SYM_QPS_PER_BUNDLE  2
+#define ADF_RING_DIR_TX0
+#define ADF_RING_DIR_RX1
 
 /* Valid internal msg size values */
 #define ADF_MSG_SIZE_32 0x01
diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index 56ea10242..5a543f6cb 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -18,8 +18,8 @@
 
 #include "adf_transport_access_macros.h"
 
-#define ADF_MAX_SYM_DESC   4096
-#define ADF_MIN_SYM_DESC   128
+#define ADF_MAX_DESC   4096
+#define ADF_MIN_DESC   128
 #define ADF_SYM_TX_RING_DESC_SIZE  128
 #define ADF_SYM_RX_RING_DESC_SIZE  32
 #define ADF_SYM_TX_QUEUE_STARTOFF  2
@@ -34,16 +34,9 @@
 
 static int qat_qp_check_queue_alignment(uint64_t phys_addr,
uint32_t queue_size_bytes);
-static int qat_tx_queue_create(struct rte_cryptodev *dev,
-   struct qat_queue *queue, uint8_t id, uint32_t nb_desc,
-   int socket_id);
-static int qat_rx_queue_create(struct rte_cryptodev *dev,
-   struct qat_queue *queue, uint8_t id, uint32_t nb_desc,
-   int socket_id);
 static void qat_queue_delete(struct qat_queue *queue);
 static int qat_queue_create(struct rte_cryptodev *dev,
-   struct qat_queue *queue, uint32_t nb_desc, uint8_t desc_size,
-   int socket_id);
+   struct qat_queue *queue, struct qat_qp_config *, uint8_t dir);
 static int adf_verify_queue_size(uint32_t msg_size, uint32_t msg_num,
uint32_t *queue_size_for_csr);
 static void adf_configure_queues(struct qat_qp *queue);
@@ -81,29 +74,19 @@ queue_dma_zone_reserve(const char *queue_name, uint32_t 
queue_size,
socket_id, RTE_MEMZONE_IOVA_CONTIG, queue_size);
 }
 
-int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id,
-   const struct rte_cryptodev_qp_conf *qp_conf,
-   int socket_id, struct rte_mempool *session_pool __rte_unused)
+static int qat_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id,
+   struct qat_qp_config *qat_qp_conf)
 {
struct qat_qp *qp;
struct rte_pci_device *pci_dev;
-   int ret;
char op_cookie_pool_name[RTE_RING_NAMESIZE];
uint32_t i;
 
-   PMD_INIT_FUNC_TRACE();
 
-   /* If qp is already in use free ring memory and qp metadata. */
-   if (dev->data->queue_pairs[queue_pair_id] != NULL) {
-   ret = qat_sym_qp_release(dev, queue_pair_id);
-   if (ret < 0)
-   return ret;
-   }
-
-   if ((qp_conf->nb_descriptors > ADF_MAX_SYM_DESC) ||
-   (qp_conf->nb_descriptors < ADF_MIN_SYM_DESC)) {
+   if ((qat_qp_conf->nb_descriptors > ADF_MAX_DESC) ||
+   (qat_qp_conf->nb_descriptors < ADF_MIN_DESC)) {
PMD_DRV_LOG(ERR, "Can't create qp for %u descriptors",
-   qp_conf->nb_descriptors);
+   qat_qp_conf->nb_descriptors);
return -EINVAL;
}
 
@@ -115,13 +98,6 @@ int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
return -EINVAL;
}
 
-   if (queue_pair_id >=
-   (ADF_NUM_SYM_QPS_PER_BUNDLE *
-   ADF_NUM_BUNDLES_PER_DEV)) {
-   PMD_DRV_LOG(ERR, "qp_id %u invalid for this device",
-   queue_pair_id);
-   return -EINVAL;
-   }
/* Allocate the queue pair data structure. */
qp = rte_zmalloc("qat PMD qp metadata",
sizeof(*qp), RTE_CACHE_LINE_SIZE);
@@ -129,9 +105,9 @@ int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
PMD_DRV_LOG(ERR, "Failed to alloc mem for qp struct");
return -ENOMEM;
}
- 

[dpdk-dev] [PATCH v3 13/38] crypto/qat: remove dependencies on cryptodev from common

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Remove dependence on rte_cryptodev from common qp code
to facilitate being used by other device types in future.
Transferred required data into qat-specific structures.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_device.h| 11 -
 drivers/crypto/qat/qat_qp.c| 67 ++
 drivers/crypto/qat/qat_qp.h|  8 ++-
 drivers/crypto/qat/qat_sym.c   | 15 --
 drivers/crypto/qat/rte_qat_cryptodev.c |  4 +-
 5 files changed, 66 insertions(+), 39 deletions(-)

diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index 2cb8e7612..64706abae 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -14,7 +14,11 @@ extern uint8_t cryptodev_qat_driver_id;
 extern int qat_sym_qp_release(struct rte_cryptodev *dev,
uint16_t queue_pair_id);
 
-/** private data structure for each QAT device */
+/** private data structure for each QAT device.
+ * In this context a QAT device is a device offering only one service,
+ * so there can be more than 1 device on a pci_dev (VF),
+ * one for symmetric crypto, one for compression
+ */
 struct qat_pmd_private {
unsigned int max_nb_queue_pairs;
/**< Max number of queue pairs supported by device */
@@ -23,6 +27,11 @@ struct qat_pmd_private {
enum qat_device_gen qat_dev_gen;
/**< QAT device generation */
const struct rte_cryptodev_capabilities *qat_dev_capabilities;
+   /* QAT device capabilities */
+   struct rte_pci_device *pci_dev;
+   /**< PCI information. */
+   uint8_t dev_id;
+   /**< Device ID for this instance */
 };
 
 int qat_dev_config(struct rte_cryptodev *dev,
diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index d1d2be34f..b831ab420 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -6,7 +6,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
@@ -31,7 +30,7 @@
 static int qat_qp_check_queue_alignment(uint64_t phys_addr,
uint32_t queue_size_bytes);
 static void qat_queue_delete(struct qat_queue *queue);
-static int qat_queue_create(struct rte_cryptodev *dev,
+static int qat_queue_create(struct qat_pmd_private *qat_dev,
struct qat_queue *queue, struct qat_qp_config *, uint8_t dir);
 static int adf_verify_queue_size(uint32_t msg_size, uint32_t msg_num,
uint32_t *queue_size_for_csr);
@@ -70,14 +69,19 @@ queue_dma_zone_reserve(const char *queue_name, uint32_t 
queue_size,
socket_id, RTE_MEMZONE_IOVA_CONTIG, queue_size);
 }
 
-int qat_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id,
+int qat_qp_setup(struct qat_pmd_private *qat_dev,
+   struct qat_qp **qp_addr,
+   uint16_t queue_pair_id,
struct qat_qp_config *qat_qp_conf)
+
 {
struct qat_qp *qp;
-   struct rte_pci_device *pci_dev;
+   struct rte_pci_device *pci_dev = qat_dev->pci_dev;
char op_cookie_pool_name[RTE_RING_NAMESIZE];
uint32_t i;
 
+   PMD_DRV_LOG(DEBUG, "Setup qp %u on device %d gen %d",
+   queue_pair_id, qat_dev->dev_id, qat_dev->qat_dev_gen);
 
if ((qat_qp_conf->nb_descriptors > ADF_MAX_DESC) ||
(qat_qp_conf->nb_descriptors < ADF_MIN_DESC)) {
@@ -86,8 +90,6 @@ int qat_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
return -EINVAL;
}
 
-   pci_dev = RTE_DEV_TO_PCI(dev->device);
-
if (pci_dev->mem_resource[0].addr == NULL) {
PMD_DRV_LOG(ERR, "Could not find VF config space "
"(UIO driver attached?).");
@@ -114,14 +116,14 @@ int qat_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
qp->mmap_bar_addr = pci_dev->mem_resource[0].addr;
qp->inflights16 = 0;
 
-   if (qat_queue_create(dev, &(qp->tx_q), qat_qp_conf,
+   if (qat_queue_create(qat_dev, &(qp->tx_q), qat_qp_conf,
ADF_RING_DIR_TX) != 0) {
PMD_INIT_LOG(ERR, "Tx queue create failed "
"queue_pair_id=%u", queue_pair_id);
goto create_err;
}
 
-   if (qat_queue_create(dev, &(qp->rx_q), qat_qp_conf,
+   if (qat_queue_create(qat_dev, &(qp->rx_q), qat_qp_conf,
ADF_RING_DIR_RX) != 0) {
PMD_DRV_LOG(ERR, "Rx queue create failed "
"queue_pair_id=%hu", queue_pair_id);
@@ -134,7 +136,7 @@ int qat_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
 
snprintf(op_cookie_pool_name, RTE_RING_NAMESIZE, "%s_%s_qp_op_%d_%hu",
pci_dev->driver->driver.name, qat_qp_conf->service_str,
-   dev->data->dev_id, queue_pair_id);
+   qat_dev->dev_id, queue_pair_id);
 
qp->op_cookie_pool = rte_mempool_lookup(op_cookie_pool_name);
if (qp->o

[dpdk-dev] [PATCH v3 09/38] crypto/qat: make dequeue function generic

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Queue-handling code in dequeue is made generic, so it can
be used by other services in future. This is done by
 - Removing all sym-specific refs in input params - replace with void ptrs.
 - Wrapping this generic dequeue with the sym-specific dequeue
   called through the API.
 - extracting the sym-specific response processing into a new fn.
 - Setting a fn ptr for process_response in qp on qp creation
 - Passing void * params to this, in the service-specific implementation
   qat_sym_process_response cast back to sym structs.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c  |   1 +
 drivers/crypto/qat/qat_sym.c | 101 +--
 drivers/crypto/qat/qat_sym.h |  10 
 3 files changed, 72 insertions(+), 40 deletions(-)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index d7d79f1af..bae6cf114 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -198,6 +198,7 @@ int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t 
queue_pair_id,
= dev->data->dev_private;
qp->qat_dev_gen = internals->qat_dev_gen;
qp->build_request = qat_sym_build_request;
+   qp->process_response = qat_sym_process_response;
 
dev->data->queue_pairs[queue_pair_id] = qp;
return 0;
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 4e404749a..2bae913a1 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -300,70 +300,91 @@ qat_sym_pmd_enqueue_op_burst(void *qp, struct 
rte_crypto_op **ops,
return qat_enqueue_op_burst(qp, (void **)ops, nb_ops);
 }
 
-uint16_t
-qat_sym_pmd_dequeue_op_burst(void *qp, struct rte_crypto_op **ops,
-   uint16_t nb_ops)
+int
+qat_sym_process_response(void **op, uint8_t *resp,
+   __rte_unused void *op_cookie,
+   __rte_unused enum qat_device_gen qat_dev_gen)
+{
+
+   struct icp_qat_fw_comn_resp *resp_msg =
+   (struct icp_qat_fw_comn_resp *)resp;
+   struct rte_crypto_op *rx_op = (struct rte_crypto_op *)(uintptr_t)
+   (resp_msg->opaque_data);
+
+#ifdef RTE_LIBRTE_PMD_QAT_DEBUG_RX
+   rte_hexdump(stdout, "qat_response:", (uint8_t *)resp_msg,
+   sizeof(struct icp_qat_fw_comn_resp));
+#endif
+
+   if (ICP_QAT_FW_COMN_STATUS_FLAG_OK !=
+   ICP_QAT_FW_COMN_RESP_CRYPTO_STAT_GET(
+   resp_msg->comn_hdr.comn_status)) {
+
+   rx_op->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
+   } else {
+   struct qat_sym_session *sess = (struct qat_sym_session *)
+   get_session_private_data(
+   rx_op->sym->session,
+   cryptodev_qat_driver_id);
+
+   if (sess->bpi_ctx)
+   qat_bpicipher_postprocess(sess, rx_op);
+   rx_op->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
+   }
+   *op = (void *)rx_op;
+
+   return 0;
+}
+
+static uint16_t
+qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops)
 {
struct qat_queue *rx_queue, *tx_queue;
struct qat_qp *tmp_qp = (struct qat_qp *)qp;
-   uint32_t msg_counter = 0;
-   struct rte_crypto_op *rx_op;
-   struct icp_qat_fw_comn_resp *resp_msg;
uint32_t head;
+   uint32_t resp_counter = 0;
+   uint8_t *resp_msg;
 
rx_queue = &(tmp_qp->rx_q);
tx_queue = &(tmp_qp->tx_q);
head = rx_queue->head;
-   resp_msg = (struct icp_qat_fw_comn_resp *)
-   ((uint8_t *)rx_queue->base_addr + head);
+   resp_msg = (uint8_t *)rx_queue->base_addr + rx_queue->head;
 
while (*(uint32_t *)resp_msg != ADF_RING_EMPTY_SIG &&
-   msg_counter != nb_ops) {
-   rx_op = (struct rte_crypto_op *)(uintptr_t)
-   (resp_msg->opaque_data);
-
-#ifdef RTE_LIBRTE_PMD_QAT_DEBUG_RX
-   rte_hexdump(stdout, "qat_response:", (uint8_t *)resp_msg,
-   sizeof(struct icp_qat_fw_comn_resp));
-#endif
-   if (ICP_QAT_FW_COMN_STATUS_FLAG_OK !=
-   ICP_QAT_FW_COMN_RESP_CRYPTO_STAT_GET(
-   resp_msg->comn_hdr.comn_status)) {
-   rx_op->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
-   } else {
-   struct qat_sym_session *sess =
-   (struct qat_sym_session *)
-   get_session_private_data(
-   rx_op->sym->session,
-   cryptodev_qat_driver_id);
+   resp_counter != nb_ops) {
 
-   if (sess->bpi_ctx)
-   qat_bpicipher_postprocess(sess, rx_op);
-

[dpdk-dev] [PATCH v3 15/38] crypto/qat: create structures to support various generations

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Create data structures to support different generations
of qat hardware supplying services through different queue pairs.
 - Add two new structs qat_gen_hw_data and qat_qp_hw_dat
 - Add a qat_service_type enum
An array of qat_qp_hw_data elements is
initialised with constants, these are arranged so that the qp_id used
on the API can be used as an index to pick up the qp data to use.
The constants are common to current generations,
new arrays will be added for future generations.

Signed-off-by: Fiona Trahe 
---
 .../qat/qat_adf/adf_transport_access_macros.h |  6 +-
 drivers/crypto/qat/qat_common.h   |  8 ++
 drivers/crypto/qat/qat_device.c   | 21 -
 drivers/crypto/qat/qat_device.h   |  9 ++
 drivers/crypto/qat/qat_qp.c   | 94 ++-
 drivers/crypto/qat/qat_qp.h   | 18 +++-
 drivers/crypto/qat/qat_sym.c  | 27 ++
 7 files changed, 154 insertions(+), 29 deletions(-)

diff --git a/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h 
b/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
index 8b88b69de..2136d54ab 100644
--- a/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
+++ b/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
@@ -51,7 +51,8 @@
 #define ADF_DEFAULT_RING_SIZE ADF_RING_SIZE_16K
 
 #define ADF_NUM_BUNDLES_PER_DEV 1
-#define ADF_NUM_SYM_QPS_PER_BUNDLE  2
+/* Maximum number of qps for any service type */
+#define ADF_MAX_QPS_PER_BUNDLE 4
 #define ADF_RING_DIR_TX0
 #define ADF_RING_DIR_RX1
 
@@ -132,4 +133,5 @@ do { \
 #define WRITE_CSR_INT_FLAG_AND_COL(csr_base_addr, bank, value) \
ADF_CSR_WR(csr_base_addr, (ADF_RING_BUNDLE_SIZE * bank) + \
ADF_RING_CSR_INT_FLAG_AND_COL, value)
-#endif
+
+#endif /*ADF_TRANSPORT_ACCESS_MACROS_H */
diff --git a/drivers/crypto/qat/qat_common.h b/drivers/crypto/qat/qat_common.h
index 7802e96f9..c3e7bd9a7 100644
--- a/drivers/crypto/qat/qat_common.h
+++ b/drivers/crypto/qat/qat_common.h
@@ -23,6 +23,14 @@ enum qat_device_gen {
QAT_GEN2,
 };
 
+enum qat_service_type {
+   QAT_SERVICE_ASYMMETRIC = 0,
+   QAT_SERVICE_SYMMETRIC,
+   QAT_SERVICE_COMPRESSION,
+   QAT_SERVICE_INVALID
+};
+#define QAT_MAX_SERVICES   (QAT_SERVICE_INVALID)
+
 /**< Common struct for scatter-gather list operations */
 struct qat_alg_buf {
uint32_t len;
diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index ac6bd1af6..cdf4f7058 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -4,6 +4,21 @@
 
 #include "qat_device.h"
 #include "adf_transport_access_macros.h"
+#include "qat_qp.h"
+
+/* Hardware device information per generation */
+__extension__
+struct qat_gen_hw_data qp_gen_config[] =  {
+   [QAT_GEN1] = {
+   .dev_gen = QAT_GEN1,
+   .qp_hw_data = qat_gen1_qps,
+   },
+   [QAT_GEN2] = {
+   .dev_gen = QAT_GEN2,
+   .qp_hw_data = qat_gen1_qps,
+   /* gen2 has same ring layout as gen1 */
+   },
+};
 
 int qat_dev_config(__rte_unused struct rte_cryptodev *dev,
__rte_unused struct rte_cryptodev_config *config)
@@ -42,12 +57,14 @@ void qat_dev_info_get(struct rte_cryptodev *dev,
struct rte_cryptodev_info *info)
 {
struct qat_pmd_private *internals = dev->data->dev_private;
+   const struct qat_qp_hw_data *sym_hw_qps =
+   qp_gen_config[internals->qat_dev_gen]
+ .qp_hw_data[QAT_SERVICE_SYMMETRIC];
 
PMD_INIT_FUNC_TRACE();
if (info != NULL) {
info->max_nb_queue_pairs =
-   ADF_NUM_SYM_QPS_PER_BUNDLE *
-   ADF_NUM_BUNDLES_PER_DEV;
+   qat_qps_per_service(sym_hw_qps, QAT_SERVICE_SYMMETRIC);
info->feature_flags = dev->feature_flags;
info->capabilities = internals->qat_dev_capabilities;
info->sym.max_nb_sessions = internals->max_nb_sessions;
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index 64706abae..0983e3c2e 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -8,6 +8,8 @@
 #include 
 #include "qat_common.h"
 #include "qat_logs.h"
+#include "adf_transport_access_macros.h"
+#include "qat_qp.h"
 
 extern uint8_t cryptodev_qat_driver_id;
 
@@ -34,6 +36,13 @@ struct qat_pmd_private {
/**< Device ID for this instance */
 };
 
+struct qat_gen_hw_data {
+   enum qat_device_gen dev_gen;
+   const struct qat_qp_hw_data (*qp_hw_data)[ADF_MAX_QPS_PER_BUNDLE];
+};
+
+extern struct qat_gen_hw_data qp_gen_config[];
+
 int qat_dev_config(struct rte_cryptodev *dev,
struct rte_cryptodev_config *config);
 int qat_dev_start(struct rte_cryptodev *dev);
dif

[dpdk-dev] [PATCH v3 14/38] crypto/qat: move defines from sym to qp header file

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Move defines related to coalescing from sym header file to qp header
file as these will be common for all services.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.h  | 7 +++
 drivers/crypto/qat/qat_sym.h | 7 ---
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/crypto/qat/qat_qp.h b/drivers/crypto/qat/qat_qp.h
index 7bd8fdcec..8cf072c55 100644
--- a/drivers/crypto/qat/qat_qp.h
+++ b/drivers/crypto/qat/qat_qp.h
@@ -7,6 +7,13 @@
 #include "qat_common.h"
 #include "qat_device.h"
 
+#define QAT_CSR_HEAD_WRITE_THRESH 32U
+/* number of requests to accumulate before writing head CSR */
+#define QAT_CSR_TAIL_WRITE_THRESH 32U
+/* number of requests to accumulate before writing tail CSR */
+#define QAT_CSR_TAIL_FORCE_WRITE_THRESH 256U
+/* number of inflights below which no tail write coalescing should occur */
+
 typedef int (*build_request_t)(void *op,
uint8_t *req, void *op_cookie,
enum qat_device_gen qat_dev_gen);
diff --git a/drivers/crypto/qat/qat_sym.h b/drivers/crypto/qat/qat_sym.h
index 39574eeb6..b92ec72de 100644
--- a/drivers/crypto/qat/qat_sym.h
+++ b/drivers/crypto/qat/qat_sym.h
@@ -20,13 +20,6 @@
(((num) + (align) - 1) & ~((align) - 1))
 #define QAT_64_BTYE_ALIGN_MASK (~0x3f)
 
-#define QAT_CSR_HEAD_WRITE_THRESH 32U
-/* number of requests to accumulate before writing head CSR */
-#define QAT_CSR_TAIL_WRITE_THRESH 32U
-/* number of requests to accumulate before writing tail CSR */
-#define QAT_CSR_TAIL_FORCE_WRITE_THRESH 256U
-/* number of inflights below which no tail write coalescing should occur */
-
 struct qat_sym_session;
 
 int
-- 
2.17.0



[dpdk-dev] [PATCH v3 19/38] crypto/qat: use generic driver name for PCI registration

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

The QAT PMD used to register with PCI using the name "crypto_qat".
Keep this name for the driver registered with cryptodev
and use a more generic name "qat" for the PCI registration.
This paves the way for the PCI device to host other services.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_common.h|  2 ++
 drivers/crypto/qat/rte_qat_cryptodev.c | 25 ++---
 2 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/drivers/crypto/qat/qat_common.h b/drivers/crypto/qat/qat_common.h
index 77ffc8f72..63e5569ea 100644
--- a/drivers/crypto/qat/qat_common.h
+++ b/drivers/crypto/qat/qat_common.h
@@ -11,6 +11,8 @@
 /**< Intel(R) QAT Symmetric Crypto PMD device name */
 #define CRYPTODEV_NAME_QAT_SYM_PMD crypto_qat
 
+/**< Intel(R) QAT device name for PCI registration */
+#define QAT_PCI_NAME   qat
 /*
  * Maximum number of SGL entries
  */
diff --git a/drivers/crypto/qat/rte_qat_cryptodev.c 
b/drivers/crypto/qat/rte_qat_cryptodev.c
index 6ab870cad..ad8a56374 100644
--- a/drivers/crypto/qat/rte_qat_cryptodev.c
+++ b/drivers/crypto/qat/rte_qat_cryptodev.c
@@ -234,16 +234,27 @@ static int qat_pci_remove(struct rte_pci_device *pci_dev)
 
 }
 
+
+/* An rte_driver is needed in the registration of both the device and the 
driver
+ * with cryptodev.
+ * The actual qat pci's rte_driver can't be used as its name represents
+ * the whole pci device with all services. Think of this as a holder for a name
+ * for the crypto part of the pci device.
+ */
+static const char qat_sym_drv_name[] = RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD);
+static struct rte_driver cryptodev_qat_sym_driver = {
+   .name = qat_sym_drv_name,
+   .alias = qat_sym_drv_name
+};
+static struct cryptodev_driver qat_crypto_drv;
+RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv, cryptodev_qat_sym_driver,
+   cryptodev_qat_driver_id);
+
 static struct rte_pci_driver rte_qat_pmd = {
.id_table = pci_id_qat_map,
.drv_flags = RTE_PCI_DRV_NEED_MAPPING,
.probe = qat_pci_probe,
.remove = qat_pci_remove
 };
-
-static struct cryptodev_driver qat_crypto_drv;
-
-RTE_PMD_REGISTER_PCI(CRYPTODEV_NAME_QAT_SYM_PMD, rte_qat_pmd);
-RTE_PMD_REGISTER_PCI_TABLE(CRYPTODEV_NAME_QAT_SYM_PMD, pci_id_qat_map);
-RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv, rte_qat_pmd.driver,
-   cryptodev_qat_driver_id);
+RTE_PMD_REGISTER_PCI(QAT_PCI_NAME, rte_qat_pmd);
+RTE_PMD_REGISTER_PCI_TABLE(QAT_PCI_NAME, pci_id_qat_map);
-- 
2.17.0



[dpdk-dev] [PATCH v3 16/38] crypto/qat: rename sgl related objects

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Change SGL (Scatter-Gather List) related structs and member names

Signed-off-by: ArkadiuszX Kusztal 
---
 drivers/crypto/qat/qat_common.h | 10 +-
 drivers/crypto/qat/qat_sym.c| 28 ++--
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/drivers/crypto/qat/qat_common.h b/drivers/crypto/qat/qat_common.h
index c3e7bd9a7..193639550 100644
--- a/drivers/crypto/qat/qat_common.h
+++ b/drivers/crypto/qat/qat_common.h
@@ -32,22 +32,22 @@ enum qat_service_type {
 #define QAT_MAX_SERVICES   (QAT_SERVICE_INVALID)
 
 /**< Common struct for scatter-gather list operations */
-struct qat_alg_buf {
+struct qat_flat_buf {
uint32_t len;
uint32_t resrvd;
uint64_t addr;
 } __rte_packed;
 
-struct qat_alg_buf_list {
+struct qat_sgl {
uint64_t resrvd;
uint32_t num_bufs;
uint32_t num_mapped_bufs;
-   struct qat_alg_buf bufers[QAT_SGL_MAX_NUMBER];
+   struct qat_flat_buf buffers[QAT_SGL_MAX_NUMBER];
 } __rte_packed __rte_cache_aligned;
 
 struct qat_sym_op_cookie {
-   struct qat_alg_buf_list qat_sgl_list_src;
-   struct qat_alg_buf_list qat_sgl_list_dst;
+   struct qat_sgl qat_sgl_src;
+   struct qat_sgl qat_sgl_dst;
phys_addr_t qat_sgl_src_phys_addr;
phys_addr_t qat_sgl_dst_phys_addr;
 };
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index e448dc859..a9beff064 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -250,20 +250,20 @@ qat_sym_pmd_dequeue_op_burst(void *qp, struct 
rte_crypto_op **ops,
 
 static inline int
 qat_sgl_fill_array(struct rte_mbuf *buf, uint64_t buff_start,
-   struct qat_alg_buf_list *list, uint32_t data_len)
+   struct qat_sgl *list, uint32_t data_len)
 {
int nr = 1;
 
uint32_t buf_len = rte_pktmbuf_iova(buf) -
buff_start + rte_pktmbuf_data_len(buf);
 
-   list->bufers[0].addr = buff_start;
-   list->bufers[0].resrvd = 0;
-   list->bufers[0].len = buf_len;
+   list->buffers[0].addr = buff_start;
+   list->buffers[0].resrvd = 0;
+   list->buffers[0].len = buf_len;
 
if (data_len <= buf_len) {
list->num_bufs = nr;
-   list->bufers[0].len = data_len;
+   list->buffers[0].len = data_len;
return 0;
}
 
@@ -276,15 +276,15 @@ qat_sgl_fill_array(struct rte_mbuf *buf, uint64_t 
buff_start,
return -EINVAL;
}
 
-   list->bufers[nr].len = rte_pktmbuf_data_len(buf);
-   list->bufers[nr].resrvd = 0;
-   list->bufers[nr].addr = rte_pktmbuf_iova(buf);
+   list->buffers[nr].len = rte_pktmbuf_data_len(buf);
+   list->buffers[nr].resrvd = 0;
+   list->buffers[nr].addr = rte_pktmbuf_iova(buf);
 
-   buf_len += list->bufers[nr].len;
+   buf_len += list->buffers[nr].len;
buf = buf->next;
 
if (buf_len > data_len) {
-   list->bufers[nr].len -=
+   list->buffers[nr].len -=
buf_len - data_len;
buf = NULL;
}
@@ -695,7 +695,7 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg,
ICP_QAT_FW_COMN_PTR_TYPE_SET(qat_req->comn_hdr.comn_req_flags,
QAT_COMN_PTR_TYPE_SGL);
ret = qat_sgl_fill_array(op->sym->m_src, src_buf_start,
-   &cookie->qat_sgl_list_src,
+   &cookie->qat_sgl_src,
qat_req->comn_mid.src_length);
if (ret) {
PMD_DRV_LOG(ERR, "QAT PMD Cannot fill sgl array");
@@ -709,7 +709,7 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg,
else {
ret = qat_sgl_fill_array(op->sym->m_dst,
dst_buf_start,
-   &cookie->qat_sgl_list_dst,
+   &cookie->qat_sgl_dst,
qat_req->comn_mid.dst_length);
 
if (ret) {
@@ -859,12 +859,12 @@ int qat_sym_qp_setup(struct rte_cryptodev *dev, uint16_t 
qp_id,
sql_cookie->qat_sgl_src_phys_addr =
rte_mempool_virt2iova(sql_cookie) +
offsetof(struct qat_sym_op_cookie,
-   qat_sgl_list_src);
+   qat_sgl_src);
 
sql_cookie->qat_sgl_dst_phys_addr =
rte_mempool_virt2iova(sql_cookie) +
offsetof(struct qat_sym_op_cookie,
-   qat_sgl_list_dst);
+   qat_sgl_dst);
}
 
return

[dpdk-dev] [PATCH v3 17/38] crypto/qat: move sgl related element to appropriate files

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Move SGL (Scatter-Gather List) related functions to common file
Move qat_sym_op_cookie struct to sym header file

Signed-off-by: ArkadiuszX Kusztal 
Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile |  1 +
 drivers/crypto/qat/meson.build  |  1 +
 drivers/crypto/qat/qat_common.c | 53 +
 drivers/crypto/qat/qat_common.h | 11 ---
 drivers/crypto/qat/qat_sym.c| 47 -
 drivers/crypto/qat/qat_sym.h|  7 +
 6 files changed, 67 insertions(+), 53 deletions(-)
 create mode 100644 drivers/crypto/qat/qat_common.c

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index 8cb802b9d..902c47ff4 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -25,6 +25,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += rte_qat_cryptodev.c
 
 # export include files
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index e596006da..12910c377 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -7,6 +7,7 @@ if not dep.found()
 endif
 sources = files('qat_sym.c', 'qat_qp.c',
'qat_sym_session.c',
+   'qat_common.c',
'rte_qat_cryptodev.c',
'qat_device.c')
 includes += include_directories('qat_adf')
diff --git a/drivers/crypto/qat/qat_common.c b/drivers/crypto/qat/qat_common.c
new file mode 100644
index 0..a8865904f
--- /dev/null
+++ b/drivers/crypto/qat/qat_common.c
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include "qat_common.h"
+#include "qat_logs.h"
+
+int
+qat_sgl_fill_array(struct rte_mbuf *buf, uint64_t buf_start,
+   struct qat_sgl *list, uint32_t data_len)
+{
+   int nr = 1;
+
+   uint32_t buf_len = rte_pktmbuf_iova(buf) -
+   buf_start + rte_pktmbuf_data_len(buf);
+
+   list->buffers[0].addr = buf_start;
+   list->buffers[0].resrvd = 0;
+   list->buffers[0].len = buf_len;
+
+   if (data_len <= buf_len) {
+   list->num_bufs = nr;
+   list->buffers[0].len = data_len;
+   return 0;
+   }
+
+   buf = buf->next;
+   while (buf) {
+   if (unlikely(nr == QAT_SGL_MAX_NUMBER)) {
+   PMD_DRV_LOG(ERR,
+   "QAT PMD exceeded size of QAT SGL entry(%u)",
+   QAT_SGL_MAX_NUMBER);
+   return -EINVAL;
+   }
+
+   list->buffers[nr].len = rte_pktmbuf_data_len(buf);
+   list->buffers[nr].resrvd = 0;
+   list->buffers[nr].addr = rte_pktmbuf_iova(buf);
+
+   buf_len += list->buffers[nr].len;
+   buf = buf->next;
+
+   if (buf_len > data_len) {
+   list->buffers[nr].len -=
+   buf_len - data_len;
+   buf = NULL;
+   }
+   ++nr;
+   }
+   list->num_bufs = nr;
+
+   return 0;
+}
diff --git a/drivers/crypto/qat/qat_common.h b/drivers/crypto/qat/qat_common.h
index 193639550..77ffc8f72 100644
--- a/drivers/crypto/qat/qat_common.h
+++ b/drivers/crypto/qat/qat_common.h
@@ -6,6 +6,8 @@
 
 #include 
 
+#include 
+
 /**< Intel(R) QAT Symmetric Crypto PMD device name */
 #define CRYPTODEV_NAME_QAT_SYM_PMD crypto_qat
 
@@ -45,11 +47,8 @@ struct qat_sgl {
struct qat_flat_buf buffers[QAT_SGL_MAX_NUMBER];
 } __rte_packed __rte_cache_aligned;
 
-struct qat_sym_op_cookie {
-   struct qat_sgl qat_sgl_src;
-   struct qat_sgl qat_sgl_dst;
-   phys_addr_t qat_sgl_src_phys_addr;
-   phys_addr_t qat_sgl_dst_phys_addr;
-};
+int
+qat_sgl_fill_array(struct rte_mbuf *buf, uint64_t buf_start,
+   struct qat_sgl *list, uint32_t data_len);
 
 #endif /* _QAT_COMMON_H_ */
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index a9beff064..b74dfa634 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -248,53 +248,6 @@ qat_sym_pmd_dequeue_op_burst(void *qp, struct 
rte_crypto_op **ops,
return qat_dequeue_op_burst(qp, (void **)ops, nb_ops);
 }
 
-static inline int
-qat_sgl_fill_array(struct rte_mbuf *buf, uint64_t buff_start,
-   struct qat_sgl *list, uint32_t data_len)
-{
-   int nr = 1;
-
-   uint32_t buf_len = rte_pktmbuf_iova(buf) -
-   buff_start + rte_pktmbuf_data_len(buf);
-
-   list->buffers[0].addr = buff_start;
-   list->buffers[0].resrvd = 0;
-   list->buffers[0].len = buf_len;
-
-   if (data_len <= buf_len) {
-   list->num_bufs = nr;
-  

[dpdk-dev] [PATCH v3 21/38] crypto/qat: use common stats structures

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Split qat_sym_stats_get/reset into 2 functions, a wrapper function calling
a new qat_stats_get/reset function which can be called per service.
Remove cryptodev stats struct from qat_qp, replace with qat_common_stats.
Add links for qat_qp into qat_pci_device using an array per service to
avoid need for a lock and so qp_id for the service can be used as index.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_common.h | 13 +
 drivers/crypto/qat/qat_device.c |  1 +
 drivers/crypto/qat/qat_device.h |  3 ++
 drivers/crypto/qat/qat_qp.h |  2 +-
 drivers/crypto/qat/qat_sym.c| 86 -
 5 files changed, 91 insertions(+), 14 deletions(-)

diff --git a/drivers/crypto/qat/qat_common.h b/drivers/crypto/qat/qat_common.h
index 63e5569ea..fcf5c4c09 100644
--- a/drivers/crypto/qat/qat_common.h
+++ b/drivers/crypto/qat/qat_common.h
@@ -49,6 +49,19 @@ struct qat_sgl {
struct qat_flat_buf buffers[QAT_SGL_MAX_NUMBER];
 } __rte_packed __rte_cache_aligned;
 
+/** Common, i.e. not service-specific, statistics */
+struct qat_common_stats {
+   uint64_t enqueued_count;
+   /**< Count of all operations enqueued */
+   uint64_t dequeued_count;
+   /**< Count of all operations dequeued */
+
+   uint64_t enqueue_err_count;
+   /**< Total error count on operations enqueued */
+   uint64_t dequeue_err_count;
+   /**< Total error count on operations dequeued */
+};
+
 int
 qat_sgl_fill_array(struct rte_mbuf *buf, uint64_t buf_start,
struct qat_sgl *list, uint32_t data_len);
diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index 8ad3162e1..4dfbc84c8 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -148,6 +148,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
}
 
qat_dev = qat_pci_get_dev(qat_dev_id);
+   memset(qat_dev, 0, sizeof(*qat_dev));
snprintf(qat_dev->name, QAT_DEV_NAME_MAX_LEN, "%s", name);
qat_dev->qat_dev_id = qat_dev_id;
qat_dev->pci_dev = pci_dev;
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index 855bf6c1c..d1615e2a7 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -50,6 +50,9 @@ struct qat_pci_device {
uint8_t attached : 1;
/**< Flag indicating the device is attached */
 
+   struct qat_qp *qps_in_use[QAT_MAX_SERVICES][ADF_MAX_QPS_PER_BUNDLE];
+   /**< links to qps set up for each service, index same as on API */
+
/* Data relating to symmetric crypto service */
struct qat_sym_dev_private *sym_dev;
/**< link back to cryptodev private data */
diff --git a/drivers/crypto/qat/qat_qp.h b/drivers/crypto/qat/qat_qp.h
index d482d5732..49d9f29d3 100644
--- a/drivers/crypto/qat/qat_qp.h
+++ b/drivers/crypto/qat/qat_qp.h
@@ -78,7 +78,7 @@ struct qat_qp {
uint16_tinflights16;
struct  qat_queue   tx_q;
struct  qat_queue   rx_q;
-   struct  rte_cryptodev_stats stats;
+   struct  qat_common_stats stats;
struct rte_mempool *op_cookie_pool;
void **op_cookies;
uint32_t nb_descriptors;
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index e77fbe4c4..8007e25d6 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -717,20 +717,24 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg,
 }
 
 
-void qat_sym_stats_get(struct rte_cryptodev *dev,
-   struct rte_cryptodev_stats *stats)
+static void qat_stats_get(struct qat_pci_device *dev,
+   struct qat_common_stats *stats,
+   enum qat_service_type service)
 {
int i;
-   struct qat_qp **qp = (struct qat_qp **)(dev->data->queue_pairs);
+   struct qat_qp **qp;
 
-   PMD_INIT_FUNC_TRACE();
-   if (stats == NULL) {
-   PMD_DRV_LOG(ERR, "invalid stats ptr NULL");
+   if (stats == NULL || dev == NULL || service >= QAT_SERVICE_INVALID) {
+   PMD_DRV_LOG(ERR, "invalid param: stats %p, dev %p, service %d",
+   stats, dev, service);
return;
}
-   for (i = 0; i < dev->data->nb_queue_pairs; i++) {
+
+   qp = dev->qps_in_use[service];
+   for (i = 0; i < ADF_MAX_QPS_PER_BUNDLE; i++) {
if (qp[i] == NULL) {
-   PMD_DRV_LOG(DEBUG, "Uninitialised queue pair");
+   PMD_DRV_LOG(DEBUG, "Service %d Uninitialised qp %d",
+   service, i);
continue;
}
 
@@ -741,22 +745,74 @@ void qat_sym_stats_get(struct rte_cryptodev *dev,
}
 }
 
-void qat_sym_stats_reset(struct rte_cryptodev *dev)
+void qat_sym_stats_get(struct rte_cryptodev *dev,
+   struct rte_cryptodev_stats *stats)
+{
+   struct qat_common_stats qat_stats = {0};
+   struct 

[dpdk-dev] [PATCH v3 20/38] crypto/qat: move to using new device structure

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Struct qat_pmd_private held the data needed by cryptodev, common code
now gets most data from struct qat_pci_device instead. qat_pmd_private
is trimmed to hold only sym crypto data and renamed qat_sym_private
to reflect its usage.
Specifically
 - remove max_nb_queue_pairs from qat_pmd_private, get from qp_hw_data
 - remove max_nb_sesssions from qat_pmd_private as not needed.
 - remove qat_gen from qat_pmd_private, get from qat_pci_device instead.
 - use qat_pci_device throughout common code instead of qat_pmd_private
 - rename qat_pmd_private to qat_sym_dev_private - this now holds only
   sym-specific data for the cryptodev API
 - extend pci device name to _qat for clarity, was just 
 - update qp mem and cookiepool names to reflect the appropriate device,
   service and qp.
 - rename qat_dev_info_get() to qat_sym_dev_info_get() as mostly sym,
   not enough common info to warrant a generic fn.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_device.c| 17 +++-
 drivers/crypto/qat/qat_device.h| 37 +++---
 drivers/crypto/qat/qat_qp.c| 26 +-
 drivers/crypto/qat/qat_qp.h|  4 +--
 drivers/crypto/qat/qat_sym.c   | 11 
 drivers/crypto/qat/qat_sym.h   |  8 --
 drivers/crypto/qat/qat_sym_session.c   |  8 +++---
 drivers/crypto/qat/rte_qat_cryptodev.c | 32 +++---
 8 files changed, 65 insertions(+), 78 deletions(-)

diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index 75af1e8bc..8ad3162e1 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -57,12 +57,12 @@ int qat_dev_close(struct rte_cryptodev *dev)
return 0;
 }
 
-void qat_dev_info_get(struct rte_cryptodev *dev,
+void qat_sym_dev_info_get(struct rte_cryptodev *dev,
struct rte_cryptodev_info *info)
 {
-   struct qat_pmd_private *internals = dev->data->dev_private;
+   struct qat_sym_dev_private *internals = dev->data->dev_private;
const struct qat_qp_hw_data *sym_hw_qps =
-   qp_gen_config[internals->qat_dev_gen]
+   qp_gen_config[internals->qat_dev->qat_dev_gen]
  .qp_hw_data[QAT_SERVICE_SYMMETRIC];
 
PMD_INIT_FUNC_TRACE();
@@ -71,7 +71,7 @@ void qat_dev_info_get(struct rte_cryptodev *dev,
qat_qps_per_service(sym_hw_qps, QAT_SERVICE_SYMMETRIC);
info->feature_flags = dev->feature_flags;
info->capabilities = internals->qat_dev_capabilities;
-   info->sym.max_nb_sessions = internals->max_nb_sessions;
+   info->sym.max_nb_sessions = RTE_QAT_PMD_MAX_NB_SESSIONS;
info->driver_id = cryptodev_qat_driver_id;
info->pci_dev = RTE_DEV_TO_PCI(dev->device);
}
@@ -83,6 +83,7 @@ qat_pci_get_dev(uint8_t dev_id)
 {
return &qat_pci_devices[dev_id];
 }
+
 static struct qat_pci_device *
 qat_pci_get_named_dev(const char *name)
 {
@@ -133,7 +134,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
char name[QAT_DEV_NAME_MAX_LEN];
 
rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
-
+   snprintf(name+strlen(name), QAT_DEV_NAME_MAX_LEN-strlen(name), "_qat");
if (qat_pci_get_named_dev(name) != NULL) {
PMD_DRV_LOG(ERR, "QAT device with name %s already allocated!",
name);
@@ -148,6 +149,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 
qat_dev = qat_pci_get_dev(qat_dev_id);
snprintf(qat_dev->name, QAT_DEV_NAME_MAX_LEN, "%s", name);
+   qat_dev->qat_dev_id = qat_dev_id;
qat_dev->pci_dev = pci_dev;
switch (qat_dev->pci_dev->id.device_id) {
case 0x0443:
@@ -169,8 +171,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 
qat_nb_pci_devices++;
 
-   PMD_DRV_LOG(DEBUG, "QAT device %d allocated, total QATs %d",
-   qat_dev_id, qat_nb_pci_devices);
+   PMD_DRV_LOG(DEBUG, "QAT device %d allocated, name %s, total QATs %d",
+   qat_dev->qat_dev_id, qat_dev->name, qat_nb_pci_devices);
 
return qat_dev;
 }
@@ -185,6 +187,7 @@ qat_pci_device_release(struct rte_pci_device *pci_dev)
return -EINVAL;
 
rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
+   snprintf(name+strlen(name), QAT_DEV_NAME_MAX_LEN-strlen(name), "_qat");
qat_dev = qat_pci_get_named_dev(name);
if (qat_dev != NULL) {
 
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index d83ad632c..855bf6c1c 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -32,30 +32,31 @@ extern int qat_sym_qp_release(struct rte_cryptodev *dev,
  *  - config data
  *  - runtime data
  */
+struct qat_sym_dev_private;
 struct qat_pci_device {
 
-   /* data used by all services 

[dpdk-dev] [PATCH v3 22/38] crypto/qat: rename functions which depend on cryptodev

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Rename all device functions which depend on cryptodev structs.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_device.c| 8 
 drivers/crypto/qat/qat_device.h| 8 
 drivers/crypto/qat/rte_qat_cryptodev.c | 8 
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index 4dfbc84c8..8b2ac5a5f 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -24,25 +24,25 @@ struct qat_gen_hw_data qp_gen_config[] =  {
 static struct qat_pci_device qat_pci_devices[QAT_MAX_PCI_DEVICES];
 static int qat_nb_pci_devices;
 
-int qat_dev_config(__rte_unused struct rte_cryptodev *dev,
+int qat_sym_dev_config(__rte_unused struct rte_cryptodev *dev,
__rte_unused struct rte_cryptodev_config *config)
 {
PMD_INIT_FUNC_TRACE();
return 0;
 }
 
-int qat_dev_start(__rte_unused struct rte_cryptodev *dev)
+int qat_sym_dev_start(__rte_unused struct rte_cryptodev *dev)
 {
PMD_INIT_FUNC_TRACE();
return 0;
 }
 
-void qat_dev_stop(__rte_unused struct rte_cryptodev *dev)
+void qat_sym_dev_stop(__rte_unused struct rte_cryptodev *dev)
 {
PMD_INIT_FUNC_TRACE();
 }
 
-int qat_dev_close(struct rte_cryptodev *dev)
+int qat_sym_dev_close(struct rte_cryptodev *dev)
 {
int i, ret;
 
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index d1615e2a7..5424a9a94 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -84,11 +84,11 @@ struct qat_gen_hw_data {
 
 extern struct qat_gen_hw_data qp_gen_config[];
 
-int qat_dev_config(struct rte_cryptodev *dev,
+int qat_sym_dev_config(struct rte_cryptodev *dev,
struct rte_cryptodev_config *config);
-int qat_dev_start(struct rte_cryptodev *dev);
-void qat_dev_stop(struct rte_cryptodev *dev);
-int qat_dev_close(struct rte_cryptodev *dev);
+int qat_sym_dev_start(struct rte_cryptodev *dev);
+void qat_sym_dev_stop(struct rte_cryptodev *dev);
+int qat_sym_dev_close(struct rte_cryptodev *dev);
 void qat_sym_dev_info_get(struct rte_cryptodev *dev,
struct rte_cryptodev_info *info);
 
diff --git a/drivers/crypto/qat/rte_qat_cryptodev.c 
b/drivers/crypto/qat/rte_qat_cryptodev.c
index 6d807177e..91bb1e590 100644
--- a/drivers/crypto/qat/rte_qat_cryptodev.c
+++ b/drivers/crypto/qat/rte_qat_cryptodev.c
@@ -29,10 +29,10 @@ static const struct rte_cryptodev_capabilities 
qat_gen2_sym_capabilities[] = {
 static struct rte_cryptodev_ops crypto_qat_ops = {
 
/* Device related operations */
-   .dev_configure  = qat_dev_config,
-   .dev_start  = qat_dev_start,
-   .dev_stop   = qat_dev_stop,
-   .dev_close  = qat_dev_close,
+   .dev_configure  = qat_sym_dev_config,
+   .dev_start  = qat_sym_dev_start,
+   .dev_stop   = qat_sym_dev_stop,
+   .dev_close  = qat_sym_dev_close,
.dev_infos_get  = qat_sym_dev_info_get,
 
.stats_get  = qat_sym_stats_get,
-- 
2.17.0



[dpdk-dev] [PATCH v3 18/38] crypto/qat: add QAT PCI device struct

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

- Added struct qat_pci_device to use internally in QAT PMD
   to avoid dependencies on rte_cryptodev or rte_compressdev
 - Added a global array of these
 - Restructured probe/release to separate QAT common init/clear
   from crypto pmd create/destroy.
 - In QAT common part allocated a qat_pci_device and populated it
 - Removed meaningless check in probe for RTE_PROC_PRIMARY

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_device.c| 127 ++
 drivers/crypto/qat/qat_device.h|  60 ++-
 drivers/crypto/qat/rte_qat_cryptodev.c | 140 ++---
 3 files changed, 286 insertions(+), 41 deletions(-)

diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index cdf4f7058..75af1e8bc 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -20,6 +20,10 @@ struct qat_gen_hw_data qp_gen_config[] =  {
},
 };
 
+
+static struct qat_pci_device qat_pci_devices[QAT_MAX_PCI_DEVICES];
+static int qat_nb_pci_devices;
+
 int qat_dev_config(__rte_unused struct rte_cryptodev *dev,
__rte_unused struct rte_cryptodev_config *config)
 {
@@ -72,3 +76,126 @@ void qat_dev_info_get(struct rte_cryptodev *dev,
info->pci_dev = RTE_DEV_TO_PCI(dev->device);
}
 }
+
+
+static struct qat_pci_device *
+qat_pci_get_dev(uint8_t dev_id)
+{
+   return &qat_pci_devices[dev_id];
+}
+static struct qat_pci_device *
+qat_pci_get_named_dev(const char *name)
+{
+   struct qat_pci_device *dev;
+   unsigned int i;
+
+   if (name == NULL)
+   return NULL;
+
+   for (i = 0; i < QAT_MAX_PCI_DEVICES; i++) {
+   dev = &qat_pci_devices[i];
+
+   if ((dev->attached == QAT_ATTACHED) &&
+   (strcmp(dev->name, name) == 0))
+   return dev;
+   }
+
+   return NULL;
+}
+
+static uint8_t
+qat_pci_find_free_device_index(void)
+{
+   uint8_t dev_id;
+
+   for (dev_id = 0; dev_id < QAT_MAX_PCI_DEVICES; dev_id++) {
+   if (qat_pci_devices[dev_id].attached == QAT_DETACHED)
+   break;
+   }
+   return dev_id;
+}
+
+struct qat_pci_device *
+qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev)
+{
+   char name[QAT_DEV_NAME_MAX_LEN];
+
+   rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
+
+   return qat_pci_get_named_dev(name);
+}
+
+struct qat_pci_device *
+qat_pci_device_allocate(struct rte_pci_device *pci_dev)
+{
+   struct qat_pci_device *qat_dev;
+   uint8_t qat_dev_id;
+   char name[QAT_DEV_NAME_MAX_LEN];
+
+   rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
+
+   if (qat_pci_get_named_dev(name) != NULL) {
+   PMD_DRV_LOG(ERR, "QAT device with name %s already allocated!",
+   name);
+   return NULL;
+   }
+
+   qat_dev_id = qat_pci_find_free_device_index();
+   if (qat_dev_id == QAT_MAX_PCI_DEVICES) {
+   PMD_DRV_LOG(ERR, "Reached maximum number of QAT devices");
+   return NULL;
+   }
+
+   qat_dev = qat_pci_get_dev(qat_dev_id);
+   snprintf(qat_dev->name, QAT_DEV_NAME_MAX_LEN, "%s", name);
+   qat_dev->pci_dev = pci_dev;
+   switch (qat_dev->pci_dev->id.device_id) {
+   case 0x0443:
+   qat_dev->qat_dev_gen = QAT_GEN1;
+   break;
+   case 0x37c9:
+   case 0x19e3:
+   case 0x6f55:
+   qat_dev->qat_dev_gen = QAT_GEN2;
+   break;
+   default:
+   PMD_DRV_LOG(ERR, "Invalid dev_id, can't determine generation");
+   return NULL;
+   }
+
+   rte_spinlock_init(&qat_dev->arb_csr_lock);
+
+   qat_dev->attached = QAT_ATTACHED;
+
+   qat_nb_pci_devices++;
+
+   PMD_DRV_LOG(DEBUG, "QAT device %d allocated, total QATs %d",
+   qat_dev_id, qat_nb_pci_devices);
+
+   return qat_dev;
+}
+
+int
+qat_pci_device_release(struct rte_pci_device *pci_dev)
+{
+   struct qat_pci_device *qat_dev;
+   char name[QAT_DEV_NAME_MAX_LEN];
+
+   if (pci_dev == NULL)
+   return -EINVAL;
+
+   rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
+   qat_dev = qat_pci_get_named_dev(name);
+   if (qat_dev != NULL) {
+
+   /* Check that there are no service devs still on pci device */
+   if (qat_dev->sym_dev != NULL)
+   return -EBUSY;
+
+   qat_dev->attached = QAT_DETACHED;
+   qat_nb_pci_devices--;
+   }
+   PMD_DRV_LOG(DEBUG, "QAT device %s released, total QATs %d",
+   name, qat_nb_pci_devices);
+   return 0;
+}
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index 0983e3c2e..d83ad632c 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -11,15 +11,58 @@
 #i

[dpdk-dev] [PATCH v3 24/38] crypto/qat: add lock around csr access and change logic

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Add lock around accesses to the arbiter CSR
and use & instead of ^ as ^ not safe if
arb_disable called when already disabled.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c | 26 +++---
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index 7b2dc3f90..f26fd0900 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -107,8 +107,10 @@ static int qat_queue_create(struct qat_pci_device *qat_dev,
 static int adf_verify_queue_size(uint32_t msg_size, uint32_t msg_num,
uint32_t *queue_size_for_csr);
 static void adf_configure_queues(struct qat_qp *queue);
-static void adf_queue_arb_enable(struct qat_queue *txq, void *base_addr);
-static void adf_queue_arb_disable(struct qat_queue *txq, void *base_addr);
+static void adf_queue_arb_enable(struct qat_queue *txq, void *base_addr,
+   rte_spinlock_t *lock);
+static void adf_queue_arb_disable(struct qat_queue *txq, void *base_addr,
+   rte_spinlock_t *lock);
 
 
 int qat_qps_per_service(const struct qat_qp_hw_data *qp_hw_data,
@@ -216,7 +218,8 @@ int qat_qp_setup(struct qat_pci_device *qat_dev,
}
 
adf_configure_queues(qp);
-   adf_queue_arb_enable(&qp->tx_q, qp->mmap_bar_addr);
+   adf_queue_arb_enable(&qp->tx_q, qp->mmap_bar_addr,
+   &qat_dev->arb_csr_lock);
 
snprintf(op_cookie_pool_name, RTE_RING_NAMESIZE,
"%s%d_cookies_%s_qp%hu",
@@ -282,7 +285,8 @@ int qat_qp_release(struct qat_qp **qp_addr)
return -EAGAIN;
}
 
-   adf_queue_arb_disable(&(qp->tx_q), qp->mmap_bar_addr);
+   adf_queue_arb_disable(&(qp->tx_q), qp->mmap_bar_addr,
+   &qp->qat_dev->arb_csr_lock);
 
for (i = 0; i < qp->nb_descriptors; i++)
rte_mempool_put(qp->op_cookie_pool, qp->op_cookies[i]);
@@ -443,7 +447,8 @@ static int adf_verify_queue_size(uint32_t msg_size, 
uint32_t msg_num,
return -EINVAL;
 }
 
-static void adf_queue_arb_enable(struct qat_queue *txq, void *base_addr)
+static void adf_queue_arb_enable(struct qat_queue *txq, void *base_addr,
+   rte_spinlock_t *lock)
 {
uint32_t arb_csr_offset =  ADF_ARB_RINGSRVARBEN_OFFSET +
(ADF_ARB_REG_SLOT *
@@ -451,12 +456,16 @@ static void adf_queue_arb_enable(struct qat_queue *txq, 
void *base_addr)
uint32_t value;
 
PMD_INIT_FUNC_TRACE();
+
+   rte_spinlock_lock(lock);
value = ADF_CSR_RD(base_addr, arb_csr_offset);
value |= (0x01 << txq->hw_queue_number);
ADF_CSR_WR(base_addr, arb_csr_offset, value);
+   rte_spinlock_unlock(lock);
 }
 
-static void adf_queue_arb_disable(struct qat_queue *txq, void *base_addr)
+static void adf_queue_arb_disable(struct qat_queue *txq, void *base_addr,
+   rte_spinlock_t *lock)
 {
uint32_t arb_csr_offset =  ADF_ARB_RINGSRVARBEN_OFFSET +
(ADF_ARB_REG_SLOT *
@@ -464,9 +473,12 @@ static void adf_queue_arb_disable(struct qat_queue *txq, 
void *base_addr)
uint32_t value;
 
PMD_INIT_FUNC_TRACE();
+
+   rte_spinlock_lock(lock);
value = ADF_CSR_RD(base_addr, arb_csr_offset);
-   value ^= (0x01 << txq->hw_queue_number);
+   value &= ~(0x01 << txq->hw_queue_number);
ADF_CSR_WR(base_addr, arb_csr_offset, value);
+   rte_spinlock_unlock(lock);
 }
 
 static void adf_configure_queues(struct qat_qp *qp)
-- 
2.17.0



[dpdk-dev] [PATCH v3 23/38] crypto/qat: move code into appropriate files

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Move all code into appropriate files, no actual code changes. Specifically:
 - Rename rte_qat_cryptodev.c to qat_sym_pmd.c
 - Create qat_sym_pmd.h and populate with fn prototypes for qat_sym_pmd.c
 - Create qat_comp_pmd.c/.h and populate with placeholder functions
 - Create qat_asym_pmd.c/.h and populate with placeholder functions
 - Rename qat_crypto_capabilities.h to qat_sym_capabilities.h
 - Move CRYPTODEV_NAME_QAT_SYM_PMD from qat_common.h to qat_sym_pmd.h
 - Move qat_sym_dev_private from qat_device.h to qat_sym_pmd.h
 - Move prototype for qat_sym_dev_info_get frm qat_device.h 2 qat_sym_pmd.h
 - Move all qat_device.c sym dev_ops fns to qat_sym_pmd.c file
 - Move all qat_sym.c dev_ops fns to qat_sym_pmd.c file
 - Remove unused header file #includes from all files.
 - Move pci_id_qat_map, probe/release/register from
   rte_qat_cryptodev.c to qat_device.c
 - Moved stray comment for bpi_cipher_ctx_init() from qat_sym.c
   to qat_sym_session.c
 - Changed all files to use SPDX license header

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile   |   4 +-
 drivers/crypto/qat/meson.build|  11 +-
 drivers/crypto/qat/qat_asym_pmd.c |  17 +
 drivers/crypto/qat/qat_asym_pmd.h |  15 +
 drivers/crypto/qat/qat_common.c   |  54 +++
 drivers/crypto/qat/qat_common.h   |  15 +-
 drivers/crypto/qat/qat_comp_pmd.c |  18 +
 drivers/crypto/qat/qat_comp_pmd.h |  29 ++
 drivers/crypto/qat/qat_device.c   | 141 +---
 drivers/crypto/qat/qat_device.h   |  31 +-
 drivers/crypto/qat/qat_qp.c   |   2 +-
 drivers/crypto/qat/qat_qp.h   |   9 +-
 drivers/crypto/qat/qat_sym.c  | 246 ++---
 drivers/crypto/qat/qat_sym.h  |  28 +-
 ..._capabilities.h => qat_sym_capabilities.h} |   6 +-
 drivers/crypto/qat/qat_sym_pmd.c  | 326 ++
 drivers/crypto/qat/qat_sym_pmd.h  |  39 +++
 drivers/crypto/qat/qat_sym_session.c  |  17 +-
 drivers/crypto/qat/qat_sym_session.h  |   2 +-
 drivers/crypto/qat/rte_qat_cryptodev.c| 258 --
 20 files changed, 665 insertions(+), 603 deletions(-)
 create mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 create mode 100644 drivers/crypto/qat/qat_asym_pmd.h
 create mode 100644 drivers/crypto/qat/qat_comp_pmd.c
 create mode 100644 drivers/crypto/qat/qat_comp_pmd.h
 rename drivers/crypto/qat/{qat_crypto_capabilities.h => 
qat_sym_capabilities.h} (99%)
 create mode 100644 drivers/crypto/qat/qat_sym_pmd.c
 create mode 100644 drivers/crypto/qat/qat_sym_pmd.h
 delete mode 100644 drivers/crypto/qat/rte_qat_cryptodev.c

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index 902c47ff4..d467683fd 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -26,7 +26,9 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += rte_qat_cryptodev.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_pmd.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_asym_pmd.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_comp_pmd.c
 
 # export include files
 SYMLINK-y-include +=
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index 12910c377..e22e08fba 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -5,11 +5,12 @@ dep = dependency('libcrypto', required: false)
 if not dep.found()
build = false
 endif
-sources = files('qat_sym.c', 'qat_qp.c',
-   'qat_sym_session.c',
-   'qat_common.c',
-   'rte_qat_cryptodev.c',
-   'qat_device.c')
+sources = files('qat_common.c',
+   'qat_qp.c',
+   'qat_device.c',
+   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c',
+   'qat_asym_pmd.c',
+   'qat_comp_pmd.c')
 includes += include_directories('qat_adf')
 deps += ['bus_pci']
 ext_deps += dep
diff --git a/drivers/crypto/qat/qat_asym_pmd.c 
b/drivers/crypto/qat/qat_asym_pmd.c
new file mode 100644
index 0..8d36300ac
--- /dev/null
+++ b/drivers/crypto/qat/qat_asym_pmd.c
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include "qat_asym_pmd.h"
+
+int
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
+{
+   return 0;
+}
+
+int
+qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
+{
+   return 0;
+}
diff --git a/drivers/crypto/qat/qat_asym_pmd.h 
b/drivers/crypto/qat/qat_asym_pmd.h
new file mode 100644
index 0..0465e0300
--- /dev/null
+++ b/drivers/crypto/qat/qat_asym_pmd.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corpora

[dpdk-dev] [PATCH v3 26/38] crypto/qat: rename variables

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Renamed sgl_cookie to cookie and qp_gen_config
to qat_gen_config, as it is intended to hold
more than just queue pair data.

Signed-off-by: Fiona Trahe 
Signed-off-by: Tomasz Jozwiak 
---
 drivers/crypto/qat/qat_device.c  |  2 +-
 drivers/crypto/qat/qat_device.h  |  2 +-
 drivers/crypto/qat/qat_sym_pmd.c | 14 +++---
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index c9d4b32ed..a0e414905 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -10,7 +10,7 @@
 
 /* Hardware device information per generation */
 __extension__
-struct qat_gen_hw_data qp_gen_config[] =  {
+struct qat_gen_hw_data qat_gen_config[] =  {
[QAT_GEN1] = {
.dev_gen = QAT_GEN1,
.qp_hw_data = qat_gen1_qps,
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index fd20a0147..4201a1c71 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -62,7 +62,7 @@ struct qat_gen_hw_data {
const struct qat_qp_hw_data (*qp_hw_data)[ADF_MAX_QPS_ON_ANY_SERVICE];
 };
 
-extern struct qat_gen_hw_data qp_gen_config[];
+extern struct qat_gen_hw_data qat_gen_config[];
 
 struct qat_pci_device *
 qat_pci_device_allocate(struct rte_pci_device *pci_dev);
diff --git a/drivers/crypto/qat/qat_sym_pmd.c b/drivers/crypto/qat/qat_sym_pmd.c
index aa71b4641..e6760b8f8 100644
--- a/drivers/crypto/qat/qat_sym_pmd.c
+++ b/drivers/crypto/qat/qat_sym_pmd.c
@@ -68,7 +68,7 @@ static void qat_sym_dev_info_get(struct rte_cryptodev *dev,
 {
struct qat_sym_dev_private *internals = dev->data->dev_private;
const struct qat_qp_hw_data *sym_hw_qps =
-   qp_gen_config[internals->qat_dev->qat_dev_gen]
+   qat_gen_config[internals->qat_dev->qat_dev_gen]
  .qp_hw_data[QAT_SERVICE_SYMMETRIC];
 
PMD_INIT_FUNC_TRACE();
@@ -143,7 +143,7 @@ static int qat_sym_qp_setup(struct rte_cryptodev *dev, 
uint16_t qp_id,
(struct qat_qp **)&(dev->data->queue_pairs[qp_id]);
struct qat_sym_dev_private *qat_private = dev->data->dev_private;
const struct qat_qp_hw_data *sym_hw_qps =
-   qp_gen_config[qat_private->qat_dev->qat_dev_gen]
+   qat_gen_config[qat_private->qat_dev->qat_dev_gen]
  .qp_hw_data[QAT_SERVICE_SYMMETRIC];
const struct qat_qp_hw_data *qp_hw_data = sym_hw_qps + qp_id;
 
@@ -178,16 +178,16 @@ static int qat_sym_qp_setup(struct rte_cryptodev *dev, 
uint16_t qp_id,
 
for (i = 0; i < qp->nb_descriptors; i++) {
 
-   struct qat_sym_op_cookie *sql_cookie =
+   struct qat_sym_op_cookie *cookie =
qp->op_cookies[i];
 
-   sql_cookie->qat_sgl_src_phys_addr =
-   rte_mempool_virt2iova(sql_cookie) +
+   cookie->qat_sgl_src_phys_addr =
+   rte_mempool_virt2iova(cookie) +
offsetof(struct qat_sym_op_cookie,
qat_sgl_src);
 
-   sql_cookie->qat_sgl_dst_phys_addr =
-   rte_mempool_virt2iova(sql_cookie) +
+   cookie->qat_sgl_dst_phys_addr =
+   rte_mempool_virt2iova(cookie) +
offsetof(struct qat_sym_op_cookie,
qat_sgl_dst);
}
-- 
2.17.0



[dpdk-dev] [PATCH v3 27/38] crypto/qat: modify debug message

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Removed crypto reference in common debug message.

Signed-off-by: Fiona Trahe 
Signed-off-by: Tomasz Jozwiak 
---
 drivers/crypto/qat/qat_common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/crypto/qat/qat_common.c b/drivers/crypto/qat/qat_common.c
index 5d6779757..c10c1421a 100644
--- a/drivers/crypto/qat/qat_common.c
+++ b/drivers/crypto/qat/qat_common.c
@@ -103,5 +103,5 @@ void qat_stats_reset(struct qat_pci_device *dev,
memset(&(qp[i]->stats), 0, sizeof(qp[i]->stats));
}
 
-   PMD_DRV_LOG(DEBUG, "QAT crypto: %d stats cleared", service);
+   PMD_DRV_LOG(DEBUG, "QAT: %d stats cleared", service);
 }
-- 
2.17.0



[dpdk-dev] [PATCH v3 25/38] crypto/qat: remove incorrect usage of bundle number

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

As bundle_num is included in qat_gen1_qps static array
there shouldn't be a multiplier used in qat_qps_per_service()
Then removed ADF_NUM_BUNDLES_PER_DEV as no longer used.
Also renamed ADF_MAX_QPS_PER_BUNDLE to ADF_MAX_QPS_ON_ANY_SERVICE
and reduced from 4 to 2 which is enough for all current devices.

Signed-off-by: Fiona Trahe 
---
 .../qat/qat_adf/adf_transport_access_macros.h |  5 ++---
 drivers/crypto/qat/qat_common.c   |  4 ++--
 drivers/crypto/qat/qat_device.h   |  4 ++--
 drivers/crypto/qat/qat_qp.c   | 19 ---
 drivers/crypto/qat/qat_qp.h   |  2 +-
 5 files changed, 11 insertions(+), 23 deletions(-)

diff --git a/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h 
b/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
index 2136d54ab..1eef5513f 100644
--- a/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
+++ b/drivers/crypto/qat/qat_adf/adf_transport_access_macros.h
@@ -50,9 +50,8 @@
 #define ADF_MAX_RING_SIZE ADF_RING_SIZE_4M
 #define ADF_DEFAULT_RING_SIZE ADF_RING_SIZE_16K
 
-#define ADF_NUM_BUNDLES_PER_DEV 1
-/* Maximum number of qps for any service type */
-#define ADF_MAX_QPS_PER_BUNDLE 4
+/* Maximum number of qps on a device for any service type */
+#define ADF_MAX_QPS_ON_ANY_SERVICE 2
 #define ADF_RING_DIR_TX0
 #define ADF_RING_DIR_RX1
 
diff --git a/drivers/crypto/qat/qat_common.c b/drivers/crypto/qat/qat_common.c
index f1759ea76..5d6779757 100644
--- a/drivers/crypto/qat/qat_common.c
+++ b/drivers/crypto/qat/qat_common.c
@@ -67,7 +67,7 @@ void qat_stats_get(struct qat_pci_device *dev,
}
 
qp = dev->qps_in_use[service];
-   for (i = 0; i < ADF_MAX_QPS_PER_BUNDLE; i++) {
+   for (i = 0; i < ADF_MAX_QPS_ON_ANY_SERVICE; i++) {
if (qp[i] == NULL) {
PMD_DRV_LOG(DEBUG, "Service %d Uninitialised qp %d",
service, i);
@@ -94,7 +94,7 @@ void qat_stats_reset(struct qat_pci_device *dev,
}
 
qp = dev->qps_in_use[service];
-   for (i = 0; i < ADF_MAX_QPS_PER_BUNDLE; i++) {
+   for (i = 0; i < ADF_MAX_QPS_ON_ANY_SERVICE; i++) {
if (qp[i] == NULL) {
PMD_DRV_LOG(DEBUG, "Service %d Uninitialised qp %d",
service, i);
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index fd1819354..fd20a0147 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -44,7 +44,7 @@ struct qat_pci_device {
uint8_t attached : 1;
/**< Flag indicating the device is attached */
 
-   struct qat_qp *qps_in_use[QAT_MAX_SERVICES][ADF_MAX_QPS_PER_BUNDLE];
+   struct qat_qp *qps_in_use[QAT_MAX_SERVICES][ADF_MAX_QPS_ON_ANY_SERVICE];
/**< links to qps set up for each service, index same as on API */
 
/* Data relating to symmetric crypto service */
@@ -59,7 +59,7 @@ struct qat_pci_device {
 
 struct qat_gen_hw_data {
enum qat_device_gen dev_gen;
-   const struct qat_qp_hw_data (*qp_hw_data)[ADF_MAX_QPS_PER_BUNDLE];
+   const struct qat_qp_hw_data (*qp_hw_data)[ADF_MAX_QPS_ON_ANY_SERVICE];
 };
 
 extern struct qat_gen_hw_data qp_gen_config[];
diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index f26fd0900..9938c1493 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -29,7 +29,7 @@
 
 __extension__
 const struct qat_qp_hw_data qat_gen1_qps[QAT_MAX_SERVICES]
-[ADF_MAX_QPS_PER_BUNDLE] = {
+[ADF_MAX_QPS_ON_ANY_SERVICE] = {
/* queue pairs which provide an asymmetric crypto service */
[QAT_SERVICE_ASYMMETRIC] = {
{
@@ -42,14 +42,11 @@ const struct qat_qp_hw_data qat_gen1_qps[QAT_MAX_SERVICES]
 
}, {
.service_type = QAT_SERVICE_ASYMMETRIC,
+   .hw_bundle_num = 0,
.tx_ring_num = 1,
.rx_ring_num = 9,
.tx_msg_size = 64,
.rx_msg_size = 32,
-   }, {
-   .service_type = QAT_SERVICE_INVALID,
-   }, {
-   .service_type = QAT_SERVICE_INVALID,
}
},
/* queue pairs which provide a symmetric crypto service */
@@ -69,10 +66,6 @@ const struct qat_qp_hw_data qat_gen1_qps[QAT_MAX_SERVICES]
.rx_ring_num = 11,
.tx_msg_size = 128,
.rx_msg_size = 32,
-   }, {
-   .service_type = QAT_SERVICE_INVALID,
-   }, {
-   .service_type = QAT_SERVICE_INVALID,
}
},
/* queue pairs which provide a compression service *

[dpdk-dev] [PATCH v3 28/38] crypto/qat: free cookie pool on queue creation error

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Signed-off-by: Fiona Trahe 
Signed-off-by: Tomasz Jozwiak 
---
 drivers/crypto/qat/qat_qp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index 9938c1493..569eace57 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -248,6 +248,9 @@ int qat_qp_setup(struct qat_pci_device *qat_dev,
return 0;
 
 create_err:
+   if (qp->op_cookie_pool)
+   rte_mempool_free(qp->op_cookie_pool);
+   rte_free(qp->op_cookies);
rte_free(qp);
return -EFAULT;
 }
-- 
2.17.0



[dpdk-dev] [PATCH v3 29/38] crypto/qat: remove unused macro

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Signed-off-by: Fiona Trahe 
Signed-off-by: Tomasz Jozwiak 
---
 drivers/crypto/qat/qat_sym.h | 6 --
 1 file changed, 6 deletions(-)

diff --git a/drivers/crypto/qat/qat_sym.h b/drivers/crypto/qat/qat_sym.h
index d887dc126..e46448bd2 100644
--- a/drivers/crypto/qat/qat_sym.h
+++ b/drivers/crypto/qat/qat_sym.h
@@ -9,12 +9,6 @@
 
 #include "qat_common.h"
 
-/*
- * This macro rounds up a number to a be a multiple of
- * the alignment when the alignment is a power of 2
- */
-#define ALIGN_POW2_ROUNDUP(num, align) \
-   (((num) + (align) - 1) & ~((align) - 1))
 #define QAT_64_BTYE_ALIGN_MASK (~0x3f)
 
 struct qat_sym_session;
-- 
2.17.0



[dpdk-dev] [PATCH v3 30/38] crypto/qat: move macro to common file

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

QAT_64_BTYE_ALIGN_MASK macro is not specific to
symmetric crypto, but it is common for other
future services.

Signed-off-by: Fiona Trahe 
Signed-off-by: Tomasz Jozwiak 
---
 drivers/crypto/qat/qat_common.h | 2 ++
 drivers/crypto/qat/qat_sym.h| 2 --
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/crypto/qat/qat_common.h b/drivers/crypto/qat/qat_common.h
index 8ecebe954..db85d5482 100644
--- a/drivers/crypto/qat/qat_common.h
+++ b/drivers/crypto/qat/qat_common.h
@@ -15,6 +15,8 @@
  */
 #define QAT_SGL_MAX_NUMBER 16
 
+#define QAT_64_BTYE_ALIGN_MASK (~0x3f)
+
 /* Intel(R) QuickAssist Technology device generation is enumerated
  * from one according to the generation of the device
  */
diff --git a/drivers/crypto/qat/qat_sym.h b/drivers/crypto/qat/qat_sym.h
index e46448bd2..bdb672be4 100644
--- a/drivers/crypto/qat/qat_sym.h
+++ b/drivers/crypto/qat/qat_sym.h
@@ -9,8 +9,6 @@
 
 #include "qat_common.h"
 
-#define QAT_64_BTYE_ALIGN_MASK (~0x3f)
-
 struct qat_sym_session;
 
 struct qat_sym_op_cookie {
-- 
2.17.0



[dpdk-dev] [PATCH v3 31/38] crypto/qat: register appropriately named device

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

For every QAT PCI device probed, populate a local rte_device
containing an rte_driver. The rte_driver was created in a previous
patch to provide a crypto-specific driver name: "crypto_qat".
This was previously only used for driver registration, now it's also
used in device creation.
This allows applications to find devices driven by "crypto_qat".

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_device.h  |  5 +
 drivers/crypto/qat/qat_sym_pmd.c | 38 
 2 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index 4201a1c71..3df6520c3 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -50,6 +50,11 @@ struct qat_pci_device {
/* Data relating to symmetric crypto service */
struct qat_sym_dev_private *sym_dev;
/**< link back to cryptodev private data */
+   struct rte_device sym_rte_dev;
+   /**< This represents the crypto subset of this pci device.
+* Register with this rather than with the one in
+* pci_dev so that its driver can have a crypto-specific name
+*/
 
/* Data relating to compression service */
 
diff --git a/drivers/crypto/qat/qat_sym_pmd.c b/drivers/crypto/qat/qat_sym_pmd.c
index e6760b8f8..28e579b77 100644
--- a/drivers/crypto/qat/qat_sym_pmd.c
+++ b/drivers/crypto/qat/qat_sym_pmd.c
@@ -232,6 +232,18 @@ qat_sym_pmd_dequeue_op_burst(void *qp, struct 
rte_crypto_op **ops,
return qat_dequeue_op_burst(qp, (void **)ops, nb_ops);
 }
 
+/* An rte_driver is needed in the registration of both the device and the 
driver
+ * with cryptodev.
+ * The actual qat pci's rte_driver can't be used as its name represents
+ * the whole pci device with all services. Think of this as a holder for a name
+ * for the crypto part of the pci device.
+ */
+static const char qat_sym_drv_name[] = RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD);
+static const struct rte_driver cryptodev_qat_sym_driver = {
+   .name = qat_sym_drv_name,
+   .alias = qat_sym_drv_name
+};
+
 int
 qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
@@ -249,12 +261,19 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
qat_pci_dev->name, "sym");
PMD_DRV_LOG(DEBUG, "Creating QAT SYM device %s", name);
 
+   /* Populate subset device to use in cryptodev device creation */
+   qat_pci_dev->sym_rte_dev.driver = &cryptodev_qat_sym_driver;
+   qat_pci_dev->sym_rte_dev.numa_node =
+   qat_pci_dev->pci_dev->device.numa_node;
+   qat_pci_dev->sym_rte_dev.devargs = NULL;
+
cryptodev = rte_cryptodev_pmd_create(name,
-   &qat_pci_dev->pci_dev->device, &init_params);
+   &(qat_pci_dev->sym_rte_dev), &init_params);
 
if (cryptodev == NULL)
return -ENODEV;
 
+   qat_pci_dev->sym_rte_dev.name = cryptodev->data->name;
cryptodev->driver_id = cryptodev_qat_driver_id;
cryptodev->dev_ops = &crypto_qat_ops;
 
@@ -287,7 +306,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
}
 
PMD_DRV_LOG(DEBUG, "Created QAT SYM device %s as cryptodev instance %d",
-   name, internals->sym_dev_id);
+   cryptodev->data->name, internals->sym_dev_id);
return 0;
 }
 
@@ -304,23 +323,14 @@ qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev)
/* free crypto device */
cryptodev = rte_cryptodev_pmd_get_dev(qat_pci_dev->sym_dev->sym_dev_id);
rte_cryptodev_pmd_destroy(cryptodev);
+   qat_pci_dev->sym_rte_dev.name = NULL;
qat_pci_dev->sym_dev = NULL;
 
return 0;
 }
 
 
-/* An rte_driver is needed in the registration of both the device and the 
driver
- * with cryptodev.
- * The actual qat pci's rte_driver can't be used as its name represents
- * the whole pci device with all services. Think of this as a holder for a name
- * for the crypto part of the pci device.
- */
-static const char qat_sym_drv_name[] = RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD);
-static struct rte_driver cryptodev_qat_sym_driver = {
-   .name = qat_sym_drv_name,
-   .alias = qat_sym_drv_name
-};
 static struct cryptodev_driver qat_crypto_drv;
-RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv, cryptodev_qat_sym_driver,
+RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
+   cryptodev_qat_sym_driver,
cryptodev_qat_driver_id);
-- 
2.17.0



[dpdk-dev] [PATCH v3 33/38] crypto/qat: optimize adf modulo function

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Signed-off-by: Tomasz Jozwiak 
Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c | 19 ---
 drivers/crypto/qat/qat_qp.h |  2 +-
 2 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index 569eace57..b84ba643c 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -376,7 +376,7 @@ qat_queue_create(struct qat_pci_device *qat_dev, struct 
qat_queue *queue,
 
queue->max_inflights = ADF_MAX_INFLIGHTS(queue->queue_size,
ADF_BYTES_TO_MSG_SIZE(desc_size));
-   queue->modulo = ADF_RING_SIZE_MODULO(queue->queue_size);
+   queue->modulo_mask = (1 << ADF_RING_SIZE_MODULO(queue->queue_size)) - 1;
 
if (queue->max_inflights < 2) {
PMD_DRV_LOG(ERR, "Invalid num inflights");
@@ -401,11 +401,11 @@ qat_queue_create(struct qat_pci_device *qat_dev, struct 
qat_queue *queue,
queue->hw_queue_number, queue_base);
 
PMD_DRV_LOG(DEBUG, "RING: Name:%s, size in CSR: %u, in bytes %u,"
-   " nb msgs %u, msg_size %u, max_inflights %u modulo %u",
+   " nb msgs %u, msg_size %u, max_inflights %u modulo mask %u",
queue->memz_name,
queue->queue_size, queue_size_bytes,
qp_conf->nb_descriptors, desc_size,
-   queue->max_inflights, queue->modulo);
+   queue->max_inflights, queue->modulo_mask);
 
return 0;
 
@@ -494,13 +494,9 @@ static void adf_configure_queues(struct qat_qp *qp)
queue->hw_queue_number, queue_config);
 }
 
-
-static inline uint32_t adf_modulo(uint32_t data, uint32_t shift)
+static inline uint32_t adf_modulo(uint32_t data, uint32_t modulo_mask)
 {
-   uint32_t div = data >> shift;
-   uint32_t mult = div << shift;
-
-   return data - mult;
+   return data & modulo_mask;
 }
 
 static inline void
@@ -584,7 +580,7 @@ qat_enqueue_op_burst(void *qp, void **ops, uint16_t nb_ops)
goto kick_tail;
}
 
-   tail = adf_modulo(tail + queue->msg_size, queue->modulo);
+   tail = adf_modulo(tail + queue->msg_size, queue->modulo_mask);
ops++;
nb_ops_sent++;
}
@@ -620,7 +616,8 @@ qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops)
tmp_qp->op_cookies[head / rx_queue->msg_size],
tmp_qp->qat_dev_gen);
 
-   head = adf_modulo(head + rx_queue->msg_size, rx_queue->modulo);
+   head = adf_modulo(head + rx_queue->msg_size,
+ rx_queue->modulo_mask);
 
resp_msg = (uint8_t *)rx_queue->base_addr + head;
ops++;
diff --git a/drivers/crypto/qat/qat_qp.h b/drivers/crypto/qat/qat_qp.h
index 6f07bd67c..764125d59 100644
--- a/drivers/crypto/qat/qat_qp.h
+++ b/drivers/crypto/qat/qat_qp.h
@@ -59,7 +59,7 @@ struct qat_queue {
rte_iova_t  base_phys_addr; /* Queue physical address */
uint32_thead;   /* Shadow copy of the head */
uint32_ttail;   /* Shadow copy of the tail */
-   uint32_tmodulo;
+   uint32_tmodulo_mask;
uint32_tmsg_size;
uint16_tmax_inflights;
uint32_tqueue_size;
-- 
2.17.0



[dpdk-dev] [PATCH v3 34/38] crypto/qat: remove unused arguments

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Process response function is only implemented
for crypto symmetric operations, which do not require
some of the arguments.
Therefore, these arguments can be removed from the
function prototype.

Signed-off-by: Tomasz Jozwiak 
Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c  | 4 +---
 drivers/crypto/qat/qat_qp.h  | 4 +---
 drivers/crypto/qat/qat_sym.c | 4 +---
 drivers/crypto/qat/qat_sym.h | 4 +---
 4 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index b84ba643c..0fdec0da0 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -612,9 +612,7 @@ qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops)
while (*(uint32_t *)resp_msg != ADF_RING_EMPTY_SIG &&
resp_counter != nb_ops) {
 
-   tmp_qp->process_response(ops, resp_msg,
-   tmp_qp->op_cookies[head / rx_queue->msg_size],
-   tmp_qp->qat_dev_gen);
+   tmp_qp->process_response(ops, resp_msg);
 
head = adf_modulo(head + rx_queue->msg_size,
  rx_queue->modulo_mask);
diff --git a/drivers/crypto/qat/qat_qp.h b/drivers/crypto/qat/qat_qp.h
index 764125d59..eb9188410 100644
--- a/drivers/crypto/qat/qat_qp.h
+++ b/drivers/crypto/qat/qat_qp.h
@@ -21,9 +21,7 @@ typedef int (*build_request_t)(void *op,
enum qat_device_gen qat_dev_gen);
 /**< Build a request from an op. */
 
-typedef int (*process_response_t)(void **ops,
-   uint8_t *resp, void *op_cookie,
-   enum qat_device_gen qat_dev_gen);
+typedef int (*process_response_t)(void **ops, uint8_t *resp);
 /**< Process a response descriptor and return the associated op. */
 
 /**
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 15244d113..f613adce6 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -661,9 +661,7 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg,
 }
 
 int
-qat_sym_process_response(void **op, uint8_t *resp,
-   __rte_unused void *op_cookie,
-   __rte_unused enum qat_device_gen qat_dev_gen)
+qat_sym_process_response(void **op, uint8_t *resp)
 {
 
struct icp_qat_fw_comn_resp *resp_msg =
diff --git a/drivers/crypto/qat/qat_sym.h b/drivers/crypto/qat/qat_sym.h
index bdb672be4..dffd5f369 100644
--- a/drivers/crypto/qat/qat_sym.h
+++ b/drivers/crypto/qat/qat_sym.h
@@ -22,8 +22,6 @@ int
 qat_sym_build_request(void *in_op, uint8_t *out_msg,
void *op_cookie, enum qat_device_gen qat_dev_gen);
 int
-qat_sym_process_response(void **op, uint8_t *resp,
-   __rte_unused void *op_cookie,
-   __rte_unused enum qat_device_gen qat_dev_gen);
+qat_sym_process_response(void **op, uint8_t *resp);
 
 #endif /* _QAT_SYM_H_ */
-- 
2.17.0



[dpdk-dev] [PATCH v3 32/38] crypto/qat: add max PCI devices to config file

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Added CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES to
build config files.

Signed-off-by: Tomasz Jozwiak 
---
 config/common_base  | 5 -
 config/rte_config.h | 2 ++
 drivers/crypto/qat/qat_device.c | 8 
 drivers/crypto/qat/qat_device.h | 2 --
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/config/common_base b/config/common_base
index 6b0d1cbbb..cf0741199 100644
--- a/config/common_base
+++ b/config/common_base
@@ -495,7 +495,10 @@ CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_DRIVER=n
 # on a single QuickAssist device.
 #
 CONFIG_RTE_QAT_PMD_MAX_NB_SESSIONS=2048
-
+#
+# Max. number of QuickAssist devices, which can be detected and attached
+#
+CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES=48
 #
 # Compile PMD for virtio crypto devices
 #
diff --git a/config/rte_config.h b/config/rte_config.h
index a1d01759e..e353d8d6d 100644
--- a/config/rte_config.h
+++ b/config/rte_config.h
@@ -91,6 +91,8 @@
  */
 /* QuickAssist device */
 #define RTE_QAT_PMD_MAX_NB_SESSIONS 2048
+/* Max. number of QuickAssist devices which can be attached */
+#define RTE_PMD_QAT_MAX_PCI_DEVICES 48
 
 /* virtio crypto defines */
 #define RTE_VIRTIO_CRYPTO_PMD_MAX_NB_SESSIONS 1024
diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index a0e414905..0cab2e928 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -23,7 +23,7 @@ struct qat_gen_hw_data qat_gen_config[] =  {
 };
 
 
-static struct qat_pci_device qat_pci_devices[QAT_MAX_PCI_DEVICES];
+static struct qat_pci_device qat_pci_devices[RTE_PMD_QAT_MAX_PCI_DEVICES];
 static int qat_nb_pci_devices;
 
 /*
@@ -62,7 +62,7 @@ qat_pci_get_named_dev(const char *name)
if (name == NULL)
return NULL;
 
-   for (i = 0; i < QAT_MAX_PCI_DEVICES; i++) {
+   for (i = 0; i < RTE_PMD_QAT_MAX_PCI_DEVICES; i++) {
dev = &qat_pci_devices[i];
 
if ((dev->attached == QAT_ATTACHED) &&
@@ -78,7 +78,7 @@ qat_pci_find_free_device_index(void)
 {
uint8_t dev_id;
 
-   for (dev_id = 0; dev_id < QAT_MAX_PCI_DEVICES; dev_id++) {
+   for (dev_id = 0; dev_id < RTE_PMD_QAT_MAX_PCI_DEVICES; dev_id++) {
if (qat_pci_devices[dev_id].attached == QAT_DETACHED)
break;
}
@@ -111,7 +111,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
}
 
qat_dev_id = qat_pci_find_free_device_index();
-   if (qat_dev_id == QAT_MAX_PCI_DEVICES) {
+   if (qat_dev_id == RTE_PMD_QAT_MAX_PCI_DEVICES) {
PMD_DRV_LOG(ERR, "Reached maximum number of QAT devices");
return NULL;
}
diff --git a/drivers/crypto/qat/qat_device.h b/drivers/crypto/qat/qat_device.h
index 3df6520c3..e18c8a706 100644
--- a/drivers/crypto/qat/qat_device.h
+++ b/drivers/crypto/qat/qat_device.h
@@ -11,11 +11,9 @@
 #include "adf_transport_access_macros.h"
 #include "qat_qp.h"
 
-
 #define QAT_DETACHED  (0)
 #define QAT_ATTACHED  (1)
 
-#define QAT_MAX_PCI_DEVICES48
 #define QAT_DEV_NAME_MAX_LEN   64
 
 /*
-- 
2.17.0



[dpdk-dev] [PATCH v3 36/38] crypto/qat: check for service type

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Other services, apart from symmetric crypto,
such as compression, will be added in future patches.
Therefore, the assumption that only symmetric crypto
operations are processed will not be valid anymore,
and service type needs to be checked.

Signed-off-by: Tomasz Jozwiak 
Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c | 6 +-
 drivers/crypto/qat/qat_qp.h | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index b190f2cee..f9d3762d7 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -239,6 +239,7 @@ int qat_qp_setup(struct qat_pci_device *qat_dev,
 
qp->qat_dev_gen = qat_dev->qat_dev_gen;
qp->build_request = qat_qp_conf->build_request;
+   qp->service_type = qat_qp_conf->hw->service_type;
qp->qat_dev = qat_dev;
 
PMD_DRV_LOG(DEBUG, "QP setup complete: id: %d, cookiepool: %s",
@@ -612,7 +613,10 @@ qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops)
while (*(uint32_t *)resp_msg != ADF_RING_EMPTY_SIG &&
resp_counter != nb_ops) {
 
-   qat_sym_process_response(ops, resp_msg);
+   if (tmp_qp->service_type == QAT_SERVICE_SYMMETRIC)
+   qat_sym_process_response(ops, resp_msg);
+   /* add qat_asym_process_response here */
+   /* add qat_comp_process_response here */
 
head = adf_modulo(head + rx_queue->msg_size,
  rx_queue->modulo_mask);
diff --git a/drivers/crypto/qat/qat_qp.h b/drivers/crypto/qat/qat_qp.h
index 0b3d6d3aa..59db945e7 100644
--- a/drivers/crypto/qat/qat_qp.h
+++ b/drivers/crypto/qat/qat_qp.h
@@ -79,6 +79,7 @@ struct qat_qp {
uint32_t nb_descriptors;
enum qat_device_gen qat_dev_gen;
build_request_t build_request;
+   enum qat_service_type service_type;
struct qat_pci_device *qat_dev;
/**< qat device this qp is on */
 } __rte_cache_aligned;
-- 
2.17.0



[dpdk-dev] [PATCH v3 35/38] crypto/qat: make response process function inline

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Optimize the dequeue function by inlining the response
processing function, assuming only symmetric
operations are supported.

Signed-off-by: Tomasz Jozwiak 
Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_qp.c  |   4 +-
 drivers/crypto/qat/qat_qp.h  |   5 --
 drivers/crypto/qat/qat_sym.c | 127 --
 drivers/crypto/qat/qat_sym.h | 131 ++-
 drivers/crypto/qat/qat_sym_pmd.c |   1 -
 5 files changed, 131 insertions(+), 137 deletions(-)

diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index 0fdec0da0..b190f2cee 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -14,6 +14,7 @@
 #include "qat_logs.h"
 #include "qat_device.h"
 #include "qat_qp.h"
+#include "qat_sym.h"
 #include "adf_transport_access_macros.h"
 
 
@@ -238,7 +239,6 @@ int qat_qp_setup(struct qat_pci_device *qat_dev,
 
qp->qat_dev_gen = qat_dev->qat_dev_gen;
qp->build_request = qat_qp_conf->build_request;
-   qp->process_response = qat_qp_conf->process_response;
qp->qat_dev = qat_dev;
 
PMD_DRV_LOG(DEBUG, "QP setup complete: id: %d, cookiepool: %s",
@@ -612,7 +612,7 @@ qat_dequeue_op_burst(void *qp, void **ops, uint16_t nb_ops)
while (*(uint32_t *)resp_msg != ADF_RING_EMPTY_SIG &&
resp_counter != nb_ops) {
 
-   tmp_qp->process_response(ops, resp_msg);
+   qat_sym_process_response(ops, resp_msg);
 
head = adf_modulo(head + rx_queue->msg_size,
  rx_queue->modulo_mask);
diff --git a/drivers/crypto/qat/qat_qp.h b/drivers/crypto/qat/qat_qp.h
index eb9188410..0b3d6d3aa 100644
--- a/drivers/crypto/qat/qat_qp.h
+++ b/drivers/crypto/qat/qat_qp.h
@@ -21,9 +21,6 @@ typedef int (*build_request_t)(void *op,
enum qat_device_gen qat_dev_gen);
 /**< Build a request from an op. */
 
-typedef int (*process_response_t)(void **ops, uint8_t *resp);
-/**< Process a response descriptor and return the associated op. */
-
 /**
  * Structure with data needed for creation of queue pair.
  */
@@ -44,7 +41,6 @@ struct qat_qp_config {
uint32_t cookie_size;
int socket_id;
build_request_t build_request;
-   process_response_t process_response;
const char *service_str;
 };
 
@@ -83,7 +79,6 @@ struct qat_qp {
uint32_t nb_descriptors;
enum qat_device_gen qat_dev_gen;
build_request_t build_request;
-   process_response_t process_response;
struct qat_pci_device *qat_dev;
/**< qat device this qp is on */
 } __rte_cache_aligned;
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index f613adce6..887d4ebcd 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -12,44 +12,7 @@
 #include 
 
 #include "qat_logs.h"
-#include "qat_sym_session.h"
 #include "qat_sym.h"
-#include "qat_sym_pmd.h"
-
-#define BYTE_LENGTH8
-/* bpi is only used for partial blocks of DES and AES
- * so AES block len can be assumed as max len for iv, src and dst
- */
-#define BPI_MAX_ENCR_IV_LEN ICP_QAT_HW_AES_BLK_SZ
-
-/** Encrypt a single partial block
- *  Depends on openssl libcrypto
- *  Uses ECB+XOR to do CFB encryption, same result, more performant
- */
-static inline int
-bpi_cipher_encrypt(uint8_t *src, uint8_t *dst,
-   uint8_t *iv, int ivlen, int srclen,
-   void *bpi_ctx)
-{
-   EVP_CIPHER_CTX *ctx = (EVP_CIPHER_CTX *)bpi_ctx;
-   int encrypted_ivlen;
-   uint8_t encrypted_iv[BPI_MAX_ENCR_IV_LEN];
-   uint8_t *encr = encrypted_iv;
-
-   /* ECB method: encrypt the IV, then XOR this with plaintext */
-   if (EVP_EncryptUpdate(ctx, encrypted_iv, &encrypted_ivlen, iv, ivlen)
-   <= 0)
-   goto cipher_encrypt_err;
-
-   for (; srclen != 0; --srclen, ++dst, ++src, ++encr)
-   *dst = *src ^ *encr;
-
-   return 0;
-
-cipher_encrypt_err:
-   PMD_DRV_LOG(ERR, "libcrypto ECB cipher encrypt failed");
-   return -EINVAL;
-}
 
 /** Decrypt a single partial block
  *  Depends on openssl libcrypto
@@ -136,62 +99,6 @@ qat_bpicipher_preprocess(struct qat_sym_session *ctx,
return sym_op->cipher.data.length - last_block_len;
 }
 
-static inline uint32_t
-qat_bpicipher_postprocess(struct qat_sym_session *ctx,
-   struct rte_crypto_op *op)
-{
-   int block_len = qat_cipher_get_block_size(ctx->qat_cipher_alg);
-   struct rte_crypto_sym_op *sym_op = op->sym;
-   uint8_t last_block_len = block_len > 0 ?
-   sym_op->cipher.data.length % block_len : 0;
-
-   if (last_block_len > 0 &&
-   

[dpdk-dev] [PATCH v3 37/38] doc/qat: specify QAT driver and device name formats

2018-06-13 Thread Tomasz Jozwiak
From: Fiona Trahe 

Document the driver and device naming formats.
Changed the underscores alignment.

Signed-off-by: Fiona Trahe 
Signed-off-by: Tomasz Jozwiak 
---
 doc/guides/cryptodevs/qat.rst | 12 
 1 file changed, 12 insertions(+)

diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
index 8c8fefaa0..22a2c715d 100644
--- a/doc/guides/cryptodevs/qat.rst
+++ b/doc/guides/cryptodevs/qat.rst
@@ -359,3 +359,15 @@ length of data to authenticate (op.sym.auth.data.length) 
must be the length
 of all the items described above, including the padding at the end.
 Also, offset of data to authenticate (op.sym.auth.data.offset)
 must be such that points at the start of the COUNT bytes.
+
+Device and driver naming
+
+
+The qat crypto driver name is "crypto_qat".
+This name is passed to the dpdk-test-crypto-perf tool in the -devtype 
parameter.
+The rte_cryptodev_devices_get() can return the devices exposed by a driver.
+
+Each qat crypto device has a unique name, in format
+_, e.g. ":41:01.0_qat_sym".
+This name can be passed to rte_cryptodev_get_dev_id() to get the device_id.
+This is also the format of the slave parameter passed to the crypto scheduler.
-- 
2.17.0



[dpdk-dev] [PATCH v3 38/38] crypto/qat: remove configurable max number of sessions

2018-06-13 Thread Tomasz Jozwiak
This patch removes CONFIG_RTE_QAT_PMD_MAX_NB_SESSIONS
from common_base, config/rte_config.h files and
defines QAT_SYM_PMD_MAX_NB_SESSIONS inside qat_sym_pmd.h
file instead.

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 config/common_base   | 5 -
 config/rte_config.h  | 5 -
 drivers/crypto/qat/qat_sym_pmd.c | 4 ++--
 drivers/crypto/qat/qat_sym_pmd.h | 1 +
 4 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/config/common_base b/config/common_base
index cf0741199..f03f9c390 100644
--- a/config/common_base
+++ b/config/common_base
@@ -491,11 +491,6 @@ CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_TX=n
 CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_RX=n
 CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_DRIVER=n
 #
-# Number of sessions to create in the session memory pool
-# on a single QuickAssist device.
-#
-CONFIG_RTE_QAT_PMD_MAX_NB_SESSIONS=2048
-#
 # Max. number of QuickAssist devices, which can be detected and attached
 #
 CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES=48
diff --git a/config/rte_config.h b/config/rte_config.h
index e353d8d6d..0ba0ead7e 100644
--- a/config/rte_config.h
+++ b/config/rte_config.h
@@ -85,12 +85,7 @@
 
 /** driver defines /
 
-/*
- * Number of sessions to create in the session memory pool
- * on a single instance of crypto HW device.
- */
 /* QuickAssist device */
-#define RTE_QAT_PMD_MAX_NB_SESSIONS 2048
 /* Max. number of QuickAssist devices which can be attached */
 #define RTE_PMD_QAT_MAX_PCI_DEVICES 48
 
diff --git a/drivers/crypto/qat/qat_sym_pmd.c b/drivers/crypto/qat/qat_sym_pmd.c
index 6b39b32f8..c94a8a197 100644
--- a/drivers/crypto/qat/qat_sym_pmd.c
+++ b/drivers/crypto/qat/qat_sym_pmd.c
@@ -77,7 +77,7 @@ static void qat_sym_dev_info_get(struct rte_cryptodev *dev,
qat_qps_per_service(sym_hw_qps, QAT_SERVICE_SYMMETRIC);
info->feature_flags = dev->feature_flags;
info->capabilities = internals->qat_dev_capabilities;
-   info->sym.max_nb_sessions = RTE_QAT_PMD_MAX_NB_SESSIONS;
+   info->sym.max_nb_sessions = QAT_SYM_PMD_MAX_NB_SESSIONS;
info->driver_id = cryptodev_qat_driver_id;
info->pci_dev = RTE_DEV_TO_PCI(dev->device);
}
@@ -250,7 +250,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
.name = "",
.socket_id = qat_pci_dev->pci_dev->device.numa_node,
.private_data_size = sizeof(struct qat_sym_dev_private),
-   .max_nb_sessions = RTE_QAT_PMD_MAX_NB_SESSIONS
+   .max_nb_sessions = QAT_SYM_PMD_MAX_NB_SESSIONS
};
char name[RTE_CRYPTODEV_NAME_MAX_LEN];
struct rte_cryptodev *cryptodev;
diff --git a/drivers/crypto/qat/qat_sym_pmd.h b/drivers/crypto/qat/qat_sym_pmd.h
index efa3b0775..80a198741 100644
--- a/drivers/crypto/qat/qat_sym_pmd.h
+++ b/drivers/crypto/qat/qat_sym_pmd.h
@@ -13,6 +13,7 @@
 
 /**< Intel(R) QAT Symmetric Crypto PMD device name */
 #define CRYPTODEV_NAME_QAT_SYM_PMD crypto_qat
+#define QAT_SYM_PMD_MAX_NB_SESSIONS2048
 
 extern uint8_t cryptodev_qat_driver_id;
 
-- 
2.17.0



[dpdk-dev] [PATCH v2 2/5] crypto/qat: move to dynamic logging for non-dp trace

2018-06-14 Thread Tomasz Jozwiak
For all trace not on the data-path move to dynamic logging.

Signed-off-by: Tomasz Jozwiak 
Signed-off-by: Fiona Trahe 
---
 config/common_base |  1 -
 drivers/crypto/qat/Makefile|  1 +
 drivers/crypto/qat/meson.build |  1 +
 drivers/crypto/qat/qat_logs.c  | 17 +
 drivers/crypto/qat/qat_logs.h  | 12 
 5 files changed, 23 insertions(+), 9 deletions(-)
 create mode 100644 drivers/crypto/qat/qat_logs.c

diff --git a/config/common_base b/config/common_base
index 0e6f2fb..7a9b26e 100644
--- a/config/common_base
+++ b/config/common_base
@@ -488,7 +488,6 @@ CONFIG_RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS=2048
 CONFIG_RTE_LIBRTE_PMD_QAT=n
 CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_TX=n
 CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_RX=n
-CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_DRIVER=n
 #
 # Max. number of QuickAssist devices, which can be detected and attached
 #
diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index d467683..ef4a567 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -26,6 +26,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_logs.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_pmd.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_asym_pmd.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_comp_pmd.c
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index e22e08f..bcab16e 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -8,6 +8,7 @@ endif
 sources = files('qat_common.c',
'qat_qp.c',
'qat_device.c',
+   'qat_logs.c',
'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c',
'qat_asym_pmd.c',
'qat_comp_pmd.c')
diff --git a/drivers/crypto/qat/qat_logs.c b/drivers/crypto/qat/qat_logs.c
new file mode 100644
index 000..fc8d9a7
--- /dev/null
+++ b/drivers/crypto/qat/qat_logs.c
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+
+int qat_gen_logtype;
+
+RTE_INIT(qat_pci_init_log);
+static void
+qat_pci_init_log(void)
+{
+   /* Non-data-path logging for pci device and all services */
+   qat_gen_logtype = rte_log_register("pmd.qat_general");
+   if (qat_gen_logtype >= 0)
+   rte_log_set_level(qat_gen_logtype, RTE_LOG_NOTICE);
+}
diff --git a/drivers/crypto/qat/qat_logs.h b/drivers/crypto/qat/qat_logs.h
index e6f8a01..b00a06b 100644
--- a/drivers/crypto/qat/qat_logs.h
+++ b/drivers/crypto/qat/qat_logs.h
@@ -5,14 +5,10 @@
 #ifndef _QAT_LOGS_H_
 #define _QAT_LOGS_H_
 
-#ifdef RTE_LIBRTE_PMD_QAT_DEBUG_DRIVER
-#define PMD_DRV_LOG_RAW(level, fmt, args...) \
-   RTE_LOG(level, PMD, "%s(): " fmt, __func__, ## args)
-#else
-#define PMD_DRV_LOG_RAW(level, fmt, args...) do { } while (0)
-#endif
+extern int qat_gen_logtype;
 
-#define PMD_DRV_LOG(level, fmt, args...) \
-   PMD_DRV_LOG_RAW(level, fmt "\n", ## args)
+#define PMD_DRV_LOG(level, fmt, args...)   \
+   rte_log(RTE_LOG_ ## level, qat_gen_logtype, \
+   "%s(): " fmt "\n", __func__, ## args)
 
 #endif /* _QAT_LOGS_H_ */
-- 
2.7.4



[dpdk-dev] [PATCH v2 1/5] crypto/qat: cleanup unused and useless trace

2018-06-14 Thread Tomasz Jozwiak
Removed INIT_FUNC trace and other unused macros.

Signed-off-by: Tomasz Jozwiak 
Signed-off-by: Fiona Trahe 
---
 config/common_base   |  1 -
 drivers/crypto/qat/qat_logs.h| 31 ---
 drivers/crypto/qat/qat_qp.c  | 11 +--
 drivers/crypto/qat/qat_sym_pmd.c |  7 +--
 drivers/crypto/qat/qat_sym_session.c |  9 -
 5 files changed, 2 insertions(+), 57 deletions(-)

diff --git a/config/common_base b/config/common_base
index f03f9c3..0e6f2fb 100644
--- a/config/common_base
+++ b/config/common_base
@@ -486,7 +486,6 @@ CONFIG_RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS=2048
 # Compile PMD for QuickAssist based devices
 #
 CONFIG_RTE_LIBRTE_PMD_QAT=n
-CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_INIT=n
 CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_TX=n
 CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_RX=n
 CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_DRIVER=n
diff --git a/drivers/crypto/qat/qat_logs.h b/drivers/crypto/qat/qat_logs.h
index c9144bf..e6f8a01 100644
--- a/drivers/crypto/qat/qat_logs.h
+++ b/drivers/crypto/qat/qat_logs.h
@@ -5,37 +5,6 @@
 #ifndef _QAT_LOGS_H_
 #define _QAT_LOGS_H_
 
-#define PMD_INIT_LOG(level, fmt, args...) \
-   rte_log(RTE_LOG_ ## level, RTE_LOGTYPE_PMD, \
-   "PMD: %s(): " fmt "\n", __func__, ##args)
-
-#ifdef RTE_LIBRTE_PMD_QAT_DEBUG_INIT
-#define PMD_INIT_FUNC_TRACE() PMD_INIT_LOG(DEBUG, " >>")
-#else
-#define PMD_INIT_FUNC_TRACE() do { } while (0)
-#endif
-
-#ifdef RTE_LIBRTE_PMD_QAT_DEBUG_RX
-#define PMD_RX_LOG(level, fmt, args...) \
-   RTE_LOG(level, PMD, "%s(): " fmt "\n", __func__, ## args)
-#else
-#define PMD_RX_LOG(level, fmt, args...) do { } while (0)
-#endif
-
-#ifdef RTE_LIBRTE_PMD_QAT_DEBUG_TX
-#define PMD_TX_LOG(level, fmt, args...) \
-   RTE_LOG(level, PMD, "%s(): " fmt "\n", __func__, ## args)
-#else
-#define PMD_TX_LOG(level, fmt, args...) do { } while (0)
-#endif
-
-#ifdef RTE_LIBRTE_PMD_QAT_DEBUG_TX_FREE
-#define PMD_TX_FREE_LOG(level, fmt, args...) \
-   RTE_LOG(level, PMD, "%s(): " fmt "\n", __func__, ## args)
-#else
-#define PMD_TX_FREE_LOG(level, fmt, args...) do { } while (0)
-#endif
-
 #ifdef RTE_LIBRTE_PMD_QAT_DEBUG_DRIVER
 #define PMD_DRV_LOG_RAW(level, fmt, args...) \
RTE_LOG(level, PMD, "%s(): " fmt, __func__, ## args)
diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c
index f9d3762..531752b 100644
--- a/drivers/crypto/qat/qat_qp.c
+++ b/drivers/crypto/qat/qat_qp.c
@@ -120,7 +120,6 @@ queue_dma_zone_reserve(const char *queue_name, uint32_t 
queue_size,
 {
const struct rte_memzone *mz;
 
-   PMD_INIT_FUNC_TRACE();
mz = rte_memzone_lookup(queue_name);
if (mz != 0) {
if (((size_t)queue_size <= mz->len) &&
@@ -194,7 +193,7 @@ int qat_qp_setup(struct qat_pci_device *qat_dev,
 
if (qat_queue_create(qat_dev, &(qp->tx_q), qat_qp_conf,
ADF_RING_DIR_TX) != 0) {
-   PMD_INIT_LOG(ERR, "Tx queue create failed "
+   PMD_DRV_LOG(ERR, "Tx queue create failed "
"queue_pair_id=%u", queue_pair_id);
goto create_err;
}
@@ -261,7 +260,6 @@ int qat_qp_release(struct qat_qp **qp_addr)
struct qat_qp *qp = *qp_addr;
uint32_t i;
 
-   PMD_INIT_FUNC_TRACE();
if (qp == NULL) {
PMD_DRV_LOG(DEBUG, "qp already freed");
return 0;
@@ -418,7 +416,6 @@ qat_queue_create(struct qat_pci_device *qat_dev, struct 
qat_queue *queue,
 static int qat_qp_check_queue_alignment(uint64_t phys_addr,
uint32_t queue_size_bytes)
 {
-   PMD_INIT_FUNC_TRACE();
if (((queue_size_bytes - 1) & phys_addr) != 0)
return -EINVAL;
return 0;
@@ -429,7 +426,6 @@ static int adf_verify_queue_size(uint32_t msg_size, 
uint32_t msg_num,
 {
uint8_t i = ADF_MIN_RING_SIZE;
 
-   PMD_INIT_FUNC_TRACE();
for (; i <= ADF_MAX_RING_SIZE; i++)
if ((msg_size * msg_num) ==
(uint32_t)ADF_SIZE_TO_RING_SIZE_IN_BYTES(i)) {
@@ -448,8 +444,6 @@ static void adf_queue_arb_enable(struct qat_queue *txq, 
void *base_addr,
txq->hw_bundle_number);
uint32_t value;
 
-   PMD_INIT_FUNC_TRACE();
-
rte_spinlock_lock(lock);
value = ADF_CSR_RD(base_addr, arb_csr_offset);
value |= (0x01 << txq->hw_queue_number);
@@ -465,8 +459,6 @@ static void adf_queue_arb_disable(struct qat_queue *txq, 
void *base_addr,
txq->hw_bundle_number);
uint32_t value;
 
-   PMD_INIT_FUNC_TRACE();
-
rte_spinlock_lock(lock);
value = ADF_CSR_RD(base_addr, arb_csr_offset);
   

[dpdk-dev] [PATCH v2 0/5] crypto/qat: move to dynamic logging

2018-06-14 Thread Tomasz Jozwiak
Note this patchset is targeting 18.08 release and depends on the qat 
refactoring patchset:
http://dpdk.org/ml/archives/dev/2018-May/101306.html
 
Move to dynamic logging and cleanup trace.

Changes for v2:
 - fixed some bugs detected in patch 2/5 when using clang

Fiona Trahe (2):
  crypto/qat: rename log macro for non-dp logs
  doc/qat: document debug options

Tomasz Jozwiak (3):
  crypto/qat: cleanup unused and useless trace
  crypto/qat: move to dynamic logging for non-dp trace
  crypto/qat: move to dynamic logging for data-path trace

 config/common_base   |   4 --
 doc/guides/cryptodevs/qat.rst|  26 +
 drivers/crypto/qat/Makefile  |   1 +
 drivers/crypto/qat/meson.build   |   1 +
 drivers/crypto/qat/qat_common.c  |  12 ++--
 drivers/crypto/qat/qat_device.c  |  12 ++--
 drivers/crypto/qat/qat_logs.c|  40 ++
 drivers/crypto/qat/qat_logs.h|  65 +-
 drivers/crypto/qat/qat_qp.c  |  63 +
 drivers/crypto/qat/qat_sym.c |  65 +++---
 drivers/crypto/qat/qat_sym.h |  30 +-
 drivers/crypto/qat/qat_sym_pmd.c |  21 +++
 drivers/crypto/qat/qat_sym_session.c | 103 ---
 13 files changed, 234 insertions(+), 209 deletions(-)
 create mode 100644 drivers/crypto/qat/qat_logs.c

-- 
2.7.4



[dpdk-dev] [PATCH v2 3/5] crypto/qat: rename log macro for non-dp logs

2018-06-14 Thread Tomasz Jozwiak
From: Fiona Trahe 

Rename PMD_DRV_LOG to the more appropriate name QAT_LOG.

Signed-off-by: Fiona Trahe 
---
 drivers/crypto/qat/qat_common.c  | 12 ++---
 drivers/crypto/qat/qat_device.c  | 12 ++---
 drivers/crypto/qat/qat_logs.h|  2 +-
 drivers/crypto/qat/qat_qp.c  | 54 ++---
 drivers/crypto/qat/qat_sym.c | 18 +++
 drivers/crypto/qat/qat_sym.h |  2 +-
 drivers/crypto/qat/qat_sym_pmd.c | 14 +++---
 drivers/crypto/qat/qat_sym_session.c | 94 ++--
 8 files changed, 104 insertions(+), 104 deletions(-)

diff --git a/drivers/crypto/qat/qat_common.c b/drivers/crypto/qat/qat_common.c
index c10c142..c206d3b 100644
--- a/drivers/crypto/qat/qat_common.c
+++ b/drivers/crypto/qat/qat_common.c
@@ -28,7 +28,7 @@ qat_sgl_fill_array(struct rte_mbuf *buf, uint64_t buf_start,
buf = buf->next;
while (buf) {
if (unlikely(nr == QAT_SGL_MAX_NUMBER)) {
-   PMD_DRV_LOG(ERR,
+   QAT_LOG(ERR,
"QAT PMD exceeded size of QAT SGL entry(%u)",
QAT_SGL_MAX_NUMBER);
return -EINVAL;
@@ -61,7 +61,7 @@ void qat_stats_get(struct qat_pci_device *dev,
struct qat_qp **qp;
 
if (stats == NULL || dev == NULL || service >= QAT_SERVICE_INVALID) {
-   PMD_DRV_LOG(ERR, "invalid param: stats %p, dev %p, service %d",
+   QAT_LOG(ERR, "invalid param: stats %p, dev %p, service %d",
stats, dev, service);
return;
}
@@ -69,7 +69,7 @@ void qat_stats_get(struct qat_pci_device *dev,
qp = dev->qps_in_use[service];
for (i = 0; i < ADF_MAX_QPS_ON_ANY_SERVICE; i++) {
if (qp[i] == NULL) {
-   PMD_DRV_LOG(DEBUG, "Service %d Uninitialised qp %d",
+   QAT_LOG(DEBUG, "Service %d Uninitialised qp %d",
service, i);
continue;
}
@@ -88,7 +88,7 @@ void qat_stats_reset(struct qat_pci_device *dev,
struct qat_qp **qp;
 
if (dev == NULL || service >= QAT_SERVICE_INVALID) {
-   PMD_DRV_LOG(ERR, "invalid param: dev %p, service %d",
+   QAT_LOG(ERR, "invalid param: dev %p, service %d",
dev, service);
return;
}
@@ -96,12 +96,12 @@ void qat_stats_reset(struct qat_pci_device *dev,
qp = dev->qps_in_use[service];
for (i = 0; i < ADF_MAX_QPS_ON_ANY_SERVICE; i++) {
if (qp[i] == NULL) {
-   PMD_DRV_LOG(DEBUG, "Service %d Uninitialised qp %d",
+   QAT_LOG(DEBUG, "Service %d Uninitialised qp %d",
service, i);
continue;
}
memset(&(qp[i]->stats), 0, sizeof(qp[i]->stats));
}
 
-   PMD_DRV_LOG(DEBUG, "QAT: %d stats cleared", service);
+   QAT_LOG(DEBUG, "QAT: %d stats cleared", service);
 }
diff --git a/drivers/crypto/qat/qat_device.c b/drivers/crypto/qat/qat_device.c
index 0cab2e9..4b97c84 100644
--- a/drivers/crypto/qat/qat_device.c
+++ b/drivers/crypto/qat/qat_device.c
@@ -105,14 +105,14 @@ 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");
if (qat_pci_get_named_dev(name) != NULL) {
-   PMD_DRV_LOG(ERR, "QAT device with name %s already allocated!",
+   QAT_LOG(ERR, "QAT device with name %s already allocated!",
name);
return NULL;
}
 
qat_dev_id = qat_pci_find_free_device_index();
if (qat_dev_id == RTE_PMD_QAT_MAX_PCI_DEVICES) {
-   PMD_DRV_LOG(ERR, "Reached maximum number of QAT devices");
+   QAT_LOG(ERR, "Reached maximum number of QAT devices");
return NULL;
}
 
@@ -131,7 +131,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
qat_dev->qat_dev_gen = QAT_GEN2;
break;
default:
-   PMD_DRV_LOG(ERR, "Invalid dev_id, can't determine generation");
+   QAT_LOG(ERR, "Invalid dev_id, can't determine generation");
return NULL;
}
 
@@ -141,7 +141,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 
qat_nb_pci_devices++;
 
-   PMD_DRV_LOG(DEBUG, "QAT device %d allocated, name %s, total QATs %d",
+   QAT_LOG(DEBUG, "QAT device %d allocated, name %s, total QATs %d",
qat_dev->qat_dev_id, qat_dev->name, qat_nb_pci_devices);
 
return qat_dev;
@@ -168,7 +168,7 @@ qat_pci_device_release(struct rte_pci_device *pci_dev)
qat_dev->attached = QAT_DETACHED;
q

[dpdk-dev] [PATCH v2 4/5] crypto/qat: move to dynamic logging for data-path trace

2018-06-14 Thread Tomasz Jozwiak
For all trace on the data-path move to dynamic logging.
Add new QAT_DP_LOG macro to separate from non-dp trace.
Use the overall RTE_LOG_DP_LEVEL to override and compile out
debug data-path trace.
Add "unlikely" in two appropriate error checks.

Signed-off-by: Tomasz Jozwiak 
Signed-off-by: Fiona Trahe 
---
 config/common_base|  2 --
 drivers/crypto/qat/qat_logs.c | 23 +++
 drivers/crypto/qat/qat_logs.h | 20 +
 drivers/crypto/qat/qat_sym.c  | 65 +--
 drivers/crypto/qat/qat_sym.h  | 30 ++--
 5 files changed, 90 insertions(+), 50 deletions(-)

diff --git a/config/common_base b/config/common_base
index 7a9b26e..c2b7126 100644
--- a/config/common_base
+++ b/config/common_base
@@ -486,8 +486,6 @@ CONFIG_RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS=2048
 # Compile PMD for QuickAssist based devices
 #
 CONFIG_RTE_LIBRTE_PMD_QAT=n
-CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_TX=n
-CONFIG_RTE_LIBRTE_PMD_QAT_DEBUG_RX=n
 #
 # Max. number of QuickAssist devices, which can be detected and attached
 #
diff --git a/drivers/crypto/qat/qat_logs.c b/drivers/crypto/qat/qat_logs.c
index fc8d9a7..fa3df85 100644
--- a/drivers/crypto/qat/qat_logs.c
+++ b/drivers/crypto/qat/qat_logs.c
@@ -3,8 +3,26 @@
  */
 
 #include 
+#include 
+
+#include "qat_logs.h"
 
 int qat_gen_logtype;
+int qat_dp_logtype;
+
+int
+qat_hexdump_log(uint32_t level, uint32_t logtype, const char *title,
+   const void *buf, unsigned int len)
+{
+   if (level > rte_log_get_global_level())
+   return 0;
+   if (level > (uint32_t)(rte_log_get_level(logtype)))
+   return 0;
+
+   rte_hexdump(rte_logs.file == NULL ? stderr : rte_logs.file,
+   title, buf, len);
+   return 0;
+}
 
 RTE_INIT(qat_pci_init_log);
 static void
@@ -14,4 +32,9 @@ qat_pci_init_log(void)
qat_gen_logtype = rte_log_register("pmd.qat_general");
if (qat_gen_logtype >= 0)
rte_log_set_level(qat_gen_logtype, RTE_LOG_NOTICE);
+
+   /* data-path logging for all services */
+   qat_dp_logtype = rte_log_register("pmd.qat_dp");
+   if (qat_dp_logtype >= 0)
+   rte_log_set_level(qat_dp_logtype, RTE_LOG_NOTICE);
 }
diff --git a/drivers/crypto/qat/qat_logs.h b/drivers/crypto/qat/qat_logs.h
index b12f754..4baea12 100644
--- a/drivers/crypto/qat/qat_logs.h
+++ b/drivers/crypto/qat/qat_logs.h
@@ -6,9 +6,29 @@
 #define _QAT_LOGS_H_
 
 extern int qat_gen_logtype;
+extern int qat_dp_logtype;
 
 #define QAT_LOG(level, fmt, args...)   \
rte_log(RTE_LOG_ ## level, qat_gen_logtype, \
"%s(): " fmt "\n", __func__, ## args)
 
+#define QAT_DP_LOG(level, fmt, args...)\
+   rte_log(RTE_LOG_ ## level, qat_dp_logtype,  \
+   "%s(): " fmt "\n", __func__, ## args)
+
+#define QAT_DP_HEXDUMP_LOG(level, title, buf, len) \
+   qat_hexdump_log(RTE_LOG_ ## level, qat_dp_logtype, title, buf, len)
+
+/**
+ * qat_hexdump_log - Dump out memory in a special hex dump format.
+ *
+ * Dump out the message buffer in a special hex dump output format with
+ * characters printed for each line of 16 hex values. The message will be sent
+ * to the stream defined by rte_logs.file or to stderr in case of rte_logs.file
+ * is undefined.
+ */
+int
+qat_hexdump_log(uint32_t level, uint32_t logtype, const char *title,
+   const void *buf, unsigned int len);
+
 #endif /* _QAT_LOGS_H_ */
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 7bedad3..17d63eb 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -6,12 +6,10 @@
 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
 
-#include "qat_logs.h"
 #include "qat_sym.h"
 
 /** Decrypt a single partial block
@@ -39,7 +37,7 @@ bpi_cipher_decrypt(uint8_t *src, uint8_t *dst,
return 0;
 
 cipher_decrypt_err:
-   QAT_LOG(ERR, "libcrypto ECB cipher decrypt for BPI IV failed");
+   QAT_DP_LOG(ERR, "libcrypto ECB cipher decrypt for BPI IV failed");
return -EINVAL;
 }
 
@@ -78,21 +76,21 @@ qat_bpicipher_preprocess(struct qat_sym_session *ctx,
iv = rte_crypto_op_ctod_offset(op, uint8_t *,
ctx->cipher_iv.offset);
 
-#ifdef RTE_LIBRTE_PMD_QAT_DEBUG_TX
-   rte_hexdump(stdout, "BPI: src before pre-process:", last_block,
-   last_block_len);
+#if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG
+   QAT_DP_HEXDUMP_LOG(DEBUG, "BPI: src before pre-process:",
+   last_block, last_block_len);
if (sym_op->m_dst != NULL)
-   rte_hexdump(stdout, "BPI: dst before pre-process

[dpdk-dev] [PATCH v2 5/5] doc/qat: document debug options

2018-06-14 Thread Tomasz Jozwiak
From: Fiona Trahe 

Signed-off-by: Fiona Trahe 
---
 doc/guides/cryptodevs/qat.rst | 26 ++
 1 file changed, 26 insertions(+)

diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
index 22a2c71..b899985 100644
--- a/doc/guides/cryptodevs/qat.rst
+++ b/doc/guides/cryptodevs/qat.rst
@@ -371,3 +371,29 @@ Each qat crypto device has a unique name, in format
 _, e.g. ":41:01.0_qat_sym".
 This name can be passed to rte_cryptodev_get_dev_id() to get the device_id.
 This is also the format of the slave parameter passed to the crypto scheduler.
+
+Debugging
+
+
+There are 2 sets of trace available via the dynamic logging feature:
+
+* pmd.qat_dp exposes trace on the data-path.
+* pmd.qat_general exposes all other trace.
+
+pmd.qat exposes both sets of traces.
+They can be enabled using the log-level option (where 8=maximum log level) on
+the process cmdline, e.g. using any of the following::
+
+--log-level="pmd.qat_general,8"
+--log-level="pmd.qat_dp,8"
+--log-level="pmd.qat,8"
+
+.. Note::
+
+The global RTE_LOG_DP_LEVEL overrides data-path trace so must be set to
+RTE_LOG_DEBUG to see all the trace. This variable is in config/rte_config.h
+for meson build and config/common_base for gnu make.
+Also the dynamic global log level overrides both sets of trace, so e.g. no
+QAT trace would display in this case::
+
+   --log-level="7" --log-level="pmd.qat_general,8"
-- 
2.7.4



[dpdk-dev] [PATCH v2 1/3] crypto/qat: add weak functions

2018-06-14 Thread Tomasz Jozwiak
This patch adds following weak functions to facilitate conditional
compilation of code for those services:
  -  qat_sym_dev_create
  -  qat_asym_dev_create
  -  qat_comp_dev_create
  -  qat_sym_dev_destroy
  -  qat_asym_dev_destroy
  -  qat_comp_dev_destroy
and removes unused files with empty definitions of above functions.

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile   |  2 --
 drivers/crypto/qat/meson.build|  4 +---
 drivers/crypto/qat/qat_asym_pmd.c | 17 -
 drivers/crypto/qat/qat_asym_pmd.h | 15 ---
 drivers/crypto/qat/qat_comp_pmd.c | 18 --
 drivers/crypto/qat/qat_comp_pmd.h | 29 -
 drivers/crypto/qat/qat_device.c   | 39 +--
 drivers/crypto/qat/qat_device.h   | 20 
 8 files changed, 58 insertions(+), 86 deletions(-)
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.h
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.h

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index ef4a567..64f39fd 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -28,8 +28,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_logs.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_pmd.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_asym_pmd.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_comp_pmd.c
 
 # export include files
 SYMLINK-y-include +=
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index bcab16e..6d01dac 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -9,9 +9,7 @@ sources = files('qat_common.c',
'qat_qp.c',
'qat_device.c',
'qat_logs.c',
-   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c',
-   'qat_asym_pmd.c',
-   'qat_comp_pmd.c')
+   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
 includes += include_directories('qat_adf')
 deps += ['bus_pci']
 ext_deps += dep
diff --git a/drivers/crypto/qat/qat_asym_pmd.c 
b/drivers/crypto/qat/qat_asym_pmd.c
deleted file mode 100644
index 8d36300..000
--- a/drivers/crypto/qat/qat_asym_pmd.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#include "qat_asym_pmd.h"
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
diff --git a/drivers/crypto/qat/qat_asym_pmd.h 
b/drivers/crypto/qat/qat_asym_pmd.h
deleted file mode 100644
index 0465e03..000
--- a/drivers/crypto/qat/qat_asym_pmd.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#ifndef _QAT_ASYM_PMD_H_
-#define _QAT_ASYM_PMD_H_
-
-#include "qat_device.h"
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev);
-#endif /* _QAT_ASYM_PMD_H_ */
diff --git a/drivers/crypto/qat/qat_comp_pmd.c 
b/drivers/crypto/qat/qat_comp_pmd.c
deleted file mode 100644
index 547b3db..000
--- a/drivers/crypto/qat/qat_comp_pmd.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#include "qat_comp_pmd.h"
-
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
diff --git a/drivers/crypto/qat/qat_comp_pmd.h 
b/drivers/crypto/qat/qat_comp_pmd.h
deleted file mode 100644
index cc31246..000
--- a/drivers/crypto/qat/qat_comp_pmd.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#ifndef _QAT_COMP_PMD_H_
-#define _QAT_COMP_PMD_H_
-
-#include "qat_device.h"
-
-
-/**< Intel(R) QAT Compression PMD device name */
-#define COMPRESSDEV_NAME_QAT_PMD   comp_qat
-
-
-/** private data structure for a QAT compression device.
- * This QAT device is a device offering only a compression service,
- * there can be one of these on each qat_pci_device (VF).
- */
-struct qat_comp_dev_private {
-   struct qat_pci_device *qat_dev;
-   /**< The qat pci device hosting the service */
-};
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
-#endif /* _QAT_

[dpdk-dev] [PATCH v2 2/3] crypto/qat: add libcrypto detection to Makefile

2018-06-14 Thread Tomasz Jozwiak
This patch adds detection of libcrypto in qat/Makefile.
Crypto QAT PMD is build, but only when this library is installed.
Added description into qat.rst file.

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 config/common_base   |  5 +++--
 doc/guides/cryptodevs/qat.rst|  9 +++--
 drivers/crypto/qat/Makefile  | 32 
 drivers/crypto/qat/meson.build   | 15 +--
 drivers/crypto/qat/qat_sym.h |  9 +
 drivers/crypto/qat/qat_sym_pmd.h |  5 +
 6 files changed, 53 insertions(+), 22 deletions(-)

diff --git a/config/common_base b/config/common_base
index 3cd702e..f456f95 100644
--- a/config/common_base
+++ b/config/common_base
@@ -480,8 +480,9 @@ CONFIG_RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS=2048
 
 #
 # Compile PMD for QuickAssist based devices
-#
-CONFIG_RTE_LIBRTE_PMD_QAT=n
+# This QAT flag causes crypto QAT PMD to build,
+# but only if libcrypto is installed.
+CONFIG_RTE_LIBRTE_PMD_QAT=y
 #
 # Max. number of QuickAssist devices, which can be detected and attached
 #
diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
index 77f8362..fa23a56 100644
--- a/doc/guides/cryptodevs/qat.rst
+++ b/doc/guides/cryptodevs/qat.rst
@@ -71,7 +71,10 @@ Limitations
 Installation
 
 
-To enable QAT in DPDK, follow the instructions for modifying the compile-time
+QAT PMD is enabled by default in DPDK, but depends on libcrypto. If this 
library is detected
+the driver will be enabled and compiled.
+
+To setup QAT in DPDK, follow the instructions for modifying the compile-time
 configuration file as described `here 
<http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html>`_.
 
 Quick instructions are as follows:
@@ -80,9 +83,11 @@ Quick instructions are as follows:
 
cd to the top-level DPDK directory
make config T=x86_64-native-linuxapp-gcc
-   sed -i 's,\(CONFIG_RTE_LIBRTE_PMD_QAT\)=n,\1=y,' build/.config
make
 
+.. Note::
+To libcrypto detection - pkg_config is needed and should be installed in 
the system.
+
 To use the DPDK QAT PMD an SRIOV-enabled QAT kernel driver is required. The VF
 devices exposed by this driver will be used by the QAT PMD. The devices and
 available kernel drivers and device ids are :
diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index 64f39fd..77700b4 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -3,6 +3,9 @@
 
 include $(RTE_SDK)/mk/rte.vars.mk
 
+# libcrypto detection
+LIBCRYPTO := $(shell pkg-config --exists libcrypto 1>&2 2> /dev/null; echo $$?)
+
 # library name
 LIB = librte_pmd_qat.a
 
@@ -15,19 +18,24 @@ CFLAGS += -O3
 
 # external library include paths
 CFLAGS += -I$(SRCDIR)/qat_adf
-LDLIBS += -lcrypto
-LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
-LDLIBS += -lrte_cryptodev
-LDLIBS += -lrte_pci -lrte_bus_pci
 
-# library source files
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_logs.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_pmd.c
+# library common source files
+SRCS-y += qat_device.c
+SRCS-y += qat_common.c
+SRCS-y += qat_logs.c
+SRCS-y += qat_qp.c
+
+ifeq ($(LIBCRYPTO),0)
+   LDLIBS += -lrte_cryptodev
+   LDLIBS += -lcrypto
+   CFLAGS += -DCONFIG_LIBCRYPTO_QAT
+   SRCS-y += qat_sym.c
+   SRCS-y += qat_sym_session.c
+   SRCS-y += qat_sym_pmd.c
+endif
+
+LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool
+LDLIBS += -lrte_pci -lrte_bus_pci
 
 # export include files
 SYMLINK-y-include +=
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index 6d01dac..c96486a 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -2,15 +2,18 @@
 # Copyright(c) 2017-2018 Intel Corporation
 
 dep = dependency('libcrypto', required: false)
-if not dep.found()
-   build = false
-endif
+
 sources = files('qat_common.c',
'qat_qp.c',
'qat_device.c',
-   'qat_logs.c',
-   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
+   'qat_logs.c')
+
+if dep.found()
+   sources += files('qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
+   pkgconfig_extra_libs += '-lcrypto'
+   cflags += '-DCONFIG_LIBCRYPTO_QAT'
+endif
+
 includes += include_directories('qat_adf')
 deps += ['bus_pci']
 ext_deps += dep
-pkgconfig_extra_libs += '-lcrypto'
diff --git a/drivers/crypto/qat/qat_sym.h b/drivers/crypto/qat/qat_sym.h
index f9e72a6..3c8ec5b 100644
--- a/drivers/crypto/qat/qat_sym.h
+++ b/drivers/crypto/qat/qat_sym.h
@@ -7

[dpdk-dev] [PATCH v2 0/3] crypto/qat: move files to drivers/common directory

2018-06-14 Thread Tomasz Jozwiak
This patchset depends on QAT dynamic logging patchset and should be targetig on 
18.08.
Patchset refactors the PMD in order that files are split into several
places: common, crypto.
New drivers/common/qat are added and files split between locations.
Also added libcrypto detection and QAT PMD is build only if this library is 
installed.

Changes for v2:
  -  removed drivers/common/qat/qat 
  -  updated meson.build files 
  -  added description into qat.rst
  -  updated MAINTAINERS file

Tomasz Jozwiak (3):
  crypto/qat: add weak functions
  crypto/qat: add libcrypto detection to Makefile
  crypto/qat: move common qat files to common dir

 MAINTAINERS|  1 +
 config/common_base |  5 ++-
 doc/guides/cryptodevs/qat.rst  |  9 +++-
 drivers/Makefile   |  2 +
 drivers/common/meson.build |  2 +-
 drivers/common/qat/Makefile| 51 ++
 drivers/common/qat/meson.build | 14 ++
 .../qat/qat_adf/adf_transport_access_macros.h  |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw.h|  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw_la.h |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_hw.h|  0
 drivers/{crypto => common}/qat/qat_common.c|  0
 drivers/{crypto => common}/qat/qat_common.h|  0
 drivers/{crypto => common}/qat/qat_device.c| 39 -
 drivers/{crypto => common}/qat/qat_device.h| 20 +
 drivers/{crypto => common}/qat/qat_logs.c  |  0
 drivers/{crypto => common}/qat/qat_logs.h  |  0
 drivers/{crypto => common}/qat/qat_qp.c|  0
 drivers/{crypto => common}/qat/qat_qp.h|  0
 drivers/crypto/Makefile|  1 -
 drivers/crypto/qat/Makefile| 40 -
 drivers/crypto/qat/README  |  8 
 drivers/crypto/qat/meson.build | 34 +--
 drivers/crypto/qat/qat_asym_pmd.c  | 17 
 drivers/crypto/qat/qat_asym_pmd.h  | 15 ---
 drivers/crypto/qat/qat_comp_pmd.c  | 18 
 drivers/crypto/qat/qat_comp_pmd.h  | 29 
 drivers/crypto/qat/qat_sym.h   |  9 
 drivers/crypto/qat/qat_sym_pmd.h   |  5 +++
 29 files changed, 178 insertions(+), 141 deletions(-)
 create mode 100644 drivers/common/qat/Makefile
 create mode 100644 drivers/common/qat/meson.build
 rename drivers/{crypto => common}/qat/qat_adf/adf_transport_access_macros.h 
(100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw_la.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_hw.h (100%)
 rename drivers/{crypto => common}/qat/qat_common.c (100%)
 rename drivers/{crypto => common}/qat/qat_common.h (100%)
 rename drivers/{crypto => common}/qat/qat_device.c (88%)
 rename drivers/{crypto => common}/qat/qat_device.h (80%)
 rename drivers/{crypto => common}/qat/qat_logs.c (100%)
 rename drivers/{crypto => common}/qat/qat_logs.h (100%)
 rename drivers/{crypto => common}/qat/qat_qp.c (100%)
 rename drivers/{crypto => common}/qat/qat_qp.h (100%)
 delete mode 100644 drivers/crypto/qat/Makefile
 create mode 100644 drivers/crypto/qat/README
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.h
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.h

-- 
2.7.4



[dpdk-dev] [PATCH v2 3/3] crypto/qat: move common qat files to common dir

2018-06-14 Thread Tomasz Jozwiak
  -  moved common qat files to common/qat dir.
  -  changed common/qat/Makefile, common/qat/meson.build,
 drivers/Makefile, crypto/Makefile
 to add possibility of using new files locations
  -  added README file into crypto/qat to clarify where
 the build is made from
  -  updated MAINTAINERS file

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 MAINTAINERS|  1 +
 drivers/Makefile   |  2 ++
 drivers/common/meson.build |  2 +-
 drivers/{crypto => common}/qat/Makefile| 13 ++---
 drivers/common/qat/meson.build | 14 ++
 .../qat/qat_adf/adf_transport_access_macros.h  |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw.h|  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw_la.h |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_hw.h|  0
 drivers/{crypto => common}/qat/qat_common.c|  0
 drivers/{crypto => common}/qat/qat_common.h|  0
 drivers/{crypto => common}/qat/qat_device.c|  0
 drivers/{crypto => common}/qat/qat_device.h|  0
 drivers/{crypto => common}/qat/qat_logs.c  |  0
 drivers/{crypto => common}/qat/qat_logs.h  |  0
 drivers/{crypto => common}/qat/qat_qp.c|  0
 drivers/{crypto => common}/qat/qat_qp.h|  0
 drivers/crypto/Makefile|  1 -
 drivers/crypto/qat/README  |  8 ++
 drivers/crypto/qat/meson.build | 31 +-
 20 files changed, 53 insertions(+), 19 deletions(-)
 rename drivers/{crypto => common}/qat/Makefile (72%)
 create mode 100644 drivers/common/qat/meson.build
 rename drivers/{crypto => common}/qat/qat_adf/adf_transport_access_macros.h 
(100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw_la.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_hw.h (100%)
 rename drivers/{crypto => common}/qat/qat_common.c (100%)
 rename drivers/{crypto => common}/qat/qat_common.h (100%)
 rename drivers/{crypto => common}/qat/qat_device.c (100%)
 rename drivers/{crypto => common}/qat/qat_device.h (100%)
 rename drivers/{crypto => common}/qat/qat_logs.c (100%)
 rename drivers/{crypto => common}/qat/qat_logs.h (100%)
 rename drivers/{crypto => common}/qat/qat_qp.c (100%)
 rename drivers/{crypto => common}/qat/qat_qp.h (100%)
 create mode 100644 drivers/crypto/qat/README

diff --git a/MAINTAINERS b/MAINTAINERS
index 7cc8860..aada659 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -757,6 +757,7 @@ M: John Griffin 
 M: Fiona Trahe 
 M: Deepak Kumar Jain 
 F: drivers/crypto/qat/
+F: drivers/common/qat/
 F: doc/guides/cryptodevs/qat.rst
 F: doc/guides/cryptodevs/features/qat.ini
 
diff --git a/drivers/Makefile b/drivers/Makefile
index c88638c..7566076 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -13,6 +13,8 @@ DIRS-$(CONFIG_RTE_LIBRTE_BBDEV) += baseband
 DEPDIRS-baseband := common bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += crypto
 DEPDIRS-crypto := common bus mempool
+DIRS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += common/qat
+DEPDIRS-common/qat := bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += compress
 DEPDIRS-compress := bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_EVENTDEV) += event
diff --git a/drivers/common/meson.build b/drivers/common/meson.build
index 5f6341b..d7b7d8c 100644
--- a/drivers/common/meson.build
+++ b/drivers/common/meson.build
@@ -2,6 +2,6 @@
 # Copyright(c) 2018 Cavium, Inc
 
 std_deps = ['eal']
-drivers = ['octeontx']
+drivers = ['octeontx', 'qat']
 config_flag_fmt = 'RTE_LIBRTE_@0@_COMMON'
 driver_name_fmt = 'rte_common_@0@'
diff --git a/drivers/crypto/qat/Makefile b/drivers/common/qat/Makefile
similarity index 72%
rename from drivers/crypto/qat/Makefile
rename to drivers/common/qat/Makefile
index 77700b4..d2c1e2c 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/common/qat/Makefile
@@ -16,8 +16,13 @@ LIBABIVER := 1
 CFLAGS += $(WERROR_FLAGS)
 CFLAGS += -O3
 
+# build directories
+QAT_CRYPTO_DIR := $(RTE_SDK)/drivers/crypto/qat
+
 # external library include paths
 CFLAGS += -I$(SRCDIR)/qat_adf
+CFLAGS += -I$(SRCDIR)
+CFLAGS += -I$(QAT_CRYPTO_DIR)
 
 # library common source files
 SRCS-y += qat_device.c
@@ -29,9 +34,9 @@ ifeq ($(LIBCRYPTO),0)
LDLIBS += -lrte_cryptodev
LDLIBS += -lcrypto
CFLAGS += -DCONFIG_LIBCRYPTO_QAT
-   SRCS-y += qat_sym.c
-   SRCS-y += qat_sym_session.c
-   SRCS-y += qat_sym_pmd.c
+   SRCS-y += $(QAT_CRYPTO_DIR)/qat_sym.c
+   SRCS-y += $(QAT_CRYPTO_DIR)/qat_sym_session.c
+   SRCS-y += $(QAT_CRYPTO_DIR)/qat_sym_pmd.c
 endif
 
 LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool
@@ -41,6 +46,6 @@ LDLIBS += -lrte_pci -lrte_bus_pci
 SYMLINK-y-include +=
 
 # versioning export

[dpdk-dev] [PATCH v3 0/3] crypto/qat: move files to drivers/common directory

2018-06-26 Thread Tomasz Jozwiak
This patchset depends on QAT dynamic logging patchset and should be targetig on 
18.08.
Patchset refactors the PMD in order that files are split into several
places: common, crypto.
New drivers/common/qat are added and files split between locations.

Changes for v2:
  -  removed drivers/common/qat/qat
  -  updated meson.build files
  -  added description into qat.rst
  -  updated MAINTAINERS file 

Changes for v3:
  -  removed libcrypto detection from Makefile
  -  removed description about libcrypto detection from doc.
  -  renamed CONFIG_LIBCRYPTO_QAT define into BUILD_QAT_SYM

Tomasz Jozwiak (3):
  crypto/qat: add weak functions
  crypto/qat: re-organise build file content
  crypto/qat: move common qat files to common dir

 MAINTAINERS|  1 +
 drivers/Makefile   |  2 +
 drivers/common/meson.build |  2 +-
 drivers/common/qat/Makefile| 49 ++
 drivers/common/qat/meson.build | 14 +++
 .../qat/qat_adf/adf_transport_access_macros.h  |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw.h|  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw_la.h |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_hw.h|  0
 drivers/{crypto => common}/qat/qat_common.c|  0
 drivers/{crypto => common}/qat/qat_common.h|  0
 drivers/{crypto => common}/qat/qat_device.c| 39 -
 drivers/{crypto => common}/qat/qat_device.h| 20 +
 drivers/{crypto => common}/qat/qat_logs.c  |  0
 drivers/{crypto => common}/qat/qat_logs.h  |  0
 drivers/{crypto => common}/qat/qat_qp.c|  0
 drivers/{crypto => common}/qat/qat_qp.h|  0
 drivers/crypto/Makefile|  1 -
 drivers/crypto/qat/Makefile| 40 --
 drivers/crypto/qat/README  |  8 
 drivers/crypto/qat/meson.build | 32 --
 drivers/crypto/qat/qat_asym_pmd.c  | 17 
 drivers/crypto/qat/qat_asym_pmd.h  | 15 ---
 drivers/crypto/qat/qat_comp_pmd.c  | 18 
 drivers/crypto/qat/qat_comp_pmd.h  | 29 -
 drivers/crypto/qat/qat_sym.h   |  8 
 drivers/crypto/qat/qat_sym_pmd.h   |  6 ++-
 27 files changed, 163 insertions(+), 138 deletions(-)
 create mode 100644 drivers/common/qat/Makefile
 create mode 100644 drivers/common/qat/meson.build
 rename drivers/{crypto => common}/qat/qat_adf/adf_transport_access_macros.h 
(100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw_la.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_hw.h (100%)
 rename drivers/{crypto => common}/qat/qat_common.c (100%)
 rename drivers/{crypto => common}/qat/qat_common.h (100%)
 rename drivers/{crypto => common}/qat/qat_device.c (88%)
 rename drivers/{crypto => common}/qat/qat_device.h (80%)
 rename drivers/{crypto => common}/qat/qat_logs.c (100%)
 rename drivers/{crypto => common}/qat/qat_logs.h (100%)
 rename drivers/{crypto => common}/qat/qat_qp.c (100%)
 rename drivers/{crypto => common}/qat/qat_qp.h (100%)
 delete mode 100644 drivers/crypto/qat/Makefile
 create mode 100644 drivers/crypto/qat/README
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.h
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.h

-- 
2.7.4



[dpdk-dev] [PATCH v3 0/3] crypto/qat: move files to drivers/common directory

2018-06-26 Thread Tomasz Jozwiak
This patchset depends on QAT dynamic logging patchset and should be targetig on 
18.08.
Patchset refactors the PMD in order that files are split into several
places: common, crypto.
New drivers/common/qat are added and files split between locations.

Changes for v2:
  -  removed drivers/common/qat/qat
  -  updated meson.build files
  -  added description into qat.rst
  -  updated MAINTAINERS file 

Changes for v3:
  -  removed libcrypto detection from Makefile
  -  removed description about libcrypto detection from doc.
  -  renamed CONFIG_LIBCRYPTO_QAT define into BUILD_QAT_SYM

Tomasz Jozwiak (3):
  crypto/qat: add weak functions
  crypto/qat: re-organise build file content
  crypto/qat: move common qat files to common dir

 MAINTAINERS|  1 +
 drivers/Makefile   |  2 +
 drivers/common/meson.build |  2 +-
 drivers/common/qat/Makefile| 49 ++
 drivers/common/qat/meson.build | 14 +++
 .../qat/qat_adf/adf_transport_access_macros.h  |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw.h|  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw_la.h |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_hw.h|  0
 drivers/{crypto => common}/qat/qat_common.c|  0
 drivers/{crypto => common}/qat/qat_common.h|  0
 drivers/{crypto => common}/qat/qat_device.c| 39 -
 drivers/{crypto => common}/qat/qat_device.h| 20 +
 drivers/{crypto => common}/qat/qat_logs.c  |  0
 drivers/{crypto => common}/qat/qat_logs.h  |  0
 drivers/{crypto => common}/qat/qat_qp.c|  0
 drivers/{crypto => common}/qat/qat_qp.h|  0
 drivers/crypto/Makefile|  1 -
 drivers/crypto/qat/Makefile| 40 --
 drivers/crypto/qat/README  |  8 
 drivers/crypto/qat/meson.build | 32 --
 drivers/crypto/qat/qat_asym_pmd.c  | 17 
 drivers/crypto/qat/qat_asym_pmd.h  | 15 ---
 drivers/crypto/qat/qat_comp_pmd.c  | 18 
 drivers/crypto/qat/qat_comp_pmd.h  | 29 -
 drivers/crypto/qat/qat_sym.h   |  8 
 drivers/crypto/qat/qat_sym_pmd.h   |  6 ++-
 27 files changed, 163 insertions(+), 138 deletions(-)
 create mode 100644 drivers/common/qat/Makefile
 create mode 100644 drivers/common/qat/meson.build
 rename drivers/{crypto => common}/qat/qat_adf/adf_transport_access_macros.h 
(100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw_la.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_hw.h (100%)
 rename drivers/{crypto => common}/qat/qat_common.c (100%)
 rename drivers/{crypto => common}/qat/qat_common.h (100%)
 rename drivers/{crypto => common}/qat/qat_device.c (88%)
 rename drivers/{crypto => common}/qat/qat_device.h (80%)
 rename drivers/{crypto => common}/qat/qat_logs.c (100%)
 rename drivers/{crypto => common}/qat/qat_logs.h (100%)
 rename drivers/{crypto => common}/qat/qat_qp.c (100%)
 rename drivers/{crypto => common}/qat/qat_qp.h (100%)
 delete mode 100644 drivers/crypto/qat/Makefile
 create mode 100644 drivers/crypto/qat/README
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.h
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.h

-- 
2.7.4



[dpdk-dev] [PATCH v3 2/3] crypto/qat: re-organise build file content

2018-06-26 Thread Tomasz Jozwiak
This patch groups sources and related dependencies into
common and sym sections in build files.

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile  | 25 ++---
 drivers/crypto/qat/meson.build   | 14 --
 drivers/crypto/qat/qat_sym.h |  2 +-
 drivers/crypto/qat/qat_sym_pmd.h |  3 +--
 4 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index 64f39fd..a939eca 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -15,19 +15,22 @@ CFLAGS += -O3
 
 # external library include paths
 CFLAGS += -I$(SRCDIR)/qat_adf
-LDLIBS += -lcrypto
-LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
+
+# library common source files
+SRCS-y += qat_device.c
+SRCS-y += qat_common.c
+SRCS-y += qat_logs.c
+SRCS-y += qat_qp.c
+
+# library symetric crypto source files
 LDLIBS += -lrte_cryptodev
-LDLIBS += -lrte_pci -lrte_bus_pci
+LDLIBS += -lcrypto
+SRCS-y += qat_sym.c
+SRCS-y += qat_sym_session.c
+SRCS-y += qat_sym_pmd.c
 
-# library source files
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_logs.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_pmd.c
+LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool
+LDLIBS += -lrte_pci -lrte_bus_pci
 
 # export include files
 SYMLINK-y-include +=
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index 6d01dac..db4af2c 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -2,15 +2,17 @@
 # Copyright(c) 2017-2018 Intel Corporation
 
 dep = dependency('libcrypto', required: false)
-if not dep.found()
-   build = false
-endif
+
 sources = files('qat_common.c',
'qat_qp.c',
'qat_device.c',
-   'qat_logs.c',
-   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
+   'qat_logs.c')
+
+if dep.found()
+   sources += files('qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
+   pkgconfig_extra_libs += '-lcrypto'
+endif
+
 includes += include_directories('qat_adf')
 deps += ['bus_pci']
 ext_deps += dep
-pkgconfig_extra_libs += '-lcrypto'
diff --git a/drivers/crypto/qat/qat_sym.h b/drivers/crypto/qat/qat_sym.h
index f9e72a6..126c191 100644
--- a/drivers/crypto/qat/qat_sym.h
+++ b/drivers/crypto/qat/qat_sym.h
@@ -6,7 +6,6 @@
 #define _QAT_SYM_H_
 
 #include 
-
 #include 
 
 #include "qat_common.h"
@@ -153,4 +152,5 @@ qat_sym_process_response(void **op, uint8_t *resp)
}
*op = (void *)rx_op;
 }
+
 #endif /* _QAT_SYM_H_ */
diff --git a/drivers/crypto/qat/qat_sym_pmd.h b/drivers/crypto/qat/qat_sym_pmd.h
index 80a1987..1e2344c 100644
--- a/drivers/crypto/qat/qat_sym_pmd.h
+++ b/drivers/crypto/qat/qat_sym_pmd.h
@@ -10,7 +10,6 @@
 #include "qat_sym_capabilities.h"
 #include "qat_device.h"
 
-
 /**< Intel(R) QAT Symmetric Crypto PMD device name */
 #define CRYPTODEV_NAME_QAT_SYM_PMD crypto_qat
 #define QAT_SYM_PMD_MAX_NB_SESSIONS2048
@@ -31,10 +30,10 @@ struct qat_sym_dev_private {
/* QAT device symmetric crypto capabilities */
 };
 
-
 int
 qat_sym_dev_create(struct qat_pci_device *qat_pci_dev);
 
 int
 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev);
+
 #endif /* _QAT_SYM_PMD_H_ */
-- 
2.7.4



[dpdk-dev] [PATCH v3 1/3] crypto/qat: add weak functions

2018-06-26 Thread Tomasz Jozwiak
This patch adds following weak functions to facilitate conditional
compilation of code for those services:
  -  qat_sym_dev_create
  -  qat_asym_dev_create
  -  qat_comp_dev_create
  -  qat_sym_dev_destroy
  -  qat_asym_dev_destroy
  -  qat_comp_dev_destroy
and removes unused files with empty definitions of above functions.

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile   |  2 --
 drivers/crypto/qat/meson.build|  4 +---
 drivers/crypto/qat/qat_asym_pmd.c | 17 -
 drivers/crypto/qat/qat_asym_pmd.h | 15 ---
 drivers/crypto/qat/qat_comp_pmd.c | 18 --
 drivers/crypto/qat/qat_comp_pmd.h | 29 -
 drivers/crypto/qat/qat_device.c   | 39 +--
 drivers/crypto/qat/qat_device.h   | 20 
 8 files changed, 58 insertions(+), 86 deletions(-)
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.h
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.h

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index ef4a567..64f39fd 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -28,8 +28,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_logs.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_pmd.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_asym_pmd.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_comp_pmd.c
 
 # export include files
 SYMLINK-y-include +=
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index bcab16e..6d01dac 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -9,9 +9,7 @@ sources = files('qat_common.c',
'qat_qp.c',
'qat_device.c',
'qat_logs.c',
-   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c',
-   'qat_asym_pmd.c',
-   'qat_comp_pmd.c')
+   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
 includes += include_directories('qat_adf')
 deps += ['bus_pci']
 ext_deps += dep
diff --git a/drivers/crypto/qat/qat_asym_pmd.c 
b/drivers/crypto/qat/qat_asym_pmd.c
deleted file mode 100644
index 8d36300..000
--- a/drivers/crypto/qat/qat_asym_pmd.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#include "qat_asym_pmd.h"
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
diff --git a/drivers/crypto/qat/qat_asym_pmd.h 
b/drivers/crypto/qat/qat_asym_pmd.h
deleted file mode 100644
index 0465e03..000
--- a/drivers/crypto/qat/qat_asym_pmd.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#ifndef _QAT_ASYM_PMD_H_
-#define _QAT_ASYM_PMD_H_
-
-#include "qat_device.h"
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev);
-#endif /* _QAT_ASYM_PMD_H_ */
diff --git a/drivers/crypto/qat/qat_comp_pmd.c 
b/drivers/crypto/qat/qat_comp_pmd.c
deleted file mode 100644
index 547b3db..000
--- a/drivers/crypto/qat/qat_comp_pmd.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#include "qat_comp_pmd.h"
-
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
diff --git a/drivers/crypto/qat/qat_comp_pmd.h 
b/drivers/crypto/qat/qat_comp_pmd.h
deleted file mode 100644
index cc31246..000
--- a/drivers/crypto/qat/qat_comp_pmd.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#ifndef _QAT_COMP_PMD_H_
-#define _QAT_COMP_PMD_H_
-
-#include "qat_device.h"
-
-
-/**< Intel(R) QAT Compression PMD device name */
-#define COMPRESSDEV_NAME_QAT_PMD   comp_qat
-
-
-/** private data structure for a QAT compression device.
- * This QAT device is a device offering only a compression service,
- * there can be one of these on each qat_pci_device (VF).
- */
-struct qat_comp_dev_private {
-   struct qat_pci_device *qat_dev;
-   /**< The qat pci device hosting the service */
-};
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
-#endif /* _QAT_

[dpdk-dev] [PATCH v3 3/3] crypto/qat: move common qat files to common dir

2018-06-26 Thread Tomasz Jozwiak
  -  moved common qat files to common/qat dir.
  -  changed common/qat/Makefile, common/qat/meson.build,
 drivers/Makefile, crypto/Makefile
 to add possibility of using new files locations
  -  added README file into crypto/qat to clarify where
 the build is made from
  -  updated MAINTAINERS file

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 MAINTAINERS|  1 +
 drivers/Makefile   |  2 ++
 drivers/common/meson.build |  2 +-
 drivers/{crypto => common}/qat/Makefile| 20 +++-
 drivers/common/qat/meson.build | 14 +++
 .../qat/qat_adf/adf_transport_access_macros.h  |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw.h|  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw_la.h |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_hw.h|  0
 drivers/{crypto => common}/qat/qat_common.c|  0
 drivers/{crypto => common}/qat/qat_common.h|  0
 drivers/{crypto => common}/qat/qat_device.c|  0
 drivers/{crypto => common}/qat/qat_device.h|  0
 drivers/{crypto => common}/qat/qat_logs.c  |  0
 drivers/{crypto => common}/qat/qat_logs.h  |  0
 drivers/{crypto => common}/qat/qat_qp.c|  0
 drivers/{crypto => common}/qat/qat_qp.h|  0
 drivers/crypto/Makefile|  1 -
 drivers/crypto/qat/README  |  8 +++
 drivers/crypto/qat/meson.build | 28 +-
 drivers/crypto/qat/qat_sym.h   |  8 +++
 drivers/crypto/qat/qat_sym_pmd.h   |  3 +++
 22 files changed, 68 insertions(+), 19 deletions(-)
 rename drivers/{crypto => common}/qat/Makefile (60%)
 create mode 100644 drivers/common/qat/meson.build
 rename drivers/{crypto => common}/qat/qat_adf/adf_transport_access_macros.h 
(100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw_la.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_hw.h (100%)
 rename drivers/{crypto => common}/qat/qat_common.c (100%)
 rename drivers/{crypto => common}/qat/qat_common.h (100%)
 rename drivers/{crypto => common}/qat/qat_device.c (100%)
 rename drivers/{crypto => common}/qat/qat_device.h (100%)
 rename drivers/{crypto => common}/qat/qat_logs.c (100%)
 rename drivers/{crypto => common}/qat/qat_logs.h (100%)
 rename drivers/{crypto => common}/qat/qat_qp.c (100%)
 rename drivers/{crypto => common}/qat/qat_qp.h (100%)
 create mode 100644 drivers/crypto/qat/README

diff --git a/MAINTAINERS b/MAINTAINERS
index 3bc928f..bc16078 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -775,6 +775,7 @@ M: John Griffin 
 M: Fiona Trahe 
 M: Deepak Kumar Jain 
 F: drivers/crypto/qat/
+F: drivers/common/qat/
 F: doc/guides/cryptodevs/qat.rst
 F: doc/guides/cryptodevs/features/qat.ini
 
diff --git a/drivers/Makefile b/drivers/Makefile
index c88638c..7566076 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -13,6 +13,8 @@ DIRS-$(CONFIG_RTE_LIBRTE_BBDEV) += baseband
 DEPDIRS-baseband := common bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += crypto
 DEPDIRS-crypto := common bus mempool
+DIRS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += common/qat
+DEPDIRS-common/qat := bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += compress
 DEPDIRS-compress := bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_EVENTDEV) += event
diff --git a/drivers/common/meson.build b/drivers/common/meson.build
index 5f6341b..d7b7d8c 100644
--- a/drivers/common/meson.build
+++ b/drivers/common/meson.build
@@ -2,6 +2,6 @@
 # Copyright(c) 2018 Cavium, Inc
 
 std_deps = ['eal']
-drivers = ['octeontx']
+drivers = ['octeontx', 'qat']
 config_flag_fmt = 'RTE_LIBRTE_@0@_COMMON'
 driver_name_fmt = 'rte_common_@0@'
diff --git a/drivers/crypto/qat/Makefile b/drivers/common/qat/Makefile
similarity index 60%
rename from drivers/crypto/qat/Makefile
rename to drivers/common/qat/Makefile
index a939eca..069ac8c 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/common/qat/Makefile
@@ -13,8 +13,13 @@ LIBABIVER := 1
 CFLAGS += $(WERROR_FLAGS)
 CFLAGS += -O3
 
+# build directories
+QAT_CRYPTO_DIR := $(RTE_SDK)/drivers/crypto/qat
+
 # external library include paths
 CFLAGS += -I$(SRCDIR)/qat_adf
+CFLAGS += -I$(SRCDIR)
+CFLAGS += -I$(QAT_CRYPTO_DIR)
 
 # library common source files
 SRCS-y += qat_device.c
@@ -23,11 +28,14 @@ SRCS-y += qat_logs.c
 SRCS-y += qat_qp.c
 
 # library symetric crypto source files
-LDLIBS += -lrte_cryptodev
-LDLIBS += -lcrypto
-SRCS-y += qat_sym.c
-SRCS-y += qat_sym_session.c
-SRCS-y += qat_sym_pmd.c
+ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
+   LDLIBS += -lrte_cryptodev
+   LDLIBS += -lcrypto
+   CFLAGS += -DBUILD_QAT_SYM
+   SRCS-y += $(QAT_CRYPTO_DIR)/qat_sym.

[dpdk-dev] [PATCH v4 0/3] crypto/qat: move files to drivers/common directory

2018-07-02 Thread Tomasz Jozwiak
This patchset depends on QAT dynamic logging patchset and should be targetig on 
18.08.
Patchset refactors the PMD in order that files are split into several
places: common, crypto.
New drivers/common/qat are added and files split between locations.

Changes for v2:
  -  removed drivers/common/qat/qat
  -  updated meson.build files
  -  added description into qat.rst
  -  updated MAINTAINERS file 

Changes for v3:
  -  removed libcrypto detection from Makefile
  -  removed description about libcrypto detection from doc.
  -  renamed CONFIG_LIBCRYPTO_QAT define into BUILD_QAT_SYM

Changes for v4:
  -  fixed libcrypto dependency in 
 're-organise build file content' patch

Tomasz Jozwiak (3):
  crypto/qat: add weak functions
  crypto/qat: re-organise build file content
  crypto/qat: move common qat files to common dir

 MAINTAINERS|  1 +
 drivers/Makefile   |  2 +
 drivers/common/meson.build |  2 +-
 drivers/common/qat/Makefile| 49 ++
 drivers/common/qat/meson.build | 14 +++
 .../qat/qat_adf/adf_transport_access_macros.h  |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw.h|  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw_la.h |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_hw.h|  0
 drivers/{crypto => common}/qat/qat_common.c|  0
 drivers/{crypto => common}/qat/qat_common.h|  0
 drivers/{crypto => common}/qat/qat_device.c| 39 -
 drivers/{crypto => common}/qat/qat_device.h| 20 +
 drivers/{crypto => common}/qat/qat_logs.c  |  0
 drivers/{crypto => common}/qat/qat_logs.h  |  0
 drivers/{crypto => common}/qat/qat_qp.c|  0
 drivers/{crypto => common}/qat/qat_qp.h|  0
 drivers/crypto/Makefile|  1 -
 drivers/crypto/qat/Makefile| 40 --
 drivers/crypto/qat/README  |  8 
 drivers/crypto/qat/meson.build | 32 --
 drivers/crypto/qat/qat_asym_pmd.c  | 17 
 drivers/crypto/qat/qat_asym_pmd.h  | 15 ---
 drivers/crypto/qat/qat_comp_pmd.c  | 18 
 drivers/crypto/qat/qat_comp_pmd.h  | 29 -
 drivers/crypto/qat/qat_sym.h   |  8 
 drivers/crypto/qat/qat_sym_pmd.h   |  6 ++-
 27 files changed, 163 insertions(+), 138 deletions(-)
 create mode 100644 drivers/common/qat/Makefile
 create mode 100644 drivers/common/qat/meson.build
 rename drivers/{crypto => common}/qat/qat_adf/adf_transport_access_macros.h 
(100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw_la.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_hw.h (100%)
 rename drivers/{crypto => common}/qat/qat_common.c (100%)
 rename drivers/{crypto => common}/qat/qat_common.h (100%)
 rename drivers/{crypto => common}/qat/qat_device.c (88%)
 rename drivers/{crypto => common}/qat/qat_device.h (80%)
 rename drivers/{crypto => common}/qat/qat_logs.c (100%)
 rename drivers/{crypto => common}/qat/qat_logs.h (100%)
 rename drivers/{crypto => common}/qat/qat_qp.c (100%)
 rename drivers/{crypto => common}/qat/qat_qp.h (100%)
 delete mode 100644 drivers/crypto/qat/Makefile
 create mode 100644 drivers/crypto/qat/README
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.h
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.h

-- 
2.7.4



[dpdk-dev] [PATCH v4 2/3] crypto/qat: re-organise build file content

2018-07-02 Thread Tomasz Jozwiak
This patch groups sources and related dependencies into
common and sym sections in build files.

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile  | 25 ++---
 drivers/crypto/qat/meson.build   | 16 ++--
 drivers/crypto/qat/qat_sym.h |  2 +-
 drivers/crypto/qat/qat_sym_pmd.h |  3 +--
 4 files changed, 26 insertions(+), 20 deletions(-)

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index 64f39fd..a939eca 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -15,19 +15,22 @@ CFLAGS += -O3
 
 # external library include paths
 CFLAGS += -I$(SRCDIR)/qat_adf
-LDLIBS += -lcrypto
-LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
+
+# library common source files
+SRCS-y += qat_device.c
+SRCS-y += qat_common.c
+SRCS-y += qat_logs.c
+SRCS-y += qat_qp.c
+
+# library symetric crypto source files
 LDLIBS += -lrte_cryptodev
-LDLIBS += -lrte_pci -lrte_bus_pci
+LDLIBS += -lcrypto
+SRCS-y += qat_sym.c
+SRCS-y += qat_sym_session.c
+SRCS-y += qat_sym_pmd.c
 
-# library source files
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_device.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_qp.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_logs.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_pmd.c
+LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool
+LDLIBS += -lrte_pci -lrte_bus_pci
 
 # export include files
 SYMLINK-y-include +=
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index 6d01dac..0675426 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -2,15 +2,19 @@
 # Copyright(c) 2017-2018 Intel Corporation
 
 dep = dependency('libcrypto', required: false)
-if not dep.found()
-   build = false
-endif
+
+build = false
 sources = files('qat_common.c',
'qat_qp.c',
'qat_device.c',
-   'qat_logs.c',
-   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
+   'qat_logs.c')
+
+if dep.found()
+   sources += files('qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
+   pkgconfig_extra_libs += '-lcrypto'
+   build = true
+endif
+
 includes += include_directories('qat_adf')
 deps += ['bus_pci']
 ext_deps += dep
-pkgconfig_extra_libs += '-lcrypto'
diff --git a/drivers/crypto/qat/qat_sym.h b/drivers/crypto/qat/qat_sym.h
index f9e72a6..126c191 100644
--- a/drivers/crypto/qat/qat_sym.h
+++ b/drivers/crypto/qat/qat_sym.h
@@ -6,7 +6,6 @@
 #define _QAT_SYM_H_
 
 #include 
-
 #include 
 
 #include "qat_common.h"
@@ -153,4 +152,5 @@ qat_sym_process_response(void **op, uint8_t *resp)
}
*op = (void *)rx_op;
 }
+
 #endif /* _QAT_SYM_H_ */
diff --git a/drivers/crypto/qat/qat_sym_pmd.h b/drivers/crypto/qat/qat_sym_pmd.h
index 80a1987..1e2344c 100644
--- a/drivers/crypto/qat/qat_sym_pmd.h
+++ b/drivers/crypto/qat/qat_sym_pmd.h
@@ -10,7 +10,6 @@
 #include "qat_sym_capabilities.h"
 #include "qat_device.h"
 
-
 /**< Intel(R) QAT Symmetric Crypto PMD device name */
 #define CRYPTODEV_NAME_QAT_SYM_PMD crypto_qat
 #define QAT_SYM_PMD_MAX_NB_SESSIONS2048
@@ -31,10 +30,10 @@ struct qat_sym_dev_private {
/* QAT device symmetric crypto capabilities */
 };
 
-
 int
 qat_sym_dev_create(struct qat_pci_device *qat_pci_dev);
 
 int
 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev);
+
 #endif /* _QAT_SYM_PMD_H_ */
-- 
2.7.4



[dpdk-dev] [PATCH v4 3/3] crypto/qat: move common qat files to common dir

2018-07-02 Thread Tomasz Jozwiak
  -  moved common qat files to common/qat dir.
  -  changed common/qat/Makefile, common/qat/meson.build,
 drivers/Makefile, crypto/Makefile
 to add possibility of using new files locations
  -  added README file into crypto/qat to clarify where
 the build is made from
  -  updated MAINTAINERS file

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 MAINTAINERS|  1 +
 drivers/Makefile   |  2 ++
 drivers/common/meson.build |  2 +-
 drivers/{crypto => common}/qat/Makefile| 20 +++-
 drivers/common/qat/meson.build | 14 +++
 .../qat/qat_adf/adf_transport_access_macros.h  |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw.h|  0
 .../{crypto => common}/qat/qat_adf/icp_qat_fw_la.h |  0
 .../{crypto => common}/qat/qat_adf/icp_qat_hw.h|  0
 drivers/{crypto => common}/qat/qat_common.c|  0
 drivers/{crypto => common}/qat/qat_common.h|  0
 drivers/{crypto => common}/qat/qat_device.c|  0
 drivers/{crypto => common}/qat/qat_device.h|  0
 drivers/{crypto => common}/qat/qat_logs.c  |  0
 drivers/{crypto => common}/qat/qat_logs.h  |  0
 drivers/{crypto => common}/qat/qat_qp.c|  0
 drivers/{crypto => common}/qat/qat_qp.h|  0
 drivers/crypto/Makefile|  1 -
 drivers/crypto/qat/README  |  8 +++
 drivers/crypto/qat/meson.build | 28 --
 drivers/crypto/qat/qat_sym.h   |  8 +++
 drivers/crypto/qat/qat_sym_pmd.h   |  3 +++
 22 files changed, 67 insertions(+), 20 deletions(-)
 rename drivers/{crypto => common}/qat/Makefile (60%)
 create mode 100644 drivers/common/qat/meson.build
 rename drivers/{crypto => common}/qat/qat_adf/adf_transport_access_macros.h 
(100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_fw_la.h (100%)
 rename drivers/{crypto => common}/qat/qat_adf/icp_qat_hw.h (100%)
 rename drivers/{crypto => common}/qat/qat_common.c (100%)
 rename drivers/{crypto => common}/qat/qat_common.h (100%)
 rename drivers/{crypto => common}/qat/qat_device.c (100%)
 rename drivers/{crypto => common}/qat/qat_device.h (100%)
 rename drivers/{crypto => common}/qat/qat_logs.c (100%)
 rename drivers/{crypto => common}/qat/qat_logs.h (100%)
 rename drivers/{crypto => common}/qat/qat_qp.c (100%)
 rename drivers/{crypto => common}/qat/qat_qp.h (100%)
 create mode 100644 drivers/crypto/qat/README

diff --git a/MAINTAINERS b/MAINTAINERS
index 3bc928f..bc16078 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -775,6 +775,7 @@ M: John Griffin 
 M: Fiona Trahe 
 M: Deepak Kumar Jain 
 F: drivers/crypto/qat/
+F: drivers/common/qat/
 F: doc/guides/cryptodevs/qat.rst
 F: doc/guides/cryptodevs/features/qat.ini
 
diff --git a/drivers/Makefile b/drivers/Makefile
index c88638c..7566076 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -13,6 +13,8 @@ DIRS-$(CONFIG_RTE_LIBRTE_BBDEV) += baseband
 DEPDIRS-baseband := common bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += crypto
 DEPDIRS-crypto := common bus mempool
+DIRS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += common/qat
+DEPDIRS-common/qat := bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += compress
 DEPDIRS-compress := bus mempool
 DIRS-$(CONFIG_RTE_LIBRTE_EVENTDEV) += event
diff --git a/drivers/common/meson.build b/drivers/common/meson.build
index 5f6341b..d7b7d8c 100644
--- a/drivers/common/meson.build
+++ b/drivers/common/meson.build
@@ -2,6 +2,6 @@
 # Copyright(c) 2018 Cavium, Inc
 
 std_deps = ['eal']
-drivers = ['octeontx']
+drivers = ['octeontx', 'qat']
 config_flag_fmt = 'RTE_LIBRTE_@0@_COMMON'
 driver_name_fmt = 'rte_common_@0@'
diff --git a/drivers/crypto/qat/Makefile b/drivers/common/qat/Makefile
similarity index 60%
rename from drivers/crypto/qat/Makefile
rename to drivers/common/qat/Makefile
index a939eca..069ac8c 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/common/qat/Makefile
@@ -13,8 +13,13 @@ LIBABIVER := 1
 CFLAGS += $(WERROR_FLAGS)
 CFLAGS += -O3
 
+# build directories
+QAT_CRYPTO_DIR := $(RTE_SDK)/drivers/crypto/qat
+
 # external library include paths
 CFLAGS += -I$(SRCDIR)/qat_adf
+CFLAGS += -I$(SRCDIR)
+CFLAGS += -I$(QAT_CRYPTO_DIR)
 
 # library common source files
 SRCS-y += qat_device.c
@@ -23,11 +28,14 @@ SRCS-y += qat_logs.c
 SRCS-y += qat_qp.c
 
 # library symetric crypto source files
-LDLIBS += -lrte_cryptodev
-LDLIBS += -lcrypto
-SRCS-y += qat_sym.c
-SRCS-y += qat_sym_session.c
-SRCS-y += qat_sym_pmd.c
+ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
+   LDLIBS += -lrte_cryptodev
+   LDLIBS += -lcrypto
+   CFLAGS += -DBUILD_QAT_SYM
+   SRCS-y += $(QAT_CRYPTO_DIR)/qat_sym.

[dpdk-dev] [PATCH v4 1/3] crypto/qat: add weak functions

2018-07-02 Thread Tomasz Jozwiak
This patch adds following weak functions to facilitate conditional
compilation of code for those services:
  -  qat_sym_dev_create
  -  qat_asym_dev_create
  -  qat_comp_dev_create
  -  qat_sym_dev_destroy
  -  qat_asym_dev_destroy
  -  qat_comp_dev_destroy
and removes unused files with empty definitions of above functions.

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 drivers/crypto/qat/Makefile   |  2 --
 drivers/crypto/qat/meson.build|  4 +---
 drivers/crypto/qat/qat_asym_pmd.c | 17 -
 drivers/crypto/qat/qat_asym_pmd.h | 15 ---
 drivers/crypto/qat/qat_comp_pmd.c | 18 --
 drivers/crypto/qat/qat_comp_pmd.h | 29 -
 drivers/crypto/qat/qat_device.c   | 39 +--
 drivers/crypto/qat/qat_device.h   | 20 
 8 files changed, 58 insertions(+), 86 deletions(-)
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_asym_pmd.h
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.c
 delete mode 100644 drivers/crypto/qat/qat_comp_pmd.h

diff --git a/drivers/crypto/qat/Makefile b/drivers/crypto/qat/Makefile
index ef4a567..64f39fd 100644
--- a/drivers/crypto/qat/Makefile
+++ b/drivers/crypto/qat/Makefile
@@ -28,8 +28,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_session.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_common.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_logs.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_sym_pmd.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_asym_pmd.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += qat_comp_pmd.c
 
 # export include files
 SYMLINK-y-include +=
diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build
index bcab16e..6d01dac 100644
--- a/drivers/crypto/qat/meson.build
+++ b/drivers/crypto/qat/meson.build
@@ -9,9 +9,7 @@ sources = files('qat_common.c',
'qat_qp.c',
'qat_device.c',
'qat_logs.c',
-   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c',
-   'qat_asym_pmd.c',
-   'qat_comp_pmd.c')
+   'qat_sym_pmd.c', 'qat_sym.c', 'qat_sym_session.c')
 includes += include_directories('qat_adf')
 deps += ['bus_pci']
 ext_deps += dep
diff --git a/drivers/crypto/qat/qat_asym_pmd.c 
b/drivers/crypto/qat/qat_asym_pmd.c
deleted file mode 100644
index 8d36300..000
--- a/drivers/crypto/qat/qat_asym_pmd.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#include "qat_asym_pmd.h"
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
diff --git a/drivers/crypto/qat/qat_asym_pmd.h 
b/drivers/crypto/qat/qat_asym_pmd.h
deleted file mode 100644
index 0465e03..000
--- a/drivers/crypto/qat/qat_asym_pmd.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#ifndef _QAT_ASYM_PMD_H_
-#define _QAT_ASYM_PMD_H_
-
-#include "qat_device.h"
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev);
-#endif /* _QAT_ASYM_PMD_H_ */
diff --git a/drivers/crypto/qat/qat_comp_pmd.c 
b/drivers/crypto/qat/qat_comp_pmd.c
deleted file mode 100644
index 547b3db..000
--- a/drivers/crypto/qat/qat_comp_pmd.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#include "qat_comp_pmd.h"
-
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-   return 0;
-}
diff --git a/drivers/crypto/qat/qat_comp_pmd.h 
b/drivers/crypto/qat/qat_comp_pmd.h
deleted file mode 100644
index cc31246..000
--- a/drivers/crypto/qat/qat_comp_pmd.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#ifndef _QAT_COMP_PMD_H_
-#define _QAT_COMP_PMD_H_
-
-#include "qat_device.h"
-
-
-/**< Intel(R) QAT Compression PMD device name */
-#define COMPRESSDEV_NAME_QAT_PMD   comp_qat
-
-
-/** private data structure for a QAT compression device.
- * This QAT device is a device offering only a compression service,
- * there can be one of these on each qat_pci_device (VF).
- */
-struct qat_comp_dev_private {
-   struct qat_pci_device *qat_dev;
-   /**< The qat pci device hosting the service */
-};
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
-#endif /* _QAT_

[dpdk-dev] [PATCH v2 1/3] app/compress-perf: add parser

2018-11-02 Thread Tomasz Jozwiak
Added parser part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/Makefile |   4 +
 app/meson.build  |   1 +
 app/test-compress-perf/Makefile  |  16 +
 app/test-compress-perf/comp_perf_options.h   |  59 +++
 app/test-compress-perf/comp_perf_options_parse.c | 596 +++
 app/test-compress-perf/main.c|  52 ++
 app/test-compress-perf/meson.build   |   7 +
 config/common_base   |   5 +
 8 files changed, 740 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build

diff --git a/app/Makefile b/app/Makefile
index 069fa98..d6641ef 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -11,6 +11,10 @@ ifeq ($(CONFIG_RTE_LIBRTE_BBDEV),y)
 DIRS-$(CONFIG_RTE_TEST_BBDEV) += test-bbdev
 endif
 
+ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV),y)
+DIRS-$(CONFIG_RTE_APP_COMPRESS_PERF) += test-compress-perf
+endif
+
 ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
 DIRS-$(CONFIG_RTE_APP_CRYPTO_PERF) += test-crypto-perf
 endif
diff --git a/app/meson.build b/app/meson.build
index a9a026b..47a2a86 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -4,6 +4,7 @@
 apps = ['pdump',
'proc-info',
'test-bbdev',
+   'test-compress-perf',
'test-crypto-perf',
'test-eventdev',
'test-pmd']
diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
new file mode 100644
index 000..8aa7a22
--- /dev/null
+++ b/app/test-compress-perf/Makefile
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Intel Corporation
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+APP = dpdk-test-compress-perf
+
+CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -O3
+
+# all source are stored in SRCS-y
+SRCS-y := main.c
+SRCS-y += comp_perf_options_parse.c
+
+include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
new file mode 100644
index 000..7516ea0
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#define MAX_DRIVER_NAME64
+#define MAX_INPUT_FILE_NAME64
+#define MAX_LIST   32
+
+enum comp_operation {
+   COMPRESS_ONLY,
+   DECOMPRESS_ONLY,
+   COMPRESS_DECOMPRESS
+};
+
+struct range_list {
+   uint8_t min;
+   uint8_t max;
+   uint8_t inc;
+   uint8_t count;
+   uint8_t list[MAX_LIST];
+};
+
+struct comp_test_data {
+   char driver_name[64];
+   char input_file[64];
+   struct rte_mbuf **comp_bufs;
+   struct rte_mbuf **decomp_bufs;
+   uint32_t total_bufs;
+   uint8_t *input_data;
+   size_t input_data_sz;
+   uint8_t *compressed_data;
+   uint8_t *decompressed_data;
+   struct rte_mempool *comp_buf_pool;
+   struct rte_mempool *decomp_buf_pool;
+   struct rte_mempool *op_pool;
+   int8_t cdev_id;
+   uint16_t seg_sz;
+   uint16_t burst_sz;
+   uint32_t pool_sz;
+   uint32_t num_iter;
+   uint16_t max_sgl_segs;
+   enum rte_comp_huffman huffman_enc;
+   enum comp_operation test_op;
+   int window_sz;
+   struct range_list level;
+   /* Store TSC duration for all levels (including level 0) */
+   uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+};
+
+int
+comp_perf_options_parse(struct comp_test_data *test_data, int argc,
+   char **argv);
+
+void
+comp_perf_options_default(struct comp_test_data *test_data);
+
+int
+comp_perf_options_check(struct comp_test_data *test_data);
diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
new file mode 100644
index 000..bef4d2f
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -0,0 +1,596 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include "comp_perf_options.h"
+
+#define CPERF_DRIVER_NAME  ("driver-name")
+#define CPERF_TEST_FILE("input-file")
+#define CPERF_SEG_SIZE ("seg-sz")
+#define CPERF_BURST_SIZE   ("burst-sz")
+#define CPERF_EXTENDED_SIZE("extended-input-sz")
+#define CPERF_POOL_SIZE("pool-sz")
+

[dpdk-dev] [PATCH v2 0/3] add initial version of compress-perf

2018-11-02 Thread Tomasz Jozwiak
This patchset adds initial version of compression performance
test.

v2 changes:

  -  Added release note
  -  Added new cleanup flow into main function
  -  Blocked dynamic compression test because it hasn't been
 tested enough
  -  Changed `--max-num-sgl-segs' default value to 16
  -  Updated documentation

Opens:  comment from Shally Verma re separating validation from
benchmarking will be investigated in a later release.
Support for dynamic Huffman encoding will be added
in a later release.

Tomasz Jozwiak (3):
  app/compress-perf: add parser
  app/compress-perf: add performance measurement
  doc/guides/tools: add doc files

 MAINTAINERS  |   5 +
 app/Makefile |   4 +
 app/meson.build  |   1 +
 app/test-compress-perf/Makefile  |  16 +
 app/test-compress-perf/comp_perf_options.h   |  59 ++
 app/test-compress-perf/comp_perf_options_parse.c | 592 +++
 app/test-compress-perf/main.c| 928 +++
 app/test-compress-perf/meson.build   |   7 +
 config/common_base   |   5 +
 doc/guides/rel_notes/release_18_11.rst   |   6 +
 doc/guides/tools/comp_perf.rst   |  75 ++
 11 files changed, 1698 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build
 create mode 100644 doc/guides/tools/comp_perf.rst

-- 
2.7.4



[dpdk-dev] [PATCH v2 3/3] doc/guides/tools: add doc files

2018-11-02 Thread Tomasz Jozwiak
Added:
 -  initial version of compression performance test
description file.
 -  release note in release_18_11.rst

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 MAINTAINERS|  5 +++
 doc/guides/rel_notes/release_18_11.rst |  6 +++
 doc/guides/tools/comp_perf.rst | 75 ++
 3 files changed, 86 insertions(+)
 create mode 100644 doc/guides/tools/comp_perf.rst

diff --git a/MAINTAINERS b/MAINTAINERS
index e60379d..cfda6dd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1242,6 +1242,11 @@ M: Bernard Iremonger 
 F: app/test-pmd/
 F: doc/guides/testpmd_app_ug/
 
+Compression performance test application
+M: De Lara Guarch, Pablo 
+F: app/test-compress-perf/
+F: doc/guides/tools/comp_perf.rst
+
 Crypto performance test application
 M: Declan Doherty 
 F: app/test-crypto-perf/
diff --git a/doc/guides/rel_notes/release_18_11.rst 
b/doc/guides/rel_notes/release_18_11.rst
index 376128f..8bc7d05 100644
--- a/doc/guides/rel_notes/release_18_11.rst
+++ b/doc/guides/rel_notes/release_18_11.rst
@@ -285,6 +285,12 @@ New Features
   this application doesn't need to launch dedicated worker threads for vhost
   enqueue/dequeue operations.
 
+* **Added a compression performance test tool.**
+
+   Added a new performance test tool to test the compressdev PMD. The tool 
tests
+   compression ratio and compression throughput. Dynamic compression test is 
not
+   supported yet.
+
 
 API Changes
 ---
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
new file mode 100644
index 000..2f43412
--- /dev/null
+++ b/doc/guides/tools/comp_perf.rst
@@ -0,0 +1,75 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+Copyright(c) 2018 Intel Corporation.
+
+dpdk-test-crypto-perf Application
+=
+
+The ``dpdk-test-compress-perf`` tool is a Data Plane Development Kit (DPDK)
+utility that allows measuring performance parameters of PMDs available in the
+compress tree. The application reads the data from a file (--input-file),
+dumps all the file into a buffer and fills out the data of input mbufs,
+which are passed to compress device with compression operations.
+Then, the output buffers are fed into the decompression stage, and the 
resulting
+data is compared against the original data (verification phase). After that,
+a number of iterations are performed, compressing first and decompressing 
later,
+to check the throughput rate
+(showing cycles/iteration, cycles/Byte and Gbps, for compression and 
decompression).
+
+
+Limitations
+~~~
+
+* Only supports the fixed compression.
+
+Command line options
+
+
+ ``--driver-name NAME``: compress driver to use
+
+ ``--input-file NAME``: file to compress and decompress
+
+ ``--extended-input-sz N``: extend file data up to this size (default: no 
extension)
+
+ ``--seg-sz N``: size of segment to store the data (default: 2048)
+
+ ``--burst-sz N``: compress operation burst size
+
+ ``--pool-sz N``: mempool size for compress operations/mbufs (default: 8192)
+
+ ``--max-num-sgl-segs N``: maximum number of segments for each mbuf (default: 
16)
+
+ ``--num-iter N``: number of times the file will be compressed/decompressed 
(default: 1)
+
+ ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
+
+ ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+
+ ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
+
+ ``--window-sz N``: base two log value of compression window size (default: 
max supported by PMD)
+
+ ``-h``: prints this help
+
+
+Compiling the Application
+-
+
+**Step 1: PMD setting**
+
+The ``dpdk-test-compress-perf`` tool depends on compression device drivers PMD 
which
+can be disabled by default in the build configuration file ``common_base``.
+The compression device drivers PMD which should be tested can be enabled by 
setting::
+
+   CONFIG_RTE_LIBRTE_PMD_ISAL=y
+
+
+Running the Application
+---
+
+The tool application has a number of command line options. Here is the sample 
command line:
+
+.. code-block:: console
+
+   ./build/app/dpdk-test-compress-perf  -l 4 -- --driver-name compress_qat 
--input-file test.txt --seg-sz 8192
+--compress-level 1:1:9 --num-iter 10 --extended-input-sz 1048576  
--max-num-sgl-segs 16 --huffman-enc fixed
+
-- 
2.7.4



[dpdk-dev] [PATCH v2 2/3] app/compress-perf: add performance measurement

2018-11-02 Thread Tomasz Jozwiak
Added performance measurement part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c |   8 +-
 app/test-compress-perf/main.c| 886 ++-
 2 files changed, 883 insertions(+), 11 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index bef4d2f..e5da3ad 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -431,10 +431,6 @@ parse_huffman_enc(struct comp_test_data *test_data, const 
char *arg)
{
"fixed",
RTE_COMP_HUFFMAN_FIXED
-   },
-   {
-   "dynamic",
-   RTE_COMP_HUFFMAN_DYNAMIC
}
};
 
@@ -569,9 +565,9 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->seg_sz = 2048;
test_data->burst_sz = 32;
test_data->pool_sz = 8192;
-   test_data->max_sgl_segs = UINT16_MAX;
+   test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
-   test_data->huffman_enc = RTE_COMP_HUFFMAN_DYNAMIC;
+   test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
test_data->test_op = COMPRESS_DECOMPRESS;
test_data->window_sz = -1;
test_data->level.min = 1;
diff --git a/app/test-compress-perf/main.c b/app/test-compress-perf/main.c
index f52b98d..e3f4bf6 100644
--- a/app/test-compress-perf/main.c
+++ b/app/test-compress-perf/main.c
@@ -5,14 +5,728 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include "comp_perf_options.h"
 
+#define NUM_MAX_XFORMS 16
+#define NUM_MAX_INFLIGHT_OPS 512
+#define EXPANSE_RATIO 1.05
+#define MIN_ISAL_SIZE 8
+
+#define DIV_CEIL(a, b)  ((a) / (b) + ((a) % (b) != 0))
+
+/* Cleanup state machine */
+static enum cleanup_st {
+   ST_CLEAR = 0,
+   ST_TEST_DATA,
+   ST_COMPDEV,
+   ST_INPUT_DATA,
+   ST_MEMORY_ALLOC,
+   ST_PREPARE_BUF,
+   ST_DURING_TEST
+} cleanup = ST_CLEAR;
+
+static int
+param_range_check(uint16_t size, const struct rte_param_log2_range *range)
+{
+   unsigned int next_size;
+
+   /* Check lower/upper bounds */
+   if (size < range->min)
+   return -1;
+
+   if (size > range->max)
+   return -1;
+
+   /* If range is actually only one value, size is correct */
+   if (range->increment == 0)
+   return 0;
+
+   /* Check if value is one of the supported sizes */
+   for (next_size = range->min; next_size <= range->max;
+   next_size += range->increment)
+   if (size == next_size)
+   return 0;
+
+   return -1;
+}
+
+static int
+comp_perf_check_capabilities(struct comp_test_data *test_data)
+{
+   const struct rte_compressdev_capabilities *cap;
+
+   cap = rte_compressdev_capability_get(test_data->cdev_id,
+RTE_COMP_ALGO_DEFLATE);
+
+   if (cap == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support DEFLATE\n");
+   return -1;
+   }
+
+   uint64_t comp_flags = cap->comp_feature_flags;
+
+   /* Huffman enconding */
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_FIXED &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Fixed Huffman\n");
+   return -1;
+   }
+
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_DYNAMIC &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Dynamic Huffman\n");
+   return -1;
+   }
+
+   /* Window size */
+   if (test_data->window_sz != -1) {
+   if (param_range_check(test_data->window_sz, &cap->window_size)
+   < 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support "
+   "this window size\n");
+   return -1;
+   }
+   } else
+   /* Set window size to PMD maximum if none was specified */
+   test_data->window_sz = cap->window_size.max;
+
+   /* Check if chained mbufs is supported */
+   if (test_data->max_sgl_segs > 1  &&
+   (comp_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0) {
+   RTE_LOG(INFO, USER1, "Compress device d

[dpdk-dev] [PATCH v3 0/5] add initial version of compress-perf

2018-11-23 Thread Tomasz Jozwiak
This patchset adds initial version of compression performance
test.

v3 changes:
  - Added dynamic compression
  - Code refactoring to separate validation
from benchmarking part
  - Updated documentation
  - Added fail detection from rte_compressdev_enqueue_burst
and rte_compressdev_dequeue_burst functions
  - Code cleanup

  Note: The 19.02 release notes will be updated once the file has been created

v2 changes:

  -  Added release note
  -  Added new cleanup flow into main function
  -  Blocked dynamic compression test because it hasn't been
 tested enough
  -  Changed `--max-num-sgl-segs' default value to 16
  -  Updated documentation

Opens:
  Comment from Shally Verma re removig `--max-num-sgl-segs'
  option from command line (it can be done after compression API
  change, (eg.: adding new capability field into the
  rte_compressdev_info struct)

Tomasz Jozwiak (5):
  app/compress-perf: add parser
  app/compress-perf: add performance measurement
  doc/guides/tools: add doc files
  app/compress-perf: add dynamic compression test
  app/compress-perf: code refactoring

 MAINTAINERS   |   5 +
 app/Makefile  |   4 +
 app/meson.build   |   1 +
 app/test-compress-perf/Makefile   |  18 +
 app/test-compress-perf/comp_perf_options.h|  71 +++
 app/test-compress-perf/comp_perf_options_parse.c  | 596 ++
 app/test-compress-perf/comp_perf_test_benchmark.c | 291 +++
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 337 
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 590 +
 app/test-compress-perf/meson.build|   9 +
 config/common_base|   5 +
 doc/guides/rel_notes/release_18_11.rst|   4 +
 doc/guides/tools/comp_perf.rst|  75 +++
 doc/guides/tools/index.rst|   1 +
 16 files changed, 2033 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build
 create mode 100644 doc/guides/tools/comp_perf.rst

-- 
2.7.4



[dpdk-dev] [PATCH v3 2/5] app/compress-perf: add performance measurement

2018-11-23 Thread Tomasz Jozwiak
Added performance measurement part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c |   8 +-
 app/test-compress-perf/main.c| 886 ++-
 2 files changed, 883 insertions(+), 11 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index 5b9ea26..fd5d31c 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -431,10 +431,6 @@ parse_huffman_enc(struct comp_test_data *test_data, const 
char *arg)
{
"fixed",
RTE_COMP_HUFFMAN_FIXED
-   },
-   {
-   "dynamic",
-   RTE_COMP_HUFFMAN_DYNAMIC
}
};
 
@@ -569,9 +565,9 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->seg_sz = 2048;
test_data->burst_sz = 32;
test_data->pool_sz = 8192;
-   test_data->max_sgl_segs = UINT16_MAX;
+   test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
-   test_data->huffman_enc = RTE_COMP_HUFFMAN_DYNAMIC;
+   test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
test_data->test_op = COMPRESS_DECOMPRESS;
test_data->window_sz = -1;
test_data->level.min = 1;
diff --git a/app/test-compress-perf/main.c b/app/test-compress-perf/main.c
index f52b98d..5950c96 100644
--- a/app/test-compress-perf/main.c
+++ b/app/test-compress-perf/main.c
@@ -5,14 +5,728 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include "comp_perf_options.h"
 
+#define NUM_MAX_XFORMS 16
+#define NUM_MAX_INFLIGHT_OPS 512
+#define EXPANSE_RATIO 1.05
+#define MIN_COMPRESSED_BUF_SIZE 8
+
+#define DIV_CEIL(a, b)  ((a) / (b) + ((a) % (b) != 0))
+
+/* Cleanup state machine */
+static enum cleanup_st {
+   ST_CLEAR = 0,
+   ST_TEST_DATA,
+   ST_COMPDEV,
+   ST_INPUT_DATA,
+   ST_MEMORY_ALLOC,
+   ST_PREPARE_BUF,
+   ST_DURING_TEST
+} cleanup = ST_CLEAR;
+
+static int
+param_range_check(uint16_t size, const struct rte_param_log2_range *range)
+{
+   unsigned int next_size;
+
+   /* Check lower/upper bounds */
+   if (size < range->min)
+   return -1;
+
+   if (size > range->max)
+   return -1;
+
+   /* If range is actually only one value, size is correct */
+   if (range->increment == 0)
+   return 0;
+
+   /* Check if value is one of the supported sizes */
+   for (next_size = range->min; next_size <= range->max;
+   next_size += range->increment)
+   if (size == next_size)
+   return 0;
+
+   return -1;
+}
+
+static int
+comp_perf_check_capabilities(struct comp_test_data *test_data)
+{
+   const struct rte_compressdev_capabilities *cap;
+
+   cap = rte_compressdev_capability_get(test_data->cdev_id,
+RTE_COMP_ALGO_DEFLATE);
+
+   if (cap == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support DEFLATE\n");
+   return -1;
+   }
+
+   uint64_t comp_flags = cap->comp_feature_flags;
+
+   /* Huffman enconding */
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_FIXED &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Fixed Huffman\n");
+   return -1;
+   }
+
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_DYNAMIC &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Dynamic Huffman\n");
+   return -1;
+   }
+
+   /* Window size */
+   if (test_data->window_sz != -1) {
+   if (param_range_check(test_data->window_sz, &cap->window_size)
+   < 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support "
+   "this window size\n");
+   return -1;
+   }
+   } else
+   /* Set window size to PMD maximum if none was specified */
+   test_data->window_sz = cap->window_size.max;
+
+   /* Check if chained mbufs is supported */
+   if (test_data->max_sgl_segs > 1  &&
+   (comp_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0) {
+   RTE_LOG(INFO, USER1, "Compress device d

[dpdk-dev] [PATCH v3 3/5] doc/guides/tools: add doc files

2018-11-23 Thread Tomasz Jozwiak
Added:
 -  initial version of compression performance test
description file.
 -  release note in release_18_11.rst

Updated index.rst file

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 MAINTAINERS|  5 +++
 doc/guides/rel_notes/release_18_11.rst |  5 +++
 doc/guides/tools/comp_perf.rst | 75 ++
 doc/guides/tools/index.rst |  1 +
 4 files changed, 86 insertions(+)
 create mode 100644 doc/guides/tools/comp_perf.rst

diff --git a/MAINTAINERS b/MAINTAINERS
index 71ba312..dd0c131 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1242,6 +1242,11 @@ M: Bernard Iremonger 
 F: app/test-pmd/
 F: doc/guides/testpmd_app_ug/
 
+Compression performance test application
+M: De Lara Guarch, Pablo 
+F: app/test-compress-perf/
+F: doc/guides/tools/comp_perf.rst
+
 Crypto performance test application
 M: Declan Doherty 
 F: app/test-crypto-perf/
diff --git a/doc/guides/rel_notes/release_18_11.rst 
b/doc/guides/rel_notes/release_18_11.rst
index 32ff0e5..d44cf30 100644
--- a/doc/guides/rel_notes/release_18_11.rst
+++ b/doc/guides/rel_notes/release_18_11.rst
@@ -328,6 +328,11 @@ New Features
   additional command-line parameter values from the "DPDK_TEST_PARAMS"
   environment variable to make this application easier to use.
 
+* **Added a compression performance test tool.**
+
+   Added a new performance test tool to test the compressdev PMD. The tool 
tests
+   compression ratio and compression throughput. Dynamic compression test is 
not
+   supported yet.
 
 API Changes
 ---
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
new file mode 100644
index 000..1428348
--- /dev/null
+++ b/doc/guides/tools/comp_perf.rst
@@ -0,0 +1,75 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+Copyright(c) 2018 Intel Corporation.
+
+dpdk-test-compress-perf Application
+===
+
+The ``dpdk-test-compress-perf`` tool is a Data Plane Development Kit (DPDK)
+utility that allows measuring performance parameters of PMDs available in the
+compress tree. The application reads the data from a file (--input-file),
+dumps all the file into a buffer and fills out the data of input mbufs,
+which are passed to compress device with compression operations.
+Then, the output buffers are fed into the decompression stage, and the 
resulting
+data is compared against the original data (verification phase). After that,
+a number of iterations are performed, compressing first and decompressing 
later,
+to check the throughput rate
+(showing cycles/iteration, cycles/Byte and Gbps, for compression and 
decompression).
+
+
+Limitations
+~~~
+
+* Only supports the fixed compression and stateless operation.
+
+Command line options
+
+
+ ``--driver-name NAME``: compress driver to use
+
+ ``--input-file NAME``: file to compress and decompress
+
+ ``--extended-input-sz N``: extend file data up to this size (default: no 
extension)
+
+ ``--seg-sz N``: size of segment to store the data (default: 2048)
+
+ ``--burst-sz N``: compress operation burst size
+
+ ``--pool-sz N``: mempool size for compress operations/mbufs (default: 8192)
+
+ ``--max-num-sgl-segs N``: maximum number of segments for each mbuf (default: 
16)
+
+ ``--num-iter N``: number of times the file will be compressed/decompressed 
(default: 1)
+
+ ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
+
+ ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+
+ ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
+
+ ``--window-sz N``: base two log value of compression window size (default: 
max supported by PMD)
+
+ ``-h``: prints this help
+
+
+Compiling the Application
+-
+
+**Step 1: PMD setting**
+
+The ``dpdk-test-compress-perf`` tool depends on compression device drivers PMD 
which
+can be disabled by default in the build configuration file ``common_base``.
+The compression device drivers PMD which should be tested can be enabled by 
setting::
+
+   CONFIG_RTE_LIBRTE_PMD_ISAL=y
+
+
+Running the Application
+---
+
+The tool application has a number of command line options. Here is the sample 
command line:
+
+.. code-block:: console
+
+   ./build/app/dpdk-test-compress-perf  -l 4 -- --driver-name compress_qat 
--input-file test.txt --seg-sz 8192
+--compress-level 1:1:9 --num-iter 10 --extended-input-sz 1048576  
--max-num-sgl-segs 16 --huffman-enc fixed
+
diff --git a/doc/guides/tools/index.rst b/doc/guides/tools/index.rst
index a6e2c4c..24235ba 100644
--- a/doc/guides/tools/index.rst
+++ b/doc/guides/tools/index.rst
@@ -42,3 +42,4 @@ DPDK Tools User Guides
 testbbdev
 cryptoperf
 testeventdev
+comp_perf
-- 
2.7.4



[dpdk-dev] [PATCH v3 4/5] app/compress-perf: add dynamic compression test

2018-11-23 Thread Tomasz Jozwiak
Added dynamic compression feature into compression perf. test.

Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c | 6 +-
 doc/guides/rel_notes/release_18_11.rst   | 3 +--
 doc/guides/tools/comp_perf.rst   | 4 ++--
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index fd5d31c..dbe8135 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -431,6 +431,10 @@ parse_huffman_enc(struct comp_test_data *test_data, const 
char *arg)
{
"fixed",
RTE_COMP_HUFFMAN_FIXED
+   },
+   {
+   "dynamic",
+   RTE_COMP_HUFFMAN_DYNAMIC
}
};
 
@@ -567,7 +571,7 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->pool_sz = 8192;
test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
-   test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
+   test_data->huffman_enc = RTE_COMP_HUFFMAN_DYNAMIC;
test_data->test_op = COMPRESS_DECOMPRESS;
test_data->window_sz = -1;
test_data->level.min = 1;
diff --git a/doc/guides/rel_notes/release_18_11.rst 
b/doc/guides/rel_notes/release_18_11.rst
index d44cf30..848cc06 100644
--- a/doc/guides/rel_notes/release_18_11.rst
+++ b/doc/guides/rel_notes/release_18_11.rst
@@ -331,8 +331,7 @@ New Features
 * **Added a compression performance test tool.**
 
Added a new performance test tool to test the compressdev PMD. The tool 
tests
-   compression ratio and compression throughput. Dynamic compression test is 
not
-   supported yet.
+   compression ratio and compression throughput.
 
 API Changes
 ---
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
index 1428348..abb727d 100644
--- a/doc/guides/tools/comp_perf.rst
+++ b/doc/guides/tools/comp_perf.rst
@@ -19,7 +19,7 @@ to check the throughput rate
 Limitations
 ~~~
 
-* Only supports the fixed compression and stateless operation.
+* Only supports the stateless operation.
 
 Command line options
 
@@ -42,7 +42,7 @@ Command line options
 
  ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
 
- ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+ ``--huffman-enc [fixed/dynamic/default]``: Huffman encoding (default: dynamic)
 
  ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
 
-- 
2.7.4



[dpdk-dev] [PATCH v3 1/5] app/compress-perf: add parser

2018-11-23 Thread Tomasz Jozwiak
Added parser part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/Makefile |   4 +
 app/meson.build  |   1 +
 app/test-compress-perf/Makefile  |  16 +
 app/test-compress-perf/comp_perf_options.h   |  59 +++
 app/test-compress-perf/comp_perf_options_parse.c | 596 +++
 app/test-compress-perf/main.c|  52 ++
 app/test-compress-perf/meson.build   |   7 +
 config/common_base   |   5 +
 8 files changed, 740 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build

diff --git a/app/Makefile b/app/Makefile
index 069fa98..d6641ef 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -11,6 +11,10 @@ ifeq ($(CONFIG_RTE_LIBRTE_BBDEV),y)
 DIRS-$(CONFIG_RTE_TEST_BBDEV) += test-bbdev
 endif
 
+ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV),y)
+DIRS-$(CONFIG_RTE_APP_COMPRESS_PERF) += test-compress-perf
+endif
+
 ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
 DIRS-$(CONFIG_RTE_APP_CRYPTO_PERF) += test-crypto-perf
 endif
diff --git a/app/meson.build b/app/meson.build
index a9a026b..47a2a86 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -4,6 +4,7 @@
 apps = ['pdump',
'proc-info',
'test-bbdev',
+   'test-compress-perf',
'test-crypto-perf',
'test-eventdev',
'test-pmd']
diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
new file mode 100644
index 000..8aa7a22
--- /dev/null
+++ b/app/test-compress-perf/Makefile
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Intel Corporation
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+APP = dpdk-test-compress-perf
+
+CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -O3
+
+# all source are stored in SRCS-y
+SRCS-y := main.c
+SRCS-y += comp_perf_options_parse.c
+
+include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
new file mode 100644
index 000..7516ea0
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#define MAX_DRIVER_NAME64
+#define MAX_INPUT_FILE_NAME64
+#define MAX_LIST   32
+
+enum comp_operation {
+   COMPRESS_ONLY,
+   DECOMPRESS_ONLY,
+   COMPRESS_DECOMPRESS
+};
+
+struct range_list {
+   uint8_t min;
+   uint8_t max;
+   uint8_t inc;
+   uint8_t count;
+   uint8_t list[MAX_LIST];
+};
+
+struct comp_test_data {
+   char driver_name[64];
+   char input_file[64];
+   struct rte_mbuf **comp_bufs;
+   struct rte_mbuf **decomp_bufs;
+   uint32_t total_bufs;
+   uint8_t *input_data;
+   size_t input_data_sz;
+   uint8_t *compressed_data;
+   uint8_t *decompressed_data;
+   struct rte_mempool *comp_buf_pool;
+   struct rte_mempool *decomp_buf_pool;
+   struct rte_mempool *op_pool;
+   int8_t cdev_id;
+   uint16_t seg_sz;
+   uint16_t burst_sz;
+   uint32_t pool_sz;
+   uint32_t num_iter;
+   uint16_t max_sgl_segs;
+   enum rte_comp_huffman huffman_enc;
+   enum comp_operation test_op;
+   int window_sz;
+   struct range_list level;
+   /* Store TSC duration for all levels (including level 0) */
+   uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+};
+
+int
+comp_perf_options_parse(struct comp_test_data *test_data, int argc,
+   char **argv);
+
+void
+comp_perf_options_default(struct comp_test_data *test_data);
+
+int
+comp_perf_options_check(struct comp_test_data *test_data);
diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
new file mode 100644
index 000..5b9ea26
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -0,0 +1,596 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include "comp_perf_options.h"
+
+#define CPERF_DRIVER_NAME  ("driver-name")
+#define CPERF_TEST_FILE("input-file")
+#define CPERF_SEG_SIZE ("seg-sz")
+#define CPERF_BURST_SIZE   ("burst-sz")
+#define CPERF_EXTENDED_SIZE("extended-input-sz")
+#define CPERF_POOL_SIZE("pool-sz")
+

[dpdk-dev] [PATCH v3 5/5] app/compress-perf: code refactoring

2018-11-23 Thread Tomasz Jozwiak
Code refactoring to separate validation from benchmarking part.

Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/Makefile   |   2 +
 app/test-compress-perf/comp_perf_options.h|  12 +
 app/test-compress-perf/comp_perf_test_benchmark.c | 291 +
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 337 
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 366 +-
 app/test-compress-perf/meson.build|   4 +-
 8 files changed, 685 insertions(+), 353 deletions(-)
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h

diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
index 8aa7a22..d20e17e 100644
--- a/app/test-compress-perf/Makefile
+++ b/app/test-compress-perf/Makefile
@@ -12,5 +12,7 @@ CFLAGS += -O3
 # all source are stored in SRCS-y
 SRCS-y := main.c
 SRCS-y += comp_perf_options_parse.c
+SRCS-y += comp_perf_test_verify.c
+SRCS-y += comp_perf_test_benchmark.c
 
 include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
index 7516ea0..ca96a3c 100644
--- a/app/test-compress-perf/comp_perf_options.h
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -2,6 +2,9 @@
  * Copyright(c) 2018 Intel Corporation
  */
 
+#ifndef _COMP_PERF_OPS_
+#define _COMP_PERF_OPS_
+
 #define MAX_DRIVER_NAME64
 #define MAX_INPUT_FILE_NAME64
 #define MAX_LIST   32
@@ -46,6 +49,13 @@ struct comp_test_data {
/* Store TSC duration for all levels (including level 0) */
uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   size_t comp_data_sz;
+   size_t decomp_data_sz;
+   double ratio;
+   double comp_gbps;
+   double decomp_gbps;
+   double comp_tsc_byte;
+   double decomp_tsc_byte;
 };
 
 int
@@ -57,3 +67,5 @@ comp_perf_options_default(struct comp_test_data *test_data);
 
 int
 comp_perf_options_check(struct comp_test_data *test_data);
+
+#endif
diff --git a/app/test-compress-perf/comp_perf_test_benchmark.c 
b/app/test-compress-perf/comp_perf_test_benchmark.c
new file mode 100644
index 000..ae5f204
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_test_benchmark.c
@@ -0,0 +1,291 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "comp_perf_test_benchmark.h"
+
+static int
+main_loop(struct comp_test_data *test_data, uint8_t level,
+   enum rte_comp_xform_type type)
+{
+   uint8_t dev_id = test_data->cdev_id;
+   uint32_t i, iter, num_iter;
+   struct rte_comp_op **ops, **deq_ops;
+   void *priv_xform = NULL;
+   struct rte_comp_xform xform;
+   struct rte_mbuf **input_bufs, **output_bufs;
+   int res = 0;
+   int allocated = 0;
+
+   if (test_data == NULL || !test_data->burst_sz) {
+   RTE_LOG(ERR, USER1,
+   "Unknown burst size\n");
+   return -1;
+   }
+
+   ops = rte_zmalloc_socket(NULL,
+   2 * test_data->total_bufs * sizeof(struct rte_comp_op *),
+   0, rte_socket_id());
+
+   if (ops == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Can't allocate memory for ops strucures\n");
+   return -1;
+   }
+
+   deq_ops = &ops[test_data->total_bufs];
+
+   if (type == RTE_COMP_COMPRESS) {
+   xform = (struct rte_comp_xform) {
+   .type = RTE_COMP_COMPRESS,
+   .compress = {
+   .algo = RTE_COMP_ALGO_DEFLATE,
+   .deflate.huffman = test_data->huffman_enc,
+   .level = level,
+   .window_size = test_data->window_sz,
+   .chksum = RTE_COMP_CHECKSUM_NONE,
+   .hash_algo = RTE_COMP_HASH_ALGO_NONE
+   }
+   };
+   input_bufs = test_data->decomp_bufs;
+   output_bufs = test_data->comp_bufs;
+   } else {
+   xform = (struct rte_comp_xform) {
+   .type = RTE_COMP_DECOMPRESS,
+   .decompress = {
+   .algo = RTE_COMP_ALGO_DEFLATE,
+   .chksum = RTE_COMP_CHECKSUM_NONE,
+   .window_size = test_data->window_sz,
+ 

[dpdk-dev] [PATCH v4 0/5] add initial version of compress-perf

2018-11-23 Thread Tomasz Jozwiak
This patchset adds initial version of compression performance
test.

v4 changes:
  - fixed checkpatch issues
  - code cleanup

  Note: The 19.02 release notes will be updated once the file has been created

v3 changes:
  - Added dynamic compression
  - Code refactoring to separate validation
from benchmarking part
  - Updated documentation
  - Added fail detection from rte_compressdev_enqueue_burst
and rte_compressdev_dequeue_burst functions
  - Code cleanup
  
v2 changes:

  -  Added release note
  -  Added new cleanup flow into main function
  -  Blocked dynamic compression test because it hasn't been
 tested enough
  -  Changed `--max-num-sgl-segs' default value to 16
  -  Updated documentation

Opens:
  Comment from Shally Verma re removig `--max-num-sgl-segs'
  option from command line (it can be done after compression API
  change, (eg.: adding new capability field into the
  rte_compressdev_info struct)


Tomasz Jozwiak (5):
  app/compress-perf: add parser
  app/compress-perf: add performance measurement
  doc/guides/tools: add doc files
  app/compress-perf: add dynamic compression test
  app/compress-perf: code refactoring

 MAINTAINERS   |   5 +
 app/Makefile  |   4 +
 app/meson.build   |   1 +
 app/test-compress-perf/Makefile   |  18 +
 app/test-compress-perf/comp_perf_options.h|  71 +++
 app/test-compress-perf/comp_perf_options_parse.c  | 596 ++
 app/test-compress-perf/comp_perf_test_benchmark.c | 292 +++
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 339 
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 590 +
 app/test-compress-perf/meson.build|   9 +
 config/common_base|   5 +
 doc/guides/rel_notes/release_18_11.rst|   4 +
 doc/guides/tools/comp_perf.rst|  75 +++
 doc/guides/tools/index.rst|   1 +
 16 files changed, 2036 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build
 create mode 100644 doc/guides/tools/comp_perf.rst

-- 
2.7.4



[dpdk-dev] [PATCH v4 3/5] doc/guides/tools: add doc files

2018-11-23 Thread Tomasz Jozwiak
Added:
 -  initial version of compression performance test
description file.
 -  release note in release_18_11.rst

Updated index.rst file

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 MAINTAINERS|  5 +++
 doc/guides/rel_notes/release_18_11.rst |  5 +++
 doc/guides/tools/comp_perf.rst | 75 ++
 doc/guides/tools/index.rst |  1 +
 4 files changed, 86 insertions(+)
 create mode 100644 doc/guides/tools/comp_perf.rst

diff --git a/MAINTAINERS b/MAINTAINERS
index 71ba312..dd0c131 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1242,6 +1242,11 @@ M: Bernard Iremonger 
 F: app/test-pmd/
 F: doc/guides/testpmd_app_ug/
 
+Compression performance test application
+M: De Lara Guarch, Pablo 
+F: app/test-compress-perf/
+F: doc/guides/tools/comp_perf.rst
+
 Crypto performance test application
 M: Declan Doherty 
 F: app/test-crypto-perf/
diff --git a/doc/guides/rel_notes/release_18_11.rst 
b/doc/guides/rel_notes/release_18_11.rst
index 32ff0e5..d44cf30 100644
--- a/doc/guides/rel_notes/release_18_11.rst
+++ b/doc/guides/rel_notes/release_18_11.rst
@@ -328,6 +328,11 @@ New Features
   additional command-line parameter values from the "DPDK_TEST_PARAMS"
   environment variable to make this application easier to use.
 
+* **Added a compression performance test tool.**
+
+   Added a new performance test tool to test the compressdev PMD. The tool 
tests
+   compression ratio and compression throughput. Dynamic compression test is 
not
+   supported yet.
 
 API Changes
 ---
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
new file mode 100644
index 000..1428348
--- /dev/null
+++ b/doc/guides/tools/comp_perf.rst
@@ -0,0 +1,75 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+Copyright(c) 2018 Intel Corporation.
+
+dpdk-test-compress-perf Application
+===
+
+The ``dpdk-test-compress-perf`` tool is a Data Plane Development Kit (DPDK)
+utility that allows measuring performance parameters of PMDs available in the
+compress tree. The application reads the data from a file (--input-file),
+dumps all the file into a buffer and fills out the data of input mbufs,
+which are passed to compress device with compression operations.
+Then, the output buffers are fed into the decompression stage, and the 
resulting
+data is compared against the original data (verification phase). After that,
+a number of iterations are performed, compressing first and decompressing 
later,
+to check the throughput rate
+(showing cycles/iteration, cycles/Byte and Gbps, for compression and 
decompression).
+
+
+Limitations
+~~~
+
+* Only supports the fixed compression and stateless operation.
+
+Command line options
+
+
+ ``--driver-name NAME``: compress driver to use
+
+ ``--input-file NAME``: file to compress and decompress
+
+ ``--extended-input-sz N``: extend file data up to this size (default: no 
extension)
+
+ ``--seg-sz N``: size of segment to store the data (default: 2048)
+
+ ``--burst-sz N``: compress operation burst size
+
+ ``--pool-sz N``: mempool size for compress operations/mbufs (default: 8192)
+
+ ``--max-num-sgl-segs N``: maximum number of segments for each mbuf (default: 
16)
+
+ ``--num-iter N``: number of times the file will be compressed/decompressed 
(default: 1)
+
+ ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
+
+ ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+
+ ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
+
+ ``--window-sz N``: base two log value of compression window size (default: 
max supported by PMD)
+
+ ``-h``: prints this help
+
+
+Compiling the Application
+-
+
+**Step 1: PMD setting**
+
+The ``dpdk-test-compress-perf`` tool depends on compression device drivers PMD 
which
+can be disabled by default in the build configuration file ``common_base``.
+The compression device drivers PMD which should be tested can be enabled by 
setting::
+
+   CONFIG_RTE_LIBRTE_PMD_ISAL=y
+
+
+Running the Application
+---
+
+The tool application has a number of command line options. Here is the sample 
command line:
+
+.. code-block:: console
+
+   ./build/app/dpdk-test-compress-perf  -l 4 -- --driver-name compress_qat 
--input-file test.txt --seg-sz 8192
+--compress-level 1:1:9 --num-iter 10 --extended-input-sz 1048576  
--max-num-sgl-segs 16 --huffman-enc fixed
+
diff --git a/doc/guides/tools/index.rst b/doc/guides/tools/index.rst
index a6e2c4c..24235ba 100644
--- a/doc/guides/tools/index.rst
+++ b/doc/guides/tools/index.rst
@@ -42,3 +42,4 @@ DPDK Tools User Guides
 testbbdev
 cryptoperf
 testeventdev
+comp_perf
-- 
2.7.4



[dpdk-dev] [PATCH v4 1/5] app/compress-perf: add parser

2018-11-23 Thread Tomasz Jozwiak
Added parser part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/Makefile |   4 +
 app/meson.build  |   1 +
 app/test-compress-perf/Makefile  |  16 +
 app/test-compress-perf/comp_perf_options.h   |  59 +++
 app/test-compress-perf/comp_perf_options_parse.c | 596 +++
 app/test-compress-perf/main.c|  52 ++
 app/test-compress-perf/meson.build   |   7 +
 config/common_base   |   5 +
 8 files changed, 740 insertions(+)
 create mode 100644 app/test-compress-perf/Makefile
 create mode 100644 app/test-compress-perf/comp_perf_options.h
 create mode 100644 app/test-compress-perf/comp_perf_options_parse.c
 create mode 100644 app/test-compress-perf/main.c
 create mode 100644 app/test-compress-perf/meson.build

diff --git a/app/Makefile b/app/Makefile
index 069fa98..d6641ef 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -11,6 +11,10 @@ ifeq ($(CONFIG_RTE_LIBRTE_BBDEV),y)
 DIRS-$(CONFIG_RTE_TEST_BBDEV) += test-bbdev
 endif
 
+ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV),y)
+DIRS-$(CONFIG_RTE_APP_COMPRESS_PERF) += test-compress-perf
+endif
+
 ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
 DIRS-$(CONFIG_RTE_APP_CRYPTO_PERF) += test-crypto-perf
 endif
diff --git a/app/meson.build b/app/meson.build
index a9a026b..47a2a86 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -4,6 +4,7 @@
 apps = ['pdump',
'proc-info',
'test-bbdev',
+   'test-compress-perf',
'test-crypto-perf',
'test-eventdev',
'test-pmd']
diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
new file mode 100644
index 000..8aa7a22
--- /dev/null
+++ b/app/test-compress-perf/Makefile
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Intel Corporation
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+APP = dpdk-test-compress-perf
+
+CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -O3
+
+# all source are stored in SRCS-y
+SRCS-y := main.c
+SRCS-y += comp_perf_options_parse.c
+
+include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
new file mode 100644
index 000..7516ea0
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#define MAX_DRIVER_NAME64
+#define MAX_INPUT_FILE_NAME64
+#define MAX_LIST   32
+
+enum comp_operation {
+   COMPRESS_ONLY,
+   DECOMPRESS_ONLY,
+   COMPRESS_DECOMPRESS
+};
+
+struct range_list {
+   uint8_t min;
+   uint8_t max;
+   uint8_t inc;
+   uint8_t count;
+   uint8_t list[MAX_LIST];
+};
+
+struct comp_test_data {
+   char driver_name[64];
+   char input_file[64];
+   struct rte_mbuf **comp_bufs;
+   struct rte_mbuf **decomp_bufs;
+   uint32_t total_bufs;
+   uint8_t *input_data;
+   size_t input_data_sz;
+   uint8_t *compressed_data;
+   uint8_t *decompressed_data;
+   struct rte_mempool *comp_buf_pool;
+   struct rte_mempool *decomp_buf_pool;
+   struct rte_mempool *op_pool;
+   int8_t cdev_id;
+   uint16_t seg_sz;
+   uint16_t burst_sz;
+   uint32_t pool_sz;
+   uint32_t num_iter;
+   uint16_t max_sgl_segs;
+   enum rte_comp_huffman huffman_enc;
+   enum comp_operation test_op;
+   int window_sz;
+   struct range_list level;
+   /* Store TSC duration for all levels (including level 0) */
+   uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+};
+
+int
+comp_perf_options_parse(struct comp_test_data *test_data, int argc,
+   char **argv);
+
+void
+comp_perf_options_default(struct comp_test_data *test_data);
+
+int
+comp_perf_options_check(struct comp_test_data *test_data);
diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
new file mode 100644
index 000..5b9ea26
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -0,0 +1,596 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include "comp_perf_options.h"
+
+#define CPERF_DRIVER_NAME  ("driver-name")
+#define CPERF_TEST_FILE("input-file")
+#define CPERF_SEG_SIZE ("seg-sz")
+#define CPERF_BURST_SIZE   ("burst-sz")
+#define CPERF_EXTENDED_SIZE("extended-input-sz")
+#define CPERF_POOL_SIZE("pool-sz")
+

[dpdk-dev] [PATCH v4 2/5] app/compress-perf: add performance measurement

2018-11-23 Thread Tomasz Jozwiak
Added performance measurement part into compression perf. test.

Signed-off-by: De Lara Guarch, Pablo 
Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c |   8 +-
 app/test-compress-perf/main.c| 886 ++-
 2 files changed, 883 insertions(+), 11 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index 5b9ea26..fd5d31c 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -431,10 +431,6 @@ parse_huffman_enc(struct comp_test_data *test_data, const 
char *arg)
{
"fixed",
RTE_COMP_HUFFMAN_FIXED
-   },
-   {
-   "dynamic",
-   RTE_COMP_HUFFMAN_DYNAMIC
}
};
 
@@ -569,9 +565,9 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->seg_sz = 2048;
test_data->burst_sz = 32;
test_data->pool_sz = 8192;
-   test_data->max_sgl_segs = UINT16_MAX;
+   test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
-   test_data->huffman_enc = RTE_COMP_HUFFMAN_DYNAMIC;
+   test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
test_data->test_op = COMPRESS_DECOMPRESS;
test_data->window_sz = -1;
test_data->level.min = 1;
diff --git a/app/test-compress-perf/main.c b/app/test-compress-perf/main.c
index f52b98d..5950c96 100644
--- a/app/test-compress-perf/main.c
+++ b/app/test-compress-perf/main.c
@@ -5,14 +5,728 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include "comp_perf_options.h"
 
+#define NUM_MAX_XFORMS 16
+#define NUM_MAX_INFLIGHT_OPS 512
+#define EXPANSE_RATIO 1.05
+#define MIN_COMPRESSED_BUF_SIZE 8
+
+#define DIV_CEIL(a, b)  ((a) / (b) + ((a) % (b) != 0))
+
+/* Cleanup state machine */
+static enum cleanup_st {
+   ST_CLEAR = 0,
+   ST_TEST_DATA,
+   ST_COMPDEV,
+   ST_INPUT_DATA,
+   ST_MEMORY_ALLOC,
+   ST_PREPARE_BUF,
+   ST_DURING_TEST
+} cleanup = ST_CLEAR;
+
+static int
+param_range_check(uint16_t size, const struct rte_param_log2_range *range)
+{
+   unsigned int next_size;
+
+   /* Check lower/upper bounds */
+   if (size < range->min)
+   return -1;
+
+   if (size > range->max)
+   return -1;
+
+   /* If range is actually only one value, size is correct */
+   if (range->increment == 0)
+   return 0;
+
+   /* Check if value is one of the supported sizes */
+   for (next_size = range->min; next_size <= range->max;
+   next_size += range->increment)
+   if (size == next_size)
+   return 0;
+
+   return -1;
+}
+
+static int
+comp_perf_check_capabilities(struct comp_test_data *test_data)
+{
+   const struct rte_compressdev_capabilities *cap;
+
+   cap = rte_compressdev_capability_get(test_data->cdev_id,
+RTE_COMP_ALGO_DEFLATE);
+
+   if (cap == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support DEFLATE\n");
+   return -1;
+   }
+
+   uint64_t comp_flags = cap->comp_feature_flags;
+
+   /* Huffman enconding */
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_FIXED &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Fixed Huffman\n");
+   return -1;
+   }
+
+   if (test_data->huffman_enc == RTE_COMP_HUFFMAN_DYNAMIC &&
+   (comp_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not supported Dynamic Huffman\n");
+   return -1;
+   }
+
+   /* Window size */
+   if (test_data->window_sz != -1) {
+   if (param_range_check(test_data->window_sz, &cap->window_size)
+   < 0) {
+   RTE_LOG(ERR, USER1,
+   "Compress device does not support "
+   "this window size\n");
+   return -1;
+   }
+   } else
+   /* Set window size to PMD maximum if none was specified */
+   test_data->window_sz = cap->window_size.max;
+
+   /* Check if chained mbufs is supported */
+   if (test_data->max_sgl_segs > 1  &&
+   (comp_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0) {
+   RTE_LOG(INFO, USER1, "Compress device d

[dpdk-dev] [PATCH v4 5/5] app/compress-perf: code refactoring

2018-11-23 Thread Tomasz Jozwiak
Code refactoring to separate validation from benchmarking part.

Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/Makefile   |   2 +
 app/test-compress-perf/comp_perf_options.h|  12 +
 app/test-compress-perf/comp_perf_test_benchmark.c | 292 +
 app/test-compress-perf/comp_perf_test_benchmark.h |  13 +
 app/test-compress-perf/comp_perf_test_verify.c| 339 
 app/test-compress-perf/comp_perf_test_verify.h|  13 +
 app/test-compress-perf/main.c | 366 +-
 app/test-compress-perf/meson.build|   4 +-
 8 files changed, 688 insertions(+), 353 deletions(-)
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.c
 create mode 100644 app/test-compress-perf/comp_perf_test_benchmark.h
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.c
 create mode 100644 app/test-compress-perf/comp_perf_test_verify.h

diff --git a/app/test-compress-perf/Makefile b/app/test-compress-perf/Makefile
index 8aa7a22..d20e17e 100644
--- a/app/test-compress-perf/Makefile
+++ b/app/test-compress-perf/Makefile
@@ -12,5 +12,7 @@ CFLAGS += -O3
 # all source are stored in SRCS-y
 SRCS-y := main.c
 SRCS-y += comp_perf_options_parse.c
+SRCS-y += comp_perf_test_verify.c
+SRCS-y += comp_perf_test_benchmark.c
 
 include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/test-compress-perf/comp_perf_options.h 
b/app/test-compress-perf/comp_perf_options.h
index 7516ea0..ca96a3c 100644
--- a/app/test-compress-perf/comp_perf_options.h
+++ b/app/test-compress-perf/comp_perf_options.h
@@ -2,6 +2,9 @@
  * Copyright(c) 2018 Intel Corporation
  */
 
+#ifndef _COMP_PERF_OPS_
+#define _COMP_PERF_OPS_
+
 #define MAX_DRIVER_NAME64
 #define MAX_INPUT_FILE_NAME64
 #define MAX_LIST   32
@@ -46,6 +49,13 @@ struct comp_test_data {
/* Store TSC duration for all levels (including level 0) */
uint64_t comp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
uint64_t decomp_tsc_duration[RTE_COMP_LEVEL_MAX + 1];
+   size_t comp_data_sz;
+   size_t decomp_data_sz;
+   double ratio;
+   double comp_gbps;
+   double decomp_gbps;
+   double comp_tsc_byte;
+   double decomp_tsc_byte;
 };
 
 int
@@ -57,3 +67,5 @@ comp_perf_options_default(struct comp_test_data *test_data);
 
 int
 comp_perf_options_check(struct comp_test_data *test_data);
+
+#endif
diff --git a/app/test-compress-perf/comp_perf_test_benchmark.c 
b/app/test-compress-perf/comp_perf_test_benchmark.c
new file mode 100644
index 000..31ea1d6
--- /dev/null
+++ b/app/test-compress-perf/comp_perf_test_benchmark.c
@@ -0,0 +1,292 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "comp_perf_test_benchmark.h"
+
+static int
+main_loop(struct comp_test_data *test_data, uint8_t level,
+   enum rte_comp_xform_type type)
+{
+   uint8_t dev_id = test_data->cdev_id;
+   uint32_t i, iter, num_iter;
+   struct rte_comp_op **ops, **deq_ops;
+   void *priv_xform = NULL;
+   struct rte_comp_xform xform;
+   struct rte_mbuf **input_bufs, **output_bufs;
+   int res = 0;
+   int allocated = 0;
+
+   if (test_data == NULL || !test_data->burst_sz) {
+   RTE_LOG(ERR, USER1,
+   "Unknown burst size\n");
+   return -1;
+   }
+
+   ops = rte_zmalloc_socket(NULL,
+   2 * test_data->total_bufs * sizeof(struct rte_comp_op *),
+   0, rte_socket_id());
+
+   if (ops == NULL) {
+   RTE_LOG(ERR, USER1,
+   "Can't allocate memory for ops strucures\n");
+   return -1;
+   }
+
+   deq_ops = &ops[test_data->total_bufs];
+
+   if (type == RTE_COMP_COMPRESS) {
+   xform = (struct rte_comp_xform) {
+   .type = RTE_COMP_COMPRESS,
+   .compress = {
+   .algo = RTE_COMP_ALGO_DEFLATE,
+   .deflate.huffman = test_data->huffman_enc,
+   .level = level,
+   .window_size = test_data->window_sz,
+   .chksum = RTE_COMP_CHECKSUM_NONE,
+   .hash_algo = RTE_COMP_HASH_ALGO_NONE
+   }
+   };
+   input_bufs = test_data->decomp_bufs;
+   output_bufs = test_data->comp_bufs;
+   } else {
+   xform = (struct rte_comp_xform) {
+   .type = RTE_COMP_DECOMPRESS,
+   .decompress = {
+   .algo = RTE_COMP_ALGO_DEFLATE,
+   .chksum = RTE_COMP_CHECKSUM_NONE,
+   .window_size = test_data->window_sz,
+ 

[dpdk-dev] [PATCH v4 4/5] app/compress-perf: add dynamic compression test

2018-11-23 Thread Tomasz Jozwiak
Added dynamic compression feature into compression perf. test.

Signed-off-by: Tomasz Jozwiak 
---
 app/test-compress-perf/comp_perf_options_parse.c | 6 +-
 doc/guides/rel_notes/release_18_11.rst   | 3 +--
 doc/guides/tools/comp_perf.rst   | 4 ++--
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/app/test-compress-perf/comp_perf_options_parse.c 
b/app/test-compress-perf/comp_perf_options_parse.c
index fd5d31c..dbe8135 100644
--- a/app/test-compress-perf/comp_perf_options_parse.c
+++ b/app/test-compress-perf/comp_perf_options_parse.c
@@ -431,6 +431,10 @@ parse_huffman_enc(struct comp_test_data *test_data, const 
char *arg)
{
"fixed",
RTE_COMP_HUFFMAN_FIXED
+   },
+   {
+   "dynamic",
+   RTE_COMP_HUFFMAN_DYNAMIC
}
};
 
@@ -567,7 +571,7 @@ comp_perf_options_default(struct comp_test_data *test_data)
test_data->pool_sz = 8192;
test_data->max_sgl_segs = 16;
test_data->num_iter = 1;
-   test_data->huffman_enc = RTE_COMP_HUFFMAN_FIXED;
+   test_data->huffman_enc = RTE_COMP_HUFFMAN_DYNAMIC;
test_data->test_op = COMPRESS_DECOMPRESS;
test_data->window_sz = -1;
test_data->level.min = 1;
diff --git a/doc/guides/rel_notes/release_18_11.rst 
b/doc/guides/rel_notes/release_18_11.rst
index d44cf30..848cc06 100644
--- a/doc/guides/rel_notes/release_18_11.rst
+++ b/doc/guides/rel_notes/release_18_11.rst
@@ -331,8 +331,7 @@ New Features
 * **Added a compression performance test tool.**
 
Added a new performance test tool to test the compressdev PMD. The tool 
tests
-   compression ratio and compression throughput. Dynamic compression test is 
not
-   supported yet.
+   compression ratio and compression throughput.
 
 API Changes
 ---
diff --git a/doc/guides/tools/comp_perf.rst b/doc/guides/tools/comp_perf.rst
index 1428348..abb727d 100644
--- a/doc/guides/tools/comp_perf.rst
+++ b/doc/guides/tools/comp_perf.rst
@@ -19,7 +19,7 @@ to check the throughput rate
 Limitations
 ~~~
 
-* Only supports the fixed compression and stateless operation.
+* Only supports the stateless operation.
 
 Command line options
 
@@ -42,7 +42,7 @@ Command line options
 
  ``--operation [comp/decomp/comp_and_decomp]``: perform test on compression, 
decompression or both operations
 
- ``--huffman-enc [fixed/default]``: Huffman encoding (default: fixed)
+ ``--huffman-enc [fixed/dynamic/default]``: Huffman encoding (default: dynamic)
 
  ``--compress-level N``: compression level, which could be a single value, 
list or range (default: range between 1 and 9)
 
-- 
2.7.4



[dpdk-dev] [PATCH 1/2] compress/qat: fix buffer lengths in offset case

2018-08-02 Thread Tomasz Jozwiak
Fixed lengths for src and dest buffers

Fixes: 32842f2a6d7d ("compress/qat: create FW request and process response")

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 drivers/compress/qat/qat_comp.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c
index cbf7614..522edfc 100644
--- a/drivers/compress/qat/qat_comp.c
+++ b/drivers/compress/qat/qat_comp.c
@@ -44,7 +44,8 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg,
 
/* common for sgl and flat buffers */
comp_req->comp_pars.comp_len = op->src.length;
-   comp_req->comp_pars.out_buffer_sz = rte_pktmbuf_pkt_len(op->m_dst);
+   comp_req->comp_pars.out_buffer_sz = rte_pktmbuf_pkt_len(op->m_dst) -
+   op->dst.offset;
 
if (op->m_src->next != NULL || op->m_dst->next != NULL) {
/* sgl */
@@ -85,8 +86,9 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg,
/* flat aka linear buffer */
ICP_QAT_FW_COMN_PTR_TYPE_SET(comp_req->comn_hdr.comn_req_flags,
QAT_COMN_PTR_TYPE_FLAT);
-   comp_req->comn_mid.src_length = rte_pktmbuf_data_len(op->m_src);
-   comp_req->comn_mid.dst_length = rte_pktmbuf_data_len(op->m_dst);
+   comp_req->comn_mid.src_length = op->src.length;
+   comp_req->comn_mid.dst_length =
+   comp_req->comp_pars.out_buffer_sz;
 
comp_req->comn_mid.src_data_addr =
rte_pktmbuf_mtophys_offset(op->m_src, op->src.offset);
-- 
2.7.4



[dpdk-dev] [PATCH 2/2] common/qat: fix offset greater than first sgl segment

2018-08-02 Thread Tomasz Jozwiak
This patch fixes sgl filling to handle offset
greater than first sgl segment

Fixes: 1947bd18580b ("compress/qat: support scatter-gather buffers")

Signed-off-by: Tomasz Jozwiak 
Acked-by: Fiona Trahe 
---
 drivers/common/qat/qat_common.c | 77 +
 drivers/common/qat/qat_common.h |  2 +-
 drivers/compress/qat/qat_comp.c | 11 +++---
 drivers/crypto/qat/qat_sym.c| 18 +-
 4 files changed, 48 insertions(+), 60 deletions(-)

diff --git a/drivers/common/qat/qat_common.c b/drivers/common/qat/qat_common.c
index bc04c07..4753866 100644
--- a/drivers/common/qat/qat_common.c
+++ b/drivers/common/qat/qat_common.c
@@ -7,79 +7,66 @@
 #include "qat_logs.h"
 
 int
-qat_sgl_fill_array(struct rte_mbuf *buf, uint64_t buf_start,
+qat_sgl_fill_array(struct rte_mbuf *buf, int64_t offset,
void *list_in, uint32_t data_len,
const uint16_t max_segs)
 {
-   int nr = 1;
+   int res = -EINVAL;
+   uint32_t buf_len, nr;
struct qat_sgl *list = (struct qat_sgl *)list_in;
-   /* buf_start allows the first buffer to start at an address before or
-* after the mbuf data start. It's used to either optimally align the
-* dma to 64 or to start dma from an offset.
-*/
-   uint32_t buf_len;
-   uint32_t first_buf_len = rte_pktmbuf_data_len(buf) +
-   (rte_pktmbuf_mtophys(buf) - buf_start);
 #if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG
uint8_t *virt_addr[max_segs];
-   virt_addr[0] = rte_pktmbuf_mtod(buf, uint8_t*) +
-   (rte_pktmbuf_mtophys(buf) - buf_start);
 #endif
 
-   list->buffers[0].addr = buf_start;
-   list->buffers[0].resrvd = 0;
-   list->buffers[0].len = first_buf_len;
-
-   if (data_len <= first_buf_len) {
-   list->num_bufs = nr;
-   list->buffers[0].len = data_len;
-   goto sgl_end;
-   }
-
-   buf = buf->next;
-   buf_len = first_buf_len;
-   while (buf) {
-   if (unlikely(nr == max_segs)) {
-   QAT_DP_LOG(ERR, "Exceeded max segments in QAT SGL (%u)",
-   max_segs);
-   return -EINVAL;
+   for (nr = buf_len = 0; buf &&  nr < max_segs; buf = buf->next)  {
+   if (offset >= rte_pktmbuf_data_len(buf)) {
+   offset -= rte_pktmbuf_data_len(buf);
+   continue;
}
 
-   list->buffers[nr].len = rte_pktmbuf_data_len(buf);
+   list->buffers[nr].len = rte_pktmbuf_data_len(buf) - offset;
list->buffers[nr].resrvd = 0;
-   list->buffers[nr].addr = rte_pktmbuf_mtophys(buf);
+   list->buffers[nr].addr = rte_pktmbuf_iova_offset(buf, offset);
+
 #if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG
-   virt_addr[nr] = rte_pktmbuf_mtod(buf, uint8_t*);
+   virt_addr[nr] = rte_pktmbuf_mtod_offset(buf, uint8_t*, offset);
 #endif
+   offset = 0;
buf_len += list->buffers[nr].len;
-   buf = buf->next;
 
if (buf_len >= data_len) {
-   list->buffers[nr].len -=
-   buf_len - data_len;
-   buf = NULL;
+   list->buffers[nr].len -= buf_len - data_len;
+   res = 0;
+   break;
}
++nr;
}
-   list->num_bufs = nr;
 
-sgl_end:
+   if (unlikely(res != 0)) {
+   if (nr == max_segs) {
+   QAT_DP_LOG(ERR, "Exceeded max segments in QAT SGL (%u)",
+  max_segs);
+   } else {
+   QAT_DP_LOG(ERR, "Mbuf chain is too short");
+   }
+   } else {
+
+   list->num_bufs = ++nr;
 #if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG
-   {
-   uint16_t i;
QAT_DP_LOG(INFO, "SGL with %d buffers:", list->num_bufs);
-   for (i = 0; i < list->num_bufs; i++) {
+   for (nr = 0; nr < list->num_bufs; nr++) {
QAT_DP_LOG(INFO,
"QAT SGL buf %d, len = %d, iova = 0x%012"PRIx64,
-   i, list->buffers[i].len,
-   list->buffers[i].addr);
+nr, list->buffers[nr].len,
+list->buffers[nr].addr);
QAT_DP_HEXDUMP_LOG(DEBUG, "qat SGL",
-   virt_addr[i], list->buffers[i].len);
+  virt_addr[nr],
+  list->buffers[nr].len);
}
-   

  1   2   >