OSDN Git Service

RDMA/ocrdma: Remove fbo from MR
authorJason Gunthorpe <jgg@nvidia.com>
Fri, 4 Sep 2020 22:41:58 +0000 (19:41 -0300)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 11 Sep 2020 13:24:54 +0000 (10:24 -0300)
This is always the same value as IOVA masked by the page size, just use
that clearer calculation directly.

It is unclear of ocrdma hardware can actually support a true fbo, if so it
could use a different algorithm to compute the best page size.

Link: https://lore.kernel.org/r/17-v2-270386b7e60b+28f4-umem_1_jgg@nvidia.com
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/ocrdma/ocrdma.h
drivers/infiniband/hw/ocrdma/ocrdma_hw.c
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c

index fcfe0e8..5eb61c1 100644 (file)
@@ -185,7 +185,6 @@ struct ocrdma_hw_mr {
        u32 num_pbes;
        u32 pbl_size;
        u32 pbe_size;
-       u64 fbo;
        u64 va;
 };
 
index e07bf0b..c51c3f4 100644 (file)
@@ -1962,6 +1962,7 @@ static int ocrdma_mbx_reg_mr(struct ocrdma_dev *dev, struct ocrdma_hw_mr *hwmr,
        int i;
        struct ocrdma_reg_nsmr *cmd;
        struct ocrdma_reg_nsmr_rsp *rsp;
+       u64 fbo = hwmr->va & (hwmr->pbe_size - 1);
 
        cmd = ocrdma_init_emb_mqe(OCRDMA_CMD_REGISTER_NSMR, sizeof(*cmd));
        if (!cmd)
@@ -1987,8 +1988,8 @@ static int ocrdma_mbx_reg_mr(struct ocrdma_dev *dev, struct ocrdma_hw_mr *hwmr,
                                        OCRDMA_REG_NSMR_HPAGE_SIZE_SHIFT;
        cmd->totlen_low = hwmr->len;
        cmd->totlen_high = upper_32_bits(hwmr->len);
-       cmd->fbo_low = (u32) (hwmr->fbo & 0xffffffff);
-       cmd->fbo_high = (u32) upper_32_bits(hwmr->fbo);
+       cmd->fbo_low = lower_32_bits(fbo);
+       cmd->fbo_high = upper_32_bits(fbo);
        cmd->va_loaddr = (u32) hwmr->va;
        cmd->va_hiaddr = (u32) upper_32_bits(hwmr->va);
 
index fa8d6e2..6f9c763 100644 (file)
@@ -871,7 +871,6 @@ struct ib_mr *ocrdma_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 len,
                goto umem_err;
 
        mr->hwmr.pbe_size = PAGE_SIZE;
-       mr->hwmr.fbo = ib_umem_offset(mr->umem);
        mr->hwmr.va = usr_addr;
        mr->hwmr.len = len;
        mr->hwmr.remote_wr = (acc & IB_ACCESS_REMOTE_WRITE) ? 1 : 0;