Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/95470/?format=api
http://patchwork.dpdk.org/api/patches/95470/?format=api", "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20210706164418.32615-9-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-9-vsrivast@xilinx.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210706164418.32615-9-vsrivast@xilinx.com", "date": "2021-07-06T16:44:16", "name": "[08/10] vdpa/sfc: add support for MAC filter config", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": true, "hash": "1f8e1993c8624e8b42e6e5f726e9e477119030c2", "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-9-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/95470/comments/", "check": "success", "checks": "http://patchwork.dpdk.org/api/patches/95470/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 2B3CAA0C4A;\n\tWed, 7 Jul 2021 10:26:26 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1FC5E414AA;\n\tWed, 7 Jul 2021 10:25:40 +0200 (CEST)", "from NAM10-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam10on2045.outbound.protection.outlook.com [40.107.94.45])\n by mails.dpdk.org (Postfix) with ESMTP id 8310C4120E\n for <dev@dpdk.org>; Tue, 6 Jul 2021 18:50:26 +0200 (CEST)", "from DM6PR06CA0056.namprd06.prod.outlook.com (2603:10b6:5:54::33) by\n DM6PR02MB4347.namprd02.prod.outlook.com (2603:10b6:5:2a::32) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.4287.26; Tue, 6 Jul 2021 16:50:23 +0000", "from DM3NAM02FT017.eop-nam02.prod.protection.outlook.com\n (2603:10b6:5:54:cafe::46) by DM6PR06CA0056.outlook.office365.com\n (2603:10b6:5:54::33) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend\n Transport; Tue, 6 Jul 2021 16:50:23 +0000", "from xsj-pvapexch02.xlnx.xilinx.com (149.199.62.198) by\n DM3NAM02FT017.mail.protection.outlook.com (10.13.5.6) 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:50:23 +0000", "from xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) by\n xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) 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:50:08 -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:50:08 -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 1m0oGt-0000pF-Rh; Tue, 06 Jul 2021 09:50:08 -0700" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=JmXyiCJtxD59y7+oegcK6lBa0LXUMevK+4RI72iWuH+GcJ2bX1I/WyA0RhJQuPwkyOIw85FxINMmRxKbDPHEBTzVPAOGCBG5cbG9ECM2EjfWyzbkTV1om6Nk12BZntof4+KwyZhcxlxu5qzGq6Wy5zjEKtRDqgiMVsgFpF9XQIftaXDvRtKB/Mjx1VmbPJLNPWtM8BATLMQSFwAAJ5xwJyns4WmPbj9hRb1VgblbmU9PSAF48HG5ZbKhnmT8+QXRAyvf2c0cKvtVZ4LNXk34PFfhkc6DmpwkDV9D9jr+NhIH3Zd7OsH/Pe9nYJ4XoN5oAilN940pngOGfGjq6js8Qg==", "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=jHQDkohYiAfd4Y5TJG6b5RyhMAU3JyIwrdNyqPrxkho=;\n b=AGQzQN0Qh24XChENa2AU7wGP7zwW87XXBlWUi19uxUw9u+JxJ1IqLxM6LMzC776r3gdpNy7lwvZ/IS1VooS1vusV/lYktWQqNynX69O3tLLMkBjMsYWYqELg+gWa2s98vcnBhhwDL8vGu6VKycxqCbEhtP7YCVf2Bj4oSjysDJIdkpnA1hhO1lGYYaazgKCDhzW/46mDOoilGmRMD7qhMAwYCrUv+/l9vg/hkv62b4zJsEd+N2EjxmIPOQvD8aQasSSm2yihZR6Iz28aOajYBUzU9BXZ6ujzTemURV5iQxa/t+gFjg5F9bAjTTVfFulMtpmV7rW0UXApnGw1j622sg==", "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=jHQDkohYiAfd4Y5TJG6b5RyhMAU3JyIwrdNyqPrxkho=;\n b=swsNABAj0JnSw6fhwJbuwY+nrUAZWL8g+TbUXnd4Dj4i9Xhp2XBfuMtGR7AsjLqhYVW6d/mfugYixCG0nlbwqgrX58a7cJZ+rR6ekPvSU5rAUHdaFMp7foTlmaN/0gHF1Q1V6PsEvY4F57u3D0snf/E/uecEHyuDuvSJmMA1aQA=", "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-pvapexch02.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:16 +0530", "Message-ID": "<20210706164418.32615-9-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": "7ad0d5d4-e0aa-4cb5-e44a-08d9409e25e7", "X-MS-TrafficTypeDiagnostic": "DM6PR02MB4347:", "X-Microsoft-Antispam-PRVS": "\n <DM6PR02MB4347A34F0D5D484670DB144DB91B9@DM6PR02MB4347.namprd02.prod.outlook.com>", "X-MS-Oob-TLC-OOBClassifiers": "OLM:240;", "X-MS-Exchange-SenderADCheck": "1", "X-Microsoft-Antispam": "BCL:0;", "X-Microsoft-Antispam-Message-Info": "\n iua7mikMSmNjzKSo9uLYhIjnUceu15qoJ6zePtSv+WvBBuiWLg86W0YgiOanae5QlY7ZpNFpLSzNXuQo6RzzlO+DF715QAXuHmUJyjI8ruVLzz6OeN6/XQu1L1vAie5Y64MCexz8b2hMftvC72dE0uwKqccdvtYyCW/pm0PWAvfupBIBtrNmGT0k27uVu8WKCPQY/Si7TjzNIpCo9gc8X9IX6sepJDoNpMFHFLs8iaSj5sksPAYQ9o4/DLNl5OD/t5ftCL49fG4VTR9FEOzN6Ab6yUXbQ9o/dYrDuX4W90XoXRgZGnPmfewYb1h1n2J8hOlYDxiRsNzKyA1O1klzBNXbJqh4LxHCopUgMvSxjbS2o1FAPbZmQpqHOGuhYQRaPb4/CEa343t/8Cr6Y22yy+/NQ4TrUF0jmwZ8IfaV97aC2xb2htVoehj+bHj1q6JpLtG4ycs4sskA0d0fIGiOXLVcQaw2NHMQMegVWgcnSwt+tnbZRndvB/3Dva1WJPbokWdBx7NtjpplG1HmsRlHMwtYTKyvrvJmTAJhQIx+kBboMlkZxW8iWf72msS/Kpodrv/AqAnXPDqTaB6FQrvowOawbGlS0JQRXr1DPzodipJnWEa3gqmRE01dLWe/Ivg97wtnY/pJ+T9nBtflbeifMDv3JveoGyNSRUNSMhATdM0RfbNGtDQJcTX24PmSmkWnTYy54G/O/XXJDF5SN/TvmBvgHQpOEw5WYbyJ5hvwF40=", "X-Forefront-Antispam-Report": "CIP:149.199.62.198; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:xsj-pvapexch02.xlnx.xilinx.com;\n PTR:unknown-62-198.xilinx.com; CAT:NONE;\n SFS:(4636009)(39860400002)(136003)(346002)(396003)(376002)(46966006)(36840700001)(2906002)(316002)(186003)(36906005)(82310400003)(1076003)(426003)(26005)(336012)(107886003)(8936002)(2616005)(7636003)(54906003)(8676002)(4326008)(83380400001)(44832011)(5660300002)(7696005)(356005)(6666004)(70206006)(47076005)(82740400003)(36860700001)(70586007)(9786002)(6916009)(36756003)(478600001)(102446001);\n DIR:OUT; SFP:1101;", "X-OriginatorOrg": "xilinx.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "06 Jul 2021 16:50:23.3690 (UTC)", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 7ad0d5d4-e0aa-4cb5-e44a-08d9409e25e7", "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-pvapexch02.xlnx.xilinx.com]", "X-MS-Exchange-CrossTenant-AuthSource": "\n DM3NAM02FT017.eop-nam02.prod.protection.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR02MB4347", "X-Mailman-Approved-At": "Wed, 07 Jul 2021 10:25:28 +0200", "Subject": "[dpdk-dev] [PATCH 08/10] vdpa/sfc: add support for MAC filter config", "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\nAdd support for unicast and broadcast MAC filter configuration.\n\nSigned-off-by: Vijay Kumar Srivastava <vsrivast@xilinx.com>\n---\n doc/guides/vdpadevs/sfc.rst | 4 ++\n drivers/vdpa/sfc/meson.build | 1 +\n drivers/vdpa/sfc/sfc_vdpa.c | 32 +++++++++\n drivers/vdpa/sfc/sfc_vdpa.h | 30 ++++++++\n drivers/vdpa/sfc/sfc_vdpa_filter.c | 144 +++++++++++++++++++++++++++++++++++++\n drivers/vdpa/sfc/sfc_vdpa_hw.c | 10 +++\n drivers/vdpa/sfc/sfc_vdpa_ops.c | 17 +++++\n 7 files changed, 238 insertions(+)\n create mode 100644 drivers/vdpa/sfc/sfc_vdpa_filter.c", "diff": "diff --git a/doc/guides/vdpadevs/sfc.rst b/doc/guides/vdpadevs/sfc.rst\nindex abb5900..ae5ef42 100644\n--- a/doc/guides/vdpadevs/sfc.rst\n+++ b/doc/guides/vdpadevs/sfc.rst\n@@ -71,6 +71,10 @@ boolean parameters value.\n **vdpa** device will work as vdpa device and will be probed by vdpa/sfc driver.\n If this parameter is not specified then ef100 device will operate as network device.\n \n+- ``mac`` [mac address]\n+\n+ Configures MAC address which would be used to setup MAC filters.\n+\n \n Dynamic Logging Parameters\n ~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiff --git a/drivers/vdpa/sfc/meson.build b/drivers/vdpa/sfc/meson.build\nindex aac7c51..f69cba9 100644\n--- a/drivers/vdpa/sfc/meson.build\n+++ b/drivers/vdpa/sfc/meson.build\n@@ -33,4 +33,5 @@ sources = files(\n \t'sfc_vdpa_hw.c',\n \t'sfc_vdpa_mcdi.c',\n \t'sfc_vdpa_ops.c',\n+\t'sfc_vdpa_filter.c',\n )\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa.c b/drivers/vdpa/sfc/sfc_vdpa.c\nindex ca13483..703aa9e 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa.c\n@@ -8,7 +8,9 @@\n #include <sys/queue.h>\n \n #include <rte_common.h>\n+#include <rte_devargs.h>\n #include <rte_errno.h>\n+#include <rte_kvargs.h>\n #include <rte_string_fns.h>\n #include <rte_vfio.h>\n #include <rte_vhost.h>\n@@ -202,6 +204,31 @@ struct sfc_vdpa_ops_data *\n \treturn (ret < 0) ? RTE_LOGTYPE_PMD : ret;\n }\n \n+static int\n+sfc_vdpa_kvargs_parse(struct sfc_vdpa_adapter *sva)\n+{\n+\tstruct rte_pci_device *pci_dev = sva->pdev;\n+\tstruct rte_devargs *devargs = pci_dev->device.devargs;\n+\t/*\n+\t * To get the device class a mandatory param 'class' is being\n+\t * used so included SFC_EFX_KVARG_DEV_CLASS in the param list.\n+\t */\n+\tconst char **params = (const char *[]){\n+\t\tSFC_EFX_KVARG_DEV_CLASS,\n+\t\tSFC_VDPA_MAC_ADDR,\n+\t\tNULL,\n+\t};\n+\n+\tif (devargs == NULL)\n+\t\treturn 0;\n+\n+\tsva->kvargs = rte_kvargs_parse(devargs->args, params);\n+\tif (sva->kvargs == NULL)\n+\t\treturn -EINVAL;\n+\n+\treturn 0;\n+}\n+\n static struct rte_pci_id pci_id_sfc_vdpa_efx_map[] = {\n \t{ RTE_PCI_DEVICE(EFX_PCI_VENID_XILINX, EFX_PCI_DEVID_RIVERHEAD_VF) },\n \t{ .vendor_id = 0, /* sentinel */ },\n@@ -244,6 +271,10 @@ struct sfc_vdpa_ops_data *\n \tif (ret != 0)\n \t\tgoto fail_set_log_prefix;\n \n+\tret = sfc_vdpa_kvargs_parse(sva);\n+\tif (ret != 0)\n+\t\tgoto fail_kvargs_parse;\n+\n \tsfc_vdpa_log_init(sva, \"entry\");\n \n \tsfc_vdpa_adapter_lock_init(sva);\n@@ -284,6 +315,7 @@ struct sfc_vdpa_ops_data *\n fail_vfio_setup:\n \tsfc_vdpa_adapter_lock_fini(sva);\n \n+fail_kvargs_parse:\n fail_set_log_prefix:\n \trte_free(sva);\n \ndiff --git a/drivers/vdpa/sfc/sfc_vdpa.h b/drivers/vdpa/sfc/sfc_vdpa.h\nindex b103b0a..fd480ca 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa.h\n+++ b/drivers/vdpa/sfc/sfc_vdpa.h\n@@ -17,8 +17,29 @@\n #include \"sfc_vdpa_log.h\"\n #include \"sfc_vdpa_ops.h\"\n \n+#define SFC_VDPA_MAC_ADDR\t\t\t\"mac\"\n #define SFC_VDPA_DEFAULT_MCDI_IOVA\t\t0x200000000000\n \n+/* Broadcast & Unicast MAC filters are supported */\n+#define SFC_MAX_SUPPORTED_FILTERS\t\t2\n+\n+/*\n+ * Get function-local index of the associated VI from the\n+ * virtqueue number. Queue 0 is reserved for MCDI\n+ */\n+#define SFC_VDPA_GET_VI_INDEX(vq_num) (((vq_num) / 2) + 1)\n+\n+enum sfc_vdpa_filter_type {\n+\tSFC_VDPA_BCAST_MAC_FILTER = 0,\n+\tSFC_VDPA_UCAST_MAC_FILTER = 1,\n+\tSFC_VDPA_FILTER_NTYPE\n+};\n+\n+typedef struct sfc_vdpa_filter_s {\n+\tint\t\t\t\tfilter_cnt;\n+\tefx_filter_spec_t\t\tspec[SFC_MAX_SUPPORTED_FILTERS];\n+} sfc_vdpa_filter_t;\n+\n /* Adapter private data */\n struct sfc_vdpa_adapter {\n \tTAILQ_ENTRY(sfc_vdpa_adapter)\tnext;\n@@ -32,6 +53,8 @@ struct sfc_vdpa_adapter {\n \tstruct rte_pci_device\t\t*pdev;\n \tstruct rte_pci_addr\t\tpci_addr;\n \n+\tstruct rte_kvargs\t\t*kvargs;\n+\n \tefx_family_t\t\t\tfamily;\n \tefx_nic_t\t\t\t*nic;\n \trte_spinlock_t\t\t\tnic_lock;\n@@ -46,6 +69,8 @@ struct sfc_vdpa_adapter {\n \tchar\t\t\t\tlog_prefix[SFC_VDPA_LOG_PREFIX_MAX];\n \tuint32_t\t\t\tlogtype_main;\n \n+\tsfc_vdpa_filter_t\t\tfilters;\n+\n \tint\t\t\t\tvfio_group_fd;\n \tint\t\t\t\tvfio_dev_fd;\n \tint\t\t\t\tvfio_container_fd;\n@@ -83,6 +108,11 @@ struct sfc_vdpa_ops_data *\n int\n sfc_vdpa_dma_map(struct sfc_vdpa_ops_data *vdpa_data, bool do_map);\n \n+int\n+sfc_vdpa_filter_remove(struct sfc_vdpa_ops_data *ops_data);\n+int\n+sfc_vdpa_filter_config(struct sfc_vdpa_ops_data *ops_data);\n+\n static inline struct sfc_vdpa_adapter *\n sfc_vdpa_adapter_by_dev_handle(void *dev_handle)\n {\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_filter.c b/drivers/vdpa/sfc/sfc_vdpa_filter.c\nnew file mode 100644\nindex 0000000..03b6a5d\n--- /dev/null\n+++ b/drivers/vdpa/sfc/sfc_vdpa_filter.c\n@@ -0,0 +1,144 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ *\n+ * Copyright(c) 2020-2021 Xilinx, Inc.\n+ */\n+\n+#include <rte_errno.h>\n+#include <rte_ether.h>\n+#include <rte_kvargs.h>\n+\n+#include \"efx.h\"\n+#include \"efx_impl.h\"\n+#include \"sfc_vdpa.h\"\n+\n+static inline int\n+sfc_vdpa_get_eth_addr(const char *key __rte_unused,\n+\t\t const char *value, void *extra_args)\n+{\n+\tstruct rte_ether_addr *mac_addr = extra_args;\n+\n+\tif (value == NULL || extra_args == NULL)\n+\t\treturn -EINVAL;\n+\n+\t/* Convert string with Ethernet address to an ether_addr */\n+\trte_ether_unformat_addr(value, mac_addr);\n+\n+\treturn 0;\n+}\n+\n+static int\n+sfc_vdpa_set_mac_filter(efx_nic_t *nic, efx_filter_spec_t *spec,\n+\t\t\tint qid, uint8_t *eth_addr)\n+{\n+\tint rc;\n+\n+\tif (nic == NULL || spec == NULL)\n+\t\treturn -1;\n+\n+\tspec->efs_priority = EFX_FILTER_PRI_MANUAL;\n+\tspec->efs_flags = EFX_FILTER_FLAG_RX;\n+\tspec->efs_dmaq_id = qid;\n+\n+\trc = efx_filter_spec_set_eth_local(spec, EFX_FILTER_SPEC_VID_UNSPEC,\n+\t\t\t\t\t eth_addr);\n+\tif (rc != 0)\n+\t\treturn rc;\n+\n+\trc = efx_filter_insert(nic, spec);\n+\tif (rc != 0)\n+\t\treturn rc;\n+\n+\treturn rc;\n+}\n+\n+int sfc_vdpa_filter_config(struct sfc_vdpa_ops_data *ops_data)\n+{\n+\tint rc;\n+\tint qid;\n+\tefx_nic_t *nic;\n+\tstruct rte_ether_addr bcast_eth_addr;\n+\tstruct rte_ether_addr ucast_eth_addr;\n+\tstruct sfc_vdpa_adapter *sva = ops_data->dev_handle;\n+\tefx_filter_spec_t *spec;\n+\n+\tif (ops_data == NULL)\n+\t\treturn -1;\n+\n+\tsfc_vdpa_log_init(sva, \"entry\");\n+\n+\tnic = sva->nic;\n+\n+\tsfc_vdpa_log_init(sva, \"process kvarg\");\n+\n+\t/* skip MAC filter configuration if mac address is not provided */\n+\tif (rte_kvargs_count(sva->kvargs, SFC_VDPA_MAC_ADDR) == 0) {\n+\t\tsfc_vdpa_warn(sva,\n+\t\t\t \"MAC address is not provided, skipping MAC Filter Config\");\n+\t\treturn -1;\n+\t}\n+\n+\trc = rte_kvargs_process(sva->kvargs, SFC_VDPA_MAC_ADDR,\n+\t\t\t\t&sfc_vdpa_get_eth_addr,\n+\t\t\t\t&ucast_eth_addr);\n+\tif (rc < 0)\n+\t\treturn -1;\n+\n+\t/* create filters on the base queue */\n+\tqid = SFC_VDPA_GET_VI_INDEX(0);\n+\n+\tsfc_vdpa_log_init(sva, \"insert broadcast mac filter\");\n+\n+\tEFX_MAC_BROADCAST_ADDR_SET(bcast_eth_addr.addr_bytes);\n+\tspec = &sva->filters.spec[SFC_VDPA_BCAST_MAC_FILTER];\n+\n+\trc = sfc_vdpa_set_mac_filter(nic,\n+\t\t\t\t spec, qid,\n+\t\t\t\t bcast_eth_addr.addr_bytes);\n+\tif (rc != 0)\n+\t\tsfc_vdpa_err(ops_data->dev_handle,\n+\t\t\t \"broadcast MAC filter insertion failed: %s\",\n+\t\t\t rte_strerror(rc));\n+\telse\n+\t\tsva->filters.filter_cnt++;\n+\n+\tsfc_vdpa_log_init(sva, \"insert unicast mac filter\");\n+\tspec = &sva->filters.spec[SFC_VDPA_UCAST_MAC_FILTER];\n+\n+\trc = sfc_vdpa_set_mac_filter(nic,\n+\t\t\t\t spec, qid,\n+\t\t\t\t ucast_eth_addr.addr_bytes);\n+\tif (rc != 0)\n+\t\tsfc_vdpa_err(sva,\n+\t\t\t \"unicast MAC filter insertion failed: %s\",\n+\t\t\t rte_strerror(rc));\n+\telse\n+\t\tsva->filters.filter_cnt++;\n+\n+\tsfc_vdpa_log_init(sva, \"done\");\n+\n+\treturn rc;\n+}\n+\n+int sfc_vdpa_filter_remove(struct sfc_vdpa_ops_data *ops_data)\n+{\n+\tint i, rc = 0;\n+\tstruct sfc_vdpa_adapter *sva = ops_data->dev_handle;\n+\tefx_nic_t *nic;\n+\n+\tif (ops_data == NULL)\n+\t\treturn -1;\n+\n+\tnic = sva->nic;\n+\n+\tfor (i = 0; i < sva->filters.filter_cnt; i++) {\n+\t\trc = efx_filter_remove(nic, &(sva->filters.spec[i]));\n+\t\tif (rc != 0)\n+\t\t\tsfc_vdpa_err(sva,\n+\t\t\t\t \"remove HW filter failed for entry %d: %s\",\n+\t\t\t\t i, rte_strerror(rc));\n+\t}\n+\n+\tsva->filters.filter_cnt = 0;\n+\n+\treturn rc;\n+}\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_hw.c b/drivers/vdpa/sfc/sfc_vdpa_hw.c\nindex 047bcc4..3a98c8c 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa_hw.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa_hw.c\n@@ -350,10 +350,20 @@\n \t\tgoto fail_virtio_init;\n \t}\n \n+\tsfc_vdpa_log_init(sva, \"init filter\");\n+\trc = efx_filter_init(enp);\n+\tif (rc != 0) {\n+\t\tsfc_vdpa_err(sva, \"filter init failed: %s\", rte_strerror(rc));\n+\t\tgoto fail_filter_init;\n+\t}\n+\n \tsfc_vdpa_log_init(sva, \"done\");\n \n \treturn 0;\n \n+fail_filter_init:\n+\tefx_virtio_fini(enp);\n+\n fail_virtio_init:\n \tefx_nic_fini(enp);\n \ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_ops.c b/drivers/vdpa/sfc/sfc_vdpa_ops.c\nindex a7b9085..f14b385 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa_ops.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa_ops.c\n@@ -423,6 +423,8 @@\n \n \tsfc_vdpa_disable_vfio_intr(ops_data);\n \n+\tsfc_vdpa_filter_remove(ops_data);\n+\n \tops_data->state = SFC_VDPA_STATE_CONFIGURED;\n }\n \n@@ -462,12 +464,27 @@\n \t\t\tgoto fail_vq_start;\n \t}\n \n+\tops_data->vq_count = i;\n+\n+\tsfc_vdpa_log_init(ops_data->dev_handle,\n+\t\t\t \"configure MAC filters\");\n+\trc = sfc_vdpa_filter_config(ops_data);\n+\tif (rc != 0) {\n+\t\tsfc_vdpa_err(ops_data->dev_handle,\n+\t\t\t \"MAC filter config failed: %s\",\n+\t\t\t rte_strerror(rc));\n+\t\tgoto fail_filter_cfg;\n+\t}\n+\n \tops_data->state = SFC_VDPA_STATE_STARTED;\n \n \tsfc_vdpa_log_init(ops_data->dev_handle, \"done\");\n \n \treturn 0;\n \n+fail_filter_cfg:\n+\t/* remove already created filters */\n+\tsfc_vdpa_filter_remove(ops_data);\n fail_vq_start:\n \t/* stop already started virtqueues */\n \tfor (j = 0; j < i; j++)\n", "prefixes": [ "08/10" ] }{ "id": 95470, "url": "