Fix cpsw_detach() to not panic when called from cpsw_attach().
authorloos <loos@FreeBSD.org>
Fri, 24 Oct 2014 21:08:02 +0000 (21:08 +0000)
committerloos <loos@FreeBSD.org>
Fri, 24 Oct 2014 21:08:02 +0000 (21:08 +0000)
commitc2bbf09479e32a9562ac2ba0c066b32ce7190760
tree13c89263678d73b63efd23a58c13eadfaf33e2b7
parentcd1fe572f5a5baf2f67e8cdba840135fdb9d3060
Fix cpsw_detach() to not panic when called from cpsw_attach().

For an unkown reason (at moment), sometimes if_cpsw cannot read from PHY
and fails to attach calling cpsw_detach() which end up in a panic.

Fix it by doing the proper check before detach the miibus and also fix the
leak of few variables.

And to actually make it work, ether_ifattach() has to be moved to the end
of cpsw_attach() to avoid a race where calling ether_ifdetach() before
domain_init() (which will only run later on) would make it crash at
INP_INFO_RLOCK() on in_pcbpurgeif0().

Tested on: BBB (am335x)
MFC after: 1 week
sys/arm/ti/cpsw/if_cpsw.c