
On 04/03/2012 10:41 PM, Mike Frysinger wrote:
On Friday 23 March 2012 16:11:17 Sebastian Andrzej Siewior wrote:
If we set the status after successful init call then we get in trouble if stdout (or setderr) is set to netconsole. If we are going to use one of those (lets say printf) during ->init() the following happens:
- network is of (state passive)
- we switch on netconsole
- nc_getc() gets called
- in NetLoop() we switch on ethernet via eth_init()
- we end up in tsec_init() (inc case we use the tsec driver). Here we call a printf()
considering your followup patches convert printf() to serial_printf(), is this patch still needed ?
Not for the tsec driver but it is possible that other driver do have the same problem. I haven't also checked all the phy devices which might do some prints. Therefore I would prefer to have this in.
--- a/net/eth.c +++ b/net/eth.c @@ -380,14 +380,17 @@ int eth_init(bd_t *bis)
old_current = eth_current; do {
int old_state;
- debug("Trying %s\n", eth_current->name);
if (eth_current->init(eth_current,bis)>= 0) {
eth_current->state = ETH_STATE_ACTIVE;
old_state = eth_current->state;
eth_current->state = ETH_STATE_ACTIVE;
if (eth_current->init(eth_current,bis)>= 0) return 0;
}
debug("FAIL\n");
eth_current->state = old_state;
eth_try_another(0); } while (old_current != eth_current);
this needs a comment in the code explaining why you're setting things active early and then turning it off
Okay.
-mike
Sebastian