Date: Tue, 14 Jun 2005 02:09:00 GMT From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 78507 for review Message-ID: <200506140209.j5E290NF043078@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=78507 Change 78507 by peter@peter_melody on 2005/06/14 02:08:32 Clean up pthread segment goop. Affected files ... .. //depot/projects/hammer/lib/libpthread/arch/i386/i386/pthread_md.c#7 edit .. //depot/projects/hammer/lib/libpthread/arch/i386/include/pthread_md.h#14 edit Differences ... ==== //depot/projects/hammer/lib/libpthread/arch/i386/i386/pthread_md.c#7 (text+ko) ==== @@ -30,7 +30,6 @@ #include <sys/types.h> #include <machine/cpufunc.h> -#include <machine/segments.h> #include <machine/sysarch.h> #include <unistd.h> @@ -88,36 +87,6 @@ bzero(kcb, sizeof(struct kcb)); kcb->kcb_self = kcb; kcb->kcb_kse = kse; - switch (_thr_using_setbase) { - case 1: /* use i386_set_gsbase() in _kcb_set */ - kcb->kcb_ldt = -1; - break; - case 0: /* Untested, try the get/set_gsbase routines once */ - error = i386_get_gsbase(&base); - if (error == 0) { - _thr_using_setbase = 1; - break; - } - /* fall through */ - case 2: /* Use the user_ldt code, we must have an old kernel */ - _thr_using_setbase = 2; - ldt.sd.sd_hibase = (unsigned int)kcb >> 24; - ldt.sd.sd_lobase = (unsigned int)kcb & 0xFFFFFF; - ldt.sd.sd_hilimit = (sizeof(struct kcb) >> 16) & 0xF; - ldt.sd.sd_lolimit = sizeof(struct kcb) & 0xFFFF; - ldt.sd.sd_type = SDT_MEMRWA; - ldt.sd.sd_dpl = SEL_UPL; - ldt.sd.sd_p = 1; - ldt.sd.sd_xx = 0; - ldt.sd.sd_def32 = 1; - ldt.sd.sd_gran = 0; /* no more than 1M */ - kcb->kcb_ldt = i386_set_ldt(LDT_AUTO_ALLOC, &ldt, 1); - if (kcb->kcb_ldt < 0) { - free(kcb); - return (NULL); - } - break; - } } return (kcb); } @@ -125,9 +94,5 @@ void _kcb_dtor(struct kcb *kcb) { - if (kcb->kcb_ldt >= 0) { - i386_set_ldt(kcb->kcb_ldt, NULL, 1); - kcb->kcb_ldt = -1; /* just in case */ - } free(kcb); } ==== //depot/projects/hammer/lib/libpthread/arch/i386/include/pthread_md.h#14 (text+ko) ==== @@ -60,7 +60,6 @@ struct kcb { struct tcb *kcb_curtcb; struct kcb *kcb_self; /* self reference */ - int kcb_ldt; struct kse *kcb_kse; struct kse_mailbox kcb_kmbx; }; @@ -154,15 +153,7 @@ static __inline void _kcb_set(struct kcb *kcb) { - int val; - - if (_thr_using_setbase == 1) { - i386_set_gsbase(kcb); - } else { - val = (kcb->kcb_ldt << 3) | 7; - __asm __volatile("movl %0, %%gs" : : "r" (val)); - } - + i386_set_gsbase(kcb); } /* Get the current kcb. */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200506140209.j5E290NF043078>