mm/page_alloc.c: leverage compiler to zero out used_mask
Subsystems (2)
PATCH 1/2 mm/page_alloc.c: leverage compiler to zero out used_mask
Since we always clear used_mask before getting node order, we can leverage compiler to do this instead of at run time.
--- mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
mm/page_alloc.c +1 -2
@@ -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 ) {
Signature · 1 line
2.23.0
PATCH 2/2 mm/page_alloc.c: define node_order with all zero
Since we always clear node_order before getting it, we can leverage compiler to do this instead of at run time.
--- mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
mm/page_alloc.c +1 -2
@@ -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.
Signature · 1 line
2.23.0
Quoted 11 lines · Wei Yang
Since we always clear
used_maskbefore getting node order, we can leverage compiler to do this instead of at run time.Signed-off-by Wei Yang <[email protected]>mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)mm/page_alloc.c +1
-0+++ b/mm/page_alloc.c
mm/page_alloc.c static void build_zonelists(pg_data_t *pgdat) · line 5590
Quoted 5 lines
mm/page_alloc.c +1
-1@@ -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
Quoted 20 lines · Jason Gunthorpe
Quoted 11 lines · Wei Yang
Since we always clear
used_maskbefore getting node order, we can leverage compiler to do this instead of at run time.Signed-off-by Wei Yang <[email protected]>mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)mm/page_alloc.c +1
-0+++ b/mm/page_alloc.cmm/page_alloc.c static void build_zonelists(pg_data_t *pgdat) · line 5590
Quoted 5 lines
mm/page_alloc.c +1
-1@@ -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 '= {}';
Quoted 3 lines
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.
Quoted 1 line
Jason
Signature · 2 lines
Wei Yang Help you, Help me
Quoted 19 lines · Wei Yang
Since we always clear
used_maskbefore getting node order, we can leverage compiler to do this instead of at run time.Signed-off-by Wei Yang <[email protected]>--- mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)mm/page_alloc.c +1
-1@@ -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 }};
mm/page_alloc.c static void build_zonelists(pg_data_t *pgdat) · line 5599
Quoted 10 lines
mm/page_alloc.c +0
-1int 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?
Signature · 3 lines
Thanks, David / dhildenb
Quoted 43 lines · David Hildenbrand
Quoted 19 lines · Wei Yang
Since we always clear
used_maskbefore getting node order, we can leverage compiler to do this instead of at run time.Signed-off-by Wei Yang <[email protected]>--- mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)mm/page_alloc.c +1
-1@@ -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 }};mm/page_alloc.c static void build_zonelists(pg_data_t *pgdat) · line 5599
Quoted 10 lines
mm/page_alloc.c +0
-1int 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;
Quoted 4 lines
mm/page_alloc.c:nodemask_t node_states[NR_NODE_STATES]
__read_mostly= {mm/page_alloc.c:nodemask_tsaved_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.
Quoted 5 lines
Signature · 4 lines
-- Thanks, David / dhildenb
Signature · 2 lines
Wei Yang Help you, Help me