mirror of
				https://github.com/xcat2/xNBA.git
				synced 2025-10-31 11:22:29 +00:00 
			
		
		
		
	Use hotplug support to notify persistent reference holders when a
net_device is unregistered.
This commit is contained in:
		| @@ -10,6 +10,7 @@ | ||||
| #include <stdint.h> | ||||
| #include <gpxe/list.h> | ||||
| #include <gpxe/tables.h> | ||||
| #include <gpxe/hotplug.h> | ||||
|  | ||||
| struct pk_buff; | ||||
| struct net_device; | ||||
| @@ -137,6 +138,10 @@ struct ll_protocol { | ||||
| struct net_device { | ||||
| 	/** List of network devices */ | ||||
| 	struct list_head list; | ||||
|  | ||||
| 	/** List of persistent reference holders */ | ||||
| 	struct list_head references; | ||||
|  | ||||
| 	/** Transmit packet | ||||
| 	 * | ||||
| 	 * @v netdev	Network device | ||||
|   | ||||
| @@ -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 ) ); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user