Michael Cardenas writes:
 > Unfortunately, I edited i810_memory.c and changed
 > 
 > if (xf86AgpGARTSupported() && !pI810->directRenderingEnabled
 >        && pI810->GttBound) {
 > 
 > to
 > 
 > if (xf86AgpGARTSupported() && pI810->GttBound) {
 > 
 > and it still produces the same error when I launch a second X server. 
 > 
 > (WW) xf86AcquireGART: AGPIOC_ACQUIRE failed (Device or resource busy)
 > (EE) GARTInit: AGPIOC_INFO failed (Invalid argument)
 > (EE) I810(0): AGP GART support is not available.  Make sure your kernel has
 >         agpgart support or that the agpgart kernel module is loaded.
 > 
 > Any suggestions on how to proceed?
 > 

This is not so easy to fix. 

Only when used *without* DRI I810UnbindGARTMemory() 
unbinds the GART memory. In this case unbinding
works well, starting a second server is no problem.

With DRI unbinding has to be done thru a different
interface. In this case the drm functions drmAgpUnbind(),
 drmAgpRelease(), drmAcquire() and drmBind() need to take 
care of unbinding/releaseing and reacquiring/rebinding
the AGP memory. 
The current driver contains no code doing this.

The patch in attachment 1 fixes this. There is one
bug in the agpgart module and another one in agp_unbind()
in the drm kernel driver which prevent a VT switch when
direct rendering is enabled. Attachment 2 has patches.

One last problem remains: 
These patches don't help starting a second Xserver:
This second Xserver hangs in the lock created by the first
one.
The release() in the drm kernel driver tries to obtain a
lock, when __HAVE_RELEASE is set. This lock is however held
by the first Xsever.
Only the i810 and i830 drivers have __HAVE_RELEASE set
therefore other Xservers aren't affected.

I've added Keith Whitwell, the original author of the i810 driver,
to Cc. Maybe he can help me to find out how to fix this.


Egbert.

Attachment: diff.i810_vtswitch
Description: Binary data

Attachment: diff.i810_vtswitch_kernel
Description: Binary data

Reply via email to