PERFORCE change 100719 for review
John Baldwin
jhb at freebsd.org
Thu Jul 6 11:47:41 UTC 2006
On Thursday 06 July 2006 07:05, Roman Divacky wrote:
> http://perforce.freebsd.org/chv.cgi?CH=100719
>
> Change 100719 by rdivacky at rdivacky_witten on 2006/07/06 11:04:26
>
> TID handling
> o introduction of P_LINUX proc flag
> o introduction of linux hooks into exit1() and userret()
> o TID handling in i386 version of linuxolator
>
> this has not been tested much. More testing will come once the futexes are finished.
>
> Affected files ...
>
> .. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_dummy.c#5 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_machdep.c#7 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_proto.h#8 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_syscall.h#8 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_sysent.c#8 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_sysvec.c#5 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/syscalls.master#8 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/kern/kern_exit.c#3 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/kern/subr_trap.c#2 edit
> .. //depot/projects/soc2006/rdivacky_linuxolator/sys/proc.h#2 edit
>
> Differences ...
>
> ==== //depot/projects/soc2006/rdivacky_linuxolator/kern/kern_exit.c#3 (text+ko) ====
>
> @@ -87,6 +87,7 @@
>
> /* Hook for NFS teardown procedure. */
> void (*nlminfo_release_p)(struct proc *p);
> +int (*linux_proc_exit_p)(struct thread *) = NULL; /* necessary for linuxolator */
>
> /*
> * exit --
> @@ -236,6 +237,9 @@
> */
> EVENTHANDLER_INVOKE(process_exit, p);
>
> + /* we have to call linux exit hook */
> + if (p->p_flag & P_LINUX && linux_proc_exit_p != NULL)
> + (linux_proc_exit_p)(td);
> MALLOC(p->p_ru, struct rusage *, sizeof(struct rusage),
> M_ZOMBIE, M_WAITOK);
> /*
>
Please use a 'process_exit' eventhandler instead. You can test P_LINUX in
your handler and return right away for non-Linux procs.
> ==== //depot/projects/soc2006/rdivacky_linuxolator/kern/subr_trap.c#2 (text+ko) ====
>
> @@ -67,6 +67,8 @@
> #include <machine/cpu.h>
> #include <machine/pcb.h>
>
> +int (*linux_userret_p)(struct thread *) = NULL; /* for linuxolator */
> +
> /*
> * Define the code needed before returning to user mode, for
> * trap and syscall.
> @@ -128,6 +130,10 @@
> addupc_task(td, TRAPF_PC(frame), td->td_pticks * psratio);
> }
>
> + /* linux userret */
> + if (p->p_flag & P_LINUX && linux_userret_p != NULL)
> + (linux_userret_p)(td);
> +
> /*
> * Let the scheduler adjust our priority etc.
> */
>
If it is needed we can add a new 'thread_userret' eventhandler rather than
putting Linux-specific hooks into the code.
> ==== //depot/projects/soc2006/rdivacky_linuxolator/sys/proc.h#2 (text+ko) ====
>
> @@ -655,6 +655,7 @@
> #define P_HWPMC 0x800000 /* Process is using HWPMCs */
>
> #define P_JAILED 0x1000000 /* Process is in jail. */
> +#define P_LINUX 0x2000000 /* linux binary */
> #define P_INEXEC 0x4000000 /* Process is in execve(). */
> #define P_STATCHILD 0x8000000 /* Child process stopped or exited. */
If you do the two above, then you might be able to come up with another test
(compare p_sysvec?) instead of needing this flag since the only tests of it
would be in the emulator code itself.
--
John Baldwin
More information about the p4-projects
mailing list