Mesa (main): nouveau: disable fences when running under drm-shim.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon May 9 23:40:45 UTC 2022


Module: Mesa
Branch: main
Commit: e4ca97111f1017fd39457f9a0562dad0bb582952
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e4ca97111f1017fd39457f9a0562dad0bb582952

Author: Emma Anholt <emma at anholt.net>
Date:   Wed Dec  8 15:21:42 2021 -0800

nouveau: disable fences when running under drm-shim.

Otherwise, you get a hang at the end of shader-db.

Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Karol Herbst <kherbst at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16150>

---

 src/gallium/drivers/nouveau/nouveau_fence.c  | 6 ++++++
 src/gallium/drivers/nouveau/nouveau_screen.c | 2 ++
 src/gallium/drivers/nouveau/nouveau_screen.h | 1 +
 src/nouveau/drm-shim/nouveau_noop.c          | 3 +++
 4 files changed, 12 insertions(+)

diff --git a/src/gallium/drivers/nouveau/nouveau_fence.c b/src/gallium/drivers/nouveau/nouveau_fence.c
index 345ef5f66f2..117bce3b5c8 100644
--- a/src/gallium/drivers/nouveau/nouveau_fence.c
+++ b/src/gallium/drivers/nouveau/nouveau_fence.c
@@ -131,6 +131,12 @@ nouveau_fence_update(struct nouveau_screen *screen, bool flushed)
    struct nouveau_fence *next = NULL;
    u32 sequence = screen->fence.update(&screen->base);
 
+   /* If running under drm-shim, let all fences be signalled so things run to
+    * completion (avoids a hang at the end of shader-db).
+    */
+   if (unlikely(screen->disable_fences))
+      sequence = screen->fence.sequence;
+
    if (screen->fence.sequence_ack == sequence)
       return;
    screen->fence.sequence_ack = sequence;
diff --git a/src/gallium/drivers/nouveau/nouveau_screen.c b/src/gallium/drivers/nouveau/nouveau_screen.c
index f66ccc2ac1b..7312a5b1f98 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.c
+++ b/src/gallium/drivers/nouveau/nouveau_screen.c
@@ -208,6 +208,8 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
    if (screen->force_enable_cl)
       glsl_type_singleton_init_or_ref();
 
+   screen->disable_fences = debug_get_bool_option("NOUVEAU_DISABLE_FENCES", false);
+
    /* These must be set before any failure is possible, as the cleanup
     * paths assume they're responsible for deleting them.
     */
diff --git a/src/gallium/drivers/nouveau/nouveau_screen.h b/src/gallium/drivers/nouveau/nouveau_screen.h
index 9460152eff1..470e1336785 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.h
+++ b/src/gallium/drivers/nouveau/nouveau_screen.h
@@ -74,6 +74,7 @@ struct nouveau_screen {
    bool prefer_nir;
    bool force_enable_cl;
    bool has_svm;
+   bool disable_fences;
    void *svm_cutout;
    size_t svm_cutout_size;
 
diff --git a/src/nouveau/drm-shim/nouveau_noop.c b/src/nouveau/drm-shim/nouveau_noop.c
index a93563abc87..c81ccb5be2b 100644
--- a/src/nouveau/drm-shim/nouveau_noop.c
+++ b/src/nouveau/drm-shim/nouveau_noop.c
@@ -218,6 +218,9 @@ drm_shim_driver_init(void)
 
    nouveau_driver_get_device_info();
 
+   /* Ask userspace to consider all fences completed. */
+   setenv("NOUVEAU_DISABLE_FENCES", "true", true);
+
    /* nothing looks at the pci id, so fix it to a GTX 780 */
    static const char uevent_content[] =
       "DRIVER=nouveau\n"



More information about the mesa-commit mailing list