summary refs log tree commit diff stats
path: root/hw/net
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@amazon.com>2013-11-19 12:58:32 -0800
committerAnthony Liguori <aliguori@amazon.com>2013-11-19 12:58:32 -0800
commit88a47b9de2c01121e153b1feb24cdb2e033b2f04 (patch)
tree22eec23657c214de7ce11c228f5eb165c19ca78f /hw/net
parent8c630d5150ddedea231a39727e43787e5a3b6690 (diff)
parent96e35046e4a97df5b4e1e24e217eb1e1701c7c71 (diff)
downloadfocaccia-qemu-88a47b9de2c01121e153b1feb24cdb2e033b2f04.tar.gz
focaccia-qemu-88a47b9de2c01121e153b1feb24cdb2e033b2f04.zip
Merge remote-tracking branch 'stefanha/net' into staging
# By Amos Kong (1) and Sebastian Huber (1)
# Via Stefan Hajnoczi
* stefanha/net:
  virtio-net: fix the memory leak in rxfilter_notify()
  smc91c111: Fix receive starvation

Message-id: 1384532032-19057-1-git-send-email-stefanha@redhat.com
Signed-off-by: Anthony Liguori <aliguori@amazon.com>
Diffstat (limited to 'hw/net')
-rw-r--r--hw/net/smc91c111.c1
-rw-r--r--hw/net/virtio-net.c8
2 files changed, 5 insertions, 4 deletions
diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c
index f5963e2cbe..a8e29b3b42 100644
--- a/hw/net/smc91c111.c
+++ b/hw/net/smc91c111.c
@@ -185,6 +185,7 @@ static void smc91c111_release_packet(smc91c111_state *s, int packet)
     s->allocated &= ~(1 << packet);
     if (s->tx_alloc == 0x80)
         smc91c111_tx_alloc(s);
+    qemu_flush_queued_packets(qemu_get_queue(s->nic));
 }
 
 /* Flush the TX FIFO.  */
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 613f144d12..b75c753305 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -200,16 +200,16 @@ static void rxfilter_notify(NetClientState *nc)
     VirtIONet *n = qemu_get_nic_opaque(nc);
 
     if (nc->rxfilter_notify_enabled) {
+        gchar *path = object_get_canonical_path(OBJECT(n->qdev));
         if (n->netclient_name) {
             event_data = qobject_from_jsonf("{ 'name': %s, 'path': %s }",
-                                    n->netclient_name,
-                                    object_get_canonical_path(OBJECT(n->qdev)));
+                                    n->netclient_name, path);
         } else {
-            event_data = qobject_from_jsonf("{ 'path': %s }",
-                                    object_get_canonical_path(OBJECT(n->qdev)));
+            event_data = qobject_from_jsonf("{ 'path': %s }", path);
         }
         monitor_protocol_event(QEVENT_NIC_RX_FILTER_CHANGED, event_data);
         qobject_decref(event_data);
+        g_free(path);
 
         /* disable event notification to avoid events flooding */
         nc->rxfilter_notify_enabled = 0;