[U-Boot] Inefficient code in NetLoop() ?
Ben Warren
biggerbadderben at gmail.com
Fri Sep 26 08:09:49 CEST 2008
Wolfgang Denk wrote:
> Dear Ben,
>
> I just ran over this piece of code in NetLoop() [see "net/net.c"]:
>
> 286 int
> 287 NetLoop(proto_t protocol)
> 288 {
> ...
> 322 eth_halt();
> 323 #ifdef CONFIG_NET_MULTI
> 324 eth_set_current();
> 325 #endif
> 326 if (eth_init(bd) < 0) {
> 327 eth_halt();
> 328 return(-1);
> 329 }
>
> Am I reading this correctly that we eth_halt() and eth_init() the
> network interface for each and every call to NetLoop?
>
>
Yes, it looks that way. Ripe for gutting.
> This looks terribly inefficient to me - is there any rationale behind
> this?
>
>
Probably, but it escapes me. It most certainly predates my involvement
in this project.
> Also, the eth_set_current() checking should IMHO be done just once,
> before we start a network transfer, or when we actually switch
> interfaces, but not for each and every call to NetLoop() ?
>
>
Maybe, but eth_set_current() is pretty lightweight. NetLoop is only
called when we start a network transfer, so this doesn't seem too
egregious. It could definitely stand to be refactored.
> Best regards,
>
> Wolfgang Denk
>
>
regards,
Ben
More information about the U-Boot
mailing list