send_ring->pending_wqe++;
        send_info->read.length = send_info->write.length;
-       /* Read into the same write area */
-       send_info->read.addr = (uintptr_t)send_info->write.addr;
-       send_info->read.lkey = send_ring->mr->mkey;
+
+       /* Read into dedicated sync buffer */
+       send_info->read.addr = (uintptr_t)send_ring->sync_mr->dma_addr;
+       send_info->read.lkey = send_ring->sync_mr->mkey;
 
        if (send_ring->pending_wqe % send_ring->signal_th == 0)
                send_info->read.send_flags = IB_SEND_SIGNALED;
                goto free_mem;
        }
 
+       dmn->send_ring->sync_buff = kzalloc(dmn->send_ring->max_post_send_size,
+                                           GFP_KERNEL);
+       if (!dmn->send_ring->sync_buff) {
+               ret = -ENOMEM;
+               goto clean_mr;
+       }
+
        dmn->send_ring->sync_mr = dr_reg_mr(dmn->mdev,
                                            dmn->pdn, dmn->send_ring->sync_buff,
-                                           MIN_READ_SYNC);
+                                           dmn->send_ring->max_post_send_size);
        if (!dmn->send_ring->sync_mr) {
                ret = -ENOMEM;
-               goto clean_mr;
+               goto free_sync_mem;
        }
 
        return 0;
 
+free_sync_mem:
+       kfree(dmn->send_ring->sync_buff);
 clean_mr:
        dr_dereg_mr(dmn->mdev, dmn->send_ring->mr);
 free_mem:
        dr_dereg_mr(dmn->mdev, send_ring->sync_mr);
        dr_dereg_mr(dmn->mdev, send_ring->mr);
        kfree(send_ring->buf);
+       kfree(send_ring->sync_buff);
        kfree(send_ring);
 }
 
 
        size_t size;
 };
 
-#define MAX_SEND_CQE           64
-#define MIN_READ_SYNC          64
-
 struct mlx5dr_send_ring {
        struct mlx5dr_cq *cq;
        struct mlx5dr_qp *qp;
        u32 tx_head;
        void *buf;
        u32 buf_size;
-       u8 sync_buff[MIN_READ_SYNC];
+       u8 *sync_buff;
        struct mlx5dr_mr *sync_mr;
        spinlock_t lock; /* Protect the data path of the send ring */
        bool err_state; /* send_ring is not usable in err state */