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 | olio-uboot-2014.01-fc5fc76bdad14425e3743e1494c9e444570df1be.tar.xz olio-uboot-2014.01-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 b747f1f79..57802cfb6 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; |