mbox series

[net-next,0/7] rcu: prevent RCU_LOCKDEP_WARN() from swallowing the condition

Message ID 20200916184528.498184-1-kuba@kernel.org
Headers show
Series rcu: prevent RCU_LOCKDEP_WARN() from swallowing the condition | expand

Message

Jakub Kicinski Sept. 16, 2020, 6:45 p.m. UTC
Hi!

So I unfolded the RFC patch into smaller chunks and fixed an issue
in SRCU pointed out by build bot. Build bot has been quiet for
a day but I'm not 100% sure it's scanning my tree, so let's
give these patches some ML exposure.

The motivation here is that we run into a unused variable
warning in networking code because RCU_LOCKDEP_WARN() makes
its argument disappear with !LOCKDEP / !PROVE_RCU. We marked
the variable as __maybe_unused, but that's ugly IMHO.

This set makes the relevant function declarations visible to
the compiler and uses (0 && (condition)) to make the compiler
remove those calls before linker realizes they are never defined.

I'm tentatively marking these for net-next, but if anyone (Paul?)
wants to take them into their tree - even better.

Jakub Kicinski (7):
  sched: un-hide lockdep_tasklist_lock_is_held() for !LOCKDEP
  rcu: un-hide lockdep maps for !LOCKDEP
  net: un-hide lockdep_sock_is_held() for !LOCKDEP
  net: sched: remove broken definitions and un-hide for !LOCKDEP
  srcu: use a more appropriate lockdep helper
  lockdep: provide dummy forward declaration of *_is_held() helpers
  rcu: prevent RCU_LOCKDEP_WARN() from swallowing the condition

 include/linux/lockdep.h        |  6 ++++++
 include/linux/rcupdate.h       | 11 ++++++-----
 include/linux/rcupdate_trace.h |  4 ++--
 include/linux/sched/task.h     |  2 --
 include/net/sch_generic.h      | 12 ------------
 include/net/sock.h             |  2 --
 kernel/rcu/srcutree.c          |  2 +-
 7 files changed, 15 insertions(+), 24 deletions(-)

Comments

Paul E. McKenney Sept. 16, 2020, 11:15 p.m. UTC | #1
On Wed, Sep 16, 2020 at 11:45:21AM -0700, Jakub Kicinski wrote:
> Hi!
> 
> So I unfolded the RFC patch into smaller chunks and fixed an issue
> in SRCU pointed out by build bot. Build bot has been quiet for
> a day but I'm not 100% sure it's scanning my tree, so let's
> give these patches some ML exposure.
> 
> The motivation here is that we run into a unused variable
> warning in networking code because RCU_LOCKDEP_WARN() makes
> its argument disappear with !LOCKDEP / !PROVE_RCU. We marked
> the variable as __maybe_unused, but that's ugly IMHO.
> 
> This set makes the relevant function declarations visible to
> the compiler and uses (0 && (condition)) to make the compiler
> remove those calls before linker realizes they are never defined.
> 
> I'm tentatively marking these for net-next, but if anyone (Paul?)
> wants to take them into their tree - even better.

I have pulled these into -rcu for review and further testing, thank you!
I of course could not resist editing the commit logs, so please check
to make sure that I did not mess anything up.  Just so you know, unless
this is urgent, it is in my v5.11 pile, that is, for the merge window
after next.

If someone else wants to take them, please feel free to add my
Acked-by to the RCU pieces.

							Thanx, Paul

> Jakub Kicinski (7):
>   sched: un-hide lockdep_tasklist_lock_is_held() for !LOCKDEP
>   rcu: un-hide lockdep maps for !LOCKDEP
>   net: un-hide lockdep_sock_is_held() for !LOCKDEP
>   net: sched: remove broken definitions and un-hide for !LOCKDEP
>   srcu: use a more appropriate lockdep helper
>   lockdep: provide dummy forward declaration of *_is_held() helpers
>   rcu: prevent RCU_LOCKDEP_WARN() from swallowing the condition
> 
>  include/linux/lockdep.h        |  6 ++++++
>  include/linux/rcupdate.h       | 11 ++++++-----
>  include/linux/rcupdate_trace.h |  4 ++--
>  include/linux/sched/task.h     |  2 --
>  include/net/sch_generic.h      | 12 ------------
>  include/net/sock.h             |  2 --
>  kernel/rcu/srcutree.c          |  2 +-
>  7 files changed, 15 insertions(+), 24 deletions(-)
> 
> -- 
> 2.26.2
>
Jakub Kicinski Sept. 17, 2020, 12:48 a.m. UTC | #2
On Wed, 16 Sep 2020 16:15:05 -0700 Paul E. McKenney wrote:
> On Wed, Sep 16, 2020 at 11:45:21AM -0700, Jakub Kicinski wrote:
> > Hi!
> > 
> > So I unfolded the RFC patch into smaller chunks and fixed an issue
> > in SRCU pointed out by build bot. Build bot has been quiet for
> > a day but I'm not 100% sure it's scanning my tree, so let's
> > give these patches some ML exposure.
> > 
> > The motivation here is that we run into a unused variable
> > warning in networking code because RCU_LOCKDEP_WARN() makes
> > its argument disappear with !LOCKDEP / !PROVE_RCU. We marked
> > the variable as __maybe_unused, but that's ugly IMHO.
> > 
> > This set makes the relevant function declarations visible to
> > the compiler and uses (0 && (condition)) to make the compiler
> > remove those calls before linker realizes they are never defined.
> > 
> > I'm tentatively marking these for net-next, but if anyone (Paul?)
> > wants to take them into their tree - even better.  
> 
> I have pulled these into -rcu for review and further testing, thank you!
> I of course could not resist editing the commit logs, so please check
> to make sure that I did not mess anything up.

Done & thank you!

> Just so you know, unless this is urgent, it is in my v5.11 pile, that
> is, for the merge window after next.
> 
> If someone else wants to take them, please feel free to add my
> Acked-by to the RCU pieces.

Sounds good to me, the RCU tree seems most appropriate and we added 
a workaround for the issue in net-next already, anyway.

Thanks!