diff options
author | David Vrabel <david.vrabel@citrix.com> | 2014-10-22 09:08:53 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-25 14:15:20 -0400 |
commit | bc96f648df1bbc2729abbb84513cf4f64273a1f1 (patch) | |
tree | ad8044147004ba38641bc727bf3b0f866c2e05ac /drivers/net/xen-netback/interface.c | |
parent | 5345c1d417c1b0caf46fd2766d16bb4357a347d8 (diff) |
xen-netback: make feature-rx-notify mandatory
Frontends that do not provide feature-rx-notify may stall because
netback depends on the notification from frontend to wake the guest Rx
thread (even if can_queue is false).
This could be fixed but feature-rx-notify was introduced in 2006 and I
am not aware of any frontends that do not implement this.
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Acked-by: Wei Liu <wei.liu2@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 | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c index f379689dde30..c6759b1ec18d 100644 --- a/drivers/net/xen-netback/interface.c +++ b/drivers/net/xen-netback/interface.c | |||
@@ -60,16 +60,6 @@ void xenvif_skb_zerocopy_complete(struct xenvif_queue *queue) | |||
60 | atomic_dec(&queue->inflight_packets); | 60 | atomic_dec(&queue->inflight_packets); |
61 | } | 61 | } |
62 | 62 | ||
63 | static inline void xenvif_stop_queue(struct xenvif_queue *queue) | ||
64 | { | ||
65 | struct net_device *dev = queue->vif->dev; | ||
66 | |||
67 | if (!queue->vif->can_queue) | ||
68 | return; | ||
69 | |||
70 | netif_tx_stop_queue(netdev_get_tx_queue(dev, queue->id)); | ||
71 | } | ||
72 | |||
73 | int xenvif_schedulable(struct xenvif *vif) | 63 | int xenvif_schedulable(struct xenvif *vif) |
74 | { | 64 | { |
75 | return netif_running(vif->dev) && | 65 | return netif_running(vif->dev) && |
@@ -209,7 +199,7 @@ static int xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
209 | if (!xenvif_rx_ring_slots_available(queue, min_slots_needed)) { | 199 | if (!xenvif_rx_ring_slots_available(queue, min_slots_needed)) { |
210 | queue->rx_stalled.function = xenvif_rx_stalled; | 200 | queue->rx_stalled.function = xenvif_rx_stalled; |
211 | queue->rx_stalled.data = (unsigned long)queue; | 201 | queue->rx_stalled.data = (unsigned long)queue; |
212 | xenvif_stop_queue(queue); | 202 | netif_tx_stop_queue(netdev_get_tx_queue(dev, queue->id)); |
213 | mod_timer(&queue->rx_stalled, | 203 | mod_timer(&queue->rx_stalled, |
214 | jiffies + rx_drain_timeout_jiffies); | 204 | jiffies + rx_drain_timeout_jiffies); |
215 | } | 205 | } |