From 15b331aafc73e154d78b7d08c820e15b9df876a0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 24 Oct 2022 13:28:49 +0200 Subject: [PATCH] 6.0-stable patches added patches: fbdev-core-remove-remove_conflicting_pci_framebuffers.patch --- ...-remove_conflicting_pci_framebuffers.patch | 143 ++++++++++++++++++ queue-6.0/series | 1 + 2 files changed, 144 insertions(+) create mode 100644 queue-6.0/fbdev-core-remove-remove_conflicting_pci_framebuffers.patch diff --git a/queue-6.0/fbdev-core-remove-remove_conflicting_pci_framebuffers.patch b/queue-6.0/fbdev-core-remove-remove_conflicting_pci_framebuffers.patch new file mode 100644 index 00000000000..f238563080d --- /dev/null +++ b/queue-6.0/fbdev-core-remove-remove_conflicting_pci_framebuffers.patch @@ -0,0 +1,143 @@ +From 9d69ef1838150c7d87afc1a87aa658c637217585 Mon Sep 17 00:00:00 2001 +From: Thomas Zimmermann +Date: Mon, 18 Jul 2022 09:23:15 +0200 +Subject: fbdev/core: Remove remove_conflicting_pci_framebuffers() + +From: Thomas Zimmermann + +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 +Reviewed-by: Javier Martinez Canillas +Link: https://patchwork.freedesktop.org/patch/msgid/20220718072322.8927-5-tzimmermann@suse.de +Signed-off-by: Greg Kroah-Hartman +--- + 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); diff --git a/queue-6.0/series b/queue-6.0/series index 2147608ddb6..4d38dc5c610 100644 --- a/queue-6.0/series +++ b/queue-6.0/series @@ -17,3 +17,4 @@ efi-ssdt-don-t-free-memory-if-acpi-table-was-loaded-successfully.patch gcov-support-gcc-12.1-and-newer-compilers.patch io-wq-fix-memory-leak-in-worker-creation.patch mm-huge_memory-do-not-clobber-swp_entry_t-during-thp-split.patch +fbdev-core-remove-remove_conflicting_pci_framebuffers.patch -- 2.47.3