mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
of: overlay: detect cases where device tree may become corrupt
When an attempt to apply an overlay changeset fails, an effort is made to revert any partial application of the changeset. When an attempt to remove an overlay changeset fails, an effort is made to re-apply any partial reversion of the changeset. The existing code does not check for failure to recover a failed overlay changeset application or overlay changeset revert. Add the missing checks and flag the devicetree as corrupt if the state of the devicetree can not be determined. Improve and expand the returned errors to more fully reflect the result of the effort to undo the partial effects of a failed attempt to apply or remove an overlay changeset. If the device tree might be corrupt, do not allow further attempts to apply or remove an overlay changeset. When creating an overlay changeset from an overlay device tree, add some additional warnings if the state of the overlay device tree is not as expected. Signed-off-by: Frank Rowand <frank.rowand@sony.com> Signed-off-by: Rob Herring <robh@kernel.org>
This commit is contained in:
parent
61b4de4e0b
commit
24789c5ce5
6 changed files with 376 additions and 100 deletions
|
@ -1298,7 +1298,7 @@ static inline bool of_device_is_system_power_controller(const struct device_node
|
|||
*/
|
||||
|
||||
enum of_overlay_notify_action {
|
||||
OF_OVERLAY_PRE_APPLY,
|
||||
OF_OVERLAY_PRE_APPLY = 0,
|
||||
OF_OVERLAY_POST_APPLY,
|
||||
OF_OVERLAY_PRE_REMOVE,
|
||||
OF_OVERLAY_POST_REMOVE,
|
||||
|
@ -1312,8 +1312,8 @@ struct of_overlay_notify_data {
|
|||
#ifdef CONFIG_OF_OVERLAY
|
||||
|
||||
/* ID based overlays; the API for external users */
|
||||
int of_overlay_apply(struct device_node *tree);
|
||||
int of_overlay_remove(int id);
|
||||
int of_overlay_apply(struct device_node *tree, int *ovcs_id);
|
||||
int of_overlay_remove(int *ovcs_id);
|
||||
int of_overlay_remove_all(void);
|
||||
|
||||
int of_overlay_notifier_register(struct notifier_block *nb);
|
||||
|
@ -1321,12 +1321,12 @@ int of_overlay_notifier_unregister(struct notifier_block *nb);
|
|||
|
||||
#else
|
||||
|
||||
static inline int of_overlay_apply(struct device_node *tree)
|
||||
static inline int of_overlay_apply(struct device_node *tree, int *ovcs_id)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
static inline int of_overlay_remove(int id)
|
||||
static inline int of_overlay_remove(int *ovcs_id)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue