Possible init bug in ibm_newemac/core.c

4 messages, 2 authors, 2008-08-15 · open the first message on its own page

Possible init bug in ibm_newemac/core.c

From: Darcy Watkins <hidden>
Date: 2008-08-15 17:03:07

Hello,

In function...

static int __devinit emac_probe(struct of_device *ofdev,
				const struct of_device_id *match)


... in 

   drivers/net/ibm_newemac/core.c

... there is a chunk of code as follows (The // DLW - BUG ... comment is
mine)  ...

	/* Find PHY if any */
	// DLW - BUG - This uses an uninitialized spinlock (potential badness).
	err = emac_init_phy(dev);
	if (err != 0)
		goto err_detach_tah;

	/* Fill in the driver function table */
	ndev->open = &emac_open;
	if (dev->tah_dev)
		ndev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
	ndev->tx_timeout = &emac_tx_timeout;
	ndev->watchdog_timeo = 5 * HZ;
	ndev->stop = &emac_close;
	ndev->get_stats = &emac_stats;
	ndev->set_multicast_list = &emac_set_multicast_list;
	ndev->do_ioctl = &emac_ioctl;
	if (emac_phy_supports_gige(dev->phy_mode)) {
		ndev->hard_start_xmit = &emac_start_xmit_sg;
		ndev->change_mtu = &emac_change_mtu;
		dev->commac.ops = &emac_commac_sg_ops;
	} else {
		ndev->hard_start_xmit = &emac_start_xmit;
	}
	SET_ETHTOOL_OPS(ndev, &emac_ethtool_ops);

42 more lines

Re: Possible init bug in ibm_newemac/core.c

From: Benjamin Krill <hidden>
Date: 2008-08-15 17:59:03

Hi Darcy,
The bug normally goes unnoticed until you turn on spinlock and/or
rtmutex debuggging in the kernel config - then the debugging magic
checks will catch it during boot.
Have a look at thread:
http://ozlabs.org/pipermail/linuxppc-dev/2008-August/061631.html

cheers
 ben

Re: Possible init bug in ibm_newemac/core.c

From: Darcy Watkins <hidden>
Date: 2008-08-15 20:00:42

Hi Ben,

Thanks for the pointer the the thread.  What they did was exactly what I
did (and then later reverted).  I guess my "lame hack attempt" wasn't so
lame after all.

It works fine on my "mule" board with more memory and two Ethernet
ports, but fails on the production board having less memory and only one
Ethernet port.

This probably means that I need to look into something else.

In our setup, the DTS always says two Ethernet ports.  It may be that
the failure of the probe in the case of the non-existent Ethernet port
causes the kernel panic when the order of execution of those two
functions are reversed.

Thanks again.  This gives me a few more leads to chase down.

Darcy


On Fri, 2008-08-15 at 10:48 -0700, Benjamin Krill wrote:
Hi Darcy,
quoted
The bug normally goes unnoticed until you turn on spinlock and/or
rtmutex debuggging in the kernel config - then the debugging magic
checks will catch it during boot.
Have a look at thread:
http://ozlabs.org/pipermail/linuxppc-dev/2008-August/061631.html

cheers
 ben
-- 


Regards,

Darcy

--------------
Darcy L. Watkins - Senior Software Developer
Tranzeo Wireless Technologies, Inc.
19273 Fraser Way, Pitt Meadows, BC, Canada V3Y 2V4
T:604-460-6002 ext:410
http://www.tranzeo.com

Re: Possible init bug in ibm_newemac/core.c

From: Darcy Watkins <hidden>
Date: 2008-08-15 20:38:12

Good news!  The patch in the URL is what I tried earlier (as mentioned
below).  The one in the followup post on the thread - I didn't try,
until now.  It appears to work properly on both boards.

Cheers and Thanks!

On Fri, 2008-08-15 at 13:00 -0700, Darcy Watkins wrote:
--snip!-- What they did was exactly what I
did (and then later reverted).  
--snip!--
On Fri, 2008-08-15 at 10:48 -0700, Benjamin Krill wrote:
--snip!--
quoted
Have a look at thread:
http://ozlabs.org/pipermail/linuxppc-dev/2008-August/061631.html
--snip!--
-- 


Regards,

Darcy

--------------
Darcy L. Watkins - Senior Software Developer
Tranzeo Wireless Technologies, Inc.
19273 Fraser Way, Pitt Meadows, BC, Canada V3Y 2V4
T:604-460-6002 ext:410
http://www.tranzeo.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help