diff options
Diffstat (limited to 'drivers/net/xen-netfront.c')
| -rw-r--r-- | drivers/net/xen-netfront.c | 24 | 
1 files changed, 10 insertions, 14 deletions
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 73f596a90c69..9407acbd19a9 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -87,8 +87,7 @@ struct netfront_cb {  /* IRQ name is queue name with "-tx" or "-rx" appended */  #define IRQ_NAME_SIZE (QUEUE_NAME_SIZE + 3) -static DECLARE_WAIT_QUEUE_HEAD(module_load_q); -static DECLARE_WAIT_QUEUE_HEAD(module_unload_q); +static DECLARE_WAIT_QUEUE_HEAD(module_wq);  struct netfront_stats {  	u64			packets; @@ -1332,11 +1331,11 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)  	netif_carrier_off(netdev);  	xenbus_switch_state(dev, XenbusStateInitialising); -	wait_event(module_load_q, -			   xenbus_read_driver_state(dev->otherend) != -			   XenbusStateClosed && -			   xenbus_read_driver_state(dev->otherend) != -			   XenbusStateUnknown); +	wait_event(module_wq, +		   xenbus_read_driver_state(dev->otherend) != +		   XenbusStateClosed && +		   xenbus_read_driver_state(dev->otherend) != +		   XenbusStateUnknown);  	return netdev;   exit: @@ -2010,15 +2009,14 @@ static void netback_changed(struct xenbus_device *dev,  	dev_dbg(&dev->dev, "%s\n", xenbus_strstate(backend_state)); +	wake_up_all(&module_wq); +  	switch (backend_state) {  	case XenbusStateInitialising:  	case XenbusStateInitialised:  	case XenbusStateReconfiguring:  	case XenbusStateReconfigured: -		break; -  	case XenbusStateUnknown: -		wake_up_all(&module_unload_q);  		break;  	case XenbusStateInitWait: @@ -2034,12 +2032,10 @@ static void netback_changed(struct xenbus_device *dev,  		break;  	case XenbusStateClosed: -		wake_up_all(&module_unload_q);  		if (dev->state == XenbusStateClosed)  			break;  		/* Missed the backend's CLOSING state -- fallthrough */  	case XenbusStateClosing: -		wake_up_all(&module_unload_q);  		xenbus_frontend_closed(dev);  		break;  	} @@ -2147,14 +2143,14 @@ static int xennet_remove(struct xenbus_device *dev)  	if (xenbus_read_driver_state(dev->otherend) != XenbusStateClosed) {  		xenbus_switch_state(dev, XenbusStateClosing); -		wait_event(module_unload_q, +		wait_event(module_wq,  			   xenbus_read_driver_state(dev->otherend) ==  			   XenbusStateClosing ||  			   xenbus_read_driver_state(dev->otherend) ==  			   XenbusStateUnknown);  		xenbus_switch_state(dev, XenbusStateClosed); -		wait_event(module_unload_q, +		wait_event(module_wq,  			   xenbus_read_driver_state(dev->otherend) ==  			   XenbusStateClosed ||  			   xenbus_read_driver_state(dev->otherend) ==  | 
