From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Thu, 02 Aug 2018 11:28:40 +0000 Subject: [PATCH fix for 4.19 2/3] fbcon: Only defer console takeover if the current console driver is the dum Message-Id: <20180802112841.27679-3-hdegoede@redhat.com> List-Id: References: <20180802112841.27679-1-hdegoede@redhat.com> In-Reply-To: <20180802112841.27679-1-hdegoede@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Bartlomiej Zolnierkiewicz Cc: Hans de Goede , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org We rely on dummycon's output notifier mechanism to defer the takeover. If say vgacon is the current console driver then dummycon will never get used so its output notifier will also never get called and fbcon never takes over. This commit fixes this by only deferring the console takeover if the current console driver is the dummycon driver. This commit also moves the entirety of fbcon_start under the console_lock, since the conswitchp which fbcon_start now checks is protected by it. This commit also inlines fbcon_register_output_notifier, since we now need a #ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER in fbcon_start anyways because of the write access to the deferred_takeover variable, this has the added advantage that it puts the dummycon_register_output_notifier() call directly after the "conswitchp !&dummy_con" comparison making it clear why that check is there. Note the arch setup code will set conswitchp to either dummy_con or vga_con, in the cases where it gets set to vga_con even though their is no vga_con present we rely on vga_con_startup() to set conswitchp to dummy_con. vga_con_startup() is guaranteed to happen before fb_console_init() as it gets called as a console_initcall where as fb_console_init() gets called as a subsys_initcall. Signed-off-by: Hans de Goede --- drivers/video/fbdev/core/fbcon.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index e30d3a138c97..ef8b2d0b7071 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -3612,36 +3612,32 @@ static int fbcon_output_notifier(struct notifier_block *nb, return NOTIFY_OK; } - -static void fbcon_register_output_notifier(void) -{ - fbcon_output_nb.notifier_call = fbcon_output_notifier; - dummycon_register_output_notifier(&fbcon_output_nb); -} -#else -static inline void fbcon_register_output_notifier(void) {} #endif static void fbcon_start(void) { + WARN_CONSOLE_UNLOCKED(); + +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER + if (conswitchp != &dummy_con) + deferred_takeover = false; + if (deferred_takeover) { - fbcon_register_output_notifier(); + fbcon_output_nb.notifier_call = fbcon_output_notifier; + dummycon_register_output_notifier(&fbcon_output_nb); return; } +#endif if (num_registered_fb) { int i; - console_lock(); - for_each_registered_fb(i) { info_idx = i; break; } do_fbcon_takeover(0); - console_unlock(); - } } @@ -3724,8 +3720,8 @@ void __init fb_console_init(void) for (i = 0; i < MAX_NR_CONSOLES; i++) con2fb_map[i] = -1; - console_unlock(); fbcon_start(); + console_unlock(); } #ifdef MODULE -- 2.18.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: [PATCH fix for 4.19 2/3] fbcon: Only defer console takeover if the current console driver is the dummycon Date: Thu, 2 Aug 2018 13:28:40 +0200 Message-ID: <20180802112841.27679-3-hdegoede@redhat.com> References: <20180802112841.27679-1-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9CC726E594 for ; Thu, 2 Aug 2018 11:28:46 +0000 (UTC) In-Reply-To: <20180802112841.27679-1-hdegoede@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Bartlomiej Zolnierkiewicz Cc: Hans de Goede , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org V2UgcmVseSBvbiBkdW1teWNvbidzIG91dHB1dCBub3RpZmllciBtZWNoYW5pc20gdG8gZGVmZXIg dGhlIHRha2VvdmVyLgoKSWYgc2F5IHZnYWNvbiBpcyB0aGUgY3VycmVudCBjb25zb2xlIGRyaXZl ciB0aGVuIGR1bW15Y29uIHdpbGwgbmV2ZXIgZ2V0CnVzZWQgc28gaXRzIG91dHB1dCBub3RpZmll ciB3aWxsIGFsc28gbmV2ZXIgZ2V0IGNhbGxlZCBhbmQgZmJjb24gbmV2ZXIKdGFrZXMgb3Zlci4g VGhpcyBjb21taXQgZml4ZXMgdGhpcyBieSBvbmx5IGRlZmVycmluZyB0aGUgY29uc29sZSB0YWtl b3ZlcgppZiB0aGUgY3VycmVudCBjb25zb2xlIGRyaXZlciBpcyB0aGUgZHVtbXljb24gZHJpdmVy LgoKVGhpcyBjb21taXQgYWxzbyBtb3ZlcyB0aGUgZW50aXJldHkgb2YgZmJjb25fc3RhcnQgdW5k ZXIgdGhlIGNvbnNvbGVfbG9jaywKc2luY2UgdGhlIGNvbnN3aXRjaHAgd2hpY2ggZmJjb25fc3Rh cnQgbm93IGNoZWNrcyBpcyBwcm90ZWN0ZWQgYnkgaXQuCgpUaGlzIGNvbW1pdCBhbHNvIGlubGlu ZXMgZmJjb25fcmVnaXN0ZXJfb3V0cHV0X25vdGlmaWVyLCBzaW5jZSB3ZSBub3cKbmVlZCBhICNp ZmRlZiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERUZFUlJFRF9UQUtFT1ZFUiBpbiBmYmNv bl9zdGFydAphbnl3YXlzIGJlY2F1c2Ugb2YgdGhlIHdyaXRlIGFjY2VzcyB0byB0aGUgZGVmZXJy ZWRfdGFrZW92ZXIgdmFyaWFibGUsCnRoaXMgaGFzIHRoZSBhZGRlZCBhZHZhbnRhZ2UgdGhhdCBp dCBwdXRzIHRoZQpkdW1teWNvbl9yZWdpc3Rlcl9vdXRwdXRfbm90aWZpZXIoKSBjYWxsIGRpcmVj dGx5IGFmdGVyIHRoZSAiY29uc3dpdGNocCAhPQomZHVtbXlfY29uIiBjb21wYXJpc29uIG1ha2lu ZyBpdCBjbGVhciB3aHkgdGhhdCBjaGVjayBpcyB0aGVyZS4KCk5vdGUgdGhlIGFyY2ggc2V0dXAg Y29kZSB3aWxsIHNldCBjb25zd2l0Y2hwIHRvIGVpdGhlciBkdW1teV9jb24gb3IKdmdhX2Nvbiwg aW4gdGhlIGNhc2VzIHdoZXJlIGl0IGdldHMgc2V0IHRvIHZnYV9jb24gZXZlbiB0aG91Z2ggdGhl aXIgaXMKbm8gdmdhX2NvbiBwcmVzZW50IHdlIHJlbHkgb24gdmdhX2Nvbl9zdGFydHVwKCkgdG8g c2V0IGNvbnN3aXRjaHAgdG8KZHVtbXlfY29uLiB2Z2FfY29uX3N0YXJ0dXAoKSBpcyBndWFyYW50 ZWVkIHRvIGhhcHBlbiBiZWZvcmUKZmJfY29uc29sZV9pbml0KCkgYXMgaXQgZ2V0cyBjYWxsZWQg YXMgYSBjb25zb2xlX2luaXRjYWxsIHdoZXJlIGFzCmZiX2NvbnNvbGVfaW5pdCgpIGdldHMgY2Fs bGVkIGFzIGEgc3Vic3lzX2luaXRjYWxsLgoKU2lnbmVkLW9mZi1ieTogSGFucyBkZSBHb2VkZSA8 aGRlZ29lZGVAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24u YyB8IDI0ICsrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGluc2Vy dGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJk ZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKaW5kZXgg ZTMwZDNhMTM4Yzk3Li5lZjhiMmQwYjcwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJk ZXYvY29yZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jCkBA IC0zNjEyLDM2ICszNjEyLDMyIEBAIHN0YXRpYyBpbnQgZmJjb25fb3V0cHV0X25vdGlmaWVyKHN0 cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAKIAlyZXR1cm4gTk9USUZZX09LOwogfQotCi1zdGF0 aWMgdm9pZCBmYmNvbl9yZWdpc3Rlcl9vdXRwdXRfbm90aWZpZXIodm9pZCkKLXsKLQlmYmNvbl9v dXRwdXRfbmIubm90aWZpZXJfY2FsbCA9IGZiY29uX291dHB1dF9ub3RpZmllcjsKLQlkdW1teWNv bl9yZWdpc3Rlcl9vdXRwdXRfbm90aWZpZXIoJmZiY29uX291dHB1dF9uYik7Ci19Ci0jZWxzZQot c3RhdGljIGlubGluZSB2b2lkIGZiY29uX3JlZ2lzdGVyX291dHB1dF9ub3RpZmllcih2b2lkKSB7 fQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGZiY29uX3N0YXJ0KHZvaWQpCiB7CisJV0FSTl9DT05T T0xFX1VOTE9DS0VEKCk7CisKKyNpZmRlZiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERUZF UlJFRF9UQUtFT1ZFUgorCWlmIChjb25zd2l0Y2hwICE9ICZkdW1teV9jb24pCisJCWRlZmVycmVk X3Rha2VvdmVyID0gZmFsc2U7CisKIAlpZiAoZGVmZXJyZWRfdGFrZW92ZXIpIHsKLQkJZmJjb25f cmVnaXN0ZXJfb3V0cHV0X25vdGlmaWVyKCk7CisJCWZiY29uX291dHB1dF9uYi5ub3RpZmllcl9j YWxsID0gZmJjb25fb3V0cHV0X25vdGlmaWVyOworCQlkdW1teWNvbl9yZWdpc3Rlcl9vdXRwdXRf bm90aWZpZXIoJmZiY29uX291dHB1dF9uYik7CiAJCXJldHVybjsKIAl9CisjZW5kaWYKIAogCWlm IChudW1fcmVnaXN0ZXJlZF9mYikgewogCQlpbnQgaTsKIAotCQljb25zb2xlX2xvY2soKTsKLQog CQlmb3JfZWFjaF9yZWdpc3RlcmVkX2ZiKGkpIHsKIAkJCWluZm9faWR4ID0gaTsKIAkJCWJyZWFr OwogCQl9CiAKIAkJZG9fZmJjb25fdGFrZW92ZXIoMCk7Ci0JCWNvbnNvbGVfdW5sb2NrKCk7Ci0K IAl9CiB9CiAKQEAgLTM3MjQsOCArMzcyMCw4IEBAIHZvaWQgX19pbml0IGZiX2NvbnNvbGVfaW5p dCh2b2lkKQogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OU09MRVM7IGkrKykKIAkJY29uMmZi X21hcFtpXSA9IC0xOwogCi0JY29uc29sZV91bmxvY2soKTsKIAlmYmNvbl9zdGFydCgpOworCWNv bnNvbGVfdW5sb2NrKCk7CiB9CiAKICNpZmRlZiBNT0RVTEUKLS0gCjIuMTguMAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==