From: Nicholas <nicholas.faustini@azcomtech.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC PATCH v2] u-boot: remove driver lookup loop from env_save()
Date: Thu, 12 Jul 2018 14:32:40 +0200 [thread overview]
Message-ID: <1531398760.2595.19.camel@azcomtech.com> (raw)
In-Reply-To: <8295594b-a9c6-a87c-79fd-0144ca5c9a1f@de.pepperl-fuchs.com>
On gio, 2018-07-12 at 13:02 +0200, Simon Goldschmidt wrote:
>
> On 12.07.2018 12:52, Nicholas Faustini wrote:
> >
> > When called with ENVOP_SAVE, env_get_location() only returns the
> > gd->env_load_location variable without actually checking for
> > the environment location and priority.
> >
> > This behaviour causes env_save() to fall into an infinite loop when
> > the low-level drv->save() call fails.
> >
> > The env_save() function should not loop through the environment
> > location list but it should save the environment into the location
> > stored in gd->env_load_location by the last env_load() call.
> >
> > Signed-off-by: Nicholas Faustini <nicholas.faustini@azcomtech.com>
> > ---
> >
> > Changes in v2:
> > - Restore gd->env_load_location to the highest priority location
> > when
> > env_load() fails
> >
> > env/env.c | 10 ++++++----
> > 1 file changed, 6 insertions(+), 4 deletions(-)
> >
> > diff --git a/env/env.c b/env/env.c
> > index 5c0842a..18eb78d 100644
> > --- a/env/env.c
> > +++ b/env/env.c
> > @@ -205,22 +205,24 @@ int env_load(void)
> > return 0;
> > }
> >
> > + env_get_location(ENVOP_LOAD, 0);
> A comment why this is required would be good, I guess.
Sure, I thought the same but eventually I didn't put it. Will do in the
next version.
>
> >
> > +
> > return -ENODEV;
> > }
> >
> > int env_save(void)
> > {
> > struct env_driver *drv;
> > - int prio;
> >
> > - for (prio = 0; (drv = env_driver_lookup(ENVOP_SAVE,
> > prio)); prio++) {
> > + drv = env_driver_lookup(ENVOP_SAVE, 0);
> Thinking again about this, would it make more sense to store
> 'env_load_prio' in 'gd' after successful load? That way,
> 'env_get_location()' would be more straightforward (no special case
> for
> ENVOP_SAVE) and here in 'env_save()' we could just write something
> like
> this:
>
> drv = env_driver_lookup(ENVOP_SAVE, gd->env_load_prio);
>
>
I really like the 'env_load_prio' idea. But I also like having the
special case for ENVOP_SAVE in env_get_location() as it enforces the
fact that the location of 'save' is bound to the location of previous
'load'.
I however don't have a strong opinion on this. I could even remove the
whole switch() statement if we introduce 'env_load_prio'.
Also, I have some doubts about what it should be returned when !drv-
>save and !env_has_inited(drv->location) (below)... I put -ENODEV but I
don't like it so much.
> Simon
>
> >
> > + if (drv) {
> > int ret;
> >
> > if (!drv->save)
> > - continue;
> > + return -ENODEV;
> >
> > if (!env_has_inited(drv->location))
> > - continue;
> > + return -ENODEV;
> >
> > printf("Saving Environment to %s... ", drv-
> > >name);
> > ret = drv->save();
> >
next prev parent reply other threads:[~2018-07-12 12:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-12 10:52 [U-Boot] [RFC PATCH v2] u-boot: remove driver lookup loop from env_save() Nicholas Faustini
2018-07-12 11:02 ` Simon Goldschmidt
2018-07-12 12:32 ` Nicholas [this message]
2018-07-13 7:37 ` Simon Goldschmidt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1531398760.2595.19.camel@azcomtech.com \
--to=nicholas.faustini@azcomtech.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.