Skip to content

Commit 98b889c

Browse files
Konstantin Taranovrleon
authored andcommitted
RDMA/mana_ib: Add EQ creation for rnic adapter
Create an error EQ for the RNIC adapter. Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com> Link: https://lore.kernel.org/r/1712738551-22075-2-git-send-email-kotaranov@linux.microsoft.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
1 parent 23f59f4 commit 98b889c

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

drivers/infiniband/hw/mana/device.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,23 @@ static int mana_ib_probe(struct auxiliary_device *adev,
9292
goto deregister_device;
9393
}
9494

95+
ret = mana_ib_create_eqs(dev);
96+
if (ret) {
97+
ibdev_err(&dev->ib_dev, "Failed to create EQs, ret %d", ret);
98+
goto deregister_device;
99+
}
100+
95101
ret = ib_register_device(&dev->ib_dev, "mana_%d",
96102
mdev->gdma_context->dev);
97103
if (ret)
98-
goto deregister_device;
104+
goto destroy_eqs;
99105

100106
dev_set_drvdata(&adev->dev, dev);
101107

102108
return 0;
103109

110+
destroy_eqs:
111+
mana_ib_destroy_eqs(dev);
104112
deregister_device:
105113
mana_gd_deregister_device(dev->gdma_dev);
106114
free_ib_device:
@@ -113,9 +121,8 @@ static void mana_ib_remove(struct auxiliary_device *adev)
113121
struct mana_ib_dev *dev = dev_get_drvdata(&adev->dev);
114122

115123
ib_unregister_device(&dev->ib_dev);
116-
124+
mana_ib_destroy_eqs(dev);
117125
mana_gd_deregister_device(dev->gdma_dev);
118-
119126
ib_dealloc_device(&dev->ib_dev);
120127
}
121128

drivers/infiniband/hw/mana/main.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,3 +611,29 @@ int mana_ib_gd_query_adapter_caps(struct mana_ib_dev *dev)
611611

612612
return 0;
613613
}
614+
615+
int mana_ib_create_eqs(struct mana_ib_dev *mdev)
616+
{
617+
struct gdma_context *gc = mdev_to_gc(mdev);
618+
struct gdma_queue_spec spec = {};
619+
int err;
620+
621+
spec.type = GDMA_EQ;
622+
spec.monitor_avl_buf = false;
623+
spec.queue_size = EQ_SIZE;
624+
spec.eq.callback = NULL;
625+
spec.eq.context = mdev;
626+
spec.eq.log2_throttle_limit = LOG2_EQ_THROTTLE;
627+
spec.eq.msix_index = 0;
628+
629+
err = mana_gd_create_mana_eq(&gc->mana_ib, &spec, &mdev->fatal_err_eq);
630+
if (err)
631+
return err;
632+
633+
return 0;
634+
}
635+
636+
void mana_ib_destroy_eqs(struct mana_ib_dev *mdev)
637+
{
638+
mana_gd_destroy_queue(mdev_to_gc(mdev), mdev->fatal_err_eq);
639+
}

drivers/infiniband/hw/mana/mana_ib.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ struct mana_ib_queue {
5454
struct mana_ib_dev {
5555
struct ib_device ib_dev;
5656
struct gdma_dev *gdma_dev;
57+
struct gdma_queue *fatal_err_eq;
5758
struct mana_ib_adapter_caps adapter_caps;
5859
};
5960

@@ -233,4 +234,8 @@ int mana_ib_query_gid(struct ib_device *ibdev, u32 port, int index,
233234
void mana_ib_disassociate_ucontext(struct ib_ucontext *ibcontext);
234235

235236
int mana_ib_gd_query_adapter_caps(struct mana_ib_dev *mdev);
237+
238+
int mana_ib_create_eqs(struct mana_ib_dev *mdev);
239+
240+
void mana_ib_destroy_eqs(struct mana_ib_dev *mdev);
236241
#endif

0 commit comments

Comments
 (0)