On Sun 19-01-20 11:06:29, Wei Yang wrote: > Before move page to target node, we would check if the node id is valid. > In case we would try to move pages to the same target node, it is not > necessary to do the check each time. > > This patch tries to skip the check if the node has been checked. > > Signed-off-by: Wei Yang <richardw.yang@xxxxxxxxxxxxxxx> > --- > mm/migrate.c | 19 +++++++++++-------- > 1 file changed, 11 insertions(+), 8 deletions(-) > > diff --git a/mm/migrate.c b/mm/migrate.c > index 430fdccc733e..ba7cf4fa43a0 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -1612,15 +1612,18 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, > goto out_flush; > addr = (unsigned long)untagged_addr(p); > > - err = -ENODEV; > - if (node < 0 || node >= MAX_NUMNODES) > - goto out_flush; > - if (!node_state(node, N_MEMORY)) > - goto out_flush; > + /* Check node if it is not checked. */ > + if (current_node == NUMA_NO_NODE || node != current_node) { > + err = -ENODEV; > + if (node < 0 || node >= MAX_NUMNODES) > + goto out_flush; > + if (!node_state(node, N_MEMORY)) > + goto out_flush; This makes the code harder to read IMHO. The original code checks the valid node first and it doesn't conflate that with the node caching logic which your change does. > > - err = -EACCES; > - if (!node_isset(node, task_nodes)) > - goto out_flush; > + err = -EACCES; > + if (!node_isset(node, task_nodes)) > + goto out_flush; > + } > > if (current_node == NUMA_NO_NODE) { > current_node = node; > -- > 2.17.1 -- Michal Hocko SUSE Labs