Videospeicher (shared memory) kann nicht reserviert werden.
Bjoern Seifert
bjoern.seifert at gmail.com
Don Aug 31 20:22:45 BST 2006
Hallo Liste!
Fehlerbeschreibung:
Laptop mit VIA K8M800 (lspci und Xorg.0.log siehe unten) stürzt beim
Starten von GL-Spielen ab, so z.B.
gltron (bei "Start Game" -> Absturz)
ppracer (Pinguin steht an Startlinie -> Absturz)
Der Absturz für dazu, das das Notebook weder auf Strg-Alt-Entf,
Strg-Alt-Backspace, Strg-Alt-F1 oder auf ein Antippen des Powerknopfes
reagiert, nur wenn man ihn ca 4sek drückt, schaltet der Rechner ab.
DRI und Openchrome-Treiber sind aus dem aktuellen cvs kompiliert [siehe 1].
$ glxinfo
direct rendering: Yes
$ glxgears -printfps
2942 frames in 5.0 seconds = 588.216 FPS
Das klappt also schonmal!
Vermutete Fehlerursache:
Nach lesen von [2] wegen des Hinweises bei [3] hab ich nach dem
Videospeicher geschaut und dort Ungereimtheiten gefunden.
Der Grafikchip verwendet von den 512MB RAM die ich insgesamt habe, je
nach Bios-Einstellung 32MB oder 64MB shared memory. Dieser wird auch
dem verfügbaren Hauptspeicher korrekt abgezogen, aber dort wo Linux
den Videospeicher dann annimmt, kann er nicht sein! So komme ich auf
diese Idee:
Bei eingestellten 64 MB shared memory im BIOS:
$ free -m
total used free shared buffers cached
Mem: 440 319 121 0 36 153
-/+ buffers/cache: 130 310
Swap: 1294 0 1294
512-64=448, 8MB fehlen irgendwo. Eher nebensächlich denke ich.
$ sudo lspci -vv
0000:01:00.0 VGA compatible controller: VIA Technologies, Inc. S3
Unichrome Pro VGA Adapter (rev 01) (prog-if 00 [VGA])
Subsystem: Mitac: Unknown device 8889
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium
>TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 128 (500ns min)
Interrupt: pin A routed to IRQ 217
Region 0: Memory at a4000000 (32-bit, prefetchable) [size=64M]
Region 1: Memory at e1000000 (32-bit, non-prefetchable) [size=16M]
Expansion ROM at a0000000 [disabled] [size=64K]
Capabilities: [60] Power Management version 2
Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [70] AGP version 3.0
Status: RQ=256 Iso- ArqSz=0 Cal=7 SBA+ ITACoh- GART64-
HTrans- 64bit- FW- AGP3+ Rate=x4,x8
Command: RQ=32 ArqSz=0 Cal=0 SBA+ AGP+ GART64- 64bit-
FW- Rate=x8
$ dmesg | grep reserve
[17179609.748000] PCI: Unable to reserve mem region
#1:4000000 at a4000000 for device 0000:01:00.0
Bei eingestellten 32 MB shared memory im BIOS:
$ free -m
total used free shared buffers cached
Mem: 472 316 155 0 34 152
-/+ buffers/cache: 129 342
Swap: 1294 0 1294
Wieder fehlen 8MB, sonst passt die Änderung.
0000:01:00.0 VGA compatible controller: VIA Technologies, Inc. S3
Unichrome Pro VGA Adapter (rev 01) (prog-if 00 [VGA])
Subsystem: Mitac: Unknown device 8889
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium
>TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 128 (500ns min)
Interrupt: pin A routed to IRQ 217
Region 0: Memory at a4000000 (32-bit, prefetchable) [size=64M]
Region 1: Memory at e1000000 (32-bit, non-prefetchable) [size=16M]
Expansion ROM at a0000000 [disabled] [size=64K]
Capabilities: [60] Power Management version 2
Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [70] AGP version 3.0
Status: RQ=256 Iso- ArqSz=0 Cal=7 SBA+ ITACoh- GART64-
HTrans- 64bit- FW- AGP3+ Rate=x4,x8
Command: RQ=32 ArqSz=0 Cal=0 SBA+ AGP+ GART64- 64bit-
FW- Rate=x8
$ dmesg | grep reserve
[17179610.296000] PCI: Unable to reserve mem region
#1:4000000 at a4000000 for device 0000:01:00.0
Der verfügbare Total-Speicher wird also korrekt verkleinert (laut
free), aber lspci denkt beides Mal, die Karte würde 64MB Speicher
haben und beidesmal ist der Ort dieses Speichers offentsichtlich
falsch, weswegen (laut dmesg) die Region nicht reserved werden kann.
Deshalb falsch, weil 0xa4000000 in dezimal bei 2624MB liegt!! (ich hab
nur 512MB gesamt)
Was mit den 16MB bei 0xe1000000 ist, das läge bei 3600MB, weiß ich
nicht - in dmesg taucht dieser Bereich nicht auf.
In der Xorg.0.log [4] ist die Größe des Videospeichers korrekt (Zeile 366).
Also, kann mir jemand sagen, woher lspci die falschen Infos über den
Speicherbereich erhält oder wie man den Fehler beheben könnte?
Liegt es an dem "Subsystem: Mitac: Unknown device 8889" (laut lspci)?
Laut Xorg.0.log [4] scheint die Erkennung sonst okay.
Liebe Grüße!
Björn Seifert
[1] http://wiki.openchrome.org/tikiwiki/tiki-index.php?page=Compiling+the+source+code
[2] http://averatecforums.com/showthread.php?t=2014
[3] http://www.ubuntuforums.org/showthread.php?p=1072596#post1072596
[4] http://www.ubuntuusers.de/paste/3291/ (Xorg.0.log bei eingestellten 32MB)