From: ebiederm@xmission.com (Eric W. Biederman)
To: Dean Nelson <dcn@sgi.com>
Cc: hch@infradead.org, akpm@osdl.org, containers@lists.osdl.org,
oleg@tv-sign.ru, linux-kernel@vger.kernel.org, jes@sgi.com,
tony.luck@intel.com
Subject: Re: [PATCH] ia64 sn xpc: Convert to use kthread API.
Date: Wed, 02 May 2007 09:44:11 -0600 [thread overview]
Message-ID: <m1vefbw7qs.fsf@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <20070502151642.GA23925@sgi.com> (Dean Nelson's message of "Wed, 2 May 2007 10:16:42 -0500")
Dean Nelson <dcn@sgi.com> writes:
> On Mon, Apr 30, 2007 at 10:22:30AM -0500, Dean Nelson wrote:
>> On Fri, Apr 27, 2007 at 02:33:32PM -0600, Eric W. Biederman wrote:
>> > Dean Nelson <dcn@sgi.com> writes:
>> >
>> > > Taking it one step further, if you added the notion of a thread pool,
>> > > where upon exit, a thread isn't destroyed but rather is queued ready to
>> > > handle the next kthread_create_quick() request.
>> >
>> > That might happen. So far I am avoiding the notion of a thread pool for
>> > as long as I can. There is some sense in it, especially in generalizing
>> > the svc thread pool code from nfs. But if I don't have to go there I would
>> > prefer it.
>>
>> This means that XPC will have to retain its thread pool, but I can
>> understand you not wanting to go there.
>
> On Thu, Apr 26, 2007 at 01:11:15PM -0600, Eric W. Biederman wrote:
>>
>> Ok. Because of the module unloading issue, and because we don't have
>> a lot of these threads running around, the current plan is to fix
>> thread_create and kthread_stop so that they must always be paired,
>> and so that kthread_stop will work correctly if the task has already
>> exited.
>>
>> Basically that just involves calling get_task_struct in kthread_create
>> and put_task_struct in kthread_stop.
>
> Okay, so I need to expand upon Christoph Hellwig's patch so that all
> the kthread_create()'d threads are kthread_stop()'d.
>
> This is easy to do for the XPC thread that exists for the lifetime of XPC,
> as well as for the threads created to manage the SGI system partitions.
>
> XPC has the one discovery thread that is created when XPC is first started
> and exits as soon as it has finished discovering all existing SGI system
> partitions. With your forthcoming change to kthread_stop() that will allow
> it to be called after the thread has exited, doing this one is also easy.
> Note that the kthread_stop() for this discovery thread won't occur until
> XPC is rmmod'd. This means that its task_struct will not be freed for
> possibly a very long time (i.e., weeks). Is that a problem?
As long as there is only one, not really. It would be good if we could
get rid of it though.
The practical problem is the race with rmmod, in particular if someone
calls rmmod while this thread is still running.
If I get clever I think this is likely solvable with something like.
kthread_maybe_stop(struct task_struct **loc)
{
struct task_struct *tsk;
tsk = xchg(loc, NULL);
if (tsk)
kthread_stop(tsk);
}
kthread_stop_self(struct task_struct **loc, int exit_code)
{
struct task_struct *tsk;
tsk = xchg(loc, NULL);
if (tsk)
put_task_struct(tsk);
do_exit(tsk);
}
I'm not quite convinced that is a common enough paradigm to implement
that.
> But then we come to XPC's pool of threads that deliver channel messages
> to the appropriate consumer (like XPNET) and can block indefinitely. As
> mentioned earlier there could be hundreds if not thousands of these
> (our systems keep getting bigger). So now requiring a kthread_stop()
> for each one of these becomes more of a problem, as it is a lot of
> task_struct pointers to maintain.
>
> Currently, XPC maintains these threads via a
> wait_event_interruptible_exclusive() queue so that it can wakeup as many
> or as few as needed at any given moment by calling wake_up_nr(). When XPC
> is rmmod'd, a flag is set which causes them to exit and wake_up_all()
> is called. Therefore XPC dosen't need to remember their pids or
> task_struct pointers.
>
> So what would you suggest we do for this pool of threads?
Good question.
The whole concept of something that feels like a core part of the
platform code being modular I'm still looking at strange.
> Is there any way to have a version of kthread_create() that doesn't
> require a matching kthread_stop()? Or add a kthread_not_stopping()
> that does the put_task_struct() call, so as to eliminate the need for
> calling kthread_stop()?
Yes. I was thinking calling it kthread_orphan or something like that.
We can't make anything like that the default, because of the modular
remove problem, but it's not to hard.
> Or should we reconsider the kthread pool approach
> (and get XPC out of the thread management business altogether)? Robin
> Holt is putting together a proposal for how one could do a kthread pool,
> it should provide a bit more justification for going down that road.
Eric
next prev parent reply other threads:[~2007-05-02 15:45 UTC|newest]
Thread overview: 237+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-19 6:52 Remaining straight forward kthread API conversions Eric W. Biederman
2007-04-19 6:55 ` [PATCH] i386 balance_irq: Convert to the kthread api Eric W. Biederman
2007-04-19 6:55 ` [PATCH] i386 voyager: Convert the monitor thread to use the kthread API Eric W. Biederman
2007-04-22 19:30 ` Christoph Hellwig
2007-04-19 6:55 ` [PATCH] mtd_blkdevs: Convert " Eric W. Biederman
2007-04-19 16:47 ` Christoph Hellwig
2007-04-19 19:13 ` Eric W. Biederman
2007-04-19 22:26 ` Andrew Morton
2007-04-22 12:24 ` Christoph Hellwig
2007-04-22 13:23 ` David Woodhouse
2007-04-22 19:26 ` Christoph Hellwig
2007-04-22 19:40 ` Christoph Hellwig
2007-04-19 6:55 ` [PATCH] cpci_hotplug: " Eric W. Biederman
2007-04-22 12:05 ` Christoph Hellwig
2007-04-23 16:19 ` Scott Murray
2007-04-27 22:07 ` Scott Murray
2007-05-04 11:12 ` Christoph Hellwig
2007-05-07 18:18 ` Scott Murray
2007-05-09 23:24 ` Andrew Morton
2007-05-10 0:00 ` Kristen Carlson Accardi
2007-05-10 18:29 ` Scott Murray
2007-05-10 19:30 ` Andrew Morton
2007-04-19 6:55 ` [PATCH] ibmphp: Convert to use the kthreads API Eric W. Biederman
2007-04-22 12:09 ` Christoph Hellwig
2007-04-19 6:55 ` [PATCH] cpqphp: Convert to use the kthread API Eric W. Biederman
2007-04-22 12:12 ` Christoph Hellwig
2007-04-19 6:55 ` [PATCH] pnpbios: Conert " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] sas_scsi_host: Convert " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] sparc64/power.c: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] s390/net/lcs: Convert to " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] s390 qeth: Convert to use " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] s390/scsi/zfcp_erp: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] arm ecard: Conver " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] ia64 sn xpc: Convert to use " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] powerpc pseries eeh: Convert to " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] powerpc pseries rtasd: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] macintosh/therm_pm72.c: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] macintosh/therm_windtunnel.c: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] macintosh/adb: Convert to the " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] macintosh/mediabay: Convert to " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] bluetooth bnep: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] bluetooth cmtp: Convert to use " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] bluetooth hidp: Convert to " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] bluetooth rfcomm: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] fs/afs: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] net/rxrpc: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] ipv4/ipvs: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] saa7134-tvaudio: " Eric W. Biederman
2007-04-20 12:48 ` Cedric Le Goater
2007-04-20 13:05 ` Christoph Hellwig
2007-04-19 6:55 ` [PATCH] nfs lockd reclaimer: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] nfsv4 delegation: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] nfsd/nfs4state: Remove unnecessary daemonize call Eric W. Biederman
2007-04-19 6:55 ` [PATCH] nfs4state reclaimer: Remove unnecessary allow_signal Eric W. Biederman
2007-04-19 6:55 ` [PATCH] smbfs: " Eric W. Biederman
2007-04-19 6:55 ` [PATCH] dvb_en_50221: Convert to kthread API Eric W. Biederman
2007-04-19 6:56 ` [PATCH] md: Remove broken SIGKILL support Eric W. Biederman
2007-04-19 6:56 ` [PATCH] synchro_test: Convert to the kthread API Eric W. Biederman
2007-04-19 6:56 ` Eric W. Biederman
2007-04-19 7:58 ` [PATCH] i386 balance_irq: Convert to the kthread api Eric W. Biederman
2007-04-19 7:58 ` [PATCH] i386 voyager: Convert the monitor thread to use the kthread API Eric W. Biederman
2007-04-19 7:58 ` [PATCH] mtd_blkdevs: Convert " Eric W. Biederman
2007-04-19 7:58 ` [PATCH] cpci_hotplug: " Eric W. Biederman
2007-04-19 7:58 ` [PATCH] ibmphp: Convert to use the kthreads API Eric W. Biederman
2007-04-19 7:58 ` [PATCH] cpqphp: Convert to use the kthread API Eric W. Biederman
2007-04-20 1:54 ` Andrew Morton
2007-04-19 7:58 ` [PATCH] pnpbios: Conert " Eric W. Biederman
2007-04-19 7:58 ` [PATCH] sas_scsi_host: Convert " Eric W. Biederman
2007-04-20 0:37 ` Andrew Morton
2007-04-22 19:38 ` Christoph Hellwig
2007-04-22 21:37 ` James Bottomley
2007-04-22 21:48 ` Eric W. Biederman
2007-04-19 7:58 ` [PATCH] sparc64/power.c: " Eric W. Biederman
2007-04-20 0:30 ` Andrew Morton
2007-04-19 7:58 ` [PATCH] s390/net/lcs: Convert to " Eric W. Biederman
2007-04-19 8:19 ` Frank Pavlic
2007-04-19 7:58 ` [PATCH] s390 qeth: Convert to use " Eric W. Biederman
2007-04-19 7:58 ` [PATCH] s390/scsi/zfcp_erp: " Eric W. Biederman
2007-04-22 20:17 ` Christoph Hellwig
2007-04-30 10:41 ` Swen Schillig
2007-04-19 7:58 ` [PATCH] arm ecard: Conver " Eric W. Biederman
2007-04-22 20:18 ` Christoph Hellwig
2007-04-19 7:58 ` [PATCH] ia64 sn xpc: Convert to use " Eric W. Biederman
2007-04-19 23:51 ` Andrew Morton
2007-04-20 6:23 ` Jes Sorensen
2007-04-20 14:21 ` Robin Holt
2007-04-21 19:53 ` Eric W. Biederman
2007-04-22 20:36 ` Christoph Hellwig
2007-04-23 17:11 ` Jes Sorensen
2007-04-23 17:11 ` Jes Sorensen
2007-04-23 17:36 ` Eric W. Biederman
2007-04-23 17:36 ` Eric W. Biederman
2007-04-23 19:03 ` Russ Anderson
2007-04-23 19:03 ` Russ Anderson
2007-04-27 17:41 ` Dean Nelson
2007-04-27 18:34 ` Eric W. Biederman
2007-04-27 20:12 ` Dean Nelson
2007-04-27 20:33 ` Eric W. Biederman
2007-04-30 15:22 ` Dean Nelson
2007-05-02 15:16 ` Dean Nelson
2007-05-02 15:44 ` Eric W. Biederman [this message]
2007-05-17 13:44 ` Dean Nelson
2007-04-26 20:00 ` Dean Nelson
2007-04-19 7:58 ` [PATCH] powerpc pseries eeh: Convert to " Eric W. Biederman
2007-04-19 23:47 ` Andrew Morton
2007-04-22 12:31 ` Christoph Hellwig
2007-04-22 12:31 ` Christoph Hellwig
2007-04-23 20:50 ` Linas Vepstas
2007-04-24 1:38 ` Benjamin Herrenschmidt
2007-04-24 1:38 ` Benjamin Herrenschmidt
2007-04-24 2:08 ` Eric W. Biederman
2007-04-24 2:08 ` Eric W. Biederman
2007-04-24 2:42 ` Benjamin Herrenschmidt
2007-04-24 2:42 ` Benjamin Herrenschmidt
2007-04-24 3:20 ` Eric W. Biederman
2007-04-24 3:20 ` Eric W. Biederman
2007-04-24 4:34 ` Paul Mackerras
2007-04-24 4:34 ` Paul Mackerras
2007-04-24 4:34 ` Paul Mackerras
2007-04-24 4:51 ` Eric W. Biederman
2007-04-24 4:51 ` Eric W. Biederman
2007-04-24 5:00 ` Benjamin Herrenschmidt
2007-04-24 5:00 ` Benjamin Herrenschmidt
2007-04-24 5:43 ` Eric W. Biederman
2007-04-24 5:43 ` Eric W. Biederman
2007-04-24 5:58 ` Benjamin Herrenschmidt
2007-04-24 5:58 ` Benjamin Herrenschmidt
2007-04-24 6:17 ` SOME STUFF ABOUT REISER4 lkml777
2007-04-24 6:17 ` lkml777
2007-04-24 17:26 ` Eric M. Hopper
2007-04-24 7:46 ` [PATCH] powerpc pseries eeh: Convert to kthread API Cornelia Huck
2007-04-24 7:46 ` Cornelia Huck
2007-04-24 17:24 ` Linas Vepstas
2007-04-24 17:24 ` Linas Vepstas
2007-04-24 5:55 ` Paul Mackerras
2007-04-24 5:55 ` Paul Mackerras
2007-04-24 8:37 ` Christoph Hellwig
2007-04-24 8:37 ` Christoph Hellwig
2007-04-24 17:35 ` Linas Vepstas
2007-04-19 7:58 ` [PATCH] powerpc pseries rtasd: " Eric W. Biederman
2007-04-22 12:34 ` Christoph Hellwig
2007-04-19 7:58 ` [PATCH] macintosh/therm_pm72.c: " Eric W. Biederman
2007-04-22 19:16 ` Christoph Hellwig
2007-04-22 22:46 ` Paul Mackerras
2007-04-19 7:58 ` [PATCH] macintosh/therm_windtunnel.c: " Eric W. Biederman
2007-04-19 23:37 ` Andrew Morton
2007-04-20 8:53 ` Benjamin Herrenschmidt
2007-04-19 7:58 ` [PATCH] macintosh/adb: Convert to the " Eric W. Biederman
2007-04-19 7:58 ` [PATCH] macintosh/mediabay: Convert to " Eric W. Biederman
2007-04-19 23:30 ` Andrew Morton
2007-04-20 8:51 ` Benjamin Herrenschmidt
2007-04-19 7:58 ` [PATCH] bluetooth bnep: " Eric W. Biederman
2007-04-19 23:24 ` Andrew Morton
2007-04-20 10:20 ` [Devel] " Cedric Le Goater
2007-04-20 12:37 ` Cedric Le Goater
2007-04-21 16:11 ` Satyam Sharma
2007-04-22 19:44 ` Christoph Hellwig
2007-04-23 3:12 ` [PATCH] kthread: Spontaneous exit support Eric W. Biederman
2007-04-23 11:25 ` Christoph Hellwig
2007-04-23 16:58 ` Oleg Nesterov
2007-04-23 17:45 ` Eric W. Biederman
2007-04-23 18:09 ` Christoph Hellwig
2007-04-23 18:20 ` Oleg Nesterov
2007-04-24 13:08 ` Jan Engelhardt
2007-04-24 13:34 ` Christoph Hellwig
2007-04-19 7:58 ` [PATCH] bluetooth cmtp: Convert to use kthread API Eric W. Biederman
2007-04-19 7:58 ` [PATCH] bluetooth hidp: Convert to " Eric W. Biederman
2007-04-19 23:20 ` Andrew Morton
2007-04-19 7:58 ` [PATCH] bluetooth rfcomm: " Eric W. Biederman
2007-04-19 23:12 ` Andrew Morton
2007-04-20 15:20 ` [Devel] " Cedric Le Goater
2007-04-22 20:14 ` Christoph Hellwig
2007-04-19 7:58 ` [PATCH] fs/afs: " Eric W. Biederman
2007-04-19 9:32 ` David Howells
2007-04-19 7:58 ` [PATCH] net/rxrpc: " Eric W. Biederman
2007-04-19 9:32 ` David Howells
2007-04-19 13:05 ` Eric W. Biederman
2007-04-19 14:18 ` Getting the new RxRPC patches upstream David Howells
2007-04-19 15:50 ` Eric W. Biederman
2007-04-19 16:18 ` David Howells
2007-04-19 19:14 ` Eric W. Biederman
2007-04-19 20:14 ` David Miller
2007-04-20 1:15 ` Herbert Xu
2007-04-20 8:02 ` David Howells
2007-04-20 8:58 ` David Miller
2007-04-20 10:41 ` David Howells
2007-04-20 18:38 ` Andrew Morton
2007-04-20 21:28 ` Oleg Nesterov
2007-04-23 8:32 ` David Howells
2007-04-23 17:11 ` Oleg Nesterov
2007-04-24 13:37 ` David Howells
2007-04-24 14:22 ` Oleg Nesterov
2007-04-24 15:51 ` David Howells
2007-04-24 16:40 ` Oleg Nesterov
2007-04-24 16:58 ` David Howells
2007-04-24 17:33 ` Oleg Nesterov
2007-04-24 18:22 ` David Howells
2007-04-24 19:34 ` Oleg Nesterov
2007-04-25 8:10 ` David Howells
2007-04-25 10:41 ` Oleg Nesterov
2007-04-25 10:45 ` David Howells
2007-04-25 13:48 ` David Howells
2007-04-19 23:05 ` [PATCH] net/rxrpc: Convert to kthread API Andrew Morton
2007-04-20 7:47 ` David Howells
2007-04-19 7:58 ` [PATCH] ipv4/ipvs: " Eric W. Biederman
2007-04-19 9:04 ` Simon Horman
2007-04-19 22:59 ` Andrew Morton
2007-04-22 19:50 ` Christoph Hellwig
2007-04-19 7:58 ` [PATCH] saa7134-tvaudio: " Eric W. Biederman
2007-04-19 22:52 ` Andrew Morton
2007-04-19 7:58 ` [PATCH] nfs lockd reclaimer: " Eric W. Biederman
2007-04-19 16:21 ` Trond Myklebust
2007-04-19 19:20 ` Eric W. Biederman
2007-04-19 21:19 ` Trond Myklebust
2007-04-19 21:25 ` Dave Hansen
2007-04-21 19:04 ` Eric W. Biederman
2007-04-19 21:40 ` Andrew Morton
2007-04-19 22:04 ` Trond Myklebust
2007-04-21 19:47 ` Eric W. Biederman
2007-04-19 7:59 ` [PATCH] nfsv4 delegation: " Eric W. Biederman
2007-04-19 16:22 ` Trond Myklebust
2007-04-19 7:59 ` [PATCH] nfsd/nfs4state: Remove unnecessary daemonize call Eric W. Biederman
2007-04-19 7:59 ` [PATCH] nfs4state reclaimer: Remove unnecessary allow_signal Eric W. Biederman
2007-04-19 16:26 ` Trond Myklebust
2007-04-19 7:59 ` [PATCH] smbfs: " Eric W. Biederman
2007-04-19 22:47 ` Andrew Morton
2007-04-19 7:59 ` [PATCH] dvb_en_50221: Convert to kthread API Eric W. Biederman
2007-04-19 22:34 ` Andrew Morton
2007-04-20 6:37 ` Christoph Hellwig
2007-04-20 6:48 ` Andrew Morton
2007-04-20 9:37 ` Cedric Le Goater
2007-04-19 7:59 ` [PATCH] md: Remove broken SIGKILL support Eric W. Biederman
2007-05-01 0:47 ` Neil Brown
2007-05-01 6:13 ` Eric W. Biederman
2007-04-19 7:59 ` [PATCH] synchro_test: Convert to the kthread API Eric W. Biederman
2007-04-19 7:59 ` Eric W. Biederman
2007-04-22 12:15 ` Remaining straight forward kthread API conversions Christoph Hellwig
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=m1vefbw7qs.fsf@ebiederm.dsl.xmission.com \
--to=ebiederm@xmission.com \
--cc=akpm@osdl.org \
--cc=containers@lists.osdl.org \
--cc=dcn@sgi.com \
--cc=hch@infradead.org \
--cc=jes@sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@tv-sign.ru \
--cc=tony.luck@intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.