Re: [PATCH] Improve LinuxThreads compatibility in rfork()

From: Kostik Belousov <kostikbel_at_gmail.com>
Date: Mon, 11 Jul 2011 21:02:46 +0300
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.

Received on Mon Jul 11 2011 - 16:03:10 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:15 UTC