get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 95464,
    "url": "http://patchwork.dpdk.org/api/patches/95464/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20210706164418.32615-4-vsrivast@xilinx.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": "<20210706164418.32615-4-vsrivast@xilinx.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210706164418.32615-4-vsrivast@xilinx.com",
    "date": "2021-07-06T16:44:11",
    "name": "[03/10] vdpa/sfc: add support to get device and protocol features",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "78527019b8fee1eca0a6176d423db2a7753e7c43",
    "submitter": {
        "id": 2281,
        "url": "http://patchwork.dpdk.org/api/people/2281/?format=api",
        "name": "Vijay Srivastava",
        "email": "vijay.srivastava@xilinx.com"
    },
    "delegate": {
        "id": 2642,
        "url": "http://patchwork.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20210706164418.32615-4-vsrivast@xilinx.com/mbox/",
    "series": [
        {
            "id": 17687,
            "url": "http://patchwork.dpdk.org/api/series/17687/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=17687",
            "date": "2021-07-06T16:44:08",
            "name": "vdpa/sfc: introduce Xilinx vDPA driver",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/17687/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/95464/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/95464/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 06467A0C4A;\n\tWed,  7 Jul 2021 10:25:43 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B1A4841484;\n\tWed,  7 Jul 2021 10:25:32 +0200 (CEST)",
            "from NAM11-BN8-obe.outbound.protection.outlook.com\n (mail-bn8nam11on2056.outbound.protection.outlook.com [40.107.236.56])\n by mails.dpdk.org (Postfix) with ESMTP id BF5994120E\n for <dev@dpdk.org>; Tue,  6 Jul 2021 18:49:21 +0200 (CEST)",
            "from BN1PR13CA0015.namprd13.prod.outlook.com (2603:10b6:408:e2::20)\n by CO6PR02MB7700.namprd02.prod.outlook.com (2603:10b6:303:a7::14)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.22; Tue, 6 Jul\n 2021 16:49:19 +0000",
            "from BN1NAM02FT022.eop-nam02.prod.protection.outlook.com\n (2603:10b6:408:e2:cafe::cf) by BN1PR13CA0015.outlook.office365.com\n (2603:10b6:408:e2::20) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.7 via Frontend\n Transport; Tue, 6 Jul 2021 16:49:19 +0000",
            "from xsj-pvapexch01.xlnx.xilinx.com (149.199.62.198) by\n BN1NAM02FT022.mail.protection.outlook.com (10.13.2.136) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 16:49:19 +0000",
            "from xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) by\n xsj-pvapexch01.xlnx.xilinx.com (172.19.86.40) with Microsoft SMTP Server\n (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.1.2176.2; Tue, 6 Jul 2021 09:49:17 -0700",
            "from smtp.xilinx.com (172.19.127.96) by\n xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) with Microsoft SMTP Server id\n 15.1.2176.2 via Frontend Transport; Tue, 6 Jul 2021 09:49:17 -0700",
            "from [10.177.4.108] (port=54950 helo=xndengvm004108.xilinx.com)\n by smtp.xilinx.com with esmtp (Exim 4.90)\n (envelope-from <vijay.srivastava@xilinx.com>)\n id 1m0oG5-0000pF-4X; Tue, 06 Jul 2021 09:49:17 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=oao/+GZwOexvFfCrvFdtjM8UKrFHd7KkGf6v0dGrCOu357NqQkl1QwPLlj3lrves+zfDCHPyzJv0gsXyyjQGy1Ugh1OvVT9e/Fqzk2hpCq/TOJ6nrSUOSYmeoP5clbaKBd7VohgsTgBJ5+Q6EYu1QfMmtpzgKQNkLtNXxYmNCLSCa/oqAu7XaSR7wtyBxUKzYaWbJEtkua/FfBoTB72JwtmLd/I1kcuMV9BvbZCzYkC6h8j0bekFwDMiPpJh7QK/meItuoYDetJVwqwineLR47Hx5YGTCUbG3bb/PhESgxQhzzCj3ukLNH6ZbVYa902tPKa5w2nSAq1B7dXOq5BGgg==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=G2RmbTQ8/HVqBDUSMprUqc3IZuq5bxG47l9rb1f126Q=;\n b=LG786V/dX0jhnXdi6H7Q8J4c8RM2spPOjUXqU0t/76Wfvnuz+11AxhuqoM4jb+IHKhVIrrjsyhBENY8Vy+ANHR7GZTDu1uqFaTwROPzJudC+JSr+lNtfkNf8L9CHeUICUyRH6OT1+9w0RNpE8jQpTtQx92Lvli36RkN9L0DpzlH0x+RkRQ0ve9pHrNECXlmbihKFKJYTT/5NyLln9drMAtzYBi8WPax30tfwF3sINtZvitBC0UMwUtwPcDApgBJm/xQI0x6aFZU7bVRrFaUOhZ/raYJagHO6J4q5x42WXKPPVFFmednltWgI2DZH250o6p9G+sFse/KpGju7vQFFYw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 149.199.62.198) smtp.rcpttodomain=dpdk.org smtp.mailfrom=xilinx.com;\n dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com;\n dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=G2RmbTQ8/HVqBDUSMprUqc3IZuq5bxG47l9rb1f126Q=;\n b=be5wtuQQnS+tTPuWCWU/mDTC9XX56rtKrcxoAsvZI0ai1r+r4d/KnbPzPsORo4A5flnFNYR6lrfPLtnjIX1765nYf/qOjP0br0E/L0jlCkm7BozcIiSfx8scqt905O9L3jKHGRRbz7Ydj/QIUAmskmclumuPklZjXu0TV9F38JE=",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 149.199.62.198)\n smtp.mailfrom=xilinx.com; dpdk.org; dkim=none (message not signed)\n header.d=none;dpdk.org; dmarc=pass action=none header.from=xilinx.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of xilinx.com designates\n 149.199.62.198 as permitted sender) receiver=protection.outlook.com;\n client-ip=149.199.62.198; helo=xsj-pvapexch01.xlnx.xilinx.com;",
        "Envelope-to": "dev@dpdk.org, maxime.coquelin@redhat.com, chenbo.xia@intel.com,\n andrew.rybchenko@oktetlabs.ru",
        "From": "Vijay Srivastava <vijay.srivastava@xilinx.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<maxime.coquelin@redhat.com>, <chenbo.xia@intel.com>,\n <andrew.rybchenko@oktetlabs.ru>, Vijay Kumar Srivastava <vsrivast@xilinx.com>",
        "Date": "Tue, 6 Jul 2021 22:14:11 +0530",
        "Message-ID": "<20210706164418.32615-4-vsrivast@xilinx.com>",
        "X-Mailer": "git-send-email 2.25.0",
        "In-Reply-To": "<20210706164418.32615-1-vsrivast@xilinx.com>",
        "References": "<20210706164418.32615-1-vsrivast@xilinx.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "b147b3bc-8c13-4530-e0bf-08d9409dffa0",
        "X-MS-TrafficTypeDiagnostic": "CO6PR02MB7700:",
        "X-Microsoft-Antispam-PRVS": "\n <CO6PR02MB7700AD295DC3FFB03E881BD8B91B9@CO6PR02MB7700.namprd02.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:1751;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 73XNugL7cpEXtewSYuuL6EvY8wNmLXlMlhsJAp2TDXWz4EyvdDnnaHk/tet36W38acqdpXqFAIZQtL0JyOiDGhnlhHTGcs/ReAfPQBMCy8OXVr+uzxwG9Is2E8kQo/cWGTIUBsYvDNzWYHAMGQhkoqNaIc4+e2eefN4Jl6U2LRA0nvWS9lgQeG9ju1eUuK3qiPHrGJ+sUH35lROy2SA0M0Wgq+/wQQvaDkCF5cxgp0ZJf4XuGC7RO32JN1qJg+4Lts9XBVghYiZPpONb8nzq1l1LSP5nGLeUoTjSslMypfF70oV4ADxPzwoypDJ91kgoveCsdIih7X10zn/lmjHEibNBT3paFT9CAHLbSO7eq+0804hksOW++EOzFkesQ6CMcc1aPldIqdwN3SY0ok2dfF/Mgo0gOGyAUOmZbLyRgkdxmCT8siZsA8dQz6uMebuJrEzrW925mjV3jFo7p8NMA8XQY0E3Xxnh890NhtEE0m30i6z6eZf6RSs3AOnFJa1ZKSlBPHDl4xYLAKKcf0hvbJhE8MUpJnRf+T8lRPwgcXFgT738jGyEoj2kcKyeLjELyvurKlruXos+dgRsNUk0kXYv6ur7Y7TQ0Y4B3O/n2ADvBxUFXNqcvf9H6A7xtZm5xbfB/fDPuZDCRrKdsJcTvLrSwbPfP6zW5c6fV7+ng613hLubW3vRXLVL0R/seIdHn1URcReJZzOJC7irmWwu7fvZv6gysM/9AD5wvgjkPd0=",
        "X-Forefront-Antispam-Report": "CIP:149.199.62.198; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:xsj-pvapexch01.xlnx.xilinx.com;\n PTR:unknown-62-198.xilinx.com; CAT:NONE;\n SFS:(4636009)(46966006)(36840700001)(2616005)(26005)(426003)(44832011)(8936002)(336012)(6916009)(1076003)(356005)(36756003)(83380400001)(6666004)(7636003)(186003)(9786002)(8676002)(2906002)(70206006)(47076005)(82310400003)(36860700001)(36906005)(107886003)(54906003)(70586007)(5660300002)(7696005)(498600001)(4326008)(102446001);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "xilinx.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "06 Jul 2021 16:49:19.0923 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n b147b3bc-8c13-4530-e0bf-08d9409dffa0",
        "X-MS-Exchange-CrossTenant-Id": "657af505-d5df-48d0-8300-c31994686c5c",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.62.198];\n Helo=[xsj-pvapexch01.xlnx.xilinx.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BN1NAM02FT022.eop-nam02.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CO6PR02MB7700",
        "X-Mailman-Approved-At": "Wed, 07 Jul 2021 10:25:28 +0200",
        "Subject": "[dpdk-dev] [PATCH 03/10] vdpa/sfc: add support to get device and\n protocol features",
        "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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Vijay Kumar Srivastava <vsrivast@xilinx.com>\n\nImplement vDPA ops get_feature and get_protocol_features.\nThis patch retrieves device supported features and enables\nprotocol features.\n\nSigned-off-by: Vijay Kumar Srivastava <vsrivast@xilinx.com>\n---\n doc/guides/vdpadevs/features/sfc.ini | 10 ++++\n drivers/common/sfc_efx/efsys.h       |  2 +-\n drivers/common/sfc_efx/version.map   | 10 ++++\n drivers/vdpa/sfc/sfc_vdpa.c          | 20 ++++++++\n drivers/vdpa/sfc/sfc_vdpa.h          |  2 +\n drivers/vdpa/sfc/sfc_vdpa_hw.c       | 13 ++++++\n drivers/vdpa/sfc/sfc_vdpa_ops.c      | 91 ++++++++++++++++++++++++++++++++----\n drivers/vdpa/sfc/sfc_vdpa_ops.h      |  3 ++\n 8 files changed, 142 insertions(+), 9 deletions(-)",
    "diff": "diff --git a/doc/guides/vdpadevs/features/sfc.ini b/doc/guides/vdpadevs/features/sfc.ini\nindex 71b6158..700d061 100644\n--- a/doc/guides/vdpadevs/features/sfc.ini\n+++ b/doc/guides/vdpadevs/features/sfc.ini\n@@ -4,6 +4,16 @@\n ; Refer to default.ini for the full list of available driver features.\n ;\n [Features]\n+csum\t\t\t= Y\n+guest csum\t\t= Y\n+host tso4\t\t= Y\n+host tso6\t\t= Y\n+version 1\t\t= Y\n+mrg rxbuf\t\t= Y\n+any layout\t\t= Y\n+in_order\t\t= Y\n+proto host notifier\t= Y\n+IOMMU platform\t\t= Y\n Linux\t\t\t= Y\n x86-64\t\t\t= Y\n Usage doc\t\t= Y\ndiff --git a/drivers/common/sfc_efx/efsys.h b/drivers/common/sfc_efx/efsys.h\nindex d133d61..37ec6b9 100644\n--- a/drivers/common/sfc_efx/efsys.h\n+++ b/drivers/common/sfc_efx/efsys.h\n@@ -187,7 +187,7 @@\n \n #define EFSYS_OPT_MAE 1\n \n-#define EFSYS_OPT_VIRTIO 0\n+#define EFSYS_OPT_VIRTIO 1\n \n /* ID */\n \ndiff --git a/drivers/common/sfc_efx/version.map b/drivers/common/sfc_efx/version.map\nindex 5e724fd..03670c8 100644\n--- a/drivers/common/sfc_efx/version.map\n+++ b/drivers/common/sfc_efx/version.map\n@@ -226,6 +226,16 @@ INTERNAL {\n \tefx_txq_nbufs;\n \tefx_txq_size;\n \n+\tefx_virtio_fini;\n+\tefx_virtio_get_doorbell_offset;\n+\tefx_virtio_get_features;\n+\tefx_virtio_init;\n+\tefx_virtio_qcreate;\n+\tefx_virtio_qdestroy;\n+\tefx_virtio_qstart;\n+\tefx_virtio_qstop;\n+\tefx_virtio_verify_features;\n+\n \tsfc_efx_dev_class_get;\n \tsfc_efx_family;\n \ndiff --git a/drivers/vdpa/sfc/sfc_vdpa.c b/drivers/vdpa/sfc/sfc_vdpa.c\nindex 12e8d6e..9c12dcb 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa.c\n@@ -43,6 +43,26 @@ struct sfc_vdpa_adapter *\n \treturn found ? sva : NULL;\n }\n \n+struct sfc_vdpa_ops_data *\n+sfc_vdpa_get_data_by_dev(struct rte_vdpa_device *vdpa_dev)\n+{\n+\tbool found = false;\n+\tstruct sfc_vdpa_adapter *sva;\n+\n+\tpthread_mutex_lock(&sfc_vdpa_adapter_list_lock);\n+\n+\tTAILQ_FOREACH(sva, &sfc_vdpa_adapter_list, next) {\n+\t\tif (vdpa_dev == sva->ops_data->vdpa_dev) {\n+\t\t\tfound = true;\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tpthread_mutex_unlock(&sfc_vdpa_adapter_list_lock);\n+\n+\treturn found ? sva->ops_data : NULL;\n+}\n+\n static int\n sfc_vdpa_vfio_setup(struct sfc_vdpa_adapter *sva)\n {\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa.h b/drivers/vdpa/sfc/sfc_vdpa.h\nindex fb97258..08075e5 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa.h\n+++ b/drivers/vdpa/sfc/sfc_vdpa.h\n@@ -60,6 +60,8 @@ struct sfc_vdpa_adapter {\n \n struct sfc_vdpa_adapter *\n sfc_vdpa_get_adapter_by_dev(struct rte_pci_device *pdev);\n+struct sfc_vdpa_ops_data *\n+sfc_vdpa_get_data_by_dev(struct rte_vdpa_device *vdpa_dev);\n \n int\n sfc_vdpa_hw_init(struct sfc_vdpa_adapter *sva);\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_hw.c b/drivers/vdpa/sfc/sfc_vdpa_hw.c\nindex 83f3696..84e680f 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa_hw.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa_hw.c\n@@ -273,10 +273,20 @@\n \tif (rc != 0)\n \t\tgoto fail_estimate_rsrc_limits;\n \n+\tsfc_vdpa_log_init(sva, \"init virtio\");\n+\trc = efx_virtio_init(enp);\n+\tif (rc != 0) {\n+\t\tsfc_vdpa_err(sva, \"virtio init failed: %s\", rte_strerror(rc));\n+\t\tgoto fail_virtio_init;\n+\t}\n+\n \tsfc_vdpa_log_init(sva, \"done\");\n \n \treturn 0;\n \n+fail_virtio_init:\n+\tefx_nic_fini(enp);\n+\n fail_estimate_rsrc_limits:\n fail_nic_reset:\n \tefx_nic_unprobe(enp);\n@@ -305,6 +315,9 @@\n \n \tsfc_vdpa_log_init(sva, \"entry\");\n \n+\tsfc_vdpa_log_init(sva, \"virtio fini\");\n+\tefx_virtio_fini(enp);\n+\n \tsfc_vdpa_log_init(sva, \"unprobe nic\");\n \tefx_nic_unprobe(enp);\n \ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_ops.c b/drivers/vdpa/sfc/sfc_vdpa_ops.c\nindex 71696be..5750944 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa_ops.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa_ops.c\n@@ -3,17 +3,31 @@\n  * Copyright(c) 2020-2021 Xilinx, Inc.\n  */\n \n+#include <rte_errno.h>\n #include <rte_malloc.h>\n #include <rte_vdpa.h>\n #include <rte_vdpa_dev.h>\n #include <rte_vhost.h>\n \n+#include \"efx.h\"\n #include \"sfc_vdpa_ops.h\"\n #include \"sfc_vdpa.h\"\n \n-/* Dummy functions for mandatory vDPA ops to pass vDPA device registration.\n- * In subsequent patches these ops would be implemented.\n+/* These protocol features are needed to enable notifier ctrl */\n+#define SFC_VDPA_PROTOCOL_FEATURES \\\n+\t\t((1ULL << VHOST_USER_PROTOCOL_F_REPLY_ACK) | \\\n+\t\t (1ULL << VHOST_USER_PROTOCOL_F_SLAVE_REQ) | \\\n+\t\t (1ULL << VHOST_USER_PROTOCOL_F_SLAVE_SEND_FD) | \\\n+\t\t (1ULL << VHOST_USER_PROTOCOL_F_HOST_NOTIFIER) | \\\n+\t\t (1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD))\n+\n+/*\n+ * Set of features which are enabled by default.\n+ * Protocol feature bit is needed to enable notification notifier ctrl.\n  */\n+#define SFC_VDPA_DEFAULT_FEATURES \\\n+\t\t(1ULL << VHOST_USER_F_PROTOCOL_FEATURES)\n+\n static int\n sfc_vdpa_get_queue_num(struct rte_vdpa_device *vdpa_dev, uint32_t *queue_num)\n {\n@@ -24,22 +38,67 @@\n }\n \n static int\n+sfc_vdpa_get_device_features(struct sfc_vdpa_ops_data *ops_data)\n+{\n+\tint rc;\n+\tuint64_t dev_features;\n+\tefx_nic_t *nic;\n+\n+\tnic = sfc_vdpa_adapter_by_dev_handle(ops_data->dev_handle)->nic;\n+\n+\trc = efx_virtio_get_features(nic, EFX_VIRTIO_DEVICE_TYPE_NET,\n+\t\t\t\t     &dev_features);\n+\tif (rc != 0) {\n+\t\tsfc_vdpa_err(ops_data->dev_handle,\n+\t\t\t     \"could not read device feature: %s\",\n+\t\t\t     rte_strerror(rc));\n+\t\treturn rc;\n+\t}\n+\n+\tops_data->dev_features = dev_features;\n+\n+\tsfc_vdpa_info(ops_data->dev_handle,\n+\t\t      \"device supported virtio features : 0x%\" PRIx64,\n+\t\t      ops_data->dev_features);\n+\n+\treturn 0;\n+}\n+\n+static int\n sfc_vdpa_get_features(struct rte_vdpa_device *vdpa_dev, uint64_t *features)\n {\n-\tRTE_SET_USED(vdpa_dev);\n-\tRTE_SET_USED(features);\n+\tstruct sfc_vdpa_ops_data *ops_data;\n \n-\treturn -1;\n+\tops_data = sfc_vdpa_get_data_by_dev(vdpa_dev);\n+\tif (ops_data == NULL)\n+\t\treturn -1;\n+\n+\t*features = ops_data->drv_features;\n+\n+\tsfc_vdpa_info(ops_data->dev_handle,\n+\t\t      \"vDPA ops get_feature :: features : 0x%\" PRIx64,\n+\t\t      *features);\n+\n+\treturn 0;\n }\n \n static int\n sfc_vdpa_get_protocol_features(struct rte_vdpa_device *vdpa_dev,\n \t\t\t       uint64_t *features)\n {\n-\tRTE_SET_USED(vdpa_dev);\n-\tRTE_SET_USED(features);\n+\tstruct sfc_vdpa_ops_data *ops_data;\n \n-\treturn -1;\n+\tops_data = sfc_vdpa_get_data_by_dev(vdpa_dev);\n+\tif (ops_data == NULL)\n+\t\treturn -1;\n+\n+\t*features = SFC_VDPA_PROTOCOL_FEATURES;\n+\n+\tsfc_vdpa_info(ops_data->dev_handle,\n+\t\t      \"vDPA ops get_protocol_feature :: features : 0x%\" PRIx64,\n+\t\t      *features);\n+\n+\treturn 0;\n }\n \n static int\n@@ -91,6 +150,7 @@ struct sfc_vdpa_ops_data *\n {\n \tstruct sfc_vdpa_ops_data *ops_data;\n \tstruct rte_pci_device *pci_dev;\n+\tint rc;\n \n \t/* Create vDPA ops context */\n \tops_data = rte_zmalloc(\"vdpa\", sizeof(struct sfc_vdpa_ops_data), 0);\n@@ -111,10 +171,25 @@ struct sfc_vdpa_ops_data *\n \t\tgoto fail_register_device;\n \t}\n \n+\t/* Read supported device features */\n+\tsfc_vdpa_log_init(dev_handle, \"get device feature\");\n+\trc = sfc_vdpa_get_device_features(ops_data);\n+\tif (rc != 0)\n+\t\tgoto fail_get_dev_feature;\n+\n+\t/* Driver features are superset of device supported feature\n+\t * and any additional features supported by the driver.\n+\t */\n+\tops_data->drv_features =\n+\t\tops_data->dev_features | SFC_VDPA_DEFAULT_FEATURES;\n+\n \tops_data->state = SFC_VDPA_STATE_INITIALIZED;\n \n \treturn ops_data;\n \n+fail_get_dev_feature:\n+\trte_vdpa_unregister_device(ops_data->vdpa_dev);\n+\n fail_register_device:\n \trte_free(ops_data);\n \treturn NULL;\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_ops.h b/drivers/vdpa/sfc/sfc_vdpa_ops.h\nindex 817b302..21cbb73 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa_ops.h\n+++ b/drivers/vdpa/sfc/sfc_vdpa_ops.h\n@@ -26,6 +26,9 @@ struct sfc_vdpa_ops_data {\n \tstruct rte_vdpa_device\t\t*vdpa_dev;\n \tenum sfc_vdpa_context\t\tvdpa_context;\n \tenum sfc_vdpa_state\t\tstate;\n+\n+\tuint64_t\t\t\tdev_features;\n+\tuint64_t\t\t\tdrv_features;\n };\n \n struct sfc_vdpa_ops_data *\n",
    "prefixes": [
        "03/10"
    ]
}