[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