[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ba4caf7a-9e1f-d5fb-f20c-dba81dc00c06@bstnet.org>
Date: Tue, 1 Nov 2022 09:42:34 +0100
From: "Boris V." <borisvk@...net.org>
To: Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
linux-kernel@...r.kernel.org
Cc: stable@...r.kernel.org, Thomas Zimmermann <tzimmermann@...e.de>,
Javier Martinez Canillas <javierm@...hat.com>
Subject: Re: [PATCH 6.0 20/20] fbdev/core: Remove
remove_conflicting_pci_framebuffers()
On 24/10/2022 13:31, Greg Kroah-Hartman wrote:
> From: Thomas Zimmermann <tzimmermann@...e.de>
>
> commit 9d69ef1838150c7d87afc1a87aa658c637217585 upstream.
>
> Remove remove_conflicting_pci_framebuffers() and implement similar
> functionality in aperture_remove_conflicting_pci_device(), which was
> the only caller. Removes an otherwise unused interface and streamlines
> the aperture helper. No functional changes.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@...e.de>
> Reviewed-by: Javier Martinez Canillas <javierm@...hat.com>
> Link: https://patchwork.freedesktop.org/patch/msgid/20220718072322.8927-5-tzimmermann@suse.de
> Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
> ---
> drivers/video/aperture.c | 30 ++++++++++++++----------
> drivers/video/fbdev/core/fbmem.c | 48 ---------------------------------------
> include/linux/fb.h | 2 -
> 3 files changed, 18 insertions(+), 62 deletions(-)
>
> --- a/drivers/video/aperture.c
> +++ b/drivers/video/aperture.c
> @@ -335,30 +335,36 @@ EXPORT_SYMBOL(aperture_remove_conflictin
> */
> int aperture_remove_conflicting_pci_devices(struct pci_dev *pdev, const char *name)
> {
> + bool primary = false;
> resource_size_t base, size;
> int bar, ret;
>
> - /*
> - * WARNING: Apparently we must kick fbdev drivers before vgacon,
> - * otherwise the vga fbdev driver falls over.
> - */
> -#if IS_REACHABLE(CONFIG_FB)
> - ret = remove_conflicting_pci_framebuffers(pdev, name);
> - if (ret)
> - return ret;
> +#ifdef CONFIG_X86
> + primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
> #endif
> - ret = vga_remove_vgacon(pdev);
> - if (ret)
> - return ret;
>
> for (bar = 0; bar < PCI_STD_NUM_BARS; ++bar) {
> if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
> continue;
> +
> base = pci_resource_start(pdev, bar);
> size = pci_resource_len(pdev, bar);
> - aperture_detach_devices(base, size);
> + ret = aperture_remove_conflicting_devices(base, size, primary, name);
> + if (ret)
> + break;
> }
>
> + if (ret)
> + return ret;
> +
> + /*
> + * WARNING: Apparently we must kick fbdev drivers before vgacon,
> + * otherwise the vga fbdev driver falls over.
> + */
> + ret = vga_remove_vgacon(pdev);
> + if (ret)
> + return ret;
> +
> return 0;
>
> }
> --- a/drivers/video/fbdev/core/fbmem.c
> +++ b/drivers/video/fbdev/core/fbmem.c
> @@ -1788,54 +1788,6 @@ int remove_conflicting_framebuffers(stru
> EXPORT_SYMBOL(remove_conflicting_framebuffers);
>
> /**
> - * remove_conflicting_pci_framebuffers - remove firmware-configured framebuffers for PCI devices
> - * @pdev: PCI device
> - * @name: requesting driver name
> - *
> - * This function removes framebuffer devices (eg. initialized by firmware)
> - * using memory range configured for any of @pdev's memory bars.
> - *
> - * The function assumes that PCI device with shadowed ROM drives a primary
> - * display and so kicks out vga16fb.
> - */
> -int remove_conflicting_pci_framebuffers(struct pci_dev *pdev, const char *name)
> -{
> - struct apertures_struct *ap;
> - bool primary = false;
> - int err, idx, bar;
> -
> - for (idx = 0, bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
> - if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
> - continue;
> - idx++;
> - }
> -
> - ap = alloc_apertures(idx);
> - if (!ap)
> - return -ENOMEM;
> -
> - for (idx = 0, bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
> - if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
> - continue;
> - ap->ranges[idx].base = pci_resource_start(pdev, bar);
> - ap->ranges[idx].size = pci_resource_len(pdev, bar);
> - pci_dbg(pdev, "%s: bar %d: 0x%lx -> 0x%lx\n", __func__, bar,
> - (unsigned long)pci_resource_start(pdev, bar),
> - (unsigned long)pci_resource_end(pdev, bar));
> - idx++;
> - }
> -
> -#ifdef CONFIG_X86
> - primary = pdev->resource[PCI_ROM_RESOURCE].flags &
> - IORESOURCE_ROM_SHADOW;
> -#endif
> - err = remove_conflicting_framebuffers(ap, name, primary);
> - kfree(ap);
> - return err;
> -}
> -EXPORT_SYMBOL(remove_conflicting_pci_framebuffers);
> -
> -/**
> * register_framebuffer - registers a frame buffer device
> * @fb_info: frame buffer info structure
> *
> --- a/include/linux/fb.h
> +++ b/include/linux/fb.h
> @@ -615,8 +615,6 @@ extern ssize_t fb_sys_write(struct fb_in
> /* drivers/video/fbmem.c */
> extern int register_framebuffer(struct fb_info *fb_info);
> extern void unregister_framebuffer(struct fb_info *fb_info);
> -extern int remove_conflicting_pci_framebuffers(struct pci_dev *pdev,
> - const char *name);
> extern int remove_conflicting_framebuffers(struct apertures_struct *a,
> const char *name, bool primary);
> extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
>
>
>
>
Hello,
this patch seems to disable console/framebuffer when vfio-pci is used.
I hava 2 nvidia GPUs one is used for host and other is passed through to VM.
Now after this patch, when vfio-pci module is loaded with parameter
ids=10de:2486,10de:228b,
console is lost/frozen, last message is that vfio-pci module was loaded
and then there is no more output.
This PCI IDs (10de:2486,10de:228b) are for secondary GPU, primary/boot
GPU is used for host and boot messages are displayed on primary/boot GPU.
Using dmesg I see this messages after vfio-pci is loaded:
[ 3.993601] VFIO - User Level meta-driver version: 0.3
[ 4.020239] Console: switching to colour dummy device 80x25
[ 4.020335] vfio-pci 0000:1a:00.0: vgaarb: changed VGA decodes:
olddecodes=io+mem,decodes=none:owns=none
[ 4.020722] vfio_pci: add [10de:2486[ffffffff:ffffffff]] class
0x000000/00000000
[ 4.116616] vfio_pci: add [10de:228b[ffffffff:ffffffff]] class
0x000000/00000000
I guess the problem here is "Console: switching to colour dummy device
80x25", but I don't know why this happens.
Last working kernel is 6.0.3, after upgrading to 6.0.4 (and 6.0.5,
6.0.6), console is no longer working.
By git bisecting it seems bad commit is
af9ac541e88390d97b01d5e8c77309d2637c1d4c.
Powered by blists - more mailing lists