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);

Reply via email to