kern/133144: linuxulator 2.6 crashes with nvidias libGL.so.1

Alexander Best alexbestms at math.uni-muenster.de
Fri Mar 27 17:00:14 PDT 2009


>Number:         133144
>Category:       kern
>Synopsis:       linuxulator 2.6 crashes with nvidias libGL.so.1
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Mar 28 00:00:12 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Alexander Best
>Release:        8.0-CURRENT
>Organization:
>Environment:
FreeBSD moshnroll 8.0-CURRENT FreeBSD 8.0-CURRENT #24 r190416M: Wed Mar 25 18:12:28 UTC 2009     root at moshnroll:/usr/obj/usr/src/sys/ARUNDEL  i38
>Description:
with compat.linux.osrelease=2.6.16 and linux_base-f8 almost every 3d linux application crashes when using the closed source nvidia driver. when switching to graphics/linux_dri thus replacing the nvidia linux version of libGL.so.1 the error disappears.

it seems the linuxulator 2.6 is missing a vital syscall (or doesn't fully support it) which is required by the nvidia version of libGL.so.1.

switching to compat.linux.osrelease=2.4.2 and replacing linux_base-f8 with linux_base-fc4 resolves the problem.

here are 2 excerpts from a linux_kdump:

dump from unreal tournament 2004 demo:

---
  1180 ut2004-bin RET   close 0
  1180 ut2004-bin CALL  linux_brk(0xae5c000)
  1180 ut2004-bin RET   linux_brk 182829056/0xae5c000
  1180 ut2004-bin CALL  linux_getpid
  1180 ut2004-bin RET   linux_getpid 1180/0x49c
  1180 ut2004-bin CALL  linux_getpid
  1180 ut2004-bin RET   linux_getpid 1180/0x49c
  1180 ut2004-bin CALL  linux_getpid
  1180 ut2004-bin RET   linux_getpid 1180/0x49c
  1180 ut2004-bin CALL
  linux_sys_futex(0x2b406e30,0x81,0x7fffffff,0,0x49c,0x7)
  1180 ut2004-bin RET   linux_sys_futex 1
  1180 ut2004-bin PSIG  SIGSEGV caught handler=0x874bd50 mask=0x0 code=0x0
  1180 ut2004-bin CALL  linux_fstat64(0x1,0xbfbfa9e8,0x28fe8ff4)
  1180 ut2004-bin UNKNOWN(8)    1180 ut2004-bin RET   linux_fstat64 0
  1180 ut2004-bin CALL  linux_mmap2(0,0x1000,0x3,0x22,0xffffffff,0)
  1180 ut2004-bin RET   linux_mmap2 688971776/0x2910e000
  1180 ut2004-bin CALL  write(0x1,0x2910e000,0x25)
  1180 ut2004-bin GIO   fd 1 wrote 37 bytes
       "Signal: SIGSEGV [segmentation fault]
       "
  1180 ut2004-bin RET   write 37/0x25
  1180 ut2004-bin CALL  write(0x1,0x2910e000,0xa)
  1180 ut2004-bin GIO   fd 1 wrote 10 bytes
       "Aborting.
       "
  1180 ut2004-bin RET   write 10/0xa
  1180 ut2004-bin CALL  write(0x1,0x2910e000,0x1)
  1180 ut2004-bin GIO   fd 1 wrote 1 byte
       "
       "
  1180 ut2004-bin RET   write 1
  1180 ut2004-bin CALL  write(0x1,0x2910e000,0x1)
  1180 ut2004-bin GIO   fd 1 wrote 1 byte
       "
       "
  1180 ut2004-bin RET   write 1
  1180 ut2004-bin CALL  write(0x1,0x2910e000,0x31)
  1180 ut2004-bin GIO   fd 1 wrote 49 bytes
       "Crash information will be saved to your logfile.
       "
  1180 ut2004-bin RET   write 49/0x31
  1180 ut2004-bin CALL
  linux_sys_futex(0x28feba34,0x81,0x7fffffff,0,0xbfbfab14,0xbfbfaaec)
  1180 ut2004-bin RET   linux_sys_futex 1
  1180 ut2004-bin CALL
  linux_sys_futex(0x28e8eb48,0x81,0x7fffffff,0,0xbfbfaa30,0xbfbfa93c)
  1180 ut2004-bin RET   linux_sys_futex 1
  1180 ut2004-bin CALL  write(0x4,0x937c3c8,0xc)
---

dump from quake 4 demo:

---
  1285 quake4.x86 RET   close 0
  1285 quake4.x86 CALL  linux_getpid
  1285 quake4.x86 RET   linux_getpid 1285/0x505
  1285 quake4.x86 CALL  linux_getpid
  1285 quake4.x86 RET   linux_getpid 1285/0x505
  1285 quake4.x86 CALL  linux_getpid
  1285 quake4.x86 RET   linux_getpid 1285/0x505
  1285 quake4.x86 CALL
  linux_sys_futex(0x2dbece30,0x81,0x7fffffff,0,0x505,0x7)
  1285 quake4.x86 RET   linux_sys_futex 1
  1285 quake4.x86 PSIG  SIGSEGV caught handler=0x8254b10 mask=0x0 code=0x0
  1285 quake4.x86 CALL
  linux_sys_futex(0x286cd620,0x81,0x7fffffff,0,0x505,0xbfbfc51c)
  1285 quake4.x86 RET   linux_sys_futex 1
  1285 quake4.x86 CALL  write(0x1,0x283dd000,0x22)
  1285 quake4.x86 GIO   fd 1 wrote 34 bytes
       "signal caught: Segmentation fault
       "
  1285 quake4.x86 RET   write 34/0x22
  1285 quake4.x86 CALL  write(0x1,0x283dd000,0xa)
  1285 quake4.x86 GIO   fd 1 wrote 10 bytes
       "si_code 1
       "
  1285 quake4.x86 RET   write 10/0xa
  1285 quake4.x86 CALL  write(0x1,0x283dd000,0x1c)
  1285 quake4.x86 GIO   fd 1 wrote 28 bytes
       "Trying to exit gracefully..
       "
  1285 quake4.x86 RET   write 28/0x1c
  1285 quake4.x86 CALL  write(0x1,0x283dd000,0x2e)
  1285 quake4.x86 GIO   fd 1 wrote 46 bytes
       "--------------- BSE Shutdown ----------------
       "
  1285 quake4.x86 RET   write 46/0x2e
  1285 quake4.x86 CALL  write(0x1,0x283dd000,0x2e)
  1285 quake4.x86 GIO   fd 1 wrote 46 bytes
       "---------------------------------------------
       "
  1285 quake4.x86 RET   write 46/0x2e
  1285 quake4.x86 CALL  write(0x1,0x283dd000,0x35)
  1285 quake4.x86 GIO   fd 1 wrote 53 bytes
       "WARNING: rvServerScanGUI::Clear() - invalid scanGUI

       "
  1285 quake4.x86 RET   write 53/0x35
  1285 quake4.x86 CALL  munmap(0x2d0ee000,0x101000)
  1285 quake4.x86 RET   munmap 0
  1285 quake4.x86 CALL  munmap(0x2d1ef000,0x101000)
---

for a discussion concerning this problem please take a look at the following thread:

http://lists.freebsd.org/pipermail/freebsd-current/2009-March/004563.html

i'm not sure the linux_kdump excerpts document the actual problem. if a complete dump is required (~40MB) or a different excerpt please drop me a note.

i've also applied the futex patch. yet that didn't solve the issue. here's a linux_kdump from the quake 4 demo after appliying the patch:

---
1837 quake4.x86 CALL  linux_sys_futex(0x2dbece30,0x81,0x7fffffff,0,0x72d,0x7)
  1837 quake4.x86 RET   linux_sys_futex 0
  1837 quake4.x86 PSIG  SIGSEGV caught handler=0x8254b10 mask=0x0 code=0x0
  1837 quake4.x86 CALL
  linux_sys_futex(0x286ce620,0x81,0x7fffffff,0,0x72d,0xbfbfc4fc)
  1837 quake4.x86 RET   linux_sys_futex 0
  1837 quake4.x86 CALL  write(0x1,0x283dd000,0x22)
  1837 quake4.x86 GIO   fd 1 wrote 34 bytes
       "signal caught: Segmentation fault
       "
  1837 quake4.x86 RET   write 34/0x22
  1837 quake4.x86 CALL  write(0x1,0x283dd000,0xa)
  1837 quake4.x86 GIO   fd 1 wrote 10 bytes
       "si_code 1
       "
  1837 quake4.x86 RET   write 10/0xa
  1837 quake4.x86 CALL  write(0x1,0x283dd000,0x1c)
  1837 quake4.x86 GIO   fd 1 wrote 28 bytes
       "Trying to exit gracefully..
       "
---

cheers.
>How-To-Repeat:

>Fix:


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list