diff options
Diffstat (limited to 'drivers/vhost')
| -rw-r--r-- | drivers/vhost/net.c | 9 | ||||
| -rw-r--r-- | drivers/vhost/test.c | 2 | ||||
| -rw-r--r-- | drivers/vhost/vhost.c | 5 | ||||
| -rw-r--r-- | drivers/vhost/vhost.h | 2 | 
4 files changed, 11 insertions, 7 deletions
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index f0da2c32fbd..5c170100de9 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -24,6 +24,7 @@  #include <linux/if_arp.h>  #include <linux/if_tun.h>  #include <linux/if_macvlan.h> +#include <linux/if_vlan.h>  #include <net/sock.h> @@ -238,7 +239,7 @@ static void handle_tx(struct vhost_net *net)  				vq->heads[vq->upend_idx].len = len;  				ubuf->callback = vhost_zerocopy_callback; -				ubuf->arg = vq->ubufs; +				ubuf->ctx = vq->ubufs;  				ubuf->desc = vq->upend_idx;  				msg.msg_control = ubuf;  				msg.msg_controllen = sizeof(ubuf); @@ -283,8 +284,12 @@ static int peek_head_len(struct sock *sk)  	spin_lock_irqsave(&sk->sk_receive_queue.lock, flags);  	head = skb_peek(&sk->sk_receive_queue); -	if (likely(head)) +	if (likely(head)) {  		len = head->len; +		if (vlan_tx_tag_present(head)) +			len += VLAN_HLEN; +	} +  	spin_unlock_irqrestore(&sk->sk_receive_queue.lock, flags);  	return len;  } diff --git a/drivers/vhost/test.c b/drivers/vhost/test.c index fc9a1d75281..3de00d9fae2 100644 --- a/drivers/vhost/test.c +++ b/drivers/vhost/test.c @@ -155,7 +155,7 @@ static int vhost_test_release(struct inode *inode, struct file *f)  	vhost_test_stop(n, &private);  	vhost_test_flush(n); -	vhost_dev_cleanup(&n->dev); +	vhost_dev_cleanup(&n->dev, false);  	/* We do an extra flush before freeing memory,  	 * since jobs can re-queue themselves. */  	vhost_test_flush(n); diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index 947f00d8e09..51e4c1eeec4 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c @@ -1598,10 +1598,9 @@ void vhost_ubuf_put_and_wait(struct vhost_ubuf_ref *ubufs)  	kfree(ubufs);  } -void vhost_zerocopy_callback(void *arg) +void vhost_zerocopy_callback(struct ubuf_info *ubuf)  { -	struct ubuf_info *ubuf = arg; -	struct vhost_ubuf_ref *ubufs = ubuf->arg; +	struct vhost_ubuf_ref *ubufs = ubuf->ctx;  	struct vhost_virtqueue *vq = ubufs->vq;  	/* set len = 1 to mark this desc buffers done DMA */ diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h index 8dcf4cca6bf..8de1fd5b8ef 100644 --- a/drivers/vhost/vhost.h +++ b/drivers/vhost/vhost.h @@ -188,7 +188,7 @@ bool vhost_enable_notify(struct vhost_dev *, struct vhost_virtqueue *);  int vhost_log_write(struct vhost_virtqueue *vq, struct vhost_log *log,  		    unsigned int log_num, u64 len); -void vhost_zerocopy_callback(void *arg); +void vhost_zerocopy_callback(struct ubuf_info *);  int vhost_zerocopy_signal_used(struct vhost_virtqueue *vq);  #define vq_err(vq, fmt, ...) do {                                  \  |