Skip to content

Commit ced82fc

Browse files
Konstantin Taranovrleon
authored andcommitted
net: mana: Probe rdma device in mana driver
Initialize gdma device for rdma inside mana module. For each gdma device, initialize an auxiliary ib device. Signed-off-by: Konstantin Taranov <[email protected]> Link: https://patch.msgid.link/[email protected] Reviewed-by: Long Li <[email protected]> Signed-off-by: Leon Romanovsky <[email protected]>
1 parent 8536666 commit ced82fc

File tree

3 files changed

+52
-5
lines changed

3 files changed

+52
-5
lines changed

drivers/net/ethernet/microsoft/mana/gdma_main.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,6 @@ int mana_gd_register_device(struct gdma_dev *gd)
10051005

10061006
return 0;
10071007
}
1008-
EXPORT_SYMBOL_NS(mana_gd_register_device, "NET_MANA");
10091008

10101009
int mana_gd_deregister_device(struct gdma_dev *gd)
10111010
{
@@ -1036,7 +1035,6 @@ int mana_gd_deregister_device(struct gdma_dev *gd)
10361035

10371036
return err;
10381037
}
1039-
EXPORT_SYMBOL_NS(mana_gd_deregister_device, "NET_MANA");
10401038

10411039
u32 mana_gd_wq_avail_space(struct gdma_queue *wq)
10421040
{
@@ -1579,8 +1577,14 @@ static int mana_gd_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
15791577
if (err)
15801578
goto cleanup_gd;
15811579

1580+
err = mana_rdma_probe(&gc->mana_ib);
1581+
if (err)
1582+
goto cleanup_mana;
1583+
15821584
return 0;
15831585

1586+
cleanup_mana:
1587+
mana_remove(&gc->mana, false);
15841588
cleanup_gd:
15851589
mana_gd_cleanup(pdev);
15861590
unmap_bar:
@@ -1608,6 +1612,7 @@ static void mana_gd_remove(struct pci_dev *pdev)
16081612
{
16091613
struct gdma_context *gc = pci_get_drvdata(pdev);
16101614

1615+
mana_rdma_remove(&gc->mana_ib);
16111616
mana_remove(&gc->mana, false);
16121617

16131618
mana_gd_cleanup(pdev);
@@ -1631,6 +1636,7 @@ static int mana_gd_suspend(struct pci_dev *pdev, pm_message_t state)
16311636
{
16321637
struct gdma_context *gc = pci_get_drvdata(pdev);
16331638

1639+
mana_rdma_remove(&gc->mana_ib);
16341640
mana_remove(&gc->mana, true);
16351641

16361642
mana_gd_cleanup(pdev);
@@ -1655,6 +1661,10 @@ static int mana_gd_resume(struct pci_dev *pdev)
16551661
if (err)
16561662
return err;
16571663

1664+
err = mana_rdma_probe(&gc->mana_ib);
1665+
if (err)
1666+
return err;
1667+
16581668
return 0;
16591669
}
16601670

@@ -1665,6 +1675,7 @@ static void mana_gd_shutdown(struct pci_dev *pdev)
16651675

16661676
dev_info(&pdev->dev, "Shutdown was called\n");
16671677

1678+
mana_rdma_remove(&gc->mana_ib);
16681679
mana_remove(&gc->mana, true);
16691680

16701681
mana_gd_cleanup(pdev);

drivers/net/ethernet/microsoft/mana/mana_en.c

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2945,7 +2945,7 @@ static void remove_adev(struct gdma_dev *gd)
29452945
gd->adev = NULL;
29462946
}
29472947

2948-
static int add_adev(struct gdma_dev *gd)
2948+
static int add_adev(struct gdma_dev *gd, const char *name)
29492949
{
29502950
struct auxiliary_device *adev;
29512951
struct mana_adev *madev;
@@ -2961,7 +2961,7 @@ static int add_adev(struct gdma_dev *gd)
29612961
goto idx_fail;
29622962
adev->id = ret;
29632963

2964-
adev->name = "rdma";
2964+
adev->name = name;
29652965
adev->dev.parent = gd->gdma_context->dev;
29662966
adev->dev.release = adev_release;
29672967
madev->mdev = gd;
@@ -3077,7 +3077,7 @@ int mana_probe(struct gdma_dev *gd, bool resuming)
30773077
}
30783078
}
30793079

3080-
err = add_adev(gd);
3080+
err = add_adev(gd, "eth");
30813081
out:
30823082
if (err) {
30833083
mana_remove(gd, false);
@@ -3151,6 +3151,39 @@ void mana_remove(struct gdma_dev *gd, bool suspending)
31513151
dev_dbg(dev, "%s succeeded\n", __func__);
31523152
}
31533153

3154+
int mana_rdma_probe(struct gdma_dev *gd)
3155+
{
3156+
int err = 0;
3157+
3158+
if (gd->dev_id.type != GDMA_DEVICE_MANA_IB) {
3159+
/* RDMA device is not detected on pci */
3160+
return err;
3161+
}
3162+
3163+
err = mana_gd_register_device(gd);
3164+
if (err)
3165+
return err;
3166+
3167+
err = add_adev(gd, "rdma");
3168+
if (err)
3169+
mana_gd_deregister_device(gd);
3170+
3171+
return err;
3172+
}
3173+
3174+
void mana_rdma_remove(struct gdma_dev *gd)
3175+
{
3176+
if (gd->dev_id.type != GDMA_DEVICE_MANA_IB) {
3177+
/* RDMA device is not detected on pci */
3178+
return;
3179+
}
3180+
3181+
if (gd->adev)
3182+
remove_adev(gd);
3183+
3184+
mana_gd_deregister_device(gd);
3185+
}
3186+
31543187
struct net_device *mana_get_primary_netdev(struct mana_context *ac,
31553188
u32 port_index,
31563189
netdevice_tracker *tracker)

include/net/mana/mana.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,9 @@ int mana_detach(struct net_device *ndev, bool from_close);
488488
int mana_probe(struct gdma_dev *gd, bool resuming);
489489
void mana_remove(struct gdma_dev *gd, bool suspending);
490490

491+
int mana_rdma_probe(struct gdma_dev *gd);
492+
void mana_rdma_remove(struct gdma_dev *gd);
493+
491494
void mana_xdp_tx(struct sk_buff *skb, struct net_device *ndev);
492495
int mana_xdp_xmit(struct net_device *ndev, int n, struct xdp_frame **frames,
493496
u32 flags);

0 commit comments

Comments
 (0)