[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
<SA6PR21MB42311D71F057BAFBD68353C0CE94A@SA6PR21MB4231.namprd21.prod.outlook.com>
Date: Sun, 11 May 2025 18:16:26 +0000
From: Long Li <longli@...rosoft.com>
To: Konstantin Taranov <kotaranov@...ux.microsoft.com>, Konstantin Taranov
<kotaranov@...rosoft.com>, "pabeni@...hat.com" <pabeni@...hat.com>, Haiyang
Zhang <haiyangz@...rosoft.com>, KY Srinivasan <kys@...rosoft.com>,
"edumazet@...gle.com" <edumazet@...gle.com>, "kuba@...nel.org"
<kuba@...nel.org>, "davem@...emloft.net" <davem@...emloft.net>, Dexuan Cui
<decui@...rosoft.com>, "wei.liu@...nel.org" <wei.liu@...nel.org>,
"jgg@...pe.ca" <jgg@...pe.ca>, "leon@...nel.org" <leon@...nel.org>
CC: "linux-rdma@...r.kernel.org" <linux-rdma@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: RE: [PATCH rdma-next v4 1/4] net: mana: Probe rdma device in mana
driver
> -----Original Message-----
> From: Konstantin Taranov <kotaranov@...ux.microsoft.com>
> Sent: Wednesday, May 7, 2025 8:59 AM
> To: Konstantin Taranov <kotaranov@...rosoft.com>; pabeni@...hat.com;
> Haiyang Zhang <haiyangz@...rosoft.com>; KY Srinivasan <kys@...rosoft.com>;
> edumazet@...gle.com; kuba@...nel.org; davem@...emloft.net; Dexuan Cui
> <decui@...rosoft.com>; wei.liu@...nel.org; Long Li <longli@...rosoft.com>;
> jgg@...pe.ca; leon@...nel.org
> Cc: linux-rdma@...r.kernel.org; linux-kernel@...r.kernel.org;
> netdev@...r.kernel.org
> Subject: [PATCH rdma-next v4 1/4] net: mana: Probe rdma device in mana driver
>
> From: Konstantin Taranov <kotaranov@...rosoft.com>
>
> Initialize gdma device for rdma inside mana module.
> For each gdma device, initialize an auxiliary ib device.
>
> Signed-off-by: Konstantin Taranov <kotaranov@...rosoft.com>
Reviewed-by: Long Li <longli@...rosoft.com>
> ---
> .../net/ethernet/microsoft/mana/gdma_main.c | 15 ++++++-
> drivers/net/ethernet/microsoft/mana/mana_en.c | 39 +++++++++++++++++--
> include/net/mana/mana.h | 3 ++
> 3 files changed, 52 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c
> b/drivers/net/ethernet/microsoft/mana/gdma_main.c
> index 8ee1aa3..59e7814 100644
> --- a/drivers/net/ethernet/microsoft/mana/gdma_main.c
> +++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c
> @@ -1005,7 +1005,6 @@ int mana_gd_register_device(struct gdma_dev *gd)
>
> return 0;
> }
> -EXPORT_SYMBOL_NS(mana_gd_register_device, "NET_MANA");
>
> int mana_gd_deregister_device(struct gdma_dev *gd) { @@ -1036,7 +1035,6
> @@ int mana_gd_deregister_device(struct gdma_dev *gd)
>
> return err;
> }
> -EXPORT_SYMBOL_NS(mana_gd_deregister_device, "NET_MANA");
>
> u32 mana_gd_wq_avail_space(struct gdma_queue *wq) { @@ -1579,8
> +1577,14 @@ static int mana_gd_probe(struct pci_dev *pdev, const struct
> pci_device_id *ent)
> if (err)
> goto cleanup_gd;
>
> + err = mana_rdma_probe(&gc->mana_ib);
> + if (err)
> + goto cleanup_mana;
> +
> return 0;
>
> +cleanup_mana:
> + mana_remove(&gc->mana, false);
> cleanup_gd:
> mana_gd_cleanup(pdev);
> unmap_bar:
> @@ -1608,6 +1612,7 @@ static void mana_gd_remove(struct pci_dev *pdev) {
> struct gdma_context *gc = pci_get_drvdata(pdev);
>
> + mana_rdma_remove(&gc->mana_ib);
> mana_remove(&gc->mana, false);
>
> mana_gd_cleanup(pdev);
> @@ -1631,6 +1636,7 @@ static int mana_gd_suspend(struct pci_dev *pdev,
> pm_message_t state) {
> struct gdma_context *gc = pci_get_drvdata(pdev);
>
> + mana_rdma_remove(&gc->mana_ib);
> mana_remove(&gc->mana, true);
>
> mana_gd_cleanup(pdev);
> @@ -1655,6 +1661,10 @@ static int mana_gd_resume(struct pci_dev *pdev)
> if (err)
> return err;
>
> + err = mana_rdma_probe(&gc->mana_ib);
> + if (err)
> + return err;
> +
> return 0;
> }
>
> @@ -1665,6 +1675,7 @@ static void mana_gd_shutdown(struct pci_dev *pdev)
>
> dev_info(&pdev->dev, "Shutdown was called\n");
>
> + mana_rdma_remove(&gc->mana_ib);
> mana_remove(&gc->mana, true);
>
> mana_gd_cleanup(pdev);
> diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c
> b/drivers/net/ethernet/microsoft/mana/mana_en.c
> index 5be0585..2013d0e 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_en.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
> @@ -2944,7 +2944,7 @@ static void remove_adev(struct gdma_dev *gd)
> gd->adev = NULL;
> }
>
> -static int add_adev(struct gdma_dev *gd)
> +static int add_adev(struct gdma_dev *gd, const char *name)
> {
> struct auxiliary_device *adev;
> struct mana_adev *madev;
> @@ -2960,7 +2960,7 @@ static int add_adev(struct gdma_dev *gd)
> goto idx_fail;
> adev->id = ret;
>
> - adev->name = "rdma";
> + adev->name = name;
> adev->dev.parent = gd->gdma_context->dev;
> adev->dev.release = adev_release;
> madev->mdev = gd;
> @@ -3076,7 +3076,7 @@ int mana_probe(struct gdma_dev *gd, bool resuming)
> }
> }
>
> - err = add_adev(gd);
> + err = add_adev(gd, "eth");
> out:
> if (err) {
> mana_remove(gd, false);
> @@ -3150,6 +3150,39 @@ out:
> dev_dbg(dev, "%s succeeded\n", __func__); }
>
> +int mana_rdma_probe(struct gdma_dev *gd) {
> + int err = 0;
> +
> + if (gd->dev_id.type != GDMA_DEVICE_MANA_IB) {
> + /* RDMA device is not detected on pci */
> + return err;
> + }
> +
> + err = mana_gd_register_device(gd);
> + if (err)
> + return err;
> +
> + err = add_adev(gd, "rdma");
> + if (err)
> + mana_gd_deregister_device(gd);
> +
> + return err;
> +}
> +
> +void mana_rdma_remove(struct gdma_dev *gd) {
> + if (gd->dev_id.type != GDMA_DEVICE_MANA_IB) {
> + /* RDMA device is not detected on pci */
> + return;
> + }
> +
> + if (gd->adev)
> + remove_adev(gd);
> +
> + mana_gd_deregister_device(gd);
> +}
> +
> struct net_device *mana_get_primary_netdev(struct mana_context *ac,
> u32 port_index,
> netdevice_tracker *tracker)
> diff --git a/include/net/mana/mana.h b/include/net/mana/mana.h index
> 0f78065..5857efc 100644
> --- a/include/net/mana/mana.h
> +++ b/include/net/mana/mana.h
> @@ -488,6 +488,9 @@ int mana_detach(struct net_device *ndev, bool
> from_close); int mana_probe(struct gdma_dev *gd, bool resuming); void
> mana_remove(struct gdma_dev *gd, bool suspending);
>
> +int mana_rdma_probe(struct gdma_dev *gd); void mana_rdma_remove(struct
> +gdma_dev *gd);
> +
> void mana_xdp_tx(struct sk_buff *skb, struct net_device *ndev); int
> mana_xdp_xmit(struct net_device *ndev, int n, struct xdp_frame **frames,
> u32 flags);
> --
> 2.43.0
Powered by blists - more mailing lists