[Bug 237050] [PATCH] vt efifb back-end does not send display release / re-acquire signals on suspend / resume

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Fri Apr 5 15:19:13 UTC 2019


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237050

            Bug ID: 237050
           Summary: [PATCH] vt efifb back-end does not send display
                    release / re-acquire signals on suspend / resume
           Product: Base System
           Version: 11.2-RELEASE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: bugs at FreeBSD.org
          Reporter: ekurzinger at nvidia.com

Using the latest NVIDIA driver, upon resuming from suspend while X is running
the display will remain blank. Additionally, and OpenGL applications that were
running will trigger a number of error messages from the NVIDIA driver
resembling the following:

NVRM: GPU at PCI:0000:05:00: GPU-e0851a46-0a85-f806-1e95-94e61ad45653
NVRM: GPU Board Serial Number: 0331118033409
NVRM: Xid (PCI:0000:05:00): 13, Graphics SM Warp Exception on (GPC 0, TPC 1):
Illegal Instruction Encoding
NVRM: Xid (PCI:0000:05:00): 13, Graphics Exception: ESR 0x504e48=0x3f0009
0x504e50=0x0 0x504e44=0xd3eff2 0x504e4c=0x17f
NVRM: Xid (PCI:0000:05:00): 13, Graphics SM Warp Exception on (GPC 0, TPC 2):
Illegal Instruction Encoding
NVRM: Xid (PCI:0000:05:00): 13, Graphics Exception: ESR 0x505648=0x3f0009
0x505650=0x0 0x505644=0xd3eff2 0x50564c=0x17f

This is because the efifb back-end for vt will not signal the X server to
release the display before suspending (or to re-acquire it after resuming)
resulting in important code in the NVIDIA driver responsible for smoothly
shutting down and re-initializing the GPU not running. Since the NVIDIA driver
doesn't currently support framebuffer devices, vt is forced to fall back to
this efifb back-end, unlike on Intel hardware, for instance, where it will
instead use the fb back-end that does correctly implement the display hand-off
logic. The following patch adds vd_suspend and vd_resume members to the efifb
back-end's vt_driver struct. These simply call the vt_suspend and vt_resume
functions from vt_core.c (similar to the behavior of the fb back-end). This
ensures the X server is properly able to re-initialize the display and prevents
the above errors from 3D applications.

--- sys/dev/vt/hw/efifb/efifb.c (revision 345767)
+++ sys/dev/vt/hw/efifb/efifb.c (working copy)
@@ -66,6 +66,8 @@
        .vd_fb_mmap = vt_fb_mmap,
        /* Better than VGA, but still generic driver. */
        .vd_priority = VD_PRIORITY_GENERIC + 1,
+       .vd_suspend = vt_suspend,
+       .vd_resume = vt_resume,
 };

 static struct fb_info local_info;

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list