From fc5fc76bdad14425e3743e1494c9e444570df1be Mon Sep 17 00:00:00 2001 From: Andreas Bießmann Date: Fri, 1 Oct 2010 22:51:02 +0200 Subject: 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 --- lib/hashtable.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/hashtable.c b/lib/hashtable.c index b747f1f799c..57802cfb6de 100644 --- a/lib/hashtable.c +++ b/lib/hashtable.c @@ -45,6 +45,9 @@ # include #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; -- cgit v1.2.3