mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-11 09:43:54 -04:00
Merge branch 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull locking changes from Ingo Molnar: "Four miscellanous standalone fixes for futexes, rtmutexes and Kconfig.locks." * 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: futex: Use freezable blocking call futex: Take hugepages into account when generating futex_key rtmutex: Document rt_mutex_adjust_prio_chain() locking: Fix copy/paste errors of "ARCH_INLINE_*_UNLOCK_BH"
This commit is contained in:
@@ -138,7 +138,7 @@ config INLINE_SPIN_UNLOCK_BH
|
||||
|
||||
config INLINE_SPIN_UNLOCK_IRQ
|
||||
def_bool y
|
||||
depends on !PREEMPT || ARCH_INLINE_SPIN_UNLOCK_BH
|
||||
depends on !PREEMPT || ARCH_INLINE_SPIN_UNLOCK_IRQ
|
||||
|
||||
config INLINE_SPIN_UNLOCK_IRQRESTORE
|
||||
def_bool y
|
||||
@@ -175,7 +175,7 @@ config INLINE_READ_UNLOCK_BH
|
||||
|
||||
config INLINE_READ_UNLOCK_IRQ
|
||||
def_bool y
|
||||
depends on !PREEMPT || ARCH_INLINE_READ_UNLOCK_BH
|
||||
depends on !PREEMPT || ARCH_INLINE_READ_UNLOCK_IRQ
|
||||
|
||||
config INLINE_READ_UNLOCK_IRQRESTORE
|
||||
def_bool y
|
||||
@@ -212,7 +212,7 @@ config INLINE_WRITE_UNLOCK_BH
|
||||
|
||||
config INLINE_WRITE_UNLOCK_IRQ
|
||||
def_bool y
|
||||
depends on !PREEMPT || ARCH_INLINE_WRITE_UNLOCK_BH
|
||||
depends on !PREEMPT || ARCH_INLINE_WRITE_UNLOCK_IRQ
|
||||
|
||||
config INLINE_WRITE_UNLOCK_IRQRESTORE
|
||||
def_bool y
|
||||
|
||||
@@ -61,6 +61,8 @@
|
||||
#include <linux/nsproxy.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/sched/rt.h>
|
||||
#include <linux/hugetlb.h>
|
||||
#include <linux/freezer.h>
|
||||
|
||||
#include <asm/futex.h>
|
||||
|
||||
@@ -365,7 +367,7 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
|
||||
} else {
|
||||
key->both.offset |= FUT_OFF_INODE; /* inode-based key */
|
||||
key->shared.inode = page_head->mapping->host;
|
||||
key->shared.pgoff = page_head->index;
|
||||
key->shared.pgoff = basepage_index(page);
|
||||
}
|
||||
|
||||
get_futex_key_refs(key);
|
||||
@@ -1807,7 +1809,7 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
|
||||
* is no timeout, or if it has yet to expire.
|
||||
*/
|
||||
if (!timeout || timeout->task)
|
||||
schedule();
|
||||
freezable_schedule();
|
||||
}
|
||||
__set_current_state(TASK_RUNNING);
|
||||
}
|
||||
|
||||
@@ -145,6 +145,19 @@ int max_lock_depth = 1024;
|
||||
/*
|
||||
* Adjust the priority chain. Also used for deadlock detection.
|
||||
* Decreases task's usage by one - may thus free the task.
|
||||
*
|
||||
* @task: the task owning the mutex (owner) for which a chain walk is probably
|
||||
* needed
|
||||
* @deadlock_detect: do we have to carry out deadlock detection?
|
||||
* @orig_lock: the mutex (can be NULL if we are walking the chain to recheck
|
||||
* things for a task that has just got its priority adjusted, and
|
||||
* is waiting on a mutex)
|
||||
* @orig_waiter: rt_mutex_waiter struct for the task that has just donated
|
||||
* its priority to the mutex owner (can be NULL in the case
|
||||
* depicted above or if the top waiter is gone away and we are
|
||||
* actually deboosting the owner)
|
||||
* @top_task: the current top waiter
|
||||
*
|
||||
* Returns 0 or -EDEADLK.
|
||||
*/
|
||||
static int rt_mutex_adjust_prio_chain(struct task_struct *task,
|
||||
|
||||
Reference in New Issue
Block a user