Skip site navigation (1)Skip section navigation (2)
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>