• Yan Wang's avatar
    net: stmmac:fix system hang when setting up tag_8021q VLAN for DSA ports · 35226750
    Yan Wang authored
    The system hang because of dsa_tag_8021q_port_setup()->
    				stmmac_vlan_rx_add_vid().
    
    I found in stmmac_drv_probe() that cailing pm_runtime_put()
    disabled the clock.
    
    First, when the kernel is compiled with CONFIG_PM=y,The stmmac's
    resume/suspend is active.
    
    Secondly,stmmac as DSA master,the dsa_tag_8021q_port_setup() function
    will callback stmmac_vlan_rx_add_vid when DSA dirver starts. However,
    The system is hanged for the stmmac_vlan_rx_add_vid() accesses its
    registers after stmmac's clock is closed.
    
    I would suggest adding the pm_runtime_resume_and_get() to the
    stmmac_vlan_rx_add_vid().This guarantees that resuming clock output
    while in use.
    
    Fixes: b3dcb312 ("net: stmmac: correct clocks enabled in stmmac_vlan_rx_kill_vid()")
    Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: default avatarYan Wang <rk.code@outlook.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    35226750
stmmac_main.c 208 KB