Computer Enthusiastic
2022-Aug-10  10:41 UTC
[Nouveau] Advice about debugging nouveau driver suspend issue (init_on_alloc=1 and init_on_free=1)
Hello,
The "supend to ram" issue (system freeze when resuming after suspend
to ram or disk hibernation) is still affecting the nouveau kernel
module from linux version 5 and above with nvidia GeForce 9600M GT and
other nvidia graphic card with the same chipset [1][2][3].
I've been successfully using the "work in progress" patch by Karol
Herbst [4] to solve the "supend to ram" issue since it was proposed
for an apparent different issue ("[GT216][Linux 5.16.4] Long stalls in
dma_fence_default_wait") [5] whose root cause is probably the same.
I send this message to bring to your attention the aforementioned
patch [4] (below in the message as text) to evaluate it for  the next
steps for possible inclusion  in the upstream kernel version.
Thanks.
[1] https://gitlab.freedesktop.org/xorg/driver/xf86-video-nouveau/-/issues/547
[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=989705#5
[3] https://bugzilla.kernel.org/show_bug.cgi?id=213617
[4] https://gitlab.freedesktop.org/drm/nouveau/-/issues/156#note_1385770
[5] https://gitlab.freedesktop.org/drm/nouveau/-/issues/156
----- %= ----- %= ----- %>From 70271cb0aa30e4523d39c3942e84b16fe18338f5 Mon Sep 17 00:00:00 2001
From: Karol Herbst <kherbst at redhat.com>
Date: Mon, 16 May 2022 17:40:20 +0200
Subject: [PATCH] nouveau WIP
---
 drivers/gpu/drm/nouveau/nouveau_bo.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c
b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 05076e530e7d..b6343741eda6 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -820,6 +820,7 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo,
int evict,
  if (ret == 0) {
  ret = nouveau_fence_new(chan, false, &fence);
  if (ret == 0) {
+ nouveau_fence_wait(fence, false, false);
  ret = ttm_bo_move_accel_cleanup(bo,
  &fence->base,
  evict, false,
-- 
2.35.3
Karol Herbst
2022-Aug-10  11:59 UTC
[Nouveau] Advice about debugging nouveau driver suspend issue (init_on_alloc=1 and init_on_free=1)
On Wed, Aug 10, 2022 at 12:42 PM Computer Enthusiastic <computer.enthusiastic at gmail.com> wrote:> > Hello, > > The "supend to ram" issue (system freeze when resuming after suspend > to ram or disk hibernation) is still affecting the nouveau kernel > module from linux version 5 and above with nvidia GeForce 9600M GT and > other nvidia graphic card with the same chipset [1][2][3]. > > I've been successfully using the "work in progress" patch by Karol > Herbst [4] to solve the "supend to ram" issue since it was proposed > for an apparent different issue ("[GT216][Linux 5.16.4] Long stalls in > dma_fence_default_wait") [5] whose root cause is probably the same. > > I send this message to bring to your attention the aforementioned > patch [4] (below in the message as text) to evaluate it for the next > steps for possible inclusion in the upstream kernel version. >I think it might be better to CC Ben and Lyude, who _might_ have a good idea on what's the proper patch, but maybe the patch is fine as it is?> Thanks. > > [1] https://gitlab.freedesktop.org/xorg/driver/xf86-video-nouveau/-/issues/547 > [2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=989705#5 > [3] https://bugzilla.kernel.org/show_bug.cgi?id=213617 > [4] https://gitlab.freedesktop.org/drm/nouveau/-/issues/156#note_1385770 > [5] https://gitlab.freedesktop.org/drm/nouveau/-/issues/156 > > ----- %= ----- %= ----- %> > From 70271cb0aa30e4523d39c3942e84b16fe18338f5 Mon Sep 17 00:00:00 2001 > From: Karol Herbst <kherbst at redhat.com> > Date: Mon, 16 May 2022 17:40:20 +0200 > Subject: [PATCH] nouveau WIP > > --- > drivers/gpu/drm/nouveau/nouveau_bo.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c > b/drivers/gpu/drm/nouveau/nouveau_bo.c > index 05076e530e7d..b6343741eda6 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_bo.c > +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c > @@ -820,6 +820,7 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, > int evict, > if (ret == 0) { > ret = nouveau_fence_new(chan, false, &fence); > if (ret == 0) { > + nouveau_fence_wait(fence, false, false); > ret = ttm_bo_move_accel_cleanup(bo, > &fence->base, > evict, false, > -- > 2.35.3 >