Messages in this thread | | | Date | Wed, 23 Sep 2015 13:43:20 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH 1/2] clone: Declare do_fork() only when available |
| |
On Wed, 23 Sep 2015 13:59:28 +0200 Petr Mladek <pmladek@suse.com> wrote:
> The commit 3033f14ab78c32687 ("clone: support passing tls argument via C > rather than pt_regs magic") introduced _do_fork() that allowed to pass > @tls parameter. > > The old do_fork() is defined only for architectures that are not ready > to use this way and do not define HAVE_COPY_THREAD_TLS. But the function > is always declared in linux/sched.h. > > This patch hides the declaration when the function is not defined. > > .. > > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -2618,7 +2618,9 @@ extern int do_execveat(int, struct filename *, > const char __user * const __user *, > int); > extern long _do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *, unsigned long); > +#ifndef CONFIG_HAVE_COPY_THREAD_TLS > extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *); > +#endif
Generally we avoid adding such ifdefs.
Downside: a compile-time error is turned into a link-time error. This inconveniences a small number of people a small number of times.
Upside: cleaner-looking header files. This benefits a larger number of people a larger number of times.
So it's a good tradeoff, I think.
Now there may be some special reason why do_fork() is special. If so, you owe us a new changelog ;)
| |