On 04/02/19 at 03:34pm, Oscar Salvador wrote: > NODEMASK_ALLOC is used to allocate a nodemask bitmap, ant it does it by ~ and > first determining whether it should be allocated in the stack or dinamically dynamically^^ > depending on NODES_SHIFT. > Right now, it goes the dynamic path whenever the nodemask_t is above 32 > bytes. > > Although we could bump it to a reasonable value, the largest a nodemask_t > can get is 128 bytes, so since __nr_hugepages_store_common is called from > a rather shore stack we can just get rid of the NODEMASK_ALLOC call here. > > This reduces some code churn and complexity. > > Signed-off-by: Oscar Salvador <osalvador@xxxxxxx> > --- > mm/hugetlb.c | 36 +++++++++++------------------------- > 1 file changed, 11 insertions(+), 25 deletions(-) > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index f79ae4e42159..9cb2f91af897 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -2447,44 +2447,30 @@ static ssize_t __nr_hugepages_store_common(bool obey_mempolicy, > unsigned long count, size_t len) > { > int err; > - NODEMASK_ALLOC(nodemask_t, nodes_allowed, GFP_KERNEL | __GFP_NORETRY); > + nodemask_t nodes_allowed, *n_mask; > > - if (hstate_is_gigantic(h) && !gigantic_page_runtime_supported()) { > - err = -EINVAL; > - goto out; > - } > + if (hstate_is_gigantic(h) && !gigantic_page_runtime_supported()) > + return -EINVAL; > > if (nid == NUMA_NO_NODE) { > /* > * global hstate attribute > */ > if (!(obey_mempolicy && > - init_nodemask_of_mempolicy(nodes_allowed))) { > - NODEMASK_FREE(nodes_allowed); > - nodes_allowed = &node_states[N_MEMORY]; > - } > - } else if (nodes_allowed) { > + init_nodemask_of_mempolicy(&nodes_allowed))) > + n_mask = &node_states[N_MEMORY]; > + else > + n_mask = &nodes_allowed; > + } else { > /* > * Node specific request. count adjustment happens in > * set_max_huge_pages() after acquiring hugetlb_lock. > */ > - init_nodemask_of_node(nodes_allowed, nid); > - } else { > - /* > - * Node specific request, but we could not allocate the few > - * words required for a node mask. We are unlikely to hit > - * this condition. Since we can not pass down the appropriate > - * node mask, just return ENOMEM. > - */ > - err = -ENOMEM; > - goto out; > + init_nodemask_of_node(&nodes_allowed, nid); > + n_mask = &nodes_allowed; > } > > - err = set_max_huge_pages(h, count, nid, nodes_allowed); > - > -out: > - if (nodes_allowed != &node_states[N_MEMORY]) > - NODEMASK_FREE(nodes_allowed); > + err = set_max_huge_pages(h, count, nid, n_mask); > > return err ? err : len; > } > -- > 2.13.7 >