get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 135781,
    "url": "http://patchwork.dpdk.org/api/patches/135781/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20240107153454.3909-4-syalavarthi@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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-4-syalavarthi@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240107153454.3909-4-syalavarthi@marvell.com",
    "date": "2024-01-07T15:34:42",
    "name": "[03/11] event/ml: add adapter create and free",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "6e41ddf1cec10f7f00a0c7767f7626a1b4d1dc31",
    "submitter": {
        "id": 2480,
        "url": "http://patchwork.dpdk.org/api/people/2480/?format=api",
        "name": "Srikanth Yalavarthi",
        "email": "syalavarthi@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patchwork.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20240107153454.3909-4-syalavarthi@marvell.com/mbox/",
    "series": [
        {
            "id": 30752,
            "url": "http://patchwork.dpdk.org/api/series/30752/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=30752",
            "date": "2024-01-07T15:34:39",
            "name": "Introduce Event ML Adapter",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/30752/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/135781/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/135781/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 2882143857;\n\tSun,  7 Jan 2024 16:35:36 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 73CDE406A2;\n\tSun,  7 Jan 2024 16:35:22 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174])\n by mails.dpdk.org (Postfix) with ESMTP id 7833C4067D\n for <dev@dpdk.org>; Sun,  7 Jan 2024 16:35:19 +0100 (CET)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id\n 407EEcgF028095 for <dev@dpdk.org>; Sun, 7 Jan 2024 07:35:18 -0800",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3vf53qjk9y-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT)\n for <dev@dpdk.org>; Sun, 07 Jan 2024 07:35:18 -0800 (PST)",
            "from DC5-EXCH01.marvell.com (10.69.176.38) 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:16 -0800",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend\n Transport; Sun, 7 Jan 2024 07:35:16 -0800",
            "from ml-host-33.caveonetworks.com (unknown [10.110.143.233])\n by maili.marvell.com (Postfix) with ESMTP id 7F5223F70A5;\n Sun,  7 Jan 2024 07:35:16 -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-transfer-encoding:content-type; s=\n pfpt0220; bh=9Nu8idqJXzreqNqfo7wu7ckcIISRinfrxGSMuBqqHUo=; b=NpA\n JM+EM5ZmJOp6nuNo5dEiUhNuFhyT2YeDnyLHuSMHyXLljU6EPqm92ZJfrbDHtZPo\n +b2FdsKlFrc51/ZuNweDk4gqJHI7g/TPhxcBhDiQKH3vpaaUtLuSR0SAsAVn99PH\n eOLuF9cgSCHkzZ2MEgVpd044Yjx1MC4ChXkjhIUEGCk5pBREK0CFswAYsVV4iUTe\n kk20BTuUJUq9b0WnweeEKYPnwbBz485dIBCHiPVNwWIjJWHjZKzY7nnXiPGwSqPw\n YAXz6scFBIb3BaBT63hd8sv7BKJQsMVZ9/RNdusShWWyA/Sjo7rBNCnnpRumCfaG\n DvTqFKJy9h7d6mogndQ==",
        "From": "Srikanth Yalavarthi <syalavarthi@marvell.com>",
        "To": "Srikanth Yalavarthi <syalavarthi@marvell.com>, Jerin Jacob\n <jerinj@marvell.com>",
        "CC": "<dev@dpdk.org>, <aprabhu@marvell.com>, <sshankarnara@marvell.com>,\n <ptakkar@marvell.com>",
        "Subject": "[PATCH 03/11] event/ml: add adapter create and free",
        "Date": "Sun, 7 Jan 2024 07:34:42 -0800",
        "Message-ID": "<20240107153454.3909-4-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-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "KumB0faLdAXFg1Sk0_UU8t2I0coukGf7",
        "X-Proofpoint-GUID": "KumB0faLdAXFg1Sk0_UU8t2I0coukGf7",
        "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": "Added ML event adapter create and free functions.\n\nSigned-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>\n---\n lib/eventdev/rte_event_ml_adapter.c | 317 ++++++++++++++++++++++++++++\n 1 file changed, 317 insertions(+)",
    "diff": "diff --git a/lib/eventdev/rte_event_ml_adapter.c b/lib/eventdev/rte_event_ml_adapter.c\nindex 5b8b02a0130..fed3b67c858 100644\n--- a/lib/eventdev/rte_event_ml_adapter.c\n+++ b/lib/eventdev/rte_event_ml_adapter.c\n@@ -4,3 +4,320 @@\n \n #include \"rte_event_ml_adapter.h\"\n #include \"rte_eventdev.h\"\n+#include <rte_mldev.h>\n+\n+#include \"eventdev_pmd.h\"\n+#include \"rte_mldev_pmd.h\"\n+\n+#define ML_ADAPTER_NAME_LEN    32\n+#define ML_DEFAULT_MAX_NB      128\n+#define ML_ADAPTER_BUFFER_SIZE 1024\n+\n+#define ML_ADAPTER_ARRAY \"event_ml_adapter_array\"\n+\n+/* ML ops circular buffer */\n+struct ml_ops_circular_buffer {\n+\t/* Index of head element */\n+\tuint16_t head;\n+\n+\t/* Index of tail element */\n+\tuint16_t tail;\n+\n+\t/* Number of elements in buffer */\n+\tuint16_t count;\n+\n+\t/* Size of circular buffer */\n+\tuint16_t size;\n+\n+\t/* Pointer to hold rte_ml_op for processing */\n+\tstruct rte_ml_op **op_buffer;\n+} __rte_cache_aligned;\n+\n+/* ML device information */\n+struct ml_device_info {\n+\t/* Pointer to mldev */\n+\tstruct rte_ml_dev *dev;\n+} __rte_cache_aligned;\n+\n+struct event_ml_adapter {\n+\t/* Event device identifier */\n+\tuint8_t eventdev_id;\n+\n+\t/* Event port identifier */\n+\tuint8_t event_port_id;\n+\n+\t/* Adapter mode */\n+\tenum rte_event_ml_adapter_mode mode;\n+\n+\t/* Memory allocation name */\n+\tchar mem_name[ML_ADAPTER_NAME_LEN];\n+\n+\t/* Socket identifier cached from eventdev */\n+\tint socket_id;\n+\n+\t/* Lock to serialize config updates with service function */\n+\trte_spinlock_t lock;\n+\n+\t/* ML device structure array */\n+\tstruct ml_device_info *mldevs;\n+\n+\t/* Circular buffer for processing ML ops to eventdev */\n+\tstruct ml_ops_circular_buffer ebuf;\n+\n+\t/* Configuration callback for rte_service configuration */\n+\trte_event_ml_adapter_conf_cb conf_cb;\n+\n+\t/* Configuration callback argument */\n+\tvoid *conf_arg;\n+\n+\t/* Set if  default_cb is being used */\n+\tint default_cb_arg;\n+} __rte_cache_aligned;\n+\n+static struct event_ml_adapter **event_ml_adapter;\n+\n+static inline int\n+emla_valid_id(uint8_t id)\n+{\n+\treturn id < RTE_EVENT_ML_ADAPTER_MAX_INSTANCE;\n+}\n+\n+static inline struct event_ml_adapter *\n+emla_id_to_adapter(uint8_t id)\n+{\n+\treturn event_ml_adapter ? event_ml_adapter[id] : NULL;\n+}\n+\n+static int\n+emla_array_init(void)\n+{\n+\tconst struct rte_memzone *mz;\n+\tuint32_t sz;\n+\n+\tmz = rte_memzone_lookup(ML_ADAPTER_ARRAY);\n+\tif (mz == NULL) {\n+\t\tsz = sizeof(struct event_ml_adapter *) * RTE_EVENT_ML_ADAPTER_MAX_INSTANCE;\n+\t\tsz = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE);\n+\n+\t\tmz = rte_memzone_reserve_aligned(ML_ADAPTER_ARRAY, sz, rte_socket_id(), 0,\n+\t\t\t\t\t\t RTE_CACHE_LINE_SIZE);\n+\t\tif (mz == NULL) {\n+\t\t\tRTE_EDEV_LOG_ERR(\"Failed to reserve memzone : %s, err = %d\",\n+\t\t\t\t\t ML_ADAPTER_ARRAY, rte_errno);\n+\t\t\treturn -rte_errno;\n+\t\t}\n+\t}\n+\n+\tevent_ml_adapter = mz->addr;\n+\n+\treturn 0;\n+}\n+\n+static inline int\n+emla_circular_buffer_init(const char *name, struct ml_ops_circular_buffer *buf, uint16_t sz)\n+{\n+\tbuf->op_buffer = rte_zmalloc(name, sizeof(struct rte_ml_op *) * sz, 0);\n+\tif (buf->op_buffer == NULL)\n+\t\treturn -ENOMEM;\n+\n+\tbuf->size = sz;\n+\n+\treturn 0;\n+}\n+\n+static inline void\n+emla_circular_buffer_free(struct ml_ops_circular_buffer *buf)\n+{\n+\trte_free(buf->op_buffer);\n+}\n+\n+static int\n+emla_default_config_cb(uint8_t id, uint8_t evdev_id, struct rte_event_ml_adapter_conf *conf,\n+\t\t       void *arg)\n+{\n+\tstruct rte_event_port_conf *port_conf;\n+\tstruct rte_event_dev_config dev_conf;\n+\tstruct event_ml_adapter *adapter;\n+\tstruct rte_eventdev *dev;\n+\tuint8_t port_id;\n+\tint started;\n+\tint ret;\n+\n+\tadapter = emla_id_to_adapter(id);\n+\tif (adapter == NULL)\n+\t\treturn -EINVAL;\n+\n+\tdev = &rte_eventdevs[adapter->eventdev_id];\n+\tdev_conf = dev->data->dev_conf;\n+\n+\tstarted = dev->data->dev_started;\n+\tif (started)\n+\t\trte_event_dev_stop(evdev_id);\n+\n+\tport_id = dev_conf.nb_event_ports;\n+\tdev_conf.nb_event_ports += 1;\n+\n+\tport_conf = arg;\n+\tif (port_conf->event_port_cfg & RTE_EVENT_PORT_CFG_SINGLE_LINK)\n+\t\tdev_conf.nb_single_link_event_port_queues += 1;\n+\n+\tret = rte_event_dev_configure(evdev_id, &dev_conf);\n+\tif (ret) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to configure event dev %u\", evdev_id);\n+\t\tif (started) {\n+\t\t\tif (rte_event_dev_start(evdev_id))\n+\t\t\t\treturn -EIO;\n+\t\t}\n+\t\treturn ret;\n+\t}\n+\n+\tret = rte_event_port_setup(evdev_id, port_id, port_conf);\n+\tif (ret) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to setup event port %u\", port_id);\n+\t\treturn ret;\n+\t}\n+\n+\tconf->event_port_id = port_id;\n+\tconf->max_nb = ML_DEFAULT_MAX_NB;\n+\tif (started)\n+\t\tret = rte_event_dev_start(evdev_id);\n+\n+\tadapter->default_cb_arg = 1;\n+\tadapter->event_port_id = conf->event_port_id;\n+\n+\treturn ret;\n+}\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+\tstruct rte_event_dev_info dev_info;\n+\tstruct event_ml_adapter *adapter;\n+\tchar name[ML_ADAPTER_NAME_LEN];\n+\tint socket_id;\n+\tuint8_t i;\n+\tint ret;\n+\n+\tif (!emla_valid_id(id)) {\n+\t\tRTE_EDEV_LOG_ERR(\"Invalid ML adapter id = %d\", id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(evdev_id, -EINVAL);\n+\n+\tif (conf_cb == NULL)\n+\t\treturn -EINVAL;\n+\n+\tif (event_ml_adapter == NULL) {\n+\t\tret = emla_array_init();\n+\t\tif (ret)\n+\t\t\treturn ret;\n+\t}\n+\n+\tadapter = emla_id_to_adapter(id);\n+\tif (adapter != NULL) {\n+\t\tRTE_EDEV_LOG_ERR(\"ML adapter ID %d already exists!\", id);\n+\t\treturn -EEXIST;\n+\t}\n+\n+\tsocket_id = rte_event_dev_socket_id(evdev_id);\n+\tsnprintf(name, ML_ADAPTER_NAME_LEN, \"rte_event_ml_adapter_%d\", id);\n+\tadapter = rte_zmalloc_socket(name, sizeof(struct event_ml_adapter), RTE_CACHE_LINE_SIZE,\n+\t\t\t\t     socket_id);\n+\tif (adapter == NULL) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to get mem for event ML adapter!\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tif (emla_circular_buffer_init(\"emla_circular_buffer\", &adapter->ebuf,\n+\t\t\t\t      ML_ADAPTER_BUFFER_SIZE)) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to get memory for event adapter circular buffer\");\n+\t\trte_free(adapter);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tret = rte_event_dev_info_get(evdev_id, &dev_info);\n+\tif (ret < 0) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to get info for eventdev %d: %s\", evdev_id,\n+\t\t\t\t dev_info.driver_name);\n+\t\temla_circular_buffer_free(&adapter->ebuf);\n+\t\trte_free(adapter);\n+\t\treturn ret;\n+\t}\n+\n+\tadapter->eventdev_id = evdev_id;\n+\tadapter->mode = mode;\n+\trte_strlcpy(adapter->mem_name, name, ML_ADAPTER_NAME_LEN);\n+\tadapter->socket_id = socket_id;\n+\tadapter->conf_cb = conf_cb;\n+\tadapter->conf_arg = conf_arg;\n+\tadapter->mldevs = rte_zmalloc_socket(adapter->mem_name,\n+\t\t\t\t\t     rte_ml_dev_count() * sizeof(struct ml_device_info), 0,\n+\t\t\t\t\t     socket_id);\n+\tif (adapter->mldevs == NULL) {\n+\t\tRTE_EDEV_LOG_ERR(\"Failed to get memory for ML devices\");\n+\t\temla_circular_buffer_free(&adapter->ebuf);\n+\t\trte_free(adapter);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\trte_spinlock_init(&adapter->lock);\n+\tfor (i = 0; i < rte_ml_dev_count(); i++)\n+\t\tadapter->mldevs[i].dev = rte_ml_dev_pmd_get_dev(i);\n+\n+\tevent_ml_adapter[id] = adapter;\n+\n+\treturn 0;\n+}\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+\tstruct rte_event_port_conf *pc;\n+\tint ret;\n+\n+\tif (port_config == NULL)\n+\t\treturn -EINVAL;\n+\n+\tif (!emla_valid_id(id)) {\n+\t\tRTE_EDEV_LOG_ERR(\"Invalid ML adapter id = %d\", id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tpc = rte_malloc(NULL, sizeof(struct rte_event_port_conf), 0);\n+\tif (pc == NULL)\n+\t\treturn -ENOMEM;\n+\n+\trte_memcpy(pc, port_config, sizeof(struct rte_event_port_conf));\n+\tret = rte_event_ml_adapter_create_ext(id, evdev_id, emla_default_config_cb, mode, pc);\n+\tif (ret != 0)\n+\t\trte_free(pc);\n+\n+\treturn ret;\n+}\n+\n+int\n+rte_event_ml_adapter_free(uint8_t id)\n+{\n+\tstruct event_ml_adapter *adapter;\n+\n+\tif (!emla_valid_id(id)) {\n+\t\tRTE_EDEV_LOG_ERR(\"Invalid ML adapter id = %d\", id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tadapter = emla_id_to_adapter(id);\n+\tif (adapter == NULL)\n+\t\treturn -EINVAL;\n+\n+\tif (adapter->default_cb_arg)\n+\t\trte_free(adapter->conf_arg);\n+\n+\trte_free(adapter->mldevs);\n+\trte_free(adapter);\n+\tevent_ml_adapter[id] = NULL;\n+\n+\treturn 0;\n+}\n",
    "prefixes": [
        "03/11"
    ]
}