From: Andrew Morton <andrewm@uow.edu.au>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: frey@cxau.zko.dec.com, linux-kernel@vger.kernel.org
Subject: Re: kernel_thread vs. zombie
Date: Fri, 23 Mar 2001 00:04:00 +0000 [thread overview]
Message-ID: <3ABA92F0.CF6729C2@uow.edu.au> (raw)
In-Reply-To: <007801c0b309$5bca3530$90600410@SCHLEPPDOWN> <20010322233355.8870@mailhost.mipsys.com>
Benjamin Herrenschmidt wrote:
>
> >daemonize() makes calls that are all protected with the
> >big kernel lock in do_exit(). All usages of daemonize have
> >the big kernel lock held. So I guess it just needs it.
> >
> >Please let me know whether you have success if it makes
> >a difference with having it held.
>
> With a bit more experiments, I have this behaviour:
>
> (I hold the kerne lock, daemonize(), and release the kernel lock, then do
> my probe thing which takes a few seconds, and let the thread die by itself)
>
> - When started during boot (low PID (9)) It becomes a zombie
> - When started from a process that quits after sending the ioctl,
> it is correctly "garbage collected".
> - When started from a process that stays around, it becomes a zombie too
>
> So something is not working, or I'm missing something obvious, or whatever...
>
> Any clue ?
Take a look at kernel/kmod.c:call_usermodehelper(). Copy it.
This will make your thread a child of keventd. This takes
care of things like chrootedness, uids, cwds, signal masks,
reaping children, open files, and all the other crud which
you can accidentally inherit from your caller.
something like:
struct my_struct
{
struct tq_struct tq;
void (*function)(void *);
struct semaphore sem;
<other stuff>
};
/* keventd runs this */
void helper(void *data)
{
struct my_struct *my_ptr = data;
kernel_thread(my_ptr->function, my_ptr, CLONE_FLAGS|SIGCHLD);
}
start_thread(struct my_struct *my_ptr)
{
my_ptr->tq.sync = 0;
INIT_LIST_HEAD(&my_ptr->tq.list);
my_ptr->routine = helper;
my_ptr->data = my_ptr;
schedule_task(&my_ptr->tq);
}
next prev parent reply other threads:[~2001-03-23 0:07 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-03-22 11:49 kernel_thread vs. zombie Benjamin Herrenschmidt
2001-03-22 14:32 ` Martin Frey
2001-03-22 15:07 ` Benjamin Herrenschmidt
2001-03-22 17:21 ` Martin Frey
2001-03-22 18:47 ` Benjamin Herrenschmidt
2001-03-22 19:50 ` Martin Frey
2001-03-22 23:33 ` Benjamin Herrenschmidt
2001-03-23 0:04 ` Andrew Morton [this message]
2001-03-23 1:57 ` Martin Frey
2001-03-23 2:13 ` Andrew Morton
2001-03-23 8:06 ` Martin Frey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3ABA92F0.CF6729C2@uow.edu.au \
--to=andrewm@uow.edu.au \
--cc=benh@kernel.crashing.org \
--cc=frey@cxau.zko.dec.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox