On 27-Jun-19 11:40 AM, Bruce Richardson wrote:
Add local APIs to trigger data copies, and retrieve handle values once
those copies are completed. Included are unit tests to validate the data
is copies correctly.

Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>

---

V3: updated to use descriptor format in rte_ioat_spec.h
V2: test cases moved to self-test routine
---
  doc/guides/rawdevs/ioat_rawdev.rst  | 100 ++++++++++++++++
  drivers/raw/ioat/Makefile           |   1 +
  drivers/raw/ioat/ioat_rawdev_test.c | 161 +++++++++++++++++++++++++-
  drivers/raw/ioat/meson.build        |   2 +-
  drivers/raw/ioat/rte_ioat_rawdev.h  | 169 +++++++++++++++++++++++++++-
  5 files changed, 428 insertions(+), 5 deletions(-)

diff --git a/doc/guides/rawdevs/ioat_rawdev.rst 
b/doc/guides/rawdevs/ioat_rawdev.rst
index b908f31e0..22bb8a22c 100644
--- a/doc/guides/rawdevs/ioat_rawdev.rst
+++ b/doc/guides/rawdevs/ioat_rawdev.rst
@@ -150,6 +150,106 @@ The following code shows how the device is configured in
  Once configured, the device can then be made ready for use by calling the
  ``rte_rawdev_start()`` API.
+Performing Data Copies
+~~~~~~~~~~~~~~~~~~~~~~~
+
+To perform data copies using IOAT rawdev devices, the functions
+``rte_ioat_enqueue_copy()`` and ``rte_ioat_do_copies()`` should be used.
+Once copies have been completed, the completion will be reported back when
+the application calls ``rte_ioat_completed_copies()``.
+
+The ``rte_ioat_enqueue_copy()`` function enqueues a single copy to the
+device ring for copying at a later point. The parameters to that function
+include the physical addresses of both the source and destination buffers,

Physical or IOVA?

+as well as two "handles" to be returned to the user when the copy is
+completed. These handles can be arbitrary values, but two are provided so
+that the library can track handles for both source and destination on
+behalf of the user, e.g. virtual addresses for the buffers, or mbuf
+pointers if packet data is being copied.
+
+While the ``rte_ioat_enqueue_copy()`` function enqueues a copy operation on
+the device ring, the copy will not actually be performed until after the

<snip>

+       rte_mempool_free(pool);
        free(snames);
        free(stats);
        free(ids);
        return 0;
+
+err:
+       rte_mempool_free(pool);
+       free(snames);
+       free(stats);
+       free(ids);
+       return -1;

The goto is added a commit too late :D

Otherwise, LGTM

Acked-by: Anatoly Burakov <anatoly.bura...@intel.com>

--
Thanks,
Anatoly

Reply via email to