get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 72800,
    "url": "http://patches.dpdk.org/api/patches/72800/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200702083237.1215652-4-amorenoz@redhat.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": "<20200702083237.1215652-4-amorenoz@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200702083237.1215652-4-amorenoz@redhat.com",
    "date": "2020-07-02T08:32:32",
    "name": "[v2,3/8] vhost: make some vDPA callbacks mandatory",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2ffe7025b90f95f97e945a5e3d09690cfb51d4de",
    "submitter": {
        "id": 1397,
        "url": "http://patches.dpdk.org/api/people/1397/?format=api",
        "name": "Adrian Moreno",
        "email": "amorenoz@redhat.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/20200702083237.1215652-4-amorenoz@redhat.com/mbox/",
    "series": [
        {
            "id": 10732,
            "url": "http://patches.dpdk.org/api/series/10732/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=10732",
            "date": "2020-07-02T08:32:30",
            "name": "vhost: improve Vhost/vDPA device init",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/10732/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/72800/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/72800/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 4C368A0524;\n\tThu,  2 Jul 2020 10:33:29 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id CC2921D6B6;\n\tThu,  2 Jul 2020 10:33:07 +0200 (CEST)",
            "from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com\n [207.211.31.120]) by dpdk.org (Postfix) with ESMTP id 9E9601D626\n for <dev@dpdk.org>; Thu,  2 Jul 2020 10:33:04 +0200 (CEST)",
            "from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com\n [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id\n us-mta-129-0dKcixLnNbW6ntN7c4ATjA-1; Thu, 02 Jul 2020 04:33:02 -0400",
            "from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com\n [10.5.11.22])\n (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n (No client certificate requested)\n by mimecast-mx01.redhat.com (Postfix) with ESMTPS id ED512BFC0;\n Thu,  2 Jul 2020 08:33:00 +0000 (UTC)",
            "from amorenoz.users.ipa.redhat.com (ovpn-112-91.ams2.redhat.com\n [10.36.112.91])\n by smtp.corp.redhat.com (Postfix) with ESMTP id E198C1010404;\n Thu,  2 Jul 2020 08:32:58 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1593678784;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=54JmYdPAtdYk2Jh/6B5HJsXElw4bKax1iXEC5uCLclA=;\n b=SUHlZKOtBnY4UsJssZLif1ssJ/jYlIrXtQQ4Xjt5ogWncVXWykb2rOrqwagnKRW7J6J71J\n GTmlmn5LZEEzgzetbUV94skzor8P/vgxtqnaUojDQ8ld3P9kC7lS1ANriAaaL3atragZHV\n y6wMixaQJcAZQNpPIcgIIP9kxo1vM20=",
        "X-MC-Unique": "0dKcixLnNbW6ntN7c4ATjA-1",
        "From": "Adrian Moreno <amorenoz@redhat.com>",
        "To": "dev@dpdk.org, xiaolong.ye@intel.com, shahafs@mellanox.com,\n matan@mellanox.com, maxime.coquelin@redhat.com, xiao.w.wang@intel.com,\n viacheslavo@mellanox.com",
        "Cc": "jasowang@redhat.com, lulu@redhat.com, Adrian Moreno <amorenoz@redhat.com>",
        "Date": "Thu,  2 Jul 2020 10:32:32 +0200",
        "Message-Id": "<20200702083237.1215652-4-amorenoz@redhat.com>",
        "In-Reply-To": "<20200702083237.1215652-1-amorenoz@redhat.com>",
        "References": "<20200702083237.1215652-1-amorenoz@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 2.84 on 10.5.11.22",
        "Authentication-Results": "relay.mimecast.com;\n auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=amorenoz@redhat.com",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Type": "text/plain; charset=US-ASCII",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v2 3/8] vhost: make some vDPA callbacks mandatory",
        "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": "From: Maxime Coquelin <maxime.coquelin@redhat.com>\n\nSome of the vDPA callbacks have to be implemented\nfor vDPA to work properly.\n\nThis patch marks them as mandatory in the API doc and\nsimplify code calling these ops with removing\nunnecessary checks that are now done at registration\ntime.\n\nSigned-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>\nSigned-off-by: Adrian Moreno <amorenoz@redhat.com>\n---\n lib/librte_vhost/rte_vdpa_dev.h | 14 ++++++++------\n lib/librte_vhost/socket.c       |  6 +++---\n lib/librte_vhost/vdpa.c         | 10 ++++++++++\n lib/librte_vhost/vhost.c        |  2 +-\n lib/librte_vhost/vhost_user.c   |  6 ++----\n 5 files changed, 24 insertions(+), 14 deletions(-)",
    "diff": "diff --git a/lib/librte_vhost/rte_vdpa_dev.h b/lib/librte_vhost/rte_vdpa_dev.h\nindex 65557cb05..89444c2ea 100644\n--- a/lib/librte_vhost/rte_vdpa_dev.h\n+++ b/lib/librte_vhost/rte_vdpa_dev.h\n@@ -15,24 +15,26 @@\n  * vdpa device operations\n  */\n struct rte_vdpa_dev_ops {\n-\t/** Get capabilities of this device */\n+\t/** Get capabilities of this device (Mandatory) */\n \tint (*get_queue_num)(struct rte_vdpa_device *dev, uint32_t *queue_num);\n \n-\t/** Get supported features of this device */\n+\t/** Get supported features of this device (Mandatory) */\n \tint (*get_features)(struct rte_vdpa_device *dev, uint64_t *features);\n \n-\t/** Get supported protocol features of this device */\n+\t/** Get supported protocol features of this device (Mandatory) */\n \tint (*get_protocol_features)(struct rte_vdpa_device *dev,\n \t\t\tuint64_t *protocol_features);\n \n-\t/** Driver configure/close the device */\n+\t/** Driver configure the device (Mandatory) */\n \tint (*dev_conf)(int vid);\n+\n+\t/** Driver close the device (Mandatory) */\n \tint (*dev_close)(int vid);\n \n-\t/** Enable/disable this vring */\n+\t/** Enable/disable this vring (Mandatory) */\n \tint (*set_vring_state)(int vid, int vring, int state);\n \n-\t/** Set features when changed */\n+\t/** Set features when changed (Mandatory) */\n \tint (*set_features)(int vid);\n \n \t/** Destination operations when migration done */\ndiff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c\nindex 49267cebf..047d9395d 100644\n--- a/lib/librte_vhost/socket.c\n+++ b/lib/librte_vhost/socket.c\n@@ -701,7 +701,7 @@ rte_vhost_driver_get_features(const char *path, uint64_t *features)\n \t}\n \n \tvdpa_dev = vsocket->vdpa_dev;\n-\tif (!vdpa_dev || !vdpa_dev->ops->get_features) {\n+\tif (!vdpa_dev) {\n \t\t*features = vsocket->features;\n \t\tgoto unlock_exit;\n \t}\n@@ -754,7 +754,7 @@ rte_vhost_driver_get_protocol_features(const char *path,\n \t}\n \n \tvdpa_dev = vsocket->vdpa_dev;\n-\tif (!vdpa_dev || !vdpa_dev->ops->get_protocol_features) {\n+\tif (!vdpa_dev) {\n \t\t*protocol_features = vsocket->protocol_features;\n \t\tgoto unlock_exit;\n \t}\n@@ -794,7 +794,7 @@ rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num)\n \t}\n \n \tvdpa_dev = vsocket->vdpa_dev;\n-\tif (!vdpa_dev || !vdpa_dev->ops->get_queue_num) {\n+\tif (!vdpa_dev) {\n \t\t*queue_num = VHOST_MAX_QUEUE_PAIRS;\n \t\tgoto unlock_exit;\n \t}\ndiff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c\nindex ef21ca2a1..ae6fdd24e 100644\n--- a/lib/librte_vhost/vdpa.c\n+++ b/lib/librte_vhost/vdpa.c\n@@ -77,6 +77,16 @@ rte_vdpa_register_device(struct rte_device *rte_dev,\n \tif (ops == NULL)\n \t\treturn NULL;\n \n+\t/* Check mandatory ops are implemented */\n+\tif (!ops->get_queue_num || !ops->get_features ||\n+\t\t\t!ops->get_protocol_features || !ops->dev_conf ||\n+\t\t\t!ops->dev_close || !ops->set_vring_state ||\n+\t\t\t!ops->set_features) {\n+\t\tVHOST_LOG_CONFIG(ERR,\n+\t\t\t\t\"Some mandatory vDPA ops aren't implemented\\n\");\n+\t\treturn NULL;\n+\t}\n+\n \trte_spinlock_lock(&vdpa_device_list_lock);\n \t/* Check the device hasn't been register already */\n \tdev = __vdpa_find_device_by_name(rte_dev->name);\ndiff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c\nindex aa1424261..da461e843 100644\n--- a/lib/librte_vhost/vhost.c\n+++ b/lib/librte_vhost/vhost.c\n@@ -646,7 +646,7 @@ vhost_destroy_device_notify(struct virtio_net *dev)\n \n \tif (dev->flags & VIRTIO_DEV_RUNNING) {\n \t\tvdpa_dev = dev->vdpa_dev;\n-\t\tif (vdpa_dev && vdpa_dev->ops->dev_close)\n+\t\tif (vdpa_dev)\n \t\t\tvdpa_dev->ops->dev_close(dev->vid);\n \t\tdev->flags &= ~VIRTIO_DEV_RUNNING;\n \t\tdev->notify_ops->destroy_device(dev->vid);\ndiff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c\nindex ff8b1752b..6be5c771b 100644\n--- a/lib/librte_vhost/vhost_user.c\n+++ b/lib/librte_vhost/vhost_user.c\n@@ -398,7 +398,7 @@ vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg,\n \t}\n \n \tvdpa_dev = dev->vdpa_dev;\n-\tif (vdpa_dev && vdpa_dev->ops->set_features)\n+\tif (vdpa_dev)\n \t\tvdpa_dev->ops->set_features(dev->vid);\n \n \treturn RTE_VHOST_MSG_RESULT_OK;\n@@ -2849,9 +2849,7 @@ vhost_user_msg_handler(int vid, int fd)\n \t\tgoto out;\n \n \tif (!(dev->flags & VIRTIO_DEV_VDPA_CONFIGURED)) {\n-\t\tif (vdpa_dev->ops->dev_conf)\n-\t\t\tvdpa_dev->ops->dev_conf(dev->vid);\n-\n+\t\tvdpa_dev->ops->dev_conf(dev->vid);\n \t\tdev->flags |= VIRTIO_DEV_VDPA_CONFIGURED;\n \t}\n \n",
    "prefixes": [
        "v2",
        "3/8"
    ]
}