From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id CB912A056A; Thu, 11 Mar 2021 10:44:20 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7D4A340689; Thu, 11 Mar 2021 10:44:20 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id E59CD4003D for ; Thu, 11 Mar 2021 10:44:18 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 12B9Q4WT021130; Thu, 11 Mar 2021 01:44:15 -0800 Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2168.outbound.protection.outlook.com [104.47.56.168]) by mx0b-0016f401.pphosted.com with ESMTP id 374drr6sp8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 11 Mar 2021 01:44:15 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f/ifSifaJmFCN26Yu9biQTCqq0DtU8bHr6xCJElmphf9Q+KFxIZZRg+CxKn0n89RsFHCDqiAENteVoYrMMRxbaysHkRpRvIZtNyYDTXSal5ehTURJ9/xx0CH2XVvu5UGDkNX5WRJztUsHEfYoCG5h7Q+9PGG8/KAC2q/kKFXTU3hSb26T5JTJNc2W2SvLDLNHkLXI7OFxqgunmFSv1bVqaXFZIyL5yaYfasucuuIXxPE3JuWtsoFQjt7MMNcoIU2GdibWs5/F9MreIwsiBYaTAa/b+YmwI23fh6ilz0xKSigb1PECxfBuXc4vXC3qxlNvfBLe/tOVdTfw9Jh+G7C+w== 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=FTU2wC4vEYOlL68yYq2oDxXw+n45naU9rVFWOul0s+Y=; b=ItaG48MF74KSE92t3LG0bzi1fM9d/qBq1lV6E07ify93uVxzZfTS2dYiBqZLgGMPSoJWZyS3ApG6t/2gGc4aiuJ66Y2dJgeDA79qGLWt7WD2tnSBYfqY9DCykd5HYT5lJ0lOB7ibOqp0hcYzPLA8GD1liGMwwyjmVJMORyqv4h5QKnONDOpFzeVQBiA0wOfQjADl5kletT53AJ9zjGk7cj9G1avi3WKTnwzDiVf+Uwz/4wcv8dxCARvT4A3PDNUBxmWCewsDHAg2g81aaNPCxVzxb0mYUvxvGG4J3wkR7k8yi/FDrsqtfAUKxc03JXOcadscQqh7DRCkKosXNIsddA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FTU2wC4vEYOlL68yYq2oDxXw+n45naU9rVFWOul0s+Y=; b=OmyygwTMfR+shSSF+bVGdA+A5Ypf8MYthKEziEtXLpYsclLT/kCQgJDWNmzxdHT/ZA8VB4WPakARa12LminDPK/S6GGJFX0u76c8HwZAcu9HWvQz1aouuYjQwkFgRm0o+9kWx1+ae1nNaDdY3mWuxtlsVWf+mylCSW7NslZU62g= Received: from BN9PR18MB4204.namprd18.prod.outlook.com (2603:10b6:408:119::18) by BN8PR18MB2578.namprd18.prod.outlook.com (2603:10b6:408:9b::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.31; Thu, 11 Mar 2021 09:44:12 +0000 Received: from BN9PR18MB4204.namprd18.prod.outlook.com ([fe80::90dd:ed38:b4d6:91b8]) by BN9PR18MB4204.namprd18.prod.outlook.com ([fe80::90dd:ed38:b4d6:91b8%6]) with mapi id 15.20.3912.030; Thu, 11 Mar 2021 09:44:12 +0000 From: Harman Kalra To: Renata Saiakhova , Anatoly Burakov , Bruce Richardson , Ray Kinsella , Neil Horman CC: "dev@dpdk.org" Thread-Topic: [EXT] [PATCH v4 1/1] eal/interrupts: add synchronous wrapper around unregister Thread-Index: AQHXBj0IWwkwCdKZe0efudzQIlxJrap+qX9g Date: Thu, 11 Mar 2021 09:44:12 +0000 Message-ID: References: <20210218212746.3073-1-Renata.Saiakhova@ekinops.com> <20210218212746.3073-2-Renata.Saiakhova@ekinops.com> In-Reply-To: <20210218212746.3073-2-Renata.Saiakhova@ekinops.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: ekinops.com; dkim=none (message not signed) header.d=none;ekinops.com; dmarc=none action=none header.from=marvell.com; x-originating-ip: [117.98.139.174] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a22b2232-9015-4f7f-eee7-08d8e4723a25 x-ms-traffictypediagnostic: BN8PR18MB2578: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RBNxwaDbv5lUeeNliglV8oLSqDE0E9q0NRWdMaYV3RQfyONZbZ1qIHtdVLluePvwXCsja3/Gr+MEZeh8GSWHvq490FuCjGMDXbFxpqbgsG1GGsTJ2PZLkfyzW1nfN5SLAP8KjrKYmy+o66ne9ozgKjpE74rvFqKfjgxTA692f/8gkbtntgXOBVEkuJYMey/SRx8sgchyoepvgtG0ltT9Amtqvy+IHajR9//8HW8lUWi8h33KlZENz9Kl1MzJhooDEkr9NqtQZBK/n/M0E0LYBU1RXQJ2sKSGt9vslNiNIttFLNztIcN06TOVUvN+26tIOaAfQLEh0y06qMfOBT30aXbDDZayzv8wtdwza2VH8Ejok3zEWy3ar75zqvVm79yS564dJSaGLsWekDlo6GGGC3k/CFXc+Vpk699p9wnHz5Aq+oBu1irKUEYWp2xLjdEXIWsxL2kItX9gFgccXsYtfQMkYNLmhbiNXTSpXDZmTAWIU9DjH5GmszedH2fIJLEVVkrzoLOGZ64DS5QNurTBBZGFU1ecG663bMkdX5QFLShn3WjCtzXec9XzBmUA34yE x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR18MB4204.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(136003)(376002)(346002)(39860400002)(366004)(2906002)(71200400001)(26005)(186003)(66946007)(9686003)(66446008)(55016002)(76116006)(66556008)(6506007)(110136005)(52536014)(316002)(478600001)(66476007)(8936002)(83380400001)(7696005)(5660300002)(33656002)(86362001)(4326008)(8676002)(64756008); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?biHl9EwMIe57E8MglS4pyevXri+x18m1v/3/iUFzyfPe3AI+XcVcwWUQPnx9?= =?us-ascii?Q?S966uL4yaQGnPmq8MoZnWjNAYa7YJvEZgenrh9zZIth3/sKcPgdIPJiH/y+4?= =?us-ascii?Q?ZP6PnBNJXE/FroOJgeD3mudjsknfZAHUqI5AlnT3WpFUWZu/NbpoLXfr1+4N?= =?us-ascii?Q?8xya4SuRVsrPWAtRZ8x25XpbeYojQrfttQt58SznPe97RlbvU0V991i+5NOg?= =?us-ascii?Q?jds5qoaogRPeKVBLxNMNxy85RSNnMo+XXdvADDj7YkVA1l3QY+NUpKjbU31r?= =?us-ascii?Q?1mgWEL+e/hwdyDvxJ6UmgHD+tC5oCaBH+FHAr2C+T7FevO0aTrxNGzff7ys7?= =?us-ascii?Q?bn6nl3BluYLGHHZ5GLvuqaoygxxndcl/QCDVr7YUmhhP+aDg7yLxbqAaYrak?= =?us-ascii?Q?jXJuA5ldZTZ+9fLq3nEicyY1fM9Z+sCN9GNh9YqzhXaBA096XOAvonZOFk/1?= =?us-ascii?Q?kDjTRPfpdM4sWj8M5BQ5D4UisYNrjfdrkp+Jhjz7BCnOLc/vPoD+a062oCvg?= =?us-ascii?Q?Qy/OSiA/eCDo5aXRRQGgkUs9t1JdSQ5qrWvSieTMwWt0nAZ//ho6rgWlh5uJ?= =?us-ascii?Q?9Cvyw2hnmgJ4Yf+m3vD+fRfUVWly9eLPPdjEh+kb+7ttHGYS0avMBP0Xc/Db?= =?us-ascii?Q?7+Blxlz5hmn9rgL8b6YZuyeCY5O7gdtCMLlvqQBSihfXPzzyfwkjoXC7Ljqp?= =?us-ascii?Q?/s7ownW/8PFKx3kucBl15IbDG4ovdZCgfSPJ36XGDpN8IrfnnZJvuzJcp4Fe?= =?us-ascii?Q?NWUzkxp4WQo6YyprMF7NemXVBuCRKAdLeIkTOyk2L7LmOjsg/MUoDW9J1hBb?= =?us-ascii?Q?gkpvO0omOUhEpPStPsADBwI5GgW735VDIFPP/vI3j4bf2ve5zJFpTUd0cHGl?= =?us-ascii?Q?bqq6eYdPgO1RWRmJAjN+9EPJDQL+fNfB0CAynSjZnr3/dHvYdkFbFvmQvkZa?= =?us-ascii?Q?NA2hrCqgNYkXmD53BivAWGp0mGUb27UfBxeE+UR8grmK9PKsyE9gDHqM7/xt?= =?us-ascii?Q?0Xn2JCIZF9L5/CKb0m5KUzZJt8Ji21JMzDTdFKM2xqwgiAEIVrLIJX4CZ+9h?= =?us-ascii?Q?9LmsYAST0jVkPbVGGs28aE70118BwplI/nfz48zPd9o5PC+trK9IsiyLuFcP?= =?us-ascii?Q?a7/T6xL+41XY6x0GDassSOupFkJKyyKAujHt659a3H5owVYDXdaXHjLW+ued?= =?us-ascii?Q?VJkcMnViJVfbefEPeEpNSyfEvDSu7znInpn+5dt3k7/NJeMb4DYZzU79XL5I?= =?us-ascii?Q?jDTUJsfeGV4pOPI+C7gKyKNL/utWyo7s5kl7icu0FsW+LHTTl7JvcED0dFrB?= =?us-ascii?Q?UBrq8pa87YcW0A/aBcHM/VWG?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR18MB4204.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a22b2232-9015-4f7f-eee7-08d8e4723a25 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Mar 2021 09:44:12.4779 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: G43hpWGV+nNY4IEa6CCiY7Fww8wl5lL1Q6NTcxcxT07LLVxEbGvm/QTPgEF0e/8aIgc/FMamOkO5zL7ktppgZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR18MB2578 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.369, 18.0.761 definitions=2021-03-11_04:2021-03-10, 2021-03-11 signatures=0 Subject: Re: [dpdk-dev] [EXT] [PATCH v4 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. >=20 Hi Renata, Thanks for the clarification, changes looks good to me. Acked-by: Harman Kalra > Signed-off-by: Renata Saiakhova > Acked-by: Anatoly Burakov > --- > 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 + > 5 files changed, 51 insertions(+), 1 deletion(-) >=20 > diff --git a/drivers/bus/pci/linux/pci_vfio.c > b/drivers/bus/pci/linux/pci_vfio.c > index e3f7b6abe..c14f7f8c4 100644 > --- a/drivers/bus/pci/linux/pci_vfio.c > +++ b/drivers/bus/pci/linux/pci_vfio.c > @@ -414,7 +414,7 @@ pci_vfio_disable_notifier(struct rte_pci_device > *dev) > return -1; > } >=20 > - ret =3D rte_intr_callback_unregister(&dev->vfio_req_intr_handle, > + ret =3D 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; > } >=20 > +int > +rte_intr_callback_unregister_sync(const struct rte_intr_handle > *intr_handle, > + rte_intr_callback_fn cb_fn, void *cb_arg) { > + int ret =3D 0; > + > + while ((ret =3D rte_intr_callback_unregister(intr_handle, cb_fn, > cb_arg)) =3D=3D -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); >=20 > +/** > + * @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 unregister= ed. > + * > + * @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; > } >=20 > +int > +rte_intr_callback_unregister_sync(const struct rte_intr_handle > *intr_handle, > + rte_intr_callback_fn cb_fn, void *cb_arg) { > + int ret =3D 0; > + > + while ((ret =3D rte_intr_callback_unregister(intr_handle, cb_fn, > cb_arg)) =3D=3D -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 > fce90a112..56caa9cc9 100644 > --- a/lib/librte_eal/version.map > +++ b/lib/librte_eal/version.map > @@ -318,6 +318,7 @@ EXPERIMENTAL { > rte_fbarray_find_rev_biggest_free; > rte_fbarray_find_rev_biggest_used; > rte_intr_callback_unregister_pending; > + rte_intr_callback_unregister_sync; > rte_realloc_socket; >=20 > # added in 19.08 > -- > 2.17.2