From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755583AbcCWPGa (ORCPT ); Wed, 23 Mar 2016 11:06:30 -0400 Received: from p3plsmtps2ded02.prod.phx3.secureserver.net ([208.109.80.59]:55878 "EHLO p3plsmtps2ded02.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755427AbcCWPG2 (ORCPT ); Wed, 23 Mar 2016 11:06:28 -0400 x-originating-ip: 72.167.245.219 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, driverdev-devel@linuxdriverproject.org Subject: [PATCH net-next,2/2] hv_netvsc: Fix the array sizes to be max supported channels Date: Wed, 23 Mar 2016 09:43:10 -0700 Message-Id: <1458751390-26971-2-git-send-email-haiyangz@microsoft.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1458751390-26971-1-git-send-email-haiyangz@microsoft.com> References: <1458751390-26971-1-git-send-email-haiyangz@microsoft.com> X-CMAE-Envelope: MS4wfGZVRJciXvVAIPv5QbLyIGrVTIoySSTXkHaQIVKKyNy9EL/H7CUfgYtDPUMNbTVOR3lI0Mg2587oGmeRILdRg93cpTSjD5nA2yp48ets7MVChl1IZ/6R n2xMhm+a6bMIK3IUjJzHSSftVpTTisOqaRyE/G6BeAFj7K/i3Z0A9c1yJy/IVJ6BGRZqrSSH7Z0Puh9gyTpwxUMK38izxqmYKipOoXvds0b3IpX0xqjFLtuH NKva91j3s/l34//i3ki1lQutOddr26tas4q7L+/froNyKMQkAaiDE2pzQ6NNdx/pJqVbw8NjE5nylL5bQpKLUL6j7e4fTuH7QAIo3fIn3v0Y01bx9fZ3HxcR zFiYWGKZtOVqP5a7kqhtvQCBSQ6+rczyLQnrMBBD9FJj1FgshY1fJ04WHIbHEl2cijptgQY2VzzdtFDw7MEC1jN6z+iciA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The VRSS_CHANNEL_MAX is the max number of channels supported by Hyper-V hosts. We use it for the related array sizes instead of using NR_CPUS, which may be set to several thousands. This patch reduces possible memory allocation failures. Signed-off-by: Haiyang Zhang Reviewed-by: K. Y. Srinivasan --- drivers/net/hyperv/hyperv_net.h | 7 ++++--- drivers/net/hyperv/rndis_filter.c | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h index b4c6878..8b3bd8e 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -619,6 +619,7 @@ struct nvsp_message { #define NETVSC_PACKET_SIZE 4096 #define VRSS_SEND_TAB_SIZE 16 +#define VRSS_CHANNEL_MAX 64 #define RNDIS_MAX_PKT_DEFAULT 8 #define RNDIS_PKT_ALIGN_DEFAULT 8 @@ -700,13 +701,13 @@ struct netvsc_device { struct net_device *ndev; - struct vmbus_channel *chn_table[NR_CPUS]; + struct vmbus_channel *chn_table[VRSS_CHANNEL_MAX]; u32 send_table[VRSS_SEND_TAB_SIZE]; u32 max_chn; u32 num_chn; spinlock_t sc_lock; /* Protects num_sc_offered variable */ u32 num_sc_offered; - atomic_t queue_sends[NR_CPUS]; + atomic_t queue_sends[VRSS_CHANNEL_MAX]; /* Holds rndis device info */ void *extension; @@ -718,7 +719,7 @@ struct netvsc_device { /* The sub channel callback buffer */ unsigned char *sub_cb_buf; - struct multi_send_data msd[NR_CPUS]; + struct multi_send_data msd[VRSS_CHANNEL_MAX]; u32 max_pkt; /* max number of pkt in one send, e.g. 8 */ u32 pkt_align; /* alignment bytes, e.g. 8 */ diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c index 47d07c5..d5a54da 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -1113,9 +1113,9 @@ int rndis_filter_device_add(struct hv_device *dev, if (ret || rsscap.num_recv_que < 2) goto out; - num_rss_qs = min(device_info->max_num_vrss_chns, rsscap.num_recv_que); + net_device->max_chn = min_t(u32, VRSS_CHANNEL_MAX, rsscap.num_recv_que); - net_device->max_chn = rsscap.num_recv_que; + num_rss_qs = min(device_info->max_num_vrss_chns, net_device->max_chn); /* * We will limit the VRSS channels to the number CPUs in the NUMA node -- 1.7.4.1