qcacmn: Reset the vdev response timer during SSR
Presently, whenever there is any kind of reference leak in the system wlan driver doesn't recover and goes into a bad state. Add support to forcefully reset the vdev response timer so the system can gracefully recover and wifi can be functional. Change-Id: Iab705c17f4313e4b8efd980d5427bf8d4ce9496f CRs-Fixed: 3051962
Este cometimento está contido em:

cometido por
Madan Koyyalamudi

ascendente
6d737bd946
cometimento
eb3e1b4096
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021 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 above
|
||||
@@ -24,6 +25,8 @@
|
||||
#include <wlan_psoc_mlme_api.h>
|
||||
#include <qdf_module.h>
|
||||
#include "cfg_ucfg_api.h"
|
||||
#include "wlan_vdev_mgr_tgt_if_rx_api.h"
|
||||
#include <qdf_platform.h>
|
||||
|
||||
struct psoc_mlme_obj *wlan_psoc_mlme_get_cmpt_obj(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
@@ -102,6 +105,8 @@ QDF_STATUS mlme_psoc_open(struct wlan_objmgr_psoc *psoc)
|
||||
|
||||
QDF_STATUS mlme_psoc_close(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
if (qdf_is_recovering())
|
||||
tgt_vdev_mgr_reset_response_timer_info(psoc);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2019,2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021 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
|
||||
@@ -28,6 +29,15 @@
|
||||
#include <wlan_objmgr_vdev_obj.h>
|
||||
#include <wlan_vdev_mgr_tgt_if_rx_defs.h>
|
||||
|
||||
/**
|
||||
* tgt_vdev_mgr_reset_response_timer_info() - API to force reset vdev rsp timer
|
||||
* @psoc: objmgr psoc object
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void
|
||||
tgt_vdev_mgr_reset_response_timer_info(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* tgt_vdev_mgr_register_rx_ops() - API to register rx ops with lmac
|
||||
* @rx_ops: rx ops struct
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021 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
|
||||
@@ -33,6 +34,29 @@
|
||||
#include <include/wlan_psoc_mlme.h>
|
||||
#include <include/wlan_mlme_cmn.h>
|
||||
|
||||
void
|
||||
tgt_vdev_mgr_reset_response_timer_info(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct psoc_mlme_obj *psoc_mlme;
|
||||
struct vdev_response_timer *vdev_rsp;
|
||||
int i;
|
||||
|
||||
psoc_mlme = mlme_psoc_get_priv(psoc);
|
||||
if (!psoc_mlme) {
|
||||
mlme_err("PSOC_%d PSOC_MLME is NULL",
|
||||
wlan_psoc_get_id(psoc));
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < WLAN_UMAC_PSOC_MAX_VDEVS; i++) {
|
||||
vdev_rsp = &psoc_mlme->psoc_vdev_rt[i];
|
||||
qdf_atomic_set(&vdev_rsp->rsp_timer_inuse, 0);
|
||||
vdev_rsp->psoc = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
qdf_export_symbol(tgt_vdev_mgr_reset_response_timer_info);
|
||||
|
||||
struct vdev_response_timer *
|
||||
tgt_vdev_mgr_get_response_timer_info(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id)
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador