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