Linux-mm Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask
@ 2020-03-26 22:24 Wei Yang
  2020-03-26 22:24 ` [PATCH 2/2] mm/page_alloc.c: define node_order with all zero Wei Yang
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Wei Yang @ 2020-03-26 22:24 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, linux-kernel, Wei Yang

Since we always clear used_mask before getting node order, we can
leverage compiler to do this instead of at run time.

Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
 mm/page_alloc.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 0e823bca3f2f..2144b6ceb119 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5587,14 +5587,13 @@ static void build_zonelists(pg_data_t *pgdat)
 {
 	static int node_order[MAX_NUMNODES];
 	int node, load, nr_nodes = 0;
-	nodemask_t used_mask;
+	nodemask_t used_mask = {.bits = {0}};
 	int local_node, prev_node;
 
 	/* NUMA-aware ordering of nodes */
 	local_node = pgdat->node_id;
 	load = nr_online_nodes;
 	prev_node = local_node;
-	nodes_clear(used_mask);
 
 	memset(node_order, 0, sizeof(node_order));
 	while ((node = find_next_best_node(local_node, &used_mask)) >= 0) {
-- 
2.23.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 2/2] mm/page_alloc.c: define node_order with all zero
  2020-03-26 22:24 [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask Wei Yang
@ 2020-03-26 22:24 ` Wei Yang
  2020-03-26 22:36 ` [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask Jason Gunthorpe
  2020-03-27  9:32 ` David Hildenbrand
  2 siblings, 0 replies; 6+ messages in thread
From: Wei Yang @ 2020-03-26 22:24 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, linux-kernel, Wei Yang

