On 08/23/2013 02:15 PM, Peter Zijlstra wrote:

> So I guess the quick and ugly solution is something like the below. 

This still crashes :)

> --- a/mm/mempolicy.c
> +++ b/mm/mempolicy.c
> @@ -1762,19 +1762,21 @@ unsigned slab_node(void)
>  static unsigned offset_il_node(struct mempolicy *pol,
>               struct vm_area_struct *vma, unsigned long off)
>  {
> -     unsigned nnodes = nodes_weight(pol->v.nodes);
> -     unsigned target;
> -     int c;
> -     int nid = -1;
> +     unsigned nnodes, target;
> +     int c, nid;
>  
> +again:
> +     nnodes = nodes_weight(pol->v.nodes);
>       if (!nnodes)
>               return numa_node_id();
> +
>       target = (unsigned int)off % nnodes;
> -     c = 0;
> -     do {
> +     for (c = 0, nid = -1; c <= target; c++)
>               nid = next_node(nid, pol->v.nodes);
> -             c++;
> -     } while (c <= target);
> +
> +     if (unlikely((unsigned)nid >= MAX_NUMNODES))
> +             goto again;

I'll go kick off a compile that replaces the conditional above with:

        if (unlikely(!node_online(nid)))
                goto again;

>       return nid;
>  }


-- 
All rights reversed
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to