Commit 7cb1b466 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'locking_urgent_for_v6.13_rc3' of git://git.kernel.org/pub/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
parents e4c995f9 b4d83c83
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -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
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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
@@ -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);