On Don, 2002-10-03 at 20:04, Konstantin Lepikhov wrote:
>
> Thursday 03, at 11:41:04 AM you wrote:
>
> > On Thu, Oct 03, 2002 at 05:43:17PM +0400, Konstantin Lepikhov wrote:
> > > (WW) RADEON(0): [dri] RADEONDRITransitionTo2d: kernel failed to unflip
> > > buffers.
> > >
> > > what is this? It's good or bad? :)
Basically harmless. It means that page 1 is being displayed after page
flipping has ended, so any 2D rendering has to be copied from page 0.
> Yes, of course. Seeking this found another problem - darkplaces after hard
> playing (intro demo) lockups X - program exited abnormally with
> drmRadeonIrqWait: -4 message.
-4 is -EINTR, i.e. the system call was interrupted by a signal. It
shouldn't abort on that, please try the attached patch.
--
Earthling Michel D�nzer (MrCooper)/ Debian GNU/Linux (powerpc) developer
XFree86 and DRI project member / CS student, Free Software enthusiast
Index: lib/GL/mesa/src/drv/radeon/radeon_ioctl.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c,v
retrieving revision 1.29
diff -p -u -r1.29 radeon_ioctl.c
--- lib/GL/mesa/src/drv/radeon/radeon_ioctl.c 2 Oct 2002 12:32:45 -0000 1.29
+++ lib/GL/mesa/src/drv/radeon/radeon_ioctl.c 3 Oct 2002 22:27:32 -0000
@@ -635,7 +635,9 @@ static int radeonWaitForFrameCompletion(
/* if there was a previous frame, wait for its IRQ */
if (iw->irq_seq != -1) {
UNLOCK_HARDWARE( rmesa );
- ret = drmCommandWrite( fd, DRM_RADEON_IRQ_WAIT, iw, sizeof(*iw) );
+ do {
+ ret = drmCommandWrite( fd, DRM_RADEON_IRQ_WAIT, iw, sizeof(*iw) );
+ } while (ret && errno == EINTR);
if ( ret ) {
fprintf( stderr, "%s: drmRadeonIrqWait: %d\n", __FUNCTION__, ret );
exit(1);
@@ -1148,7 +1150,9 @@ void radeonFinish( GLcontext *ctx )
}
UNLOCK_HARDWARE( rmesa );
- ret = drmCommandWrite( fd, DRM_RADEON_IRQ_WAIT, &iw, sizeof(iw) );
+ do {
+ ret = drmCommandWrite( fd, DRM_RADEON_IRQ_WAIT, &iw, sizeof(iw) );
+ } while (ret && errno == EINTR);
if ( ret ) {
fprintf( stderr, "%s: drmRadeonIrqWait: %d\n", __FUNCTION__, ret );
exit(1);