aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/core/pktgen.c11
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