aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/netback.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/xen-netback/netback.c')
-rw-r--r--drivers/net/xen-netback/netback.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 4a509f715fe8..908e65e9b821 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -60,14 +60,12 @@ module_param(separate_tx_rx_irq, bool, 0644);
60 */ 60 */
61unsigned int rx_drain_timeout_msecs = 10000; 61unsigned int rx_drain_timeout_msecs = 10000;
62module_param(rx_drain_timeout_msecs, uint, 0444); 62module_param(rx_drain_timeout_msecs, uint, 0444);
63unsigned int rx_drain_timeout_jiffies;
64 63
65/* The length of time before the frontend is considered unresponsive 64/* The length of time before the frontend is considered unresponsive
66 * because it isn't providing Rx slots. 65 * because it isn't providing Rx slots.
67 */ 66 */
68static unsigned int rx_stall_timeout_msecs = 60000; 67unsigned int rx_stall_timeout_msecs = 60000;
69module_param(rx_stall_timeout_msecs, uint, 0444); 68module_param(rx_stall_timeout_msecs, uint, 0444);
70static unsigned int rx_stall_timeout_jiffies;
71 69
72unsigned int xenvif_max_queues; 70unsigned int xenvif_max_queues;
73module_param_named(max_queues, xenvif_max_queues, uint, 0644); 71module_param_named(max_queues, xenvif_max_queues, uint, 0644);
@@ -2020,7 +2018,7 @@ static bool xenvif_rx_queue_stalled(struct xenvif_queue *queue)
2020 return !queue->stalled 2018 return !queue->stalled
2021 && prod - cons < XEN_NETBK_RX_SLOTS_MAX 2019 && prod - cons < XEN_NETBK_RX_SLOTS_MAX
2022 && time_after(jiffies, 2020 && time_after(jiffies,
2023 queue->last_rx_time + rx_stall_timeout_jiffies); 2021 queue->last_rx_time + queue->vif->stall_timeout);
2024} 2022}
2025 2023
2026static bool xenvif_rx_queue_ready(struct xenvif_queue *queue) 2024static bool xenvif_rx_queue_ready(struct xenvif_queue *queue)
@@ -2038,8 +2036,9 @@ static bool xenvif_have_rx_work(struct xenvif_queue *queue)
2038{ 2036{
2039 return (!skb_queue_empty(&queue->rx_queue) 2037 return (!skb_queue_empty(&queue->rx_queue)
2040 && xenvif_rx_ring_slots_available(queue, XEN_NETBK_RX_SLOTS_MAX)) 2038 && xenvif_rx_ring_slots_available(queue, XEN_NETBK_RX_SLOTS_MAX))
2041 || xenvif_rx_queue_stalled(queue) 2039 || (queue->vif->stall_timeout &&
2042 || xenvif_rx_queue_ready(queue) 2040 (xenvif_rx_queue_stalled(queue)
2041 || xenvif_rx_queue_ready(queue)))
2043 || kthread_should_stop() 2042 || kthread_should_stop()
2044 || queue->vif->disabled; 2043 || queue->vif->disabled;
2045} 2044}
@@ -2092,6 +2091,9 @@ int xenvif_kthread_guest_rx(void *data)
2092 struct xenvif_queue *queue = data; 2091 struct xenvif_queue *queue = data;
2093 struct xenvif *vif = queue->vif; 2092 struct xenvif *vif = queue->vif;
2094 2093
2094 if (!vif->stall_timeout)
2095 xenvif_queue_carrier_on(queue);
2096
2095 for (;;) { 2097 for (;;) {
2096 xenvif_wait_for_rx_work(queue); 2098 xenvif_wait_for_rx_work(queue);
2097 2099
@@ -2118,10 +2120,12 @@ int xenvif_kthread_guest_rx(void *data)
2118 * while it's probably not responsive, drop the 2120 * while it's probably not responsive, drop the
2119 * carrier so packets are dropped earlier. 2121 * carrier so packets are dropped earlier.
2120 */ 2122 */
2121 if (xenvif_rx_queue_stalled(queue)) 2123 if (vif->stall_timeout) {
2122 xenvif_queue_carrier_off(queue); 2124 if (xenvif_rx_queue_stalled(queue))
2123 else if (xenvif_rx_queue_ready(queue)) 2125 xenvif_queue_carrier_off(queue);
2124 xenvif_queue_carrier_on(queue); 2126 else if (xenvif_rx_queue_ready(queue))
2127 xenvif_queue_carrier_on(queue);
2128 }
2125 2129
2126 /* Queued packets may have foreign pages from other 2130 /* Queued packets may have foreign pages from other
2127 * domains. These cannot be queued indefinitely as 2131 * domains. These cannot be queued indefinitely as
@@ -2192,9 +2196,6 @@ static int __init netback_init(void)
2192 if (rc) 2196 if (rc)
2193 goto failed_init; 2197 goto failed_init;
2194 2198
2195 rx_drain_timeout_jiffies = msecs_to_jiffies(rx_drain_timeout_msecs);
2196 rx_stall_timeout_jiffies = msecs_to_jiffies(rx_stall_timeout_msecs);
2197
2198#ifdef CONFIG_DEBUG_FS 2199#ifdef CONFIG_DEBUG_FS
2199 xen_netback_dbg_root = debugfs_create_dir("xen-netback", NULL); 2200 xen_netback_dbg_root = debugfs_create_dir("xen-netback", NULL);
2200 if (IS_ERR_OR_NULL(xen_netback_dbg_root)) 2201 if (IS_ERR_OR_NULL(xen_netback_dbg_root))