Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9efc2f7d authored by Haiyang Zhang's avatar Haiyang Zhang Committed by David S. Miller
Browse files

hv_netvsc: Fix the array sizes to be max supported channels



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: default avatarHaiyang Zhang <haiyangz@microsoft.com>
Reviewed-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d212b463
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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 */

+2 −2
Original line number Diff line number Diff line
@@ -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