qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] BitsSizedTasks-LargeFrames
@ 2016-03-11 14:50 Siddharth Gupta
  2016-03-11 15:50 ` Bastian Koppelmann
  2016-03-11 15:54 ` Paolo Bonzini
  0 siblings, 2 replies; 4+ messages in thread
From: Siddharth Gupta @ 2016-03-11 14:50 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-trivial


[-- Attachment #1.1: Type: text/plain, Size: 1 bytes --]



[-- Attachment #1.2: Type: text/html, Size: 26 bytes --]

[-- Attachment #2: bitesizedtasks.patch --]
[-- Type: text/x-patch, Size: 3598 bytes --]

From 032be62f56a207833ae12cc9474e3e8be5ed8eb4 Mon Sep 17 00:00:00 2001
From: Siddharth Gupta <siddharthgupta04@gmail.com>
Date: Fri, 11 Mar 2016 20:10:41 +0530
Subject: [PATCH] bitesizedtasks-large_frames-hw_dma_xilinx-hw_net_virtio

---
 hw/dma/xilinx_axidma.c |  5 ++++-
 hw/net/virtio-net.c    | 11 ++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
index ce5c1e6..9c6bda2 100644
--- a/hw/dma/xilinx_axidma.c
+++ b/hw/dma/xilinx_axidma.c
@@ -255,13 +255,15 @@ static void stream_process_mem2s(struct Stream *s, StreamSlave *tx_data_dev,
                                  StreamSlave *tx_control_dev)
 {
     uint32_t prev_d;
-    unsigned char txbuf[16 * 1024];
+    unsigned char *txbuf;
     unsigned int txlen;
 
     if (!stream_running(s) || stream_idle(s)) {
         return;
     }
 
+    txbuf = (unsigned char *) malloc(16 * 1024 * sizeof(unsigned char));
+
     while (1) {
         stream_desc_load(s, s->regs[R_CURDESC]);
 
@@ -303,6 +305,7 @@ static void stream_process_mem2s(struct Stream *s, StreamSlave *tx_data_dev,
             break;
         }
     }
+    free(txbuf);
 }
 
 static size_t stream_process_s2mem(struct Stream *s, unsigned char *buf,
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 5798f87..ba6ebac 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -1094,7 +1094,7 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
     VirtIONet *n = qemu_get_nic_opaque(nc);
     VirtIONetQueue *q = virtio_net_get_subqueue(nc);
     VirtIODevice *vdev = VIRTIO_DEVICE(n);
-    struct iovec mhdr_sg[VIRTQUEUE_MAX_SIZE];
+    struct iovec *mhdr_sg;
     struct virtio_net_hdr_mrg_rxbuf mhdr;
     unsigned mhdr_cnt = 0;
     size_t offset, i, guest_offset;
@@ -1113,6 +1113,8 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
 
     offset = i = 0;
 
+    mhdr_sg = (struct iovec *) malloc(VIRTQUEUE_MAX_SIZE * sizeof(struct iovec));
+
     while (offset < size) {
         VirtQueueElement *elem;
         int len, total;
@@ -1122,6 +1124,7 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
 
         elem = virtqueue_pop(q->rx_vq, sizeof(VirtQueueElement));
         if (!elem) {
+            free(mhdr_sg);
             if (i == 0)
                 return -1;
             error_report("virtio-net unexpected empty queue: "
@@ -1136,11 +1139,15 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
 
         if (elem->in_num < 1) {
             error_report("virtio-net receive queue contains no in buffers");
+            free(mhdr_sg);
             exit(1);
         }
 
         sg = elem->in_sg;
         if (i == 0) {
+            if (offset != 0) {
+                free(mhdr_sg);
+            }
             assert(offset == 0);
             if (n->mergeable_rx_bufs) {
                 mhdr_cnt = iov_copy(mhdr_sg, ARRAY_SIZE(mhdr_sg),
@@ -1168,6 +1175,7 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
         if (!n->mergeable_rx_bufs && offset < size) {
             virtqueue_discard(q->rx_vq, elem, total);
             g_free(elem);
+            free(mhdr_sg);
             return size;
         }
 
@@ -1186,6 +1194,7 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
     virtqueue_flush(q->rx_vq, i);
     virtio_notify(vdev, q->rx_vq);
 
+    free(mhdr_sg);
     return size;
 }
 
-- 
2.5.0

Signed-off-by: Siddharth Gupta <siddharthgupta04@gmail.com>

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] BitsSizedTasks-LargeFrames
  2016-03-11 14:50 [Qemu-devel] [PATCH] BitsSizedTasks-LargeFrames Siddharth Gupta
@ 2016-03-11 15:50 ` Bastian Koppelmann
  2016-03-11 17:45   ` Eric Blake
  2016-03-11 15:54 ` Paolo Bonzini
  1 sibling, 1 reply; 4+ messages in thread
From: Bastian Koppelmann @ 2016-03-11 15:50 UTC (permalink / raw)
  To: Siddharth Gupta, qemu-devel; +Cc: qemu-trivial

Hi Siddharth,

thanks for the patch. Can you resend it inlined into the e-mail instead
of an attachment? I usually use git send-email for that.
My workflow (once you have configured git send-email) would be:

- git format-patch -1
- git send-email --to="qemu-devel@nongnu.org"
--cc="qemu-trivial@nongnu.org" *.patch

Also there is a page on the wiki on how to submit a patch [1]. If you
want to avoid a lot of re-sending you might want to look into it :).

Cheers,
Bastian

[1] http://wiki.qemu.org/Contribute/SubmitAPatch

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] BitsSizedTasks-LargeFrames
  2016-03-11 14:50 [Qemu-devel] [PATCH] BitsSizedTasks-LargeFrames Siddharth Gupta
  2016-03-11 15:50 ` Bastian Koppelmann
@ 2016-03-11 15:54 ` Paolo Bonzini
  1 sibling, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2016-03-11 15:54 UTC (permalink / raw)
  To: Siddharth Gupta, qemu-devel; +Cc: qemu-trivial

Hi Siddharth,

because you are touching possibly "hot" code paths, it is not possible
to just move the allocation to the heap.  You will have to check whether
the number of used items is low enough and, if not, switch from the
stack-allocated array to the heap.  This way the stack-allocated array
can be made smaller (e.g. 2K).

Thanks,

Paolo

On 11/03/2016 15:50, Siddharth Gupta wrote:
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] BitsSizedTasks-LargeFrames
  2016-03-11 15:50 ` Bastian Koppelmann
@ 2016-03-11 17:45   ` Eric Blake
  0 siblings, 0 replies; 4+ messages in thread
From: Eric Blake @ 2016-03-11 17:45 UTC (permalink / raw)
  To: Bastian Koppelmann, Siddharth Gupta, qemu-devel; +Cc: qemu-trivial

[-- Attachment #1: Type: text/plain, Size: 870 bytes --]

On 03/11/2016 08:50 AM, Bastian Koppelmann wrote:
> Hi Siddharth,
> 
> thanks for the patch. Can you resend it inlined into the e-mail instead
> of an attachment? I usually use git send-email for that.
> My workflow (once you have configured git send-email) would be:
> 
> - git format-patch -1
> - git send-email --to="qemu-devel@nongnu.org"
> --cc="qemu-trivial@nongnu.org" *.patch
> 
> Also there is a page on the wiki on how to submit a patch [1]. If you
> want to avoid a lot of re-sending you might want to look into it :).
> 
> Cheers,
> Bastian
> 
> [1] http://wiki.qemu.org/Contribute/SubmitAPatch

Also, there's a typo in your subject line (should be 'bitesized', not
'bitssized'). And don't forget to add your Signed-off-by.


-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-03-11 17:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-11 14:50 [Qemu-devel] [PATCH] BitsSizedTasks-LargeFrames Siddharth Gupta
2016-03-11 15:50 ` Bastian Koppelmann
2016-03-11 17:45   ` Eric Blake
2016-03-11 15:54 ` Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).