[PATCH] Improve LinuxThreads compatibility in rfork()
Kostik Belousov
kostikbel at gmail.com
Mon Jul 11 18:03:10 UTC 2011
On Mon, Jul 11, 2011 at 08:05:56PM +0200, Petr Salinger wrote:
> >>Should the bit slice be 7 or 8 bits ?
>
> >I propose to go 8 bits, and add the check to be future-proof.
>
> >It seems that we already parse GNU/kFreeBSD brandnote. I think this
> >could be used to distinguish between old behaviour, that is currently
> >used by your libc, and proposed new interface, if __FreeBSD_version
> >is bumped and honored by glibc. You might need to store the brandinfo
> >somewhere in struct proc or use the separate struct sysentvec.
>
> No, the version in brandnote is compile-time minimal supported version,
> we will detect at runtime (by "sysctl kern.osreldate") which interface we
> should use.
>
>
> So far defined rfork() options:
>
> /*
> * XXX currently, some operations without RFPROC set are not supported.
> */
>
> #define RFNAMEG (1<<0) /* UNIMPL new plan9 `name space' */
> #define RFENVG (1<<1) /* UNIMPL copy plan9 `env space' */
> #define RFFDG (1<<2) /* copy fd table */
> #define RFNOTEG (1<<3) /* UNIMPL create new plan9 `note
> group' */
> #define RFPROC (1<<4) /* change child (else changes
> curproc) */
> #define RFMEM (1<<5) /* share `address space' */
> #define RFNOWAIT (1<<6) /* give child to init */
> #define RFCNAMEG (1<<10) /* UNIMPL zero plan9 `name space' */
> #define RFCENVG (1<<11) /* UNIMPL zero plan9 `env space' */
> #define RFCFDG (1<<12) /* close all fds, zero fd table */
> #define RFTHREAD (1<<13) /* enable kernel thread support */
> #define RFSIGSHARE (1<<14) /* share signal handlers */
> #define RFLINUXTHPN (1<<16) /* do linux clone exit parent
> notification */
> #define RFSTOPPED (1<<17) /* leave child in a stopped state */
> #define RFHIGHPID (1<<18) /* use a pid higher than 10
> (idleproc) */
> #define RFPPWAIT (1<<31) /* parent sleeps until child exits
> (vfork) */
> #define RFKERNELONLY (RFSTOPPED | RFHIGHPID | RFPPWAIT)
>
>
> The new interface will add:
>
> #define RFTSIGZMB (1<<19)
> #define RFTSIGSHIFT 20 /* reserve bits 20-27 */
> #define RFTSIGMASK 0xFF
> #define RFTSIGNUM(flags) (((flags) >> RFTSIGSHIFT) & RFTSIGMASK)
> #define RFTSIGFLAGS(signum) ((signum) << RFTSIGSHIFT)
>
> Seems this interface be acceptable ?
Looks good to me.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20110711/395bcf83/attachment.pgp
More information about the freebsd-hackers
mailing list