Debugging xserver on Alpha

Matt Turner mattst88 at gmail.com
Tue Oct 6 17:28:01 PDT 2009


Hi Michael,

On Tue, Oct 6, 2009 at 9:16 PM, Michael Cree <mcree at orcon.net.nz> wrote:
> On 6/10/2009, at 12:28 PM, Michael Cree wrote:
>>
>> On 6/10/2009, at 11:16 AM, Matt Turner wrote:
>>>
>>> On Sat, Oct 3, 2009 at 7:05 PM, Michael Cree <mcree at orcon.net.nz>
>>> wrote:
>>>>
>>>> With commit c7680befe5ae on the xserver 1.7 branch only support for
>>>> Alphas
>>>> with sparse I/O remains.  I have already sent you and the list a
>>>> patch that
>>>> reenables the code path for Alphas with dense I/O mapping.
>>>
>>> I can't see anything in this commit that would break dense systems. It
>>> just removed Jensen support (which is a _third_ memory mapping model,
>>> i.e., not the same as sparse or dense). This commit was present in
>>> xserver-1.5, which I can confirm works on alpha, so I don't think it's
>>> got anything to do with the problems we've seen.
>
> I can't find commit c7680befe5ae on the xserver-1.5-branch or in its
> ancestral commits so I am a little confused as to why you say it is present
> in xserver-1.5.

Ahh! You're exactly right! Throught cgit.freedesktop.org I went to the
server-1.5 branch and changed the commit id to the one you specified
and it loaded... evidently this does _not_ mean it exists in the
specified branch...

> As part of the commit the functions xf86SlowBCopyFromBus() and
> xf86SlowBCopyToBus() are modified, e.g., part of the commit is:
>
>  xf86SlowBCopyFromBus(unsigned char *src, unsigned char *dst, int count)
>  {
> -    if (isJensen())
> -    {
> -       unsigned long addr;
> -       long result;
> -
> -       addr = (unsigned long) src;
> -       while( count ){
> -           result = *(volatile int *) addr;
> -           result >>= ((addr>>SPARSE) & 3) * 8;
> -           *dst++ = (unsigned char) (0xffUL & result);
> -           addr += 1<<SPARSE;
> -           count--;
> -           outb(0x80, 0x00);
> -       }
> +    unsigned long addr;
> +    long result;
> +
> +    addr = (unsigned long) src;
> +    while( count ){
> +       result = *(volatile int *) addr;
> +       result >>= ((addr>>SPARSE) & 3) * 8;
> +       *dst++ = (unsigned char) (0xffUL & result);
> +       addr += 1<<SPARSE;
> +       count--;
> +       outb(0x80, 0x00);
>     }
> -    else
> -       xf86SlowBcopy(src,dst,count);

Right here breaks it. Excellent catch.

>  }
>
> The above not only removed the Jensen support but also removes the dense
> path (the call to xf86SlowBcopy), thus leaving the sparse code (since SPARSE
> is defined as 7 which is correct for sparse memory mapping only).
>
> It is possible that the commit elsewhere protects against
> xf86SlowBCopyFromBus() being called at all on a dense memory mapped system -
> I didn't thoroughly check the rest of the commit - but even if so, somehow
>  xf86SlowBCopyFromBus() is being called on dense memory mapped systems on
> the xserver 1.6 branch and on the xserver 1.7 branch and it results in a
> segmentation violation since the pointer addr is incremented by a far too
> big a value.
>
>>  I should really test
>> the SIS card with 1.5 to completely verify and eliminate any
>> surprises.  I haven't compiled the 1.5 xserver for quite a while and I
>> think I have lost the list of proto/lib/etc versions that was required
>> for it.  Is there someway I can get all the proto and lib modules set
>> to the correct versions for xserver 1.5 branch build efficiently?
>
> OK, I have found that the xorg git supermodule has the versions of all
> modules necessary for the xserver 1.5 branch.  I will confirm within the
> next day or two that the SIS video card and the Radeon HD2400 card do indeed
> work on the xserver 1.5 branch.
>
> Cheers
> Michael.

I'm going to get my xserver repository working ASAP and get these
patches in it. I'll respond when I've got it set up.

Thanks!
Matt


More information about the xorg-devel mailing list