NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-amd64/55555: X freezes and message on console about atomic update fail on intel_sprite.c



>Number:         55555
>Category:       port-amd64
>Synopsis:       X freezes and message on console about atomic update fail on intel_sprite.c
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-amd64-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Aug 08 23:40:00 +0000 2020
>Originator:     sergio lenzi
>Release:        HEAD 9.99.67
>Organization:
k1.com.br
>Environment:
NetBSD desktop64.lenzicasa 9.99.69 NetBSD 9.99.69 (LZTHEAD) #0: Sat Aug  8 18:47:28 -03 2020  NetBSD@install64.netbsd:/home/NetBSD/BUILD/HEAD/amd64/OBJ/sys/arch/amd64/compile/GENERIC amd64
>Description:
Desktop, using mate-desktop and firefox 77, on playing youtube freezes after some time, but not the machine... Message from kernel: Potential atomic update failure on pipe A: -35 the machine is an old dell optiplex 360 with intel G33 builtin graphic chip.  using other video adapter (radeon) the system never locks.
This also occurs in the i386 port
>How-To-Repeat:
Install mate-desktop, start firefox, play some videos, the message shows on the console: Potential atomic update failure on pipe A: -35 than some time later, the graphic desktop freezes, or sometimes on play video, a message of BadAlloc not enough resources shows, and the player aborts, 
only a reboot can bring the desktop to play videos again
>Fix:
apply the patch to intel_sprite.c 

diff -up usr/src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c.orig usr/src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c
--- usr/src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c.orig     2020-08-08 16:37:09.346946639 -0300
+++ usr/src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c  2020-08-08 16:37:25.787602724 -0300
@@ -89,7 +89,7 @@ void intel_pipe_update_start(struct inte
        struct drm_device *dev = crtc->base.dev;
        const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
        enum pipe pipe = crtc->pipe;
-       long timeout = msecs_to_jiffies_timeout(1);
+       long timeout = msecs_to_jiffies_timeout(100);
        int scanline, min, max, vblank_start;
 #ifdef __NetBSD__
        drm_waitqueue_t *wq = drm_crtc_vblank_waitqueue(&crtc->base);
@@ -124,7 +124,7 @@ void intel_pipe_update_start(struct inte
        trace_i915_pipe_update_start(crtc);
 
 #ifdef __NetBSD__
-       DRM_SPIN_TIMED_WAIT_UNTIL(ret, wq, &dev->vbl_lock, timeout,
+       DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, wq, &dev->vbl_lock, timeout,
            (scanline = intel_get_crtc_scanline(crtc),
                scanline < min || scanline > max));
        if (ret <= 0)



Home | Main Index | Thread Index | Old Index