X Segmentation fault with i810

Adam Jackson ajax at nwnk.net
Tue Jan 3 10:17:20 PST 2012


On 1/3/12 1:00 PM, Adam Jackson wrote:
> On 1/3/12 12:49 PM, Chris Wilson wrote:
>> On Tue, 03 Jan 2012 12:02:43 -0500, Adam Jackson<ajax at redhat.com> wrote:
>>> On 12/30/11 12:34 AM, Jeff Chua wrote:
>>>
>>>> How can I go about to help debug this?
>>>
>>> The i810 driver probably needs the equivalent fix as:
>>>
>>> http://cgit.freedesktop.org/xorg/driver/xf86-video-cirrus/commit/?id=f422d0c38b0befdb2152215ab05d0d14f3da3ed9
>>>
>>
>> The i810 driver uses vgaHWSetMmioFuncs() rather than SetStdFuncs, and so
>> leaves hwp->io uninitialised. That pointer is then dereferenced by
>> DACDelay() (as it uses pci_io_read8 irrespective of mmio/std funcs)
>> during
>> the vgaHWSaveColormap(). At which point, I'm far beyond my comfort
>> zone...
>> -Chris
>>
>
> Oof, okay, nice find. DACDelay needs to not do that, or at least, not
> unconditionally. I'll look into it.

Something like this?

---
diff --git a/hw/xfree86/vgahw/vgaHW.h b/hw/xfree86/vgahw/vgaHW.h
index e943aa3..9fa8183 100644
--- a/hw/xfree86/vgahw/vgaHW.h
+++ b/hw/xfree86/vgahw/vgaHW.h
@@ -170,10 +170,10 @@ typedef struct _vgaHWRec {
  #define BITS_PER_GUN 6
  #define COLORMAP_SIZE 256

-#define DACDelay(hw)                                                    \
-       do {                                                             \
-           pci_io_read8((hw)->io, (hw)->IOBase + VGA_IN_STAT_1_OFFSET); \
-           pci_io_read8((hw)->io, (hw)->IOBase + VGA_IN_STAT_1_OFFSET); \
+#define DACDelay(hw)                   \
+       do {                            \
+           (hw)->readST01((hw));       \
+           (hw)->readST01((hw));       \
         } while (0)

  /* Function Prototypes */
---

- ajax



More information about the xorg mailing list