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

From: Petr Salinger <Petr.Salinger_at_seznam.cz>
Date: Mon, 11 Jul 2011 20:05:56 +0200 (CEST)
>> 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 ?

Petr
Received on Mon Jul 11 2011 - 15:57:12 UTC

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