Skip to content

Commit

Permalink
Merge tag 'locking_urgent_for_v6.13_rc3' of git://git.kernel.org/pub/…
Browse files Browse the repository at this point in the history
…scm/linux/kernel/git/tip/tip

Pull locking fixes from Borislav Petkov:

 - Remove if_not_guard() as it is generating incorrect code

 - Fix the initialization of the fake lockdep_map for the first locked
   ww_mutex

* tag 'locking_urgent_for_v6.13_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  headers/cleanup.h: Remove the if_not_guard() facility
  locking/ww_mutex: Fix ww_mutex dummy lockdep map selftest warnings
  • Loading branch information
Linus Torvalds committed Dec 9, 2024
2 parents e4c995f + b4d83c8 commit 7cb1b46
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 18 deletions.
14 changes: 0 additions & 14 deletions include/linux/cleanup.h
Original file line number Diff line number Diff line change
Expand Up @@ -273,12 +273,6 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
* an anonymous instance of the (guard) class, not recommended for
* conditional locks.
*
* if_not_guard(name, args...) { <error handling> }:
* convenience macro for conditional guards that calls the statement that
* follows only if the lock was not acquired (typically an error return).
*
* Only for conditional locks.
*
* scoped_guard (name, args...) { }:
* similar to CLASS(name, scope)(args), except the variable (with the
* explicit name 'scope') is declard in a for-loop such that its scope is
Expand Down Expand Up @@ -350,14 +344,6 @@ _label: \
#define scoped_cond_guard(_name, _fail, args...) \
__scoped_cond_guard(_name, _fail, __UNIQUE_ID(label), args)

#define __if_not_guard(_name, _id, args...) \
BUILD_BUG_ON(!__is_cond_ptr(_name)); \
CLASS(_name, _id)(args); \
if (!__guard_ptr(_name)(&_id))

#define if_not_guard(_name, args...) \
__if_not_guard(_name, __UNIQUE_ID(guard), args)

/*
* Additional helper macros for generating lock guards with types, either for
* locks that don't have a native type (eg. RCU, preempt) or those that need a
Expand Down
4 changes: 2 additions & 2 deletions include/linux/ww_mutex.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,8 @@ static inline void ww_acquire_init(struct ww_acquire_ctx *ctx,
debug_check_no_locks_freed((void *)ctx, sizeof(*ctx));
lockdep_init_map(&ctx->dep_map, ww_class->acquire_name,
&ww_class->acquire_key, 0);
lockdep_init_map(&ctx->first_lock_dep_map, ww_class->mutex_name,
&ww_class->mutex_key, 0);
lockdep_init_map_wait(&ctx->first_lock_dep_map, ww_class->mutex_name,
&ww_class->mutex_key, 0, LD_WAIT_SLEEP);
mutex_acquire(&ctx->dep_map, 0, 0, _RET_IP_);
mutex_acquire_nest(&ctx->first_lock_dep_map, 0, 0, &ctx->dep_map, _RET_IP_);
#endif
Expand Down
4 changes: 2 additions & 2 deletions lib/locking-selftest.c
Original file line number Diff line number Diff line change
Expand Up @@ -1720,8 +1720,6 @@ static void ww_test_normal(void)
{
int ret;

WWAI(&t);

/*
* None of the ww_mutex codepaths should be taken in the 'normal'
* mutex calls. The easiest way to verify this is by using the
Expand Down Expand Up @@ -1770,6 +1768,8 @@ static void ww_test_normal(void)
ww_mutex_base_unlock(&o.base);
WARN_ON(o.ctx != (void *)~0UL);

WWAI(&t);

/* nest_lock */
o.ctx = (void *)~0UL;
ww_mutex_base_lock_nest_lock(&o.base, &t);
Expand Down

0 comments on commit 7cb1b46

Please sign in to comment.