On Thu, Sep 15, 2016 at 08:10:13AM +0200, Michael Olbrich wrote: > Caching pointers to device tree nodes or names is not save. The barebox > internal device tree may be changed by loading a new device tree or through > fixup handlers. > Use local copies of the full path instead and resolve the node as needed. > This should be two patches, one for backend->of_path and one state->root. When reviewing this I first had to understand that this patch has two unrelated changes. > Signed-off-by: Michael Olbrich <m.olbrich@xxxxxxxxxxxxxx> > --- > common/state/backend.c | 3 ++- > common/state/state.c | 19 ++++++++++++------- > common/state/state.h | 4 ++-- > 3 files changed, 16 insertions(+), 10 deletions(-) > > diff --git a/common/state/backend.c b/common/state/backend.c > index 2f2e6dfd32d1..5235bb0283dd 100644 > --- a/common/state/backend.c > +++ b/common/state/backend.c > @@ -164,7 +164,7 @@ int state_backend_init(struct state_backend *backend, struct device_d *dev, > if (ret) > goto out_free_format; > > - backend->of_path = of_path; > + backend->of_path = xstrdup(of_path); > > return 0; > > @@ -185,4 +185,5 @@ void state_backend_free(struct state_backend *backend) > state_storage_free(&backend->storage); > if (backend->format) > state_format_free(backend->format); > + free(backend->of_path); > } > diff --git a/common/state/state.c b/common/state/state.c > index 9b1d4edef132..0c329cd67548 100644 > --- a/common/state/state.c > +++ b/common/state/state.c > @@ -202,15 +202,19 @@ struct device_node *state_to_node(struct state *state, > enum state_convert conv) > { > struct device_node *child; > - struct device_node *root; > + struct device_node *root, *state_root; > int ret; > > - root = of_new_node(parent, state->root->name); > + state_root = of_find_node_by_path(state->of_path); > + if (!state_root) > + return ERR_PTR(-ENODEV); Shouldn't you create the node if it's not there in the target device tree? Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox