|
@@ -2849,6 +2849,7 @@ static s32 wl_create_event_handler(struct wl_priv *wl)
|
|
|
static void wl_destroy_event_handler(struct wl_priv *wl)
|
|
|
{
|
|
|
if (wl->event_tsk) {
|
|
|
+ KILL_PROC(wl->event_tsk->pid, SIGTERM);
|
|
|
kthread_stop(wl->event_tsk);
|
|
|
wl->event_tsk = NULL;
|
|
|
}
|
|
@@ -2860,6 +2861,7 @@ static void wl_term_iscan(struct wl_priv *wl)
|
|
|
|
|
|
if (wl->iscan_on && iscan->tsk) {
|
|
|
iscan->state = WL_ISCAN_STATE_IDLE;
|
|
|
+ KILL_PROC(iscan->tsk->pid, SIGTERM);
|
|
|
kthread_stop(iscan->tsk);
|
|
|
iscan->tsk = NULL;
|
|
|
}
|
|
@@ -2994,6 +2996,7 @@ static s32 wl_iscan_thread(void *data)
|
|
|
int err = 0;
|
|
|
|
|
|
sched_setscheduler(current, SCHED_FIFO, ¶m);
|
|
|
+ allow_signal(SIGTERM);
|
|
|
status = WL_SCAN_RESULTS_PARTIAL;
|
|
|
while (likely(!down_interruptible(&iscan->sync))) {
|
|
|
if (kthread_should_stop())
|
|
@@ -3015,6 +3018,7 @@ static s32 wl_iscan_thread(void *data)
|
|
|
del_timer_sync(&iscan->timer);
|
|
|
iscan->timer_on = 0;
|
|
|
}
|
|
|
+ WL_DBG(("%s was terminated\n", __func__));
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -3215,6 +3219,7 @@ static s32 wl_event_handler(void *data)
|
|
|
struct wl_event_q *e;
|
|
|
|
|
|
sched_setscheduler(current, SCHED_FIFO, ¶m);
|
|
|
+ allow_signal(SIGTERM);
|
|
|
while (likely(!down_interruptible(&wl->event_sync))) {
|
|
|
if (kthread_should_stop())
|
|
|
break;
|
|
@@ -3232,6 +3237,7 @@ static s32 wl_event_handler(void *data)
|
|
|
}
|
|
|
wl_put_event(e);
|
|
|
}
|
|
|
+ WL_DBG(("%s was terminated\n", __func__));
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -3799,7 +3805,14 @@ static s32 __wl_cfg80211_down(struct wl_priv *wl)
|
|
|
if (wl->scan_request) {
|
|
|
cfg80211_scan_done(wl->scan_request, true); /* true
|
|
|
means abort */
|
|
|
- wl_set_mpc(ndev, 1);
|
|
|
+ /* wl_set_mpc(wl_to_ndev(wl), 1); */ /* BUG
|
|
|
+ * this operation cannot help
|
|
|
+ * but here because sdio
|
|
|
+ * is already down through
|
|
|
+ * rmmod process.
|
|
|
+ * Need to figure out how to
|
|
|
+ * address this issue
|
|
|
+ */
|
|
|
wl->scan_request = NULL;
|
|
|
}
|
|
|
clear_bit(WL_STATUS_READY, &wl->status);
|