Messages in this thread | | | Date | Mon, 26 Aug 2013 01:32:52 -0400 | From | Rik van Riel <> | Subject | Re: [PATCH] cpuset: mm: Reduce large amounts of memory barrier related damage v3 |
| |
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
| |