qcacld-3.0: suspend scan before scheduler thread suspended

Scan cmd still can be exist after scheduler thread is suspended
when host suspend, the scan cmd can't be removed from
serialization list by either complete or cancel any more since
both depends on scheduler thread, suspend thread blocked 30s to
wait scan cmd cleared.

Roam sync event from F/W can't be handled and Roam sync complete
can't be sent to F/W since scheduler thread suspended, then F/W
assert for roam sync cmd timeout.

After receive F/W down event, host will try SSR, but blocked by
unfinished suspend thread too.

Fix: suspend all components including scan before suspend
scheduler thread, make sure scan cmd is cleared and no new scan
is allowed any more before scheduler thread suspended.

Change-Id: I7a3badeedea018e4d92bbe8660692e42923852aa
CRs-Fixed: 2620650
This commit is contained in:
Jianmin Zhu
2020-02-12 21:33:08 +08:00
committed by nshrivas
parent 15d20e9cbb
commit 5b0746560d
4 changed files with 70 additions and 23 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -824,6 +824,30 @@ QDF_STATUS ucfg_pmo_psoc_user_space_suspend_req(struct wlan_objmgr_psoc *psoc,
QDF_STATUS ucfg_pmo_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc,
enum qdf_suspend_type type);
/**
* ucfg_pmo_suspend_all_components() - Suspend all components
* @psoc: objmgr psoc handle
* @type: type of suspend
*
* Suspend all components registered to pmo
*
* Return: QDF status
*/
QDF_STATUS ucfg_pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc,
enum qdf_suspend_type type);
/**
* ucfg_pmo_resume_all_components() - Resume all components
* @psoc: objmgr psoc handle
* @type: type of suspend from which resume needed
*
* Resume all components registered to pmo
*
* Return: QDF status
*/
QDF_STATUS ucfg_pmo_resume_all_components(struct wlan_objmgr_psoc *psoc,
enum qdf_suspend_type type);
/**
* ucfg_pmo_psoc_bus_suspend_req(): handles bus suspend for psoc
* @psoc: objmgr psoc
@@ -1458,6 +1482,20 @@ ucfg_pmo_psoc_user_space_resume_req(
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
ucfg_pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc,
enum qdf_suspend_type type)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
ucfg_pmo_resume_all_components(struct wlan_objmgr_psoc *psoc,
enum qdf_suspend_type type)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
ucfg_pmo_psoc_bus_suspend_req(
struct wlan_objmgr_psoc *psoc,