New nvidia drivers available

Doug Rabson dfr at nlsystems.com
Sun Aug 15 02:24:02 PDT 2004


On Sunday 15 August 2004 09:39, Stefan Ehmann wrote:
> On Sun, 2004-08-15 at 02:56, Johan Pettersson wrote:
> > On Sat, 14 Aug 2004 19:34:24 +0100
> >
> > Doug Rabson <dfr at nlsystems.com> wrote:
> > > The latest 6113 build of the nvidia graphics drivers has just
> > > appeared
> > >
> > > on nvidia's web site. Check out
> > > http://www.nvidia.com/object/freebsd_1.0-6113.html if you are
> > > currently using the nvidia proprietary drivers. This driver works
> > > nicely on FreeBSD-current and while this version is not
> > > thread-safe, it does not conflict with libpthread or libthr's use
> > > of %gs so you don't have to map everything down to libc_r any
> > > more :-).
> > >
> > > There will be a thread-safe driver available for FreeBSD-current
> > > sometime after I commit the pthread parts of the TLS support
> > > code.
> >
> > Im running the new driver on a recent -CURRENT and xorg 6.7.0. When
> > starting zsnes I get this:
> >
> > beard ~> zsnes
> > Fatal error 'Exceeded maximum lock level' at line 261 in file
> > /usr/src/lib/libpthread/thread/thr_cancel.c (errno = 0) Bus error
> > (core dumped)
> > beard ~>
>
> Same error message here when starting neverball. If I map
> libpthread->libc_r it's working again.
>
> xawtv also stopped working. Fortunately setting -xvport manually did
> fix that.

This might be because libGL calls libpthread's version of open() before 
libpthread has initialised properly. This patch might fix it - it fixes 
neverball's map compiler for me but I haven't actually run neverball 
itself.

Index: thr_kern.c
===================================================================
RCS file: /home/ncvs/src/lib/libpthread/thread/thr_kern.c,v
retrieving revision 1.109
diff -u -r1.109 thr_kern.c
--- thr_kern.c	7 Aug 2004 15:15:38 -0000	1.109
+++ thr_kern.c	8 Aug 2004 09:57:55 -0000
@@ -2382,7 +2382,7 @@
 	if ((thread == NULL) &&
 	    ((thread = malloc(sizeof(struct pthread))) != NULL)) {
 		bzero(thread, sizeof(struct pthread));
-		if ((thread->tcb = _tcb_ctor(thread)) == NULL) {
+		if ((thread->tcb = _tcb_ctor(thread, curthread == NULL)) == NULL) {
 			free(thread);
 			thread = NULL;
 		} else {
Index: thr_open.c
===================================================================
RCS file: /home/ncvs/src/lib/libpthread/thread/thr_open.c,v
retrieving revision 1.16
diff -u -r1.16 thr_open.c
--- thr_open.c	9 Dec 2003 02:20:56 -0000	1.16
+++ thr_open.c	15 Aug 2004 09:19:42 -0000
@@ -45,11 +45,15 @@
 int
 __open(const char *path, int flags,...)
 {
-	struct pthread *curthread = _get_curthread();
+	struct pthread *curthread;
 	int	ret;
 	int	mode = 0;
 	va_list	ap;
 
+	if (_thr_initial == NULL)
+		_libpthread_init(NULL);
+
+	curthread = _get_curthread();
 	_thr_cancel_enter(curthread);
 	
 	/* Check if the file is being created: */



More information about the freebsd-current mailing list