From 5cc70dfa473949897519c2871dcf00797a41fdfe Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 12 Apr 2022 16:28:45 +0200 Subject: [PATCH] Revert "fbdev: Hot-unplug firmware fb devices on forced removal" This reverts commit c894ac44786cfed383a6c6b20c1bfb12eb96018a. It breaks the kernel abi so revert it for now. We will add it back later at the next kabi update. Bug: 161946584 Signed-off-by: Greg Kroah-Hartman Change-Id: I3ea6942053c06dac9e05d6a05081e404e10324eb --- drivers/video/fbdev/core/fbmem.c | 29 +++-------------------------- include/linux/fb.h | 1 - 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 91145d93990a..7bd5e2a4a9da 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -1558,36 +1557,18 @@ static void do_remove_conflicting_framebuffers(struct apertures_struct *a, /* check all firmware fbs and kick off if the base addr overlaps */ for_each_registered_fb(i) { struct apertures_struct *gen_aper; - struct device *device; if (!(registered_fb[i]->flags & FBINFO_MISC_FIRMWARE)) continue; gen_aper = registered_fb[i]->apertures; - device = registered_fb[i]->device; if (fb_do_apertures_overlap(gen_aper, a) || (primary && gen_aper && gen_aper->count && gen_aper->ranges[0].base == VGA_FB_PHYS)) { printk(KERN_INFO "fb%d: switching to %s from %s\n", i, name, registered_fb[i]->fix.id); - - /* - * If we kick-out a firmware driver, we also want to remove - * the underlying platform device, such as simple-framebuffer, - * VESA, EFI, etc. A native driver will then be able to - * allocate the memory range. - * - * If it's not a platform device, at least print a warning. A - * fix would add code to remove the device from the system. - */ - if (dev_is_platform(device)) { - registered_fb[i]->forced_out = true; - platform_device_unregister(to_platform_device(device)); - } else { - pr_warn("fb%d: cannot remove device\n", i); - do_unregister_framebuffer(registered_fb[i]); - } + do_unregister_framebuffer(registered_fb[i]); } } } @@ -1914,13 +1895,9 @@ EXPORT_SYMBOL(register_framebuffer); void unregister_framebuffer(struct fb_info *fb_info) { - bool forced_out = fb_info->forced_out; - - if (!forced_out) - mutex_lock(®istration_lock); + mutex_lock(®istration_lock); do_unregister_framebuffer(fb_info); - if (!forced_out) - mutex_unlock(®istration_lock); + mutex_unlock(®istration_lock); } EXPORT_SYMBOL(unregister_framebuffer); diff --git a/include/linux/fb.h b/include/linux/fb.h index 3d7306c9a706..02f362c661c8 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -502,7 +502,6 @@ struct fb_info { } *apertures; bool skip_vt_switch; /* no VT switch on suspend/resume required */ - bool forced_out; /* set when being removed by another driver */ }; static inline struct apertures_struct *alloc_apertures(unsigned int max_num) {