get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 40728,
    "url": "https://patches.dpdk.org/api/patches/40728/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20180607094322.14312-15-mk@semihalf.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": "<20180607094322.14312-15-mk@semihalf.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180607094322.14312-15-mk@semihalf.com",
    "date": "2018-06-07T09:43:10",
    "name": "[dpdk-dev,v3,15/27] net/ena: linearize Tx mbuf",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "8124f9d814189a1b517a9abefb4755b40ce90ac0",
    "submitter": {
        "id": 786,
        "url": "https://patches.dpdk.org/api/people/786/?format=api",
        "name": "Michal Krawczyk",
        "email": "mk@semihalf.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20180607094322.14312-15-mk@semihalf.com/mbox/",
    "series": [
        {
            "id": 26,
            "url": "https://patches.dpdk.org/api/series/26/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=26",
            "date": "2018-06-07T09:43:00",
            "name": "net/ena: new features and fixes",
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/26/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/40728/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/40728/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E5AFA1B3D6;\n\tThu,  7 Jun 2018 11:43:56 +0200 (CEST)",
            "from mail-lf0-f49.google.com (mail-lf0-f49.google.com\n\t[209.85.215.49]) by dpdk.org (Postfix) with ESMTP id B997D1B29F\n\tfor <dev@dpdk.org>; Thu,  7 Jun 2018 11:43:52 +0200 (CEST)",
            "by mail-lf0-f49.google.com with SMTP id n15-v6so13630853lfn.10\n\tfor <dev@dpdk.org>; Thu, 07 Jun 2018 02:43:52 -0700 (PDT)",
            "from mkPC.semihalf.local (31-172-191-173.noc.fibertech.net.pl.\n\t[31.172.191.173]) by smtp.gmail.com with ESMTPSA id\n\tp28-v6sm3612368lfh.24.2018.06.07.02.43.50\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tThu, 07 Jun 2018 02:43:51 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=semihalf-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=p8OtjOMsPxmK9PD1AELCqbAvCctoqiy8t0TFI8EKN78=;\n\tb=O1i1mzxX8HEhgo7UWRjo82SYg0qllirUbSlDxmztxybLSJ5rKb7ydktTpUc+0nZqEk\n\tZigxJ2favNUBNapfJcQzjhMqQxb6BlZKeLTVpCsS4RmEfHoE2t31KSZcwHuj1VOzQOYb\n\tee6De1Q7ZqnTxlqAQnZq4e4ekWLYP5sVHARFJJez3CROLUaq4qdrGda7x0seEljKn08g\n\tLySh0b7UNwo7RHLBmsbne/0AlYsxAj9WXK+f/Z9doOiBa0YsZbcC2r4EZoOW7GpEvTEu\n\ttloEKBohmkX5EGJXT90Os1O5S+ycOrLsZIU57gIq1oJWvjHZrHksvpSvr7WvYuEyY5kH\n\tkBrA==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=p8OtjOMsPxmK9PD1AELCqbAvCctoqiy8t0TFI8EKN78=;\n\tb=aHXWBk1RlIxJrrWunPlPTSPe04lS8UZzSEbCookdY1hUhIx0YplGFU7iO1zP9U6BJi\n\tDox93xsnSbt7iEJ+jlhzFEogKmVkKgdHv59gJ/ZSGlg+SeQj3CfgwzyUh/5sX+0xYZ/T\n\ttuWEQ5to6RarFBSrMGqrqPAC5eKj0nSJIIfVSGvoaTP7hVI6ZQMuIHisb50KPJQOlFc2\n\tnak/dwmHUNpJVrAV6iOVgVkqdkvIp2KlYm1+rbBgY0KpdM+5phTa8xq48zuoXaHeZXce\n\tTeu4GfE5F45awPDZ68Lw/UJjh26t6zq4Fro5BfxYXzBjMm0S/fuSV4J/XcBKeyZchIQX\n\twExA==",
        "X-Gm-Message-State": "APt69E2x5fMDrHuoHpxqZ0AXoETJct1ouUCLFJZDT2Emwovc2qUUqa42\n\ts7WtrMYBD1ZzgSyDQmSLnHH9Kg==",
        "X-Google-Smtp-Source": "ADUXVKII8OpXPu1XIG6F1P4nOP0D7XFqbHAfBGXdCeqoN5SDIhMzMILZq7dDkt9lgHetKhEFfo7+/g==",
        "X-Received": "by 2002:a19:4e86:: with SMTP id\n\tu6-v6mr863099lfk.105.1528364632357; \n\tThu, 07 Jun 2018 02:43:52 -0700 (PDT)",
        "From": "Michal Krawczyk <mk@semihalf.com>",
        "To": "Marcin Wojtas <mw@semihalf.com>, Michal Krawczyk <mk@semihalf.com>,\n\tGuy Tzalik <gtzalik@amazon.com>, Evgeny Schemeilin <evgenys@amazon.com>",
        "Cc": "dev@dpdk.org,\n\tmatua@amazon.com,\n\tRafal Kozik <rk@semihalf.com>",
        "Date": "Thu,  7 Jun 2018 11:43:10 +0200",
        "Message-Id": "<20180607094322.14312-15-mk@semihalf.com>",
        "X-Mailer": "git-send-email 2.14.1",
        "In-Reply-To": "<20180607094322.14312-1-mk@semihalf.com>",
        "References": "<20180607094322.14312-1-mk@semihalf.com>",
        "Subject": "[dpdk-dev] [PATCH v3 15/27] net/ena: linearize Tx mbuf",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Rafal Kozik <rk@semihalf.com>\n\nFunction ena_check_and_linearize_mbuf check Tx mbuf for number of\nsegments and linearize (defragment) it if necessary. It is called\nbefore sending each packet.\n\nInformation about maximum number of segments is stored per each ring.\n\nMaximum number of segments supported by NIC is taken from ENA COM in\nena_calc_queue_size function and stored in adapter structure.\n\nSigned-off-by: Rafal Kozik <rk@semihalf.com>\nAcked-by: Michal Krawczyk <mk@semihalf.com>\n---\n drivers/net/ena/ena_ethdev.c | 31 ++++++++++++++++++++++++++++++-\n drivers/net/ena/ena_ethdev.h |  2 ++\n 2 files changed, 32 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c\nindex f0e95ef58..cdefcd325 100644\n--- a/drivers/net/ena/ena_ethdev.c\n+++ b/drivers/net/ena/ena_ethdev.c\n@@ -894,6 +894,7 @@ static int ena_check_valid_conf(struct ena_adapter *adapter)\n \n static int\n ena_calc_queue_size(struct ena_com_dev *ena_dev,\n+\t\t    u16 *max_tx_sgl_size,\n \t\t    struct ena_com_dev_get_features_ctx *get_feat_ctx)\n {\n \tuint32_t queue_size = ENA_DEFAULT_RING_SIZE;\n@@ -916,6 +917,9 @@ ena_calc_queue_size(struct ena_com_dev *ena_dev,\n \t\treturn -EFAULT;\n \t}\n \n+\t*max_tx_sgl_size = RTE_MIN(ENA_PKT_MAX_BUFS,\n+\t\tget_feat_ctx->max_queues.max_packet_tx_descs);\n+\n \treturn queue_size;\n }\n \n@@ -1491,6 +1495,7 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \tstruct ena_com_dev *ena_dev = &adapter->ena_dev;\n \tstruct ena_com_dev_get_features_ctx get_feat_ctx;\n \tint queue_size, rc;\n+\tu16 tx_sgl_size = 0;\n \n \tstatic int adapters_found;\n \tbool wd_state;\n@@ -1547,13 +1552,15 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \tena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;\n \tadapter->num_queues = get_feat_ctx.max_queues.max_sq_num;\n \n-\tqueue_size = ena_calc_queue_size(ena_dev, &get_feat_ctx);\n+\tqueue_size = ena_calc_queue_size(ena_dev, &tx_sgl_size, &get_feat_ctx);\n \tif ((queue_size <= 0) || (adapter->num_queues <= 0))\n \t\treturn -EFAULT;\n \n \tadapter->tx_ring_size = queue_size;\n \tadapter->rx_ring_size = queue_size;\n \n+\tadapter->max_tx_sgl_size = tx_sgl_size;\n+\n \t/* prepare ring structures */\n \tena_init_rings(adapter);\n \n@@ -1652,6 +1659,7 @@ static void ena_init_rings(struct ena_adapter *adapter)\n \t\tring->id = i;\n \t\tring->tx_mem_queue_type = adapter->ena_dev.tx_mem_queue_type;\n \t\tring->tx_max_header_size = adapter->ena_dev.tx_max_header_size;\n+\t\tring->sgl_size = adapter->max_tx_sgl_size;\n \t}\n \n \tfor (i = 0; i < adapter->num_queues; i++) {\n@@ -1923,6 +1931,23 @@ static void ena_update_hints(struct ena_adapter *adapter,\n \t}\n }\n \n+static int ena_check_and_linearize_mbuf(struct ena_ring *tx_ring,\n+\t\t\t\t\tstruct rte_mbuf *mbuf)\n+{\n+\tint num_segments, rc;\n+\n+\tnum_segments = mbuf->nb_segs;\n+\n+\tif (likely(num_segments < tx_ring->sgl_size))\n+\t\treturn 0;\n+\n+\trc = rte_pktmbuf_linearize(mbuf);\n+\tif (unlikely(rc))\n+\t\tRTE_LOG(WARNING, PMD, \"Mbuf linearize failed\\n\");\n+\n+\treturn rc;\n+}\n+\n static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \t\t\t\t  uint16_t nb_pkts)\n {\n@@ -1953,6 +1978,10 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \tfor (sent_idx = 0; sent_idx < nb_pkts; sent_idx++) {\n \t\tmbuf = tx_pkts[sent_idx];\n \n+\t\trc = ena_check_and_linearize_mbuf(tx_ring, mbuf);\n+\t\tif (unlikely(rc))\n+\t\t\tbreak;\n+\n \t\treq_id = tx_ring->empty_tx_reqs[next_to_use & ring_mask];\n \t\ttx_info = &tx_ring->tx_buffer_info[req_id];\n \t\ttx_info->mbuf = mbuf;\ndiff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h\nindex bba5ad53a..73c110ab9 100644\n--- a/drivers/net/ena/ena_ethdev.h\n+++ b/drivers/net/ena/ena_ethdev.h\n@@ -101,6 +101,7 @@ struct ena_ring {\n \tint configured;\n \tstruct ena_adapter *adapter;\n \tuint64_t offloads;\n+\tu16 sgl_size;\n } __rte_cache_aligned;\n \n enum ena_adapter_state {\n@@ -167,6 +168,7 @@ struct ena_adapter {\n \t/* TX */\n \tstruct ena_ring tx_ring[ENA_MAX_NUM_QUEUES] __rte_cache_aligned;\n \tint tx_ring_size;\n+\tu16 max_tx_sgl_size;\n \n \t/* RX */\n \tstruct ena_ring rx_ring[ENA_MAX_NUM_QUEUES] __rte_cache_aligned;\n",
    "prefixes": [
        "dpdk-dev",
        "v3",
        "15/27"
    ]
}