aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/interface.c
diff options
context:
space:
mode:
authorDavid Vrabel <david.vrabel@citrix.com>2014-10-22 09:08:53 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-25 14:15:20 -0400
commitbc96f648df1bbc2729abbb84513cf4f64273a1f1 (patch)
treead8044147004ba38641bc727bf3b0f866c2e05ac /drivers/net/xen-netback/interface.c
parent5345c1d417c1b0caf46fd2766d16bb4357a347d8 (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.c12
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
63static 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
73int xenvif_schedulable(struct xenvif *vif) 63int 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 }