qcacld-3.0: Fix assert for race condition

When disconnect from wpa_supplicant and cm event from F/W happen at same
time, supplicant holds cm cm_req_lock and wait rsp of p2p cleanup roc from
scheduler thread until 2 sec timeout, sheduler thread is blocked to wait
for cm_req_lock.

When wmi peer delete of vdev0 is not sent within 1.2 sec after host send
wmi peer delete of vdev1, firmware will assert.

To fix it, don't wait rsp of p2p cleanup roc when disconnect by async way.

Change-Id: I877b7a446dfd12f621dad5049a67574359bdd322
CRs-Fixed: 3285115
Цей коміт міститься в:
Jianmin Zhu
2022-09-07 14:47:07 +08:00
зафіксовано Madan Koyyalamudi
джерело 44e5285e67
коміт 56608e95ec
7 змінених файлів з 25 додано та 17 видалено

Переглянути файл

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. 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
@@ -37,7 +37,8 @@ bool wlan_p2p_check_oui_and_force_1x1(uint8_t *assoc_ie, uint32_t assoc_ie_len)
return p2p_check_oui_and_force_1x1(assoc_ie, assoc_ie_len);
}
QDF_STATUS wlan_p2p_cleanup_roc_by_vdev(struct wlan_objmgr_vdev *vdev)
QDF_STATUS wlan_p2p_cleanup_roc_by_vdev(struct wlan_objmgr_vdev *vdev,
bool sync)
{
struct p2p_soc_priv_obj *p2p_soc_obj;
struct wlan_objmgr_psoc *psoc;
@@ -62,7 +63,7 @@ QDF_STATUS wlan_p2p_cleanup_roc_by_vdev(struct wlan_objmgr_vdev *vdev)
return QDF_STATUS_E_FAILURE;
}
return p2p_cleanup_roc_sync(p2p_soc_obj, vdev);
return p2p_cleanup_roc(p2p_soc_obj, vdev, sync);
}
QDF_STATUS wlan_p2p_status_connect(struct wlan_objmgr_vdev *vdev)

Переглянути файл

@@ -228,7 +228,7 @@ QDF_STATUS ucfg_p2p_roc_cancel_req(struct wlan_objmgr_psoc *soc,
QDF_STATUS ucfg_p2p_cleanup_roc_by_vdev(struct wlan_objmgr_vdev *vdev)
{
return wlan_p2p_cleanup_roc_by_vdev(vdev);
return wlan_p2p_cleanup_roc_by_vdev(vdev, true);
}
QDF_STATUS ucfg_p2p_cleanup_roc_by_psoc(struct wlan_objmgr_psoc *psoc)
@@ -246,7 +246,7 @@ QDF_STATUS ucfg_p2p_cleanup_roc_by_psoc(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_E_FAILURE;
}
return p2p_cleanup_roc_sync(obj, NULL);
return p2p_cleanup_roc(obj, NULL, true);
}
QDF_STATUS ucfg_p2p_cleanup_tx_by_vdev(struct wlan_objmgr_vdev *vdev)