From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
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 <dev@dpdk.org>; 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 <hkalra@marvell.com>
To: Renata Saiakhova <Renata.Saiakhova@ekinops.com>, Anatoly Burakov
 <anatoly.burakov@intel.com>, Bruce Richardson <bruce.richardson@intel.com>,
 Ray Kinsella <mdr@ashroe.eu>, Neil Horman <nhorman@tuxdriver.com>
CC: "dev@dpdk.org" <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: <BN9PR18MB4204A5BA763810AA8FCD7B1AC5909@BN9PR18MB4204.namprd18.prod.outlook.com>
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: <BN8PR18MB257845704F0A5DB518122EE1C5909@BN8PR18MB2578.namprd18.prod.outlook.com>
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 <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <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>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

> 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 <hkalra@marvell.com>

> Signed-off-by: Renata Saiakhova <Renata.Saiakhova@ekinops.com>
> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>  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