From 9e61eb45141bac15c236e2e317d13187efea4029 Mon Sep 17 00:00:00 2001 From: Yu Tian Date: Fri, 31 Dec 2021 13:37:14 +0800 Subject: [PATCH] qcacmn: Stop replenish timer during recovery During recovery, when this timer is started, there is no stop operation. If the timer is triggered and SSR is not completed, it will visit re-inited data structure and lead kernel crash. Change-Id: I44a31d70ee80d59076e4121f6924faa470ce7575 CRs-Fixed: 3102029 --- qdf/inc/qdf_nbuf.h | 9 +++++++++ qdf/linux/src/qdf_nbuf.c | 12 ++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 5597cd43b1..40c0eb0a71 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -4257,4 +4257,13 @@ static inline void qdf_set_smmu_fault_state(bool smmu_fault_state) #else #include #endif + +/** + * qdf_nbuf_stop_replenish_timer - Stop alloc fail replenish timer + * + * This function stops the alloc fail replenish timer. + * + * Return: void + */ +void qdf_nbuf_stop_replenish_timer(void); #endif /* _QDF_NBUF_H */ diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 7eb44caa1e..aa950a5617 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -295,7 +295,7 @@ qdf_export_symbol(qdf_nbuf_set_state); * * Return: void */ -static void __qdf_nbuf_start_replenish_timer(void) +static inline void __qdf_nbuf_start_replenish_timer(void) { qdf_atomic_inc(&alloc_track_timer.alloc_fail_cnt); if (qdf_mc_timer_get_current_state(&alloc_track_timer.track_timer) != @@ -311,7 +311,7 @@ static void __qdf_nbuf_start_replenish_timer(void) * * Return: void */ -static void __qdf_nbuf_stop_replenish_timer(void) +static inline void __qdf_nbuf_stop_replenish_timer(void) { if (qdf_atomic_read(&alloc_track_timer.alloc_fail_cnt) == 0) return; @@ -365,10 +365,18 @@ void __qdf_nbuf_deinit_replenish_timer(void) __qdf_nbuf_stop_replenish_timer(); qdf_mc_timer_destroy(&alloc_track_timer.track_timer); } + +void qdf_nbuf_stop_replenish_timer(void) +{ + __qdf_nbuf_stop_replenish_timer(); +} #else static inline void __qdf_nbuf_start_replenish_timer(void) {} static inline void __qdf_nbuf_stop_replenish_timer(void) {} +void qdf_nbuf_stop_replenish_timer(void) +{ +} #endif /* globals do not need to be initialized to NULL/0 */