|
@@ -193,17 +193,6 @@ ww_mutex_set_context_fastpath(struct ww_mutex *lock,
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_MUTEX_SPIN_ON_OWNER
|
|
|
-/*
|
|
|
- * In order to avoid a stampede of mutex spinners from acquiring the mutex
|
|
|
- * more or less simultaneously, the spinners need to acquire a MCS lock
|
|
|
- * first before spinning on the owner field.
|
|
|
- *
|
|
|
- */
|
|
|
-
|
|
|
-/*
|
|
|
- * Mutex spinning code migrated from kernel/sched/core.c
|
|
|
- */
|
|
|
-
|
|
|
static inline bool owner_running(struct mutex *lock, struct task_struct *owner)
|
|
|
{
|
|
|
if (lock->owner != owner)
|
|
@@ -307,6 +296,11 @@ static bool mutex_optimistic_spin(struct mutex *lock,
|
|
|
if (!mutex_can_spin_on_owner(lock))
|
|
|
goto done;
|
|
|
|
|
|
+ /*
|
|
|
+ * In order to avoid a stampede of mutex spinners trying to
|
|
|
+ * acquire the mutex all at once, the spinners need to take a
|
|
|
+ * MCS (queued) lock first before spinning on the owner field.
|
|
|
+ */
|
|
|
if (!osq_lock(&lock->osq))
|
|
|
goto done;
|
|
|
|