of: Make devicetree sysfs update functions consistent.
authorGrant Likely <grant.likely@linaro.org>
Wed, 23 Jul 2014 23:05:06 +0000 (17:05 -0600)
committerMark Brown <broonie@kernel.org>
Mon, 16 Feb 2015 05:50:31 +0000 (14:50 +0900)
commit952f9f440c9acd809fad416606ec5d722e168820
tree8de44ce76c74add533c365542fe259f138723906
parent59cf2511e5bbc8fcbdca14e4cd22949bf56b7519
of: Make devicetree sysfs update functions consistent.

All of the DT modification functions are split into two parts, the first
part manipulates the DT data structure, and the second part updates
sysfs, but the code isn't very consistent about how the second half is
called. They don't all enforce the same rules about when it is valid to
update sysfs, and there isn't any clarity on locking.

The transactional DT modification feature that is coming also needs
access to these functions so that it can perform all the structure
changes together, and then all the sysfs updates as a second stage
instead of doing each one at a time.

Fix up the second have by creating a separate __of_*_sysfs() function
for each of the helpers. The new functions have consistent naming (ie.
of_node_add() becomes __of_attach_node_sysfs()) and all of them now
defer if of_init hasn't been called yet.

Callers of the new functions must hold the of_mutex to ensure there are
no race conditions with of_init(). The mutex ensures that there will
only ever be one writer to the tree at any given time. There can still
be any number of readers and the raw_spin_lock is still used to make
sure access to the data structure is still consistent.

Finally, put the function prototypes into of_private.h so they are
accessible to the transaction code.

Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
[grant.likely: Changed suffix from _post to _sysfs to match existing code]
[grant.likely: Reorganized to eliminate trivial wrappers]
Signed-off-by: Grant Likely <grant.likely@linaro.org>
(cherry picked from commit 8a2b22a2595bf89d4396530edf8388159fad9d83)
Signed-off-by: Mark Brown <broonie@kernel.org>
Conflicts:
drivers/of/base.c
drivers/of/base.c
drivers/of/dynamic.c
drivers/of/of_private.h
include/linux/of.h