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 2001From: 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 >