get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 77291,
    "url": "http://patches.dpdk.org/api/patches/77291/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200911015316.1903181-4-patrick.fu@intel.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20200911015316.1903181-4-patrick.fu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200911015316.1903181-4-patrick.fu@intel.com",
    "date": "2020-09-11T01:53:15",
    "name": "[v1,3/4] vhost: fix async vec buf overrun",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "7d3bb0e9b1089a5a32623de52362d12f9308ddfa",
    "submitter": {
        "id": 1781,
        "url": "http://patches.dpdk.org/api/people/1781/?format=api",
        "name": "Patrick Fu",
        "email": "patrick.fu@intel.com"
    },
    "delegate": {
        "id": 2642,
        "url": "http://patches.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200911015316.1903181-4-patrick.fu@intel.com/mbox/",
    "series": [
        {
            "id": 12117,
            "url": "http://patches.dpdk.org/api/series/12117/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12117",
            "date": "2020-09-11T01:53:12",
            "name": "optimize async data path",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/12117/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/77291/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/77291/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 7ED0BA04B5;\n\tFri, 11 Sep 2020 04:01:17 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 47C4B1C1E7;\n\tFri, 11 Sep 2020 03:59:39 +0200 (CEST)",
            "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n by dpdk.org (Postfix) with ESMTP id 4CFFE1C1E3\n for <dev@dpdk.org>; Fri, 11 Sep 2020 03:59:37 +0200 (CEST)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 10 Sep 2020 18:59:36 -0700",
            "from npg-dpdk-patrickfu-casc2.sh.intel.com ([10.67.119.92])\n by orsmga002.jf.intel.com with ESMTP; 10 Sep 2020 18:59:35 -0700"
        ],
        "IronPort-SDR": [
            "\n EeLdAjNV9a8Wot2lXZV/IFYjBb46XO15NJTWfTg10a1eM3tOnK4YwxJAs9hAKMoTMiKGBdSn8G\n +mJhQC/lCYbA==",
            "\n Val2q729E/aGHiyj4bjAkTrsVRWY16d3zjCBBKG0munJfl2Kz4Fv/Qitlz6J/jc2nmHAh+Kj8B\n ZjRuLdpY3w9g=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9740\"; a=\"156072290\"",
            "E=Sophos;i=\"5.76,413,1592895600\"; d=\"scan'208\";a=\"156072290\"",
            "E=Sophos;i=\"5.76,413,1592895600\"; d=\"scan'208\";a=\"318121873\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Patrick Fu <patrick.fu@intel.com>",
        "To": "dev@dpdk.org,\n\tmaxime.coquelin@redhat.com,\n\tchenbo.xia@intel.com",
        "Cc": "zhihong.wang@intel.com,\n\tcheng1.jiang@intel.com,\n\tpatrick.fu@intel.com",
        "Date": "Fri, 11 Sep 2020 09:53:15 +0800",
        "Message-Id": "<20200911015316.1903181-4-patrick.fu@intel.com>",
        "X-Mailer": "git-send-email 2.18.4",
        "In-Reply-To": "<20200911015316.1903181-1-patrick.fu@intel.com>",
        "References": "<20200911015316.1903181-1-patrick.fu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v1 3/4] vhost: fix async vec buf overrun",
        "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://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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add check on the async vec buffer usage to prevent the buf overrun.\nIf vec buf is not sufficient to prepare for next packet's iov\ncreation, an async transfer will be triggered immediately to free\nthe vec buf.\n\nFixes: 78639d54563a (\"vhost: introduce async enqueue registration API\")\n\nSigned-off-by: Patrick Fu <patrick.fu@intel.com>\n---\n lib/librte_vhost/vhost.h      | 2 +-\n lib/librte_vhost/virtio_net.c | 7 ++++++-\n 2 files changed, 7 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h\nindex 0af0ac23d..5e669e28f 100644\n--- a/lib/librte_vhost/vhost.h\n+++ b/lib/librte_vhost/vhost.h\n@@ -47,7 +47,7 @@\n #define MAX_PKT_BURST 32\n \n #define VHOST_MAX_ASYNC_IT (MAX_PKT_BURST * 2)\n-#define VHOST_MAX_ASYNC_VEC (BUF_VECTOR_MAX * 2)\n+#define VHOST_MAX_ASYNC_VEC (BUF_VECTOR_MAX * 4)\n \n #define PACKED_DESC_ENQUEUE_USED_FLAG(w)\t\\\n \t((w) ? (VRING_DESC_F_AVAIL | VRING_DESC_F_USED | VRING_DESC_F_WRITE) : \\\ndiff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c\nindex 70c3377fb..18b91836a 100644\n--- a/lib/librte_vhost/virtio_net.c\n+++ b/lib/librte_vhost/virtio_net.c\n@@ -1492,6 +1492,7 @@ virtio_dev_rx_async_submit_split(struct virtio_net *dev,\n \tstruct rte_vhost_iov_iter *dst_it = it_pool + 1;\n \tuint16_t n_free_slot, slot_idx;\n \tuint16_t pkt_err = 0;\n+\tuint16_t segs_await = 0;\n \tstruct async_inflight_info *pkts_info = vq->async_pkts_info;\n \tint n_pkts = 0;\n \n@@ -1540,6 +1541,7 @@ virtio_dev_rx_async_submit_split(struct virtio_net *dev,\n \t\t\tdst_iovec += dst_it->nr_segs;\n \t\t\tsrc_it += 2;\n \t\t\tdst_it += 2;\n+\t\t\tsegs_await += src_it->nr_segs;\n \t\t} else {\n \t\t\tpkts_info[slot_idx].info = num_buffers;\n \t\t\tvq->async_pkts_inflight_n++;\n@@ -1548,13 +1550,16 @@ virtio_dev_rx_async_submit_split(struct virtio_net *dev,\n \t\tvq->last_avail_idx += num_buffers;\n \n \t\tif (pkt_burst_idx >= VHOST_ASYNC_BATCH_THRESHOLD ||\n-\t\t\t\t(pkt_idx == count - 1 && pkt_burst_idx)) {\n+\t\t\t\t(pkt_idx == count - 1 && pkt_burst_idx) ||\n+\t\t\t\tVHOST_MAX_ASYNC_VEC / 2 - segs_await <\n+\t\t\t\tBUF_VECTOR_MAX) {\n \t\t\tn_pkts = vq->async_ops.transfer_data(dev->vid,\n \t\t\t\t\tqueue_id, tdes, 0, pkt_burst_idx);\n \t\t\tsrc_iovec = vec_pool;\n \t\t\tdst_iovec = vec_pool + (VHOST_MAX_ASYNC_VEC >> 1);\n \t\t\tsrc_it = it_pool;\n \t\t\tdst_it = it_pool + 1;\n+\t\t\tsegs_await = 0;\n \t\t\tvq->async_pkts_inflight_n += n_pkts;\n \n \t\t\tif (unlikely(n_pkts < (int)pkt_burst_idx)) {\n",
    "prefixes": [
        "v1",
        "3/4"
    ]
}