void sn_release_netdev(struct sn_device *dev) { if (!dev) return; log_info("%s: releasing netdev...\n", dev->netdev->name); unregister_netdev(dev->netdev); sn_free_queues(dev); free_netdev(dev->netdev); switch (dev->type) { case sn_dev_type_host: /* TODO: do something */ break; case sn_dev_type_pci: /* TODO: do something with dev->pdev */ break; default: log_err("unknown device type %d\n", dev->type); } }
/* unregister_netdev(ice) will eventually trigger this function */ static void sn_netdev_destructor(struct net_device *netdev) { struct sn_device *dev = netdev_priv(netdev); sn_free_queues(dev); switch (dev->type) { case sn_dev_type_host: /* TODO: do something */ break; case sn_dev_type_pci: /* TODO: do something with dev->pdev */ break; default: log_err("unknown device type %d\n", dev->type); } log_info("%s: releasing netdev...\n", netdev->name); free_netdev(netdev); }