From: Jason Wang <jasowang@redhat.com> To: mst@redhat.com, aliguori@us.ibm.com, stefanha@redhat.com, qemu-devel@nongnu.org Cc: krkumar2@in.ibm.com, kvm@vger.kernel.org, mprivozn@redhat.com, Jason Wang <jasowang@redhat.com>, rusty@rustcorp.com.au, jwhan@filewood.snu.ac.kr, shiyer@redhat.com Subject: [PATCH 04/12] net: intorduce qemu_del_nic() Date: Fri, 28 Dec 2012 18:31:56 +0800 [thread overview] Message-ID: <1356690724-37891-5-git-send-email-jasowang@redhat.com> (raw) In-Reply-To: <1356690724-37891-1-git-send-email-jasowang@redhat.com> To support multiqueue nic, this patch separate the nic destructor from qemu_del_net_client() to a new helper qemu_del_nic(). The following patches would refactor this function to support multiqueue nic. Signed-off-by: Jason Wang <jasowang@redhat.com> --- hw/e1000.c | 2 +- hw/eepro100.c | 2 +- hw/ne2000.c | 2 +- hw/pcnet-pci.c | 2 +- hw/rtl8139.c | 2 +- hw/usb/dev-network.c | 2 +- hw/virtio-net.c | 2 +- hw/xen_nic.c | 2 +- net.c | 15 ++++++++++++++- net.h | 1 + 10 files changed, 23 insertions(+), 9 deletions(-) diff --git a/hw/e1000.c b/hw/e1000.c index 004f057..eb181d8 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -1234,7 +1234,7 @@ pci_e1000_uninit(PCIDevice *dev) qemu_free_timer(d->autoneg_timer); memory_region_destroy(&d->mmio); memory_region_destroy(&d->io); - qemu_del_net_client(qemu_get_queue(d->nic)); + qemu_del_nic(d->nic); } static NetClientInfo net_e1000_info = { diff --git a/hw/eepro100.c b/hw/eepro100.c index c09a315..d072131 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -1849,7 +1849,7 @@ static void pci_nic_uninit(PCIDevice *pci_dev) memory_region_destroy(&s->flash_bar); vmstate_unregister(&pci_dev->qdev, s->vmstate, s); eeprom93xx_free(&pci_dev->qdev, s->eeprom); - qemu_del_net_client(qemu_get_queue(s->nic)); + qemu_del_nic(s->nic); } static NetClientInfo net_eepro100_info = { diff --git a/hw/ne2000.c b/hw/ne2000.c index 64b73fe..e6810ad 100644 --- a/hw/ne2000.c +++ b/hw/ne2000.c @@ -750,7 +750,7 @@ static void pci_ne2000_exit(PCIDevice *pci_dev) NE2000State *s = &d->ne2000; memory_region_destroy(&s->io); - qemu_del_net_client(qemu_get_queue(s->nic)); + qemu_del_nic(s->nic); } static Property ne2000_properties[] = { diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c index f4a03eb..c910fa3 100644 --- a/hw/pcnet-pci.c +++ b/hw/pcnet-pci.c @@ -279,7 +279,7 @@ static void pci_pcnet_uninit(PCIDevice *dev) memory_region_destroy(&d->io_bar); qemu_del_timer(d->state.poll_timer); qemu_free_timer(d->state.poll_timer); - qemu_del_net_client(qemu_get_queue(d->state.nic)); + qemu_del_nic(d->state.nic); } static NetClientInfo net_pci_pcnet_info = { diff --git a/hw/rtl8139.c b/hw/rtl8139.c index b6cb90e..a8acd19 100644 --- a/hw/rtl8139.c +++ b/hw/rtl8139.c @@ -3445,7 +3445,7 @@ static void pci_rtl8139_uninit(PCIDevice *dev) } qemu_del_timer(s->timer); qemu_free_timer(s->timer); - qemu_del_net_client(qemu_get_queue(s->nic)); + qemu_del_nic(s->nic); } static void rtl8139_set_link_status(NetClientState *nc) diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c index 3de6218..6de0521 100644 --- a/hw/usb/dev-network.c +++ b/hw/usb/dev-network.c @@ -1329,7 +1329,7 @@ static void usb_net_handle_destroy(USBDevice *dev) /* TODO: remove the nd_table[] entry */ rndis_clear_responsequeue(s); - qemu_del_net_client(qemu_get_queue(s->nic)); + qemu_del_nic(s->nic); } static NetClientInfo net_usbnet_info = { diff --git a/hw/virtio-net.c b/hw/virtio-net.c index bf6414b..d57a5a5 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -1098,6 +1098,6 @@ void virtio_net_exit(VirtIODevice *vdev) qemu_bh_delete(n->tx_bh); } - qemu_del_net_client(qemu_get_queue(n->nic)); + qemu_del_nic(n->nic); virtio_cleanup(&n->vdev); } diff --git a/hw/xen_nic.c b/hw/xen_nic.c index 055adf4..6275cd3 100644 --- a/hw/xen_nic.c +++ b/hw/xen_nic.c @@ -406,7 +406,7 @@ static void net_disconnect(struct XenDevice *xendev) netdev->rxs = NULL; } if (netdev->nic) { - qemu_del_net_client(qemu_get_queue(netdev->nic)); + qemu_del_nic(netdev->nic); netdev->nic = NULL; } } diff --git a/net.c b/net.c index ef5b8c9..97ee542 100644 --- a/net.c +++ b/net.c @@ -290,6 +290,15 @@ void qemu_del_net_client(NetClientState *nc) return; } + assert(nc->info->type != NET_CLIENT_OPTIONS_KIND_NIC); + + qemu_cleanup_net_client(nc); + qemu_free_net_client(nc); +} + +void qemu_del_nic(NICState *nic) +{ + NetClientState *nc = qemu_get_queue(nic); /* If this is a peer NIC and peer has already been deleted, free it now. */ if (nc->peer && nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { NICState *nic = qemu_get_nic(nc); @@ -932,7 +941,11 @@ void net_cleanup(void) NetClientState *nc, *next_vc; QTAILQ_FOREACH_SAFE(nc, &net_clients, next, next_vc) { - qemu_del_net_client(nc); + if (nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { + qemu_del_nic(qemu_get_nic(nc)); + } else { + qemu_del_net_client(nc); + } } } diff --git a/net.h b/net.h index 56b79fb..0d53337 100644 --- a/net.h +++ b/net.h @@ -77,6 +77,7 @@ NICState *qemu_new_nic(NetClientInfo *info, const char *model, const char *name, void *opaque); +void qemu_del_nic(NICState *nic); NetClientState *qemu_get_queue(NICState *nic); NICState *qemu_get_nic(NetClientState *nc); void *qemu_get_nic_opaque(NetClientState *nc); -- 1.7.1
WARNING: multiple messages have this Message-ID (diff)
From: Jason Wang <jasowang@redhat.com> To: mst@redhat.com, aliguori@us.ibm.com, stefanha@redhat.com, qemu-devel@nongnu.org Cc: krkumar2@in.ibm.com, kvm@vger.kernel.org, mprivozn@redhat.com, Jason Wang <jasowang@redhat.com>, rusty@rustcorp.com.au, jwhan@filewood.snu.ac.kr, shiyer@redhat.com Subject: [Qemu-devel] [PATCH 04/12] net: intorduce qemu_del_nic() Date: Fri, 28 Dec 2012 18:31:56 +0800 [thread overview] Message-ID: <1356690724-37891-5-git-send-email-jasowang@redhat.com> (raw) In-Reply-To: <1356690724-37891-1-git-send-email-jasowang@redhat.com> To support multiqueue nic, this patch separate the nic destructor from qemu_del_net_client() to a new helper qemu_del_nic(). The following patches would refactor this function to support multiqueue nic. Signed-off-by: Jason Wang <jasowang@redhat.com> --- hw/e1000.c | 2 +- hw/eepro100.c | 2 +- hw/ne2000.c | 2 +- hw/pcnet-pci.c | 2 +- hw/rtl8139.c | 2 +- hw/usb/dev-network.c | 2 +- hw/virtio-net.c | 2 +- hw/xen_nic.c | 2 +- net.c | 15 ++++++++++++++- net.h | 1 + 10 files changed, 23 insertions(+), 9 deletions(-) diff --git a/hw/e1000.c b/hw/e1000.c index 004f057..eb181d8 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -1234,7 +1234,7 @@ pci_e1000_uninit(PCIDevice *dev) qemu_free_timer(d->autoneg_timer); memory_region_destroy(&d->mmio); memory_region_destroy(&d->io); - qemu_del_net_client(qemu_get_queue(d->nic)); + qemu_del_nic(d->nic); } static NetClientInfo net_e1000_info = { diff --git a/hw/eepro100.c b/hw/eepro100.c index c09a315..d072131 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -1849,7 +1849,7 @@ static void pci_nic_uninit(PCIDevice *pci_dev) memory_region_destroy(&s->flash_bar); vmstate_unregister(&pci_dev->qdev, s->vmstate, s); eeprom93xx_free(&pci_dev->qdev, s->eeprom); - qemu_del_net_client(qemu_get_queue(s->nic)); + qemu_del_nic(s->nic); } static NetClientInfo net_eepro100_info = { diff --git a/hw/ne2000.c b/hw/ne2000.c index 64b73fe..e6810ad 100644 --- a/hw/ne2000.c +++ b/hw/ne2000.c @@ -750,7 +750,7 @@ static void pci_ne2000_exit(PCIDevice *pci_dev) NE2000State *s = &d->ne2000; memory_region_destroy(&s->io); - qemu_del_net_client(qemu_get_queue(s->nic)); + qemu_del_nic(s->nic); } static Property ne2000_properties[] = { diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c index f4a03eb..c910fa3 100644 --- a/hw/pcnet-pci.c +++ b/hw/pcnet-pci.c @@ -279,7 +279,7 @@ static void pci_pcnet_uninit(PCIDevice *dev) memory_region_destroy(&d->io_bar); qemu_del_timer(d->state.poll_timer); qemu_free_timer(d->state.poll_timer); - qemu_del_net_client(qemu_get_queue(d->state.nic)); + qemu_del_nic(d->state.nic); } static NetClientInfo net_pci_pcnet_info = { diff --git a/hw/rtl8139.c b/hw/rtl8139.c index b6cb90e..a8acd19 100644 --- a/hw/rtl8139.c +++ b/hw/rtl8139.c @@ -3445,7 +3445,7 @@ static void pci_rtl8139_uninit(PCIDevice *dev) } qemu_del_timer(s->timer); qemu_free_timer(s->timer); - qemu_del_net_client(qemu_get_queue(s->nic)); + qemu_del_nic(s->nic); } static void rtl8139_set_link_status(NetClientState *nc) diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c index 3de6218..6de0521 100644 --- a/hw/usb/dev-network.c +++ b/hw/usb/dev-network.c @@ -1329,7 +1329,7 @@ static void usb_net_handle_destroy(USBDevice *dev) /* TODO: remove the nd_table[] entry */ rndis_clear_responsequeue(s); - qemu_del_net_client(qemu_get_queue(s->nic)); + qemu_del_nic(s->nic); } static NetClientInfo net_usbnet_info = { diff --git a/hw/virtio-net.c b/hw/virtio-net.c index bf6414b..d57a5a5 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -1098,6 +1098,6 @@ void virtio_net_exit(VirtIODevice *vdev) qemu_bh_delete(n->tx_bh); } - qemu_del_net_client(qemu_get_queue(n->nic)); + qemu_del_nic(n->nic); virtio_cleanup(&n->vdev); } diff --git a/hw/xen_nic.c b/hw/xen_nic.c index 055adf4..6275cd3 100644 --- a/hw/xen_nic.c +++ b/hw/xen_nic.c @@ -406,7 +406,7 @@ static void net_disconnect(struct XenDevice *xendev) netdev->rxs = NULL; } if (netdev->nic) { - qemu_del_net_client(qemu_get_queue(netdev->nic)); + qemu_del_nic(netdev->nic); netdev->nic = NULL; } } diff --git a/net.c b/net.c index ef5b8c9..97ee542 100644 --- a/net.c +++ b/net.c @@ -290,6 +290,15 @@ void qemu_del_net_client(NetClientState *nc) return; } + assert(nc->info->type != NET_CLIENT_OPTIONS_KIND_NIC); + + qemu_cleanup_net_client(nc); + qemu_free_net_client(nc); +} + +void qemu_del_nic(NICState *nic) +{ + NetClientState *nc = qemu_get_queue(nic); /* If this is a peer NIC and peer has already been deleted, free it now. */ if (nc->peer && nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { NICState *nic = qemu_get_nic(nc); @@ -932,7 +941,11 @@ void net_cleanup(void) NetClientState *nc, *next_vc; QTAILQ_FOREACH_SAFE(nc, &net_clients, next, next_vc) { - qemu_del_net_client(nc); + if (nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { + qemu_del_nic(qemu_get_nic(nc)); + } else { + qemu_del_net_client(nc); + } } } diff --git a/net.h b/net.h index 56b79fb..0d53337 100644 --- a/net.h +++ b/net.h @@ -77,6 +77,7 @@ NICState *qemu_new_nic(NetClientInfo *info, const char *model, const char *name, void *opaque); +void qemu_del_nic(NICState *nic); NetClientState *qemu_get_queue(NICState *nic); NICState *qemu_get_nic(NetClientState *nc); void *qemu_get_nic_opaque(NetClientState *nc); -- 1.7.1
next prev parent reply other threads:[~2012-12-28 10:31 UTC|newest] Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-12-28 10:31 [PATCH 00/12] Multiqueue virtio-net Jason Wang 2012-12-28 10:31 ` [Qemu-devel] " Jason Wang 2012-12-28 10:31 ` [PATCH 01/12] tap: multiqueue support Jason Wang 2012-12-28 10:31 ` [Qemu-devel] " Jason Wang 2013-01-09 9:56 ` Stefan Hajnoczi 2013-01-09 9:56 ` [Qemu-devel] " Stefan Hajnoczi 2013-01-09 15:25 ` Jason Wang 2013-01-09 15:25 ` [Qemu-devel] " Jason Wang 2013-01-10 8:32 ` Stefan Hajnoczi 2013-01-10 8:32 ` [Qemu-devel] " Stefan Hajnoczi 2013-01-10 10:28 ` Stefan Hajnoczi 2013-01-10 10:28 ` [Qemu-devel] " Stefan Hajnoczi 2013-01-10 13:52 ` Jason Wang 2013-01-10 13:52 ` [Qemu-devel] " Jason Wang 2012-12-28 10:31 ` [PATCH 02/12] net: introduce qemu_get_queue() Jason Wang 2012-12-28 10:31 ` [Qemu-devel] " Jason Wang 2012-12-28 10:31 ` [PATCH 03/12] net: introduce qemu_get_nic() Jason Wang 2012-12-28 10:31 ` [Qemu-devel] " Jason Wang 2012-12-28 10:31 ` Jason Wang [this message] 2012-12-28 10:31 ` [Qemu-devel] [PATCH 04/12] net: intorduce qemu_del_nic() Jason Wang 2012-12-28 10:31 ` [PATCH 05/12] net: multiqueue support Jason Wang 2012-12-28 10:31 ` [Qemu-devel] " Jason Wang 2012-12-28 18:06 ` Blue Swirl 2012-12-28 18:06 ` [Qemu-devel] " Blue Swirl 2012-12-28 10:31 ` [PATCH 06/12] vhost: " Jason Wang 2012-12-28 10:31 ` [Qemu-devel] " Jason Wang 2012-12-28 10:31 ` [PATCH 07/12] virtio: introduce virtio_queue_del() Jason Wang 2012-12-28 10:31 ` [Qemu-devel] " Jason Wang 2013-01-08 7:14 ` Michael S. Tsirkin 2013-01-08 7:14 ` [Qemu-devel] " Michael S. Tsirkin 2013-01-08 9:28 ` Jason Wang 2013-01-08 9:28 ` [Qemu-devel] " Jason Wang 2012-12-28 10:32 ` [PATCH 08/12] virtio: add a queue_index to VirtQueue Jason Wang 2012-12-28 10:32 ` [Qemu-devel] " Jason Wang 2012-12-28 10:32 ` [PATCH 09/12] virtio-net: separate virtqueue from VirtIONet Jason Wang 2012-12-28 10:32 ` [Qemu-devel] " Jason Wang 2012-12-28 10:32 ` [PATCH 10/12] virtio-net: multiqueue support Jason Wang 2012-12-28 10:32 ` [Qemu-devel] " Jason Wang 2012-12-28 17:52 ` Blue Swirl 2012-12-28 17:52 ` [Qemu-devel] " Blue Swirl 2013-01-04 5:12 ` Jason Wang 2013-01-04 5:12 ` [Qemu-devel] " Jason Wang 2013-01-04 20:41 ` Blue Swirl 2013-01-04 20:41 ` [Qemu-devel] " Blue Swirl 2013-01-08 9:07 ` Wanlong Gao 2013-01-08 9:07 ` Wanlong Gao 2013-01-08 9:29 ` Jason Wang 2013-01-08 9:29 ` [Qemu-devel] " Jason Wang 2013-01-08 9:32 ` Wanlong Gao 2013-01-08 9:32 ` Wanlong Gao 2013-01-08 9:49 ` Wanlong Gao 2013-01-08 9:49 ` Wanlong Gao 2013-01-08 9:51 ` Jason Wang 2013-01-08 9:51 ` [Qemu-devel] " Jason Wang 2013-01-08 10:00 ` Wanlong Gao 2013-01-08 10:14 ` Jason Wang 2013-01-08 10:14 ` [Qemu-devel] " Jason Wang 2013-01-08 11:24 ` Wanlong Gao 2013-01-09 3:11 ` Jason Wang 2013-01-09 8:23 ` Wanlong Gao 2013-01-09 9:30 ` Jason Wang 2013-01-09 9:30 ` [Qemu-devel] " Jason Wang 2013-01-09 10:01 ` Wanlong Gao 2013-01-09 10:01 ` Wanlong Gao 2013-01-09 15:26 ` Jason Wang 2013-01-10 6:43 ` Jason Wang 2013-01-10 6:49 ` Wanlong Gao 2013-01-10 6:49 ` Wanlong Gao 2013-01-10 7:16 ` Jason Wang 2013-01-10 7:16 ` [Qemu-devel] " Jason Wang 2013-01-10 9:06 ` Wanlong Gao 2013-01-10 9:06 ` [Qemu-devel] " Wanlong Gao 2013-01-10 9:40 ` Jason Wang 2012-12-28 10:32 ` [PATCH 11/12] virtio-net: migration support for multiqueue Jason Wang 2012-12-28 10:32 ` [Qemu-devel] " Jason Wang 2013-01-08 7:10 ` Michael S. Tsirkin 2013-01-08 7:10 ` [Qemu-devel] " Michael S. Tsirkin 2013-01-08 9:27 ` Jason Wang 2013-01-08 9:27 ` [Qemu-devel] " Jason Wang 2012-12-28 10:32 ` [PATCH 12/12] virtio-net: compat multiqueue support Jason Wang 2012-12-28 10:32 ` [Qemu-devel] " Jason Wang 2013-01-09 14:29 ` [Qemu-devel] [PATCH 00/12] Multiqueue virtio-net Stefan Hajnoczi 2013-01-09 14:29 ` Stefan Hajnoczi 2013-01-09 15:32 ` Michael S. Tsirkin 2013-01-09 15:32 ` Michael S. Tsirkin 2013-01-09 15:33 ` Jason Wang 2013-01-09 15:33 ` [Qemu-devel] " Jason Wang 2013-01-10 8:44 ` Stefan Hajnoczi 2013-01-10 8:44 ` [Qemu-devel] " Stefan Hajnoczi 2013-01-10 9:34 ` Jason Wang 2013-01-10 9:34 ` Jason Wang 2013-01-10 11:49 ` Stefan Hajnoczi 2013-01-10 11:49 ` Stefan Hajnoczi 2013-01-10 14:15 ` Jason Wang 2013-01-10 14:15 ` [Qemu-devel] " Jason Wang 2013-01-14 19:44 ` Anthony Liguori 2013-01-14 19:44 ` [Qemu-devel] " Anthony Liguori 2013-01-15 10:12 ` Jason Wang 2013-01-15 10:12 ` [Qemu-devel] " Jason Wang 2013-01-16 15:09 ` Anthony Liguori 2013-01-16 15:09 ` [Qemu-devel] " Anthony Liguori 2013-01-16 15:19 ` Michael S. Tsirkin 2013-01-16 15:19 ` [Qemu-devel] " Michael S. Tsirkin 2013-01-16 16:14 ` Anthony Liguori 2013-01-16 16:14 ` [Qemu-devel] " Anthony Liguori 2013-01-16 16:48 ` Michael S. Tsirkin 2013-01-16 16:48 ` [Qemu-devel] " Michael S. Tsirkin 2013-01-17 10:31 ` Michael S. Tsirkin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1356690724-37891-5-git-send-email-jasowang@redhat.com \ --to=jasowang@redhat.com \ --cc=aliguori@us.ibm.com \ --cc=jwhan@filewood.snu.ac.kr \ --cc=krkumar2@in.ibm.com \ --cc=kvm@vger.kernel.org \ --cc=mprivozn@redhat.com \ --cc=mst@redhat.com \ --cc=qemu-devel@nongnu.org \ --cc=rusty@rustcorp.com.au \ --cc=shiyer@redhat.com \ --cc=stefanha@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.