aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/common.h
diff options
context:
space:
mode:
authorDavid Vrabel <david.vrabel@citrix.com>2014-10-22 09:08:55 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-25 14:15:20 -0400
commitecf08d2dbb96d5a4b4bcc53a39e8d29cc8fef02e (patch)
tree081341a32e4d7954ea805b145c18176876905ca7 /drivers/net/xen-netback/common.h
parentf48da8b14d04ca87ffcffe68829afd45f926ec6a (diff)
xen-netback: reintroduce guest Rx stall detection
If a frontend not receiving packets it is useful to detect this and turn off the carrier so packets are dropped early instead of being queued and drained when they expire. A to-guest queue is stalled if it doesn't have enough free slots for a an extended period of time (default 60 s). If at least one queue is stalled, the carrier is turned off (in the expectation that the other queues will soon stall as well). The carrier is only turned on once all queues are ready. When the frontend connects, all the queues start in the stalled state and only become ready once the frontend queues enough Rx requests. Signed-off-by: David Vrabel <david.vrabel@citrix.com> Reviewed-by: Wei Liu <wei.liu2@citrix.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/xen-netback/common.h')
-rw-r--r--drivers/net/xen-netback/common.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h
index c2642402b7a1..083ecc93fe5e 100644
--- a/drivers/net/xen-netback/common.h
+++ b/drivers/net/xen-netback/common.h
@@ -179,6 +179,8 @@ struct xenvif_queue { /* Per-queue data for xenvif */
179 179
180 unsigned int rx_queue_max; 180 unsigned int rx_queue_max;
181 unsigned int rx_queue_len; 181 unsigned int rx_queue_len;
182 unsigned long last_rx_time;
183 bool stalled;
182 184
183 struct gnttab_copy grant_copy_op[MAX_GRANT_COPY_OPS]; 185 struct gnttab_copy grant_copy_op[MAX_GRANT_COPY_OPS];
184 186
@@ -232,6 +234,9 @@ struct xenvif {
232 /* Queues */ 234 /* Queues */
233 struct xenvif_queue *queues; 235 struct xenvif_queue *queues;
234 unsigned int num_queues; /* active queues, resource allocated */ 236 unsigned int num_queues; /* active queues, resource allocated */
237 unsigned int stalled_queues;
238
239 spinlock_t lock;
235 240
236#ifdef CONFIG_DEBUG_FS 241#ifdef CONFIG_DEBUG_FS
237 struct dentry *xenvif_dbg_root; 242 struct dentry *xenvif_dbg_root;