Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp1016854ybm; Tue, 21 May 2019 07:26:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqwYKdx0GCeZoQUHY3vXCNVnsyjIWCT97OvF3RvniyuNEue7aLyoX6nwunT52IxR3Y95y0sR X-Received: by 2002:a62:414a:: with SMTP id o71mr88749617pfa.240.1558448768517; Tue, 21 May 2019 07:26:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558448768; cv=none; d=google.com; s=arc-20160816; b=VSaS61emd8fnuaApvpv7iRqkp95rNTJZbJmNYZ4ERJ7HuUWLE6fp5zIIhN7XC3lTBL 3ReqymVaD7JD9c7ErVz6XJZnJcah2JhhB4KgoY3W7SA/QVFCDbBSfPjyhiQ5+JdiCyZK ZmOuV40oQ2c3LAk30yapfTyrORCGK+jl62Z/ux5Ij7ZnqTO3sdJzl7EYG496FQF2UkAg cmHqz13KAR3g0ra0ytJD8WQc29oPS6dLms4iAOJqFGYDPr3UBD3XB5ki5QGvpy13p6/3 YObOmW4ntjx8Cz/LAajb9oEm2kkSXpy7b58e52qCGXTM5fPn6XgyVSMgS9PASDvYD3Sk +p2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=3gXOlvlwJpwesLdU0wAdD0yVcQscPI1RKWlQt+svte8=; b=AuMyPFy7uiu+P2iKef9LHFarH1NBtQPMkPq2MHbXklMK0MQpj68dLu9YPfSn9NubZ7 MdK72w6rb2Z7zcj/LZ5VGVzKKJofx9LSAjfP/MKsu0jsyskbHhhMKY6XRZSwHX1m6YMS H44l9M9lluCbdWxCFqmXcJOTv4Utpxd4YWzPO5aZavEFtQ+bS1YY7CCmQQvhGZrLNq1J w1ZU9H/CZHskv9PKq2bxt9oEyrwzOiLaHJFo1cslVOGUqyWFoM6Qv5ujxy3wBCdq4akr fDocR3oWpUXOdvrXOLn68Sy2QaXSR0zdDFJZ5VQa8WRBdpP+ptHeGBsNQ/AEpJdOhEbM N/0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b="g6Zkc/dM"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 131si22031841pfa.14.2019.05.21.07.25.52; Tue, 21 May 2019 07:26:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b="g6Zkc/dM"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728398AbfEUOXP (ORCPT + 99 others); Tue, 21 May 2019 10:23:15 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:41578 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728176AbfEUOXP (ORCPT ); Tue, 21 May 2019 10:23:15 -0400 Received: by mail-ed1-f67.google.com with SMTP id m4so29660411edd.8 for ; Tue, 21 May 2019 07:23:13 -0700 (PDT) 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=3gXOlvlwJpwesLdU0wAdD0yVcQscPI1RKWlQt+svte8=; b=g6Zkc/dMLE5Boejgu8PEXQ+7QOwTTqousEgB/e+KN9uezhGHXV4C7M3mwALTnyUsVZ 3oN70CAVtJZbn6iyWpezw0DBjDdx5iG04Kbd96QFMHc7FVeCzeE+AqNTcSstgrbvlNCk NyjYUe9P03iNTR8Inhi/rQAa5seslO2wnmMIU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3gXOlvlwJpwesLdU0wAdD0yVcQscPI1RKWlQt+svte8=; b=QZ3Kn/MdLKCj46yxWmcb8yWPRT9tFnPdKFSvMEcEFbyJoQd4MWLvn8jEDTNBMjCFdf GIsOoVfYjTONuJMG7jfFwZp0X4Ly/UZQgJkKYrDeCRgpjughDHyA9sue3lWF4PSfnVHe UtnS9tnsBj005cjeqhNN4KT105ikOA/cdxRf2afJlPlIqoXfY8dRxr75b6ZmMu6pUGIC hgcrmIinxDF3Wa3jUHcV46Fg7H4wDoz8nfPInEBGc6SR26x5+P8TaYH8wQ5KKF0zZhaX AQm2g6a0WcExx573sY02bD3nu74BYmORbjPGhamyrQPKUMrUMrskUnDivvL6A1StOzF5 PumA== X-Gm-Message-State: APjAAAWmhJLqC1NeXurZCf/9aHw5GraUwqXvNJUJ0uZckDml2sZi3dYY 4Hy4PGQH3rgB9YcNK2Y7xzoJtw== X-Received: by 2002:a17:906:1fc4:: with SMTP id e4mr45550864ejt.81.1558448593084; Tue, 21 May 2019 07:23:13 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id c49sm6427547eda.58.2019.05.21.07.23.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 May 2019 07:23:12 -0700 (PDT) From: Daniel Vetter To: DRI Development Cc: Intel Graphics Development , LKML , Daniel Vetter , Daniel Vetter , Maarten Lankhorst , Bartlomiej Zolnierkiewicz , Hans de Goede , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Yisheng Xie , Konstantin Khorenko , Prarit Bhargava , Kees Cook Subject: [PATCH] fbcon: Remove fbcon_has_exited Date: Tue, 21 May 2019 16:23:04 +0200 Message-Id: <20190521142304.9652-1-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190520082216.26273-10-daniel.vetter@ffwll.ch> References: <20190520082216.26273-10-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is unused code since commit 6104c37094e729f3d4ce65797002112735d49cd1 Author: Daniel Vetter Date: Tue Aug 1 17:32:07 2017 +0200 fbcon: Make fbcon a built-time depency for fbdev when fbcon was made a compile-time static dependency of fbdev. We can't exit fbcon anymore without exiting fbdev first, which only works if all fbdev drivers have unloaded already. Hence this is all dead code. v2: I missed that fbcon_exit is also called from con_deinit stuff, and there fbcon_has_exited prevents double-cleanup. But we can fix that by properly resetting con2fb_map[] to all -1, which is used everywhere else to indicate "no fb_info allocate to this console". With that change the double-cleanup (which resulted in a module refcount underflow, among other things) is prevented. Aside: con2fb_map is a signed char, so don't register more than 128 fb_info or hilarity will ensue. v3: CI showed me that I still didn't fully understand what's going on here. The leaked references in con2fb_map have been used upon rebinding the fb console in fbcon_init. It worked because fbdev unregistering still cleaned out con2fb_map, and reset it to info_idx. If the last fbdev driver unregistered, then it also reset info_idx, and unregistered the fbcon driver. Imo that's all a bit fragile, so let's keep the con2fb_map reset to -1, and in fbcon_init pick info_idx if we're starting fresh. That means unbinding and rebinding will cleanse the mapping, but why are you doing that if you want to retain the mapping, so should be fine. Also, I think info_idx == -1 is impossible in fbcon_init - we unregister the fbcon in that case. So catch&warn about that. Signed-off-by: Daniel Vetter Cc: Maarten Lankhorst Cc: Bartlomiej Zolnierkiewicz Cc: Daniel Vetter Cc: Hans de Goede Cc: "Noralf Trønnes" Cc: Yisheng Xie Cc: Konstantin Khorenko Cc: Prarit Bhargava Cc: Kees Cook --- drivers/video/fbdev/core/fbcon.c | 39 +++++--------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index 5424051c8e1a..622d336cfc81 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -112,7 +112,6 @@ static int softback_lines; static int first_fb_vc; static int last_fb_vc = MAX_NR_CONSOLES - 1; static int fbcon_is_default = 1; -static int fbcon_has_exited; static int primary_device = -1; static int fbcon_has_console_bind; @@ -1050,7 +1049,6 @@ static const char *fbcon_startup(void) info->var.bits_per_pixel); fbcon_add_cursor_timer(info); - fbcon_has_exited = 0; return display_desc; } @@ -1064,9 +1062,13 @@ static void fbcon_init(struct vc_data *vc, int init) int logo = 1, new_rows, new_cols, rows, cols, charcnt = 256; int cap, ret; - if (info_idx == -1 || info == NULL) + if (WARN_ON(info_idx == -1)) return; + if (con2fb_map[vc->vc_num] == -1) + con2fb_map[vc->vc_num] = info_idx; + + info = registered_fb[con2fb_map[vc->vc_num]]; cap = info->flags; if (logo_shown < 0 && console_loglevel <= CONSOLE_LOGLEVEL_QUIET) @@ -3336,14 +3338,6 @@ static int fbcon_event_notify(struct notifier_block *self, struct fb_blit_caps *caps; int idx, ret = 0; - /* - * ignore all events except driver registration and deregistration - * if fbcon is not active - */ - if (fbcon_has_exited && !(action == FB_EVENT_FB_REGISTERED || - action == FB_EVENT_FB_UNREGISTERED)) - goto done; - switch(action) { case FB_EVENT_SUSPEND: fbcon_suspended(info); @@ -3396,7 +3390,6 @@ static int fbcon_event_notify(struct notifier_block *self, fbcon_remap_all(idx); break; } -done: return ret; } @@ -3443,9 +3436,6 @@ static ssize_t store_rotate(struct device *device, int rotate, idx; char **last = NULL; - if (fbcon_has_exited) - return count; - console_lock(); idx = con2fb_map[fg_console]; @@ -3468,9 +3458,6 @@ static ssize_t store_rotate_all(struct device *device, int rotate, idx; char **last = NULL; - if (fbcon_has_exited) - return count; - console_lock(); idx = con2fb_map[fg_console]; @@ -3491,9 +3478,6 @@ static ssize_t show_rotate(struct device *device, struct fb_info *info; int rotate = 0, idx; - if (fbcon_has_exited) - return 0; - console_lock(); idx = con2fb_map[fg_console]; @@ -3514,9 +3498,6 @@ static ssize_t show_cursor_blink(struct device *device, struct fbcon_ops *ops; int idx, blink = -1; - if (fbcon_has_exited) - return 0; - console_lock(); idx = con2fb_map[fg_console]; @@ -3543,9 +3524,6 @@ static ssize_t store_cursor_blink(struct device *device, int blink, idx; char **last = NULL; - if (fbcon_has_exited) - return count; - console_lock(); idx = con2fb_map[fg_console]; @@ -3668,9 +3646,6 @@ static void fbcon_exit(void) struct fb_info *info; int i, j, mapped; - if (fbcon_has_exited) - return; - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER if (deferred_takeover) { dummycon_unregister_output_notifier(&fbcon_output_nb); @@ -3695,7 +3670,7 @@ static void fbcon_exit(void) for (j = first_fb_vc; j <= last_fb_vc; j++) { if (con2fb_map[j] == i) { mapped = 1; - break; + con2fb_map[j] = -1; } } @@ -3718,8 +3693,6 @@ static void fbcon_exit(void) info->queue.func = NULL; } } - - fbcon_has_exited = 1; } void __init fb_console_init(void) -- 2.20.1