aboutsummaryrefslogtreecommitdiff
path: root/net/eth.c
diff options
context:
space:
mode:
authorHeiko Schocher <hs@denx.de>2009-02-10 09:38:52 +0100
committerBen Warren <biggerbadderben@gmail.com>2009-02-22 23:49:33 -0800
commit2f70c49e5b9813635ad73666aa30f304c7fdeda9 (patch)
tree57b6d6625de2648dab93e71cf74a7329c81c6adc /net/eth.c
parentad2d16393e9f684e4a9255f42e8bfdd819b67a87 (diff)
netloop: speed up NetLoop
NetLoop polls every cycle with getenv some environment variables. This is horribly slow, especially when the environment is big. This patch reads only the environment variables in NetLoop, when they were changed. Also moved the init part of the NetLoop function in a seperate function. Signed-off-by: Heiko Schocher <hs@denx.de> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
Diffstat (limited to 'net/eth.c')
-rw-r--r--net/eth.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/net/eth.c b/net/eth.c
index ec2ef1a36..217e8853f 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -28,6 +28,9 @@
#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
+static char *act = NULL;
+static int env_changed_id = 0;
+
/*
* CPU and board-specific Ethernet initializations. Aliased function
* signals caller to move on
@@ -461,13 +464,17 @@ void eth_try_another(int first_restart)
#ifdef CONFIG_NET_MULTI
void eth_set_current(void)
{
- char *act;
struct eth_device* old_current;
+ int env_id;
if (!eth_current) /* XXX no current */
return;
- act = getenv("ethact");
+ env_id = get_env_id();
+ if ((act == NULL) || (env_changed_id != env_id)) {
+ act = getenv("ethact");
+ env_changed_id = env_id;
+ }
if (act != NULL) {
old_current = eth_current;
do {