diff options
author | David Vrabel <david.vrabel@citrix.com> | 2014-10-22 14:08:55 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-25 14:15:20 -0400 |
commit | ecf08d2dbb96d5a4b4bcc53a39e8d29cc8fef02e (patch) | |
tree | 081341a32e4d7954ea805b145c18176876905ca7 /drivers/net/xen-netback/common.h | |
parent | f48da8b14d04ca87ffcffe68829afd45f926ec6a (diff) | |
download | op-kernel-dev-ecf08d2dbb96d5a4b4bcc53a39e8d29cc8fef02e.zip op-kernel-dev-ecf08d2dbb96d5a4b4bcc53a39e8d29cc8fef02e.tar.gz |
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.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h index c264240..083ecc9 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 */ unsigned int rx_queue_max; unsigned int rx_queue_len; + unsigned long last_rx_time; + bool stalled; struct gnttab_copy grant_copy_op[MAX_GRANT_COPY_OPS]; @@ -232,6 +234,9 @@ struct xenvif { /* Queues */ struct xenvif_queue *queues; unsigned int num_queues; /* active queues, resource allocated */ + unsigned int stalled_queues; + + spinlock_t lock; #ifdef CONFIG_DEBUG_FS struct dentry *xenvif_dbg_root; |