On Tuesday 24 July 2012 16:11:15 Joe Hershberger wrote: > --- a/drivers/net/netconsole.c > +++ b/drivers/net/netconsole.c > @@ -131,8 +131,17 @@ static void nc_send_packet(const char *buf, int len) > } > > if (eth->state != ETH_STATE_ACTIVE) { > - if (eth_init(gd->bd) < 0) > - return; > +#ifdef CONFIG_NETCONSOLE_PERSIST_ETH > + if (net_loop_last_protocol != NETCONS) { > +#endif > + if (eth_init(gd->bd) < 0) > + return; > +#ifdef CONFIG_NETCONSOLE_PERSIST_ETH > + net_loop_last_protocol = NETCONS; > + } else { > + eth_init_state_only(gd->bd); > + } > +#endif
seems to me these pre/post clauses should really get refactored someway. the ifdef noise is significant here. so in the header, something like: static inline int eth_reinit_protocol(int protocol) { #ifdef CONFIG_NETCONSOLE_PERSIST_ETH return protocol != NETCONS; #else return 1; #endif } static inline void eth_set_last_protocol(int protocol) { #ifdef CONFIG_NETCONSOLE_PERSIST_ETH net_loop_last_protocol = protocol; #endif } #ifdef CONFIG_NETCONSOLE_PERSIST_ETH extern enum proto_t net_loop_last_protocol; #else # define net_loop_last_protocol -1 #endif then the source becomes the more manageable: if (eth_reinit_protocol(net_loop_last_protocol)) { if (eth_init(gd->bd) < 0) return; eth_set_last_protocol(NETCONS); } else eth_init_state_only(gd->bd); > --- a/net/eth.c > +++ b/net/eth.c > > +#ifdef CONFIG_NETCONSOLE_PERSIST_ETH > +int eth_init_state_only(bd_t *bis) > +{ > + eth_current->state = ETH_STATE_ACTIVE; > + > + return 0; > +} > + > +void eth_halt_state_only(void) > +{ > + eth_current->state = ETH_STATE_PASSIVE; > +} > +#endif these *really* should be static inlines in the global header. they're so dirt simple, the overhead of the function call is probably much higher than the single memory store. -mike
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot