summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Bießmann <andreas.devel@googlemail.com>2010-10-01 22:51:02 +0200
committerWolfgang Denk <wd@denx.de>2010-10-06 22:46:35 +0200
commitfc5fc76bdad14425e3743e1494c9e444570df1be (patch)
tree5df077daeb219502a905e6291d2858b3ce5dd940
parentf44a928e7ea0912f278f2cf8ba1354fccf2ba64e (diff)
downloadu-boot-imx-fc5fc76bdad14425e3743e1494c9e444570df1be.zip
u-boot-imx-fc5fc76bdad14425e3743e1494c9e444570df1be.tar.gz
u-boot-imx-fc5fc76bdad14425e3743e1494c9e444570df1be.tar.bz2
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>
-rw-r--r--lib/hashtable.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/hashtable.c b/lib/hashtable.c
index b747f1f..57802cf 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;