projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[firefly-linux-kernel-4.4.55.git]
/
net
/
core
/
pktgen.c
diff --git
a/net/core/pktgen.c
b/net/core/pktgen.c
index a803b442234c5ae1ddee3a89fe9cf04e126f97b3..fdf537707e51afd9099df2693d4e5f5af668ba5a 100644
(file)
--- a/
net/core/pktgen.c
+++ b/
net/core/pktgen.c
@@
-390,6
+390,7
@@
struct pktgen_thread {
int cpu;
wait_queue_head_t queue;
int cpu;
wait_queue_head_t queue;
+ struct completion start_done;
};
#define REMOVE 1
};
#define REMOVE 1
@@
-3414,6
+3415,7
@@
static int pktgen_thread_worker(void *arg)
BUG_ON(smp_processor_id() != cpu);
init_waitqueue_head(&t->queue);
BUG_ON(smp_processor_id() != cpu);
init_waitqueue_head(&t->queue);
+ complete(&t->start_done);
pr_debug("pktgen: starting pktgen/%d: pid=%d\n", cpu, task_pid_nr(current));
pr_debug("pktgen: starting pktgen/%d: pid=%d\n", cpu, task_pid_nr(current));
@@
-3570,15
+3572,14
@@
static int pktgen_add_device(struct pktgen_thread *t, const char *ifname)
if (err)
goto out1;
if (err)
goto out1;
- pkt_dev->entry = proc_create
(ifname, 0600
,
-
pg_proc_dir, &pktgen_if_fops
);
+ pkt_dev->entry = proc_create
_data(ifname, 0600, pg_proc_dir
,
+
&pktgen_if_fops, pkt_dev
);
if (!pkt_dev->entry) {
printk(KERN_ERR "pktgen: cannot create %s/%s procfs entry.\n",
PG_PROC_DIR, ifname);
err = -EINVAL;
goto out2;
}
if (!pkt_dev->entry) {
printk(KERN_ERR "pktgen: cannot create %s/%s procfs entry.\n",
PG_PROC_DIR, ifname);
err = -EINVAL;
goto out2;
}
- pkt_dev->entry->data = pkt_dev;
#ifdef CONFIG_XFRM
pkt_dev->ipsmode = XFRM_MODE_TRANSPORT;
pkt_dev->ipsproto = IPPROTO_ESP;
#ifdef CONFIG_XFRM
pkt_dev->ipsmode = XFRM_MODE_TRANSPORT;
pkt_dev->ipsproto = IPPROTO_ESP;
@@
-3616,6
+3617,7
@@
static int __init pktgen_create_thread(int cpu)
INIT_LIST_HEAD(&t->if_list);
list_add_tail(&t->th_list, &pktgen_threads);
INIT_LIST_HEAD(&t->if_list);
list_add_tail(&t->th_list, &pktgen_threads);
+ init_completion(&t->start_done);
p = kthread_create(pktgen_thread_worker, t, "kpktgend_%d", cpu);
if (IS_ERR(p)) {
p = kthread_create(pktgen_thread_worker, t, "kpktgend_%d", cpu);
if (IS_ERR(p)) {
@@
-3628,7
+3630,8
@@
static int __init pktgen_create_thread(int cpu)
kthread_bind(p, cpu);
t->tsk = p;
kthread_bind(p, cpu);
t->tsk = p;
- pe = proc_create(t->tsk->comm, 0600, pg_proc_dir, &pktgen_thread_fops);
+ pe = proc_create_data(t->tsk->comm, 0600, pg_proc_dir,
+ &pktgen_thread_fops, t);
if (!pe) {
printk(KERN_ERR "pktgen: cannot create %s/%s procfs entry.\n",
PG_PROC_DIR, t->tsk->comm);
if (!pe) {
printk(KERN_ERR "pktgen: cannot create %s/%s procfs entry.\n",
PG_PROC_DIR, t->tsk->comm);
@@
-3638,9
+3641,8
@@
static int __init pktgen_create_thread(int cpu)
return -EINVAL;
}
return -EINVAL;
}
- pe->data = t;
-
wake_up_process(p);
wake_up_process(p);
+ wait_for_completion(&t->start_done);
return 0;
}
return 0;
}
@@
-3716,8
+3718,6
@@
static int __init pg_init(void)
return -EINVAL;
}
return -EINVAL;
}
- pe->data = NULL;
-
/* Register us to receive netdevice events */
register_netdevice_notifier(&pktgen_notifier_block);
/* Register us to receive netdevice events */
register_netdevice_notifier(&pktgen_notifier_block);