• Daniel Wagner's avatar
    ath10k: use complete() instead complete_all() · 881ed54e
    Daniel Wagner authored
    There is only one waiter for the completion, therefore there
    is no need to use complete_all(). Let's make that clear by
    using complete() instead of complete_all().
    
    The usage pattern of the completion is:
    
    waiter context                          waker context
    
    scan.started
    ------------
    
    ath10k_start_scan()
      lockdep_assert_held(conf_mutex)
      auth10k_wmi_start_scan()
      wait_for_completion_timeout(scan.started)
    
    					ath10k_wmi_event_scan_start_failed()
    					  complete(scan.started)
    
    					ath10k_wmi_event_scan_started()
    					  complete(scan.started)
    
    scan.completed
    --------------
    
    ath10k_scan_stop()
      lockdep_assert_held(conf_mutex)
      ath10k_wmi_stop_scan()
      wait_for_completion_timeout(scan.completed)
    
    					__ath10k_scan_finish()
    					  complete(scan.completed)
    
    scan.on_channel
    ---------------
    
    ath10k_remain_on_channel()
      mutex_lock(conf_mutex)
      ath10k_start_scan()
      wait_for_completion_timeout(scan.on_channel)
    
    					ath10k_wmi_event_scan_foreign_chan()
    					  complete(scan.on_channel)
    
    offchan_tx_completed
    --------------------
    
    ath10k_offchan_tx_work()
      mutex_lock(conf_mutex)
      reinit_completion(offchan_tx_completed)
      wait_for_completion_timeout(offchan_tx_completed)
    
    					ath10k_report_offchain_tx()
    					  complete(offchan_tx_completed)
    
    install_key_done
    ----------------
    ath10k_install_key()
      lockep_assert_held(conf_mutex)
      reinit_completion(install_key_done)
      wait_for_completion_timeout(install_key_done)
    
    				        ath10k_htt_t2h_msg_handler()
    					  complete(install_key_done)
    
    vdev_setup_done
    ---------------
    
    ath10k_monitor_vdev_start()
      lockdep_assert_held(conf_mutex)
       reinit_completion(vdev_setup_done)
      ath10k_vdev_setup_sync()
        wait_for_completion_timeout(vdev_setup_done)
    
    					ath10k_wmi_event_vdev_start_resp()
    					  complete(vdev_setup_done)
    
    ath10k_monitor_vdev_stop()
      lockdep_assert_held(conf_mutex)
      reinit_completion(vdev_setup_done()
      ath10k_vdev_setup_sync()
        wait_for_completion_timeout(vdev_setup_done)
    
    					ath10k_wmi_event_vdev_stopped()
    					 complete(vdev_setup_done)
    
    thermal.wmi_sync
    ----------------
    ath10k_thermal_show_temp()
      mutex_lock(conf_mutex)
      reinit_completion(thermal.wmi_sync)
      wait_for_completion_timeout(thermal.wmi_sync)
    
    					ath10k_thermal_event_temperature()
    					  complete(thermal.wmi_sync)
    
    bss_survey_done
    ---------------
    ath10k_mac_update_bss_chan_survey
      lockdep_assert_held(conf_mutex)
      reinit_completion(bss_survey_done)
      wait_for_completion_timeout(bss_survey_done)
    
    					ath10k_wmi_event_pdev_bss_chan_info()
    					  complete(bss_survey_done)
    
    All complete() calls happen while the conf_mutex is taken. That means
    at max one waiter is possible.
    Signed-off-by: default avatarDaniel Wagner <daniel.wagner@bmw-carit.de>
    Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    881ed54e
core.c 59.7 KB