|
@@ -49,6 +49,7 @@
|
|
|
|
|
|
#include <linux/interrupt.h>
|
|
#include <linux/interrupt.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
|
|
+#include <linux/prefetch.h>
|
|
#include <asm/bitops.h>
|
|
#include <asm/bitops.h>
|
|
|
|
|
|
#include "xprt_rdma.h"
|
|
#include "xprt_rdma.h"
|
|
@@ -298,17 +299,7 @@ rpcrdma_recvcq_process_wc(struct ib_wc *wc, struct list_head *sched_list)
|
|
rep->rr_len = wc->byte_len;
|
|
rep->rr_len = wc->byte_len;
|
|
ib_dma_sync_single_for_cpu(rdmab_to_ia(rep->rr_buffer)->ri_id->device,
|
|
ib_dma_sync_single_for_cpu(rdmab_to_ia(rep->rr_buffer)->ri_id->device,
|
|
rep->rr_iov.addr, rep->rr_len, DMA_FROM_DEVICE);
|
|
rep->rr_iov.addr, rep->rr_len, DMA_FROM_DEVICE);
|
|
-
|
|
|
|
- if (rep->rr_len >= 16) {
|
|
|
|
- struct rpcrdma_msg *p = (struct rpcrdma_msg *)rep->rr_base;
|
|
|
|
- unsigned int credits = ntohl(p->rm_credit);
|
|
|
|
-
|
|
|
|
- if (credits == 0)
|
|
|
|
- credits = 1; /* don't deadlock */
|
|
|
|
- else if (credits > rep->rr_buffer->rb_max_requests)
|
|
|
|
- credits = rep->rr_buffer->rb_max_requests;
|
|
|
|
- atomic_set(&rep->rr_buffer->rb_credits, credits);
|
|
|
|
- }
|
|
|
|
|
|
+ prefetch(rep->rr_base);
|
|
|
|
|
|
out_schedule:
|
|
out_schedule:
|
|
list_add_tail(&rep->rr_list, sched_list);
|
|
list_add_tail(&rep->rr_list, sched_list);
|
|
@@ -480,7 +471,6 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct rdma_cm_event *event)
|
|
case RDMA_CM_EVENT_DEVICE_REMOVAL:
|
|
case RDMA_CM_EVENT_DEVICE_REMOVAL:
|
|
connstate = -ENODEV;
|
|
connstate = -ENODEV;
|
|
connected:
|
|
connected:
|
|
- atomic_set(&rpcx_to_rdmax(ep->rep_xprt)->rx_buf.rb_credits, 1);
|
|
|
|
dprintk("RPC: %s: %sconnected\n",
|
|
dprintk("RPC: %s: %sconnected\n",
|
|
__func__, connstate > 0 ? "" : "dis");
|
|
__func__, connstate > 0 ? "" : "dis");
|
|
ep->rep_connected = connstate;
|
|
ep->rep_connected = connstate;
|
|
@@ -1186,7 +1176,6 @@ rpcrdma_buffer_create(struct rpcrdma_buffer *buf, struct rpcrdma_ep *ep,
|
|
|
|
|
|
buf->rb_max_requests = cdata->max_requests;
|
|
buf->rb_max_requests = cdata->max_requests;
|
|
spin_lock_init(&buf->rb_lock);
|
|
spin_lock_init(&buf->rb_lock);
|
|
- atomic_set(&buf->rb_credits, 1);
|
|
|
|
|
|
|
|
/* Need to allocate:
|
|
/* Need to allocate:
|
|
* 1. arrays for send and recv pointers
|
|
* 1. arrays for send and recv pointers
|