All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Kleine-Budde <mkl@pengutronix.de>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, linux-can@vger.kernel.org,
	kernel@pengutronix.de, Marc Kleine-Budde <mkl@pengutronix.de>
Subject: [PATCH 08/11] can: af_can: do not access proto_tab directly use rcu_access_pointer instead
Date: Thu, 19 Oct 2017 13:19:42 +0200	[thread overview]
Message-ID: <20171019111945.13580-9-mkl@pengutronix.de> (raw)
In-Reply-To: <20171019111945.13580-1-mkl@pengutronix.de>

"proto_tab" is a RCU protected array, when directly accessing the array,
sparse throws these warnings:

  CHECK   /srv/work/frogger/socketcan/linux/net/can/af_can.c
net/can/af_can.c:115:14: error: incompatible types in comparison expression (different address spaces)
net/can/af_can.c:795:17: error: incompatible types in comparison expression (different address spaces)
net/can/af_can.c:816:9: error: incompatible types in comparison expression (different address spaces)

This patch fixes the problem by using rcu_access_pointer() and
annotating "proto_tab" array as __rcu.

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
 net/can/af_can.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/can/af_can.c b/net/can/af_can.c
index 88edac0f3e36..eb1ad74b40f4 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -78,7 +78,7 @@ MODULE_PARM_DESC(stats_timer, "enable timer for statistics (default:on)");
 static struct kmem_cache *rcv_cache __read_mostly;
 
 /* table of registered CAN protocols */
-static const struct can_proto *proto_tab[CAN_NPROTO] __read_mostly;
+static const struct can_proto __rcu *proto_tab[CAN_NPROTO] __read_mostly;
 static DEFINE_MUTEX(proto_tab_lock);
 
 static atomic_t skbcounter = ATOMIC_INIT(0);
@@ -788,7 +788,7 @@ int can_proto_register(const struct can_proto *cp)
 
 	mutex_lock(&proto_tab_lock);
 
-	if (proto_tab[proto]) {
+	if (rcu_access_pointer(proto_tab[proto])) {
 		pr_err("can: protocol %d already registered\n", proto);
 		err = -EBUSY;
 	} else
@@ -812,7 +812,7 @@ void can_proto_unregister(const struct can_proto *cp)
 	int proto = cp->protocol;
 
 	mutex_lock(&proto_tab_lock);
-	BUG_ON(proto_tab[proto] != cp);
+	BUG_ON(rcu_access_pointer(proto_tab[proto]) != cp);
 	RCU_INIT_POINTER(proto_tab[proto], NULL);
 	mutex_unlock(&proto_tab_lock);
 
-- 
2.14.2

  parent reply	other threads:[~2017-10-19 11:19 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-19 11:19 pull-request: can 2017-10-19 Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 01/11] can: flexcan: fix state transition regression Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 02/11] can: flexcan: rename legacy error state quirk Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 03/11] can: flexcan: implement error passive " Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 04/11] can: flexcan: fix i.MX6 state transition issue Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 05/11] can: flexcan: fix i.MX28 " Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 06/11] can: flexcan: fix p1010 " Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 07/11] can: bcm: check for null sk before deferencing it via the call to sock_net Marc Kleine-Budde
2017-10-19 11:19 ` Marc Kleine-Budde [this message]
2017-10-19 11:19 ` [PATCH 09/11] can: af_can: can_pernet_init(): add missing error handling for kzalloc returning NULL Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 10/11] can: esd_usb2: Fix can_dlc value for received RTR, frames Marc Kleine-Budde
2017-10-19 11:19 ` [PATCH 11/11] can: gs_usb: fix busy loop if no more TX context is available Marc Kleine-Budde
2017-10-21  1:30 ` pull-request: can 2017-10-19 David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171019111945.13580-9-mkl@pengutronix.de \
    --to=mkl@pengutronix.de \
    --cc=davem@davemloft.net \
    --cc=kernel@pengutronix.de \
    --cc=linux-can@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.