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, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>