All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wolfgang Denk <wd@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 0/6] Support NAND in fw_printenv/fw_setenv
Date: Tue, 02 Sep 2008 02:13:17 +0200	[thread overview]
Message-ID: <20080902001317.16E0E242FF@gemini.denx.de> (raw)
In-Reply-To: <Pine.LNX.4.64.0809020104080.8933@axis700.grange>

Dear Guennadi Liakhovetski,

In message <Pine.LNX.4.64.0809020104080.8933@axis700.grange> you wrote:
> 
> As you know, in the tool we have to decide at run-time whether we are 
> dealing  with a single environment copy or with current / redundant 
> configuration. With NAND support when _writing_ environment to NAND you 
> have to write page at a time, which means, at this point we _must_ have 
> the image in a contiguous buffer in RAM. And the image can have one of the 

Agreed so far.

> two possible formats - with and without the "flags" byte. In principle I 
> see only three possibilities to implement this:
> 
> (a) work with arbitrary non-contiguous data in RAM as before, and copy it 
> into an additional buffer just before writing to NAND
> 
> advantage: can keep the current struct
> 
> disadvantage: extra malloc

Agreed.

> (b) use a plain data buffer, and, if needed, use the first byte in it for 
> flags
> 
> advantage: no extra malloc, no (explicit) union
> 
> disadvantage: confusing, have to work with byte-offsets instead of struct 
> / union members, and, in fact, this is the same as using a union, just 
> implicit, calculating byte-offsets manually, instead of letting the 
> compiler do it

Agreed that this is even worse than a union.

> (c) use a union
> 
> advantage: clean access to all environment fields without the use of 
> byte-offsets
> 
> disadvantage: slightly more complex code
> 
> Please, just tell me which of these three you would prefer, or maybe there 

None of them, I think.

> is a fourth possibility I am still overseeing.

The  two  cases  (redundant  versus  non-redundant  env)   are   well
separated,  and  known  early  (after  parsing the config file, i. e.
before any processing of environment data).

How about defining two structs,  one  without  the  flag  byte  (non-
redundant   env),  and  another  one  with  the  flag  byte  included
(redundant env). Then just use a pointer of the correct type (either
first or second struct) to access the data.

> You also asked about the extra "char *data" pointer in the struct 
> environment, whether there is no danger that a different compiler version 
> will break it. This pointer uses no magic - it is just a plain simple 
> pointer, I use it to point to data inside the union to avoid having to 
> check every time whether we have the redundant environment or not. So, I 
> check it only once at initialisation time, set this pointer, and then just 
> use it to access the data buffer inside the image (union). No magic here.

But it's bogus. Now you have data[] in the union, *plus* in the
struct. You have it twice.

> > > 4. fix MTD_OLD
> > > 
> > > Would we still need this with NAND-only tool?
> > 
> > Yes of course we need it. I will not accept such thing as a NAND-only tool.
> 
> Ok. But NAND-support is not needed with MTD_OLD? So, if it cannot be 
> compiled with older kernels, we may just disable it per ifdef?

Do we really need to ifdef this? 

> How would you like to make such a replacement then? If I produce a patch 
> just from the current state to the final state, I think, it will look 
> worse than the broken-down patch-series. Otherwise we could remove the 

It will not. See my previous statistics. It will be  less  than  half
the size of your split patches.


Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
This is now.  Later is later.

  reply	other threads:[~2008-09-02  0:13 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-27 15:52 [U-Boot] [PATCH 0/6] Support NAND in fw_printenv/fw_setenv Guennadi Liakhovetski
2008-08-27 15:52 ` [U-Boot] [PATCH 1/6] Convert fw_env.c to use a single environment image union Guennadi Liakhovetski
2008-08-31 14:36   ` Wolfgang Denk
2008-08-31 15:57     ` Guennadi Liakhovetski
2008-08-31 18:57       ` Wolfgang Denk
2008-08-27 15:52 ` [U-Boot] [PATCH 2/6] Separate flash read and write operations Guennadi Liakhovetski
2008-08-31 14:58   ` Wolfgang Denk
2008-08-31 16:04     ` Guennadi Liakhovetski
2008-08-31 18:57       ` Wolfgang Denk
2008-08-31 19:45         ` Guennadi Liakhovetski
2008-08-31 19:56           ` Wolfgang Denk
2008-08-27 15:52 ` [U-Boot] [PATCH 3/6] "return" is not a function Guennadi Liakhovetski
2008-08-31 14:59   ` Wolfgang Denk
2008-08-31 16:10     ` Guennadi Liakhovetski
2008-08-31 18:57       ` Wolfgang Denk
2008-08-31 19:17         ` Guennadi Liakhovetski
2008-08-27 15:52 ` [U-Boot] [PATCH 4/6] Unify active vs. redundant environment variable naming Guennadi Liakhovetski
2008-08-31 15:04   ` Wolfgang Denk
2008-08-31 16:18     ` Guennadi Liakhovetski
2008-08-31 18:57       ` Wolfgang Denk
2008-08-31 19:27         ` Guennadi Liakhovetski
2008-08-31 19:44           ` Wolfgang Denk
2008-08-27 15:52 ` [U-Boot] [PATCH 5/6] Support environment anywhere within erase area Guennadi Liakhovetski
2008-08-31 18:57   ` Wolfgang Denk
2008-08-31 19:39     ` Guennadi Liakhovetski
2008-08-31 19:53       ` Wolfgang Denk
2008-08-27 15:52 ` [U-Boot] [PATCH 6/6] Support environment in NAND Guennadi Liakhovetski
2008-08-29  9:29   ` [U-Boot] [PATCH 6/6 v2] " Guennadi Liakhovetski
2008-08-31 18:57   ` [U-Boot] [PATCH 6/6] " Wolfgang Denk
2008-08-31 21:53     ` Guennadi Liakhovetski
2008-08-31 20:21 ` [U-Boot] [PATCH 0/6] Support NAND in fw_printenv/fw_setenv Wolfgang Denk
2008-08-31 20:37   ` Guennadi Liakhovetski
2008-08-31 20:55     ` Wolfgang Denk
2008-09-01  9:08       ` Guennadi Liakhovetski
2008-09-01  9:31         ` Guennadi Liakhovetski
2008-09-01 22:42           ` Wolfgang Denk
2008-09-01 22:41         ` Wolfgang Denk
2008-09-01 23:33           ` Guennadi Liakhovetski
2008-09-02  0:13             ` Wolfgang Denk [this message]
2008-09-02 16:00   ` Guennadi Liakhovetski

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=20080902001317.16E0E242FF@gemini.denx.de \
    --to=wd@denx.de \
    --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.