From d8981f1ce9e5f115ac95dcdac0740d12867c7fe3 Mon Sep 17 00:00:00 2001 From: Bapiraju Alla Date: Thu, 27 Feb 2020 12:14:23 +0530 Subject: [PATCH] qcacmn: Add timer in use check before cancelling a vdev response timer Currently there is no check for whether the timer is in use or not before cancelling a vdev response timer. Because of this hdd is trying to cancel a vdev response timer that is not initialized. This is causing crash in the kernel. To resolve this issue, add vdev_rsp->rsp_timer_inuse check before cancelling a vdev response timer. Change-Id: Ibc82e7698472d11b0803dfc77d654b1ad33aa375 CRs-Fixed: 2630621 --- target_if/mlme/psoc/src/target_if_psoc_timer_tx_ops.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/target_if/mlme/psoc/src/target_if_psoc_timer_tx_ops.c b/target_if/mlme/psoc/src/target_if_psoc_timer_tx_ops.c index 7936e1f83415..33762feca6e6 100644 --- a/target_if/mlme/psoc/src/target_if_psoc_timer_tx_ops.c +++ b/target_if/mlme/psoc/src/target_if_psoc_timer_tx_ops.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2019-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 @@ -145,7 +145,8 @@ void target_if_flush_psoc_vdev_timers(struct wlan_objmgr_psoc *psoc) for (i = 0; i < WLAN_UMAC_PSOC_MAX_VDEVS; i++) { vdev_rsp = rx_ops->psoc_get_vdev_response_timer_info(psoc, i); - if (vdev_rsp && qdf_timer_sync_cancel(&vdev_rsp->rsp_timer)) + if (vdev_rsp && qdf_atomic_read(&vdev_rsp->rsp_timer_inuse) && + qdf_timer_sync_cancel(&vdev_rsp->rsp_timer)) target_if_vdev_mgr_rsp_timer_cb(vdev_rsp); } }