From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: "Luis R. Rodriguez" <mcgrof@kernel.org>
Cc: Oded Gabbay <oded.gabbay@gmail.com>,
ksummit-discuss@lists.linuxfoundation.org,
Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
"vegard.nossum@gmail.com" <vegard.nossum@gmail.com>,
"rafael.j.wysocki" <rafael.j.wysocki@intel.com>,
Cristina Moraru <cristina.moraru09@gmail.com>,
Roberto Di Cosmo <roberto@dicosmo.org>,
Valentin Rothberg <valentinrothberg@gmail.com>,
Stefano Zacchiroli <zack@upsilon.cc>,
Marek Szyprowski <m.szyprowski@samsung.com>
Subject: Re: [Ksummit-discuss] [TECH TOPIC] Addressing complex dependencies and semantics (v2)
Date: Tue, 09 Aug 2016 10:12:04 -0700 [thread overview]
Message-ID: <1470762724.2299.56.camel@HansenPartnership.com> (raw)
In-Reply-To: <20160809165105.GB3296@wotan.suse.de>
On Tue, 2016-08-09 at 18:51 +0200, Luis R. Rodriguez wrote:
> On Tue, Aug 09, 2016 at 09:11:00AM -0700, James Bottomley wrote:
> > On Tue, 2016-08-09 at 09:08 -0700, James Bottomley wrote:
> > > On Tue, 2016-08-09 at 11:57 +0200, Jörg Rödel wrote:
> > > > On Mon, Aug 01, 2016 at 09:03:09PM +0200, Luis R. Rodriguez
> > > > wrote:
> > > > > Another piece of code that deals with complex dependencies
> > > > > I've recently ventured into was the x86 IOMMU stuff. The
> > > > > complexities here are both at the built-in init level and
> > > > > also later at probe.
> > > >
> > > > Yeah, everything is fine when both, AMD-KFD and the IOMMUv2
> > > > driver are built as modules, as the order of loading these
> > > > modules is preserved by symbol dependencies. But when they are
> > > > built-in these modules also need to be initialized in the right
> > > > order, otherwise the KFD-driver will call into an uninialized
> > > > IOMMU driver and crashes the system. Long-term this will be
> > > > fixed by always build-in the IOMMU-parts (when they are merged
> > > > with the Intel-SVM support), but in general not being able to
> > > > express dependencies between build-in modules remains to be a
> > > > problem.
> > >
> > > Have you considered using transport templates or attribute
> > > containers? That's how we manage the complex hierarchies in
> > > ATA/SCSI. If you look we have a complex dependency
> > >
> > > ata_dev->transport->ata->scsi (or in SCSI dev->transport->scsi)
> > >
> > > Our chains are much more complex than this because I've stopped
> > > before probing begins, which is async.
> > >
> > > The basic way we cope is that both ata and scsi use
> > > subsystem_init for their exclusive resources, meaning they're
> > > order independent. The probes a kicked off by the hardware
> > > modules, so they're done by module_init (meaning after
> > > subsystem_init) again, order independent. The rest of the
> > > dependent initialisations is done within the transport/attribute
> > > code, meaning not until a consumer is actually instantiated.
> > >
> > > The way attributes/transport classes work is that they're
> > > actually attached to the devices that you instantiate
> >
> > Hmm, pressed send to early. However, the basic point is that you
> > can finesse most of the "dependency" issues by separating the
> > initalisations into a subsystem part (which is guaranteed before
> > any device is probed) and a device part, which can be done at
> > device instantiation time.
>
> This sounds pretty great, what other subsystems use it and most
> importantly, why haven't others picked this up yet ?
The transport classes? Only SCSI and its dependent subsystems, as far
as I'm aware. It's been around for ages (2004, I think; there's an OLS
paper on it) but hitherto only we had the complex dependency problem,
particularly with the driver/transport separation that this was
designed for.
However, there may be many other subsystems that use the technique in a
different way. The basics are the theorem of separability: any set of
separable problems can be made arbitrarily complex if you look at them
in the wrong way. The corollary being that any hugely complex
interdependency may be rendered unnecessary by simply viewing the
problem in a different way. It turns out that most of our complex
dependency issues can be made to go away if we look at stuff in the
right way.
James
next prev parent reply other threads:[~2016-08-09 17:12 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-27 16:50 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
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 [this message]
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=1470762724.2299.56.camel@HansenPartnership.com \
--to=james.bottomley@hansenpartnership.com \
--cc=cristina.moraru09@gmail.com \
--cc=ksummit-discuss@lists.linuxfoundation.org \
--cc=m.szyprowski@samsung.com \
--cc=mcgrof@kernel.org \
--cc=mchehab@osg.samsung.com \
--cc=oded.gabbay@gmail.com \
--cc=rafael.j.wysocki@intel.com \
--cc=roberto@dicosmo.org \
--cc=valentinrothberg@gmail.com \
--cc=vegard.nossum@gmail.com \
--cc=zack@upsilon.cc \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox