(Kernel < 2.6.9 RC2) + (Xorg >= 6.8) + i830 + DRI = Kernel Oops !

หลังอัปเกรดเป็น Xorg 6.8/6.8.1 พบว่า FPS ของ glxgears ลดลงไปเกือบครึ่ง ทีแรกเข้าใจว่าเป็นเพราะ Xorg มันช้าเอง .. แต่พอมาเห็น syslog ถึงได้รู้ว่าไดรเวอร์ DRM ของ i830 ในเคอร์เนลมันมีปัญหา เวลาจะโหลดทำงานจะเกิด Oops! .. พอ i830 DRM มันโหลดไม่ได้ Direct Rendering เลยไม่ทำงาน ..

อาการก็จะประมาณนี้

Sep 19 12:05:51 peorth kernel: [drm:i830_dma_initialize] *ERROR* can not find dma buffer map!
Sep 19 12:05:51 peorth kernel: [drm:i830_irq_emit] *ERROR* i830_irq_emit called without lock held
Sep 19 12:05:51 peorth kernel: mtrr: 0x98000000,0x8000000 overlaps existing 0x98000000,0x200000
Sep 19 12:05:51 peorth kernel: Unable to handle kernel paging request at virtual address f000e2d3
Sep 19 12:05:51 peorth kernel:  printing eip:
Sep 19 12:05:51 peorth kernel: b023b091
Sep 19 12:05:51 peorth kernel: *pde = 00000000
Sep 19 12:05:51 peorth kernel: Oops: 0000 [#1]
Sep 19 12:05:51 peorth kernel: Modules linked in: ipv6 ohci1394 ieee1394 usbhid yenta_socket uhci_hcd usbcore snd_intel8x0 snd_ac97_codec snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore orinoco_cs ds pcmcia_core orinoco hermes e100 sg scsi_mod
Sep 19 12:05:51 peorth kernel: CPU:    0
Sep 19 12:05:51 peorth kernel: EIP:    0060:[]    Not tainted
Sep 19 12:05:51 peorth kernel: EFLAGS: 00013296   (2.6.8.1-ck6)
Sep 19 12:05:51 peorth kernel: EIP is at i830_kernel_lost_context+0x11/0x70
Sep 19 12:05:51 peorth kernel: eax: f000e2c3   ebx: 00000000   ecx: 00000010   edx: bf15cc10
Sep 19 12:05:51 peorth kernel: esi: b03f76a0   edi: bedbe000   ebp: b03f7820   esp: bedbeed0
Sep 19 12:05:51 peorth kernel: ds: 007b   es: 007b   ss: 0068
Sep 19 12:05:51 peorth kernel: Process X (pid: 1027, threadinfo=bedbe000 task=bf15cc10)
Sep 19 12:05:51 peorth kernel: Stack: 00000000 b023d207 b03f76a0 affff718 00003286 00000000 b03f76a0 b02372e3
Sep 19 12:05:51 peorth kernel:        b03f76a0 b03f7d0c b03f7d14 b014d8c0 bedbef14 08806bf0 00000000 00000001
Sep 19 12:05:51 peorth kernel:        0000000a 00000000 bf15cc10 b01163f0 00000000 00000000 beeb7d80 bf2d01e8
Sep 19 12:05:51 peorth kernel: Call Trace:
Sep 19 12:05:51 peorth kernel:  [] i830_dma_quiescent+0x17/0xb0
Sep 19 12:05:51 peorth kernel:  [] i830_lock+0x203/0x2b0
Sep 19 12:05:51 peorth cups-config-daemon: cups-config-daemon startup succeeded
Sep 19 12:05:51 peorth kernel:  [] do_sync_read+0x80/0xb0
Sep 19 12:05:51 peorth kernel:  [] default_wake_function+0x0/0x20
Sep 19 12:05:51 peorth kernel:  [] default_wake_function+0x0/0x20
Sep 19 12:05:51 peorth kernel:  [] i830_ioctl+0xe4/0x160
Sep 19 12:05:51 peorth kernel:  [] sys_ioctl+0xc9/0x240
Sep 19 12:05:51 peorth kernel:  [] sysenter_past_esp+0x52/0x71
Sep 19 12:05:51 peorth kernel: Code: 8b 40 10 8b 90 34 20 00 00 81 e2 fc ff 1f 0
0 89 51 14 8b 43

และถ้าดูด้วย glxinfo หรือ xdriinfo โปรแกรมก็จะรายงานว่า direct rendering มันไม่ทำงาน

ทางแก้ เท่าที่หาเจอเวลานี้ มีสองทาง

ติดตั้งเคอร์เนล >= 2.6.9 RC2 ซึ่งรวมไดรเวอร์ตัวใหม่เข้าไปแล้ว ไดรเวอร์ใหม่นี้ชื่อ i915 รองรับกราฟิกชิปของอินเทล ตระกูล 830 845G 852GM 855GM 865G 915G เป็นไดรเวอร์ที่ใช้กับ Xorg >= 6.8 และ XFree86 > 4.4 .. ส่วน Xorg < 6.8 และ XFree86