diff mbox

BitsSizedTasks-LargeFrames

Message ID CALwKnOgaM2AKdHX+tJ8vh17rh3Hdd4uqdVBCZ=su-Asi=0eL_A@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Siddharth Gupta March 11, 2016, 2:50 p.m. UTC

Comments

Bastian Koppelmann March 11, 2016, 3:50 p.m. UTC | #1
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
Paolo Bonzini March 11, 2016, 3:54 p.m. UTC | #2
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:
>
Eric Blake March 11, 2016, 5:45 p.m. UTC | #3
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.
diff mbox

Patch

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>