diff options
-rw-r--r-- | net/core/pktgen.c | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 41489e3c69af..1ebdf1c0d118 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -3571,15 +3571,6 @@ static int pktgen_thread_worker(void *arg) | |||
3571 | pr_debug("%s removing thread\n", t->tsk->comm); | 3571 | pr_debug("%s removing thread\n", t->tsk->comm); |
3572 | pktgen_rem_thread(t); | 3572 | pktgen_rem_thread(t); |
3573 | 3573 | ||
3574 | /* Wait for kthread_stop */ | ||
3575 | for (;;) { | ||
3576 | set_current_state(TASK_INTERRUPTIBLE); | ||
3577 | if (kthread_should_stop()) | ||
3578 | break; | ||
3579 | schedule(); | ||
3580 | } | ||
3581 | __set_current_state(TASK_RUNNING); | ||
3582 | |||
3583 | return 0; | 3574 | return 0; |
3584 | } | 3575 | } |
3585 | 3576 | ||
@@ -3771,6 +3762,7 @@ static int __net_init pktgen_create_thread(int cpu, struct pktgen_net *pn) | |||
3771 | } | 3762 | } |
3772 | 3763 | ||
3773 | t->net = pn; | 3764 | t->net = pn; |
3765 | get_task_struct(p); | ||
3774 | wake_up_process(p); | 3766 | wake_up_process(p); |
3775 | wait_for_completion(&t->start_done); | 3767 | wait_for_completion(&t->start_done); |
3776 | 3768 | ||
@@ -3893,6 +3885,7 @@ static void __net_exit pg_net_exit(struct net *net) | |||
3893 | t = list_entry(q, struct pktgen_thread, th_list); | 3885 | t = list_entry(q, struct pktgen_thread, th_list); |
3894 | list_del(&t->th_list); | 3886 | list_del(&t->th_list); |
3895 | kthread_stop(t->tsk); | 3887 | kthread_stop(t->tsk); |
3888 | put_task_struct(t->tsk); | ||
3896 | kfree(t); | 3889 | kfree(t); |
3897 | } | 3890 | } |
3898 | 3891 | ||