X Segmentation fault with i810

Jeff Chua jeff.chua.linux at gmail.com
Wed Jan 4 07:03:08 PST 2012


On Wed, Jan 4, 2012 at 2:17 AM, Adam Jackson <ajax at nwnk.net> wrote:
> 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 */

Will try it tomorrow when I get to the office.

Thanks,
Jeff.



More information about the xorg mailing list