net/smc: synchronize buffer usage with device
Usage of send buffer "sndbuf" is synced (a) before filling sndbuf for cpu access (b) after filling sndbuf for device access Usage of receive buffer "RMB" is synced (a) before reading RMB content for cpu access (b) after reading RMB content for device access Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
b33982c3a6
commit
10428dd835
@@ -170,6 +170,7 @@ copy:
|
||||
copylen, conn->rmbe_size - cons.count);
|
||||
chunk_len_sum = chunk_len;
|
||||
chunk_off = cons.count;
|
||||
smc_rmb_sync_sg_for_cpu(conn);
|
||||
for (chunk = 0; chunk < 2; chunk++) {
|
||||
if (!(flags & MSG_TRUNC)) {
|
||||
rc = memcpy_to_msg(msg, rcvbuf_base + chunk_off,
|
||||
@@ -177,6 +178,7 @@ copy:
|
||||
if (rc) {
|
||||
if (!read_done)
|
||||
read_done = -EFAULT;
|
||||
smc_rmb_sync_sg_for_device(conn);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@@ -190,6 +192,7 @@ copy:
|
||||
chunk_len_sum += chunk_len;
|
||||
chunk_off = 0; /* modulo offset in recv ring buffer */
|
||||
}
|
||||
smc_rmb_sync_sg_for_device(conn);
|
||||
|
||||
/* update cursors */
|
||||
if (!(flags & MSG_PEEK)) {
|
||||
|
Reference in New Issue
Block a user