From: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
To: David Rientjes <rientjes@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Paul Jackson <pj@sgi.com>, Christoph Lameter <clameter@sgi.com>,
Andi Kleen <ak@suse.de>,
linux-kernel@vger.kernel.org
Subject: Re: [patch 1/4] mempolicy: convert MPOL constants to enum
Date: Tue, 12 Feb 2008 17:10:31 -0700 [thread overview]
Message-ID: <1202861432.4974.29.camel@localhost> (raw)
In-Reply-To: <alpine.DEB.1.00.0802101506130.11145@chino.kir.corp.google.com>
On Mon, 2008-02-11 at 07:30 -0800, David Rientjes wrote:
> The mempolicy mode constants, MPOL_DEFAULT, MPOL_PREFERRED, MPOL_BIND,
> and MPOL_INTERLEAVE, are better declared as part of an enum for type
> checking.
>
> The policy member of struct mempolicy is also converted from type short
> to type unsigned short. A negative policy does not have any legitimate
> meaning, so it is possible to change its type in preparation for adding
> optional mode flags later.
>
> The equivalent member of struct shmem_sb_info is also changed from int
> to unsigned short.
>
> For compatibility, the policy formal to get_mempolicy() remains as a
> pointer to an int:
>
> int get_mempolicy(int *policy, unsigned long *nmask,
> unsigned long maxnode, unsigned long addr,
> unsigned long flags);
>
> although the only possible values is the range of type unsigned short.
>
> Cc: Paul Jackson <pj@sgi.com>
> Cc: Christoph Lameter <clameter@sgi.com>
> Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
> Cc: Andi Kleen <ak@suse.de>
> Signed-off-by: David Rientjes <rientjes@google.com>
> ---
> Applies on top of V3 of Lee Schermerhorn's mempolicy patch posted to
> LKML on February 8.
>
> include/linux/mempolicy.h | 21 +++++++++++----------
> include/linux/shmem_fs.h | 2 +-
> mm/mempolicy.c | 29 +++++++++++++++++------------
> mm/shmem.c | 11 ++++++-----
> 4 files changed, 35 insertions(+), 28 deletions(-)
>
> diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
> --- a/include/linux/mempolicy.h
> +++ b/include/linux/mempolicy.h
> @@ -9,12 +9,13 @@
> */
>
> /* Policies */
> -#define MPOL_DEFAULT 0
> -#define MPOL_PREFERRED 1
> -#define MPOL_BIND 2
> -#define MPOL_INTERLEAVE 3
> -
> -#define MPOL_MAX MPOL_INTERLEAVE
> +enum mempolicy_mode {
> + MPOL_DEFAULT,
> + MPOL_PREFERRED,
> + MPOL_BIND,
> + MPOL_INTERLEAVE,
> + MPOL_MAX, /* always last member of mempolicy_mode */
> +};
>
> /* Flags for get_mem_policy */
> #define MPOL_F_NODE (1<<0) /* return next IL mode instead of node mask */
> @@ -62,7 +63,7 @@ struct mm_struct;
> */
> struct mempolicy {
> atomic_t refcnt;
> - short policy; /* See MPOL_* above */
> + unsigned short policy; /* See MPOL_* above */
> union {
> struct zonelist *zonelist; /* bind */
> short preferred_node; /* preferred */
> @@ -133,8 +134,8 @@ struct shared_policy {
> spinlock_t lock;
> };
>
> -void mpol_shared_policy_init(struct shared_policy *info, int policy,
> - nodemask_t *nodes);
> +void mpol_shared_policy_init(struct shared_policy *info,
> + enum mempolicy_mode policy, nodemask_t *nodes);
Perhaps just my own myopia, but I don't see the benefit of this change;
especially when taken with the subsequent patch [2/4]. The only place
we pass around a "naked" policy member [outside of a mempolicy struct]
is between the sys call interface [and shmem_sb_info] and the
mpol_check_policy()/mpol_new() functions. In the subsequent patch,
you'll add the optional flags to this member and this type change either
requires a separate argument [as you've done] or requires undoing this
change [as I'd like to see].
Why not leave it as an int. Will simplify this and subsequent patch.
See comments there.
Other than that, I'm fine with this patch.
> int mpol_set_shared_policy(struct shared_policy *info,
> struct vm_area_struct *vma,
> struct mempolicy *new);
> @@ -200,7 +201,7 @@ static inline int mpol_set_shared_policy(struct shared_policy *info,
> }
>
> static inline void mpol_shared_policy_init(struct shared_policy *info,
> - int policy, nodemask_t *nodes)
> + enum mempolicy_type policy, nodemask_t *nodes)
> {
> }
>
> diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
> --- a/include/linux/shmem_fs.h
> +++ b/include/linux/shmem_fs.h
> @@ -34,7 +34,7 @@ struct shmem_sb_info {
> uid_t uid; /* Mount uid for root directory */
> gid_t gid; /* Mount gid for root directory */
> mode_t mode; /* Mount mode for root directory */
> - int policy; /* Default NUMA memory alloc policy */
> + unsigned short policy; /* Default NUMA memory alloc policy */
> nodemask_t policy_nodes; /* nodemask for preferred and bind */
> };
>
> diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> --- a/mm/mempolicy.c
> +++ b/mm/mempolicy.c
> @@ -114,7 +114,7 @@ static void mpol_rebind_policy(struct mempolicy *pol,
> const nodemask_t *newmask);
>
> /* Do sanity checking on a policy */
> -static int mpol_check_policy(int mode, nodemask_t *nodes)
> +static int mpol_check_policy(enum mempolicy_mode mode, nodemask_t *nodes)
> {
> int was_empty, is_empty;
>
> @@ -159,6 +159,8 @@ static int mpol_check_policy(int mode, nodemask_t *nodes)
> if (!was_empty && is_empty)
> return -EINVAL;
> break;
> + default:
> + BUG();
> }
> return 0;
> }
> @@ -201,7 +203,7 @@ static struct zonelist *bind_zonelist(nodemask_t *nodes)
> }
>
> /* Create a new policy */
> -static struct mempolicy *mpol_new(int mode, nodemask_t *nodes)
> +static struct mempolicy *mpol_new(enum mempolicy_mode mode, nodemask_t *nodes)
> {
> struct mempolicy *policy;
>
> @@ -235,6 +237,8 @@ static struct mempolicy *mpol_new(int mode, nodemask_t *nodes)
> return error_code;
> }
> break;
> + default:
> + BUG();
> }
> policy->policy = mode;
> policy->cpuset_mems_allowed = cpuset_mems_allowed(current);
> @@ -479,7 +483,7 @@ static void mpol_set_task_struct_flag(void)
> }
>
> /* Set the process memory policy */
> -static long do_set_mempolicy(int mode, nodemask_t *nodes)
> +static long do_set_mempolicy(enum mempolicy_mode mode, nodemask_t *nodes)
> {
> struct mempolicy *new;
>
> @@ -781,7 +785,7 @@ static struct page *new_vma_page(struct page *page, unsigned long private, int *
> #endif
>
> static long do_mbind(unsigned long start, unsigned long len,
> - unsigned long mode, nodemask_t *nmask,
> + enum mempolicy_mode mode, nodemask_t *nmask,
> unsigned long flags)
> {
> struct vm_area_struct *vma;
> @@ -791,9 +795,8 @@ static long do_mbind(unsigned long start, unsigned long len,
> int err;
> LIST_HEAD(pagelist);
>
> - if ((flags & ~(unsigned long)(MPOL_MF_STRICT |
> + if (flags & ~(unsigned long)(MPOL_MF_STRICT |
> MPOL_MF_MOVE | MPOL_MF_MOVE_ALL))
> - || mode > MPOL_MAX)
> return -EINVAL;
> if ((flags & MPOL_MF_MOVE_ALL) && !capable(CAP_SYS_NICE))
> return -EPERM;
> @@ -826,7 +829,7 @@ static long do_mbind(unsigned long start, unsigned long len,
> if (!new)
> flags |= MPOL_MF_DISCONTIG_OK;
>
> - pr_debug("mbind %lx-%lx mode:%ld nodes:%lx\n",start,start+len,
> + pr_debug("mbind %lx-%lx mode:%d nodes:%lx\n",start,start+len,
> mode, nmask ? nodes_addr(*nmask)[0] : -1);
>
> down_write(&mm->mmap_sem);
> @@ -927,6 +930,8 @@ asmlinkage long sys_mbind(unsigned long start, unsigned long len,
> nodemask_t nodes;
> int err;
>
> + if (mode >= MPOL_MAX)
> + return -EINVAL;
> err = get_nodes(&nodes, nmask, maxnode);
> if (err)
> return err;
> @@ -940,7 +945,7 @@ asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask,
> int err;
> nodemask_t nodes;
>
> - if (mode < 0 || mode > MPOL_MAX)
> + if (mode < 0 || mode >= MPOL_MAX)
> return -EINVAL;
> err = get_nodes(&nodes, nmask, maxnode);
> if (err)
> @@ -1206,7 +1211,7 @@ static unsigned interleave_nodes(struct mempolicy *policy)
> */
> unsigned slab_node(struct mempolicy *policy)
> {
> - int pol = policy ? policy->policy : MPOL_DEFAULT;
> + enum mempolicy_mode pol = policy ? policy->policy : MPOL_DEFAULT;
>
> switch (pol) {
> case MPOL_INTERLEAVE:
> @@ -1634,8 +1639,8 @@ restart:
> return 0;
> }
>
> -void mpol_shared_policy_init(struct shared_policy *info, int policy,
> - nodemask_t *policy_nodes)
> +void mpol_shared_policy_init(struct shared_policy *info,
> + enum mempolicy_mode policy, nodemask_t *policy_nodes)
> {
> info->root = RB_ROOT;
> spin_lock_init(&info->lock);
> @@ -1853,7 +1858,7 @@ static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
> char *p = buffer;
> int l;
> nodemask_t nodes;
> - int mode = pol ? pol->policy : MPOL_DEFAULT;
> + enum mempolicy_mode mode = pol ? pol->policy : MPOL_DEFAULT;
>
> switch (mode) {
> case MPOL_DEFAULT:
> diff --git a/mm/shmem.c b/mm/shmem.c
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1082,7 +1082,8 @@ redirty:
>
> #ifdef CONFIG_NUMA
> #ifdef CONFIG_TMPFS
> -static int shmem_parse_mpol(char *value, int *policy, nodemask_t *policy_nodes)
> +static int shmem_parse_mpol(char *value, unsigned short *policy,
> + nodemask_t *policy_nodes)
> {
> char *nodelist = strchr(value, ':');
> int err = 1;
> @@ -1131,7 +1132,7 @@ out:
> return err;
> }
>
> -static void shmem_show_mpol(struct seq_file *seq, int policy,
> +static void shmem_show_mpol(struct seq_file *seq, enum mempolicy_mode policy,
> const nodemask_t policy_nodes)
> {
> char *policy_string;
> @@ -1200,14 +1201,14 @@ static struct page *shmem_alloc_page(gfp_t gfp,
> }
> #else /* !CONFIG_NUMA */
> #ifdef CONFIG_TMPFS
> -static inline int shmem_parse_mpol(char *value, int *policy,
> +static inline int shmem_parse_mpol(char *value, unsigned short *policy,
> nodemask_t *policy_nodes)
> {
> return 1;
> }
>
> -static inline void shmem_show_mpol(struct seq_file *seq, int policy,
> - const nodemask_t policy_nodes)
> +static inline void shmem_show_mpol(struct seq_file *seq,
> + enum mempolicy_mode policy, const nodemask_t policy_nodes)
> {
> }
> #endif /* CONFIG_TMPFS */
next prev parent reply other threads:[~2008-02-13 0:10 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-11 15:30 [patch 1/4] mempolicy: convert MPOL constants to enum David Rientjes
2008-02-11 15:30 ` [patch 2/4] mempolicy: support optional mode flags David Rientjes
2008-02-11 15:30 ` [patch 3/4] mempolicy: add MPOL_F_STATIC_NODES flag David Rientjes
2008-02-11 15:30 ` [patch 4/4] mempolicy: update NUMA memory policy documentation David Rientjes
2008-02-11 16:10 ` Randy Dunlap
2008-02-11 20:06 ` [patch 4/4 v2] " David Rientjes
2008-02-11 20:14 ` Randy Dunlap
2008-02-11 18:25 ` [patch 3/4] mempolicy: add MPOL_F_STATIC_NODES flag KOSAKI Motohiro
2008-02-11 19:56 ` David Rientjes
2008-02-13 0:25 ` Lee Schermerhorn
2008-02-13 0:57 ` David Rientjes
2008-02-11 19:34 ` Christoph Lameter
2008-02-13 0:22 ` Lee Schermerhorn
2008-02-13 3:52 ` Paul Jackson
2008-02-13 4:03 ` David Rientjes
2008-02-13 4:13 ` Paul Jackson
2008-02-13 4:23 ` David Rientjes
2008-02-13 8:03 ` Paul Jackson
2008-02-13 9:36 ` David Rientjes
2008-02-13 16:01 ` Lee Schermerhorn
2008-02-13 18:48 ` David Rientjes
2008-02-13 18:58 ` Paul Jackson
2008-02-13 19:05 ` Lee Schermerhorn
2008-02-13 19:17 ` David Rientjes
2008-02-13 17:04 ` Paul Jackson
2008-02-13 19:02 ` David Rientjes
2008-02-13 20:29 ` Paul Jackson
2008-02-13 21:35 ` David Rientjes
2008-02-14 11:12 ` Paul Jackson
2008-02-14 12:27 ` Paul Jackson
2008-02-14 10:26 ` Paul Jackson
2008-02-14 19:45 ` David Rientjes
2008-02-15 10:19 ` Paul Jackson
2008-02-15 20:14 ` David Rientjes
2008-02-13 4:18 ` David Rientjes
2008-02-13 5:06 ` David Rientjes
2008-02-13 15:15 ` Lee Schermerhorn
2008-02-13 16:14 ` Lee Schermerhorn
2008-02-13 19:12 ` David Rientjes
2008-02-14 10:09 ` Paul Jackson
2008-02-14 19:40 ` David Rientjes
2008-02-15 1:44 ` David Rientjes
2008-02-15 10:00 ` Paul Jackson
2008-02-14 21:38 ` David Rientjes
2008-02-15 9:27 ` Paul Jackson
2008-02-15 20:23 ` David Rientjes
2008-02-15 20:32 ` David Rientjes
2008-02-15 23:45 ` Paul Jackson
2008-02-15 23:55 ` David Rientjes
2008-02-16 0:11 ` Paul Jackson
2008-02-11 16:36 ` [patch 2/4] mempolicy: support optional mode flags Lee Schermerhorn
2008-02-11 19:34 ` David Rientjes
2008-02-12 15:31 ` Lee Schermerhorn
2008-02-12 19:14 ` David Rientjes
2008-02-11 20:55 ` Paul Jackson
2008-02-11 21:52 ` David Rientjes
2008-02-11 21:57 ` Paul Jackson
2008-02-13 0:14 ` Lee Schermerhorn
2008-02-13 0:25 ` David Rientjes
2008-02-11 18:45 ` [patch 1/4] mempolicy: convert MPOL constants to enum Andi Kleen
2008-02-11 19:25 ` David Rientjes
2008-02-11 19:32 ` Christoph Lameter
2008-02-11 19:40 ` David Rientjes
2008-02-11 19:48 ` Christoph Lameter
2008-02-11 20:02 ` David Rientjes
2008-02-11 20:45 ` Christoph Lameter
2008-02-13 0:10 ` Lee Schermerhorn [this message]
2008-02-13 0:31 ` Paul Jackson
2008-02-13 0:53 ` David Rientjes
2008-02-13 1:04 ` Christoph Lameter
2008-02-13 1:28 ` Paul Jackson
2008-02-13 1:32 ` Paul Jackson
2008-02-13 2:00 ` David Rientjes
2008-02-13 2:22 ` Paul Jackson
2008-02-13 2:42 ` David Rientjes
2008-02-13 2:59 ` Paul Jackson
2008-02-13 3:17 ` David Rientjes
2008-02-13 3:22 ` Paul Jackson
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=1202861432.4974.29.camel@localhost \
--to=lee.schermerhorn@hp.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=clameter@sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pj@sgi.com \
--cc=rientjes@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).