Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Jul 2011 20:05:56 +0200 (CEST)
From:      Petr Salinger <Petr.Salinger@seznam.cz>
To:        Kostik Belousov <kostikbel@gmail.com>
Cc:        freebsd-hackers@freebsd.org, Robert Millan <rmh@debian.org>, current@freebsd.org
Subject:   Re: [PATCH] Improve LinuxThreads compatibility in rfork()
Message-ID:  <alpine.LRH.2.02.1107111944550.7134@sci.felk.cvut.cz>
In-Reply-To: <20110711172408.GX43872@deviant.kiev.zoral.com.ua>
References:  <20110711123332.GS43872@deviant.kiev.zoral.com.ua> <alpine.LRH.2.02.1107111455230.7134@sci.felk.cvut.cz> <20110711133342.GT43872@deviant.kiev.zoral.com.ua> <alpine.LRH.2.02.1107111556000.7134@sci.felk.cvut.cz> <20110711142232.GU43872@deviant.kiev.zoral.com.ua> <alpine.LRH.2.02.1107111641340.7134@sci.felk.cvut.cz> <20110711150614.GV43872@deviant.kiev.zoral.com.ua> <alpine.LRH.2.02.1107111718440.7134@sci.felk.cvut.cz> <20110711154102.GW43872@deviant.kiev.zoral.com.ua> <alpine.LRH.2.02.1107111805350.7134@sci.felk.cvut.cz> <20110711172408.GX43872@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
>> 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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.LRH.2.02.1107111944550.7134>