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:
dchagin 2011-02-12 20:58:59 +00:00
parent de7bef34ba
commit c26a933750
3 changed files with 8 additions and 4 deletions

View File

@ -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 */

View File

@ -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 *);

View File

@ -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);