NetBSD-Bugs archive

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

kern/54515: Atomic update failure message in i915/intel_sprite.c

>Number:         54515
>Category:       kern
>Synopsis:       Atomic update failure message in i915/intel_sprite.c
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Aug 30 19:55:00 +0000 2019
>Originator:     Reinoud Zandijk
>Release:        NetBSD 9.0_BETA
System: NetBSD dropje 9.0_BETA NetBSD 9.0_BETA (GENERIC) #0: Wed Aug 28 10:01:57 UTC 2019 amd64
Architecture: x86_64
Machine: amd64

This machine can crash its i965 GPU under normal 2D usage. Its result is a 60
second display/mouse freeze until it resets the GPU and the machine unfreezes.
In the mean time the i915 driver has dumped its memory to dmesg. At times it

kern error: [drm:(/usr/src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c:132)intel_pipe_update_start]
*ERROR* Potential atomic update failure on pipe A: -35

The error -35 under linux is -EAGAIN so most likely interaction between linux
and netbsd code.

Relevant parts from Xorg.log:
[    50.726] (II) intel(0): [DRI2] Setup complete
[    50.726] (II) intel(0): [DRI2]   DRI driver: i965
[    50.726] (II) intel(0): [DRI2]   VDPAU driver: va_gl

Already running with
        Option     "AccelMethod"                "UXA"
in xorg.conf

Boot NetBSD on and amd64 with an i965 GPU and work in X. Using gvim or pidgin
can crash the GPU easily due to its cursor/sprite update.

>Fix: suggested it might have something to do with 
external/bsd/common/include/linux/err.h rev 1.3

Possible diagnostic path provided by phone@ (untested) : :

Index: sys/arch/x86/x86/syscall.c
RCS file: /cvsroot/src/sys/arch/x86/x86/syscall.c,v
retrieving revision 1.18
diff -p -u -r1.18 syscall.c
--- sys/arch/x86/x86/syscall.c	6 Apr 2019 11:54:21 -0000	1.18
+++ sys/arch/x86/x86/syscall.c	30 Aug 2019 19:32:00 -0000
@@ -47,6 +47,10 @@ __KERNEL_RCSID(0, "$NetBSD: syscall.c,v 
 #include <machine/psl.h>
 #include <machine/userret.h>
+#include <machine/db_machdep.h>
+#include <ddb/db_interface.h>
 #include "opt_dtrace.h"
 #ifndef __x86_64__
@@ -143,6 +147,12 @@ syscall(struct trapframe *frame)
 		X86_TF_RFLAGS(frame) &= ~PSL_C;	/* carry bit */
 	} else {
 		switch (error) {
+#if 1 /* COMPAT_DRM */
+		case ELAST+1: /* linux-y ERESTARTSYS */
+			uprintf("%s: got linux ERESTARTSYS\n", __func__);
+			db_stacktrace();
 		case ERESTART:
 			 * The offset to adjust the PC by depends on whether we


Home | Main Index | Thread Index | Old Index