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
>Organization:
NetBSD
	
>Environment:
	
	
System: NetBSD dropje 9.0_BETA NetBSD 9.0_BETA (GENERIC) #0: Wed Aug 28 10:01:57 UTC 2019 mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arch/amd64/compile/GENERIC amd64
Architecture: x86_64
Machine: amd64
>Description:

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
gives

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

	
>How-To-Repeat:
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:


phone%NetBSD.org@localhost 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) :
https://www.netbsd.org/~mrg/syscall.diff :

---------
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>
 
+// XXXMRG
+#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();
+#endif
+		/* FALLTHROUGH */
 		case ERESTART:
 			/*
 			 * The offset to adjust the PC by depends on whether we
---------

>Unformatted:
 	
 	



Home | Main Index | Thread Index | Old Index