Rename used_requeue and use it as bitwise field to store more flags.
Reimplement used_requeue logic with LINUX_XDEPR_REQUEUEOP flag.
This commit is contained in:
parent
de7bef34ba
commit
c26a933750
@ -87,7 +87,7 @@ linux_proc_init(struct thread *td, pid_t child, int flags)
|
|||||||
em = malloc(sizeof *em, M_LINUX, M_WAITOK | M_ZERO);
|
em = malloc(sizeof *em, M_LINUX, M_WAITOK | M_ZERO);
|
||||||
em->pid = child;
|
em->pid = child;
|
||||||
em->pdeath_signal = 0;
|
em->pdeath_signal = 0;
|
||||||
em->used_requeue = 0;
|
em->flags = 0;
|
||||||
em->robust_futexes = NULL;
|
em->robust_futexes = NULL;
|
||||||
if (flags & LINUX_CLONE_THREAD) {
|
if (flags & LINUX_CLONE_THREAD) {
|
||||||
/* handled later in the code */
|
/* handled later in the code */
|
||||||
|
@ -55,7 +55,7 @@ struct linux_emuldata {
|
|||||||
struct linux_emuldata_shared *shared;
|
struct linux_emuldata_shared *shared;
|
||||||
|
|
||||||
int pdeath_signal; /* parent death signal */
|
int pdeath_signal; /* parent death signal */
|
||||||
int used_requeue; /* uses deprecated futex op */
|
int flags; /* different emuldata flags */
|
||||||
|
|
||||||
struct linux_robust_list_head *robust_futexes;
|
struct linux_robust_list_head *robust_futexes;
|
||||||
|
|
||||||
@ -76,6 +76,10 @@ struct linux_emuldata *em_find(struct proc *, int locked);
|
|||||||
#define EMUL_DOLOCK 1
|
#define EMUL_DOLOCK 1
|
||||||
#define EMUL_DONTLOCK 0
|
#define EMUL_DONTLOCK 0
|
||||||
|
|
||||||
|
/* emuldata flags */
|
||||||
|
#define LINUX_XDEPR_REQUEUEOP 0x00000001 /* uses deprecated
|
||||||
|
futex REQUEUE op*/
|
||||||
|
|
||||||
int linux_proc_init(struct thread *, pid_t, int);
|
int linux_proc_init(struct thread *, pid_t, int);
|
||||||
void linux_proc_exit(void *, struct proc *);
|
void linux_proc_exit(void *, struct proc *);
|
||||||
void linux_schedtail(void *, struct proc *);
|
void linux_schedtail(void *, struct proc *);
|
||||||
|
@ -678,11 +678,11 @@ linux_sys_futex(struct thread *td, struct linux_sys_futex_args *args)
|
|||||||
* FUTEX_REQUEUE returned EINVAL.
|
* FUTEX_REQUEUE returned EINVAL.
|
||||||
*/
|
*/
|
||||||
em = em_find(td->td_proc, EMUL_DONTLOCK);
|
em = em_find(td->td_proc, EMUL_DONTLOCK);
|
||||||
if (em->used_requeue == 0) {
|
if ((em->flags & LINUX_XDEPR_REQUEUEOP) == 0) {
|
||||||
linux_msg(td,
|
linux_msg(td,
|
||||||
"linux_sys_futex: "
|
"linux_sys_futex: "
|
||||||
"unsupported futex_requeue op\n");
|
"unsupported futex_requeue op\n");
|
||||||
em->used_requeue = 1;
|
em->flags |= LINUX_XDEPR_REQUEUEOP;
|
||||||
}
|
}
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user