From nobody Fri Dec 19 06:56:57 2025 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 15AE725393B; Fri, 25 Apr 2025 13:29:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745587779; cv=none; b=C+tUQUXcl7m9HiFV0CcRuGWcItt/IKgH5pF0B5qzG8UTDAkWogKr2DoR/va4g2mxJwMplu6ZWmUGwxMlYX0vVG2+Yyqzyf2Uc+uYamtzdDTgFiE2kyO1BL/CnvE7XTxmrnalFz/oV2uhFyreUAII/DqADsi46dmxLn83gAKjcio= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745587779; c=relaxed/simple; bh=eWOm3tIdj0/52qr5XJF93UlruH3ToGnAu4hQP5+FsAs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=RahJV8N6boaod/xO6RIhD2yUavEk1CntW/3SGeNEuotp/z25WD1mm4Bko+dincIjYDoMx/esiPyD9XpzFswW757qjdAK3auhqGfemOKCnJBzhG4KETzi3XqOYdiYGYy33DhmKSkePxBVOAiUEullcLUNxJ94gW7AEfbSbaQhJK0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=EHtWxRFj; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="EHtWxRFj" Received: by linux.microsoft.com (Postfix, from userid 1186) id A066D2020958; Fri, 25 Apr 2025 06:29:37 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com A066D2020958 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1745587777; bh=aCEe+5U2tYKwmEkS8vQ+CK+zdrUx5Hi7XJADJXyNCTU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EHtWxRFj39HniFDbxNPQUhSIxR3uzI624LTeISIgF0s3296XXtNhRK75vuM9NCdH+ JgSyhk19THFYR6BA4BObsyPhb3WV8hCqZ0RFEjIzpzCg7k6hGctW38FvQyXoO8uITE ECQHn2hHUcsaJKaQNYn7bSIpxDt4kAicS0r+IINQ= From: Konstantin Taranov To: kotaranov@microsoft.com, pabeni@redhat.com, haiyangz@microsoft.com, kys@microsoft.com, edumazet@google.com, kuba@kernel.org, davem@davemloft.net, decui@microsoft.com, wei.liu@kernel.org, longli@microsoft.com, jgg@ziepe.ca, leon@kernel.org Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH rdma-next v2 1/4] net: mana: Probe rdma device in mana driver Date: Fri, 25 Apr 2025 06:29:34 -0700 Message-Id: <1745587777-15716-2-git-send-email-kotaranov@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1745587777-15716-1-git-send-email-kotaranov@linux.microsoft.com> References: <1745587777-15716-1-git-send-email-kotaranov@linux.microsoft.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Konstantin Taranov Initialize gdma device for rdma inside mana module. For each gdma device, initialize an auxiliary ib device. Signed-off-by: Konstantin Taranov --- drivers/net/ethernet/microsoft/mana/gdma_main.c | 16 ++++++++-- drivers/net/ethernet/microsoft/mana/mana_en.c | 39 +++++++++++++++++++++= ++-- include/net/mana/mana.h | 3 ++ 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c b/drivers/net/= ethernet/microsoft/mana/gdma_main.c index b5156d4..1caf73c 100644 --- a/drivers/net/ethernet/microsoft/mana/gdma_main.c +++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c @@ -978,7 +978,6 @@ int mana_gd_register_device(struct gdma_dev *gd) =20 return 0; } -EXPORT_SYMBOL_NS(mana_gd_register_device, "NET_MANA"); =20 int mana_gd_deregister_device(struct gdma_dev *gd) { @@ -1009,7 +1008,6 @@ int mana_gd_deregister_device(struct gdma_dev *gd) =20 return err; } -EXPORT_SYMBOL_NS(mana_gd_deregister_device, "NET_MANA"); =20 u32 mana_gd_wq_avail_space(struct gdma_queue *wq) { @@ -1541,8 +1539,15 @@ static int mana_gd_probe(struct pci_dev *pdev, const= struct pci_device_id *ent) if (err) goto cleanup_gd; =20 + + err =3D mana_rdma_probe(&gc->mana_ib); + if (err) + goto cleanup_mana; + return 0; =20 +cleanup_mana: + mana_remove(&gc->mana, false); cleanup_gd: mana_gd_cleanup(pdev); unmap_bar: @@ -1569,6 +1574,7 @@ static void mana_gd_remove(struct pci_dev *pdev) { struct gdma_context *gc =3D pci_get_drvdata(pdev); =20 + mana_rdma_remove(&gc->mana_ib); mana_remove(&gc->mana, false); =20 mana_gd_cleanup(pdev); @@ -1588,6 +1594,7 @@ static int mana_gd_suspend(struct pci_dev *pdev, pm_m= essage_t state) { struct gdma_context *gc =3D pci_get_drvdata(pdev); =20 + mana_rdma_remove(&gc->mana_ib); mana_remove(&gc->mana, true); =20 mana_gd_cleanup(pdev); @@ -1612,6 +1619,10 @@ static int mana_gd_resume(struct pci_dev *pdev) if (err) return err; =20 + err =3D mana_rdma_probe(&gc->mana_ib); + if (err) + return err; + return 0; } =20 @@ -1622,6 +1633,7 @@ static void mana_gd_shutdown(struct pci_dev *pdev) =20 dev_info(&pdev->dev, "Shutdown was called\n"); =20 + mana_rdma_remove(&gc->mana_ib); mana_remove(&gc->mana, true); =20 mana_gd_cleanup(pdev); diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/et= hernet/microsoft/mana/mana_en.c index 4e870b1..e08b43f 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_en.c +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c @@ -2936,7 +2936,7 @@ static void remove_adev(struct gdma_dev *gd) gd->adev =3D NULL; } =20 -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; @@ -2952,7 +2952,7 @@ static int add_adev(struct gdma_dev *gd) goto idx_fail; adev->id =3D ret; =20 - adev->name =3D "rdma"; + adev->name =3D name; adev->dev.parent =3D gd->gdma_context->dev; adev->dev.release =3D adev_release; madev->mdev =3D gd; @@ -3064,7 +3064,7 @@ int mana_probe(struct gdma_dev *gd, bool resuming) } } =20 - err =3D add_adev(gd); + err =3D add_adev(gd, "eth"); out: if (err) mana_remove(gd, false); @@ -3131,6 +3131,39 @@ out: kfree(ac); } =20 +int mana_rdma_probe(struct gdma_dev *gd) +{ + int err =3D 0; + + if (gd->dev_id.type !=3D GDMA_DEVICE_MANA_IB) { + /* RDMA device is not detected on pci */ + return err; + } + + err =3D mana_gd_register_device(gd); + if (err) + return err; + + err =3D 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 !=3D 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_clos= e); int mana_probe(struct gdma_dev *gd, bool resuming); void mana_remove(struct gdma_dev *gd, bool suspending); =20 +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 **frame= s, u32 flags); --=20 1.8.3.1