get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/135779/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 135779,
    "url": "https://patches.dpdk.org/api/patches/135779/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20240107153454.3909-2-syalavarthi@marvell.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20240107153454.3909-2-syalavarthi@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240107153454.3909-2-syalavarthi@marvell.com",
    "date": "2024-01-07T15:34:40",
    "name": "[01/11] eventdev: introduce ML event adapter library",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "1032073a37934a4c770c94441cfc20b48f7c60d2",
    "submitter": {
        "id": 2480,
        "url": "https://patches.dpdk.org/api/people/2480/?format=api",
        "name": "Srikanth Yalavarthi",
        "email": "syalavarthi@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "https://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20240107153454.3909-2-syalavarthi@marvell.com/mbox/",
    "series": [
        {
            "id": 30752,
            "url": "https://patches.dpdk.org/api/series/30752/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=30752",
            "date": "2024-01-07T15:34:39",
            "name": "Introduce Event ML Adapter",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/30752/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/135779/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/135779/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 74B3843857;\n\tSun,  7 Jan 2024 16:35:19 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6130B4064C;\n\tSun,  7 Jan 2024 16:35:19 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 732C4402F2\n for <dev@dpdk.org>; Sun,  7 Jan 2024 16:35:17 +0100 (CET)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id\n 407Et9Wu023658; Sun, 7 Jan 2024 07:35:16 -0800",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3vf78n2a1b-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Sun, 07 Jan 2024 07:35:15 -0800 (PST)",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48;\n Sun, 7 Jan 2024 07:35:13 -0800",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend\n Transport; Sun, 7 Jan 2024 07:35:13 -0800",
            "from ml-host-33.caveonetworks.com (unknown [10.110.143.233])\n by maili.marvell.com (Postfix) with ESMTP id 1FC9F3F7093;\n Sun,  7 Jan 2024 07:35:13 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=\n from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-type:content-transfer-encoding; s=\n pfpt0220; bh=ng1UnNQgmO94sE1HHv19LyYRfDFRUpA/HpZOGK0TsPw=; b=AA6\n sVWyXBHB+w//tf86+r6PtXJbhpL3D1yC0LEUIE1J8riRdgiOnXF7qr52FbzJsQrY\n 5XatDSm/eQhp5LCKRAmdN9E8O3JsNcO+f/vo8SEVQ7mwKZ1R0hr0mF9L0uKLUSKj\n NsSgZS3VEBbN3RvqXcO/j0JfFUuiCwfSzIKubjVem7yYNgt4zNOp8tY/mrRwwEmD\n kXb9DowUwvVZbRRIJnLbtBWj5uzG5kfvuluaDJbf6Cy5jGqCAko/HS+2i5ptyCEQ\n 7CrFDpbSt9hTquyAcSKrFclYTGallJUSJt1MoRSFNClO5hIbg+oQLRadPzAAUQrB\n g8WmfeTg+fmrGJf4khQ==",
        "From": "Srikanth Yalavarthi <syalavarthi@marvell.com>",
        "To": "Thomas Monjalon <thomas@monjalon.net>, Bruce Richardson\n <bruce.richardson@intel.com>,\n Srikanth Yalavarthi <syalavarthi@marvell.com>,\n Jerin Jacob <jerinj@marvell.com>",
        "CC": "<dev@dpdk.org>, <aprabhu@marvell.com>, <sshankarnara@marvell.com>,\n <ptakkar@marvell.com>",
        "Subject": "[PATCH 01/11] eventdev: introduce ML event adapter library",
        "Date": "Sun, 7 Jan 2024 07:34:40 -0800",
        "Message-ID": "<20240107153454.3909-2-syalavarthi@marvell.com>",
        "X-Mailer": "git-send-email 2.42.0",
        "In-Reply-To": "<20240107153454.3909-1-syalavarthi@marvell.com>",
        "References": "<20240107153454.3909-1-syalavarthi@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-Proofpoint-ORIG-GUID": "X0Ihyg0Vrq9pOGATS5O7NoFPDA3JDxpV",
        "X-Proofpoint-GUID": "X0Ihyg0Vrq9pOGATS5O7NoFPDA3JDxpV",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26\n definitions=2023-12-09_02,2023-12-07_01,2023-05-22_02",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Introduce event ML adapter APIs. This patch provides\ninformation on adapter modes and usage. Application\ncan use this event adapter interface to transfer\npackets between ML device and event device.\n\nSigned-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>\n---\n MAINTAINERS                                   |    6 +\n config/rte_config.h                           |    1 +\n doc/api/doxy-api-index.md                     |    1 +\n doc/guides/prog_guide/event_ml_adapter.rst    |  268 ++++\n doc/guides/prog_guide/eventdev.rst            |   10 +-\n .../img/event_ml_adapter_op_forward.svg       | 1086 +++++++++++++++++\n .../img/event_ml_adapter_op_new.svg           | 1079 ++++++++++++++++\n doc/guides/prog_guide/index.rst               |    1 +\n lib/eventdev/meson.build                      |    4 +-\n lib/eventdev/rte_event_ml_adapter.c           |    6 +\n lib/eventdev/rte_event_ml_adapter.h           |  594 +++++++++\n lib/eventdev/rte_eventdev.h                   |   45 +\n lib/meson.build                               |    2 +-\n lib/mldev/rte_mldev.h                         |    6 +\n 14 files changed, 3102 insertions(+), 7 deletions(-)\n create mode 100644 doc/guides/prog_guide/event_ml_adapter.rst\n create mode 100644 doc/guides/prog_guide/img/event_ml_adapter_op_forward.svg\n create mode 100644 doc/guides/prog_guide/img/event_ml_adapter_op_new.svg\n create mode 100644 lib/eventdev/rte_event_ml_adapter.c\n create mode 100644 lib/eventdev/rte_event_ml_adapter.h",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex 0d1c8126e3e..a1125e93621 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -554,6 +554,12 @@ F: drivers/raw/skeleton/\n F: app/test/test_rawdev.c\n F: doc/guides/prog_guide/rawdev.rst\n \n+Eventdev ML Adapter API\n+M: Srikanth Yalavarthi <syalavarthi@marvell.com>\n+T: git://dpdk.org/next/dpdk-next-eventdev\n+F: lib/eventdev/*ml_adapter*\n+F: doc/guides/prog_guide/event_ml_adapter.rst\n+\n \n Memory Pool Drivers\n -------------------\ndiff --git a/config/rte_config.h b/config/rte_config.h\nindex da265d7dd24..29c5aa558e6 100644\n--- a/config/rte_config.h\n+++ b/config/rte_config.h\n@@ -80,6 +80,7 @@\n #define RTE_EVENT_CRYPTO_ADAPTER_MAX_INSTANCE 32\n #define RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE 32\n #define RTE_EVENT_DMA_ADAPTER_MAX_INSTANCE 32\n+#define RTE_EVENT_ML_ADAPTER_MAX_INSTANCE 32\n \n /* rawdev defines */\n #define RTE_RAWDEV_MAX_DEVS 64\ndiff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md\nindex a6a768bd7c6..d8c3d887ade 100644\n--- a/doc/api/doxy-api-index.md\n+++ b/doc/api/doxy-api-index.md\n@@ -30,6 +30,7 @@ The public API headers are grouped by topics:\n   [event_timer_adapter](@ref rte_event_timer_adapter.h),\n   [event_crypto_adapter](@ref rte_event_crypto_adapter.h),\n   [event_dma_adapter](@ref rte_event_dma_adapter.h),\n+  [event_ml_adapter](@ref rte_event_ml_adapter.h),\n   [rawdev](@ref rte_rawdev.h),\n   [metrics](@ref rte_metrics.h),\n   [bitrate](@ref rte_bitrate.h),\ndiff --git a/doc/guides/prog_guide/event_ml_adapter.rst b/doc/guides/prog_guide/event_ml_adapter.rst\nnew file mode 100644\nindex 00000000000..71f6c4b5974\n--- /dev/null\n+++ b/doc/guides/prog_guide/event_ml_adapter.rst\n@@ -0,0 +1,268 @@\n+..  SPDX-License-Identifier: BSD-3-Clause\n+    Copyright (c) 2024 Marvell.\n+\n+Event ML Adapter Library\n+========================\n+\n+DPDK :doc:`Eventdev library <eventdev>` provides event driven programming model with features\n+to schedule events. :doc:`ML Device library <mldev>` provides an interface to ML poll mode\n+drivers that support Machine Learning inference operations. Event ML Adapter is intended to\n+bridge between the event device and the ML device.\n+\n+Packet flow from ML device to the event device can be accomplished using software and hardware\n+based transfer mechanisms. The adapter queries an eventdev PMD to determine which mechanism to\n+be used. The adapter uses an EAL service core function for software based packet transfer and\n+uses the eventdev PMD functions to configure hardware based packet transfer between ML device\n+and the event device. ML adapter uses a new event type called ``RTE_EVENT_TYPE_MLDEV`` to\n+indicate the source of event.\n+\n+Application can choose to submit an ML operation directly to an ML device or send it to an ML\n+adapter via eventdev based on RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. The\n+first mode is known as the event new (RTE_EVENT_ML_ADAPTER_OP_NEW) mode and the second as the\n+event forward (RTE_EVENT_ML_ADAPTER_OP_FORWARD) mode. Choice of mode can be specified while\n+creating the adapter. In the former mode, it is the application's responsibility to enable\n+ingress packet ordering. In the latter mode, it is the adapter's responsibility to enable\n+ingress packet ordering.\n+\n+\n+Adapter Modes\n+-------------\n+\n+RTE_EVENT_ML_ADAPTER_OP_NEW mode\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+In the RTE_EVENT_ML_ADAPTER_OP_NEW mode, application submits ML operations directly to an ML\n+device. The adapter then dequeues ML completions from the ML device and enqueues them as events\n+to the event device. This mode does not ensure ingress ordering as the application directly\n+enqueues to the mldev without going through ML/atomic stage. In this mode, events dequeued\n+from the adapter are treated as new events. The application has to specify event information\n+(response information) which is needed to enqueue an event after the ML operation is completed.\n+\n+.. _figure_event_ml_adapter_op_new:\n+\n+.. figure:: img/event_ml_adapter_op_new.*\n+\n+   Working model of ``RTE_EVENT_ML_ADAPTER_OP_NEW`` mode\n+\n+\n+RTE_EVENT_ML_ADAPTER_OP_FORWARD mode\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+In the ``RTE_EVENT_ML_ADAPTER_OP_FORWARD`` mode, if the event PMD and ML PMD supports internal\n+event port (``RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD``), the application should use\n+``rte_event_ml_adapter_enqueue()`` API to enqueue ML operations as events to ML adapter. If\n+not, application retrieves ML adapter's event port using ``rte_event_ml_adapter_event_port_get()``\n+API, links its event queue to this port and starts enqueuing ML operations as events to eventdev\n+using ``rte_event_enqueue_burst()``. The adapter then dequeues the events and submits the ML\n+operations to the mldev. After the ML operation is complete, the adapter enqueues events to the\n+event device.\n+\n+Applications can use this mode when ingress packet ordering is needed. In this mode, events\n+dequeued from the adapter will be treated as forwarded events. Application has to specify\n+the mldev ID and queue pair ID (request information) needed to enqueue a ML operation in\n+addition to the event information (response information) needed to enqueue the event after\n+the ML operation has completed.\n+\n+.. _figure_event_ml_adapter_op_forward:\n+\n+.. figure:: img/event_ml_adapter_op_forward.*\n+\n+   Working model of ``RTE_EVENT_ML_ADAPTER_OP_FORWARD`` mode\n+\n+\n+API Overview\n+------------\n+\n+This section has a brief introduction to the event ML adapter APIs. The application is expected\n+to create an adapter which is associated with a single eventdev, then add mldev and queue pair\n+to the adapter instance.\n+\n+\n+Create an adapter instance\n+~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+An adapter instance is created using ``rte_event_ml_adapter_create()``. This function is called\n+with event device to be associated with the adapter and port configuration for the adapter to\n+setup an event port (if the adapter needs to use a service function).\n+\n+Adapter can be started in ``RTE_EVENT_ML_ADAPTER_OP_NEW`` or ``RTE_EVENT_ML_ADAPTER_OP_FORWARD``\n+mode.\n+\n+.. code-block:: c\n+\n+        enum rte_event_ml_adapter_mode mode;\n+        struct rte_event_dev_info dev_info;\n+        struct rte_event_port_conf conf;\n+        uint8_t evdev_id;\n+        uint8_t mla_id;\n+        int ret;\n+\n+        ret = rte_event_dev_info_get(mla_id, &dev_info);\n+\n+        conf.new_event_threshold = dev_info.max_num_events;\n+        conf.dequeue_depth = dev_info.max_event_port_dequeue_depth;\n+        conf.enqueue_depth = dev_info.max_event_port_enqueue_depth;\n+        mode = RTE_EVENT_ML_ADAPTER_OP_FORWARD;\n+        ret = rte_event_ml_adapter_create(mla_id, evdev_id, &conf, mode);\n+\n+\n+``rte_event_ml_adapter_create_ext()`` function can be used by the application to have a finer\n+control on eventdev port allocation and setup. The ``rte_event_ml_adapter_create_ext()``\n+function is passed as a callback function. The callback function is invoked if the adapter\n+creates a service function and uses an event port for it. The callback is expected to fill the\n+``struct rte_event_ml_adapter_conf`` structure passed to it.\n+\n+In the ``RTE_EVENT_ML_ADAPTER_OP_FORWARD`` mode, if the event PMD and ML PMD supports internal\n+event port (``RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD``), events with ML operations should\n+be enqueued to the ML adapter using ``rte_event_ml_adapter_enqueue()`` API. If not, the event port\n+created by the adapter can be retrieved using ``rte_event_ml_adapter_event_port_get()`` API. An\n+application can use this event port to link with an event queue, on which it enqueues events\n+towards the ML adapter using ``rte_event_enqueue_burst()``.\n+\n+.. code-block:: c\n+\n+        uint8_t mla_id, evdev_id, cdev_id, ml_ev_port_id, app_qid;\n+        struct rte_event ev;\n+        uint32_t cap;\n+        int ret;\n+\n+        // Fill in event info and update event_ptr with rte_ml_op\n+        memset(&ev, 0, sizeof(ev));\n+        .\n+        .\n+        ev.event_ptr = op;\n+\n+        ret = rte_event_ml_adapter_caps_get(evdev_id, cdev_id, &cap);\n+        if (cap & RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) {\n+                ret = rte_event_ml_adapter_enqueue(evdev_id, app_ev_port_id, ev, nb_events);\n+        } else {\n+                ret = rte_event_ml_adapter_event_port_get(mla_id, &ml_ev_port_id);\n+                ret = rte_event_queue_setup(evdev_id, app_qid, NULL);\n+                ret = rte_event_port_link(evdev_id, ml_ev_port_id, &app_qid, NULL, 1);\n+                ev.queue_id = app_qid;\n+                ret = rte_event_enqueue_burst(evdev_id, app_ev_port_id, ev, nb_events);\n+        }\n+\n+\n+Event device configuration for service based adapter\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+When ``rte_event_ml_adapter_create()`` is used for creating adapter instance,\n+``rte_event_dev_config::nb_event_ports`` is automatically incremented, and event device is\n+reconfigured with additional event port during service initialization. This event device\n+reconfigure logic also increments the ``rte_event_dev_config::nb_single_link_event_port_queues``\n+parameter if the adapter event port config is of type ``RTE_EVENT_PORT_CFG_SINGLE_LINK``.\n+\n+Applications using this mode of adapter creation need not configure the event device with\n+``rte_event_dev_config::nb_event_ports`` and\n+``rte_event_dev_config::nb_single_link_event_port_queues`` parameters required for ML adapter when\n+the adapter is created using the above-mentioned API.\n+\n+\n+Querying adapter capabilities\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The ``rte_event_ml_adapter_caps_get()`` function allows the application to query the adapter\n+capabilities for an eventdev and mldev combination. This API provides whether mldev and eventdev\n+are connected using internal HW port or not.\n+\n+.. code-block:: c\n+\n+        rte_event_ml_adapter_caps_get(dev_id, cdev_id, &cap);\n+\n+\n+Adding queue pair to the adapter instance\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+mldev device id and queue pair are created using mldev APIs. For more information\n+see :doc:`here  <mldev>`.\n+\n+.. code-block:: c\n+\n+        struct rte_mldev_qp_conf qp_conf;\n+        struct rte_mldev_config conf;\n+        uint8_t cdev_id = 0;\n+        uint16_t qp_id = 0;\n+\n+        rte_mldev_configure(cdev_id, &conf);\n+        rte_mldev_queue_pair_setup(cdev_id, qp_id, &qp_conf);\n+\n+These mldev id and queue pair are added to the instance using the\n+``rte_event_ml_adapter_queue_pair_add()`` API. The same is removed using\n+``rte_event_ml_adapter_queue_pair_del()`` API. If hardware supports\n+``RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND`` capability, event information must be passed to\n+the add API.\n+\n+.. code-block:: c\n+\n+        uint32_t cap;\n+        int ret;\n+\n+        ret = rte_event_ml_adapter_caps_get(mla_id, evdev, &cap);\n+        if (cap & RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND) {\n+                struct rte_event_ml_adapter_queue_conf conf;\n+\n+                rte_event_ml_adapter_queue_pair_add(mla_id, cdev_id, qp_id, &conf);\n+        } else\n+                rte_event_ml_adapter_queue_pair_add(mla_id, cdev_id, qp_id, NULL);\n+\n+\n+Configuring service function\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+If the adapter uses a service function, the application is required to assign a service core to\n+the service function as show below.\n+\n+.. code-block:: c\n+\n+        uint32_t service_id;\n+\n+        if (rte_event_ml_adapter_service_id_get(mla_id, &service_id) == 0)\n+                rte_service_map_lcore_set(service_id, CORE_ID);\n+\n+\n+Set event request / response information\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+In the RTE_EVENT_ML_ADAPTER_OP_FORWARD mode, the application specifies the mldev ID and\n+queue pair ID (request information) in addition to the event information (response information)\n+needed to enqueue an event after the ML operation has completed. The request and response\n+information are specified in the ``struct rte_ml_op`` private data or session's private data.\n+\n+In the RTE_EVENT_ML_ADAPTER_OP_NEW mode, the application is required to provide only the response\n+information.\n+\n+\n+Start the adapter instance\n+~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The application calls ``rte_event_ml_adapter_start()`` to start the adapter. This function calls\n+the start callbacks of the eventdev PMDs for hardware based eventdev-mldev connections and\n+``rte_service_run_state_set()`` to enable the service function if one exists.\n+\n+.. code-block:: c\n+\n+        rte_event_ml_adapter_start(mla_id, mode);\n+\n+.. Note::\n+\n+         The eventdev to which the event_ml_adapter is connected should be started before calling\n+         rte_event_ml_adapter_start().\n+\n+\n+Get adapter statistics\n+~~~~~~~~~~~~~~~~~~~~~~\n+\n+The  ``rte_event_ml_adapter_stats_get()`` function reports counters defined in struct\n+``rte_event_ml_adapter_stats``. The received packet and enqueued event counts are a sum of the\n+counts from the eventdev PMD callbacks if the callback is supported, and the counts maintained by\n+the service function, if one exists.\n+\n+Set/Get adapter runtime configuration parameters\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The runtime configuration parameters of adapter can be set/get using\n+``rte_event_ml_adapter_runtime_params_set()`` and\n+``rte_event_ml_adapter_runtime_params_get()`` respectively.\n+The parameters that can be set/get are defined in\n+``struct rte_event_ml_adapter_runtime_params``.\ndiff --git a/doc/guides/prog_guide/eventdev.rst b/doc/guides/prog_guide/eventdev.rst\nindex 9d398d07f7f..bfe23be9888 100644\n--- a/doc/guides/prog_guide/eventdev.rst\n+++ b/doc/guides/prog_guide/eventdev.rst\n@@ -373,8 +373,8 @@ eventdev.\n .. Note::\n \n          EventDev needs to be started before starting the event producers such\n-         as event_eth_rx_adapter, event_timer_adapter, event_crypto_adapter and\n-         event_dma_adapter.\n+         as event_eth_rx_adapter, event_timer_adapter, event_crypto_adapter,\n+         event_dma_adapter and event_ml_adapter.\n \n Ingress of New Events\n ~~~~~~~~~~~~~~~~~~~~~\n@@ -486,9 +486,9 @@ using ``rte_event_dev_stop_flush_callback_register()`` function.\n .. Note::\n \n         The event producers such as ``event_eth_rx_adapter``,\n-        ``event_timer_adapter``, ``event_crypto_adapter`` and\n-        ``event_dma_adapter`` need to be stopped before stopping\n-        the event device.\n+        ``event_timer_adapter``, ``event_crypto_adapter``,\n+        ``event_dma_adapter`` and ``event_ml_adapter`` need\n+        to be stopped before stopping the event device.\n \n Summary\n -------\ndiff --git a/doc/guides/prog_guide/img/event_ml_adapter_op_forward.svg b/doc/guides/prog_guide/img/event_ml_adapter_op_forward.svg\nnew file mode 100644\nindex 00000000000..06fe1d26a30\n--- /dev/null\n+++ b/doc/guides/prog_guide/img/event_ml_adapter_op_forward.svg\n@@ -0,0 +1,1086 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- SPDX-License-Identifier: BSD-3-Clause -->\n+<!-- Copyright (c) 2024 Marvell. -->\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"720px\"\n+   height=\"486px\"\n+   id=\"svg13237\"\n+   version=\"1.1\"\n+   inkscape:version=\"1.2.1 (9c6d41e410, 2022-07-14)\"\n+   sodipodi:docname=\"event_ml_adapter_op_forward.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\"\n+   xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n+   xmlns:cc=\"http://creativecommons.org/ns#\"\n+   xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n+   xmlns:v=\"http://schemas.microsoft.com/visio/2003/SVGExtensions/\">\n+  <defs\n+     id=\"defs13239\">\n+    <marker\n+       inkscape:stockid=\"Arrow1Sstart\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Sstart\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8416\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.2) translate(6,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Send\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Send\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8419\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.2) rotate(180) translate(6,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"DiamondL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"DiamondL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8483\"\n+         d=\"M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"DotL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"DotL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8465\"\n+         d=\"M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8) translate(7.4, 1)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"SquareL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"SquareL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8474\"\n+         d=\"M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"TriangleOutL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"TriangleOutL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8546\"\n+         d=\"M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Lstart\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8404\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8) translate(12.5,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Mend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Mend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8413\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.4) rotate(180) translate(10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow2Lend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow2Lend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8425\"\n+         style=\"fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;\"\n+         d=\"M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z \"\n+         transform=\"scale(1.1) rotate(180) translate(1,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Lend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8407\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.8) rotate(180) translate(12.5,0)\" />\n+    </marker>\n+    <filter\n+       id=\"filter_2\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-0\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-7\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-0-8\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-7-7\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-9\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-6\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-6\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-63\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-91\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-3\" />\n+    </filter>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-5\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-3\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-6\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-0\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lstart-7\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8404-0\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(0.8,0,0,0.8,10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-51\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-1\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-3\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-6\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-62\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-9\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-2\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-7\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lstart-7-9\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8404-0-3\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(0.8,0,0,0.8,10,0)\" />\n+    </marker>\n+    <filter\n+       id=\"filter_2-3-6-1\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-63-8\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-92\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-2\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-94\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-7\" />\n+    </filter>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lstart-7-6\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8404-0-1\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(0.8,0,0,0.8,10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-55\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-4\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+  </defs>\n+  <sodipodi:namedview\n+     id=\"base\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pageshadow=\"2\"\n+     inkscape:zoom=\"1\"\n+     inkscape:cx=\"233.5\"\n+     inkscape:cy=\"288\"\n+     inkscape:document-units=\"px\"\n+     inkscape:current-layer=\"layer1\"\n+     showgrid=\"false\"\n+     inkscape:window-width=\"1920\"\n+     inkscape:window-height=\"1017\"\n+     inkscape:window-x=\"-8\"\n+     inkscape:window-y=\"-8\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:snap-nodes=\"false\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\">\n+    <inkscape:grid\n+       type=\"xygrid\"\n+       id=\"grid13454\" />\n+  </sodipodi:namedview>\n+  <metadata\n+     id=\"metadata13242\">\n+    <rdf:RDF>\n+      <cc:Work\n+         rdf:about=\"\">\n+        <dc:format>image/svg+xml</dc:format>\n+        <dc:type\n+           rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n+        <dc:title />\n+      </cc:Work>\n+    </rdf:RDF>\n+  </metadata>\n+  <g\n+     id=\"layer1\"\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\">\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-4\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,88.874699,-812.39909)\">\n+      <title\n+         id=\"title22-7-5\">Square</title>\n+      <desc\n+         id=\"desc24-7-8\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-5\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-7\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-91)\" />\n+      </g>\n+      <g\n+         id=\"g13515-33\">\n+        <g\n+           id=\"g13534-8\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-95\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.712265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"M 312.28671,240.74335 H 227.99897\"\n+       id=\"path17209\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.718986px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"m 221.6484,77.57125 h 94.28101\"\n+       id=\"path17209-8\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,314.24227,-811.89589)\">\n+      <title\n+         id=\"title22-7\">Square</title>\n+      <desc\n+         id=\"desc24-7\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3)\" />\n+      </g>\n+      <g\n+         id=\"g13515\">\n+        <g\n+           id=\"g13534\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.724714;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:none\"\n+       d=\"M 89.025329,74.39932 H 24.750043\"\n+       id=\"path17209-3\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.325033,28.642983)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-3\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-1.93108,192.80833)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-1\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.751412;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"M 18.763392,120.7432 H 87.758545\"\n+       id=\"path17209-3-0\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-218.16394,72.68276)\" />\n+    <path\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-2\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-217.40136,26.716271)\" />\n+    <g\n+       id=\"g29167-4\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-217.31662,28.007562)\">\n+      <text\n+         id=\"text29163-9\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-9\"\n+           sodipodi:role=\"line\">1</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-9\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.9726112,28.689051)\">\n+      <text\n+         id=\"text29163-3\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-3\"\n+           sodipodi:role=\"line\">2</tspan></text>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.678033px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"M 181,214.66098 V 145.33902\"\n+       id=\"path17211-7-1-6\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <g\n+       id=\"g29167\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-218.07919,73.10621)\">\n+      <text\n+         id=\"text29163\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165\"\n+           sodipodi:role=\"line\">8</tspan></text>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.678033px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"m 131,145.8531 v 69.32197\"\n+       id=\"path17211-7-1\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-140.37076,129.97088)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-8\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-140.28602,131.01695)\">\n+      <text\n+         id=\"text29163-92\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-8\"\n+           sodipodi:role=\"line\">7</tspan></text>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.718986px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"m 317.1405,116 h -94.281\"\n+       id=\"path17209-8-0\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-3.4914,66.68745)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-6\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-46\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.40666,67.48829)\">\n+      <text\n+         id=\"text29163-1\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-5\"\n+           sodipodi:role=\"line\">3</tspan></text>\n+    </g>\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-90.692582,130.31695)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-8-6\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-6\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-90.84634,131.60918)\">\n+      <text\n+         id=\"text29163-17\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-2\"\n+           sodipodi:role=\"line\">4</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-2-0\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-2.424397,194.0216)\">\n+      <text\n+         id=\"text29163-92-6\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-8-2\"\n+           sodipodi:role=\"line\">5</tspan></text>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-8\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,93.82055,-648.98949)\">\n+      <title\n+         id=\"title22-7-97\">Square</title>\n+      <desc\n+         id=\"desc24-7-3\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-6\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-12\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-92)\" />\n+      </g>\n+      <g\n+         id=\"g13515-9\">\n+        <g\n+           id=\"g13534-3\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-1\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-84\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,314.82055,-648.98949)\">\n+      <title\n+         id=\"title22-7-50\">Square</title>\n+      <desc\n+         id=\"desc24-7-36\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-1\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-0\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-94)\" />\n+      </g>\n+      <g\n+         id=\"g13515-6\">\n+        <g\n+           id=\"g13534-32\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-0\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.712265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 313.14387,285 H 228.85613\"\n+       id=\"path17209-7\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-2.692582,236.31695)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-1-6\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-2-0-5\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-2.424397,237.0216)\">\n+      <text\n+         id=\"text29163-92-6-6\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-8-2-9\"\n+           sodipodi:role=\"line\">6</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-154.60784,51.117791)\">\n+      <text\n+         id=\"text29163-9-6\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-9-7\"\n+           sodipodi:role=\"line\">Eventdev</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-144.65044,201.97821)\">\n+      <text\n+         id=\"text29163-9-6-3\"\n+         y=\"70\"\n+         x=\"412.93716\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"70\"\n+           x=\"412.93716\"\n+           id=\"tspan29165-9-7-5\"\n+           sodipodi:role=\"line\">ML</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"100.26363\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3201\">Adapter</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5-6\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,79.53518,46.62529)\">\n+      <text\n+         id=\"text29163-9-6-3-2\"\n+         y=\"48.801659\"\n+         x=\"412.93716\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"48.801659\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3155\">Application</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"98.801659\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3201-1\">in ordered</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"148.80167\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3161\">stage</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,77.535182,213.62529)\">\n+      <text\n+         id=\"text29163-9-6-3-7\"\n+         y=\"70\"\n+         x=\"412.93716\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"70\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3201-9\">ML Device</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5-3\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,188.53518,-3.37471)\">\n+      <text\n+         id=\"text29163-9-6-3-6\"\n+         y=\"70\"\n+         x=\"375.65271\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3201-6\">1. Events from the previous stage.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"93.538376\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3260\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"117.07675\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3262\">2. Application in ordered stage</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"140.61513\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3288\">    dequeues events from eventdev.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"164.1535\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3264\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"187.69188\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3266\">3. Application enqueues ML</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"211.23026\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3290\">    operations as events to eventdev.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"234.76863\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3268\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"258.30701\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3270\">4. ML adapter dequeues event</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"281.84537\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3292\">    from eventdev.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"305.38376\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3272\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"328.92212\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3274\">5. ML adapter submits ML</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"352.46051\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3294\">    operations to ML Device (Atomic</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"375.99887\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3296\">    stage)</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"399.53726\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3276\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"423.07562\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3278\">6. ML adapter dequeues ML</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"446.61401\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3298\">    completions from ML Device</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"470.15237\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3280\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"493.69073\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3282\">7. ML adapter enqueues events</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"517.22913\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3300\">    to the eventdev</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"540.76752\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3284\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"564.30585\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3286\">8. Events to the next stage</tspan></text>\n+    </g>\n+  </g>\n+</svg>\ndiff --git a/doc/guides/prog_guide/img/event_ml_adapter_op_new.svg b/doc/guides/prog_guide/img/event_ml_adapter_op_new.svg\nnew file mode 100644\nindex 00000000000..3b3a3d20ed4\n--- /dev/null\n+++ b/doc/guides/prog_guide/img/event_ml_adapter_op_new.svg\n@@ -0,0 +1,1079 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- SPDX-License-Identifier: BSD-3-Clause -->\n+<!-- Copyright (c) 2024 Marvell. -->\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"720px\"\n+   height=\"486px\"\n+   id=\"svg13237\"\n+   version=\"1.1\"\n+   inkscape:version=\"1.2.1 (9c6d41e410, 2022-07-14)\"\n+   sodipodi:docname=\"event_ml_adapter_op_new (1).svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\"\n+   xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n+   xmlns:cc=\"http://creativecommons.org/ns#\"\n+   xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n+   xmlns:v=\"http://schemas.microsoft.com/visio/2003/SVGExtensions/\">\n+  <defs\n+     id=\"defs13239\">\n+    <marker\n+       inkscape:stockid=\"Arrow1Sstart\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Sstart\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8416\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.2) translate(6,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Send\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Send\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8419\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.2) rotate(180) translate(6,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"DiamondL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"DiamondL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8483\"\n+         d=\"M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"DotL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"DotL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8465\"\n+         d=\"M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8) translate(7.4, 1)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"SquareL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"SquareL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8474\"\n+         d=\"M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"TriangleOutL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"TriangleOutL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8546\"\n+         d=\"M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Lstart\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8404\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8) translate(12.5,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Mend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Mend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8413\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.4) rotate(180) translate(10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow2Lend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow2Lend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8425\"\n+         style=\"fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;\"\n+         d=\"M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z \"\n+         transform=\"scale(1.1) rotate(180) translate(1,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Lend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8407\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.8) rotate(180) translate(12.5,0)\" />\n+    </marker>\n+    <filter\n+       id=\"filter_2\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-0\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-7\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-0-8\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-7-7\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-9\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-6\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-6\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-63\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-91\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-3\" />\n+    </filter>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-5\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-3\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-6\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-0\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lstart-7\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8404-0\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(0.8,0,0,0.8,10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-51\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-1\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-3\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-6\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-62\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-9\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-2\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-7\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <filter\n+       id=\"filter_2-3-91-3\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-3-6\" />\n+    </filter>\n+  </defs>\n+  <sodipodi:namedview\n+     id=\"base\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pageshadow=\"2\"\n+     inkscape:zoom=\"1\"\n+     inkscape:cx=\"385.5\"\n+     inkscape:cy=\"234\"\n+     inkscape:document-units=\"px\"\n+     inkscape:current-layer=\"layer1\"\n+     showgrid=\"false\"\n+     inkscape:window-width=\"1920\"\n+     inkscape:window-height=\"1017\"\n+     inkscape:window-x=\"-8\"\n+     inkscape:window-y=\"-8\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:snap-nodes=\"false\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\">\n+    <inkscape:grid\n+       type=\"xygrid\"\n+       id=\"grid13454\" />\n+  </sodipodi:namedview>\n+  <metadata\n+     id=\"metadata13242\">\n+    <rdf:RDF>\n+      <cc:Work\n+         rdf:about=\"\">\n+        <dc:format>image/svg+xml</dc:format>\n+        <dc:type\n+           rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n+        <dc:title />\n+      </cc:Work>\n+    </rdf:RDF>\n+  </metadata>\n+  <g\n+     id=\"layer1\"\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\">\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-0\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,323.2187,-540.25927)\">\n+      <title\n+         id=\"title22-7-6\">Square</title>\n+      <desc\n+         id=\"desc24-7-4\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-0\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-9\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-9)\" />\n+      </g>\n+      <g\n+         id=\"g13515-4\">\n+        <g\n+           id=\"g13534-5\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-4\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-4\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.165886,88.874699,-447.8809)\">\n+      <title\n+         id=\"title22-7-5\">Square</title>\n+      <desc\n+         id=\"desc24-7-8\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-5\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-7\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-91)\" />\n+      </g>\n+      <g\n+         id=\"g13515-33\">\n+        <g\n+           id=\"g13534-8\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-95\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-9\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,88.874699,-538.24651)\">\n+      <title\n+         id=\"title22-7-9\">Square</title>\n+      <desc\n+         id=\"desc24-7-5\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-2\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-1\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-6)\" />\n+      </g>\n+      <g\n+         id=\"g13515-3\">\n+        <g\n+           id=\"g13534-0\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-9\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.743466px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 220.66064,98.57125 H 321.88592\"\n+       id=\"path17209-8\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,322.24227,-811.89589)\">\n+      <title\n+         id=\"title22-7\">Square</title>\n+      <desc\n+         id=\"desc24-7\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3)\" />\n+      </g>\n+      <g\n+         id=\"g13515\">\n+        <g\n+           id=\"g13534\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       id=\"g13518\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,25.29268,348.89752)\">\n+      <g\n+         id=\"g13526\">\n+        <flowRoot\n+           xml:space=\"preserve\"\n+           id=\"flowRoot13464-9\"\n+           style=\"font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+           transform=\"translate(-12.00521,-129.65179)\"><flowRegion\n+             id=\"flowRegion13466-1\"\n+             style=\"font-family:sans-serif\"><rect\n+               id=\"rect13468-2\"\n+               width=\"195.99997\"\n+               height=\"112.00001\"\n+               x=\"273.33334\"\n+               y=\"175.33333\"\n+               style=\"text-align:center;text-anchor:middle\" /></flowRegion><flowPara\n+             style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+             id=\"flowPara13511\"> </flowPara></flowRoot>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.751455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:none\"\n+       d=\"m 176.26096,124.64833 v 69.24854\"\n+       id=\"path17209-3\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.325033,50.642983)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-3\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.743466px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 322.61264,375 H 221.38736\"\n+       id=\"path17209-8-0\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,0.0689171,324.80833)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-1\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.629082px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 155,324.19955 V 264.82863\"\n+       id=\"path17211-7-1\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-116.37076,245.97088)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-8\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.75059;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"m 126.26097,124.99178 v 69.24941\"\n+       id=\"path17209-3-0\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-146.16394,110.68276)\" />\n+    <path\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-2\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-95.40136,110.71627)\" />\n+    <g\n+       id=\"g29167-4\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-95.31662,112.00756)\">\n+      <text\n+         id=\"text29163-9\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-9\"\n+           sodipodi:role=\"line\">1</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-9\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.9726112,50.689051)\">\n+      <text\n+         id=\"text29163-3\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-3\"\n+           sodipodi:role=\"line\">2</tspan></text>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:1.04033px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 388.20118,147.93341 V 321.89308\"\n+       id=\"path17211-7\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,116.5086,136.68745)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-6\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-46\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,116.59334,137.48829)\">\n+      <text\n+         id=\"text29163-1\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-5\"\n+           sodipodi:role=\"line\">3</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-6\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,0.1536639,325.60918)\">\n+      <text\n+         id=\"text29163-17\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-2\"\n+           sodipodi:role=\"line\">4</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-146.07919,111.10621)\">\n+      <text\n+         id=\"text29163\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165\"\n+           sodipodi:role=\"line\">6</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-117.60784,180.11779)\">\n+      <text\n+         id=\"text29163-9-6\"\n+         y=\"70\"\n+         x=\"321.30356\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"321.30356\"\n+           id=\"tspan29165-9-7\"\n+           sodipodi:role=\"line\">Eventdev</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,55.34956,26.97821)\">\n+      <text\n+         id=\"text29163-9-6-3\"\n+         y=\"70\"\n+         x=\"454.74152\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"70\"\n+           x=\"454.74152\"\n+           id=\"tspan29165-9-7-5\"\n+           sodipodi:role=\"line\">A<tspan\n+   style=\"line-height:100%;font-family:sans-serif\"\n+   id=\"tspan3374\">tomic Stage</tspan></tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"94.210899\"\n+           x=\"454.74152\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3320\">+</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"115.7317\"\n+           x=\"454.74152\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3322\">Enqueue to</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"137.2525\"\n+           x=\"454.74152\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3324\">ML Device</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-116.28602,248.01695)\">\n+      <text\n+         id=\"text29163-92\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-8\"\n+           sodipodi:role=\"line\">5</tspan></text>\n+    </g>\n+    <flowRoot\n+       xml:space=\"preserve\"\n+       id=\"flowRoot3376\"\n+       style=\"font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"><flowRegion\n+         id=\"flowRegion3378\"\n+         style=\"font-family:sans-serif\"><rect\n+           id=\"rect3380\"\n+           width=\"100\"\n+           height=\"37\"\n+           x=\"109\"\n+           y=\"259\" /></flowRegion><flowPara\n+         id=\"flowPara3382\"\n+         style=\"font-size:18px;line-height:1.25;font-family:sans-serif\"> </flowPara></flowRoot>\n+    <g\n+       id=\"g29167-4-3-1\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,109.34956,323.97821)\">\n+      <text\n+         id=\"text29163-9-6-8\"\n+         y=\"70\"\n+         x=\"321.30356\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"321.30356\"\n+           id=\"tspan29165-9-7-7\"\n+           sodipodi:role=\"line\">ML Device</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-1-9\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-114.48565,314.20704)\">\n+      <text\n+         id=\"text29163-9-6-8-2\"\n+         y=\"70\"\n+         x=\"368.01718\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"70\"\n+           x=\"368.01718\"\n+           id=\"tspan29165-9-7-7-0\"\n+           sodipodi:role=\"line\">ML</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"100.26363\"\n+           x=\"368.01718\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3488\">Adapter</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-1-9-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,250.96804,192.62529)\">\n+      <text\n+         id=\"text29163-9-6-8-2-3\"\n+         y=\"-188.35481\"\n+         x=\"318.61978\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-188.35481\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3543\">1. Application dequeues</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-161.45381\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3196\">    events from the previous</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-134.55281\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3232\">    stage</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-107.65182\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3519\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-80.750816\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3551\">2. Application prepares the</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-53.849815\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3203\">    ML operations.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-26.948814\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3523\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-0.0478158\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3541\">3. ML operations are</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"26.853184\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3207\">    submitted to mldev</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"53.754185\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3209\">    by application.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"80.655182\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3527\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"107.55618\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3547\">4. ML adapter dequeues</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"134.45718\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3216\">    ML completions from</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"161.35818\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3218\">    ML device.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"188.25919\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3531\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"215.16019\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3549\">5. ML adapter enqueues</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"242.06119\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3222\">    events to the eventdev.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"268.96219\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3535\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"295.86319\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3537\">6. Application dequeues from</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"322.76419\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3224\">    eventdev and prepare for</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"349.66519\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3226\">    further processing</tspan></text>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-4-7\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.165886,90.820551,-587.97129)\">\n+      <title\n+         id=\"title22-7-5-5\">Square</title>\n+      <desc\n+         id=\"desc24-7-8-3\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-5-5\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-7-6\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-91-3)\" />\n+      </g>\n+      <g\n+         id=\"g13515-33-2\">\n+        <g\n+           id=\"g13534-8-9\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-95-1\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-125.66199,44.027402)\">\n+      <text\n+         id=\"text29163-9-6-7\"\n+         y=\"70\"\n+         x=\"321.30356\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"321.30356\"\n+           id=\"tspan29165-9-7-0\"\n+           sodipodi:role=\"line\">Application</tspan></text>\n+    </g>\n+  </g>\n+</svg>\ndiff --git a/doc/guides/prog_guide/index.rst b/doc/guides/prog_guide/index.rst\nindex 94964357ffb..99147c0b4b0 100644\n--- a/doc/guides/prog_guide/index.rst\n+++ b/doc/guides/prog_guide/index.rst\n@@ -62,6 +62,7 @@ Programmer's Guide\n     event_timer_adapter\n     event_crypto_adapter\n     event_dma_adapter\n+    event_ml_adapter\n     dispatcher_lib\n     qos_framework\n     power_man\ndiff --git a/lib/eventdev/meson.build b/lib/eventdev/meson.build\nindex a04bb86f0f2..e2dced9050d 100644\n--- a/lib/eventdev/meson.build\n+++ b/lib/eventdev/meson.build\n@@ -16,6 +16,7 @@ sources = files(\n         'rte_event_eth_tx_adapter.c',\n         'rte_event_ring.c',\n         'rte_event_timer_adapter.c',\n+        'rte_event_ml_adapter.c',\n         'rte_eventdev.c',\n )\n headers = files(\n@@ -25,6 +26,7 @@ headers = files(\n         'rte_event_eth_tx_adapter.h',\n         'rte_event_ring.h',\n         'rte_event_timer_adapter.h',\n+        'rte_event_ml_adapter.h',\n         'rte_eventdev.h',\n         'rte_eventdev_trace_fp.h',\n )\n@@ -38,5 +40,5 @@ driver_sdk_headers += files(\n         'event_timer_adapter_pmd.h',\n )\n \n-deps += ['ring', 'ethdev', 'hash', 'mempool', 'mbuf', 'timer', 'cryptodev', 'dmadev']\n+deps += ['ring', 'ethdev', 'hash', 'mempool', 'mbuf', 'timer', 'cryptodev', 'dmadev', 'mldev']\n deps += ['telemetry']\ndiff --git a/lib/eventdev/rte_event_ml_adapter.c b/lib/eventdev/rte_event_ml_adapter.c\nnew file mode 100644\nindex 00000000000..5b8b02a0130\n--- /dev/null\n+++ b/lib/eventdev/rte_event_ml_adapter.c\n@@ -0,0 +1,6 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2024 Marvell.\n+ */\n+\n+#include \"rte_event_ml_adapter.h\"\n+#include \"rte_eventdev.h\"\ndiff --git a/lib/eventdev/rte_event_ml_adapter.h b/lib/eventdev/rte_event_ml_adapter.h\nnew file mode 100644\nindex 00000000000..9e481026f26\n--- /dev/null\n+++ b/lib/eventdev/rte_event_ml_adapter.h\n@@ -0,0 +1,594 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2024 Marvell.\n+ */\n+\n+#ifndef RTE_EVENT_ML_ADAPTER\n+#define RTE_EVENT_ML_ADAPTER\n+\n+/**\n+ * @file rte_event_ml_adapter.h\n+ *\n+ * @warning\n+ * @b EXPERIMENTAL:\n+ * All functions in this file may be changed or removed without prior notice.\n+ *\n+ * ML (Machine Learning) Event Adapter API.\n+ *\n+ * Eventdev library provides adapters to bridge between various components for providing new\n+ * event source. The event ML adapter is one of those adapters which is intended to bridge\n+ * between event devices and ML devices.\n+ *\n+ * The ML adapter adds support to enqueue / dequeue ML operations to / from event device. The packet\n+ * flow between ML device and the event device can be accomplished using both SW and HW based\n+ * transfer mechanisms. The adapter uses an EAL service core function for SW based packet transfer\n+ * and uses the eventdev PMD functions to configure HW based packet transfer between the ML device\n+ * and the event device.\n+ *\n+ * The application can choose to submit a ML operation directly to an ML device or send it to the ML\n+ * adapter via eventdev based on RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. The first\n+ * mode is known as the event new (RTE_EVENT_ML_ADAPTER_OP_NEW) mode and the second as the event\n+ * forward (RTE_EVENT_ML_ADAPTER_OP_FORWARD) mode. The choice of mode can be specified while\n+ * creating the adapter. In the former mode, it is an application responsibility to enable ingress\n+ * packet ordering. In the latter mode, it is the adapter responsibility to enable the ingress\n+ * packet ordering.\n+ *\n+ *\n+ * Working model of RTE_EVENT_ML_ADAPTER_OP_NEW mode:\n+ *\n+ *                +--------------+         +--------------+\n+ *                |              |         |   ML stage   |\n+ *                | Application  |---[2]-->| + enqueue to |\n+ *                |              |         |     mldev    |\n+ *                +--------------+         +--------------+\n+ *                    ^   ^                       |\n+ *                    |   |                      [3]\n+ *                   [6] [1]                      |\n+ *                    |   |                       |\n+ *                +--------------+                |\n+ *                |              |                |\n+ *                | Event device |                |\n+ *                |              |                |\n+ *                +--------------+                |\n+ *                       ^                        |\n+ *                       |                        |\n+ *                      [5]                       |\n+ *                       |                        v\n+ *                +--------------+         +--------------+\n+ *                |              |         |              |\n+ *                |  ML adapter  |<--[4]---|    mldev     |\n+ *                |              |         |              |\n+ *                +--------------+         +--------------+\n+ *\n+ *\n+ *         [1] Application dequeues events from the previous stage.\n+ *         [2] Application prepares the ML operations.\n+ *         [3] ML operations are submitted to mldev by application.\n+ *         [4] ML adapter dequeues ML completions from mldev.\n+ *         [5] ML adapter enqueues events to the eventdev.\n+ *         [6] Application dequeues from eventdev for further processing.\n+ *\n+ * In the RTE_EVENT_ML_ADAPTER_OP_NEW mode, application submits ML operations directly to ML device.\n+ * The ML adapter then dequeues ML completions from ML device and enqueues events to the event\n+ * device. This mode does not ensure ingress ordering, if the application directly enqueues to mldev\n+ * without going through ML / atomic stage i.e. removing item [1] and [2].\n+ *\n+ * Events dequeued from the adapter will be treated as new events. In this mode, application needs\n+ * to specify event information (response information) which is needed to enqueue an event after the\n+ * ML operation is completed.\n+ *\n+ *\n+ * Working model of RTE_EVENT_ML_ADAPTER_OP_FORWARD mode:\n+ *\n+ *                +--------------+         +--------------+\n+ *        --[1]-->|              |---[2]-->|  Application |\n+ *                | Event device |         |      in      |\n+ *        <--[8]--|              |<--[3]---| Ordered stage|\n+ *                +--------------+         +--------------+\n+ *                    ^      |\n+ *                    |     [4]\n+ *                   [7]     |\n+ *                    |      v\n+ *               +----------------+       +--------------+\n+ *               |                |--[5]->|              |\n+ *               |   ML adapter   |       |     mldev    |\n+ *               |                |<-[6]--|              |\n+ *               +----------------+       +--------------+\n+ *\n+ *\n+ *         [1] Events from the previous stage.\n+ *         [2] Application in ordered stage dequeues events from eventdev.\n+ *         [3] Application enqueues ML operations as events to eventdev.\n+ *         [4] ML adapter dequeues event from eventdev.\n+ *         [5] ML adapter submits ML operations to mldev (Atomic stage).\n+ *         [6] ML adapter dequeues ML completions from mldev\n+ *         [7] ML adapter enqueues events to the eventdev\n+ *         [8] Events to the next stage\n+ *\n+ * In the event forward (RTE_EVENT_ML_ADAPTER_OP_FORWARD) mode, if the HW supports the capability\n+ * RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD, application can directly submit the ML operations\n+ * to the mldev. If not, application retrieves the event port of the ML adapter through the API,\n+ * rte_event_ml_adapter_event_port_get(). Then, links its event queue to this port and starts\n+ * enqueuing ML operations as events to the eventdev. The adapter then dequeues the events and\n+ * submits the ML operations to the mldev. After the ML completions, the adapter enqueues events to\n+ * the event device.\n+ *\n+ * Application can use this mode, when ingress packet ordering is needed. Events dequeued from the\n+ * adapter will be treated as forwarded events. In this mode, the application needs to specify the\n+ * mldev ID and queue pair ID (request information) needed to enqueue an ML operation in addition to\n+ * the event information (response information) needed to enqueue an event after the ML operation\n+ * has completed.\n+ *\n+ * The event ML adapter provides common APIs to configure the packet flow from the ML device to\n+ * event devices for both SW and HW based transfers. The ML event adapter's functions are:\n+ *\n+ *  - rte_event_ml_adapter_create_ext()\n+ *  - rte_event_ml_adapter_create()\n+ *  - rte_event_ml_adapter_free()\n+ *  - rte_event_ml_adapter_queue_pair_add()\n+ *  - rte_event_ml_adapter_queue_pair_del()\n+ *  - rte_event_ml_adapter_start()\n+ *  - rte_event_ml_adapter_stop()\n+ *  - rte_event_ml_adapter_stats_get()\n+ *  - rte_event_ml_adapter_stats_reset()\n+ *\n+ * The application creates an instance using rte_event_ml_adapter_create() or\n+ * rte_event_ml_adapter_create_ext().\n+ *\n+ * mldev queue pair addition / deletion is done using the rte_event_ml_adapter_queue_pair_add() /\n+ * rte_event_ml_adapter_queue_pair_del() APIs. If HW supports the capability\n+ * RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND, event information must be passed to the add\n+ * API.\n+ *\n+ */\n+\n+#include <stdint.h>\n+\n+#include \"rte_eventdev.h\"\n+#include <rte_common.h>\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+/**\n+ *  ML event adapter mode\n+ */\n+enum rte_event_ml_adapter_mode {\n+\tRTE_EVENT_ML_ADAPTER_OP_NEW,\n+\t/**< Start the ML adapter in event new mode.\n+\t * @see RTE_EVENT_OP_NEW.\n+\t *\n+\t * Application submits ML operations to the mldev. Adapter only dequeues the ML completions\n+\t * from mldev and enqueue events to the eventdev.\n+\t */\n+\n+\tRTE_EVENT_ML_ADAPTER_OP_FORWARD,\n+\t/**< Start the ML adapter in event forward mode.\n+\t * @see RTE_EVENT_OP_FORWARD.\n+\t *\n+\t * Application submits ML requests as events to the ML adapter or ML device based on\n+\t * RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. ML completions are enqueued\n+\t * back to the eventdev by ML adapter.\n+\t */\n+};\n+\n+/**\n+ * ML event request structure will be filled by application to provide event request information to\n+ * the adapter.\n+ */\n+struct rte_event_ml_request {\n+\tuint8_t resv[8];\n+\t/**< Overlaps with first 8 bytes of struct rte_event that encode the response event\n+\t * information. Application is expected to fill in struct rte_event response_info.\n+\t */\n+\n+\tint16_t mldev_id;\n+\t/**< ML device ID to be used */\n+\n+\tuint16_t queue_pair_id;\n+\t/**< ML queue pair ID to be used */\n+\n+\tuint32_t rsvd;\n+\t/**< Reserved bits */\n+};\n+\n+/**\n+ * ML event metadata structure will be filled by application to provide ML request and event\n+ * response information.\n+ *\n+ * If ML events are enqueued using a HW mechanism, the mldev PMD uses the event response information\n+ * to set up the event that is enqueued back to eventdev after completion of the ML operation. If\n+ * the transfer is done by SW, event response information will be used by the adapter.\n+ */\n+union rte_event_ml_metadata {\n+\tstruct rte_event_ml_request request_info;\n+\t/**< Request information to be filled in by application for RTE_EVENT_ML_ADAPTER_OP_FORWARD\n+\t * mode. First 8 bytes of request_info is reserved for response_info.\n+\t */\n+\n+\tstruct rte_event response_info;\n+\t/**< Response information to be filled in by application for RTE_EVENT_ML_ADAPTER_OP_NEW and\n+\t * RTE_EVENT_ML_ADAPTER_OP_FORWARD mode.\n+\t */\n+};\n+\n+/**\n+ * Adapter configuration structure that the adapter configuration callback function is expected to\n+ * fill out.\n+ *\n+ * @see rte_event_ml_adapter_conf_cb\n+ */\n+struct rte_event_ml_adapter_conf {\n+\tuint8_t event_port_id;\n+\t/** < Event port identifier, the adapter enqueues events to this port and dequeues ML\n+\t * request events in RTE_EVENT_ML_ADAPTER_OP_FORWARD mode.\n+\t */\n+\n+\tuint32_t max_nb;\n+\t/**< The adapter can return early if it has processed at least max_nb ML ops. This isn't\n+\t * treated as a requirement; batching may cause the adapter to process more than max_nb ML\n+\t * ops.\n+\t */\n+};\n+\n+/**\n+ * Adapter runtime configuration parameters\n+ */\n+struct rte_event_ml_adapter_runtime_params {\n+\tuint32_t max_nb;\n+\t/**< The adapter can return early if it has processed at least max_nb ML ops. This isn't\n+\t * treated as a requirement; batching may cause the adapter to process more than max_nb ML\n+\t * ops.\n+\t *\n+\t * rte_event_ml_adapter_create() configures the adapter with default value of max_nb.\n+\t * rte_event_ml_adapter_create_ext() configures the adapter with user provided value of\n+\t * max_nb through rte_event_ml_adapter_conf::max_nb parameter.\n+\t * rte_event_ml_adapter_runtime_params_set() allows to re-configure max_nb during runtime\n+\t * (after adding at least one queue pair)\n+\t *\n+\t * This is valid for the devices without RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD or\n+\t * RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_NEW capability.\n+\t */\n+\n+\tuint32_t rsvd[15];\n+\t/**< Reserved fields for future expansion */\n+};\n+\n+/**\n+ * Function type used for adapter configuration callback. The callback is used to fill in members of\n+ * the struct rte_event_ml_adapter_conf, this callback is invoked when creating a SW service for\n+ * packet transfer from mldev queue pair to the event device. The SW service is created within the\n+ * function, rte_event_ml_adapter_queue_pair_add(), if SW based packet transfers from mldev queue\n+ * pair to the event device are required.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param evdev_id\n+ *     Event device identifier.\n+ * @param conf\n+ *     Structure that needs to be populated by this callback.\n+ * @param arg\n+ *     Argument to the callback. This is the same as the conf_arg passed to the\n+ * rte_event_ml_adapter_create_ext().\n+ */\n+typedef int (*rte_event_ml_adapter_conf_cb)(uint8_t id, uint8_t evdev_id,\n+\t\t\t\t\t    struct rte_event_ml_adapter_conf *conf, void *arg);\n+\n+/**\n+ * A structure used to retrieve statistics for an event ML adapter instance.\n+ */\n+struct rte_event_ml_adapter_stats {\n+\tuint64_t event_poll_count;\n+\t/**< Event port poll count */\n+\n+\tuint64_t event_deq_count;\n+\t/**< Event dequeue count */\n+\n+\tuint64_t ml_enq_count;\n+\t/**< mldev enqueue count */\n+\n+\tuint64_t ml_enq_fail_count;\n+\t/**< mldev enqueue failed count */\n+\n+\tuint64_t ml_deq_count;\n+\t/**< mldev dequeue count */\n+\n+\tuint64_t event_enq_count;\n+\t/**< Event enqueue count */\n+\n+\tuint64_t event_enq_retry_count;\n+\t/**< Event enqueue retry count */\n+\n+\tuint64_t event_enq_fail_count;\n+\t/**< Event enqueue fail count */\n+};\n+\n+/**\n+ * Create a new event ML adapter with the specified identifier.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param evdev_id\n+ *     Event device identifier.\n+ * @param conf_cb\n+ *     Callback function that fills in members of a struct rte_event_ml_adapter_conf struct passed\n+ * into it.\n+ * @param mode\n+ *     Flag to indicate the mode of the adapter.\n+ *     @see rte_event_ml_adapter_mode\n+ * @param conf_arg\n+ *     Argument that is passed to the conf_cb function.\n+ *\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure\n+ */\n+int\n+rte_event_ml_adapter_create_ext(uint8_t id, uint8_t evdev_id, rte_event_ml_adapter_conf_cb conf_cb,\n+\t\t\t\tenum rte_event_ml_adapter_mode mode, void *conf_arg);\n+\n+/**\n+ * Create a new event ML adapter with the specified identifier. This function uses an internal\n+ * configuration function that creates an event port. This default function reconfigures the event\n+ * device with an additional event port and set up the event port using the port_config parameter\n+ * passed into this function. In case the application needs more control in configuration of the\n+ * service, it should use the rte_event_ml_adapter_create_ext() version.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param evdev_id\n+ *     Event device identifier.\n+ * @param port_config\n+ *     Argument of type *rte_event_port_conf* that is passed to the conf_cb function.\n+ * @param mode\n+ *     Flag to indicate the mode of the adapter.\n+ *     @see rte_event_ml_adapter_mode\n+ *\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure\n+ */\n+int\n+rte_event_ml_adapter_create(uint8_t id, uint8_t evdev_id, struct rte_event_port_conf *port_config,\n+\t\t\t    enum rte_event_ml_adapter_mode mode);\n+\n+/**\n+ * Free an event ML adapter\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure, If the adapter still has queue pairs added to it, the function\n+ * returns -EBUSY.\n+ */\n+int\n+rte_event_ml_adapter_free(uint8_t id);\n+\n+/**\n+ * Add a queue pair to an event ML adapter.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param mldev_id\n+ *     mldev identifier.\n+ * @param queue_pair_id\n+ *     ML device queue pair identifier. If queue_pair_id is set -1, adapter adds all the\n+ * preconfigured queue pairs to the instance.\n+ * @param event\n+ *     If HW supports mldev queue pair to event queue binding, application is expected to fill in\n+ * event information, else it will be NULL.\n+ *     @see RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND\n+ *\n+ * @return\n+ *     - 0: Success, queue pair added correctly.\n+ *     - <0: Error code on failure.\n+ */\n+int\n+rte_event_ml_adapter_queue_pair_add(uint8_t id, int16_t mldev_id, int32_t queue_pair_id,\n+\t\t\t\t    const struct rte_event *event);\n+\n+/**\n+ * Delete a queue pair from an event ML adapter.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param mldev_id\n+ *     ML device identifier.\n+ * @param queue_pair_id\n+ *     ML device queue pair identifier.\n+ *\n+ * @return\n+ *     - 0: Success, queue pair deleted successfully.\n+ *     - <0: Error code on failure.\n+ */\n+int\n+rte_event_ml_adapter_queue_pair_del(uint8_t id, int16_t mldev_id, int32_t queue_pair_id);\n+\n+/**\n+ * Start event ML adapter\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ *\n+ * @return\n+ *     - 0: Success, adapter started successfully.\n+ *     - <0: Error code on failure.\n+ *\n+ * @note The eventdev and mldev to which the event_ml_adapter is connected should be started\n+ * before calling rte_event_ml_adapter_start().\n+ */\n+int\n+rte_event_ml_adapter_start(uint8_t id);\n+\n+/**\n+ * Stop event ML adapter\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ *\n+ * @return\n+ *  - 0: Success, adapter stopped successfully.\n+ *  - <0: Error code on failure.\n+ */\n+int\n+rte_event_ml_adapter_stop(uint8_t id);\n+\n+/**\n+ * Retrieve statistics for an adapter\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param [out] stats\n+ *     A pointer to structure used to retrieve statistics for an adapter.\n+ *\n+ * @return\n+ *     - 0: Success, retrieved successfully.\n+ *     - <0: Error code on failure.\n+ */\n+int\n+rte_event_ml_adapter_stats_get(uint8_t id, struct rte_event_ml_adapter_stats *stats);\n+\n+/**\n+ * Reset statistics for an adapter.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ *\n+ * @return\n+ *     - 0: Success, statistics reset successfully.\n+ *     - <0: Error code on failure.\n+ */\n+int\n+rte_event_ml_adapter_stats_reset(uint8_t id);\n+\n+/**\n+ * Retrieve the service ID of an adapter. If the adapter doesn't use a rte_service function, this\n+ * function returns -ESRCH.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param [out] service_id\n+ *     A pointer to a uint32_t, to be filled in with the service id.\n+ *\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure, if the adapter doesn't use a rte_service function, this function\n+ * returns -ESRCH.\n+ */\n+int\n+rte_event_ml_adapter_service_id_get(uint8_t id, uint32_t *service_id);\n+\n+/**\n+ * Retrieve the event port of an adapter.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ *\n+ * @param [out] event_port_id\n+ *     Application links its event queue to this adapter port which is used in\n+ * RTE_EVENT_ML_ADAPTER_OP_FORWARD mode.\n+ *\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure.\n+ */\n+int\n+rte_event_ml_adapter_event_port_get(uint8_t id, uint8_t *event_port_id);\n+\n+/**\n+ * Initialize the adapter runtime configuration parameters\n+ *\n+ * @param params\n+ *  A pointer to structure of type struct rte_event_ml_adapter_runtime_params\n+ *\n+ * @return\n+ *  -  0: Success\n+ *  - <0: Error code on failure\n+ */\n+int\n+rte_event_ml_adapter_runtime_params_init(struct rte_event_ml_adapter_runtime_params *params);\n+\n+/**\n+ * Set the adapter runtime configuration parameters\n+ *\n+ * @param id\n+ *  Adapter identifier\n+ *\n+ * @param params\n+ *  A pointer to structure of type struct rte_event_ml_adapter_runtime_params with configuration\n+ * parameter values. The reserved fields of this structure must be initialized to zero and the valid\n+ * fields need to be set appropriately. This struct can be initialized using\n+ * rte_event_ml_adapter_runtime_params_init() API to default values or application may reset this\n+ * struct and update required fields.\n+ *\n+ * @return\n+ *  -  0: Success\n+ *  - <0: Error code on failure\n+ */\n+int\n+rte_event_ml_adapter_runtime_params_set(uint8_t id,\n+\t\t\t\t\tstruct rte_event_ml_adapter_runtime_params *params);\n+\n+/**\n+ * Get the adapter runtime configuration parameters\n+ *\n+ * @param id\n+ *  Adapter identifier\n+ *\n+ * @param[out] params\n+ *  A pointer to structure of type struct rte_event_ml_adapter_runtime_params containing valid\n+ * adapter parameters when return value is 0.\n+ *\n+ * @return\n+ *  -  0: Success\n+ *  - <0: Error code on failure\n+ */\n+int\n+rte_event_ml_adapter_runtime_params_get(uint8_t id,\n+\t\t\t\t\tstruct rte_event_ml_adapter_runtime_params *params);\n+\n+/**\n+ * Enqueue a burst of ML operations as event objects supplied in *rte_event* structure on an event\n+ * ML adapter designated by its event *evdev_id* through the event port specified by *port_id*. This\n+ * function is supported if the eventdev PMD has the #RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD\n+ * capability flag set.\n+ *\n+ * The *nb_events* parameter is the number of event objects to enqueue that are supplied in the\n+ * *ev* array of *rte_event* structure.\n+ *\n+ * The rte_event_ml_adapter_enqueue() function returns the number of event objects it actually\n+ * enqueued. A return value equal to *nb_events* means that all event objects have been enqueued.\n+ *\n+ * @param evdev_id\n+ *     The identifier of the device.\n+ * @param port_id\n+ *     The identifier of the event port.\n+ * @param ev\n+ *     Points to an array of *nb_events* objects of type *rte_event* structure which contain the\n+ * event object enqueue operations to be processed.\n+ * @param nb_events\n+ *     The number of event objects to enqueue, typically number of\n+ * rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...) available for this port.\n+ *\n+ * @return\n+ *     The number of event objects actually enqueued on the event device. The return value can be\n+ * less than the value of the *nb_events* parameter when the event devices queue is full or if\n+ * invalid parameters are specified in a *rte_event*. If the return value is less than *nb_events*,\n+ * the remaining events at the end of ev[] are not consumed and the caller has to take care of them,\n+ * and rte_errno is set accordingly. Possible errno values include:\n+ *\n+ *     - EINVAL: The port ID is invalid, device ID is invalid, an event's queue ID is invalid, or an\n+ * event's sched type doesn't match the capabilities of the destination queue.\n+ *     - ENOSPC: The event port was backpressured and unable to enqueue one or more events. This\n+ * error code is only applicable to closed systems.\n+ */\n+uint16_t\n+rte_event_ml_adapter_enqueue(uint8_t evdev_id, uint8_t port_id, struct rte_event ev[],\n+\t\t\t     uint16_t nb_events);\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* RTE_EVENT_ML_ADAPTER */\ndiff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h\nindex ec9b02455d2..c315c9b4788 100644\n--- a/lib/eventdev/rte_eventdev.h\n+++ b/lib/eventdev/rte_eventdev.h\n@@ -1207,6 +1207,8 @@ struct rte_event_vector {\n /**< The event generated from event eth Rx adapter */\n #define RTE_EVENT_TYPE_DMADEV           0x5\n /**< The event generated from dma subsystem */\n+#define RTE_EVENT_TYPE_MLDEV            0x6\n+/**< The event generated from mldev subsystem */\n #define RTE_EVENT_TYPE_VECTOR           0x8\n /**< Indicates that event is a vector.\n  * All vector event types should be a logical OR of EVENT_TYPE_VECTOR.\n@@ -1490,6 +1492,26 @@ rte_event_crypto_adapter_caps_get(uint8_t dev_id, uint8_t cdev_id,\n #define RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND 0x4\n /**< Flag indicates HW is capable of mapping DMA vchan to event queue. */\n \n+/* ML adapter capability bitmap flag */\n+#define RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_NEW 0x1\n+/**< Flag indicates HW is capable of generating events in\n+ * RTE_EVENT_OP_NEW enqueue operation. MLDEV will send\n+ * packets to the event device as new events using an\n+ * internal event port.\n+ */\n+\n+#define RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD 0x2\n+/**< Flag indicates HW is capable of generating events in\n+ * RTE_EVENT_OP_FORWARD enqueue operation. MLDEV will send\n+ * packets to the event device as forwarded event using an\n+ * internal event port.\n+ */\n+\n+#define RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND 0x4\n+/**< Flag indicates HW is capable of mapping ML queue pair to\n+ * event queue.\n+ */\n+\n /**\n  * Retrieve the event device's DMA adapter capabilities for the\n  * specified dmadev device\n@@ -1514,6 +1536,29 @@ __rte_experimental\n int\n rte_event_dma_adapter_caps_get(uint8_t dev_id, uint8_t dmadev_id, uint32_t *caps);\n \n+/**\n+ * Retrieve the event device's ML adapter capabilities for the\n+ * specified mldev device\n+ *\n+ * @param dev_id\n+ *   The identifier of the device.\n+ *\n+ * @param mldev_id\n+ *   The identifier of the mldev device.\n+ *\n+ * @param[out] caps\n+ *   A pointer to memory filled with event adapter capabilities.\n+ *   It is expected to be pre-allocated & initialized by caller.\n+ *\n+ * @return\n+ *   - 0: Success, driver provides event adapter capabilities for the\n+ *     mldev device.\n+ *   - <0: Error code returned by the driver function.\n+ *\n+ */\n+int\n+rte_event_ml_adapter_caps_get(uint8_t dev_id, int16_t mldev_id, uint32_t *caps);\n+\n /* Ethdev Tx adapter capability bitmap flags */\n #define RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT\t0x1\n /**< This flag is sent when the PMD supports a packet transmit callback\ndiff --git a/lib/meson.build b/lib/meson.build\nindex 6c143ce5a60..791b77a4a1c 100644\n--- a/lib/meson.build\n+++ b/lib/meson.build\n@@ -35,6 +35,7 @@ libraries = [\n         'distributor',\n         'dmadev',  # eventdev depends on this\n         'efd',\n+        'mldev', # eventdev depends on this\n         'eventdev',\n         'dispatcher', # dispatcher depends on eventdev\n         'gpudev',\n@@ -49,7 +50,6 @@ libraries = [\n         'power',\n         'rawdev',\n         'regexdev',\n-        'mldev',\n         'rib',\n         'reorder',\n         'sched',\ndiff --git a/lib/mldev/rte_mldev.h b/lib/mldev/rte_mldev.h\nindex 27e372fbcf1..a031592de61 100644\n--- a/lib/mldev/rte_mldev.h\n+++ b/lib/mldev/rte_mldev.h\n@@ -469,6 +469,12 @@ struct rte_ml_op {\n \t * dequeue and enqueue operation.\n \t * The application should not modify this field.\n \t */\n+\tuint32_t private_data_offset;\n+\t/**< Offset to indicate start of private data (if any).\n+\t * The offset is counted from the start of the rte_ml_op.\n+\t * The offset provides an offset to locate the request /\n+\t * response information in the rte_ml_op.\n+\t */\n } __rte_cache_aligned;\n \n /* Enqueue/Dequeue operations */\n",
    "prefixes": [
        "01/11"
    ]
}