summaryrefslogtreecommitdiffstats
path: root/src/net/netdevice.c
diff options
context:
space:
mode:
authorMichael Brown2007-01-04 04:09:28 +0100
committerMichael Brown2007-01-04 04:09:28 +0100
commitbdf79ec8dc772d492dc75a4cb75525431230fadb (patch)
tree6060099ca12d566e6df93f4f15a2569111053e9b /src/net/netdevice.c
parentMinimal hotplug support: provide a facility for notifying persistent (diff)
downloadipxe-bdf79ec8dc772d492dc75a4cb75525431230fadb.tar.gz
ipxe-bdf79ec8dc772d492dc75a4cb75525431230fadb.tar.xz
ipxe-bdf79ec8dc772d492dc75a4cb75525431230fadb.zip
Use hotplug support to notify persistent reference holders when a
net_device is unregistered.
Diffstat (limited to 'src/net/netdevice.c')
-rw-r--r--src/net/netdevice.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 3f8e54bb..3949d26d 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
@@ -161,6 +161,7 @@ struct net_device * alloc_netdev ( size_t priv_size ) {
netdev = calloc ( 1, sizeof ( *netdev ) + priv_size );
if ( netdev ) {
+ INIT_LIST_HEAD ( &netdev->references );
INIT_LIST_HEAD ( &netdev->rx_queue );
netdev->priv = ( ( ( void * ) netdev ) + sizeof ( *netdev ) );
}
@@ -201,6 +202,9 @@ void unregister_netdev ( struct net_device *netdev ) {
free_pkb ( pkb );
}
+ /* Kill off any persistent references to this device */
+ forget_references ( &netdev->references );
+
/* Remove from device list */
list_del ( &netdev->list );
DBG ( "%s unregistered\n", netdev_name ( netdev ) );