System lockups in X with nVidia GeForce 7600 GS (G73) and Gtk+

Polytropon freebsd at edvax.de
Sun Aug 14 01:22:09 UTC 2011


I'm using FreeBSD/amd64 on an Intel Core 2 4300 (1.8GHz)
on a VIA-equipped mainboard. The whole machine is a quite
cheap one from a discounter (mainly food).

OS is 8.2-STABLE (July 2011). I have xorg-7.5.1 installed 
with xorg-server-1.7.7_1,1, using xf86-video-nv-2.1.18
configured in xorg.conf. The GPU I'm using is a nVidia
GeForce 7600 (G73) which is being supported by the "nv"
driver (as well as by "nouveau", see later on) according
to the documentation.

When in X and _only_ in conjunction with programs using
the Gtk2 (Gtk+) toolkit, I encounter _total_ system
lockups (freezes): no disk activity, no console I/O,
nothing. It even happens during drawing operations.
A hard reset is required, which means power-cycling
as the cheap PC doesn't have a RESET button. A fsck
is required on next booting.

I could trigger this problem with Sylpheed, Claws
Mail and Firefox.

I am only able to do email because I downgraded
Sylpheed from 3.1.1_1 to 1.0.6_9 which does use
the classic Gtk (which I find more accessible
anyway). This old version that _works_ is about
to be removed from the ports tree!!!

The machine has successfully been compiling the system,
X and OpenOffice, so I may assume that it's not
defective RAM or broken CPU. The hard disk is new.

When the system does not lock up, frame rates for
3D (tested with "glxgears" and xlock -mode fire")
is _very_ bad - much worse than on my old P4 with
ATI graphics.

I read that the "nv" driver does not support 3D, so
I tried to install the "nouveau" driver.

I did install xf86-video-nouveau-0.0.10.20090728_3
from ports and replaced "nv" by "nouveau" in xorg.conf.
Result:

(EE) [drm] drmOpen failed.
(EE) NOUVEAU(0): [drm] error opening the drm
Segmentation fault: 11 at address 0x0
Fatal server error:
Caught signal 11 (Segmentation fault: 11). Server aborting

There is no /dev/dri available.

/usr/ports/x11-drivers/xf86-video-nouveau/pkg-message:
    # cd /usr/src/sys
    # fetch http://people.freebsd.org/~rnoland/drm-nouveau-062309.patch
    # patch -sp0 -i drm-nouveau-062309.patch
    # cd modules/drm
    # make depend all install

I've done this, installed & rebooted, same result.

% startx
drmOpenDevice: node name is /dev/dri/card0
Failed to change owner or group for file
	/dev/dri! 2: No such file or directory
Failed to change owner or group for file
	/dev/dri/card0! 2: No such file or directory
[drm] failed to load kernel module "nouveau"

(EE) [drm] drmOpen failed.
(EE) NOUVEAU(0): [drm] error opening the drm
Segmentation fault: 11 at address 0x0
Fatal server error:
Caught signal 11 (Segmentation fault: 11). Server aborting

The kernel loggs the following messages:

link_elf_obj: symbol DRM_MEM_TTM undefined
linker_load_file: Unsupported file type

I tried some searching and found "We can haz Nouveau
on FreeBSD!" of March 2009. According to this instruction:

http://romain.blogreen.org/blog/2009/03/we-can-haz-nouveau-on-freebsd/

It complains about xorg-server must be >= 1.8, but
only 1.7.7 is in latest ports (right now). This is
step 4 on the list. Note that it's "./autogen.sh",
not "./autogen" as in the article.

The steps explained are:

1. Uninstall any nvidia driver
# pkg_delete nvidia-driver-\*
# vi /boot/loader.conf # Remove the line 'nvidia_load="YES"'

2. Patch your kernel (Update your system if you are not running 8.0-CURRENT or a recent 7.1-STABLE / 7.2-PRERELEASE):
# cd /usr/src/sys
# fetch http://people.freebsd.org/~rnoland/drm-nouveau-032109.patch
# mkdir modules/drm/nouveau
# patch > drm-nouveau-032109.patch
# cd /usr/src && make kernel
# reboot

3. Install libdrm from git:
% git clone git://anongit.freedesktop.org/git/mesa/drm
% cd drm
% ./autogen --enable-nouveau-experimental-api
% gmake
% sudo gmake install

4. Install xf86-video-nouveau from git:
% git clone git://anongit.freedesktop.org/git/nouveau/xf86-video-nouveau
% cd xf86-video-nouveau
% ./autogen
% gmake
% sudo gmake install

5. Update /usr/local/etc/X11/xorg.conf.

As I said, I have problems doing so because of

nouveau_dri2.c:374: warning: implicit declaration of function 'DRI2BlockClient'
nouveau_dri2.c: In function 'nouveau_dri2_init':
nouveau_dri2.c:445: error: 'DRI2InfoRec' has no member named 'ScheduleSwap'
nouveau_dri2.c:446: error: 'DRI2InfoRec' has no member named 'ScheduleWaitMSC'
nouveau_dri2.c:447: error: 'DRI2InfoRec' has no member named 'GetMSC'
gmake[2]: *** [nouveau_dri2.lo] Error 1
gmake[2]: Leaving directory `/usr/src/sys/drm/xf86-video-nouveau/src'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/usr/src/sys/drm/xf86-video-nouveau'
gmake: *** [all] Error 2

and so on.



So my questions are:

Has anyone got the "nouveau" driver working, and if,
how precisely has he done so?

Is there an explaination of the lockups (always only
in relation to Gtk+ triggering it)? Does it indicate
a defective driver or a defective hardware? What do
you think?

I have _never_ encountered such kind of problems yet,
so I'm almost out of ideas. Sadly I can't check with
my (wonderfully working) ATI card because this one
is AGP, but the mainboard only has PCIe.

Any ideas and instructions, as well as diagnosis-guessing
is very welcome. :-)



-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...



More information about the freebsd-questions mailing list