Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp1838932ybi; Sat, 25 May 2019 10:03:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqzVZBOnbE+88/Udf2zkuQla8Ekd4j1GXGVo0sbmLNvq/MQLEduePJ2ROisRofxm0yEaRMvc X-Received: by 2002:a17:90a:9a8a:: with SMTP id e10mr17444261pjp.109.1558803791990; Sat, 25 May 2019 10:03:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558803791; cv=none; d=google.com; s=arc-20160816; b=C0Ja17LPDERYI6bRsDKfReXCeM278+NRhjXxF9Zsvbq01tI4YjBE5FVpdUBFDiv4Ik frF32pXolHF+QC+gSjIoLEqQGXgIR4xojSTz++NF/d5M3yooDtfJlBi0Ww+XRNR6E3ew 6eY6wc/huMSY6hrbPXGtCNglw1/w7Q2Z5pMIs548nIzKhRJpc8/MVxDJs6pjmYS20KXT z/VzN7ntb9ni4h14pqN8Hv3FO8hWr4TzUd6oimqeXfkzfwCH+okLrcnAtkAh1YKKPDRi OanIO+BGv+4nyKPTK5qCgT2rGqdpMnHYu5w1SdWJAa5vbOrO0CVm6ZzSUVz5dI72c681 4+7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-transfer-encoding:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=dzGx8H+Wcd0NehXExpLAzqAw45zhXHGTaMam6mqXMrw=; b=I1p7X0reELsndRUAI8gsQxdvKcENIBJH37wYrXCiMK0YCe/zNuTQ1JVk0s3Mi4zc4a 6NH3sWAkL9x4CuAMGoNM/ZmRxvETPg/nO1xyJxwJqtXpomDW8rUj9H8Fi4WHwHpfqS8h H1u+13dIV0ugo59rj7ig6k+TtbWJFyluMC5N4Q+3fELQ/gQK7kp7YcvI3bZVU/diy3yp q6yDpIWHteQ7bDA314zj23mJMvJugo1oK2Qzd6ifAYpDATBTThtwcixrIDNMJcgNkS40 G+BggWSISzVt1sEoIBtJy8LNGQPIiWjVRg3hBhscpmuw5bK0sybl1hUbDJZSoPaMx1Nt GxRA== ARC-Authentication-Results: i=1; mx.google.com; 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 f13si9121700pgh.393.2019.05.25.10.02.56; Sat, 25 May 2019 10:03:11 -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; 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 S1727442AbfEYRBC (ORCPT + 99 others); Sat, 25 May 2019 13:01:02 -0400 Received: from asavdk3.altibox.net ([109.247.116.14]:46722 "EHLO asavdk3.altibox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727249AbfEYRBB (ORCPT ); Sat, 25 May 2019 13:01:01 -0400 Received: from ravnborg.org (unknown [158.248.194.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by asavdk3.altibox.net (Postfix) with ESMTPS id 3D9D92013A; Sat, 25 May 2019 19:00:56 +0200 (CEST) Date: Sat, 25 May 2019 19:00:54 +0200 From: Sam Ravnborg To: Daniel Vetter Cc: LKML , Bartlomiej Zolnierkiewicz , Intel Graphics Development , DRI Development , =?utf-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= , Hans de Goede , Mikulas Patocka , Daniel Vetter , Peter Rosin Subject: Re: [PATCH 25/33] fbmem: pull fbcon_fb_blanked out of fb_blank Message-ID: <20190525170054.GA9076@ravnborg.org> References: <20190524085354.27411-1-daniel.vetter@ffwll.ch> <20190524085354.27411-26-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190524085354.27411-26-daniel.vetter@ffwll.ch> User-Agent: Mutt/1.10.1 (2018-07-13) X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=dqr19Wo4 c=1 sm=1 tr=0 a=UWs3HLbX/2nnQ3s7vZ42gw==:117 a=UWs3HLbX/2nnQ3s7vZ42gw==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=IkcTkHD0fZMA:10 a=QyXUC8HyAAAA:8 a=hD80L64hAAAA:8 a=20KFwNOVAAAA:8 a=pGLkceISAAAA:8 a=e5mUnYsNAAAA:8 a=LPur_4bgEY2nh4B5VZsA:9 a=QEXdDO2ut3YA:10 a=Vxmtnl_E_bksehYqCbjh:22 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Daniel. On Fri, May 24, 2019 at 10:53:46AM +0200, Daniel Vetter wrote: > There's a callchain of: > > fbcon_fb_blaned -> do_(un)blank_screen -> consw->con_blank ^^^^^^ Spelling error - as this is a callchain it would be good to have it fixed. Patch itself looks fine. Sam > -> fbcon_blank -> fb_blank > > Things don't go horribly wrong because the BKL console_lock safes the > day, but that's about it. And the seeming recursion is broken in 2 > ways: > - Starting from the fbdev ioctl we set FBINFO_MISC_USEREVENT, which > tells the fbcon_blank code to not call fb_blank. This was required > to not deadlock when recursing on the fb_notifier_chain mutex. > - Starting from the con_blank hook we're getting saved by the > console_blanked checks in do_blank/unblank_screen. Or at least > that's my theory. > > Anyway, recursion isn't awesome, so let's stop it. Breaking the > recursion avoids the need to be in the FBINFO_MISC_USEREVENT critical > section, so lets move it out of that too. > > The astute reader will notice that fb_blank seems to require > lock_fb_info(), which the fbcon code seems to ignore. I have no idea > how to fix that problem, so let's keep ignoring it. > > v2: I forgot the sysfs blanking code. > > Signed-off-by: Daniel Vetter > Cc: Daniel Vetter > Cc: Bartlomiej Zolnierkiewicz > Cc: "Michał Mirosław" > Cc: Peter Rosin > Cc: Hans de Goede > Cc: Mikulas Patocka > Cc: Rob Clark > --- > drivers/video/fbdev/core/fbmem.c | 4 +++- > drivers/video/fbdev/core/fbsysfs.c | 8 ++++++-- > 2 files changed, 9 insertions(+), 3 deletions(-) > > diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c > index 9366fbe99a58..d6713dce9e31 100644 > --- a/drivers/video/fbdev/core/fbmem.c > +++ b/drivers/video/fbdev/core/fbmem.c > @@ -1068,7 +1068,6 @@ fb_blank(struct fb_info *info, int blank) > event.data = ␣ > > early_ret = fb_notifier_call_chain(FB_EARLY_EVENT_BLANK, &event); > - fbcon_fb_blanked(info, blank); > > if (info->fbops->fb_blank) > ret = info->fbops->fb_blank(blank, info); > @@ -1198,6 +1197,9 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, > info->flags |= FBINFO_MISC_USEREVENT; > ret = fb_blank(info, arg); > info->flags &= ~FBINFO_MISC_USEREVENT; > + > + /* might again call into fb_blank */ > + fbcon_fb_blanked(info, arg); > unlock_fb_info(info); > console_unlock(); > break; > diff --git a/drivers/video/fbdev/core/fbsysfs.c b/drivers/video/fbdev/core/fbsysfs.c > index 5f329278e55f..252d4f52d2a5 100644 > --- a/drivers/video/fbdev/core/fbsysfs.c > +++ b/drivers/video/fbdev/core/fbsysfs.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -305,12 +306,15 @@ static ssize_t store_blank(struct device *device, > { > struct fb_info *fb_info = dev_get_drvdata(device); > char *last = NULL; > - int err; > + int err, arg; > > + arg = simple_strtoul(buf, &last, 0); > console_lock(); > fb_info->flags |= FBINFO_MISC_USEREVENT; > - err = fb_blank(fb_info, simple_strtoul(buf, &last, 0)); > + err = fb_blank(fb_info, arg); > fb_info->flags &= ~FBINFO_MISC_USEREVENT; > + /* might again call into fb_blank */ > + fbcon_fb_blanked(fb_info, arg); > console_unlock(); > if (err < 0) > return err; > -- > 2.20.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel