From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751997AbdDIAzQ (ORCPT ); Sat, 8 Apr 2017 20:55:16 -0400 Received: from a2nlsmtp01-04.prod.iad2.secureserver.net ([198.71.225.38]:48464 "EHLO a2nlsmtp01-04.prod.iad2.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751485AbdDIAzO (ORCPT ); Sat, 8 Apr 2017 20:55:14 -0400 x-originating-ip: 107.180.71.197 From: Haiyang Zhang To: davem@davemloft.net, netdev@vger.kernel.org Cc: haiyangz@microsoft.com, kys@microsoft.com, olaf@aepfle.de, vkuznets@redhat.com, linux-kernel@vger.kernel.org Subject: [PATCH net-next,1/3] hv_netvsc: Use per socket hash when available Date: Sat, 8 Apr 2017 17:53:59 -0700 Message-Id: <1491699241-9944-1-git-send-email-haiyangz@exchange.microsoft.com> X-Mailer: git-send-email 1.7.1 Reply-To: haiyangz@microsoft.com X-CMAE-Envelope: MS4wfOG01rxdKrqbI+EQ/VhgdiQ76IiqzfQWAlSlJCDzOR9/gXH/SpvK3bnx6YpPBvmGolZfK9zdP5XO1MUC5NoDfuKbHUepUG4ScEbFyvPSmL1Tx+HiHJAU Dv5UZxr6aJazjQ8lUk5jP+sFVMcJNDf7oik4P/zPsusMuM5O2zeJlcTCCyix/vqTcxQ+7AvFAgkGr55A2gmZgH0wHDS684dB1xjQFpocipFTjFwCgd/Vc/Q6 445pkPXoQk1k9ghq3jes7GM8WFPIIchDuhwNuPBtXq/wAmVLmDqFxgAWTvzxNfg0uKMLXEkzH417CsXdrxK56tKGH91cCfUWlrkSeEEwg+rhZit5N2LGMkue KiXFWzi66NXOZnks1eb8IG9LPe7f1w== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Haiyang Zhang The per socket hash is set when a socket is connected. Use it, when available, to save CPU cycles on repeatedly computing hash on the same connection. Signed-off-by: Haiyang Zhang Reviewed-by: Stephen Hemminger --- drivers/net/hyperv/netvsc_drv.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index f24c289..0a129cb 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -211,9 +211,14 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb, int q_idx = sk_tx_queue_get(sk); if (q_idx < 0 || skb->ooo_okay || q_idx >= num_tx_queues) { - u16 hash = __skb_tx_hash(ndev, skb, VRSS_SEND_TAB_SIZE); + u16 hash; int new_idx; + if (sk) + skb_set_hash_from_sk(skb, sk); + + hash = __skb_tx_hash(ndev, skb, VRSS_SEND_TAB_SIZE); + new_idx = net_device_ctx->tx_send_table[hash] % num_tx_queues; if (q_idx != new_idx && sk && -- 1.7.1