From: Sam Ravnborg <sam@ravnborg.org>
To: DRI Development <dri-devel@lists.freedesktop.org>,
linux-fbdev@vger.kernel.org, Du Cheng <ducheng2@gmail.com>,
Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
Intel Graphics Development <intel-gfx@lists.freedesktop.org>,
LKML <linux-kernel@vger.kernel.org>,
Claudio Suarez <cssk@net-c.es>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Daniel Vetter <daniel.vetter@intel.com>
Subject: Re: [Intel-gfx] [PATCH 19/21] fbcon: Maintain a private array of fb_info
Date: Tue, 8 Feb 2022 19:55:26 +0100 [thread overview]
Message-ID: <YgK8nugB7HO2d6r1@ravnborg.org> (raw)
In-Reply-To: <YgJ4MC1IJL7AOgSK@phenom.ffwll.local>
Hi Daniel,
On Tue, Feb 08, 2022 at 03:03:28PM +0100, Daniel Vetter wrote:
> On Fri, Feb 04, 2022 at 09:15:40PM +0100, Sam Ravnborg wrote:
> > Hi Daniel,
> >
> > On Mon, Jan 31, 2022 at 10:05:50PM +0100, Daniel Vetter wrote:
> > > Accessing the one in fbmem.c without taking the right locks is a bad
> > > idea. Instead maintain our own private copy, which is fully protected
> > > by console_lock() (like everything else in fbcon.c). That copy is
> > > serialized through fbcon_fb_registered/unregistered() calls.
> >
> > I fail to see why we can make a private copy of registered_fb
> > just like that - are they not somehow shared between fbcon and fbmem.
> > So when fbmem updates it, then fbcon will use the entry or such?
> >
> > I guess I am just ignorant of how registered_fb is used - but please
> > explain.
>
> The private copy is protected under console_lock, and hence safe to access
> from fbcon.c code.
>
> The main registered_fb array is protected by a different mutex, so we
> could indeed end up with hilarious corruption because the value is
> inconsistent while we try to access it (e.g. we check for !NULL, but later
> on gcc decides to reload the value and now it's suddenly become NULL and
> we blow up).
>
> The two are synchronized by fbmem.c calling fbcon_register/unregister, so
> aside from the different locks if there's no race going on, they will
> always be identical.
IT was this part that I missed, and it is already spelled out in the
commit message.
>
> Other option would be to roll out get_fb_info() to fbcon.c, but since
> fbcon.c is fully protected by console_lock that would add complexity in
> the code flow that we don't really need. And we'd have to wire fb_info
> through all call chains, since the right way to use get_fb_info is to look
> it up once and then only drop it when your callback has finished.
>
> Since the current code just assume it's all protected by console_lock and
> we never drop that during a callback this would mean major surgery and
> essentially refactoring all of fbcon.c to only access the fbcon stuff
> through fb_info, i.e. to get rid of _all_ the global arrays we have more
> or less. I'm not volunteering for that (despite that really this would be
> the right thing to do if we'd have infinite engineering time).
>
> Ack with that explainer added to the commit message?
I consider the current commit message fine - it helps when you actually
read it.
Acked-by: Sam Ravnborg <sam@ravnborg.org>
WARNING: multiple messages have this Message-ID (diff)
From: Sam Ravnborg <sam@ravnborg.org>
To: DRI Development <dri-devel@lists.freedesktop.org>,
linux-fbdev@vger.kernel.org, Du Cheng <ducheng2@gmail.com>,
Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
Intel Graphics Development <intel-gfx@lists.freedesktop.org>,
LKML <linux-kernel@vger.kernel.org>,
Claudio Suarez <cssk@net-c.es>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Daniel Vetter <daniel.vetter@intel.com>
Subject: Re: [PATCH 19/21] fbcon: Maintain a private array of fb_info
Date: Tue, 8 Feb 2022 19:55:26 +0100 [thread overview]
Message-ID: <YgK8nugB7HO2d6r1@ravnborg.org> (raw)
In-Reply-To: <YgJ4MC1IJL7AOgSK@phenom.ffwll.local>
Hi Daniel,
On Tue, Feb 08, 2022 at 03:03:28PM +0100, Daniel Vetter wrote:
> On Fri, Feb 04, 2022 at 09:15:40PM +0100, Sam Ravnborg wrote:
> > Hi Daniel,
> >
> > On Mon, Jan 31, 2022 at 10:05:50PM +0100, Daniel Vetter wrote:
> > > Accessing the one in fbmem.c without taking the right locks is a bad
> > > idea. Instead maintain our own private copy, which is fully protected
> > > by console_lock() (like everything else in fbcon.c). That copy is
> > > serialized through fbcon_fb_registered/unregistered() calls.
> >
> > I fail to see why we can make a private copy of registered_fb
> > just like that - are they not somehow shared between fbcon and fbmem.
> > So when fbmem updates it, then fbcon will use the entry or such?
> >
> > I guess I am just ignorant of how registered_fb is used - but please
> > explain.
>
> The private copy is protected under console_lock, and hence safe to access
> from fbcon.c code.
>
> The main registered_fb array is protected by a different mutex, so we
> could indeed end up with hilarious corruption because the value is
> inconsistent while we try to access it (e.g. we check for !NULL, but later
> on gcc decides to reload the value and now it's suddenly become NULL and
> we blow up).
>
> The two are synchronized by fbmem.c calling fbcon_register/unregister, so
> aside from the different locks if there's no race going on, they will
> always be identical.
IT was this part that I missed, and it is already spelled out in the
commit message.
>
> Other option would be to roll out get_fb_info() to fbcon.c, but since
> fbcon.c is fully protected by console_lock that would add complexity in
> the code flow that we don't really need. And we'd have to wire fb_info
> through all call chains, since the right way to use get_fb_info is to look
> it up once and then only drop it when your callback has finished.
>
> Since the current code just assume it's all protected by console_lock and
> we never drop that during a callback this would mean major surgery and
> essentially refactoring all of fbcon.c to only access the fbcon stuff
> through fb_info, i.e. to get rid of _all_ the global arrays we have more
> or less. I'm not volunteering for that (despite that really this would be
> the right thing to do if we'd have infinite engineering time).
>
> Ack with that explainer added to the commit message?
I consider the current commit message fine - it helps when you actually
read it.
Acked-by: Sam Ravnborg <sam@ravnborg.org>
next prev parent reply other threads:[~2022-02-08 18:55 UTC|newest]
Thread overview: 241+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-31 21:05 [Intel-gfx] [PATCH 00/21] some fbcon patches, mostly locking Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` [Intel-gfx] [PATCH 01/21] MAINTAINERS: Add entry for fbdev core Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-01 10:19 ` [Intel-gfx] " Thomas Zimmermann
2022-02-01 10:19 ` Thomas Zimmermann
2022-02-01 10:19 ` Thomas Zimmermann
2022-02-01 10:45 ` [Intel-gfx] " Greg Kroah-Hartman
2022-02-01 10:45 ` Greg Kroah-Hartman
2022-02-01 10:45 ` Greg Kroah-Hartman
2022-02-01 10:32 ` [Intel-gfx] " Helge Deller
2022-02-01 10:32 ` Helge Deller
2022-02-01 10:32 ` Helge Deller
2022-02-01 14:01 ` [Intel-gfx] " Javier Martinez Canillas
2022-02-01 14:01 ` Javier Martinez Canillas
2022-02-01 14:01 ` Javier Martinez Canillas
2022-02-01 14:47 ` [Intel-gfx] " Jani Nikula
2022-02-01 14:47 ` Jani Nikula
2022-02-01 14:47 ` Jani Nikula
2022-02-01 14:54 ` [Intel-gfx] " Geert Uytterhoeven
2022-02-01 14:54 ` Geert Uytterhoeven
2022-02-01 14:54 ` Geert Uytterhoeven
2022-02-01 20:47 ` [Intel-gfx] " Dave Airlie
2022-02-01 20:47 ` Dave Airlie
2022-02-01 20:47 ` Dave Airlie
2022-02-02 11:10 ` [Intel-gfx] " Daniel Stone
2022-02-02 11:10 ` Daniel Stone
2022-02-02 11:10 ` Daniel Stone
2022-02-02 11:18 ` [Intel-gfx] " Tomi Valkeinen
2022-02-02 11:18 ` Tomi Valkeinen
2022-02-02 11:18 ` Tomi Valkeinen
2022-02-02 11:31 ` [Intel-gfx] " Maxime Ripard
2022-02-02 11:31 ` Maxime Ripard
2022-02-02 11:31 ` Maxime Ripard
2022-02-02 13:48 ` [Intel-gfx] " Alex Deucher
2022-02-02 13:48 ` Alex Deucher
2022-02-02 13:48 ` Alex Deucher
2022-02-03 20:25 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 20:25 ` Sam Ravnborg
2022-02-03 20:25 ` Sam Ravnborg
2022-02-08 14:12 ` [Intel-gfx] " Daniel Vetter
2022-02-08 14:12 ` Daniel Vetter
2022-02-08 14:12 ` Daniel Vetter
2022-01-31 21:05 ` [Intel-gfx] [PATCH 02/21] fbcon: Resurrect fbcon accelerated scrolling code Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` [Intel-gfx] [PATCH 03/21] fbcon: Restore fbcon scrolling acceleration Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-01 10:16 ` [Intel-gfx] " Helge Deller
2022-02-01 10:16 ` Helge Deller
2022-02-01 10:16 ` Helge Deller
2022-02-01 10:17 ` [Intel-gfx] " Helge Deller
2022-02-01 10:17 ` Helge Deller
2022-02-01 10:17 ` Helge Deller
2022-02-01 10:36 ` [Intel-gfx] " Daniel Vetter
2022-02-01 10:36 ` Daniel Vetter
2022-02-01 10:36 ` Daniel Vetter
2022-02-01 11:01 ` [Intel-gfx] " Helge Deller
2022-02-01 11:01 ` Helge Deller
2022-02-01 11:01 ` Helge Deller
2022-02-01 13:45 ` [Intel-gfx] " Daniel Vetter
2022-02-01 13:45 ` Daniel Vetter
2022-02-01 13:45 ` Daniel Vetter
2022-02-01 14:52 ` [Intel-gfx] " Helge Deller
2022-02-01 14:52 ` Helge Deller
2022-02-01 14:52 ` Helge Deller
2022-02-01 16:30 ` [Intel-gfx] " Daniel Vetter
2022-02-01 16:30 ` Daniel Vetter
2022-02-01 16:30 ` Daniel Vetter
2022-01-31 21:05 ` [Intel-gfx] [PATCH 04/21] fbcon: delete a few unneeded forward decl Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-03 20:30 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 20:30 ` Sam Ravnborg
2022-02-03 20:30 ` Sam Ravnborg
2022-02-04 10:00 ` [Intel-gfx] " Geert Uytterhoeven
2022-02-04 10:00 ` Geert Uytterhoeven
2022-02-04 10:00 ` Geert Uytterhoeven
2022-01-31 21:05 ` [Intel-gfx] [PATCH 05/21] fbcon: Introduce wrapper for console->fb_info lookup Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-03 21:25 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 21:25 ` Sam Ravnborg
2022-02-03 21:25 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 06/21] fbcon: delete delayed loading code Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-03 20:45 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 20:45 ` Sam Ravnborg
2022-02-03 20:45 ` Sam Ravnborg
2022-02-08 13:42 ` [Intel-gfx] " Daniel Vetter
2022-02-08 13:42 ` Daniel Vetter
2022-02-08 13:42 ` Daniel Vetter
2022-02-08 18:09 ` [Intel-gfx] " Sam Ravnborg
2022-02-08 18:09 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 07/21] fbdev/sysfs: Fix locking Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-03 21:27 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 21:27 ` Sam Ravnborg
2022-02-03 21:27 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 08/21] fbcon: Use delayed work for cursor Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` [Intel-gfx] [PATCH 09/21] fbcon: Replace FBCON_FLAGS_INIT with a boolean Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-01 10:37 ` [Intel-gfx] " Thomas Zimmermann
2022-02-01 10:37 ` Thomas Zimmermann
2022-02-01 10:37 ` Thomas Zimmermann
2022-02-03 13:47 ` [Intel-gfx] " Geert Uytterhoeven
2022-02-03 13:47 ` Geert Uytterhoeven
2022-02-03 13:47 ` Geert Uytterhoeven
2022-02-03 21:30 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 21:30 ` Sam Ravnborg
2022-02-03 21:30 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 10/21] fb: Delete fb_info->queue Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-03 21:31 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 21:31 ` Sam Ravnborg
2022-02-03 21:31 ` Sam Ravnborg
2022-02-08 13:46 ` [Intel-gfx] " Daniel Vetter
2022-02-08 13:46 ` Daniel Vetter
2022-02-08 13:46 ` Daniel Vetter
2022-02-08 18:22 ` [Intel-gfx] " Sam Ravnborg
2022-02-08 18:22 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 11/21] fbcon: Extract fbcon_open/release helpers Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-03 21:15 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 21:15 ` Sam Ravnborg
2022-02-03 21:15 ` Sam Ravnborg
2022-02-03 21:32 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 21:32 ` Sam Ravnborg
2022-02-08 13:48 ` [Intel-gfx] " Daniel Vetter
2022-02-08 13:48 ` Daniel Vetter
2022-02-08 13:48 ` Daniel Vetter
2022-02-08 18:24 ` [Intel-gfx] " Sam Ravnborg
2022-02-08 18:24 ` Sam Ravnborg
2022-02-08 19:51 ` [Intel-gfx] " Daniel Vetter
2022-02-08 19:51 ` Daniel Vetter
2022-02-08 19:51 ` Daniel Vetter
2022-01-31 21:05 ` [Intel-gfx] [PATCH 12/21] fbcon: Ditch error handling for con2fb_release_oldinfo Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-03 21:16 ` [Intel-gfx] " Sam Ravnborg
2022-02-03 21:16 ` Sam Ravnborg
2022-02-03 21:16 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 13/21] fbcon: move more common code into fb_open() Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 23:31 ` [Intel-gfx] " kernel test robot
2022-01-31 23:31 ` kernel test robot
2022-01-31 23:31 ` kernel test robot
2022-02-04 19:35 ` Sam Ravnborg
2022-02-04 19:35 ` Sam Ravnborg
2022-02-04 19:35 ` Sam Ravnborg
2022-02-08 13:53 ` [Intel-gfx] " Daniel Vetter
2022-02-08 13:53 ` Daniel Vetter
2022-02-08 13:53 ` Daniel Vetter
2022-02-08 18:25 ` [Intel-gfx] " Sam Ravnborg
2022-02-08 18:25 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 14/21] fbcon: use lock_fb_info in fbcon_open/release Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-04 19:39 ` [Intel-gfx] " Sam Ravnborg
2022-02-04 19:39 ` Sam Ravnborg
2022-02-04 19:39 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 15/21] fbcon: Consistently protect deferred_takeover with console_lock() Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-04 19:45 ` [Intel-gfx] " Sam Ravnborg
2022-02-04 19:45 ` Sam Ravnborg
2022-02-04 19:45 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 16/21] fbcon: Move console_lock for register/unlink/unregister Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-04 19:54 ` [Intel-gfx] " Sam Ravnborg
2022-02-04 19:54 ` Sam Ravnborg
2022-02-04 19:54 ` Sam Ravnborg
2022-02-08 13:56 ` [Intel-gfx] " Daniel Vetter
2022-02-08 13:56 ` Daniel Vetter
2022-02-08 13:56 ` Daniel Vetter
2022-01-31 21:05 ` [Intel-gfx] [PATCH 17/21] fbcon: Move more code into fbcon_release Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-04 19:55 ` [Intel-gfx] " Sam Ravnborg
2022-02-04 19:55 ` Sam Ravnborg
2022-02-04 19:55 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 18/21] fbcon: untangle fbcon_exit Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-04 20:06 ` [Intel-gfx] " Sam Ravnborg
2022-02-04 20:06 ` Sam Ravnborg
2022-02-04 20:06 ` Sam Ravnborg
2022-02-08 13:58 ` [Intel-gfx] " Daniel Vetter
2022-02-08 13:58 ` Daniel Vetter
2022-02-08 13:58 ` Daniel Vetter
2022-02-08 18:27 ` [Intel-gfx] " Sam Ravnborg
2022-02-08 18:27 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 19/21] fbcon: Maintain a private array of fb_info Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-04 20:15 ` [Intel-gfx] " Sam Ravnborg
2022-02-04 20:15 ` Sam Ravnborg
2022-02-04 20:15 ` Sam Ravnborg
2022-02-08 14:03 ` [Intel-gfx] " Daniel Vetter
2022-02-08 14:03 ` Daniel Vetter
2022-02-08 14:03 ` Daniel Vetter
2022-02-08 18:55 ` Sam Ravnborg [this message]
2022-02-08 18:55 ` Sam Ravnborg
2022-01-31 21:05 ` [Intel-gfx] [PATCH 20/21] Revert "fbdev: Prevent probing generic drivers if a FB is already registered" Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` [Intel-gfx] [PATCH 21/21] fbdev: Make registered_fb[] private to fbmem.c Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-01-31 21:05 ` Daniel Vetter
2022-02-01 8:13 ` [Intel-gfx] " kernel test robot
2022-02-01 8:13 ` kernel test robot
2022-02-01 8:13 ` kernel test robot
2022-02-04 8:30 ` Geert Uytterhoeven
2022-02-04 8:30 ` Geert Uytterhoeven
2022-02-04 8:30 ` Geert Uytterhoeven
2022-02-08 14:04 ` [Intel-gfx] " Daniel Vetter
2022-02-08 14:04 ` Daniel Vetter
2022-02-08 14:04 ` Daniel Vetter
2022-02-08 20:59 ` [Intel-gfx] " Daniel Vetter
2022-02-08 20:59 ` Daniel Vetter
2022-02-08 19:00 ` [Intel-gfx] " Sam Ravnborg
2022-02-08 19:00 ` Sam Ravnborg
2022-02-08 19:00 ` Sam Ravnborg
2022-02-08 20:56 ` [Intel-gfx] " Daniel Vetter
2022-02-08 20:56 ` Daniel Vetter
2022-02-08 20:56 ` Daniel Vetter
2022-01-31 21:16 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for some fbcon patches, mostly locking Patchwork
2022-01-31 21:19 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-01-31 21:51 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YgK8nugB7HO2d6r1@ravnborg.org \
--to=sam@ravnborg.org \
--cc=cssk@net-c.es \
--cc=daniel.vetter@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=ducheng2@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=penguin-kernel@i-love.sakura.ne.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.