mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 15:11:48 -04:00
qcacmn: Perform napi state comparison before releasing napi lock
Release napi spinlock only after performing napi state comparison to avoid any race condition. Change-Id: Icd7b713e474a818dfc6d0fa402496bbe06a3af66 CRs-Fixed: 2078294
This commit is contained in:
parent
fc77960e38
commit
0efe289db5
1 changed files with 11 additions and 1 deletions
|
|
@ -410,6 +410,7 @@ int hif_napi_event(struct hif_opaque_softc *hif_ctx, enum qca_napi_event event,
|
|||
int rc = 0;
|
||||
uint32_t prev_state;
|
||||
int i;
|
||||
bool state_changed;
|
||||
struct napi_struct *napi;
|
||||
struct hif_softc *hif = HIF_GET_SOFTC(hif_ctx);
|
||||
struct qca_napi_data *napid = &(hif->napi_data);
|
||||
|
|
@ -559,9 +560,18 @@ int hif_napi_event(struct hif_opaque_softc *hif_ctx, enum qca_napi_event event,
|
|||
break;
|
||||
} /* switch blacklist_pending */
|
||||
|
||||
/* we want to perform the comparison in lock:
|
||||
* there is a possiblity of hif_napi_event get called
|
||||
* from two different contexts (driver unload and cpu hotplug
|
||||
* notification) and napid->state get changed
|
||||
* in driver unload context and can lead to race condition
|
||||
* in cpu hotplug context. Therefore, perform the napid->state
|
||||
* comparison before releasing lock.
|
||||
*/
|
||||
state_changed = (prev_state != napid->state);
|
||||
qdf_spin_unlock_bh(&(napid->lock));
|
||||
|
||||
if (prev_state != napid->state) {
|
||||
if (state_changed) {
|
||||
if (napid->state == ENABLE_NAPI_MASK) {
|
||||
rc = 1;
|
||||
for (i = 0; i < CE_COUNT_MAX; i++) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue