diff options
author | Frank Rowand <frank.rowand@sony.com> | 2018-07-12 14:00:07 -0700 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2018-07-16 08:41:32 -0600 |
commit | b9952b5218added5577e4a3443969bc20884cea9 (patch) | |
tree | ea6672754a6ec83753a9a3b63bbb3dd0c68ec708 /drivers/of/overlay.c | |
parent | a47c9b3943164453d4f580ea174a6ddcb37554c3 (diff) | |
download | blackbird-op-linux-b9952b5218added5577e4a3443969bc20884cea9.tar.gz blackbird-op-linux-b9952b5218added5577e4a3443969bc20884cea9.zip |
of: overlay: update phandle cache on overlay apply and remove
A comment in the review of the patch adding the phandle cache said that
the cache would have to be updated when modules are applied and removed.
This patch implements the cache updates.
Fixes: 0b3ce78e90fc ("of: cache phandle nodes to reduce cost of of_find_node_by_phandle()")
Reported-by: Alan Tull <atull@kernel.org>
Suggested-by: Alan Tull <atull@kernel.org>
Signed-off-by: Frank Rowand <frank.rowand@sony.com>
Signed-off-by: Rob Herring <robh@kernel.org>
Diffstat (limited to 'drivers/of/overlay.c')
-rw-r--r-- | drivers/of/overlay.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index 7baa53e5b1d7..eda57ef12fd0 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c @@ -804,6 +804,8 @@ static int of_overlay_apply(const void *fdt, struct device_node *tree, goto err_free_overlay_changeset; } + of_populate_phandle_cache(); + ret = __of_changeset_apply_notify(&ovcs->cset); if (ret) pr_err("overlay changeset entry notify error %d\n", ret); @@ -1046,8 +1048,17 @@ int of_overlay_remove(int *ovcs_id) list_del(&ovcs->ovcs_list); + /* + * Disable phandle cache. Avoids race condition that would arise + * from removing cache entry when the associated node is deleted. + */ + of_free_phandle_cache(); + ret_apply = 0; ret = __of_changeset_revert_entries(&ovcs->cset, &ret_apply); + + of_populate_phandle_cache(); + if (ret) { if (ret_apply) devicetree_state_flags |= DTSF_REVERT_FAIL; |