From mboxrd@z Thu Jan 1 00:00:00 1970 From: Raslan Darawsheh Subject: [PATCH v3 3/4] net/failsafe: replace sub-device pointer with port id Date: Mon, 18 Mar 2019 16:05:27 +0000 Message-ID: <1552925103-2821-4-git-send-email-rasland@mellanox.com> References: <1551779507-10857-1-git-send-email-rasland@mellanox.com> <1552925103-2821-1-git-send-email-rasland@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Cc: "dev@dpdk.org" , Thomas Monjalon , Raslan Darawsheh , "stephen@networkplumber.org" To: "gaetan.rivet@6wind.com" Return-path: Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50082.outbound.protection.outlook.com [40.107.5.82]) by dpdk.org (Postfix) with ESMTP id 9112A3572 for ; Mon, 18 Mar 2019 17:05:28 +0100 (CET) In-Reply-To: <1552925103-2821-1-git-send-email-rasland@mellanox.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" In multiprocess context, the pointer to sub-device is shared between processes. Previously, it was a pointer to per process eth_dev so it's needed to replace this dependency. Signed-off-by: Thomas Monjalon Signed-off-by: Raslan Darawsheh --- v2: - moved comment in fs_sdev about subs to this commit - added parenthesis around macro arguments. v3: - replaced shared data with port id for sub dev. - update comment on the sub_dev struct --- drivers/net/failsafe/failsafe.c | 6 ++++++ drivers/net/failsafe/failsafe_eal.c | 2 +- drivers/net/failsafe/failsafe_ether.c | 1 + drivers/net/failsafe/failsafe_private.h | 17 +++++++++++------ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsaf= e.c index 68926ca..e53a89d 100644 --- a/drivers/net/failsafe/failsafe.c +++ b/drivers/net/failsafe/failsafe.c @@ -30,6 +30,8 @@ fs_sub_device_alloc(struct rte_eth_dev *dev, uint8_t nb_subs; int ret; int i; + struct sub_device *sdev; + uint8_t sdev_iterator; =20 ret =3D failsafe_args_count_subdevice(dev, params); if (ret) @@ -51,6 +53,10 @@ fs_sub_device_alloc(struct rte_eth_dev *dev, for (i =3D 1; i < nb_subs; i++) PRIV(dev)->subs[i - 1].next =3D PRIV(dev)->subs + i; PRIV(dev)->subs[i - 1].next =3D PRIV(dev)->subs; + + FOREACH_SUBDEV(sdev, sdev_iterator, dev) { + sdev->sdev_port_id =3D RTE_MAX_ETHPORTS; + } return 0; } =20 diff --git a/drivers/net/failsafe/failsafe_eal.c b/drivers/net/failsafe/fai= lsafe_eal.c index 56d1669..74fd8e9 100644 --- a/drivers/net/failsafe/failsafe_eal.c +++ b/drivers/net/failsafe/failsafe_eal.c @@ -112,7 +112,7 @@ fs_bus_init(struct rte_eth_dev *dev) continue; } } - ETH(sdev) =3D &rte_eth_devices[pid]; + sdev->sdev_port_id =3D pid; SUB_ID(sdev) =3D i; sdev->fs_port_id =3D dev->data->port_id; sdev->dev =3D ETH(sdev)->device; diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/f= ailsafe_ether.c index 7fa209a..7ac23d4 100644 --- a/drivers/net/failsafe/failsafe_ether.c +++ b/drivers/net/failsafe/failsafe_ether.c @@ -294,6 +294,7 @@ fs_dev_remove(struct sub_device *sdev) case DEV_PARSED: case DEV_UNDEFINED: sdev->state =3D DEV_UNDEFINED; + sdev->sdev_port_id =3D RTE_MAX_ETHPORTS; /* the end */ break; } diff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe= /failsafe_private.h index af0c9d1..2a632d8 100644 --- a/drivers/net/failsafe/failsafe_private.h +++ b/drivers/net/failsafe/failsafe_private.h @@ -100,13 +100,15 @@ struct fs_stats { uint64_t timestamp; }; =20 +/* + * Allocated in shared memory. + */ struct sub_device { /* Exhaustive DPDK device description */ struct sub_device *next; struct rte_devargs devargs; - struct rte_bus *bus; - struct rte_device *dev; - struct rte_eth_dev *edev; + struct rte_bus *bus; /* for primary process only. */ + struct rte_device *dev; /* for primary process only. */ uint8_t sid; /* Device state machine */ enum dev_state state; @@ -118,6 +120,8 @@ struct sub_device { char *fd_str; /* fail-safe device backreference */ uint16_t fs_port_id; /* shared between processes */ + /* sub device port id*/ + uint16_t sdev_port_id; /* shared between processes */ /* flag calling for recollection */ volatile unsigned int remove:1; /* flow isolation state */ @@ -139,7 +143,7 @@ struct fs_priv { * subs[0] is the preferred device * any other is just another slave */ - struct sub_device *subs; + struct sub_device *subs; /* shared between processes */ uint8_t subs_head; /* if head =3D=3D tail, no subs */ uint8_t subs_tail; /* first invalid */ uint8_t subs_tx; /* current emitting device */ @@ -254,11 +258,12 @@ extern int failsafe_mac_from_arg; =20 /* sdev: (struct sub_device *) */ #define ETH(sdev) \ - ((sdev)->edev) + ((sdev)->sdev_port_id =3D=3D RTE_MAX_ETHPORTS ? \ + NULL : &rte_eth_devices[(sdev)->sdev_port_id]) =20 /* sdev: (struct sub_device *) */ #define PORT_ID(sdev) \ - (ETH(sdev)->data->port_id) + ((sdev)->sdev_port_id) =20 /* sdev: (struct sub_device *) */ #define SUB_ID(sdev) \ --=20 2.7.4