
3 Apr
2012
3 Apr
'12
10:41 p.m.
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 ?
--- 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 -mike