
Stefan Roese wrote:
Dave,
On Saturday 15 March 2008, Dave Littell wrote:
I've seen an issue with my 1.3.1-based port of U-Boot where a relatively large number of pings issued from the command line will ultimately fail with the message:
Cannot allocate private hw data for eth_device...
I looked around this message and it seems that ppc_4xx_eth_initialize() malloc()’s a EMAC_4XX_HW_PST structure and assigns it to dev->priv. However, nothing ever frees this buffer so standing on a ping will ultimately pull down all the available memory.
Hmmm. IIRC ppc_4xx_eth_initialize() is only called once upon bootup for ethernet driver initialization. The function called each time before network action is ppc_4xx_eth_init().
It looks like ppc_4xx_eth_initialize() is called from eth_init() and ppc_4xx_eth_init() is only called if there's an emac0_dev.
Hm?
One fix might be to free( dev->priv ) at the end of ppc_4xx_eth_halt(). I tried this today and noted no ill effects.
So did it work for you?
It seems to be working well.
Thanks, Dave