All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Andrzej Hajda <a.hajda@samsung.com>
Cc: tomi.valkeinen@ti.com, dri-devel@lists.freedesktop.org,
	Jyri Sarha <jsarha@ti.com>
Subject: Re: [PATCH] drm/drm_bridge: adjust bridge module's refcount
Date: Wed, 30 Nov 2016 11:39:34 +0200	[thread overview]
Message-ID: <3478034.JaDBSRZ5xn@avalon> (raw)
In-Reply-To: <cd94ffa6-edb4-c509-a133-8f4c355ce72a@samsung.com>

Hi Andrzej,

On Wednesday 30 Nov 2016 10:26:24 Andrzej Hajda wrote:
> On 30.11.2016 09:16, Laurent Pinchart wrote:
> > On Wednesday 30 Nov 2016 09:11:56 Andrzej Hajda wrote:
> >> On 29.11.2016 22:12, Jyri Sarha wrote:
> >>> Store the module that provides the bridge and adjust its refcount
> >>> accordingly. The bridge module unload should not be allowed while the
> >>> bridge is attached.
> >> 
> >> Module refcounting as a way of preventing driver from unbinding
> >> is quite popular, but as other developers said already is incorrect
> >> solution - it does not really prevent from unbinding and is a hack.
> > 
> > Absolutely, module refcounting must not be used as a way to prevent
> > unbinding, but it's still necessary to prevent functions from
> > disappearing. The unbinding race has to be fixed through reference
> > counting to prevent objects from being freed, but if an object contains
> > function pointers that refer to code part of a module, object refcounting
> > won't prevent the code from being removed. Only module refcounting helps
> > there. The two techniques are thus complementary.
>
> It is not true. There at least two existing and proper solutions, which
> do not use refcounting:
>
> 1. components - if you put the bridge into component framework, it will
> bring down drm device before detaching the bridge.

Don't get me started on that one. The component concept is fine, its 
implementation less so. It's on my (long) to-do list of things to fix.

> 2. proper callbacks from the provider (bridge in this case) to the
> consumer (encoder or drm device). Such callbacks exists for example in
> case of MIPI-DSI panels attached to encoders. On removal
> panel calls mipi_dsi_detach, which calls .detach ops in associated
> encoder, encoder safely disables the video pipeline and the panel
> continue its removal.

*safely* is the keyword here. I have yet to see a solution based on a removal 
notification callback that is both race-free and easy to use in drivers.

> Of course both solutions have some pitfalls, the first one removes whole
> drmdev instead of disabling one pipeline,

The DRM subsystem doesn't have hotplug support (except for displayed connected 
to connectors of course), let alone hot-unplug support. That should be fixed, 
but will be a very long term goal.

Regardless of that, the component framework also relies on a removal 
notification callback, which has the same drawback as the DSI one. Handling 
this in a race-free way is complex. Seeing how drivers fail at simple things 
(such as calling to drm_bridge_detach(), which all but one driver fail to do), 
I'd be surprised if even a single driver got the component unbind handling 
right.

> the second one is specific for DSI bus, but they clearly shows refcounting
> is not the only option.

Sorry, I meant the only working and (more or less) simple option ;-)

-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2016-11-30  9:39 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20161129211315epcas3p2a805abe8449509312f481ab7dcea96ef@epcas3p2.samsung.com>
2016-11-29 21:12 ` [PATCH] drm/drm_bridge: adjust bridge module's refcount Jyri Sarha
2016-11-29 21:30   ` Jyri Sarha
2016-11-29 22:06   ` Laurent Pinchart
2016-11-30  8:13     ` Daniel Vetter
2016-11-30  8:25       ` Laurent Pinchart
2016-11-30  9:12         ` Daniel Vetter
2016-11-30  9:56           ` Laurent Pinchart
2016-11-30 10:55             ` Daniel Vetter
2016-11-30 11:03               ` Laurent Pinchart
2016-11-30 13:09                 ` Daniel Vetter
2016-12-01  7:07                   ` Andrzej Hajda
2016-12-01  7:18                     ` Daniel Vetter
2016-12-01 13:22                       ` Andrzej Hajda
2016-12-01 15:12                         ` Daniel Vetter
2016-12-02  6:49                           ` Andrzej Hajda
2016-11-30  8:32     ` Jyri Sarha
2016-11-30  8:37       ` Laurent Pinchart
2016-11-30  8:55         ` Jyri Sarha
2016-11-30  9:03           ` Laurent Pinchart
2016-11-30  9:13             ` Jyri Sarha
2016-11-30  9:30               ` Laurent Pinchart
2016-11-30  8:11   ` Andrzej Hajda
2016-11-30  8:16     ` Laurent Pinchart
2016-11-30  9:26       ` Andrzej Hajda
2016-11-30  9:39         ` Laurent Pinchart [this message]
2016-12-01  6:50           ` Andrzej Hajda

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=3478034.JaDBSRZ5xn@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=a.hajda@samsung.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jsarha@ti.com \
    --cc=tomi.valkeinen@ti.com \
    /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.