>
> cliff white writes:
>
> > Okay, I can reproduce it on two machines, no problem.
>
> I too with CONFIG_PREEMPT=y. Thanks.
>
> Please try:
>
>
> --- net/core/pktgen.c.050310 2005-03-10 22:12:43.000000000 +0100
> +++ net/core/pktgen.c 2005-03-11 10:48:43.000000000 +0100
> @@ -151,7 +151,7 @@
> #include <asm/timex.h>
>
>
> -#define VERSION "pktgen v2.59: Packet Generator for packet performance test
> ing.\n"
> +#define VERSION "pktgen v2.60: Packet Generator for packet performance test
> ing.\n"
>
> /* #define PG_DEBUG(a) a */
> #define PG_DEBUG(a)
> @@ -1419,7 +1419,6 @@
> if (debug)
> printk("pktgen: t=%s, count=%lu\n", name, count);
>
> - thread_lock();
>
> t = (struct pktgen_thread*)(data);
> if(!t) {
> @@ -1441,14 +1440,18 @@
> if( copy_from_user(f, &user_buffer[i], len) )
> return -EFAULT;
> i += len;
> + thread_lock();
> pktgen_add_device(t, f);
> + thread_unlock();
> ret = count;
> sprintf(pg_result, "OK: add_device=%s", f);
> goto out;
> }
>
> if (!strcmp(name, "rem_device_all")) {
> + thread_lock();
> t->control |= T_REMDEV;
> + thread_unlock();
> current->state = TASK_INTERRUPTIBLE;
> schedule_timeout(HZ/8); /* Propagate thread->control */
> ret = count;
> @@ -1456,10 +1459,11 @@
> goto out;
> }
>
> -
> if (!strcmp(name, "max_before_softirq")) {
> len = num_arg(&user_buffer[i], 10, &value);
> + thread_lock();
> t->max_before_softirq = value;
> + thread_unlock();
> ret = count;
> sprintf(pg_result, "OK: max_before_softirq=%lu", value);
> goto out;
> @@ -1467,7 +1471,6 @@
>
> ret = -EINVAL;
> out:
> - thread_unlock();
>
> return ret;
> }
>
>
This stops the errors, thanks.
cliffw
>
> --ro
>
|