Re: [net-next:master 257/266] drivers/net/team/team_mode_loadbalance.c:99:30: sparse: incompatible types in comparison expression (different address spaces)
From: Eric Dumazet <hidden>
Date: 2012-06-20 13:11:57
On Wed, 2012-06-20 at 05:49 -0700, Paul E. McKenney wrote:
On Wed, Jun 20, 2012 at 02:50:55PM +0800, Fengguang Wu wrote:quoted
[CC Paul, the RCU maintainer] On Wed, Jun 20, 2012 at 08:36:07AM +0200, Jiri Pirko wrote:quoted
Wed, Jun 20, 2012 at 06:27:43AM CEST, wfg@linux.intel.com wrote:quoted
Hi Jiri, There are new sparse warnings show up in tree: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git master head: 677a3d60fb3153f786a0d28fcf0287670e7bd3c2 commit: ab8250d70063f77929fc404c02390a1f64d66416 [257/266] team: lb: introduce infrastructure for userspace driven tx loadbalancing All sparse warnings: drivers/net/team/team_mode_loadbalance.c:99:30: sparse: incompatible types in comparison expression (different address spaces) drivers/net/team/team_mode_loadbalance.c:99: 96 struct lb_port_mapping *pm; 97 98 pm = &lb_priv->ex->tx_hash_to_port_mapping[i]; > 99 if (pm->port == port) {This looks like your checker does not like (struct team_port __rcu *) == (struct team_port *) But I wonder why (or how should I fix that)Because you said that it was an RCU-protected pointer, but then did not use an RCU primitive to access it. In this case, where you are just using the value but not dereferencing it, you can use rcu_access_pointer().
Yes, and please Jiri change the rcu_assign_pointer(pm->port, NULL); by RCU_INIT_POINTER(pm->port, NULL);