diff options
| author | Ross Lagerwall <ross.lagerwall@citrix.com> | 2015-08-04 15:40:59 +0100 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-08-06 23:42:48 -0700 | 
| commit | 57b229063ae6dc65036209018dc7f4290cc026bb (patch) | |
| tree | a465b6e776bef923f818d6601c96516c452d85fe /drivers/net/xen-netback/interface.c | |
| parent | a0a2a6602496a45ae838a96db8b8173794b5d398 (diff) | |
| download | blackbird-op-linux-57b229063ae6dc65036209018dc7f4290cc026bb.tar.gz blackbird-op-linux-57b229063ae6dc65036209018dc7f4290cc026bb.zip | |
xen/netback: Wake dealloc thread after completing zerocopy work
Waking the dealloc thread before decrementing inflight_packets is racy
because it means the thread may go to sleep before inflight_packets is
decremented. If kthread_stop() has already been called, the dealloc
thread may wait forever with nothing to wake it. Instead, wake the
thread only after decrementing inflight_packets.
Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/xen-netback/interface.c')
| -rw-r--r-- | drivers/net/xen-netback/interface.c | 6 | 
1 files changed, 6 insertions, 0 deletions
| diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c index 1a83e190fc15..28577a31549d 100644 --- a/drivers/net/xen-netback/interface.c +++ b/drivers/net/xen-netback/interface.c @@ -61,6 +61,12 @@ void xenvif_skb_zerocopy_prepare(struct xenvif_queue *queue,  void xenvif_skb_zerocopy_complete(struct xenvif_queue *queue)  {  	atomic_dec(&queue->inflight_packets); + +	/* Wake the dealloc thread _after_ decrementing inflight_packets so +	 * that if kthread_stop() has already been called, the dealloc thread +	 * does not wait forever with nothing to wake it. +	 */ +	wake_up(&queue->dealloc_wq);  }  int xenvif_schedulable(struct xenvif *vif) | 

