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->pid = child;
em->pdeath_signal = 0;
em->used_requeue = 0;
em->flags = 0;
em->robust_futexes = NULL;
if (flags & LINUX_CLONE_THREAD) {
/* handled later in the code */

View File

@ -55,7 +55,7 @@ struct linux_emuldata {
struct linux_emuldata_shared *shared;
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;
@ -76,6 +76,10 @@ struct linux_emuldata *em_find(struct proc *, int locked);
#define EMUL_DOLOCK 1
#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);
void linux_proc_exit(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.
*/
em = em_find(td->td_proc, EMUL_DONTLOCK);
if (em->used_requeue == 0) {
if ((em->flags & LINUX_XDEPR_REQUEUEOP) == 0) {
linux_msg(td,
"linux_sys_futex: "
"unsupported futex_requeue op\n");
em->used_requeue = 1;
em->flags |= LINUX_XDEPR_REQUEUEOP;
}
return (EINVAL);