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