Page MenuHomeFreeBSD

vt_vga: repost only a vgapci(4) video device
Needs ReviewPublic

Authored by denis.borovikov_gmail.com on Tue, Oct 20, 3:45 AM.
Tags
None
Referenced Files
F176609951: D60880.id.diff
Tue, Oct 20, 5:27 AM
F176609943: D60880.id190344.diff
Tue, Oct 20, 5:27 AM
F176609928: D60880.diff
Tue, Oct 20, 5:27 AM
F176601932: D60880.diff
Tue, Oct 20, 3:46 AM

Details

Reviewers
wulf
manu
Summary

When vt(4) falls back to vt_vga, vga_init() passes vd_video_dev to vga_pci_repost(), which expects a vgapci(4) device. The framebuffer driver that set it need not provide one: drm-kmod's linux_fb passes the parent of the DRM parent device, which is vgapci for LinuxKPI PCI drivers but the PCI bus for virtio-gpu, whose DRM parent is the virtio PCI transport. On x86, vga_pci_repost() then calls pci_get_class() on the bus, which fails the accessor's KASSERT under INVARIANTS; without INVARIANTS the class reads as 0 and the repost is skipped. Repost only a vgapci device.

Test Plan

vt_vga.c compiles for amd64 with -Wall -Werror. Not run: the failing path needs an x86 BIOS boot where vt falls back from drm-kmod's console, which I can't set up here; it follows from vga_pci_is_boot_display() and the __BUS_ACCESSOR KASSERT.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped