Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp1719554pxb; Wed, 9 Feb 2022 03:04:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJwIg7gMpNXYTLlfJoMWDrJtZKIJTFbAUvDD2lVWqXf1QxNH90q7mxKm6+WPdFacQTsFpq9y X-Received: by 2002:a63:6a82:: with SMTP id f124mr1449209pgc.64.1644404643171; Wed, 09 Feb 2022 03:04:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644404643; cv=none; d=google.com; s=arc-20160816; b=KE4jpvV2o0OuiZwz/U/lTkmHcjAdA/nkdnlWQ9k0J5waG85iwBC3tarnYI8sJswMfn 6dUu+fZaQ/aJPh1VrOQ41YXzMckSB9b2oqraYmXXZgZZBve+JDB0IbOPzTtnnRMZgmPY F6afI793ZlcWe9fye/JPIZXfobHvpGvel/Q5P0lvveRxpbAI2PEfDWzWhZr0fpxU96fA t6n1L90pkzJRY6F5VxQmJm9WU+X/GJSuUlEQQVkNWwSMnqZutI3VjSHrlQKAB88Vxi1h EcK9pQFveloEyeNMyJfE/PiifUnHHfSvn2qyBhIxxzGSpiYHkYzT8/ArSNdea4UYNJ/C ly2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PCYS5QyMNkkwqTDkShTEbfPtwnFmBXM7JP7Pazg2YKM=; b=0KhLUWHznJP4+51l/wKb+csBzdpLPw27uWgEBUzqV/I2RleFRqkWAQAgy4/7iuUPGM BsPlc2N7mv771qgSAIm1/Lwt2648HzYuVShrdODNd4ZOZakPhjwivwyqQDiyNJqNFXeL gRWPkNT/rxMw3gw/sLWLGs84Pcowbm+Jw2c+2Hlwv5itNiBPBysDOIOK+eUiRM55nd9Y rmlYW57Tn3Ff409LF778WGNRDL+vSiXDGDVTotd4TbhBkWp3lx7o8IgYu3GxphUalRJV zyMM3Z9sWHGfMjC0JZVEp1/IP4XfT+/dfus7dlziFg+QsraZRnYR20m7XjNnYreIXE8I taFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=kTDETVVL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id o4si16486060pfu.251.2022.02.09.03.04.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Feb 2022 03:04:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=kTDETVVL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id A581BE01091D; Wed, 9 Feb 2022 01:32:10 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1387510AbiBHWYV (ORCPT + 99 others); Tue, 8 Feb 2022 17:24:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35462 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1386752AbiBHVI5 (ORCPT ); Tue, 8 Feb 2022 16:08:57 -0500 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C3587C0612B8 for ; Tue, 8 Feb 2022 13:08:56 -0800 (PST) Received: by mail-wr1-x429.google.com with SMTP id e3so674979wra.0 for ; Tue, 08 Feb 2022 13:08:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PCYS5QyMNkkwqTDkShTEbfPtwnFmBXM7JP7Pazg2YKM=; b=kTDETVVLcYRtMjjA8LySpUTc6zRE3ZqOVKlYdUkFPag87WIkrPWX47b+Rb5Gehv3cR LO/YoTPo1B1XpGaBAzdpwQ20SF/lTTiXX0i09lBUwufoAO3uAsw/1GqRYGbBpFouLnMs kFt72PsgGfZ5DstDIs4E5PvzoMLE0yCbrB9+Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PCYS5QyMNkkwqTDkShTEbfPtwnFmBXM7JP7Pazg2YKM=; b=UiaBsv7Zdacwd+iLkCdYRZ34V/ZjyG7Zlw9iSXU2ah/QajBJj4jd9S9BbDmtiHPVcO +AhkCFW85K/Ur9zcixG860yDPI1Xt+Edns46BP6ELomsM+dv7eljhNbjkTuNNSEMlAf+ tHGRaLyaSovHYzRZLKMctLfJcWHOyZW9R52NzVS0L00GcJUfUEiZewW2xuzreksmGSvE hEC3znwXod9lZ/q4o1EmBc5AQI3piYkqEH5ogEyrY8jdhKWsQSH+o8/2xSQKzdPSdqd8 g5p/k//JRuJo85+mfOa4cFjSGPtkPoELaEzrvM+CV7FjuzXyNfmfrOh15MedGKnAsX5k dYew== X-Gm-Message-State: AOAM531FG0PMK1bQu9FIGpoSBjTUnFBuLU7P7Rr+JbZqYPMZDsOupn36 hWRuDqoglISTazkWUa7RCbFECw== X-Received: by 2002:adf:fe01:: with SMTP id n1mr5008752wrr.141.1644354535375; Tue, 08 Feb 2022 13:08:55 -0800 (PST) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id o14sm3033561wmr.3.2022.02.08.13.08.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Feb 2022 13:08:54 -0800 (PST) From: Daniel Vetter To: DRI Development Cc: Intel Graphics Development , linux-fbdev@vger.kernel.org, LKML , Daniel Vetter , Sam Ravnborg , Daniel Vetter , Daniel Vetter , Greg Kroah-Hartman , Claudio Suarez , Du Cheng , Tetsuo Handa Subject: [PATCH v2 16/19] fbcon: untangle fbcon_exit Date: Tue, 8 Feb 2022 22:08:21 +0100 Message-Id: <20220208210824.2238981-17-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220208210824.2238981-1-daniel.vetter@ffwll.ch> References: <20220208210824.2238981-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There's a bunch of confusions going on here: - The deferred fbcon setup notifier should only be cleaned up from fb_console_exit(), to be symmetric with fb_console_init() - We also need to make sure we don't race with the work, which means temporarily dropping the console lock (or we can deadlock) - That also means no point in clearing deferred_takeover, we are unloading everything anyway. - Finally rename fbcon_exit to fbcon_release_all and move it, since that's what's it doing when being called from consw->con_deinit through fbcon_deinit. To answer a question from Sam just quoting my own reply: > We loose the call to fbcon_release_all() here [in fb_console_exit()]. > We have part of the old fbcon_exit() above, but miss the release parts. Ah yes that's the entire point of this change. The release_all in the fbcon exit path was only needed when fbcon was a separate module indepedent from core fb.ko. Which means it was possible to unload fbcon while having fbdev drivers registered. But since we've merged them that has become impossible, so by the time the fb.ko module can be unloaded, there's guaranteed to be no fbdev drivers left. And hence removing them is pointless. v2: Explain the why better (Sam) Acked-by: Sam Ravnborg Signed-off-by: Daniel Vetter Cc: Daniel Vetter Cc: Greg Kroah-Hartman Cc: Claudio Suarez Cc: Du Cheng Cc: Tetsuo Handa --- drivers/video/fbdev/core/fbcon.c | 63 ++++++++++++++++---------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index 685b4a9e5546..944f514c77ec 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -187,7 +187,6 @@ static void fbcon_redraw_move(struct vc_data *vc, struct fbcon_display *p, int line, int count, int dy); static void fbcon_modechanged(struct fb_info *info); static void fbcon_set_all_vcs(struct fb_info *info); -static void fbcon_exit(void); static struct device *fbcon_device; @@ -1146,6 +1145,27 @@ static void fbcon_free_font(struct fbcon_display *p, bool freefont) static void set_vc_hi_font(struct vc_data *vc, bool set); +static void fbcon_release_all(void) +{ + struct fb_info *info; + int i, j, mapped; + + for_each_registered_fb(i) { + mapped = 0; + info = registered_fb[i]; + + for (j = first_fb_vc; j <= last_fb_vc; j++) { + if (con2fb_map[j] == i) { + mapped = 1; + con2fb_map[j] = -1; + } + } + + if (mapped) + fbcon_release(info); + } +} + static void fbcon_deinit(struct vc_data *vc) { struct fbcon_display *p = &fb_display[vc->vc_num]; @@ -1185,7 +1205,7 @@ static void fbcon_deinit(struct vc_data *vc) set_vc_hi_font(vc, false); if (!con_is_bound(&fb_con)) - fbcon_exit(); + fbcon_release_all(); if (vc->vc_num == logo_shown) logo_shown = FBCON_LOGO_CANSHOW; @@ -3296,34 +3316,6 @@ static void fbcon_start(void) #endif } -static void fbcon_exit(void) -{ - struct fb_info *info; - int i, j, mapped; - -#ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER - if (deferred_takeover) { - dummycon_unregister_output_notifier(&fbcon_output_nb); - deferred_takeover = false; - } -#endif - - for_each_registered_fb(i) { - mapped = 0; - info = registered_fb[i]; - - for (j = first_fb_vc; j <= last_fb_vc; j++) { - if (con2fb_map[j] == i) { - mapped = 1; - con2fb_map[j] = -1; - } - } - - if (mapped) - fbcon_release(info); - } -} - void __init fb_console_init(void) { int i; @@ -3363,10 +3355,19 @@ static void __exit fbcon_deinit_device(void) void __exit fb_console_exit(void) { +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER + console_lock(); + if (deferred_takeover) + dummycon_unregister_output_notifier(&fbcon_output_nb); + console_unlock(); + + cancel_work_sync(&fbcon_deferred_takeover_work); +#endif + console_lock(); fbcon_deinit_device(); device_destroy(fb_class, MKDEV(0, 0)); - fbcon_exit(); + do_unregister_con_driver(&fb_con); console_unlock(); } -- 2.34.1