search for: virtio_vsock_rx_fil

Displaying 20 results from an estimated 99 matches for "virtio_vsock_rx_fil".

Did you mean: virtio_vsock_rx_fill
2018 Nov 05
2
[PATCH 1/5] VSOCK: support fill mergeable rx buffer in guest
...tterlist sg; + int err; + + page = (void *)get_zeroed_page(GFP_KERNEL); + if (!page) + return -ENOMEM; + + sg_init_one(&sg, page, PAGE_SIZE); + + err = virtqueue_add_inbuf(vq, &sg, 1, page, GFP_KERNEL); + if (err < 0) + free_page((unsigned long) page); + + return err; +} + static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) { int buf_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; @@ -267,27 +287,33 @@ static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) vq = vsock->vqs[VSOCK_VQ_RX]; do { - pkt = kzalloc(sizeof(*pkt), GFP_KERNEL); - if (!pkt) - break; + if (vsock->mergea...
2018 Nov 05
2
[PATCH 1/5] VSOCK: support fill mergeable rx buffer in guest
...tterlist sg; + int err; + + page = (void *)get_zeroed_page(GFP_KERNEL); + if (!page) + return -ENOMEM; + + sg_init_one(&sg, page, PAGE_SIZE); + + err = virtqueue_add_inbuf(vq, &sg, 1, page, GFP_KERNEL); + if (err < 0) + free_page((unsigned long) page); + + return err; +} + static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) { int buf_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; @@ -267,27 +287,33 @@ static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) vq = vsock->vqs[VSOCK_VQ_RX]; do { - pkt = kzalloc(sizeof(*pkt), GFP_KERNEL); - if (!pkt) - break; + if (vsock->mergea...
2014 Jul 05
0
[RFC V2 4/7] VSOCK: Introduce virtio-vsock.ko
...s.h> +#include <linux/virtio_config.h> +#include <linux/virtio_vsock.h> +#include <net/sock.h> +#include <linux/mutex.h> +#include <net/af_vsock.h> + +static struct workqueue_struct *virtio_vsock_workqueue; +static struct virtio_vsock *the_virtio_vsock; +static void virtio_vsock_rx_fill(struct virtio_vsock *vsock); + +struct virtio_vsock { + /* Virtio device */ + struct virtio_device *vdev; + /* Virtio virtqueue */ + struct virtqueue *vqs[VSOCK_VQ_MAX]; + /* Wait queue for send pkt */ + wait_queue_head_t queue_wait; + /* Work item to send pkt */ + struct work_struct tx_work; + /*...
2015 Dec 09
0
[PATCH v3 2/4] VSOCK: Introduce virtio-vsock.ko
...ck.h> +#include <net/sock.h> +#include <linux/mutex.h> +#include <net/af_vsock.h> + +static struct workqueue_struct *virtio_vsock_workqueue; +static struct virtio_vsock *the_virtio_vsock; +static DEFINE_MUTEX(the_virtio_vsock_mutex); /* protects the_virtio_vsock */ +static void virtio_vsock_rx_fill(struct virtio_vsock *vsock); + +struct virtio_vsock { + /* Virtio device */ + struct virtio_device *vdev; + /* Virtio virtqueue */ + struct virtqueue *vqs[VSOCK_VQ_MAX]; + /* Wait queue for send pkt */ + wait_queue_head_t queue_wait; + /* Work item to send pkt */ + struct work_struct tx_work; + /*...
2015 Dec 10
1
[PATCH v3 2/4] VSOCK: Introduce virtio-vsock.ko
...t; > +#include <linux/mutex.h> > +#include <net/af_vsock.h> > + > +static struct workqueue_struct *virtio_vsock_workqueue; > +static struct virtio_vsock *the_virtio_vsock; > +static DEFINE_MUTEX(the_virtio_vsock_mutex); /* protects the_virtio_vsock */ > +static void virtio_vsock_rx_fill(struct virtio_vsock *vsock); > + > +struct virtio_vsock { > + /* Virtio device */ > + struct virtio_device *vdev; > + /* Virtio virtqueue */ > + struct virtqueue *vqs[VSOCK_VQ_MAX]; > + /* Wait queue for send pkt */ > + wait_queue_head_t queue_wait; > + /* Work item to s...
2015 Dec 10
1
[PATCH v3 2/4] VSOCK: Introduce virtio-vsock.ko
...t; > +#include <linux/mutex.h> > +#include <net/af_vsock.h> > + > +static struct workqueue_struct *virtio_vsock_workqueue; > +static struct virtio_vsock *the_virtio_vsock; > +static DEFINE_MUTEX(the_virtio_vsock_mutex); /* protects the_virtio_vsock */ > +static void virtio_vsock_rx_fill(struct virtio_vsock *vsock); > + > +struct virtio_vsock { > + /* Virtio device */ > + struct virtio_device *vdev; > + /* Virtio virtqueue */ > + struct virtqueue *vqs[VSOCK_VQ_MAX]; > + /* Wait queue for send pkt */ > + wait_queue_head_t queue_wait; > + /* Work item to s...
2019 May 14
2
[PATCH v2 7/8] vsock/virtio: increase RX buffer size to 64 KiB
...?? if (!pkt->buf) { ??????????????????????? virtio_transport_free_pkt(pkt); ??????????????????????? break; ??????????????? } This is likely to fail when the memory is fragmented which is kind of fragile. > > The issue that I have here, is that the virtio-vsock guest driver, see > virtio_vsock_rx_fill(), allocates a struct virtio_vsock_pkt that > contains the room for the header, then allocates the buffer for the payload. > At this point it fills the scatterlist with the &virtio_vsock_pkt.hdr and the > buffer for the payload. This part should be fine since what is needed is just...
2019 May 14
2
[PATCH v2 7/8] vsock/virtio: increase RX buffer size to 64 KiB
...?? if (!pkt->buf) { ??????????????????????? virtio_transport_free_pkt(pkt); ??????????????????????? break; ??????????????? } This is likely to fail when the memory is fragmented which is kind of fragile. > > The issue that I have here, is that the virtio-vsock guest driver, see > virtio_vsock_rx_fill(), allocates a struct virtio_vsock_pkt that > contains the room for the header, then allocates the buffer for the payload. > At this point it fills the scatterlist with the &virtio_vsock_pkt.hdr and the > buffer for the payload. This part should be fine since what is needed is just...
2018 Nov 06
0
[PATCH 1/5] VSOCK: support fill mergeable rx buffer in guest
...ragmentation If we can try to reuse virtio-net driver, we will get those nice features. Thanks > + > + err = virtqueue_add_inbuf(vq, &sg, 1, page, GFP_KERNEL); > + if (err < 0) > + free_page((unsigned long) page); > + > + return err; > +} > + > static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) > { > int buf_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; > @@ -267,27 +287,33 @@ static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) > vq = vsock->vqs[VSOCK_VQ_RX]; > > do { > - pkt = kzalloc(sizeof(*pkt), GFP_KERNEL); > - i...
2019 May 13
2
[PATCH v2 7/8] vsock/virtio: increase RX buffer size to 64 KiB
On 2019/5/10 ??8:58, Stefano Garzarella wrote: > In order to increase host -> guest throughput with large packets, > we can use 64 KiB RX buffers. > > Signed-off-by: Stefano Garzarella <sgarzare at redhat.com> > --- > include/linux/virtio_vsock.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/linux/virtio_vsock.h
2019 May 13
2
[PATCH v2 7/8] vsock/virtio: increase RX buffer size to 64 KiB
On 2019/5/10 ??8:58, Stefano Garzarella wrote: > In order to increase host -> guest throughput with large packets, > we can use 64 KiB RX buffers. > > Signed-off-by: Stefano Garzarella <sgarzare at redhat.com> > --- > include/linux/virtio_vsock.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/linux/virtio_vsock.h
2019 May 13
2
[PATCH v2 8/8] vsock/virtio: make the RX buffer size tunable
...> +module_param_cb(rx_buf_size, &param_ops_rx_buf_size, &rx_buf_size, 0644); > + > static struct virtio_vsock *virtio_vsock_get(void) > { > return the_virtio_vsock; > @@ -261,7 +286,7 @@ virtio_transport_cancel_pkt(struct vsock_sock *vsk) > > static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) > { > - int buf_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; > + int buf_len = rx_buf_size; > struct virtio_vsock_pkt *pkt; > struct scatterlist hdr, buf, *sgs[2]; > struct virtqueue *vq;
2019 May 13
2
[PATCH v2 8/8] vsock/virtio: make the RX buffer size tunable
...> +module_param_cb(rx_buf_size, &param_ops_rx_buf_size, &rx_buf_size, 0644); > + > static struct virtio_vsock *virtio_vsock_get(void) > { > return the_virtio_vsock; > @@ -261,7 +286,7 @@ virtio_transport_cancel_pkt(struct vsock_sock *vsk) > > static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) > { > - int buf_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; > + int buf_len = rx_buf_size; > struct virtio_vsock_pkt *pkt; > struct scatterlist hdr, buf, *sgs[2]; > struct virtqueue *vq;
2019 May 15
1
[PATCH v2 7/8] vsock/virtio: increase RX buffer size to 64 KiB
...??? break; >> ??????????????? } >> >> This is likely to fail when the memory is fragmented which is kind of >> fragile. >> >> > Thanks for pointing that out. > >>> The issue that I have here, is that the virtio-vsock guest driver, see >>> virtio_vsock_rx_fill(), allocates a struct virtio_vsock_pkt that >>> contains the room for the header, then allocates the buffer for the payload. >>> At this point it fills the scatterlist with the &virtio_vsock_pkt.hdr and the >>> buffer for the payload. >> >> This part shou...
2018 Dec 12
2
[PATCH v2 1/5] VSOCK: support fill mergeable rx buffer in guest
...le rx buffer flag */ + bool mergeable; + /* Page frag for packet buffer allocation. */ + struct page_frag alloc_frag; }; static struct virtio_vsock *virtio_vsock_get(void) @@ -256,39 +261,89 @@ static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock, return 0; } -static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) +/* This segment of codes are copied from virtio-net.c */ +static int fill_mergeable_rx_buff(struct virtio_vsock *vsock, + struct virtqueue *vq) +{ + struct page_frag *alloc_frag = &vsock->alloc_frag; + struct scatterlist sg; + /* Currently we don't use ewma...
2018 Dec 12
2
[PATCH v2 1/5] VSOCK: support fill mergeable rx buffer in guest
...le rx buffer flag */ + bool mergeable; + /* Page frag for packet buffer allocation. */ + struct page_frag alloc_frag; }; static struct virtio_vsock *virtio_vsock_get(void) @@ -256,39 +261,89 @@ static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock, return 0; } -static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) +/* This segment of codes are copied from virtio-net.c */ +static int fill_mergeable_rx_buff(struct virtio_vsock *vsock, + struct virtqueue *vq) +{ + struct page_frag *alloc_frag = &vsock->alloc_frag; + struct scatterlist sg; + /* Currently we don't use ewma...
2019 Jul 03
3
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...t; @@ -255,7 +267,11 @@ virtio_transport_cancel_pkt(struct vsock_sock *vsk) > queue_work(virtio_vsock_workqueue, &vsock->rx_work); > } > > - return 0; > + ret = 0; > + > +out_rcu: > + rcu_read_unlock(); > + return ret; > } > > static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) > @@ -590,8 +606,6 @@ static int virtio_vsock_probe(struct virtio_device *vdev) > vsock->rx_buf_max_nr = 0; > atomic_set(&vsock->queued_replies, 0); > > - vdev->priv = vsock; > - the_virtio_vsock = vsock; > mutex_init(&v...
2019 Jul 03
3
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...t; @@ -255,7 +267,11 @@ virtio_transport_cancel_pkt(struct vsock_sock *vsk) > queue_work(virtio_vsock_workqueue, &vsock->rx_work); > } > > - return 0; > + ret = 0; > + > +out_rcu: > + rcu_read_unlock(); > + return ret; > } > > static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) > @@ -590,8 +606,6 @@ static int virtio_vsock_probe(struct virtio_device *vdev) > vsock->rx_buf_max_nr = 0; > atomic_set(&vsock->queued_replies, 0); > > - vdev->priv = vsock; > - the_virtio_vsock = vsock; > mutex_init(&v...
2019 Sep 27
0
[RFC PATCH 05/13] vsock/virtio: add transport parameter to the virtio_transport_reset_no_sock()
...{ - virtio_transport_free_pkt(pkt); - continue; - } - - pkt->len = len - sizeof(pkt->hdr); - virtio_transport_deliver_tap_pkt(pkt); - virtio_transport_recv_pkt(pkt); - } - } while (!virtqueue_enable_cb(vq)); - -out: - if (vsock->rx_buf_nr < vsock->rx_buf_max_nr / 2) - virtio_vsock_rx_fill(vsock); - mutex_unlock(&vsock->rx_lock); -} - /* event_lock must be held */ static int virtio_vsock_event_fill_one(struct virtio_vsock *vsock, struct virtio_vsock_event *event) @@ -586,6 +506,86 @@ static struct virtio_transport virtio_transport = { .send_pkt = virtio_transp...
2018 Nov 06
1
[PATCH 1/5] VSOCK: support fill mergeable rx buffer in guest
...ually a good idea. > > Thanks > > >> + >> + err = virtqueue_add_inbuf(vq, &sg, 1, page, GFP_KERNEL); >> + if (err < 0) >> + free_page((unsigned long) page); >> + >> + return err; >> +} >> + >> static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) >> { >> int buf_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; >> @@ -267,27 +287,33 @@ static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) >> vq = vsock->vqs[VSOCK_VQ_RX]; >> >> do { >> - pkt = k...