qcacmn: Deinit CE tasklet work before CE Cleanup

During freeing up of hif_config_de resources, the ce tasklet workers
are deinitialized after the ce cleanup is done. This causes a race
condition between shutdown and ce tasklet in case rescheduling of ce
taslket is done.

Deinitialize the taslket workers before ce structures are deinitialized.

Change-Id: I708711174cf818c0d15ef92c881c8d8aee49e9f1
CRs-Fixed: 2283272
Dieser Commit ist enthalten in:
jitiphil
2018-07-30 14:14:48 +05:30
committet von nshrivas
Ursprung 14e22492c5
Commit e393cf4170

Datei anzeigen

@@ -2885,13 +2885,18 @@ void hif_unconfig_ce(struct hif_softc *hif_sc)
pipe_info = &hif_state->pipe_info[pipe_num];
if (pipe_info->ce_hdl) {
ce_unregister_irq(hif_state, (1 << pipe_num));
}
}
deinit_tasklet_workers(hif_hdl);
for (pipe_num = 0; pipe_num < hif_sc->ce_count; pipe_num++) {
pipe_info = &hif_state->pipe_info[pipe_num];
if (pipe_info->ce_hdl) {
ce_fini(pipe_info->ce_hdl);
pipe_info->ce_hdl = NULL;
pipe_info->buf_sz = 0;
qdf_spinlock_destroy(&pipe_info->recv_bufs_needed_lock);
}
}
deinit_tasklet_workers(hif_hdl);
if (hif_sc->athdiag_procfs_inited) {
athdiag_procfs_remove();
hif_sc->athdiag_procfs_inited = false;