From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933237AbbHLAOz (ORCPT ); Tue, 11 Aug 2015 20:14:55 -0400 Received: from mail-bn1bn0109.outbound.protection.outlook.com ([157.56.110.109]:3872 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932265AbbHLAOw (ORCPT ); Tue, 11 Aug 2015 20:14:52 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=andschwa@microsoft.com; From: Andrew Schwartzmeyer To: CC: , , , Subject: [PATCH net-next 1/2] hv_netvsc: Set vRSS with num_chn in RNDIS filter Date: Tue, 11 Aug 2015 17:14:31 -0700 Message-ID: <1439338472-21361-1-git-send-email-andschwa@microsoft.com> X-Mailer: git-send-email 2.4.2 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [131.107.160.55] X-ClientProxiedBy: BLUPR0401CA0031.namprd04.prod.outlook.com (25.162.114.169) To BY1PR0301MB1222.namprd03.prod.outlook.com (25.161.203.18) X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1222;2:rGDNm7u01Tue9BN2GrOp2540cOKPJLSssjXjrY3908iL0BsFLcxATmdhjNRTGEVS5OZWaPEIKqzvrp2tMg1GLm+eLmpisBNuL/SnFUTLG/xXAFnBsB/edbT6JCS6Hf2IDcAVRqEilW5uGdB7A/O8P6OQpKrHnGuVgTqdoZMHHOQ=;3:/ZCrGGu1oEv20Q2edXj307Sle14IhR2xMVmUDAuAjfjJTJLM2xdDUiQkiOXCdjVqKjK+XuzeBzB5OjZv7l1wiR6j3JociAwj89ema/iqva7UL2uVWw3ZVCSGjrSVBriUVLD+Q2NzGwNONnv6vINb7w==;25:mjZrWM5z2Ok6uxEDhBibW5Yq0TIY2WxaGpPuI0HkUn+4PAe3BEwNdFKgMIrgg3yd/2fCgtqNIlKftzP/x6e17OcFfz1eGNclu0xRgcRmbihW8y4h8VfOW2Cpc2VDgUD0Lto5bBwq2PUJGR50ZRm/xSBeCAD2khbORXYRM7fhTwAzZ1B3WhzPLb6dYDv7OPQipM+ZIAhR1TAjSJb1JhO+nC7atz9CWzYMyFEeCzl+DM/k/XcEJ8/nKF4C4btKfy3115/7pvyUaSv4A1Iuxsk00A== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1222; X-O365ENT-EOP-Header: Message processed by - O365_ENT: Allow from ranges (Engineering ONLY) X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1222;20:PHRo5ez4BAkJxVdLcyr/T7nxpVusEGfGXQTZZYroj04L3/Pq42DZbSQ9HZrYmD2LBJxSrJXJNcI6dZ+ft5o398ZQngl2feypZv5eysyD5Vce7bNJR1PTVwlHYjhKCDh/uHDRKEXPP2b9KrHXyhjhqCtbjTTVBrl5X6v3Rs5CMURcZSvKl0AyAkOI1ffnuaBLdUM08t5/kVVFUEapCJQtxYAxMTK9TvoznJTcBtdsM8HtqtUJtivulDy17pu/Usd8zYqPuzspDUleRiMKScV2pE4hlT2F0ecCP3Gkbvly2jQPyE7zRg5g4MS5iuct0nJgxsvEmOAWDtziWwWEyEBhrms+p+AQQLe6jGT2nTRZCBgWCAW08nIhCFL0VZ/hND+S076v/JCLfks4tmqCg3NMMn4fY26XkLtXluRoUBeU08oDR4V84Q8ydKeTovb1GZ0uvIXV6W5dCw6gr+r1lkLVaVcvphY/LfV2SX/kEmtWnZ5Oq05+1u33OXyX/5noIaelnXGhk0Rlqg3MegfdaHKxkKrhaHaLjw6jMI5d6CS6TaB+YoO2ZL7PwpwyTXO1RrTuMw5vhZBg4IM6UjIS3tWIZ8IZaGCNXxW6ovLiHxdaS4M=;4:93Y7vFOP3yUFDmbum20hY5RqfhXdBVXf9kOICgYo1kH1RZyyIZ4mfurooh0AAPu27I3op49Z1Q3cSQ2ShSZUTvE7fPVclF/PPo5by5D5psOL5sKbmWYXUndWPeDeqgz5OY01BNb8379fyDIx1c0y/Ha16JiZN4SbcoE7kLOtUICCei/Eq+IoG/aZfHoP9XH/RQEfhl7fYSOwDoqj9/8/gabzco1E7YD6lXwAiTq5k0y551FXWdv0X+z+ofKT+XmEJxCEru7EWHTXYo5dJNikVedESWbhyeakcgjISZ6C4FI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(108003899814671); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(3002001);SRVR:BY1PR0301MB1222;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1222; X-Forefront-PRVS: 0666E15D35 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(979002)(6009001)(199003)(189002)(10090500001)(189998001)(48376002)(50466002)(19580405001)(19580395003)(50226001)(1511001)(64706001)(33646002)(66066001)(47776003)(87976001)(2561002)(92566002)(62966003)(77156002)(86362001)(450100001)(2421001)(122386002)(46102003)(40100003)(77096005)(68736005)(86612001)(42186005)(50986999)(5001860100001)(5001830100001)(5001960100002)(81156007)(4001450100002)(101416001)(97736004)(5003940100001)(4001540100001)(110136002)(36756003)(105586002)(106356001)(2351001)(10290500002)(5005710100001)(229853001)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1102;SCL:1;SRVR:BY1PR0301MB1222;H:ubuntu.corp.microsoft.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY1PR0301MB1222;23:eidLEHey5eQE4KDQkFBSt3VdxoHMfBVYS1TNa4Z?= =?us-ascii?Q?Rp5xdGLIeviK/X3HU83yJfbQZ+YwVTbHC1RUXrB59u11fPJCLUgqfWlUPNxn?= =?us-ascii?Q?K8M8h9jvNTHd6BF2NP5KSWHnJVG6uJO0L/mkdlD5YP0jQQVrX9xFznjvSW6y?= =?us-ascii?Q?rAAPBkAmoPWSa5u1T03xbdP2HyzcskLHRiPN3NBavPtt0qN1pJPhHpEH/apD?= =?us-ascii?Q?1RZgWwYZNKyaMlR9Oi/FB3QvFTnJ9eNXmMeo9aeSpDZsGwZWa94arla0RE8Y?= =?us-ascii?Q?m3hCzBQxkYhfqbl607ImSb8NDZ+rXKrAmLw2rEarNSpuHfyPBpUkCjnWcdqC?= =?us-ascii?Q?YUxIKsujc1Ao03eT14kRBOGBLCmCJV8VIRc1Gi4M2bC9XOICx9AxhssxKn/G?= =?us-ascii?Q?6252cu6fBKkId9P6cxei6pFC8NrhLrVoE4MJ0edYqz9PmnvjPTN9JtdUT+BX?= =?us-ascii?Q?a/CxDANO50H7gRW4QwkKKsaCbVtW1EFiUC/pt76BpSa1Daq85xJB1oVXn2hu?= =?us-ascii?Q?93HNQqyIPRTr+nZlG3Ds6wy0TrYDT/2msanyGgdi4vJAau/P/c8YUwwoKg6O?= =?us-ascii?Q?B6Lz/2XZfqUnFJqbOzAe4NbYDl/fJAVVK+ZHzhf4KroZXHJV3BjUTTKKinEg?= =?us-ascii?Q?5Vrhhl/NV7g7VtZArzS6w7CFhUKytPfe61o30C6DLSj22vKT48g66Tqg/263?= =?us-ascii?Q?WlvEZjGldjMazSmzyshVUUAH8WPsGJVaFn81xu2tSrVT8FFgQJ/uNVht5kmz?= =?us-ascii?Q?bhKAKwVQKWd8HX1GlnT8+HoHrpDBY1l7uIc+OLE6f3xrzAkwOipx9WXGveWG?= =?us-ascii?Q?GLKp4JWX75+g4f2cd0crhraRvA0uELj7VzyxrWXU7F3MhAz9r007JE8BC8jl?= =?us-ascii?Q?Yb22AWNuZBG/Y5UhSjJNNeY6u8WWUlCjGeGlJFXnh0sVh4unrVvI5V1WBVAz?= =?us-ascii?Q?mArUmuGzsmEZfXbDw0Pw+aeSYH7DUaI5uaDD39Uq0gk6ollfkr5UysWGQa4W?= =?us-ascii?Q?yJhkcRGTEzZQX490HlDB+aoR8Hb8qhLvybFIeTustTotUQPC7Iq3WUT8QVPk?= =?us-ascii?Q?RLK0ZB/FuVlgyAVe46zXTLsCF+E3zMQqoM61EaACA3r4e44tgx2EVIhhst0m?= =?us-ascii?Q?pxITs4QVjxuR8W7vMZSsZBlUQEUkhqexx7VO4e3YtRt53vaFF6c64SfNjNY3?= =?us-ascii?Q?O7aY15/0NXwBroyZNyupwZHxKDUdPAii/Mth6KxRgaAtNbAJgPNWDqmq6ez2?= =?us-ascii?Q?4M09Em4eow0BTag+PsjH9dKD+mR6crhwBLPGAwNuYxZDortybbEzR6W2LW38?= =?us-ascii?Q?HL6di1M8oopG8eSWHps0UZZHjldbas+msGRnDs9ZPppwSK99N4C2UxFvI3Sw?= =?us-ascii?Q?1mSV03g=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY1PR0301MB1222;5:q0qz0CTAyuZ93G5dAw8Di0ABOh/X8SinlMboldLU34sKZn0rBUmVvIi9v8FGASSSxJI/ONV4896/Y1dCm8TE9+E5togdjWaCRXQvM99Ljcn0exQm7KSnbr2oBNplbTzVKMfF/TsfR4syhNI/lY+36Q==;24:wKNWjn5+ipu7dKFTgpJn2QGhycIVlHT1XkYcq022M7dLRqLDY4MFSA7DAOA/9xd8LPvPAsQBwu4szCyA1OiM3E5JaRbpDYahR0TWr3j1A1g=;20:J3mc/Mr+n/zTqw60LKtkidKJxWqgOKAt+KxSPjQ33ZzOAwiW5gPqLmkgykkkm11zxLVlCpkDfopC7gUiTJtigQ== X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2015 00:14:48.4947 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0301MB1222 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Uses device_info->num_chn to pass user provided number of vRSS queues (from ethtool --set-channels) to rndis_filter_device_add. If nonzero and less than the maximum, set net_device->num_chn to the given value; else default to prior algorithm. Always initialize struct device_info to 0, otherwise not all its fields are guaranteed to be 0, which is necessary when checking if num_chn has been purposefully set. Signed-off-by: Andrew Schwartzmeyer --- drivers/net/hyperv/hyperv_net.h | 1 + drivers/net/hyperv/netvsc_drv.c | 3 +++ drivers/net/hyperv/rndis_filter.c | 7 ++++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h index 5ce7020ca530..5fa98f599b3d 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -162,6 +162,7 @@ struct netvsc_device_info { bool link_state; /* 0 - link up, 1 - link down */ int ring_size; u32 max_num_vrss_chns; + u32 num_chn; }; enum rndis_device_state { diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 7b36d5fecc1f..21845202a52d 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -799,6 +799,8 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) ndevctx->device_ctx = hdev; hv_set_drvdata(hdev, ndev); + + memset(&device_info, 0, sizeof(device_info)); device_info.ring_size = ring_size; device_info.max_num_vrss_chns = max_num_vrss_chns; rndis_filter_device_add(hdev, &device_info); @@ -1022,6 +1024,7 @@ static int netvsc_probe(struct hv_device *dev, net->needed_headroom = max_needed_headroom; /* Notify the netvsc driver of the new device */ + memset(&device_info, 0, sizeof(device_info)); device_info.ring_size = ring_size; device_info.max_num_vrss_chns = max_num_vrss_chns; ret = rndis_filter_device_add(dev, &device_info); diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c index 9b8263db49cc..5931a799aa17 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -1125,7 +1125,12 @@ int rndis_filter_device_add(struct hv_device *dev, */ node_cpu_mask = cpumask_of_node(cpu_to_node(dev->channel->target_cpu)); num_possible_rss_qs = cpumask_weight(node_cpu_mask); - net_device->num_chn = min(num_possible_rss_qs, num_rss_qs); + + /* We will use the given number of channels if available. */ + if (device_info->num_chn && device_info->num_chn < net_device->max_chn) + net_device->num_chn = device_info->num_chn; + else + net_device->num_chn = min(num_possible_rss_qs, num_rss_qs); num_rss_qs = net_device->num_chn - 1; net_device->num_sc_offered = num_rss_qs; -- 2.4.2