No description
  • C 98.2%
  • Assembly 1%
  • Makefile 0.3%
  • Shell 0.2%
  • Python 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Saravana Kannan 4d4fdaf398 FROMGIT: of: property: Create device links for all child-supplier depencencies
A parent device can have child devices that it adds when it probes. But
this probing of the parent device can happen way after kernel init is done
-- for example, when the parent device's driver is loaded as a module.

In such cases, if the child devices depend on a supplier in the system, we
need to make sure the supplier gets the sync_state() callback only after
these child devices are added and probed.

To achieve this, when creating device links for a device by looking at its
DT node, don't just look at DT references at the top node level. Look at DT
references in all the descendant nodes too and create device links from the
ancestor device to all these supplier devices.

This way, when the parent device probes and adds child devices, the child
devices can then create their own device links to the suppliers and further
delay the supplier's sync_state() callback to after the child devices are
probed.

Example:
In this illustration, -> denotes DT references and indentation
represents child status.

Device node A
	Device node B -> D
	Device node C -> B, D

Device node D

Assume all these devices have their drivers loaded as modules.

Without this patch, this is the sequence of events:
1. D is added.
2. A is added.
3. Device D probes.
4. Device D gets its sync_state() callback.
5. Device B and C might malfunction because their resources got
   altered/turned off before they can make active requests for them.

With this patch, this is the sequence of events:
1. D is added.
2. A is added and creates device links to D.
3. Device link from A to B is not added because A is a parent of B.
4. Device D probes.
5. Device D does not get it's sync_state() callback because consumer A
   hasn't probed yet.
5. Device A probes.
5. a. Devices B and C are added.
5. b. Device links from B and C to D are added.
5. c. Device A's probe completes.
6. Device D does not get it's sync_state() callback because consumer A
   has probed but consumers B and C haven't probed yet.
7. Device B and C probe.
8. Device D gets it's sync_state() callback because all its consumers
   have probed.
9. None of the devices malfunction.

Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20190904211126.47518-7-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

(cherry-picked from commit d4387cd117414ba80230f27a514be5ca4a09cfcc
 https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git driver-core-next)

Fixes: 141703324
Change-Id: I38186d6cc4671bd8747dae8c440b09717a487088
2019-10-07 18:52:06 -07:00
arch Linux 5.4-rc2 2019-10-07 07:09:37 +02:00
block block: sed-opal: fix sparse warning: convert __be64 data 2019-10-03 14:21:32 -06:00
certs
crypto Merge branch 'next-lockdown' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security 2019-09-28 08:14:15 -07:00
Documentation FROMGIT: of: property: Add functional dependency link from DT bindings 2019-10-07 18:44:10 -07:00
drivers FROMGIT: of: property: Create device links for all child-supplier depencencies 2019-10-07 18:52:06 -07:00
fs Linux 5.4-rc2 2019-10-07 07:09:37 +02:00
include FROMGIT: driver core: Add sync_state driver/bus callback 2019-10-07 18:44:23 -07:00
init Linux 5.4-rc1 2019-10-02 19:10:07 +02:00
ipc Merge 5.4-rc1-prelrease into android-mainline 2019-10-02 17:58:47 +02:00
kernel Linux 5.4-rc2 2019-10-07 07:09:37 +02:00
lib Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2019-10-05 08:50:15 -07:00
LICENSES
mm Linux 5.4-rc1 2019-10-02 19:10:07 +02:00
net Linux 5.4-rc2 2019-10-07 07:09:37 +02:00
samples
scripts Linux 5.4-rc2 2019-10-07 07:09:37 +02:00
security Linux 5.4-rc2 2019-10-07 07:09:37 +02:00
sound
tools Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2019-10-05 08:50:15 -07:00
usr kbuild: update compile-test header list for v5.4-rc2 2019-10-05 15:29:49 +09:00
virt KVM/arm fixes for 5.4, take #1 2019-10-03 12:08:50 +02:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
abi_gki_aarch64.xml
build.config.aarch64
build.config.allmodconfig ANDROID: Fix arm64 allmodconfig build 2019-10-02 14:10:09 +01:00
build.config.allmodconfig.aarch64
build.config.allmodconfig.x86_64
build.config.common
build.config.gki
build.config.gki.aarch64
build.config.gki.x86_64
build.config.x86_64
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS kgdb patches for 5.4-rc2 2019-10-03 11:17:57 -07:00
Makefile Linux 5.4-rc2 2019-10-07 07:09:37 +02:00
README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.