All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: Andrzej Hajda <a.hajda@samsung.com>,
	Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Cc: "vegard.nossum@gmail.com" <vegard.nossum@gmail.com>,
	"rafael.j.wysocki" <rafael.j.wysocki@intel.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	ksummit-discuss@lists.linuxfoundation.org,
	Valentin Rothberg <valentinrothberg@gmail.com>
Subject: Re: [Ksummit-discuss] [TECH TOPIC] Addressing complex dependencies and semantics (v2)
Date: Mon, 1 Aug 2016 17:43:15 +0200	[thread overview]
Message-ID: <f612af4e-ddd1-44e3-9d0a-c7540636351c@metafoo.de> (raw)
In-Reply-To: <579F6C00.502@samsung.com>

On 08/01/2016 05:34 PM, Andrzej Hajda wrote:
> On 08/01/2016 04:54 PM, Lars-Peter Clausen wrote:
>> On 08/01/2016 04:44 PM, Andrzej Hajda wrote:
>>> On 08/01/2016 03:55 PM, Mauro Carvalho Chehab wrote:
>>>> Em Mon, 1 Aug 2016 15:33:22 +0200
>>>> Lars-Peter Clausen <lars@metafoo.de> escreveu:
>>>>
>>>>> On 08/01/2016 03:21 PM, Hans Verkuil wrote:
>>>>>> On 08/01/2016 03:09 PM, Laurent Pinchart wrote:  
>>>>>>> On Friday 29 Jul 2016 12:13:03 Mark Brown wrote:  
>>>>>>>> On Fri, Jul 29, 2016 at 09:45:55AM +0200, Hans Verkuil wrote:  
>>>>>>>>> My main problem is not so much with deferred probe (esp. for cyclic
>>>>>>>>> dependencies it is a simple method of solving this, and simple is good).
>>>>>>>>> My main problem is that you can't tell the system that driver A needs to
>>>>>>>>> be probed after drivers B, C and D are probed first.
>>>>>>>>>
>>>>>>>>> That would allow us to get rid of v4l2-async.c which is a horrible hack.
>>>>>>>>>
>>>>>>>>> That code allows a bridge driver to wait until all dependent drivers are
>>>>>>>>> probed. This really should be core functionality.
>>>>>>>>>
>>>>>>>>> Do other subsystems do something similar like
>>>>>>>>> drivers/media/v4l2-core/v4l2-async.c? Does anyone know?  
>>>>>>>> ASoC does, it has an explicit card driver to join things together and
>>>>>>>> that just defers probe until everything it needs is present.  This was
>>>>>>>> originally open coded in ASoC but once deferred probe was implemented we
>>>>>>>> converted to that.  
>>>>>>> Asynchronous bindings of components, as done in ASoC, DRM and V4L2, is a 
>>>>>>> problem largely solved (or rather hacked around), but I'm curious to know how 
>>>>>>> ASoC handles device unbinding (due to device removal or manual unbinding 
>>>>>>> through sysfs). With asynchronous binding we can more or less easily wait for 
>>>>>>> all components to be present before creating circular dependencies, but 
>>>>>>> breaking them to implement unbinding is an unsolved problem at least in V4L2.
>>>>>>>  
>>>>>> We need to prevent subdevice drivers from being unbound. It's easy enough to
>>>>>> do that (set suppress_bind_attrs to true), we just never did that. It's been
>>>>>> on my TODO list for ages to make a patch adding that flag...
>>>>>>
>>>>>> You can only unbind bridge drivers. Unbinding subdevs is pointless in general
>>>>>> and should be prohibited. Perhaps in the future with dynamically reconfigurable
>>>>>> video pipelines (FPGA) you want that, but then you need to do a lot of
>>>>>> additional work. For everything we have today we should just set
>>>>>> suppress_bind_attrs to true.  
>>>>> suppress_bind_attrs is the lazy solution and as you pointed out does not
>>>>> work too well for all cases.
>>>> Agreed. 
>>>>
>>>> What we really need is a kind of "usage count" behavior to suppress
>>>> unbinds, e. g. a device driver can be unbound only if any other driver
>>>> using resources on it gets unbind first.
>>>>
>>>> That will solve most of unbind issues at the media subsystem.
>>> When I was investigating issues with unbind sysfs attribute I have found
>>> claim by Greg KH that unbind should be rather unavoidable, like in case
>>> of hw removal - kernel is not able to prevent users from removing usb
>>> device, even if it is in use.
>>>
>>> Assuming the claim is still valid, the only solution I see are callbacks
>>> notifying resource consumers about removal of the resources.
>> There are multiple options.
>>
>> One option, which I think is currently the most used option in the kernel,
>> is to unregister the resource when the provider is removed, but keep the
>> resource object alive as long as there are users. Any further operation on
>> such object will fail with an error. This works to the point where things
>> don't crash, but it wont function in any meaningful way. There is no way to
>> automatically recover if the resource reappears.
> 
> For me it is not a real solution, it is just dirty workaround to just avoid
> invalid pointers. It 'works' only because unbinding is rarely used.
> For example, how the device is supposed to work if its regulator or clock
> disappeared?
> 
>>
>> Other options are as you pointed out notifier callbacks that allows the
>> resource use to be aware that a resource has disappeared and it might adjust
>> and continue to function with limited functionality.
>>
>> Another option is to teach the device core about critical resource
>> dependencies so that a consumer is automatically unbound by the core if any
>> of its resource dependencies are unregistered. The device can also
>> automatically be re-bound once the critical resources re-appear.
> 
> That would be OK only for critical resources.
> 
>>
>> The most likely solution is probably a mixture of all of them.
> 
> If we implement callbacks, we do not need other two 'options'.

Having to manually register callbacks for every resource in every driver
will result in a massive amount of boilerplate code. I'd rather avoid that.
In addition to that doing resource tracking at the framework level will help
with probe ordering.

  reply	other threads:[~2016-08-01 15:43 UTC|newest]

Thread overview: 111+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-27 16:50 [Ksummit-discuss] [TECH TOPIC] Addressing complex dependencies and semantics (v2) Luis R. Rodriguez
2016-07-27 17:26 ` Mark Brown
2016-07-27 17:58   ` Luis R. Rodriguez
2016-07-27 18:03     ` Mark Brown
2016-07-27 19:20       ` Luis R. Rodriguez
2016-07-28  0:54         ` Rafael J. Wysocki
2016-07-28 10:41           ` Laurent Pinchart
2016-07-28 10:54             ` Hans Verkuil
2016-07-28 11:03               ` Laurent Pinchart
2016-07-28 11:46                 ` Jan Kara
2016-07-28 15:16                   ` Mark Brown
2016-07-28 16:00                   ` Laurent Pinchart
2016-08-02  8:32                     ` Jan Kara
2016-08-03 14:17                     ` Alexandre Belloni
2016-07-30  1:59                   ` Steven Rostedt
2016-08-01 13:12                     ` Laurent Pinchart
2016-07-28 20:12                 ` Lars-Peter Clausen
2016-07-28 20:38                   ` Mark Brown
2016-08-01 13:15                   ` Laurent Pinchart
2016-07-28 14:36               ` Rafael J. Wysocki
2016-07-29  7:33             ` Hans Verkuil
2016-08-01 13:03               ` Laurent Pinchart
2016-08-01 13:17                 ` Hans Verkuil
2016-08-04  8:22             ` Jani Nikula
2016-08-04  9:50               ` Greg KH
2016-08-04 10:20                 ` Mark Brown
2016-08-04 10:27                   ` Jani Nikula
2016-08-05  2:59                   ` Rob Herring
2016-08-05  9:01                     ` Arnd Bergmann
2016-08-05 10:54                       ` Greg KH
2016-08-05 11:31                         ` Andrzej Hajda
2016-08-05 11:58                           ` Mark Brown
2016-08-05 13:43                           ` Greg KH
2016-08-05 19:27                         ` Rob Herring
2016-08-09  8:08                 ` Daniel Vetter
2016-08-09  8:17                   ` Greg KH
2016-08-09 12:04                     ` Daniel Vetter
2016-08-04 12:37       ` Geert Uytterhoeven
2016-08-04 15:53         ` Mark Brown
2016-07-28 21:49     ` Lars-Peter Clausen
2016-07-29  3:50       ` Greg KH
2016-07-29  7:45       ` Hans Verkuil
2016-07-29  7:55         ` Lars-Peter Clausen
2016-08-01 13:06           ` Laurent Pinchart
2016-07-29 11:13         ` Mark Brown
2016-08-01 13:09           ` Laurent Pinchart
2016-08-01 13:14             ` Lars-Peter Clausen
2016-08-01 13:19               ` Laurent Pinchart
2016-08-01 13:21             ` Hans Verkuil
2016-08-01 13:26               ` Laurent Pinchart
2016-08-01 13:35                 ` Hans Verkuil
2016-08-01 13:38                   ` Laurent Pinchart
2016-08-01 13:51                     ` Hans Verkuil
2016-08-01 17:15                       ` Laurent Pinchart
2016-08-01 13:33               ` Lars-Peter Clausen
2016-08-01 13:55                 ` Mauro Carvalho Chehab
2016-08-01 14:41                   ` Lars-Peter Clausen
2016-08-01 14:44                   ` Andrzej Hajda
2016-08-01 14:54                     ` Lars-Peter Clausen
2016-08-01 15:20                       ` Mark Brown
2016-08-01 15:34                       ` Andrzej Hajda
2016-08-01 15:43                         ` Lars-Peter Clausen [this message]
2016-08-01 16:18                           ` Andrzej Hajda
2016-08-01 17:06                             ` Mark Brown
2016-08-01 18:21                               ` Lars-Peter Clausen
2016-08-02 11:45                                 ` Andrzej Hajda
2016-08-01 18:33                               ` Andrzej Hajda
2016-08-01 18:48                                 ` Mark Brown
2016-08-01 19:42                                   ` Andrzej Hajda
2016-08-01 20:05                                     ` Lars-Peter Clausen
2016-08-02  8:57                                       ` Takashi Iwai
2016-08-01 17:40                       ` Laurent Pinchart
2016-08-02  7:38                     ` Greg KH
2016-08-01 19:03           ` Luis R. Rodriguez
2016-08-02  0:01             ` Rafael J. Wysocki
2016-08-02  0:56               ` Luis R. Rodriguez
2016-08-02  1:03                 ` Dmitry Torokhov
2016-08-02  8:30                   ` Jiri Kosina
2016-08-02  9:41                 ` Hannes Reinecke
2016-08-02  9:48                   ` Jiri Kosina
2016-08-02 11:50                     ` Takashi Iwai
2016-08-09  9:57             ` Jörg Rödel
2016-08-09 16:08               ` James Bottomley
2016-08-09 16:11                 ` James Bottomley
2016-08-09 16:51                   ` Luis R. Rodriguez
2016-08-09 17:05                     ` David Woodhouse
2016-08-09 17:12                     ` James Bottomley
2016-08-09 16:53                   ` Jörg Rödel
2016-08-09 18:06               ` Luis R. Rodriguez
2016-08-10 15:21                 ` Jörg Rödel
2016-08-10 16:42                   ` Luis R. Rodriguez
2016-08-10 21:37                     ` Jörg Rödel
2016-08-12  7:33               ` Linus Walleij
2016-07-27 18:50 ` Dmitry Torokhov
2016-07-28 10:43 ` Marc Zyngier
2016-07-28 10:51 ` Laurent Pinchart
2016-07-28 23:43   ` Luis R. Rodriguez
2016-08-01 12:44     ` Laurent Pinchart
2016-07-28 11:18 ` Mauro Carvalho Chehab
2016-07-28 11:24   ` Laurent Pinchart
2016-07-28 12:25     ` Mauro Carvalho Chehab
2016-07-28 16:04       ` Laurent Pinchart
2016-07-29  0:00         ` Luis R. Rodriguez
2016-08-01 12:50           ` Laurent Pinchart
2016-08-01 20:32             ` Luis R. Rodriguez
2016-07-29 13:57 ` Andrzej Hajda
2016-09-07 16:40   ` Kevin Hilman
2016-08-01 14:03 ` Marek Szyprowski
2016-11-03 18:43   ` Laurent Pinchart
2016-11-04  6:53     ` Marek Szyprowski
2016-09-08 21:03 ` Frank Rowand

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=f612af4e-ddd1-44e3-9d0a-c7540636351c@metafoo.de \
    --to=lars@metafoo.de \
    --cc=a.hajda@samsung.com \
    --cc=ksummit-discuss@lists.linuxfoundation.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mchehab@osg.samsung.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=valentinrothberg@gmail.com \
    --cc=vegard.nossum@gmail.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.