88 lines
2.6 KiB
Diff
88 lines
2.6 KiB
Diff
From 4cca2ab319b9cea1a31d8e8b579946da549928dd Mon Sep 17 00:00:00 2001
|
|
From: David Hildenbrand <dahi@linux.vnet.ibm.com>
|
|
Date: Mon, 11 May 2015 17:52:17 +0200
|
|
Subject: [PATCH 12/14] futex: clarify that preemption doesn't have to be
|
|
disabled
|
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.0/patches-4.0.8-rt6.tar.xz
|
|
|
|
As arm64 and arc have no special implementations for !CONFIG_SMP, mutual
|
|
exclusion doesn't seem to rely on preemption.
|
|
|
|
Let's make it clear in the comments that preemption doesn't have to be
|
|
disabled when accessing user space in the futex code, so we can remove
|
|
preempt_disable() from pagefault_disable().
|
|
|
|
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
|
|
---
|
|
arch/arc/include/asm/futex.h | 10 +++++-----
|
|
arch/arm64/include/asm/futex.h | 4 ++--
|
|
2 files changed, 7 insertions(+), 7 deletions(-)
|
|
|
|
--- a/arch/arc/include/asm/futex.h
|
|
+++ b/arch/arc/include/asm/futex.h
|
|
@@ -53,7 +53,7 @@ static inline int futex_atomic_op_inuser
|
|
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
|
return -EFAULT;
|
|
|
|
- pagefault_disable(); /* implies preempt_disable() */
|
|
+ pagefault_disable();
|
|
|
|
switch (op) {
|
|
case FUTEX_OP_SET:
|
|
@@ -75,7 +75,7 @@ static inline int futex_atomic_op_inuser
|
|
ret = -ENOSYS;
|
|
}
|
|
|
|
- pagefault_enable(); /* subsumes preempt_enable() */
|
|
+ pagefault_enable();
|
|
|
|
if (!ret) {
|
|
switch (cmp) {
|
|
@@ -104,7 +104,7 @@ static inline int futex_atomic_op_inuser
|
|
return ret;
|
|
}
|
|
|
|
-/* Compare-xchg with preemption disabled.
|
|
+/* Compare-xchg with pagefaults disabled.
|
|
* Notes:
|
|
* -Best-Effort: Exchg happens only if compare succeeds.
|
|
* If compare fails, returns; leaving retry/looping to upper layers
|
|
@@ -121,7 +121,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval,
|
|
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
|
return -EFAULT;
|
|
|
|
- pagefault_disable(); /* implies preempt_disable() */
|
|
+ pagefault_disable();
|
|
|
|
/* TBD : can use llock/scond */
|
|
__asm__ __volatile__(
|
|
@@ -142,7 +142,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval,
|
|
: "r"(oldval), "r"(newval), "r"(uaddr), "ir"(-EFAULT)
|
|
: "cc", "memory");
|
|
|
|
- pagefault_enable(); /* subsumes preempt_enable() */
|
|
+ pagefault_enable();
|
|
|
|
*uval = val;
|
|
return val;
|
|
--- a/arch/arm64/include/asm/futex.h
|
|
+++ b/arch/arm64/include/asm/futex.h
|
|
@@ -58,7 +58,7 @@ futex_atomic_op_inuser (int encoded_op,
|
|
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))
|
|
return -EFAULT;
|
|
|
|
- pagefault_disable(); /* implies preempt_disable() */
|
|
+ pagefault_disable();
|
|
|
|
switch (op) {
|
|
case FUTEX_OP_SET:
|
|
@@ -85,7 +85,7 @@ futex_atomic_op_inuser (int encoded_op,
|
|
ret = -ENOSYS;
|
|
}
|
|
|
|
- pagefault_enable(); /* subsumes preempt_enable() */
|
|
+ pagefault_enable();
|
|
|
|
if (!ret) {
|
|
switch (cmp) {
|