2001-10-30 04:32:21

by Robert Kuebel

[permalink] [raw]
Subject: [PATCH] 8139too thread termination

this patch stops the 8139too kernel thread from dying on any signal.
now, it will only terminate when the driver is closed.

the patch is agains 2.4.13.

thanks.
rob.

--- drivers/net/8139too.orig.c Mon Oct 29 22:59:15 2001
+++ drivers/net/8139too.c Mon Oct 29 23:07:32 2001
@@ -80,6 +80,8 @@

Kalle Olavi Niemitalo - Wake-on-LAN ioctls

+ Robert Kuebel - Save kernel thread from dying on any signal.
+
Submitting bug reports:

"rtl8139-diag -mmmaaavvveefN" output
@@ -616,6 +618,7 @@
struct completion thr_exited;
u32 rx_config;
struct rtl_extra_stats xstats;
+ int time_to_die;
};

MODULE_AUTHOR ("Jeff Garzik <[email protected]>");
@@ -1669,7 +1672,13 @@
timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout);
} while (!signal_pending (current) && (timeout > 0));

- if (signal_pending (current))
+ if (signal_pending (current)) {
+ spin_lock_irq(&current->sigmask_lock);
+ flush_signals(current);
+ spin_unlock_irq(&current->sigmask_lock);
+ }
+
+ if (tp->time_to_die)
break;

rtnl_lock ();
@@ -2200,6 +2209,8 @@
netif_stop_queue (dev);

if (tp->thr_pid >= 0) {
+ tp->time_to_die = 1;
+ wmb();
ret = kill_proc (tp->thr_pid, SIGTERM, 1);
if (ret) {
printk (KERN_ERR "%s: unable to signal thread\n", dev->name);


2001-10-31 00:12:05

by Robert Kuebel

[permalink] [raw]
Subject: Re: [PATCH] 8139too thread termination

ok, i am wondering if i have made a mistake. this patch will make the
kernel thread die when tp->time_to_die is true. tp is kmalloc()'ed
inside of alloc_etherdev. i didn't initialize time_to_die to 0, but
this patch has been working perfectly for me. am i just lucky or are
kmalloc()'ed regions zero'ed out? i know there is stuff like
get_zeroed_page(), but i don't think that applies here. i guess it
doesn't hurt to set the flag to zero myself.

can someone clue me in?

thanks.
rob.

On Mon, Oct 29, 2001 at 11:25:08PM -0500, Robert Kuebel wrote:
> this patch stops the 8139too kernel thread from dying on any signal.
> now, it will only terminate when the driver is closed.
>
> the patch is agains 2.4.13.
>
> thanks.
> rob.
>
> --- drivers/net/8139too.orig.c Mon Oct 29 22:59:15 2001
> +++ drivers/net/8139too.c Mon Oct 29 23:07:32 2001
> @@ -80,6 +80,8 @@
>
> Kalle Olavi Niemitalo - Wake-on-LAN ioctls
>
> + Robert Kuebel - Save kernel thread from dying on any signal.
> +
> Submitting bug reports:
>
> "rtl8139-diag -mmmaaavvveefN" output
> @@ -616,6 +618,7 @@
> struct completion thr_exited;
> u32 rx_config;
> struct rtl_extra_stats xstats;
> + int time_to_die;
> };
>
> MODULE_AUTHOR ("Jeff Garzik <[email protected]>");
> @@ -1669,7 +1672,13 @@
> timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout);
> } while (!signal_pending (current) && (timeout > 0));
>
> - if (signal_pending (current))
> + if (signal_pending (current)) {
> + spin_lock_irq(&current->sigmask_lock);
> + flush_signals(current);
> + spin_unlock_irq(&current->sigmask_lock);
> + }
> +
> + if (tp->time_to_die)
> break;
>
> rtnl_lock ();
> @@ -2200,6 +2209,8 @@
> netif_stop_queue (dev);
>
> if (tp->thr_pid >= 0) {
> + tp->time_to_die = 1;
> + wmb();
> ret = kill_proc (tp->thr_pid, SIGTERM, 1);
> if (ret) {
> printk (KERN_ERR "%s: unable to signal thread\n", dev->name);

2001-10-31 00:18:35

by Jeff Garzik

[permalink] [raw]
Subject: Re: [PATCH] 8139too thread termination

Robert Kuebel wrote:
>
> ok, i am wondering if i have made a mistake. this patch will make the
> kernel thread die when tp->time_to_die is true. tp is kmalloc()'ed
> inside of alloc_etherdev. i didn't initialize time_to_die to 0, but
> this patch has been working perfectly for me. am i just lucky or are
> kmalloc()'ed regions zero'ed out?

And here I thought you did it on purpose :)

alloc_etherdev zeroes memory it allocates, so in net drivers all private
structures can be considered initialized to zero when you get them.

Jeff


--
Jeff Garzik | Only so many songs can be sung
Building 1024 | with two lips, two lungs, and one tongue.
MandrakeSoft | - nomeansno

2001-10-31 00:22:35

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] 8139too thread termination

Robert Kuebel wrote:
>
> ok, i am wondering if i have made a mistake. this patch will make the
> kernel thread die when tp->time_to_die is true. tp is kmalloc()'ed
> inside of alloc_etherdev. i didn't initialize time_to_die to 0, but
> this patch has been working perfectly for me. am i just lucky or are
> kmalloc()'ed regions zero'ed out? i know there is stuff like
> get_zeroed_page(), but i don't think that applies here. i guess it
> doesn't hurt to set the flag to zero myself.
>

alloc_etherdev->alloc_netdev->memset(dev, 0, alloc_size);

It was zeroed for you.

2001-10-31 00:30:27

by Robert Kuebel

[permalink] [raw]
Subject: Re: [PATCH] 8139too thread termination

i was so wrapped up in digging through kmalloc(), that i missed the
memset() in alloc_netdev(). duh!

On Tue, Oct 30, 2001 at 07:18:50PM -0500, Jeff Garzik wrote:
> Robert Kuebel wrote:
> >
> > ok, i am wondering if i have made a mistake. this patch will make the
> > kernel thread die when tp->time_to_die is true. tp is kmalloc()'ed
> > inside of alloc_etherdev. i didn't initialize time_to_die to 0, but
> > this patch has been working perfectly for me. am i just lucky or are
> > kmalloc()'ed regions zero'ed out?
>
> And here I thought you did it on purpose :)
>
> alloc_etherdev zeroes memory it allocates, so in net drivers all private
> structures can be considered initialized to zero when you get them.
>
> Jeff
>
>
> --
> Jeff Garzik | Only so many songs can be sung
> Building 1024 | with two lips, two lungs, and one tongue.
> MandrakeSoft | - nomeansno