1:N threading

Jake Burkholder jake at locore.ca
Thu Apr 3 18:22:18 PST 2003


Apparently, On Thu, Apr 03, 2003 at 03:35:41PM -0800,
	Peter Wemm said words to the effect of;

> Daniel Eischen wrote:
> 
> > The patches are available:
> > 
> >   http://people.freebsd.org/~deischen/libpthread.diffs
> > 
> > FYI, since this is a new mailing list, the above changes
> > are meant to give libpthread M:N capability.
> > 
> > I don't need testers; I have enough bugs that I know about
> > to fix.
> 
> +	__asm__("movl %%gs, %0" : "=r" (id));
> +	id >>= 3;
> +	if (id - NLDT < 0)
> 
> There is a problem here, NLDT is kernel private and changes depending on
> things like whether SMP is enabled or what the maximum number of cpus
> is.
> 
> You're trying to find if its a local or global selector, right?
> What you really want is bit 2 which tells you which it is.
> 
> #define ISLDT(s)        ((s)&SEL_LDT)   /* is it local or global */
> #define SEL_LDT 4               /* local descriptor table */

NLDT seems to be invariant, but we should have a sysctl or something to
get the first LDT entry that is unused by the kernel.  Libthr uses it
in order to know which entry to start at.

Jake


More information about the freebsd-threads mailing list