diff options
author | Zoltan Kiss <zoltan.kiss@citrix.com> | 2014-03-06 16:48:28 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-03-07 15:56:35 -0500 |
commit | 1bb332af4cd889e4b64dacbf4a793ceb3a70445d (patch) | |
tree | 1aef36c3aa0f6366562e169fbfe7589190d9387e /drivers/net/xen-netback/netback.c | |
parent | 62bad3199a4c20505fc36c169deef20b25e17c5f (diff) |
xen-netback: Add stat counters for zerocopy
These counters help determine how often the buffers had to be copied. Also
they help find out if packets are leaked, as if "sent != success + fail",
there are probably packets never freed up properly.
NOTE: if bisect brought you here, you should apply the series up until
"xen-netback: Timeout packets in RX path", otherwise Windows guests can't work
properly and malicious guests can block other guests by not releasing their sent
packets.
Signed-off-by: Zoltan Kiss <zoltan.kiss@citrix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/xen-netback/netback.c')
-rw-r--r-- | drivers/net/xen-netback/netback.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index 46a75706cb78..3cb586357df7 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c | |||
@@ -1323,8 +1323,10 @@ static int xenvif_tx_submit(struct xenvif *vif) | |||
1323 | * do a skb_copy_ubufs while we are still in control of the | 1323 | * do a skb_copy_ubufs while we are still in control of the |
1324 | * skb. E.g. the __pskb_pull_tail earlier can do such thing. | 1324 | * skb. E.g. the __pskb_pull_tail earlier can do such thing. |
1325 | */ | 1325 | */ |
1326 | if (skb_shinfo(skb)->destructor_arg) | 1326 | if (skb_shinfo(skb)->destructor_arg) { |
1327 | skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY; | 1327 | skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY; |
1328 | vif->tx_zerocopy_sent++; | ||
1329 | } | ||
1328 | 1330 | ||
1329 | netif_receive_skb(skb); | 1331 | netif_receive_skb(skb); |
1330 | } | 1332 | } |
@@ -1364,6 +1366,11 @@ void xenvif_zerocopy_callback(struct ubuf_info *ubuf, bool zerocopy_success) | |||
1364 | napi_schedule(&vif->napi); | 1366 | napi_schedule(&vif->napi); |
1365 | local_bh_enable(); | 1367 | local_bh_enable(); |
1366 | } | 1368 | } |
1369 | |||
1370 | if (likely(zerocopy_success)) | ||
1371 | vif->tx_zerocopy_success++; | ||
1372 | else | ||
1373 | vif->tx_zerocopy_fail++; | ||
1367 | } | 1374 | } |
1368 | 1375 | ||
1369 | static inline void xenvif_tx_dealloc_action(struct xenvif *vif) | 1376 | static inline void xenvif_tx_dealloc_action(struct xenvif *vif) |