patch "Drivers: hv: vmbus: Use cpumask_var_t for on-stack cpu mask" added to char-misc-testing
Subsystems (2)
This is a note to let you know that I've just added the patch titled
Drivers: hv: vmbus: Use cpumask_var_t for on-stack cpu mask
to my char-misc git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
in the char-misc-testing branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will be merged to the char-misc-next branch sometime soon, after it passes testing, and the merge window is open.
If you have any questions about this process, please let me know.
Quoted 1 line
From
25355252607ca288f329ee033f387764883393f6Mon Sep 17 00:00:00 2001
From: Dexuan Cui <[email protected]>
Date: Sun, 23 Sep 2018 21:10:44 +0000
Subject: Drivers: hv: vmbus: Use cpumask_var_t for on-stack cpu mask
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
A cpumask structure on the stack can cause a warning with CONFIG_NR_CPUS=8192 (e.g. Ubuntu 16.04 and 18.04 use this):
drivers/hv//channel_mgmt.c: In function ‘init_vp_index’:
drivers/hv//channel_mgmt.c:702:1: warning: the frame size of 1032 bytes
is larger than 1024 bytes [-Wframe-larger-than=]
Nowadays it looks most distros enable CONFIG_CPUMASK_OFFSTACK=y, and hence we can work around the warning by using cpumask_var_t.
--- drivers/hv/channel_mgmt.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/hv/channel_mgmt.c +9 -5
@@ -594,16 +594,18 @@ static void init_vp_index(struct vmbus_channel *channel, u16 dev_type)bool perf_chn = vmbus_devs[dev_type].perf_device;struct vmbus_channel *primary = channel->primary_channel;int next_node; -struct cpumask available_mask; +cpumask_var_t available_mask;struct cpumask *alloced_mask;if ((vmbus_proto_version ==VERSION_WS2008 ) || - (vmbus_proto_version ==VERSION_WIN7 ) || (!perf_chn)) { + (vmbus_proto_version ==VERSION_WIN7 ) || (!perf_chn) || + !alloc_cpumask_var (&available_mask,GFP_KERNEL )) {/* * Prior to win8, all channel interrupts are * delivered on cpu 0. * Also if the channel is not a performance critical * channel, bind it to cpu 0. +* In case alloc_cpumask_var() fails, bind it to cpu 0. */ channel->numa_node =0 ; channel->target_cpu =0 ;
@@ -641,7 +643,7 @@ static void init_vp_index(struct vmbus_channel *channel, u16 dev_type)cpumask_clear (alloced_mask); } -cpumask_xor (&available_mask, alloced_mask, +cpumask_xor (available_mask, alloced_mask,cpumask_of_node (primary->numa_node)); cur_cpu =-1 ;
@@ -659,10 +661,10 @@ static void init_vp_index(struct vmbus_channel *channel, u16 dev_type) }while (true) { - cur_cpu =cpumask_next (cur_cpu, &available_mask); + cur_cpu =cpumask_next (cur_cpu, available_mask);if (cur_cpu >= nr_cpu_ids) { cur_cpu =-1 ; -cpumask_copy (&available_mask, +cpumask_copy (available_mask,cpumask_of_node (primary->numa_node));continue ; }
@@ -692,6 +694,8 @@ static void init_vp_index(struct vmbus_channel *channel, u16 dev_type) channel->target_cpu = cur_cpu; channel->target_vp =hv_cpu_number_to_vp_number (cur_cpu); + +free_cpumask_var (available_mask); }static void vmbus_wait_for_unload (void )
Signature · 1 line
2.19.0