Re: [PATCH 2/2] vfio/pci: Remove console drivers

From: Thomas Zimmermann
Date: Mon Dec 05 2022 - 04:02:27 EST


Hi

Am 05.12.22 um 01:51 schrieb Alex Williamson:
On Sat, 3 Dec 2022 17:12:38 -0700
"mb@xxxxxxx" <mb@xxxxxxx> wrote:

Hi,

I hope it is ok to reply to this old thread.

It is, but the only relic of the thread is the subject. For reference,
the latest version of this posted is here:

https://lore.kernel.org/all/20220622140134.12763-4-tzimmermann@xxxxxxx/

Which is committed as:

d17378062079 ("vfio/pci: Remove console drivers")

Unfortunately, I found a
problem only now after upgrading to 6.0.

My setup has multiple GPUs (2), and I depend on EFIFB to have a working console.

Which GPUs do you have?

pre-patch behavior, when I bind the vfio-pci to my secondary GPU both
the passthrough and the EFIFB keep working fine.
post-patch behavior, when I bind the vfio-pci to the secondary GPU,
the EFIFB disappears from the system, binding the console to the
"dummy console".

The efifb would likely use the first GPU. And vfio-pci should only remove the generic driver from the second device. Are you sure that you're not somehow using the first GPU with vfio-pci.

Whenever you try to access the terminal, you have the screen stuck in
whatever was the last buffer content, which gives the impression of
"freezing," but I can still type.
Everything else works, including the passthrough.

This sounds like the call to aperture_remove_conflicting_pci_devices()
is removing the conflicting driver itself rather than removing the
device from the driver. Is it not possible to unbind the GPU from
efifb before binding the GPU to vfio-pci to effectively nullify the
added call?
I can only think about a few options:

- Is there a way to have EFIFB show up again? After all it looks like
the kernel has just abandoned it, but the buffer is still there. I
can't find a single message about the secondary card and EFIFB in
dmesg, but there's a message for the primary card and EFIFB.
- Can we have a boolean controlling the behavior of vfio-pci
altogether or at least controlling the behavior of vfio-pci for that
specific ID? I know there's already some option for vfio-pci and VGA
cards, would it be appropriate to attach this behavior to that option?

I suppose we could have an opt-out module option on vfio-pci to skip
the above call, but clearly it would be better if things worked by
default. We cannot make full use of GPUs with vfio-pci if they're
still in use by host console drivers. The intention was certainly to
unbind the device from any low level drivers rather than disable use of
a console driver entirely. DRM/GPU folks, is that possibly an
interface we could implement? Thanks,

When vfio-pci gives the GPU device to the guest, which driver driver is bound to it?

Best regards
Thomas


Alex


--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev

Attachment: OpenPGP_signature
Description: OpenPGP digital signature