search for: virtio_transport_send_pkt_loopback

Displaying 20 results from an estimated 31 matches for "virtio_transport_send_pkt_loopback".

2019 Jul 03
3
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...rcu_read_lock(); > + vsock = rcu_dereference(the_virtio_vsock); > if (!vsock) { > virtio_transport_free_pkt(pkt); > - return -ENODEV; > + len = -ENODEV; > + goto out_rcu; > } > > - if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) > - return virtio_transport_send_pkt_loopback(vsock, pkt); > + if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) { > + len = virtio_transport_send_pkt_loopback(vsock, pkt); > + goto out_rcu; > + } > > if (pkt->reply) > atomic_inc(&vsock->queued_replies); > @@ -214,6 +221,9 @@ virtio_tran...
2019 Jul 03
3
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...rcu_read_lock(); > + vsock = rcu_dereference(the_virtio_vsock); > if (!vsock) { > virtio_transport_free_pkt(pkt); > - return -ENODEV; > + len = -ENODEV; > + goto out_rcu; > } > > - if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) > - return virtio_transport_send_pkt_loopback(vsock, pkt); > + if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) { > + len = virtio_transport_send_pkt_loopback(vsock, pkt); > + goto out_rcu; > + } > > if (pkt->reply) > atomic_inc(&vsock->queued_replies); > @@ -214,6 +221,9 @@ virtio_tran...
2019 Jul 04
2
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...vsock); >>> if (!vsock) { >>> virtio_transport_free_pkt(pkt); >>> - return -ENODEV; >>> + len = -ENODEV; >>> + goto out_rcu; >>> } >>> - if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) >>> - return virtio_transport_send_pkt_loopback(vsock, pkt); >>> + if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) { >>> + len = virtio_transport_send_pkt_loopback(vsock, pkt); >>> + goto out_rcu; >>> + } >>> if (pkt->reply) >>> atomic_inc(&vsock->queued_repl...
2019 Jul 04
2
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...vsock); >>> if (!vsock) { >>> virtio_transport_free_pkt(pkt); >>> - return -ENODEV; >>> + len = -ENODEV; >>> + goto out_rcu; >>> } >>> - if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) >>> - return virtio_transport_send_pkt_loopback(vsock, pkt); >>> + if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) { >>> + len = virtio_transport_send_pkt_loopback(vsock, pkt); >>> + goto out_rcu; >>> + } >>> if (pkt->reply) >>> atomic_inc(&vsock->queued_repl...
2019 Jun 28
0
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...len = pkt->len; - vsock = virtio_vsock_get(); + rcu_read_lock(); + vsock = rcu_dereference(the_virtio_vsock); if (!vsock) { virtio_transport_free_pkt(pkt); - return -ENODEV; + len = -ENODEV; + goto out_rcu; } - if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) - return virtio_transport_send_pkt_loopback(vsock, pkt); + if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) { + len = virtio_transport_send_pkt_loopback(vsock, pkt); + goto out_rcu; + } if (pkt->reply) atomic_inc(&vsock->queued_replies); @@ -214,6 +221,9 @@ virtio_transport_send_pkt(struct virtio_vsock_pkt *pkt...
2019 Jul 05
0
[PATCH v3 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...len = pkt->len; - vsock = virtio_vsock_get(); + rcu_read_lock(); + vsock = rcu_dereference(the_virtio_vsock); if (!vsock) { virtio_transport_free_pkt(pkt); - return -ENODEV; + len = -ENODEV; + goto out_rcu; } - if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) - return virtio_transport_send_pkt_loopback(vsock, pkt); + if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) { + len = virtio_transport_send_pkt_loopback(vsock, pkt); + goto out_rcu; + } if (pkt->reply) atomic_inc(&vsock->queued_replies); @@ -214,6 +221,9 @@ virtio_transport_send_pkt(struct virtio_vsock_pkt *pkt...
2019 Jul 03
0
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...rcu_dereference(the_virtio_vsock); > > if (!vsock) { > > virtio_transport_free_pkt(pkt); > > - return -ENODEV; > > + len = -ENODEV; > > + goto out_rcu; > > } > > - if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) > > - return virtio_transport_send_pkt_loopback(vsock, pkt); > > + if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) { > > + len = virtio_transport_send_pkt_loopback(vsock, pkt); > > + goto out_rcu; > > + } > > if (pkt->reply) > > atomic_inc(&vsock->queued_replies); > > @@ -...
2019 Jul 04
0
[PATCH v2 1/3] vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock
...> > virtio_transport_free_pkt(pkt); > > > > - return -ENODEV; > > > > + len = -ENODEV; > > > > + goto out_rcu; > > > > } > > > > - if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) > > > > - return virtio_transport_send_pkt_loopback(vsock, pkt); > > > > + if (le64_to_cpu(pkt->hdr.dst_cid) == vsock->guest_cid) { > > > > + len = virtio_transport_send_pkt_loopback(vsock, pkt); > > > > + goto out_rcu; > > > > + } > > > > if (pkt->reply) > > > >...
2018 Nov 05
2
[PATCH 1/5] VSOCK: support fill mergeable rx buffer in guest
...040a9e 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -64,6 +64,7 @@ struct virtio_vsock { struct virtio_vsock_event event_list[8]; u32 guest_cid; + bool mergeable; }; static struct virtio_vsock *virtio_vsock_get(void) @@ -256,6 +257,25 @@ static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock, return 0; } +static int fill_mergeable_rx_buff(struct virtqueue *vq) +{ + void *page = NULL; + struct scatterlist sg; + int err; + + page = (void *)get_zeroed_page(GFP_KERNEL); + if (!page) + return -ENOMEM; + + sg_init_one(&sg, page, PAGE_SIZE); + + err = virtq...
2018 Nov 05
2
[PATCH 1/5] VSOCK: support fill mergeable rx buffer in guest
...040a9e 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -64,6 +64,7 @@ struct virtio_vsock { struct virtio_vsock_event event_list[8]; u32 guest_cid; + bool mergeable; }; static struct virtio_vsock *virtio_vsock_get(void) @@ -256,6 +257,25 @@ static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock, return 0; } +static int fill_mergeable_rx_buff(struct virtqueue *vq) +{ + void *page = NULL; + struct scatterlist sg; + int err; + + page = (void *)get_zeroed_page(GFP_KERNEL); + if (!page) + return -ENOMEM; + + sg_init_one(&sg, page, PAGE_SIZE); + + err = virtq...
2018 Nov 06
1
[PATCH 1/5] VSOCK: support fill mergeable rx buffer in guest
...>> @@ -64,6 +64,7 @@ struct virtio_vsock { >> struct virtio_vsock_event event_list[8]; >> >> u32 guest_cid; >> + bool mergeable; >> }; >> >> static struct virtio_vsock *virtio_vsock_get(void) >> @@ -256,6 +257,25 @@ static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock, >> return 0; >> } >> >> +static int fill_mergeable_rx_buff(struct virtqueue *vq) >> +{ >> + void *page = NULL; >> + struct scatterlist sg; >> + int err; >> + >> + page = (void *)get_zeroed_pa...
2019 Jun 28
11
[PATCH v2 0/3] vsock/virtio: several fixes in the .probe() and .remove()
During the review of "[PATCH] vsock/virtio: Initialize core virtio vsock before registering the driver", Stefan pointed out some possible issues in the .probe() and .remove() callbacks of the virtio-vsock driver. This series tries to solve these issues: - Patch 1 adds RCU critical sections to avoid use-after-free of 'the_virtio_vsock' pointer. - Patch 2 stops workers before to
2019 Jun 28
11
[PATCH v2 0/3] vsock/virtio: several fixes in the .probe() and .remove()
During the review of "[PATCH] vsock/virtio: Initialize core virtio vsock before registering the driver", Stefan pointed out some possible issues in the .probe() and .remove() callbacks of the virtio-vsock driver. This series tries to solve these issues: - Patch 1 adds RCU critical sections to avoid use-after-free of 'the_virtio_vsock' pointer. - Patch 2 stops workers before to
2019 Jul 05
4
[PATCH v3 0/3] vsock/virtio: several fixes in the .probe() and .remove()
During the review of "[PATCH] vsock/virtio: Initialize core virtio vsock before registering the driver", Stefan pointed out some possible issues in the .probe() and .remove() callbacks of the virtio-vsock driver. This series tries to solve these issues: - Patch 1 adds RCU critical sections to avoid use-after-free of 'the_virtio_vsock' pointer. - Patch 2 stops workers before to
2018 Nov 06
0
[PATCH 1/5] VSOCK: support fill mergeable rx buffer in guest
...> +++ b/net/vmw_vsock/virtio_transport.c > @@ -64,6 +64,7 @@ struct virtio_vsock { > struct virtio_vsock_event event_list[8]; > > u32 guest_cid; > + bool mergeable; > }; > > static struct virtio_vsock *virtio_vsock_get(void) > @@ -256,6 +257,25 @@ static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock, > return 0; > } > > +static int fill_mergeable_rx_buff(struct virtqueue *vq) > +{ > + void *page = NULL; > + struct scatterlist sg; > + int err; > + > + page = (void *)get_zeroed_page(GFP_KERNEL); Any reason to use zeroed page? >...
2018 Dec 12
0
[PATCH v2 4/5] VSOCK: increase send pkt len in mergeable mode to improve performance
...len, cid only be used for Host */ + u32 (*max_pkt_len)(u32 cid); }; ssize_t diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c index 148b58a..809085a 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -222,6 +222,22 @@ static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock, return len; } +static u32 +virtio_transport_get_max_pkt_len(u32 cid) +{ + int len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; + struct virtio_vsock *vsock; + + vsock = virtio_vsock_get(); + if (!vsock) + return len; + + if (vsock->mergeable) + len = VIRTIO_VSOCK_MAX_PKT...
2019 Dec 10
7
[PATCH net-next v2 0/6] vsock: add local transport support
v2: - style fixes [Dave] - removed RCU sync and changed 'the_vsock_loopback' in a global static variable [Stefan] - use G2H transport when local transport is not loaded and remote cid is VMADDR_CID_LOCAL [Stefan] - rebased on net-next v1: https://patchwork.kernel.org/cover/11251735/ This series introduces a new transport (vsock_loopback) to handle local communication. This
2018 Dec 12
2
[PATCH v2 1/5] VSOCK: support fill mergeable rx buffer in guest
...irtio_vsock { struct virtio_vsock_event event_list[8]; u32 guest_cid; + + /* As mergeable 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-...
2018 Dec 12
2
[PATCH v2 1/5] VSOCK: support fill mergeable rx buffer in guest
...irtio_vsock { struct virtio_vsock_event event_list[8]; u32 guest_cid; + + /* As mergeable 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-...
2018 Dec 12
4
[PATCH v2 3/5] VSOCK: support receive mergeable rx buffer in guest
...u32 off; bool reply; + bool mergeable; }; struct virtio_vsock_pkt_info { diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c index c4a465c..148b58a 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -155,8 +155,10 @@ static int virtio_transport_send_pkt_loopback(struct virtio_vsock *vsock, sg_init_one(&hdr, &pkt->hdr, sizeof(pkt->hdr)); sgs[out_sg++] = &hdr; - if (pkt->buf) { - sg_init_one(&buf, pkt->buf, pkt->len); + if (pkt->len) { + /* Currently only support a segment of memory in tx */ + BUG_ON(pkt->v...