Skip to content

Commit d838df2

Browse files
author
Al Viro
committed
vmci: propagate msghdr all way down to __qp_memcpy_from_queue()
... and switch it to memcpy_to_msg() Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent 56c39fb commit d838df2

File tree

3 files changed

+14
-12
lines changed

3 files changed

+14
-12
lines changed

drivers/misc/vmw_vmci/vmci_queue_pair.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <linux/uio.h>
2828
#include <linux/wait.h>
2929
#include <linux/vmalloc.h>
30+
#include <linux/skbuff.h>
3031

3132
#include "vmci_handle_array.h"
3233
#include "vmci_queue_pair.h"
@@ -429,11 +430,11 @@ static int __qp_memcpy_from_queue(void *dest,
429430
to_copy = size - bytes_copied;
430431

431432
if (is_iovec) {
432-
struct iovec *iov = (struct iovec *)dest;
433+
struct msghdr *msg = dest;
433434
int err;
434435

435436
/* The iovec will track bytes_copied internally. */
436-
err = memcpy_toiovec(iov, (u8 *)va + page_offset,
437+
err = memcpy_to_msg(msg, (u8 *)va + page_offset,
437438
to_copy);
438439
if (err != 0) {
439440
if (kernel_if->host)
@@ -3264,13 +3265,13 @@ EXPORT_SYMBOL_GPL(vmci_qpair_enquev);
32643265
* of bytes dequeued or < 0 on error.
32653266
*/
32663267
ssize_t vmci_qpair_dequev(struct vmci_qp *qpair,
3267-
void *iov,
3268+
struct msghdr *msg,
32683269
size_t iov_size,
32693270
int buf_type)
32703271
{
32713272
ssize_t result;
32723273

3273-
if (!qpair || !iov)
3274+
if (!qpair)
32743275
return VMCI_ERROR_INVALID_ARGS;
32753276

32763277
qp_lock(qpair);
@@ -3279,7 +3280,7 @@ ssize_t vmci_qpair_dequev(struct vmci_qp *qpair,
32793280
result = qp_dequeue_locked(qpair->produce_q,
32803281
qpair->consume_q,
32813282
qpair->consume_q_size,
3282-
iov, iov_size,
3283+
msg, iov_size,
32833284
qp_memcpy_from_queue_iov,
32843285
true);
32853286

@@ -3308,13 +3309,13 @@ EXPORT_SYMBOL_GPL(vmci_qpair_dequev);
33083309
* of bytes peeked or < 0 on error.
33093310
*/
33103311
ssize_t vmci_qpair_peekv(struct vmci_qp *qpair,
3311-
void *iov,
3312+
struct msghdr *msg,
33123313
size_t iov_size,
33133314
int buf_type)
33143315
{
33153316
ssize_t result;
33163317

3317-
if (!qpair || !iov)
3318+
if (!qpair)
33183319
return VMCI_ERROR_INVALID_ARGS;
33193320

33203321
qp_lock(qpair);
@@ -3323,7 +3324,7 @@ ssize_t vmci_qpair_peekv(struct vmci_qp *qpair,
33233324
result = qp_dequeue_locked(qpair->produce_q,
33243325
qpair->consume_q,
33253326
qpair->consume_q_size,
3326-
iov, iov_size,
3327+
msg, iov_size,
33273328
qp_memcpy_from_queue_iov,
33283329
false);
33293330

include/linux/vmw_vmci_api.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#define VMCI_KERNEL_API_VERSION_2 2
2525
#define VMCI_KERNEL_API_VERSION VMCI_KERNEL_API_VERSION_2
2626

27+
struct msghdr;
2728
typedef void (vmci_device_shutdown_fn) (void *device_registration,
2829
void *user_data);
2930

@@ -75,8 +76,8 @@ ssize_t vmci_qpair_peek(struct vmci_qp *qpair, void *buf, size_t buf_size,
7576
ssize_t vmci_qpair_enquev(struct vmci_qp *qpair,
7677
void *iov, size_t iov_size, int mode);
7778
ssize_t vmci_qpair_dequev(struct vmci_qp *qpair,
78-
void *iov, size_t iov_size, int mode);
79-
ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, void *iov, size_t iov_size,
79+
struct msghdr *msg, size_t iov_size, int mode);
80+
ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, struct msghdr *msg, size_t iov_size,
8081
int mode);
8182

8283
#endif /* !__VMW_VMCI_API_H__ */

net/vmw_vsock/vmci_transport.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1840,9 +1840,9 @@ static ssize_t vmci_transport_stream_dequeue(
18401840
int flags)
18411841
{
18421842
if (flags & MSG_PEEK)
1843-
return vmci_qpair_peekv(vmci_trans(vsk)->qpair, msg->msg_iov, len, 0);
1843+
return vmci_qpair_peekv(vmci_trans(vsk)->qpair, msg, len, 0);
18441844
else
1845-
return vmci_qpair_dequev(vmci_trans(vsk)->qpair, msg->msg_iov, len, 0);
1845+
return vmci_qpair_dequev(vmci_trans(vsk)->qpair, msg, len, 0);
18461846
}
18471847

18481848
static ssize_t vmci_transport_stream_enqueue(

0 commit comments

Comments
 (0)