u64 iova, u64 *lmt_addr)
 {
        u64 pa, val, pf;
-       int err;
+       int err = 0;
 
        if (!iova) {
                dev_err(rvu->dev, "%s Requested Null address for transulation\n", __func__);
                return -EINVAL;
        }
 
+       mutex_lock(&rvu->rsrc_lock);
        rvu_write64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_ADDR_REQ, iova);
        pf = rvu_get_pf(pcifunc) & 0x1F;
        val = BIT_ULL(63) | BIT_ULL(14) | BIT_ULL(13) | pf << 8 |
        err = rvu_poll_reg(rvu, BLKADDR_RVUM, RVU_AF_SMMU_ADDR_RSP_STS, BIT_ULL(0), false);
        if (err) {
                dev_err(rvu->dev, "%s LMTLINE iova transulation failed\n", __func__);
-               return err;
+               goto exit;
        }
        val = rvu_read64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_ADDR_RSP_STS);
        if (val & ~0x1ULL) {
                dev_err(rvu->dev, "%s LMTLINE iova transulation failed err:%llx\n", __func__, val);
-               return -EIO;
+               err = -EIO;
+               goto exit;
        }
        /* PA[51:12] = RVU_AF_SMMU_TLN_FLIT0[57:18]
         * PA[11:0] = IOVA[11:0]
        pa = rvu_read64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_TLN_FLIT0) >> 18;
        pa &= GENMASK_ULL(39, 0);
        *lmt_addr = (pa << 12) | (iova  & 0xFFF);
-
-       return 0;
+exit:
+       mutex_unlock(&rvu->rsrc_lock);
+       return err;
 }
 
 static int rvu_update_lmtaddr(struct rvu *rvu, u16 pcifunc, u64 lmt_addr)