Since we always clear node_order before getting it, we can leverage
compiler to do this instead of at run time.

Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
 mm/page_alloc.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 2144b6ceb119..7a6435cffdb7 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5585,7 +5585,7 @@ static void build_thisnode_zonelists(pg_data_t *pgdat)
 
 static void build_zonelists(pg_data_t *pgdat)
 {
-	static int node_order[MAX_NUMNODES];
+	static int node_order[MAX_NUMNODES] = {0};
 	int node, load, nr_nodes = 0;
 	nodemask_t used_mask = {.bits = {0}};
 	int local_node, prev_node;
@@ -5595,7 +5595,6 @@ static void build_zonelists(pg_data_t *pgdat)
 	load = nr_online_nodes;
 	prev_node = local_node;
 
-	memset(node_order, 0, sizeof(node_order));
 	while ((node = find_next_best_node(local_node, &used_mask)) >= 0) {
 		/*
 		 * We don't want to pressure a particular node.
-- 
2.23.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask
  2020-03-26 22:24 [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask Wei Yang
  2020-03-26 22:24 ` [PATCH 2/2] mm/page_alloc.c: define node_order with all zero Wei Yang
@ 2020-03-26 22:36 ` Jason Gunthorpe
  2020-03-27 13:27   ` Wei Yang
  2020-03-27  9:32 ` David Hildenbrand
  2 siblings, 1 reply; 6+ messages in thread
From: Jason Gunthorpe @ 2020-03-26 22:36 UTC (permalink / raw)
  To: Wei Yang; +Cc: akpm, linux-mm, linux-kernel

On Thu, Mar 26, 2020 at 10:24:44PM +0000, Wei Yang wrote:
> Since we always clear used_mask before getting node order, we can
> leverage compiler to do this instead of at run time.
> 
> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>  mm/page_alloc.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 0e823bca3f2f..2144b6ceb119 100644
> +++ b/mm/page_alloc.c
> @@ -5587,14 +5587,13 @@ static void build_zonelists(pg_data_t *pgdat)
>  {
>  	static int node_order[MAX_NUMNODES];
>  	int node, load, nr_nodes = 0;
> -	nodemask_t used_mask;
> +	nodemask_t used_mask = {.bits = {0}};

If this style is to be done it should just be '= {}';

This case demonstrates why the popular '= {0}' idiom is not such a
good idea, as it only works if the first member is an integral type.

Jason


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask
  2020-03-26 22:24 [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask Wei Yang
  2020-03-26 22:24 ` [PATCH 2/2] mm/page_alloc.c: define node_order with all zero Wei Yang
  2020-03-26 22:36 ` [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask Jason Gunthorpe
@ 2020-03-27  9:32 ` David Hildenbrand
  2020-03-27 13:21   ` Wei Yang
  2 siblings, 1 reply; 6+ messages in thread
From: David Hildenbrand @ 2020-03-27  9:32 UTC (permalink / raw)
  To: Wei Yang, akpm; +Cc: linux-mm, linux-kernel

On 26.03.20 23:24, Wei Yang wrote:
> Since we always clear used_mask before getting node order, we can
> leverage compiler to do this instead of at run time.
> 
> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
> ---
>  mm/page_alloc.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 0e823bca3f2f..2144b6ceb119 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -5587,14 +5587,13 @@ static void build_zonelists(pg_data_t *pgdat)
>  {
>  	static int node_order[MAX_NUMNODES];
>  	int node, load, nr_nodes = 0;
> -	nodemask_t used_mask;
> +	nodemask_t used_mask = {.bits = {0}};
>  	int local_node, prev_node;
>  
>  	/* NUMA-aware ordering of nodes */
>  	local_node = pgdat->node_id;
>  	load = nr_online_nodes;
>  	prev_node = local_node;
> -	nodes_clear(used_mask);
>  
>  	memset(node_order, 0, sizeof(node_order));
>  	while ((node = find_next_best_node(local_node, &used_mask)) >= 0) {
> 

t480s: ~/git/linux default_online_type $ git grep "nodemask_t " | grep "="
arch/x86/mm/numa.c:     nodemask_t reserved_nodemask = NODE_MASK_NONE;
arch/x86/mm/numa_emulation.c:   nodemask_t physnode_mask = numa_nodes_parsed;
arch/x86/mm/numa_emulation.c:   nodemask_t physnode_mask = numa_nodes_parsed;
arch/x86/mm/numa_emulation.c:           nodemask_t physnode_mask = numa_nodes_parsed;
drivers/acpi/numa/srat.c:static nodemask_t nodes_found_map = NODE_MASK_NONE;
kernel/irq/affinity.c:  nodemask_t nodemsk = NODE_MASK_NONE;
kernel/sched/fair.c:            nodemask_t max_group = NODE_MASK_NONE;
mm/memory_hotplug.c:    nodemask_t nmask = node_states[N_MEMORY];
mm/mempolicy.c:         nodemask_t mems = cpuset_mems_allowed(current);
mm/mempolicy.c: nodemask_t nodes = NODE_MASK_NONE;
mm/oom_kill.c:  const nodemask_t *mask = oc->nodemask;
mm/page_alloc.c:nodemask_t node_states[NR_NODE_STATES] __read_mostly = {
mm/page_alloc.c:        nodemask_t saved_node_state = node_states[N_MEMORY];

Should this be NODE_MASK_NONE?

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask
  2020-03-27  9:32 ` David Hildenbrand
@ 2020-03-27 13:21   ` Wei Yang
  0 siblings, 0 replies; 6+ messages in thread
From: Wei Yang @ 2020-03-27 13:21 UTC (permalink / raw)
  To: David Hildenbrand; +Cc: Wei Yang, akpm, linux-mm, linux-kernel

On Fri, Mar 27, 2020 at 10:32:45AM +0100, David Hildenbrand wrote:
>On 26.03.20 23:24, Wei Yang wrote:
>> Since we always clear used_mask before getting node order, we can
>> leverage compiler to do this instead of at run time.
>> 
>> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>> ---
>>  mm/page_alloc.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>> 
>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>> index 0e823bca3f2f..2144b6ceb119 100644
>> --- a/mm/page_alloc.c
>> +++ b/mm/page_alloc.c
>> @@ -5587,14 +5587,13 @@ static void build_zonelists(pg_data_t *pgdat)
>>  {
>>  	static int node_order[MAX_NUMNODES];
>>  	int node, load, nr_nodes = 0;
>> -	nodemask_t used_mask;
>> +	nodemask_t used_mask = {.bits = {0}};
>>  	int local_node, prev_node;
>>  
>>  	/* NUMA-aware ordering of nodes */
>>  	local_node = pgdat->node_id;
>>  	load = nr_online_nodes;
>>  	prev_node = local_node;
>> -	nodes_clear(used_mask);
>>  
>>  	memset(node_order, 0, sizeof(node_order));
>>  	while ((node = find_next_best_node(local_node, &used_mask)) >= 0) {
>> 
>
>t480s: ~/git/linux default_online_type $ git grep "nodemask_t " | grep "="
>arch/x86/mm/numa.c:     nodemask_t reserved_nodemask = NODE_MASK_NONE;
>arch/x86/mm/numa_emulation.c:   nodemask_t physnode_mask = numa_nodes_parsed;
>arch/x86/mm/numa_emulation.c:   nodemask_t physnode_mask = numa_nodes_parsed;
>arch/x86/mm/numa_emulation.c:           nodemask_t physnode_mask = numa_nodes_parsed;
>drivers/acpi/numa/srat.c:static nodemask_t nodes_found_map = NODE_MASK_NONE;
>kernel/irq/affinity.c:  nodemask_t nodemsk = NODE_MASK_NONE;
>kernel/sched/fair.c:            nodemask_t max_group = NODE_MASK_NONE;
>mm/memory_hotplug.c:    nodemask_t nmask = node_states[N_MEMORY];
>mm/mempolicy.c:         nodemask_t mems = cpuset_mems_allowed(current);
>mm/mempolicy.c: nodemask_t nodes = NODE_MASK_NONE;
>mm/oom_kill.c:  const nodemask_t *mask = oc->nodemask;
>mm/page_alloc.c:nodemask_t node_states[NR_NODE_STATES] __read_mostly = {
>mm/page_alloc.c:        nodemask_t saved_node_state = node_states[N_MEMORY];
>
>Should this be NODE_MASK_NONE?

Thanks, this is gcc extension. Learn something new.

I would update this in v2.

>
>-- 
>Thanks,
>
>David / dhildenb

-- 
Wei Yang
Help you, Help me


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask
  2020-03-26 22:36 ` [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask Jason Gunthorpe
@ 2020-03-27 13:27   ` Wei Yang
  0 siblings, 0 replies; 6+ messages in thread
From: Wei Yang @ 2020-03-27 13:27 UTC (permalink / raw)
  To: Jason Gunthorpe; +Cc: Wei Yang, akpm, linux-mm, linux-kernel

On Thu, Mar 26, 2020 at 07:36:04PM -0300, Jason Gunthorpe wrote:
>On Thu, Mar 26, 2020 at 10:24:44PM +0000, Wei Yang wrote:
>> Since we always clear used_mask before getting node order, we can
>> leverage compiler to do this instead of at run time.
>> 
>> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>>  mm/page_alloc.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>> 
>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>> index 0e823bca3f2f..2144b6ceb119 100644
>> +++ b/mm/page_alloc.c
>> @@ -5587,14 +5587,13 @@ static void build_zonelists(pg_data_t *pgdat)
>>  {
>>  	static int node_order[MAX_NUMNODES];
>>  	int node, load, nr_nodes = 0;
>> -	nodemask_t used_mask;
>> +	nodemask_t used_mask = {.bits = {0}};
>
>If this style is to be done it should just be '= {}';
>
>This case demonstrates why the popular '= {0}' idiom is not such a
>good idea, as it only works if the first member is an integral type.
>

Thanks for your comment. I think David found a better solution.

>Jason

-- 
Wei Yang
Help you, Help me


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, back to index

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-26 22:24 [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask Wei Yang
2020-03-26 22:24 ` [PATCH 2/2] mm/page_alloc.c: define node_order with all zero Wei Yang
2020-03-26 22:36 ` [PATCH 1/2] mm/page_alloc.c: leverage compiler to zero out used_mask Jason Gunthorpe
2020-03-27 13:27   ` Wei Yang
2020-03-27  9:32 ` David Hildenbrand
2020-03-27 13:21   ` Wei Yang

Linux-mm Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-mm/0 linux-mm/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-mm linux-mm/ https://lore.kernel.org/linux-mm \
		linux-mm@kvack.org
	public-inbox-index linux-mm

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kvack.linux-mm


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git