From e52c02f76ae684f86f18f0fc7d7577e22a4d9318 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Sat, 22 May 2004 08:04:51 -0700 Subject: [PATCH] [PATCH] small numa api fixups From: Christoph Hellwig - don't include mempolicy.h in sched.h and mm.h when a forward delcaration is enough. Andi argued against that in the past, but I'd really hate to add another header to two of the includes used in basically every driver when we can include it in the six files actually needing it instead (that number is for my ppc32 system, maybe other arches need more include in their directories) - make numa api fields in tast_struct conditional on CONFIG_NUMA, this gives us a few ugly ifdefs but avoids wasting memory on non-NUMA systems. --- arch/ia64/ia32/binfmt_elf32.c | 1 + arch/ia64/kernel/perfmon.c | 1 + arch/ia64/mm/init.c | 1 + arch/x86_64/ia32/ia32_binfmt.c | 1 + fs/exec.c | 1 + include/linux/mm.h | 3 ++- include/linux/sched.h | 4 +++- kernel/exit.c | 3 +++ kernel/fork.c | 5 +++++ mm/mempolicy.c | 1 + mm/mmap.c | 1 + mm/mprotect.c | 1 + mm/shmem.c | 1 + 13 files changed, 22 insertions(+), 2 deletions(-) diff --git a/arch/ia64/ia32/binfmt_elf32.c b/arch/ia64/ia32/binfmt_elf32.c index 44952a0ef8cda..57dd04a1b9049 100644 --- a/arch/ia64/ia32/binfmt_elf32.c +++ b/arch/ia64/ia32/binfmt_elf32.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index 3365f23ffc914..df163f66ab381 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 673d73bfa7b76..a24e706351b82 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include diff --git a/arch/x86_64/ia32/ia32_binfmt.c b/arch/x86_64/ia32/ia32_binfmt.c index af8d595da912a..0d8355e60e682 100644 --- a/arch/x86_64/ia32/ia32_binfmt.c +++ b/arch/x86_64/ia32/ia32_binfmt.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include diff --git a/fs/exec.c b/fs/exec.c index 0e6fdcf209848..b0c53d706eef5 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -46,6 +46,7 @@ #include #include #include +#include #include #include diff --git a/include/linux/mm.h b/include/linux/mm.h index 8dd58e11edb0b..249167672b830 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -12,7 +12,8 @@ #include #include #include -#include + +struct mempolicy; #ifndef CONFIG_DISCONTIGMEM /* Don't use mapnrs, do it properly */ extern unsigned long max_mapnr; diff --git a/include/linux/sched.h b/include/linux/sched.h index 9a539b7eb0d20..9cf8e5be3ed08 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -29,7 +29,6 @@ #include #include #include -#include struct exec_domain; @@ -381,6 +380,7 @@ int set_current_groups(struct group_info *group_info); struct audit_context; /* See audit.c */ +struct mempolicy; struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ @@ -510,8 +510,10 @@ struct task_struct { unsigned long ptrace_message; siginfo_t *last_siginfo; /* For ptrace use. */ +#ifdef CONFIG_NUMA struct mempolicy *mempolicy; short il_next; /* could be shared with used_math */ +#endif }; static inline pid_t process_group(struct task_struct *tsk) diff --git a/kernel/exit.c b/kernel/exit.c index 5ac2db963f0b2..1053be962cad5 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -791,7 +792,9 @@ asmlinkage NORET_TYPE void do_exit(long code) __exit_fs(tsk); exit_namespace(tsk); exit_thread(); +#ifdef CONFIG_NUMA mpol_free(tsk->mempolicy); +#endif if (tsk->signal->leader) disassociate_ctty(1); diff --git a/kernel/fork.c b/kernel/fork.c index 2297ac8d0a0fb..8909a42c44209 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -972,12 +973,14 @@ struct task_struct *copy_process(unsigned long clone_flags, p->security = NULL; p->io_context = NULL; p->audit_context = NULL; +#ifdef CONFIG_NUMA p->mempolicy = mpol_copy(p->mempolicy); if (IS_ERR(p->mempolicy)) { retval = PTR_ERR(p->mempolicy); p->mempolicy = NULL; goto bad_fork_cleanup; } +#endif retval = -ENOMEM; if ((retval = security_task_alloc(p))) @@ -1128,7 +1131,9 @@ bad_fork_cleanup_audit: bad_fork_cleanup_security: security_task_free(p); bad_fork_cleanup_policy: +#ifdef CONFIG_NUMA mpol_free(p->mempolicy); +#endif bad_fork_cleanup: if (p->pid > 0) free_pidmap(p->pid); diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 63b01f4b33680..d4c9c9b922327 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -72,6 +72,7 @@ #include #include #include +#include #include static kmem_cache_t *policy_cache; diff --git a/mm/mmap.c b/mm/mmap.c index 0a570ac3b4de8..6b0a9036abff8 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include diff --git a/mm/mprotect.c b/mm/mprotect.c index d7c3e33a855f5..7934dcec6e27f 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include diff --git a/mm/shmem.c b/mm/shmem.c index 6af8c3afcf568..5a6d56a450d8e 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include -- 2.53.0