Skip to content
  • Niels Ole Salscheider's avatar
    brcmsmac: Use udelay instead of usleep_range · 7ffa5928
    Niels Ole Salscheider authored
    
    
    wlc_lcnphy_rx_iq_cal_gain is called during initialization, i. e. when
    executing brcms_up.
    But brcms_up is called from brcms_ops_start while the latter holds a spin lock.
    Thus, we cannot use usleep_range but have to use udelay.
    
    This fixes:
    BUG: scheduling while atomic: NetworkManager/1652/0x00000200
    [...]
    Call Trace:
     [<ffffffff81582522>] __schedule_bug+0x48/0x54
     [<ffffffff815892b6>] __schedule+0x596/0x6d0
     [<ffffffff81589719>] schedule+0x29/0x70
     [<ffffffff8158893c>] schedule_hrtimeout_range_clock+0xfc/0x140
     [<ffffffff81060f10>] ? update_rmtp+0x70/0x70
     [<ffffffff81588993>] schedule_hrtimeout_range+0x13/0x20
     [<ffffffff810495e0>] usleep_range+0x40/0x50
     [<ffffffffa05dedcb>] wlc_lcnphy_rx_iq_cal.constprop.10+0x59b/0xa90 [brcmsmac]
     [<ffffffffa05df4ce>] wlc_lcnphy_periodic_cal+0x20e/0x220 [brcmsmac]
     [<ffffffffa05dce8d>] ? wlc_lcnphy_set_tx_pwr_ctrl+0x21d/0x3c0 [brcmsmac]
     [<ffffffffa05e0cfc>] wlc_phy_init_lcnphy+0xacc/0x1100 [brcmsmac]
     [<ffffffffa05e0230>] ? wlc_phy_txpower_recalc_target_lcnphy+0x90/0x90 [brcmsmac]
     [<ffffffffa05d7c7d>] wlc_phy_init+0xcd/0x170 [brcmsmac]
     [<ffffffffa05c9dfe>] brcms_b_bsinit.isra.65+0x12e/0x310 [brcmsmac]
     [<ffffffffa05d061b>] brcms_c_init+0x8fb/0x1170 [brcmsmac]
     [<ffffffffa05c3a0a>] brcms_init+0x5a/0x70 [brcmsmac]
     [<ffffffffa05ce76c>] brcms_c_up+0x1ac/0x4a0 [brcmsmac]
     [<ffffffffa05c3c65>] brcms_up+0x25/0x30 [brcmsmac]
     [<ffffffffa05c44c0>] brcms_ops_start+0xd0/0x100 [brcmsmac]
    [...]
    
    Signed-off-by: default avatarNiels Ole Salscheider <niels_ole@salscheider-online.de>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    7ffa5928