git: 1866eef48435 - main - linux(4): Refactor the struct linux_futex_args.
Dmitry Chagin
dchagin at FreeBSD.org
Tue Jul 20 11:40:54 UTC 2021
The branch main has been updated by dchagin:
URL: https://cgit.FreeBSD.org/src/commit/?id=1866eef48435eda506db32c88ed52605a4cb941a
commit 1866eef48435eda506db32c88ed52605a4cb941a
Author: Dmitry Chagin <dchagin at FreeBSD.org>
AuthorDate: 2021-07-20 11:37:37 +0000
Commit: Dmitry Chagin <dchagin at FreeBSD.org>
CommitDate: 2021-07-20 11:37:37 +0000
linux(4): Refactor the struct linux_futex_args.
Move flags and rtclock to the struct linux_futex_args. This will be used when
I split linux_futex() into separate futex op functions.
MFC after: 2 weeks
---
sys/compat/linux/linux_futex.c | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/sys/compat/linux/linux_futex.c b/sys/compat/linux/linux_futex.c
index d1fd7725650d..d89b9fd89f3b 100644
--- a/sys/compat/linux/linux_futex.c
+++ b/sys/compat/linux/linux_futex.c
@@ -228,6 +228,8 @@ static int fetch_robust_entry(struct linux_robust_list **,
struct linux_futex_args {
uint32_t *uaddr;
int32_t op;
+ uint32_t flags;
+ bool clockrt;
uint32_t val;
struct timespec *ts;
uint32_t *uaddr2;
@@ -641,19 +643,19 @@ futex_atomic_op(struct thread *td, int encoded_op, uint32_t *uaddr)
static int
linux_futex(struct thread *td, struct linux_futex_args *args)
{
- int clockrt, nrwake, nrrequeue, op_ret, ret;
+ int nrwake, nrrequeue, op_ret, ret;
struct linux_pemuldata *pem;
struct waiting_proc *wp;
struct futex *f, *f2;
struct timespec kts;
int error, save;
- uint32_t flags, val;
+ uint32_t val;
if (args->op & LINUX_FUTEX_PRIVATE_FLAG) {
- flags = 0;
+ args->flags = 0;
args->op &= ~LINUX_FUTEX_PRIVATE_FLAG;
} else
- flags = FUTEX_SHARED;
+ args->flags = FUTEX_SHARED;
/*
* Currently support for switching between CLOCK_MONOTONIC and
@@ -661,9 +663,9 @@ linux_futex(struct thread *td, struct linux_futex_args *args)
* FUTEX_CLOCK_REALTIME with any op except FUTEX_WAIT_BITSET and
* FUTEX_WAIT_REQUEUE_PI.
*/
- clockrt = args->op & LINUX_FUTEX_CLOCK_REALTIME;
+ args->clockrt = args->op & LINUX_FUTEX_CLOCK_REALTIME;
args->op = args->op & ~LINUX_FUTEX_CLOCK_REALTIME;
- if (clockrt && args->op != LINUX_FUTEX_WAIT_BITSET &&
+ if (args->clockrt && args->op != LINUX_FUTEX_WAIT_BITSET &&
args->op != LINUX_FUTEX_WAIT_REQUEUE_PI) {
LIN_SDT_PROBE0(futex, linux_futex,
unimplemented_clockswitch);
@@ -685,7 +687,7 @@ linux_futex(struct thread *td, struct linux_futex_args *args)
args->uaddr, args->val, args->val3);
if (args->ts != NULL) {
- if (clockrt) {
+ if (args->clockrt) {
nanotime(&kts);
timespecsub(args->ts, &kts, args->ts);
} else if (args->op == LINUX_FUTEX_WAIT_BITSET) {
@@ -696,7 +698,7 @@ linux_futex(struct thread *td, struct linux_futex_args *args)
retry0:
error = futex_get(args->uaddr, &wp, &f,
- flags | FUTEX_CREATE_WP);
+ args->flags | FUTEX_CREATE_WP);
if (error)
return (error);
@@ -737,7 +739,7 @@ retry0:
args->uaddr, args->val, args->val3);
error = futex_get(args->uaddr, NULL, &f,
- flags | FUTEX_DONTCREATE);
+ args->flags | FUTEX_DONTCREATE);
if (error)
return (error);
@@ -778,7 +780,8 @@ retry0:
return (EINVAL);
retry1:
- error = futex_get(args->uaddr, NULL, &f, flags | FUTEX_DONTLOCK);
+ error = futex_get(args->uaddr, NULL, &f,
+ args->flags | FUTEX_DONTLOCK);
if (error)
return (error);
@@ -790,7 +793,7 @@ retry1:
* returned by FUTEX_CMP_REQUEUE.
*/
error = futex_get(args->uaddr2, NULL, &f2,
- flags | FUTEX_DONTEXISTS | FUTEX_DONTLOCK);
+ args->flags | FUTEX_DONTEXISTS | FUTEX_DONTLOCK);
if (error) {
futex_put(f, NULL);
return (error);
@@ -837,11 +840,13 @@ retry1:
return (EINVAL);
retry2:
- error = futex_get(args->uaddr, NULL, &f, flags | FUTEX_DONTLOCK);
+ error = futex_get(args->uaddr, NULL, &f,
+ args->flags | FUTEX_DONTLOCK);
if (error)
return (error);
- error = futex_get(args->uaddr2, NULL, &f2, flags | FUTEX_DONTLOCK);
+ error = futex_get(args->uaddr2, NULL, &f2,
+ args->flags | FUTEX_DONTLOCK);
if (error) {
futex_put(f, NULL);
return (error);
More information about the dev-commits-src-all
mailing list