Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1448087 > unrolled thread

[PATCH net-next] net/ncsi: avoid maybe-uninitialized warning

Started byArnd Bergmann <arnd@arndb.de>
First post2016-07-21 21:30 +0200
Last post2016-07-25 19:40 +0200
Articles 3 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH net-next] net/ncsi: avoid maybe-uninitialized warning Arnd Bergmann <arnd@arndb.de> - 2016-07-21 21:30 +0200
    Re: [PATCH net-next] net/ncsi: avoid maybe-uninitialized warning Gavin Shan <gwshan@linux.vnet.ibm.com> - 2016-07-22 02:20 +0200
    Re: [PATCH net-next] net/ncsi: avoid maybe-uninitialized warning David Miller <davem@davemloft.net> - 2016-07-25 19:40 +0200

#1448087 — [PATCH net-next] net/ncsi: avoid maybe-uninitialized warning

FromArnd Bergmann <arnd@arndb.de>
Date2016-07-21 21:30 +0200
Subject[PATCH net-next] net/ncsi: avoid maybe-uninitialized warning
Message-ID<rXrPr-3ny-1@gated-at.bofh.it>
gcc-4.9 and higher warn about the newly added NSCI code:

net/ncsi/ncsi-manage.c: In function 'ncsi_process_next_channel':
net/ncsi/ncsi-manage.c:1003:2: error: 'old_state' may be used uninitialized in this function [-Werror=maybe-uninitialized]

The warning is a false positive and therefore harmless, but it would be good to
avoid it anyway. I have determined that the barrier in the spin_unlock_irqsave()
is what confuses gcc to the point that it cannot track whether the variable
was unused or not.

This rearranges the code in a way that makes it obvious to gcc that old_state
is always initialized at the time of use, functionally this should not
change anything.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 net/ncsi/ncsi-manage.c | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
index d627a39ddcd0..ef017b871857 100644
--- a/net/ncsi/ncsi-manage.c
+++ b/net/ncsi/ncsi-manage.c
@@ -982,23 +982,18 @@ int ncsi_process_next_channel(struct ncsi_dev_priv *ndp)
 	spin_lock_irqsave(&ndp->lock, flags);
 	nc = list_first_or_null_rcu(&ndp->channel_queue,
 				    struct ncsi_channel, link);
-	if (nc) {
-		old_state = xchg(&nc->state, NCSI_CHANNEL_INVISIBLE);
-		list_del_init(&nc->link);
+	if (!nc) {
+		spin_unlock_irqrestore(&ndp->lock, flags);
+		goto out;
 	}
+
+	old_state = xchg(&nc->state, NCSI_CHANNEL_INVISIBLE);
+	list_del_init(&nc->link);
+
 	spin_unlock_irqrestore(&ndp->lock, flags);
 
 	ndp->active_channel = nc;
-	ndp->active_package = nc ? nc->package : NULL;
-	if (!nc) {
-		if (ndp->flags & NCSI_DEV_RESHUFFLE) {
-			ndp->flags &= ~NCSI_DEV_RESHUFFLE;
-			return ncsi_choose_active_channel(ndp);
-		}
-
-		ncsi_report_link(ndp, false);
-		return -ENODEV;
-	}
+	ndp->active_package = nc->package;
 
 	switch (old_state) {
 	case NCSI_CHANNEL_INACTIVE:
@@ -1017,6 +1012,17 @@ int ncsi_process_next_channel(struct ncsi_dev_priv *ndp)
 	}
 
 	return 0;
+
+out:
+	ndp->active_channel = NULL;
+	ndp->active_package = NULL;
+	if (ndp->flags & NCSI_DEV_RESHUFFLE) {
+		ndp->flags &= ~NCSI_DEV_RESHUFFLE;
+		return ncsi_choose_active_channel(ndp);
+	}
+
+	ncsi_report_link(ndp, false);
+	return -ENODEV;
 }
 
 #if IS_ENABLED(CONFIG_IPV6)
-- 
2.9.0

[toc] | [next] | [standalone]


#1448270

FromGavin Shan <gwshan@linux.vnet.ibm.com>
Date2016-07-22 02:20 +0200
Message-ID<rXwm5-6uf-3@gated-at.bofh.it>
In reply to#1448087
On Thu, Jul 21, 2016 at 09:28:34PM +0200, Arnd Bergmann wrote:
>gcc-4.9 and higher warn about the newly added NSCI code:
>
>net/ncsi/ncsi-manage.c: In function 'ncsi_process_next_channel':
>net/ncsi/ncsi-manage.c:1003:2: error: 'old_state' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>
>The warning is a false positive and therefore harmless, but it would be good to
>avoid it anyway. I have determined that the barrier in the spin_unlock_irqsave()
>is what confuses gcc to the point that it cannot track whether the variable
>was unused or not.
>
>This rearranges the code in a way that makes it obvious to gcc that old_state
>is always initialized at the time of use, functionally this should not
>change anything.
>
>Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Acked-by: Gavin Shan <gwshan@linux.vnet.ibm.com>

[toc] | [prev] | [next] | [standalone]


#1449675

FromDavid Miller <davem@davemloft.net>
Date2016-07-25 19:40 +0200
Message-ID<rYS1c-7ph-19@gated-at.bofh.it>
In reply to#1448087
From: Arnd Bergmann <arnd@arndb.de>
Date: Thu, 21 Jul 2016 21:28:34 +0200

> gcc-4.9 and higher warn about the newly added NSCI code:
> 
> net/ncsi/ncsi-manage.c: In function 'ncsi_process_next_channel':
> net/ncsi/ncsi-manage.c:1003:2: error: 'old_state' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> 
> The warning is a false positive and therefore harmless, but it would be good to
> avoid it anyway. I have determined that the barrier in the spin_unlock_irqsave()
> is what confuses gcc to the point that it cannot track whether the variable
> was unused or not.
> 
> This rearranges the code in a way that makes it obvious to gcc that old_state
> is always initialized at the time of use, functionally this should not
> change anything.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Applied.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web