RE: [Patch v4 12/12] RDMA/mana_ib: Add a driver for Microsoft Azure Network Adapter

From: Dexuan Cui
Date: Wed Jul 13 2022 - 03:37:04 EST


> From: Ajay Sharma <sharmaajay@xxxxxxxxxxxxx>
> Sent: Tuesday, July 12, 2022 9:33 PM
> > ...
> > + switch (mr_params->mr_type) {
> > + case GDMA_MR_TYPE_GVA:
> > + req.mr_type = GDMA_MR_TYPE_GVA;
> > + req.gva.dma_region_handle = mr_params->gva.dma_region_handle;
> > + req.gva.virtual_address = mr_params->gva.virtual_address;
> > + req.gva.access_flags = mr_params->gva.access_flags;
> > + break;
> > +
> > + case GDMA_MR_TYPE_GPA:
> > + req.mr_type = GDMA_MR_TYPE_GPA;
> > + req.gpa.access_flags = mr_params->gpa.access_flags;
> > + break;
> > +
> > + case GDMA_MR_TYPE_FMR:
> > + req.mr_type = GDMA_MR_TYPE_FMR;
> > + req.fmr.page_size = mr_params->fmr.page_size;
> > + req.fmr.reserved_pte_count = mr_params->fmr.reserved_pte_count;
> > + break;
> > +
> > + default:
> > + ibdev_dbg(&dev->ib_dev,
> > + "invalid param (GDMA_MR_TYPE) passed, type %d\n",
> > + req.mr_type);
>
> Here req.mr_type is always 0.
> We should remove the 3 above lines of "req.mr_type = ...", and add a line
> "req.mr_type = mr_params->mr_type;" before the "switch" line..
>
> No, That's incorrect. The mr_type is being explicitly set here to control what
> regions get exposed to the user and kernel. GPA and FMR are never exposed to
> user. So we cannot assign req.mr_type = mr_params->mr_type.

I'm not following you. I meant the below change, which should have no
functional change, right? In the "default:" branch , we just "goto error;", so
there is no functional change either.

--- drivers/infiniband/hw/mana/main.c.orig
+++ drivers/infiniband/hw/mana/main.c
@@ -394,21 +394,19 @@
sizeof(resp));
req.pd_handle = mr_params->pd_handle;

+ req.mr_type = mr_params->mr_type;
switch (mr_params->mr_type) {
case GDMA_MR_TYPE_GVA:
- req.mr_type = GDMA_MR_TYPE_GVA;
req.gva.dma_region_handle = mr_params->gva.dma_region_handle;
req.gva.virtual_address = mr_params->gva.virtual_address;
req.gva.access_flags = mr_params->gva.access_flags;
break;

case GDMA_MR_TYPE_GPA:
- req.mr_type = GDMA_MR_TYPE_GPA;
req.gpa.access_flags = mr_params->gpa.access_flags;
break;

case GDMA_MR_TYPE_FMR:
- req.mr_type = GDMA_MR_TYPE_FMR;
req.fmr.page_size = mr_params->fmr.page_size;
req.fmr.reserved_pte_count = mr_params->fmr.reserved_pte_count;
break;