lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <5e3f182f-7b6e-5c7f-d9a9-7cd1417cc38d@absolutedigital.net>
Date:   Sun, 3 Jul 2022 00:22:18 -0400 (EDT)
From:   Cal Peake <cp@...olutedigital.net>
To:     Kernel Mailing List <linux-kernel@...r.kernel.org>
cc:     Bjorn Helgaas <bhelgaas@...gle.com>,
        Huacai Chen <chenhuacai@...nel.org>
Subject: [RFC] vgaarb: Add a module parm to use the first VGA device for
 boot

Hi,

I have a dual GPU system with the GPU in the first CPU PCIe slot for the 
host and the GPU in the second CPU PCIe slot being passed through to a 
virtual machine.

Currently, the VGA arbiter enumerates through all VGA devices in the order 
that they appear in on the bus with the last one ultimately getting the 
assignment for boot device.

This is a problem because once the VFIO PCI driver claims the second GPU, 
all display output is lost -- just empty black screens on both cards.

Setting VGA_ARB_MAX_GPUS to 1 helps a little: the X server will initialize 
on the first GPU like it should, but there's no VTs to be found (i.e. 
Alt-F1/F2/etc), just more black screens.

Below is an attempt at a fix by creating a kernel param to have the VGA 
arbiter use the first VGA device it finds for the boot device and then 
subsequently ignore the rest for this task.

-- 
Cal Peake

--- ./drivers/pci/vgaarb.c	2022-07-02 10:44:56.000000000 -0400
+++ ./drivers/pci/vgaarb.c	2022-07-02 22:55:24.291822548 -0400
@@ -35,6 +35,10 @@
 
 #include <linux/vgaarb.h>
 
+static bool use_first;
+module_param(use_first, bool, 0);
+MODULE_PARM_DESC(force, "Set to one to use the first VGA device for boot");
+
 static void vga_arbiter_notify_clients(void);
 /*
  * We keep a list of all vga devices in the system to speed
@@ -815,7 +819,8 @@ static bool vga_arbiter_add_pci_device(s
 		bus = bus->parent;
 	}
 
-	if (vga_is_boot_device(vgadev)) {
+	if (vga_is_boot_device(vgadev) &&
+	    (!use_first || (use_first && !vga_default_device()))) {
 		vgaarb_info(&pdev->dev, "setting as boot VGA device%s\n",
 			    vga_default_device() ?
 			    " (overriding previous)" : "");

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