1
0

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:
Arun Kumar Khandavalli
2021-10-05 23:13:13 -07:00
cometido por Madan Koyyalamudi
ascendente 6d737bd946
cometimento eb3e1b4096
3 ficheiros modificados com 41 adições e 2 eliminações

Ver ficheiro

@@ -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;
}

Ver ficheiro

@@ -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

Ver ficheiro

@@ -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)