From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0069.outbound.protection.outlook.com [104.47.2.69]) by dpdk.org (Postfix) with ESMTP id CC6D21B29D for ; Sun, 28 Jan 2018 11:45:53 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Cf9tpb291Im08uR29fDQ/3maNiiJtISzD4PwbQ1/dfo=; b=EYpYIOCuA6f3XhS+KcDj3B0KODlUkLALQvtdbImEScvrvt8NuOJ8LtJc4QaTUEPgOldfmlMI89O3a8gXKyrVSZ1GxsUOBtAsgHgMQNL6DpBx7eS9MXSeJgx80YT/qyNap/UBb9BwVBFZc7GURX2V/wnae9y+nUHlQCw8zhToa34= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=motih@mellanox.com; Received: from mellanox.com (37.142.13.130) by HE1PR05MB3209.eurprd05.prod.outlook.com (2603:10a6:7:36::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Sun, 28 Jan 2018 10:45:51 +0000 From: Moti Haimovsky To: pascal.mazon@6wind.com, ferruh.yigit@intel.com Cc: dev@dpdk.org, Moti Haimovsky Date: Sun, 28 Jan 2018 12:45:35 +0200 Message-Id: <1517136335-955-1-git-send-email-motih@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1515080670-178604-1-git-send-email-motih@mellanox.com> References: <1515080670-178604-1-git-send-email-motih@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: AM5PR0102CA0033.eurprd01.prod.exchangelabs.com (2603:10a6:206::46) To HE1PR05MB3209.eurprd05.prod.outlook.com (2603:10a6:7:36::31) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 8d77f42b-928b-4282-2e67-08d5663c4d30 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:HE1PR05MB3209; X-Microsoft-Exchange-Diagnostics: 1; HE1PR05MB3209; 3:qCifk+PwZEpjq6xjVnz1hKB8zQP5bpBkpaU92WUpr0a/H3mA8lBsgh2FaJBx0NZy8J+RR2YOhZ59qiBO/hRfltZdeTieoJkj9u/pb1w7347q2f8V0FuXwpKvBO+Yzyb5hdIHdTbRRNJ9cq8OgUY10IGT5xq3vabmsCu3nhoGe4AUr47ZxTQS1wnz65fNmQLbuUCTBVUEuzGe1myv6mZrHjLCzVs/oGH8UdcKY4o8L0312bRNAqzWpyFlYXtAh/r1; 25:i1LgaM3WgBZRXmIRXG5M4jYrNeeEJdP5w77b7SaQ0W+W+zMWWxKL9pZ4UxXfaA2vRWrjpKvd/PPAp6Am64iQ9xEhH5EKcJLjsgyl8MYi8aQNKtXt2mmIt4kpP62gmNGnKIcs9WKHSR3bd7Kg+ssjL75bwxlPunS4FN8V27pPWZNh7Y4umInU2D29WFJWi328ku/GSwvOnQZlwzGro2J9YBOESUTETy1lcygc/J/uShA1aUpB+t9GrCvcIEw7BSd1LeuGug12FEVGU1CyjnXn2hxwHBieChADpAdhHHOPINqdPEF4KyjdNaYtJSRRbfGeNneTkWSV18SjlVc+i1htpw==; 31:fnwvNR2B4oYJIkGxWjHEZD+6vunnoqqM6QFXbSA8TRXbLD0iRmA/Xfc9mvlY1+9KFqINdu9Xe47gYassNMyO/tS417izFL9rP8ldXW2eRux+uczmu6Y+yKLFwJ90W0gu+Yi828ATbkqAkxgBqkklgnxOtqMd8MObTDz3c53PeUQJsP8DBVSr+tN9V9+PnkCo/aDzAwbTOgc1am8/3axHTBj+KqJVYwEPv8JGLj6oHvI= X-MS-TrafficTypeDiagnostic: HE1PR05MB3209: X-Microsoft-Exchange-Diagnostics: 1; HE1PR05MB3209; 20:IDRx/PLQEsXeJun+cpIYcFls1ev7Pq8qDw446e8/Uph7zVPbHuNfr4plBQSu67HRdTkNR6ZVKqfRhTEgu9/jNcdqDmQquP2XgJJ0wMIrErlo2Q22cxuUdAAhdQkeZcqRNgnithPMKblcm2XS5YxBfz+2fjTe46vuUsCeXb4fQ3/BUVLn3GtpZL1pyok2rC3Guyr3rimge/W+GqO39THtJ9+RZVL1IX/APYzSwgxCePN66CMMfTs+DRR98d4JsAG8yby9mOW2sm9oO1I7v89uFDeTfdYwzZCe5WT8BHja8CB0eTJZMzhuOx1ovijC6PIX48Tr5VoHCr48cgR/wINQYHbpaG4tB5+//xY2n4HsYoujX1SLWCumr/NRt/mL4NFwKT8MRad0aCnvgrs5GNMvd/3nZ5/Ax0n0sfpHL+hT0g6GcmcpCnexTLSXeL9bXiCTbMWLSAuMW6LBNyxKP+IZ2AKMBDKACPJsD0zp/fezqBhx3Uev2kx7YalXMyDZ+57b; 4:FfkmqrkrHVCZiraySb5p/DKps7lRIPP2EMI2XplJB5+v/BWxoCXu77t1+DGFfKWy9n1ac3loHMawSuNCW1kOSMvoPk8IXALrRsoFrh80l8L5Z96XRaWvXZt0IdOm1GuDBwJmAscL7HH8bKbtpHeg717KqYSIfq/br7eE999iFNBgdzFz/HqAPRzSjbL+UKRBzYoNCGCMbFrQyLf+B+xAXL5V0pQA869JrnCL8VIqQn71bL7SLLpYtIBLbBxjXXhzzC2ICzWAfIufk0Ya9xVVTjK8vqXtS4gJmMb0xALXu1BbCEb7FlMJV9kSsDykKjJ6 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(3231101)(2400081)(944501161)(10201501046)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:HE1PR05MB3209; BCL:0; PCL:0; RULEID:; SRVR:HE1PR05MB3209; X-Forefront-PRVS: 05669A7924 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(396003)(366004)(376002)(346002)(39380400002)(189003)(199004)(59450400001)(86362001)(21086003)(305945005)(76176011)(105586002)(7696005)(186003)(51416003)(106356001)(52116002)(33026002)(97736004)(6116002)(316002)(16586007)(386003)(7736002)(16526019)(25786009)(2906002)(26005)(3846002)(575784001)(478600001)(107886003)(47776003)(69596002)(68736007)(50226002)(36756003)(8936002)(8676002)(81166006)(53936002)(4720700003)(55016002)(2950100002)(81156014)(48376002)(50466002)(4326008)(66066001)(6666003)(5660300001); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR05MB3209; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR05MB3209; 23:u7mcqbBd0+m1wXc58zWfjzCbrbWmYnQiILoZ8fLtP?= =?us-ascii?Q?dR3tYXgWdPAdHywYWMCNlZcm6k6F4BbKYeNE5vMNID3OrXN+EfI7jaIlr5Uj?= =?us-ascii?Q?LVMEp7JBNqfLSPOC4A4WA5wl0tzjg1v2YU/3to8ay/D83JoE7IqFOy8i+D+s?= =?us-ascii?Q?I5ylq8Btuf3cvZX4SwscHtETQFA3osfu312Eguh/uAP7DjyRMxqOc72TGqVa?= =?us-ascii?Q?FTijDlkJxuinBT2ZuiYah+9gOC1sdB1xCX3N1JW8/kclRoadMrfmMKc3bS69?= =?us-ascii?Q?p8T4VHylhqQp3PiQ+LfKGjU9tl1e4MNk6VeZ1yFgmkZiYAETT9BN9lAOd7Qn?= =?us-ascii?Q?rNxPAiZZyHL4BDhLhFSXa7EFGe/BOJidrNuBmcASLlf8qkpzO5jxkU2Fmv5b?= =?us-ascii?Q?jF9ab1QQXD1ByDTEgS1PMkSpbB6dwDGj4oGwRt19ewG+RlkEYWELY8piI9eb?= =?us-ascii?Q?4Nm0xTJXzMefK6b4me8A8Pp3Qycc26XQEsuTs2xWJcQbH6s8cDQP2F3b/xf/?= =?us-ascii?Q?FaCfobqpmjWqQRfiT3mfjQKQSQG1ZLDs7oDAgIT4aufryDBTzdPlA4LNFkpf?= =?us-ascii?Q?bUSK9B4Pf/LyhHwO90kWm2mUxiRUheYgE2dw2nJWa2lxBRCcckuZrWJcUY8I?= =?us-ascii?Q?s0Qu6csc/Tu2jYvj4efyjnivVbS+llKis9MR3Rn/A/8m3nD5ea+YuOWlpNT9?= =?us-ascii?Q?LLNMyV4hOEk8zd6bxcjUbAlbRy3NnvVnMnGl9kuMiy3bb9eUKUYDHQceEe+s?= =?us-ascii?Q?O/mKQCZYFgkorkeuofIUpcOkwNjUo+JKMDJtJYDobheriYFPWsOqP2XTZ0sT?= =?us-ascii?Q?gkXp3V2BQLDZIbT+XhSCfelngr27LYUP6FXRtUT1w93P83lFtUgppKm9IXpq?= =?us-ascii?Q?DNJWYoAwT2vqpTtQZub9SJjjcadu8/smSDKNr4YbDN73ZPQAM5/lKVMuqTnA?= =?us-ascii?Q?dDcmMw6+zS9wZCM8oYpZX0pOFQBZgtLkKA4rxqCii+ClChXh42h45sDkoMg5?= =?us-ascii?Q?Gk6MIjccJMk2NGgNt01Vzu05IXlgw9Pocs0cRFG9EDEMM/QInH3ffISiXJ5w?= =?us-ascii?Q?p10eaLj5uu6b6ceJIQeNy4YdpPgBxtpAYKDgao3tgl7/MnUwfGVsq0+SLFBm?= =?us-ascii?Q?SkaPhDkOqtcnsE9Ax7u/XzNPzyJK1ltq8iSKHXEjSUHKAeNsFlpKR7ALd4cs?= =?us-ascii?Q?c16yVqYA3BxtwpoiXUlwxC6ateJS23DOygohitUxh8oe+RkZ3+Kp1ftgw=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR05MB3209; 6:ep0eqTdSqQKjl5TI12+orVRPnjjAxprYX5oYUXPoFmb8pZH80FLuLVii0uYKVgdbD3o7VYwx9KOsZ90db3cjWdz4cyoKiP9PEK3osmf8rLXoyZEkLcOsJc3PVcyXxB16JWXa7kr7PcP5aygRlLLTRL0gePZCN12OR6CwIPP+WqZxf1IqVJjiaz1ilG91yNOU6CeuHJ9avEIvlUPr+VobAW6CgmmCZDXHAGJ4aB0ETeVfriqQKWGSp2s9UrWVtPP+iqdmpr5x8JaHaP8x0UGBe+nQmUSmnPm2bH5rBB0kPnTmb/aPr2zw9bPfJfH/R0J1uTO8a5f2g8vIkKATMGi7oqNze/eFklEaoulBb3zI7Lk=; 5:3fDiX4QYPjbBkC9GGIBQQzETU1cgSO/DBfEYQIITMXGbsIN/SL4LFWMBYEx+ydK6eQ59uEs8b21VGiy/tj+5YpqAucp1IqYppfEn4GC79L7qpG3hdgrt4LTZXbYzko4fjyqIwVb+ltjHoYUyurw3aJOoGv3lZKRT/Lqv4x3cehw=; 24:m32hFKtLoeWBZ4i+RCfkgpq1Bz8Fep3ifi+Dkziw1lwBecs1+A4nHUuRmvk2jEGqF/NHQIy2uWDbVHPles9LLS/zmWaW6wKDmyu4MISFGVo=; 7:GwFCjBv8XRoZqZSm8zEqswxE46lCybAPb55EN4XbdwCJuZQFyrSr68aDNPXNpJH4NcvyYsXL3xu+uOezAtstzdholteBT2KHpPzcI2+dkTRHRCU45IguSDD8Fvot1BgNuqipaB2iMwliyVPpEyq7uj6TtCl0WAGOTvgLs/jYxg0CPVH9nyMtPtGynggTC6VzQYIi/dmT+qVpxLJQwAqLp5JOanJg0tkBYsmTjmP3esSkkOwUicJdXvj/ma0zSZ+4 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jan 2018 10:45:51.3585 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8d77f42b-928b-4282-2e67-08d5663c4d30 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR05MB3209 Subject: [dpdk-dev] [PATCH v4] net/tap: add Rx interrupts X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jan 2018 10:45:54 -0000 This patch adds support for registering and waiting for Rx interrupts. This allows applications to wait for Rx events from the PMD using the DPDK rte_epoll subsystem. Signed-off-by: Moti Haimovsky --- V4: Modified license in tap_intr.c to SPDX-License. V3: Fixed coding style warnings. V2: Modifications according to inputs from Pascal Mazon * Removed unneeded counter limit check. --- doc/guides/nics/features/tap.ini | 1 + drivers/net/tap/Makefile | 1 + drivers/net/tap/rte_eth_tap.c | 17 +++++- drivers/net/tap/rte_eth_tap.h | 4 ++ drivers/net/tap/tap_intr.c | 110 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 drivers/net/tap/tap_intr.c diff --git a/doc/guides/nics/features/tap.ini b/doc/guides/nics/features/tap.ini index f0e893d..8bc5187 100644 --- a/doc/guides/nics/features/tap.ini +++ b/doc/guides/nics/features/tap.ini @@ -7,6 +7,7 @@ Speed capabilities = P Link status = Y Link status event = Y +Rx interrupt = Y Jumbo frame = Y Promiscuous mode = Y Allmulticast mode = Y diff --git a/drivers/net/tap/Makefile b/drivers/net/tap/Makefile index 315c6bd..ccc5c5f 100644 --- a/drivers/net/tap/Makefile +++ b/drivers/net/tap/Makefile @@ -36,6 +36,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_flow.c SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_netlink.c SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_tcmsgs.c SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_bpf_api.c +SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_intr.c include $(RTE_SDK)/mk/rte.lib.mk diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index fd42572..29d6356 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -1218,7 +1218,7 @@ enum ioctl_mode { } static int -tap_intr_handle_set(struct rte_eth_dev *dev, int set) +tap_lsc_intr_handle_set(struct rte_eth_dev *dev, int set) { struct pmd_internals *pmd = dev->data->dev_private; @@ -1243,6 +1243,20 @@ enum ioctl_mode { tap_dev_intr_handler, dev); } +static int +tap_intr_handle_set(struct rte_eth_dev *dev, int set) +{ + int err; + + err = tap_lsc_intr_handle_set(dev, set); + if (err) + return err; + err = tap_rx_intr_vec_set(dev, set); + if (err && set) + tap_lsc_intr_handle_set(dev, 0); + return err; +} + static const uint32_t* tap_dev_supported_ptypes_get(struct rte_eth_dev *dev __rte_unused) { @@ -1375,6 +1389,7 @@ enum ioctl_mode { pmd->intr_handle.type = RTE_INTR_HANDLE_EXT; pmd->intr_handle.fd = -1; + dev->intr_handle = &pmd->intr_handle; /* Presetup the fds to -1 as being not valid */ for (i = 0; i < RTE_PMD_TAP_MAX_QUEUES; i++) { diff --git a/drivers/net/tap/rte_eth_tap.h b/drivers/net/tap/rte_eth_tap.h index d4f1e6c..ed85244 100644 --- a/drivers/net/tap/rte_eth_tap.h +++ b/drivers/net/tap/rte_eth_tap.h @@ -106,4 +106,8 @@ struct pmd_internals { struct rte_intr_handle intr_handle; /* LSC interrupt handle. */ }; +/* tap_intr.c */ + +int tap_rx_intr_vec_set(struct rte_eth_dev *dev, int set); + #endif /* _RTE_ETH_TAP_H_ */ diff --git a/drivers/net/tap/tap_intr.c b/drivers/net/tap/tap_intr.c new file mode 100644 index 0000000..b0e1991 --- /dev/null +++ b/drivers/net/tap/tap_intr.c @@ -0,0 +1,110 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2018 Mellanox Technologies, Ltd. + */ + +/** + * @file + * Interrupts handling for tap driver. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +/** + * Unregister Rx interrupts free the queue interrupt vector. + * + * @param dev + * Pointer to the tap rte_eth_dev structure. + */ +static void +tap_rx_intr_vec_uninstall(struct rte_eth_dev *dev) +{ + struct pmd_internals *pmd = dev->data->dev_private; + struct rte_intr_handle *intr_handle = &pmd->intr_handle; + + rte_intr_free_epoll_fd(intr_handle); + free(intr_handle->intr_vec); + intr_handle->intr_vec = NULL; + intr_handle->nb_efd = 0; +} + +/** + * Allocate Rx queue interrupt vector and register Rx interrupts. + * + * @param dev + * Pointer to the tap rte_eth_dev device structure. + * + * @return + * 0 on success, negative errno value otherwise and rte_errno is set. + */ +static int +tap_rx_intr_vec_install(struct rte_eth_dev *dev) +{ + struct pmd_internals *pmd = dev->data->dev_private; + unsigned int rxqs_n = pmd->dev->data->nb_rx_queues; + struct rte_intr_handle *intr_handle = &pmd->intr_handle; + unsigned int n = RTE_MIN(rxqs_n, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID); + unsigned int i; + unsigned int count = 0; + + if (!dev->data->dev_conf.intr_conf.rxq) + return 0; + intr_handle->intr_vec = malloc(sizeof(intr_handle->intr_vec[rxqs_n])); + if (intr_handle->intr_vec == NULL) { + rte_errno = ENOMEM; + RTE_LOG(ERR, PMD, + "failed to allocate memory for interrupt vector," + " Rx interrupts will not be supported"); + return -rte_errno; + } + for (i = 0; i < n; i++) { + struct rx_queue *rxq = pmd->dev->data->rx_queues[i]; + + /* Skip queues that cannot request interrupts. */ + if (!rxq || rxq->fd <= 0) { + /* Use invalid intr_vec[] index to disable entry. */ + intr_handle->intr_vec[i] = + RTE_INTR_VEC_RXTX_OFFSET + + RTE_MAX_RXTX_INTR_VEC_ID; + continue; + } + intr_handle->intr_vec[i] = RTE_INTR_VEC_RXTX_OFFSET + count; + intr_handle->efds[count] = rxq->fd; + count++; + } + if (!count) + tap_rx_intr_vec_uninstall(dev); + else + intr_handle->nb_efd = count; + return 0; +} + +/** + * Register or unregister the Rx interrupts. + * + * @param dev + * Pointer to the tap rte_eth_dev device structure. + * @param set + * should the operation be register or unregister the interrupts. + * + * @return + * 0 on success, negative errno value otherwise and rte_errno is set. + */ +int +tap_rx_intr_vec_set(struct rte_eth_dev *dev, int set) +{ + tap_rx_intr_vec_uninstall(dev); + if (set) + return tap_rx_intr_vec_install(dev); + return 0; +} -- 1.8.3.1