summaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/interface.c
diff options
context:
space:
mode:
authorPaul Durrant2016-05-13 10:37:28 +0200
committerDavid S. Miller2016-05-16 19:35:56 +0200
commitf07f989338587bc2b202f6e3c8e8468c450bd6a2 (patch)
tree87e05544ca5d886d7da7c930ae627bfb7a1ce991 /drivers/net/xen-netback/interface.c
parentxen-netback: add control protocol implementation (diff)
downloadkernel-qcow2-linux-f07f989338587bc2b202f6e3c8e8468c450bd6a2.tar.gz
kernel-qcow2-linux-f07f989338587bc2b202f6e3c8e8468c450bd6a2.tar.xz
kernel-qcow2-linux-f07f989338587bc2b202f6e3c8e8468c450bd6a2.zip
xen-netback: pass hash value to the frontend
My recent patch to include/xen/interface/io/netif.h defines a new extra info type that can be used to pass hash values between backend and guest frontend. This patch adds code to xen-netback to pass hash values calculated for guest receive-side packets (i.e. netback transmit side) to the frontend. Signed-off-by: Paul Durrant <paul.durrant@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.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index 5a39cdbc217c..1c7f49b5acc1 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -158,8 +158,17 @@ static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
struct xenvif *vif = netdev_priv(dev);
unsigned int size = vif->hash.size;
- if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE)
- return fallback(dev, skb) % dev->real_num_tx_queues;
+ if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) {
+ u16 index = fallback(dev, skb) % dev->real_num_tx_queues;
+
+ /* Make sure there is no hash information in the socket
+ * buffer otherwise it would be incorrectly forwarded
+ * to the frontend.
+ */
+ skb_clear_hash(skb);
+
+ return index;
+ }
xenvif_set_skb_hash(vif, skb);