From patchwork Tue Apr 6 14:46:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Renata Saiakhova X-Patchwork-Id: 90729 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 85A74A0546; Tue, 6 Apr 2021 16:50:44 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A10561411C5; Tue, 6 Apr 2021 16:46:45 +0200 (CEST) Received: from FRA01-MR2-obe.outbound.protection.outlook.com (mail-eopbgr90100.outbound.protection.outlook.com [40.107.9.100]) by mails.dpdk.org (Postfix) with ESMTP id 38AA61410EF for ; Tue, 6 Apr 2021 16:46:44 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WSRVwBEXnu8JFrIQYJt1S08C41yS03PFCwBGOQpW9aIWKYs95kqAqM+JZNU79rnZlGj46Py7FBnTMF97IO4xkK0wzVdNVilOjURRZ0YZ0AYC99WMLneBJC1VjMy0Fc1p7CtxiacK3VX1Mxq7Vz0K/fQ5kvlyiQfFVq9GgTLxphd1fj7WpXL4z+O6kh6/ZowsFi035SIeCpy9i57ik45SbKJYY0WMiR/khbG5VramBBeRHQo680wXAvmWjaMyQf7Q5kzIuYHk0aP/5Hx+pOKyqARqevBm0Gsg8lVCNlGzKtvtB2UGTeyKdMmvjEKFMBtCJ4kAVpHuyWljR2cFtTi7YQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2xTzX8PBvCoCEav2+VRUpce86zwQX8qlyY1iMuZ5Lxo=; b=cLXNYrNGQxkvAtaikTCAeWEHdhYhXtZKjOXH6Zoqwp0urggcGsh6iEcuAylsh/gD8KEmuC+GUsyZwmnjUp0z+Arz9PYolqML3OrTHzLEhT2H067oWAsXP2F81oc5FzNaRhGB1ghsK9SqwZDHjEq2ivyeNvOQun2E9OzUzSe8Y5Kh5ISuxqnaBTNsfmd5KAyYmCKZqtbEjipnPKKhtMV0tZ/tSqy2xCdk2RLk7XYYr5NhsssM60yAzBNECGxR6lrxtd5g1EZnbhNEbB4vvQ/RgZN/I3zLwafp9NdAIGD/h0vLIyorZsBo0bu0e3qk8QJGIYbFYPVOmHHArrC2N0M+DQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ekinops.com; dmarc=pass action=none header.from=ekinops.com; dkim=pass header.d=ekinops.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ekinops.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2xTzX8PBvCoCEav2+VRUpce86zwQX8qlyY1iMuZ5Lxo=; b=dubL/lBb2UsbV9d/xBHaCJY3lEehkFoagtT/S40HSXf7aoAaj6RsC4skPQtK2Vxw6HRjUiiCVqiNb7wi8TXdZgtWEM3p9tatpdW3rC+/+5rpjywIfzYWJN37K2tyhRJCtscIu0NDLWOUJ1mVbN6r1SV1iBryG9DJgMIbafiK+Qc= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=ekinops.com; Received: from MRZP264MB2442.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:7::10) by MR2P264MB0291.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:11::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.29; Tue, 6 Apr 2021 14:46:43 +0000 Received: from MRZP264MB2442.FRAP264.PROD.OUTLOOK.COM ([fe80::35cd:48b0:ee32:20b0]) by MRZP264MB2442.FRAP264.PROD.OUTLOOK.COM ([fe80::35cd:48b0:ee32:20b0%7]) with mapi id 15.20.3999.032; Tue, 6 Apr 2021 14:46:43 +0000 From: Renata Saiakhova To: Anatoly Burakov , Harman Kalra , Bruce Richardson , Ray Kinsella , Neil Horman , Dmitry Kozlyuk , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Cc: dev@dpdk.org, Renata Saiakhova Date: Tue, 6 Apr 2021 16:46:14 +0200 Message-Id: <20210406144614.3394-2-Renata.Saiakhova@ekinops.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20210406144614.3394-1-Renata.Saiakhova@ekinops.com> References: <20210406144614.3394-1-Renata.Saiakhova@ekinops.com> X-Originating-IP: [91.183.184.98] X-ClientProxiedBy: AM3PR05CA0134.eurprd05.prod.outlook.com (2603:10a6:207:3::12) To MRZP264MB2442.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:7::10) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from renataOAB.oneaccess.intra (91.183.184.98) by AM3PR05CA0134.eurprd05.prod.outlook.com (2603:10a6:207:3::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.28 via Frontend Transport; Tue, 6 Apr 2021 14:46:43 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 78951b52-2d3d-4e10-87d0-08d8f90acbaa X-MS-TrafficTypeDiagnostic: MR2P264MB0291: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KuLlRBObwdDELH6I+O+7KdbsLfaSPxvmYg5lCvQwAHi/GPaxugKP+KnNwNpezXXqwU1XIiw9vLe8Xm55QUWfHHSdpssrq5UBOonGhOCyVzRGz9N70xMZ1v5IYcSAb5lgdpU1VOqWLixks4lwNDje8dTRuv36Kusq6kTtzpS2PUC2v+o0Ph5T4LuY1XDwgdjma2BZwuIJwfPePulGtBi/1Y+XAUKvCgYKyA+KgmzSTvN+25uNb7DNyb3E3F3Kl6ngBY+K/tkdhGLoWSi3niSa2tPrI6Y3LrIE2S+UnMd4/FAFrMkT9N9ZpDbnH/1uOk0/r6a80r0ImoBQKDI9nqnO0588Id1AS1D8gWAhXeHOhycMz0+fnDMy/vLGp7cw3Cv7pcXnNj0pNVBHf5IrwMn28k3G5ZedYzlbadhm5f3d36Wt9oauf6VqZPzMUBvMiUz5LWYTYP2VvYOkS+iKUnHVDpPOquTt5mB58BcRBNEY60iiCguLmPPGfQcekLWYZLGaOjH/FzvlDz5e+kdA+jZfMu9AfMuc7u3kELZAzbCvMn6r7Un3G75lRyAXx31QE9pCud7CA2pzZMt/ykD4ASiF3YwKBBOtoTljT4fqF3QqmSFE5Z2+PNAVElRMWvXKxyPA5STshP8VZRY6px1hkkbjrG25A8wikS3XuX+MQukMgx6xraKsJwkgyYnAXr7TiHqn X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MRZP264MB2442.FRAP264.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(376002)(396003)(346002)(39850400004)(366004)(136003)(6486002)(1076003)(956004)(86362001)(316002)(5660300002)(478600001)(8676002)(36756003)(110136005)(66946007)(107886003)(52116002)(8936002)(38100700001)(83380400001)(6666004)(26005)(186003)(16526019)(2906002)(66476007)(6512007)(7416002)(66556008)(2616005)(6506007)(4326008)(38350700001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: E2280dhiug+fOwWcl7DGolNT9+NFudjsK1Ot6/bf6PRd0FrPdOlQ9Tp2phuR09j7RkZrZgPNtbczNXjScSwK+G6u2iXc9Wj3jHR8JBPUHi0USp9967+C7NYKt0wrx4mZ0GM1EbkGvxpnnUJeCEZv6krseZEssyfSMjI+yOVmJ2aKiR4b5pKhN7qEWC19TMP8n+sAm/qJuSzZ1M7kCqv/3JRygBJG5M28dYu9Tf7PJ0y47roh13ie24FDDifgF/s4IHC1E1ws0OcCTKiy7RWV9xw/srf3vAUMzobTig6/7jqjvoKgSYU2PFvuPguHmX5E71f0rv/j7UtUTZJBDrILCQa1Inw1mQcUcroH71KVGNDviAfY1e6F/c1ub8uAU+5Nkf62bMVTtkAo6B4s9Gigq3IMhzIR7ht6qbuLUhcd/A4XyYmJ4IwZ0h0WRDzJxOr4WQJxLHa05VPb+xWVOBUE7ftY3lWV0t1hmr+m8WLHio4ESSLUjCXCpzrL1q9T8TaTwf1Rto7t8YWtj4g0ATzd7frZh+ok/JujDXJv8gZmW4MQ3aTtCjr370Azg2kxEkB9OOttpfhCu8Dpk3F1HrWd1TMQhumdVQMKCfzgQq6BXGrwMn7f/MJXwCl/bBLVj78Zmvj07FZo+13Sb9k+4IOUC3qcEYyzMgwUatnJv5wj7zNtEst06FxRqBwwaqxc8PDKnSCPqBedodtS0pIZMfCAT3J3IBy/QmoP+/GYr/cWHvsbk3sfGCptPVqbY2z7Gj/jiFPdDKU1mz6Tb+2D0oMEx21+wASKw02s0jHHvxbCod01KAZYaqpkEUKbRGOA8i7LTqydwP/h0QFYQfW1pR6xqlbn76EA93wYfaNhTHcB4Dkgsg+BGv0+QzcGjbgVVkHR/Nte5+xKHRlcsdbWHXd7e8oAoyB6LOUD/9NruNFyBNhb5qSad8HT5/7POnYB7jrC6ZNvedZHzTAreI1Vuays7J3mKsSVytHKafxAfn2xEEcZLLrUtWfE4aNeyKsZD4YyJ8aLaQGQp9gzIn3SpZ8Dro8xwixu6CKY1fQUa4uFxkRHqFRmHVm7p1MQ5DWfEndZCZV5ROkbIpoRoAccKvz41dmGFkldojVeuEUk97VlD5zf3it2v1L3cx4fgtol3CpdMGo5BESQ+ic7MVNjBG/mL3UPRCVvD1WAeJakN+T6/9Ggw+fDWEbcl9EwwKWIEiyuD9BMINMH907ZeHsCKR/KC1Yv0u4TC9g92DHH321QldIaf2ydhVjoF4xOSw2DUgYK80wOBvBPJMzlTvQ7sQthl6afxmhVrCY3Btshd9bRuN9P24pnQ1gMKQOTLbTWdmuE X-OriginatorOrg: ekinops.com X-MS-Exchange-CrossTenant-Network-Message-Id: 78951b52-2d3d-4e10-87d0-08d8f90acbaa X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2442.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2021 14:46:43.5761 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f57b78a6-c654-4771-a72f-837275f46179 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: e/FaVFHmqCJZuQQEuVUHLqf5G3C+ssCV+LTBd5Q8iLd9AVe+y2SmFF9z19sHBz5gGZTfXkNMMb86ZDSoeh9u9ubbDP5fQVSM1T1Aia18qro= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR2P264MB0291 Subject: [dpdk-dev] [PATCH v5 1/1] eal/interrupts: add synchronous wrapper around unregister X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Avoid race with unregister interrupt handler if interrupt source has some active callbacks at the moment, use wrapper around rte_intr_callback_unregister() to check for -EAGAIN return value and to loop until rte_intr_callback_unregister() succeeds. Signed-off-by: Renata Saiakhova Acked-by: Anatoly Burakov Acked-by: Harman Kalra --- drivers/bus/pci/linux/pci_vfio.c | 2 +- lib/librte_eal/freebsd/eal_interrupts.c | 12 ++++++++++++ lib/librte_eal/include/rte_interrupts.h | 25 +++++++++++++++++++++++++ lib/librte_eal/linux/eal_interrupts.c | 12 ++++++++++++ lib/librte_eal/version.map | 1 + lib/librte_eal/windows/eal_interrupts.c | 8 ++++++++ 6 files changed, 59 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index 9d689d6fd..d3a59a117 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -409,7 +409,7 @@ pci_vfio_disable_notifier(struct rte_pci_device *dev) return -1; } - ret = rte_intr_callback_unregister(&dev->vfio_req_intr_handle, + ret = rte_intr_callback_unregister_sync(&dev->vfio_req_intr_handle, pci_vfio_req_handler, (void *)&dev->device); if (ret < 0) { diff --git a/lib/librte_eal/freebsd/eal_interrupts.c b/lib/librte_eal/freebsd/eal_interrupts.c index 72eeacbc1..86810845f 100644 --- a/lib/librte_eal/freebsd/eal_interrupts.c +++ b/lib/librte_eal/freebsd/eal_interrupts.c @@ -345,6 +345,18 @@ rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle, return ret; } +int +rte_intr_callback_unregister_sync(const struct rte_intr_handle *intr_handle, + rte_intr_callback_fn cb_fn, void *cb_arg) +{ + int ret = 0; + + while ((ret = rte_intr_callback_unregister(intr_handle, cb_fn, cb_arg)) == -EAGAIN) + rte_pause(); + + return ret; +} + int rte_intr_enable(const struct rte_intr_handle *intr_handle) { diff --git a/lib/librte_eal/include/rte_interrupts.h b/lib/librte_eal/include/rte_interrupts.h index e3b406abc..cc3bf45d8 100644 --- a/lib/librte_eal/include/rte_interrupts.h +++ b/lib/librte_eal/include/rte_interrupts.h @@ -94,6 +94,31 @@ rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle, rte_intr_callback_fn cb_fn, void *cb_arg, rte_intr_unregister_callback_fn ucb_fn); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice + * + * Loop until rte_intr_callback_unregister() succeeds. + * After a call to this function, + * the callback provided by the specified interrupt handle is unregistered. + * + * @param intr_handle + * pointer to the interrupt handle. + * @param cb + * callback address. + * @param cb_arg + * address of parameter for callback, (void *)-1 means to remove all + * registered which has the same callback address. + * + * @return + * - On success, return the number of callback entities removed. + * - On failure, a negative value. + */ +__rte_experimental +int +rte_intr_callback_unregister_sync(const struct rte_intr_handle *intr_handle, + rte_intr_callback_fn cb, void *cb_arg); + /** * It enables the interrupt for the specified handle. * diff --git a/lib/librte_eal/linux/eal_interrupts.c b/lib/librte_eal/linux/eal_interrupts.c index 1dd994bd1..22b3b7bcd 100644 --- a/lib/librte_eal/linux/eal_interrupts.c +++ b/lib/librte_eal/linux/eal_interrupts.c @@ -662,6 +662,18 @@ rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle, return ret; } +int +rte_intr_callback_unregister_sync(const struct rte_intr_handle *intr_handle, + rte_intr_callback_fn cb_fn, void *cb_arg) +{ + int ret = 0; + + while ((ret = rte_intr_callback_unregister(intr_handle, cb_fn, cb_arg)) == -EAGAIN) + rte_pause(); + + return ret; +} + int rte_intr_enable(const struct rte_intr_handle *intr_handle) { diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map index e23745ae6..88d88aaed 100644 --- a/lib/librte_eal/version.map +++ b/lib/librte_eal/version.map @@ -421,6 +421,7 @@ EXPERIMENTAL { rte_version_release; rte_version_suffix; rte_version_year; + rte_intr_callback_unregister_sync; }; INTERNAL { diff --git a/lib/librte_eal/windows/eal_interrupts.c b/lib/librte_eal/windows/eal_interrupts.c index 3b8266d38..1d4cf794d 100644 --- a/lib/librte_eal/windows/eal_interrupts.c +++ b/lib/librte_eal/windows/eal_interrupts.c @@ -131,6 +131,14 @@ rte_intr_callback_unregister( return 0; } +int +rte_intr_callback_unregister_sync( + __rte_unused const struct rte_intr_handle *intr_handle, + __rte_unused rte_intr_callback_fn cb_fn, __rte_unused void *cb_arg) +{ + return 0; +} + int rte_intr_enable(__rte_unused const struct rte_intr_handle *intr_handle) {