On Jun 24, 2014, at 10:43 PM, Ryota Ozaki <[email protected]> wrote:
> Hi, > > I found a strange behavior of if_wm that > its interrupt handler may call its if_start > (xmit function) eventually. I don't think > it's sane. It makes difficult to use mutex for MP. > > Here is a call trace: > wm_intr => wm_linkintr => wm_linkintr_gmii => > mii_pollstat => makphy_service => mii_phy_update => > if_link_state_change => in6_if_link_up => > nd6_dad_start => nd6_dad_ns_output => ... => > => ether_output => ... => wm_start > > The interrupt handler calls mii, mii notifies > a link state change to inet6, and inet6 tries DAD. > This IPv6 DAD code (nd6_dad_start and > nd6_dad_ns_output) is the main issue of my claim. > nd6_dad_start normally sets up a callout for > nd6_dad_ns_output, however, it may call > nd6_dad_ns_output directly at random. Simple, set IFF_OACTIVE before calling mii
