summaryrefslogtreecommitdiff
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)
downloadqemu-88a47b9de2c01121e153b1feb24cdb2e033b2f04.tar.gz
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;