return ERR_PTR(err);
 }
 
-/**
- * revoke_mr - Fence all DMA on the MR
- * @mr: The MR to fence
- *
- * Upon return the NIC will not be doing any DMA to the pages under the MR,
- * and any DMA in progress will be completed. Failure of this function
- * indicates the HW has failed catastrophically.
- */
-static int revoke_mr(struct mlx5_ib_mr *mr)
-{
-       struct mlx5_umr_wr umrwr = {};
-
-       if (mr_to_mdev(mr)->mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)
-               return 0;
-
-       umrwr.wr.send_flags = MLX5_IB_SEND_UMR_DISABLE_MR |
-                             MLX5_IB_SEND_UMR_UPDATE_PD_ACCESS;
-       umrwr.wr.opcode = MLX5_IB_WR_UMR;
-       umrwr.pd = mr_to_mdev(mr)->umrc.pd;
-       umrwr.mkey = mr->mmkey.key;
-       umrwr.ignore_free_state = 1;
-
-       return mlx5_ib_post_send_wait(mr_to_mdev(mr), &umrwr);
-}
-
 /*
  * True if the change in access flags can be done via UMR, only some access
  * flags can be updated.
         * with it. This ensure the change is atomic relative to any use of the
         * MR.
         */
-       err = revoke_mr(mr);
+       err = mlx5r_umr_revoke_mr(mr);
        if (err)
                return err;
 
                 * Only one active MR can refer to a umem at one time, revoke
                 * the old MR before assigning the umem to the new one.
                 */
-               err = revoke_mr(mr);
+               err = mlx5r_umr_revoke_mr(mr);
                if (err)
                        return ERR_PTR(err);
                umem = mr->umem;
 
        /* Stop DMA */
        if (mr->cache_ent) {
-               if (revoke_mr(mr)) {
+               if (mlx5r_umr_revoke_mr(mr)) {
                        spin_lock_irq(&mr->cache_ent->lock);
                        mr->cache_ent->total_mrs--;
                        spin_unlock_irq(&mr->cache_ent->lock);
 
        up(&umrc->sem);
        return err;
 }
+
+/**
+ * mlx5r_umr_revoke_mr - Fence all DMA on the MR
+ * @mr: The MR to fence
+ *
+ * Upon return the NIC will not be doing any DMA to the pages under the MR,
+ * and any DMA in progress will be completed. Failure of this function
+ * indicates the HW has failed catastrophically.
+ */
+int mlx5r_umr_revoke_mr(struct mlx5_ib_mr *mr)
+{
+       struct mlx5_ib_dev *dev = mr_to_mdev(mr);
+       struct mlx5r_umr_wqe wqe = {};
+
+       if (dev->mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)
+               return 0;
+
+       wqe.ctrl_seg.mkey_mask |= get_umr_update_pd_mask();
+       wqe.ctrl_seg.mkey_mask |= get_umr_disable_mr_mask();
+       wqe.ctrl_seg.flags |= MLX5_UMR_INLINE;
+
+       MLX5_SET(mkc, &wqe.mkey_seg, free, 1);
+       MLX5_SET(mkc, &wqe.mkey_seg, pd, to_mpd(dev->umrc.pd)->pdn);
+       MLX5_SET(mkc, &wqe.mkey_seg, qpn, 0xffffff);
+       MLX5_SET(mkc, &wqe.mkey_seg, mkey_7_0,
+                mlx5_mkey_variant(mr->mmkey.key));
+
+       return mlx5r_umr_post_send_wait(dev, mr->mmkey.key, &wqe, false);
+}