[lkml]   [2016]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[PATCH 4.4 083/118] net: simplify napi_synchronize() to avoid warnings
4.4-stable review patch.  If anyone has any objections, please let me know.


From: Arnd Bergmann <>

commit facc432faa59414bd7c60c307ff1645154a66c98 upstream.

The napi_synchronize() function is defined twice: The definition
for SMP builds waits for other CPUs to be done, while the uniprocessor
variant just contains a barrier and ignores its argument.

In the mvneta driver, this leads to a warning about an unused variable
when we lookup the NAPI struct of another CPU and then don't use it:

ethernet/marvell/mvneta.c: In function 'mvneta_percpu_notifier':
ethernet/marvell/mvneta.c:2910:30: error: unused variable 'other_port' [-Werror=unused-variable]

There are no other CPUs on a UP build, so that code never runs, but
gcc does not know this.

The nicest solution seems to be to turn the napi_synchronize() helper
into an inline function for the UP case as well, as that leads gcc to
not complain about the argument being unused. Once we do that, we can
also combine the two cases into a single function definition and use
if(IS_ENABLED()) rather than #ifdef to make it look a bit nicer.

The warning first came up in linux-4.4, but I failed to catch it

Signed-off-by: Arnd Bergmann <>
Fixes: f86428854480 ("net: mvneta: Statically assign queues to CPUs")
Signed-off-by: David S. Miller <>
Signed-off-by: Greg Kroah-Hartman <>

include/linux/netdevice.h | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)

--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -511,7 +511,6 @@ static inline void napi_enable(struct na
clear_bit(NAPI_STATE_NPSVC, &n->state);

-#ifdef CONFIG_SMP
* napi_synchronize - wait until NAPI is not running
* @n: napi context
@@ -522,12 +521,12 @@ static inline void napi_enable(struct na
static inline void napi_synchronize(const struct napi_struct *n)
- while (test_bit(NAPI_STATE_SCHED, &n->state))
- msleep(1);
+ while (test_bit(NAPI_STATE_SCHED, &n->state))
+ msleep(1);
+ else
+ barrier();
-# define napi_synchronize(n) barrier()

enum netdev_queue_state_t {

 \ /
  Last update: 2016-09-23 00:04    [W:0.383 / U:0.352 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site