diff options
author | Andreas Bießmann <andreas.devel@googlemail.com> | 2010-10-01 22:51:02 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2010-10-06 22:46:35 +0200 |
commit | fc5fc76bdad14425e3743e1494c9e444570df1be (patch) | |
tree | 5df077daeb219502a905e6291d2858b3ce5dd940 /lib | |
parent | f44a928e7ea0912f278f2cf8ba1354fccf2ba64e (diff) | |
download | u-boot-fc5fc76bdad14425e3743e1494c9e444570df1be.tar.gz u-boot-fc5fc76bdad14425e3743e1494c9e444570df1be.tar.xz u-boot-fc5fc76bdad14425e3743e1494c9e444570df1be.zip |
lib/hashtable.c: add CONFIG_ENV_MIN_ENTRIES
This patch adds a new config parameter for adjusting the calculation of
hash table size when importing a buffer.
When importing a extremely small buffer (e.g. the default_environment)
the old calculation generated a hash table which could hold at most the
buffer content but no more entires.
The new calculation add a fixed number of entries to the result to fit
better for small import buffers. This amount may be configured by the
user in board file to adjust the behaviour.
Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/hashtable.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/hashtable.c b/lib/hashtable.c index b747f1f799..57802cfb6d 100644 --- a/lib/hashtable.c +++ b/lib/hashtable.c @@ -45,6 +45,9 @@ # include <linux/string.h> #endif +#ifndef CONFIG_ENV_MIN_ENTRIES /* minimum number of entries */ +#define CONFIG_ENV_MIN_ENTRIES 64 +#endif #ifndef CONFIG_ENV_MAX_ENTRIES /* maximum number of entries */ #define CONFIG_ENV_MAX_ENTRIES 512 #endif @@ -647,13 +650,14 @@ int himport_r(struct hsearch_data *htab, * (CONFIG_ENV_SIZE). This heuristics will result in * unreasonably large numbers (and thus memory footprint) for * big flash environments (>8,000 entries for 64 KB - * envrionment size), so we clip it to a reasonable value - * (which can be overwritten in the board config file if - * needed). + * envrionment size), so we clip it to a reasonable value. + * On the other hand we need to add some more entries for free + * space when importing very small buffers. Both boundaries can + * be overwritten in the board config file if needed. */ if (!htab->table) { - int nent = size / 8; + int nent = CONFIG_ENV_MIN_ENTRIES + size / 8; if (nent > CONFIG_ENV_MAX_ENTRIES) nent = CONFIG_ENV_MAX_ENTRIES; |