On Tue, Apr 16, 2024 at 02:32:17AM -0700, Nam Nguyen wrote:
> >Synopsis:    amdgpu Xorg.0.log filled with flip queue failed and Page flip 
> >failed
> >Category:    system
> >Environment:
>       System      : OpenBSD 7.5
>       Details     : OpenBSD 7.5-current (GENERIC.MP) #25: Mon Apr 15 12:00:00 
> MDT 2024
>                        
> dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> 
>       Architecture: OpenBSD.amd64
>       Machine     : amd64
> >Description:
> 
> /var/log/Xorg.0.log gets filled up with the same repeating error while
> watching mpv yt-dlp and playing games/ezquake. This is on 6800xt amd64
> 3900x.
> 
> $ du -sh /var/log/Xorg.0.log                                              
> 1017M   /var/log/Xorg.0.log
> 
> >How-To-Repeat:
> 
> watch mpv yt-dlp several times leaves only two lines per video:
> [    76.172] (WW) AMDGPU(0): flip queue failed: Invalid argument
> [    76.172] (WW) AMDGPU(0): Page flip failed: Invalid argument
> [    96.004] (WW) AMDGPU(0): flip queue failed: Invalid argument
> [    96.004] (WW) AMDGPU(0): Page flip failed: Invalid argument
> [    96.792] (WW) AMDGPU(0): flip queue failed: Invalid argument
> [    96.792] (WW) AMDGPU(0): Page flip failed: Invalid argument

try the diff below which brings in
xf86-video-amdgpu-23.0.0..31a092ae71371fb473a3a51f70fe58e1f42e283b

the last commit is the one referenced in:
https://gitlab.freedesktop.org/drm/amd/-/issues/2852

https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/commit/31a092ae71371fb473a3a51f70fe58e1f42e283b

Index: driver/xf86-video-amdgpu/man/amdgpu.man
===================================================================
RCS file: /cvs/xenocara/driver/xf86-video-amdgpu/man/amdgpu.man,v
diff -u -p -r1.4 amdgpu.man
--- driver/xf86-video-amdgpu/man/amdgpu.man     1 Mar 2023 20:21:10 -0000       
1.4
+++ driver/xf86-video-amdgpu/man/amdgpu.man     16 Apr 2024 09:55:23 -0000
@@ -81,7 +81,8 @@ on. If this option is set, the default v
 accordingly. If this option isn't set, the default value of the property is
 .B auto,
 which means that TearFree is on for rotated outputs, outputs with RandR
-transforms applied and for RandR 1.4 secondary outputs, otherwise off.
+transforms applied, for RandR 1.4 secondary outputs and if 'VariableRefresh'
+is enabled, otherwise it's off.
 .TP
 .BI "Option \*qVariableRefresh\*q \*q" boolean \*q
 Enables support for enabling variable refresh on the Screen's CRTCs
Index: driver/xf86-video-amdgpu/src/amdgpu_kms.c
===================================================================
RCS file: /cvs/xenocara/driver/xf86-video-amdgpu/src/amdgpu_kms.c,v
diff -u -p -r1.6 amdgpu_kms.c
--- driver/xf86-video-amdgpu/src/amdgpu_kms.c   1 Mar 2023 20:21:10 -0000       
1.6
+++ driver/xf86-video-amdgpu/src/amdgpu_kms.c   16 Apr 2024 09:55:23 -0000
@@ -1657,6 +1657,10 @@ Bool AMDGPUPreInit_KMS(ScrnInfoPtr pScrn
                        from = xf86GetOptValBool(info->Options, 
OPTION_VARIABLE_REFRESH,
                                                 &info->vrr_support) ? X_CONFIG 
: X_DEFAULT;
 
+                       if (info->vrr_support && !info->tear_free)
+                               xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                                          "Enabling VariableRefresh while 
TearFree is disabled can cause instability!\n");
+
                        xf86DrvMsg(pScrn->scrnIndex, from, "VariableRefresh: 
%sabled\n",
                                   info->vrr_support ? "en" : "dis");
 
Index: driver/xf86-video-amdgpu/src/drmmode_display.c
===================================================================
RCS file: /cvs/xenocara/driver/xf86-video-amdgpu/src/drmmode_display.c,v
diff -u -p -r1.4 drmmode_display.c
--- driver/xf86-video-amdgpu/src/drmmode_display.c      5 Dec 2022 16:41:17 
-0000       1.4
+++ driver/xf86-video-amdgpu/src/drmmode_display.c      16 Apr 2024 09:55:23 
-0000
@@ -597,6 +597,7 @@ drmmode_crtc_update_tear_free(xf86CrtcPt
                    (drmmode_output->tear_free == 2 &&
                     (crtc->scrn->pScreen->isGPU ||
                      info->shadow_primary ||
+                     info->vrr_support ||
                      crtc->transformPresent || crtc->rotation != 
RR_Rotate_0))) {
                        drmmode_crtc->tear_free = TRUE;
                        return;
@@ -1268,6 +1269,11 @@ drmmode_set_mode(xf86CrtcPtr crtc, struc
                if (output->crtc != crtc)
                        continue;
 
+               if (!drmmode_output->mode_output) {
+                       ret = FALSE;
+                       goto out;
+               }
+
                output_ids[output_count] = 
drmmode_output->mode_output->connector_id;
                output_count++;
        }
@@ -1286,6 +1292,7 @@ drmmode_set_mode(xf86CrtcPtr crtc, struc
                           "failed to set mode: %s\n", strerror(errno));
        }
 
+out:
        free(output_ids);
        return ret;
 }

Reply via email to