lkml.org 
[lkml]   [2009]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [BUG] set_mempolicy(MPOL_INTERLEAV) cause kernel panic
    Date
    > On Wed, 15 Jul 2009, Lee Schermerhorn wrote:
    >
    > > Interestingly, on ia64, the top cpuset mems_allowed gets set to all
    > > possible nodes, while on x86_64, it gets set to on-line nodes [or nodes
    > > with memory]. Maybe this is a to support hot-plug?
    > >
    >
    > numactl --interleave=all simply passes a nodemask with all bits set, so if
    > cpuset_current_mems_allowed includes offline nodes from node_possible_map,
    > then mpol_set_nodemask() doesn't mask them off.
    >
    > Seems like we could handle this strictly in mempolicies without worrying
    > about top_cpuset like in the following?

    This patch seems band-aid patch. it will change memory-hotplug behavior.
    Please imazine following scenario:

    1. numactl interleave=all process-A
    2. memory hot-add

    before 2.6.30:
    -> process-A can use hot-added memory

    your proposal patch:
    -> process-A can't use hot-added memory




    > ---
    > diff --git a/mm/mempolicy.c b/mm/mempolicy.c
    > --- a/mm/mempolicy.c
    > +++ b/mm/mempolicy.c
    > @@ -194,6 +194,7 @@ static int mpol_new_bind(struct mempolicy *pol, const nodemask_t *nodes)
    > static int mpol_set_nodemask(struct mempolicy *pol, const nodemask_t *nodes)
    > {
    > nodemask_t cpuset_context_nmask;
    > + nodemask_t mems_allowed;
    > int ret;
    >
    > /* if mode is MPOL_DEFAULT, pol is NULL. This is right. */
    > @@ -201,20 +202,21 @@ static int mpol_set_nodemask(struct mempolicy *pol, const nodemask_t *nodes)
    > return 0;
    >
    > VM_BUG_ON(!nodes);
    > + nodes_and(mems_allowed, cpuset_current_mems_allowed,
    > + node_states[N_HIGH_MEMORY]);
    > if (pol->mode == MPOL_PREFERRED && nodes_empty(*nodes))
    > nodes = NULL; /* explicit local allocation */
    > else {
    > if (pol->flags & MPOL_F_RELATIVE_NODES)
    > mpol_relative_nodemask(&cpuset_context_nmask, nodes,
    > - &cpuset_current_mems_allowed);
    > + &mems_allowed);
    > else
    > nodes_and(cpuset_context_nmask, *nodes,
    > - cpuset_current_mems_allowed);
    > + mems_allowed);
    > if (mpol_store_user_nodemask(pol))
    > pol->w.user_nodemask = *nodes;
    > else
    > - pol->w.cpuset_mems_allowed =
    > - cpuset_current_mems_allowed;
    > + pol->w.cpuset_mems_allowed = mems_allowed;
    > }
    >
    > ret = mpol_ops[pol->mode].create(pol,





    \
     
     \ /
      Last update: 2009-07-17 02:07    [W:0.023 / U:67.924 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site