X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Flnx_virtio_nic.c;h=ca56633d4fda9fe8b659f0993e7058dc5f80cf3e;hb=912f74aae257be698044de894124289ba5356621;hp=d0ac9a5128970a7e4854236156ec5701929c0457;hpb=6d6988cc9c8bac21d96afd800076afe0915cf2cd;p=palacios.git diff --git a/palacios/src/devices/lnx_virtio_nic.c b/palacios/src/devices/lnx_virtio_nic.c index d0ac9a5..ca56633 100644 --- a/palacios/src/devices/lnx_virtio_nic.c +++ b/palacios/src/devices/lnx_virtio_nic.c @@ -232,8 +232,10 @@ static int handle_rx_kick(struct guest_info *core, flags = v3_lock_irqsave(virtio->rx_lock); - virtio->net_ops->start_rx(virtio->backend_data); - //disable_cb(&virtio->rx_vq); + if(virtio->net_ops->start_rx != NULL){ + virtio->net_ops->start_rx(virtio->backend_data); + } + //disable_cb(&virtio->rx_vq); v3_unlock_irqrestore(virtio->rx_lock, flags); @@ -647,9 +649,18 @@ exit: return ret_val; } -static int virtio_free(struct virtio_net_state * virtio) { - - // unregister from PCI +static int virtio_free(struct virtio_dev_state * virtio) { + struct virtio_net_state * backend = NULL; + struct virtio_net_state * tmp = NULL; + + + list_for_each_entry_safe(backend, tmp, &(virtio->dev_list), dev_link) { + + // unregister from PCI + + list_del(&(backend->dev_link)); + V3_Free(backend); + } V3_Free(virtio); return 0; @@ -768,6 +779,10 @@ static int register_dev(struct virtio_dev_state * virtio, virtio_init_state(net_state); + + /* Add backend to list of devices */ + list_add(&(net_state->dev_link), &(virtio->dev_list)); + return 0; }