All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	Mike Rapoport <rppt@kernel.org>
Subject: [rppt:x86/initmem_init 1/1] arch/x86/mm/numa.c:172:3: error: call to undeclared function 'set_apicid_to_node'; ISO C99 and later do not support implicit function declarations
Date: Mon, 7 Apr 2025 20:55:29 +0800	[thread overview]
Message-ID: <202504072048.fRQ7N8Kk-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/rppt/linux.git x86/initmem_init
head:   4473ad8a570559afdf61aa4bb5350db1329e9735
commit: 4473ad8a570559afdf61aa4bb5350db1329e9735 [1/1] x86/mm: consolidate initmem_init()
config: x86_64-buildonly-randconfig-005-20250407 (https://download.01.org/0day-ci/archive/20250407/202504072048.fRQ7N8Kk-lkp@intel.com/config)
compiler: clang version 20.1.2 (https://github.com/llvm/llvm-project 58df0ef89dd64126512e4ee27b4ac3fd8ddf6247)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250407/202504072048.fRQ7N8Kk-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504072048.fRQ7N8Kk-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

>> arch/x86/mm/numa.c:50:5: warning: no previous prototype for function 'numa_cpu_node' [-Wmissing-prototypes]
      50 | int numa_cpu_node(int cpu)
         |     ^
   arch/x86/mm/numa.c:50:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
      50 | int numa_cpu_node(int cpu)
         | ^
         | static 
>> arch/x86/mm/numa.c:68:6: warning: no previous prototype for function 'numa_set_node' [-Wmissing-prototypes]
      68 | void numa_set_node(int cpu, int node)
         |      ^
   arch/x86/mm/numa.c:68:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
      68 | void numa_set_node(int cpu, int node)
         | ^
         | static 
>> arch/x86/mm/numa.c:90:6: warning: no previous prototype for function 'numa_clear_node' [-Wmissing-prototypes]
      90 | void numa_clear_node(int cpu)
         |      ^
   arch/x86/mm/numa.c:90:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
      90 | void numa_clear_node(int cpu)
         | ^
         | static 
>> arch/x86/mm/numa.c:172:3: error: call to undeclared function 'set_apicid_to_node'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     172 |                 set_apicid_to_node(i, NUMA_NO_NODE);
         |                 ^
   arch/x86/mm/numa.c:211:14: error: use of undeclared identifier 'numa_nodes_parsed'; did you mean 'numa_node_id'?
     211 |         node_set(0, numa_nodes_parsed);
         |                     ^~~~~~~~~~~~~~~~~
         |                     numa_node_id
   include/linux/nodemask.h:127:50: note: expanded from macro 'node_set'
     127 | #define node_set(node, dst) __node_set((node), &(dst))
         |                                                  ^
   include/linux/topology.h:87:19: note: 'numa_node_id' declared here
      87 | static inline int numa_node_id(void)
         |                   ^
   arch/x86/mm/numa.c:211:2: error: incompatible pointer types passing 'int (*)(void)' to parameter of type 'volatile nodemask_t *' [-Werror,-Wincompatible-pointer-types]
     211 |         node_set(0, numa_nodes_parsed);
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/nodemask.h:127:48: note: expanded from macro 'node_set'
     127 | #define node_set(node, dst) __node_set((node), &(dst))
         |                                                ^~~~~~
   include/linux/nodemask.h:128:71: note: passing argument to parameter 'dstp' here
     128 | static __always_inline void __node_set(int node, volatile nodemask_t *dstp)
         |                                                                       ^
>> arch/x86/mm/numa.c:255:13: warning: no previous prototype for function 'init_gi_nodes' [-Wmissing-prototypes]
     255 | void __init init_gi_nodes(void)
         |             ^
   arch/x86/mm/numa.c:255:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     255 | void __init init_gi_nodes(void)
         | ^
         | static 
>> arch/x86/mm/numa.c:287:13: warning: no previous prototype for function 'init_cpu_to_node' [-Wmissing-prototypes]
     287 | void __init init_cpu_to_node(void)
         |             ^
   arch/x86/mm/numa.c:287:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     287 | void __init init_cpu_to_node(void)
         | ^
         | static 
>> arch/x86/mm/numa.c:362:6: warning: no previous prototype for function 'debug_cpumask_set_cpu' [-Wmissing-prototypes]
     362 | void debug_cpumask_set_cpu(unsigned int cpu, int node, bool enable)
         |      ^
   arch/x86/mm/numa.c:362:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     362 | void debug_cpumask_set_cpu(unsigned int cpu, int node, bool enable)
         | ^
         | static 
   6 warnings and 3 errors generated.


vim +/set_apicid_to_node +172 arch/x86/mm/numa.c

bbc9e2f452d9c4 Tejun Heo                 2011-01-23   49  
148f9bb87745ed Paul Gortmaker            2013-06-18  @50  int numa_cpu_node(int cpu)
6bd262731bf755 Tejun Heo                 2011-05-02   51  {
4705243d237ab6 Thomas Gleixner           2023-08-14   52  	u32 apicid = early_per_cpu(x86_cpu_to_apicid, cpu);
6bd262731bf755 Tejun Heo                 2011-05-02   53  
6bd262731bf755 Tejun Heo                 2011-05-02   54  	if (apicid != BAD_APICID)
6bd262731bf755 Tejun Heo                 2011-05-02   55  		return __apicid_to_node[apicid];
6bd262731bf755 Tejun Heo                 2011-05-02   56  	return NUMA_NO_NODE;
6bd262731bf755 Tejun Heo                 2011-05-02   57  }
6bd262731bf755 Tejun Heo                 2011-05-02   58  
c032ef60d1aa9a Rusty Russell             2009-03-13   59  cpumask_var_t node_to_cpumask_map[MAX_NUMNODES];
71ee73e7222877 Rusty Russell             2009-03-13   60  EXPORT_SYMBOL(node_to_cpumask_map);
71ee73e7222877 Rusty Russell             2009-03-13   61  
645a79195f66eb Tejun Heo                 2011-01-23   62  /*
645a79195f66eb Tejun Heo                 2011-01-23   63   * Map cpu index to node index
645a79195f66eb Tejun Heo                 2011-01-23   64   */
645a79195f66eb Tejun Heo                 2011-01-23   65  DEFINE_EARLY_PER_CPU(int, x86_cpu_to_node_map, NUMA_NO_NODE);
645a79195f66eb Tejun Heo                 2011-01-23   66  EXPORT_EARLY_PER_CPU_SYMBOL(x86_cpu_to_node_map);
645a79195f66eb Tejun Heo                 2011-01-23   67  
e13fe8695c57fe Wen Congyang              2013-02-22  @68  void numa_set_node(int cpu, int node)
645a79195f66eb Tejun Heo                 2011-01-23   69  {
645a79195f66eb Tejun Heo                 2011-01-23   70  	int *cpu_to_node_map = early_per_cpu_ptr(x86_cpu_to_node_map);
645a79195f66eb Tejun Heo                 2011-01-23   71  
645a79195f66eb Tejun Heo                 2011-01-23   72  	/* early setting, no percpu area yet */
645a79195f66eb Tejun Heo                 2011-01-23   73  	if (cpu_to_node_map) {
645a79195f66eb Tejun Heo                 2011-01-23   74  		cpu_to_node_map[cpu] = node;
645a79195f66eb Tejun Heo                 2011-01-23   75  		return;
645a79195f66eb Tejun Heo                 2011-01-23   76  	}
645a79195f66eb Tejun Heo                 2011-01-23   77  
645a79195f66eb Tejun Heo                 2011-01-23   78  #ifdef CONFIG_DEBUG_PER_CPU_MAPS
645a79195f66eb Tejun Heo                 2011-01-23   79  	if (cpu >= nr_cpu_ids || !cpu_possible(cpu)) {
645a79195f66eb Tejun Heo                 2011-01-23   80  		printk(KERN_ERR "numa_set_node: invalid cpu# (%d)\n", cpu);
645a79195f66eb Tejun Heo                 2011-01-23   81  		dump_stack();
645a79195f66eb Tejun Heo                 2011-01-23   82  		return;
645a79195f66eb Tejun Heo                 2011-01-23   83  	}
645a79195f66eb Tejun Heo                 2011-01-23   84  #endif
645a79195f66eb Tejun Heo                 2011-01-23   85  	per_cpu(x86_cpu_to_node_map, cpu) = node;
645a79195f66eb Tejun Heo                 2011-01-23   86  
645a79195f66eb Tejun Heo                 2011-01-23   87  	set_cpu_numa_node(cpu, node);
645a79195f66eb Tejun Heo                 2011-01-23   88  }
645a79195f66eb Tejun Heo                 2011-01-23   89  
e13fe8695c57fe Wen Congyang              2013-02-22  @90  void numa_clear_node(int cpu)
645a79195f66eb Tejun Heo                 2011-01-23   91  {
645a79195f66eb Tejun Heo                 2011-01-23   92  	numa_set_node(cpu, NUMA_NO_NODE);
645a79195f66eb Tejun Heo                 2011-01-23   93  }
645a79195f66eb Tejun Heo                 2011-01-23   94  
71ee73e7222877 Rusty Russell             2009-03-13   95  /*
71ee73e7222877 Rusty Russell             2009-03-13   96   * Allocate node_to_cpumask_map based on number of available nodes
71ee73e7222877 Rusty Russell             2009-03-13   97   * Requires node_possible_map to be valid.
71ee73e7222877 Rusty Russell             2009-03-13   98   *
9512938b885304 Wanlong Gao               2012-01-12   99   * Note: cpumask_of_node() is not valid until after this is done.
71ee73e7222877 Rusty Russell             2009-03-13  100   * (Use CONFIG_DEBUG_PER_CPU_MAPS to check this.)
71ee73e7222877 Rusty Russell             2009-03-13  101   */
71ee73e7222877 Rusty Russell             2009-03-13  102  void __init setup_node_to_cpumask_map(void)
71ee73e7222877 Rusty Russell             2009-03-13  103  {
d2ad351e36e333 Cody P Schafer            2013-04-29  104  	unsigned int node;
71ee73e7222877 Rusty Russell             2009-03-13  105  
71ee73e7222877 Rusty Russell             2009-03-13  106  	/* setup nr_node_ids if not done yet */
d2ad351e36e333 Cody P Schafer            2013-04-29  107  	if (nr_node_ids == MAX_NUMNODES)
d2ad351e36e333 Cody P Schafer            2013-04-29  108  		setup_nr_node_ids();
71ee73e7222877 Rusty Russell             2009-03-13  109  
71ee73e7222877 Rusty Russell             2009-03-13  110  	/* allocate the map */
c032ef60d1aa9a Rusty Russell             2009-03-13  111  	for (node = 0; node < nr_node_ids; node++)
c032ef60d1aa9a Rusty Russell             2009-03-13  112  		alloc_bootmem_cpumask_var(&node_to_cpumask_map[node]);
71ee73e7222877 Rusty Russell             2009-03-13  113  
c032ef60d1aa9a Rusty Russell             2009-03-13  114  	/* cpumask_of_node() will now work */
b9726c26dc21b1 Alexey Dobriyan           2019-03-05  115  	pr_debug("Node to cpumask map for %u nodes\n", nr_node_ids);
71ee73e7222877 Rusty Russell             2009-03-13  116  }
71ee73e7222877 Rusty Russell             2009-03-13  117  
692d73d2f0f75e Mike Rapoport (Microsoft  2024-08-07  118) static int __init numa_register_nodes(void)
a4106eae650a4d Tejun Heo                 2011-05-02  119  {
692d73d2f0f75e Mike Rapoport (Microsoft  2024-08-07  120) 	int nid;
ff6c3d81f2e86b Liam Ni                   2023-10-26  121  
ff6c3d81f2e86b Liam Ni                   2023-10-26  122  	if (!memblock_validate_numa_coverage(SZ_1M))
a4106eae650a4d Tejun Heo                 2011-05-02  123  		return -EINVAL;
a4106eae650a4d Tejun Heo                 2011-05-02  124  
a4106eae650a4d Tejun Heo                 2011-05-02  125  	/* Finally register nodes. */
a4106eae650a4d Tejun Heo                 2011-05-02  126  	for_each_node_mask(nid, node_possible_map) {
77c1d0e7c580c9 Mike Rapoport (Microsoft  2024-08-07  127) 		unsigned long start_pfn, end_pfn;
a4106eae650a4d Tejun Heo                 2011-05-02  128  
77c1d0e7c580c9 Mike Rapoport (Microsoft  2024-08-07  129) 		/*
77c1d0e7c580c9 Mike Rapoport (Microsoft  2024-08-07  130) 		 * Note, get_pfn_range_for_nid() depends on
77c1d0e7c580c9 Mike Rapoport (Microsoft  2024-08-07  131) 		 * memblock_set_node() having already happened
77c1d0e7c580c9 Mike Rapoport (Microsoft  2024-08-07  132) 		 */
77c1d0e7c580c9 Mike Rapoport (Microsoft  2024-08-07  133) 		get_pfn_range_for_nid(nid, &start_pfn, &end_pfn);
77c1d0e7c580c9 Mike Rapoport (Microsoft  2024-08-07  134) 		if (start_pfn >= end_pfn)
8b375f64dcf45b Luiz Capitulino           2014-08-22  135  			continue;
8b375f64dcf45b Luiz Capitulino           2014-08-22  136  
8b375f64dcf45b Luiz Capitulino           2014-08-22  137  		alloc_node_data(nid);
3515863d9f29dd Mike Rapoport (Microsoft  2024-08-07  138) 		node_set_online(nid);
a4106eae650a4d Tejun Heo                 2011-05-02  139  	}
a4106eae650a4d Tejun Heo                 2011-05-02  140  
0608f70c78a384 Tejun Heo                 2011-07-14  141  	/* Dump memblock with node info and return. */
0608f70c78a384 Tejun Heo                 2011-07-14  142  	memblock_dump_all();
a4106eae650a4d Tejun Heo                 2011-05-02  143  	return 0;
a4106eae650a4d Tejun Heo                 2011-05-02  144  }
a4106eae650a4d Tejun Heo                 2011-05-02  145  
8db78cc4b4048e Tejun Heo                 2011-01-23  146  /*
8db78cc4b4048e Tejun Heo                 2011-01-23  147   * There are unfortunately some poorly designed mainboards around that
8db78cc4b4048e Tejun Heo                 2011-01-23  148   * only connect memory to a single CPU. This breaks the 1:1 cpu->node
8db78cc4b4048e Tejun Heo                 2011-01-23  149   * mapping. To avoid this fill in the mapping for all possible CPUs,
8db78cc4b4048e Tejun Heo                 2011-01-23  150   * as the number of CPUs is not known yet. We round robin the existing
8db78cc4b4048e Tejun Heo                 2011-01-23  151   * nodes.
8db78cc4b4048e Tejun Heo                 2011-01-23  152   */
752d4f372f90a2 Tejun Heo                 2011-05-02  153  static void __init numa_init_array(void)
8db78cc4b4048e Tejun Heo                 2011-01-23  154  {
8db78cc4b4048e Tejun Heo                 2011-01-23  155  	int rr, i;
8db78cc4b4048e Tejun Heo                 2011-01-23  156  
8db78cc4b4048e Tejun Heo                 2011-01-23  157  	rr = first_node(node_online_map);
8db78cc4b4048e Tejun Heo                 2011-01-23  158  	for (i = 0; i < nr_cpu_ids; i++) {
8db78cc4b4048e Tejun Heo                 2011-01-23  159  		if (early_cpu_to_node(i) != NUMA_NO_NODE)
8db78cc4b4048e Tejun Heo                 2011-01-23  160  			continue;
8db78cc4b4048e Tejun Heo                 2011-01-23  161  		numa_set_node(i, rr);
0edaf86cf1a6a9 Andrew Morton             2016-05-19  162  		rr = next_node_in(rr, node_online_map);
8db78cc4b4048e Tejun Heo                 2011-01-23  163  	}
8db78cc4b4048e Tejun Heo                 2011-01-23  164  }
8db78cc4b4048e Tejun Heo                 2011-01-23  165  
a4106eae650a4d Tejun Heo                 2011-05-02  166  static int __init numa_init(int (*init_func)(void))
a4106eae650a4d Tejun Heo                 2011-05-02  167  {
a4106eae650a4d Tejun Heo                 2011-05-02  168  	int i;
a4106eae650a4d Tejun Heo                 2011-05-02  169  	int ret;
a4106eae650a4d Tejun Heo                 2011-05-02  170  
a4106eae650a4d Tejun Heo                 2011-05-02  171  	for (i = 0; i < MAX_LOCAL_APIC; i++)
a4106eae650a4d Tejun Heo                 2011-05-02 @172  		set_apicid_to_node(i, NUMA_NO_NODE);
a4106eae650a4d Tejun Heo                 2011-05-02  173  
692d73d2f0f75e Mike Rapoport (Microsoft  2024-08-07  174) 	ret = numa_memblks_init(init_func, /* memblock_force_top_down */ true);
a4106eae650a4d Tejun Heo                 2011-05-02  175  	if (ret < 0)
a4106eae650a4d Tejun Heo                 2011-05-02  176  		return ret;
a4106eae650a4d Tejun Heo                 2011-05-02  177  
692d73d2f0f75e Mike Rapoport (Microsoft  2024-08-07  178) 	ret = numa_register_nodes();
a4106eae650a4d Tejun Heo                 2011-05-02  179  	if (ret < 0)
a4106eae650a4d Tejun Heo                 2011-05-02  180  		return ret;
a4106eae650a4d Tejun Heo                 2011-05-02  181  
a4106eae650a4d Tejun Heo                 2011-05-02  182  	for (i = 0; i < nr_cpu_ids; i++) {
a4106eae650a4d Tejun Heo                 2011-05-02  183  		int nid = early_cpu_to_node(i);
a4106eae650a4d Tejun Heo                 2011-05-02  184  
a4106eae650a4d Tejun Heo                 2011-05-02  185  		if (nid == NUMA_NO_NODE)
a4106eae650a4d Tejun Heo                 2011-05-02  186  			continue;
a4106eae650a4d Tejun Heo                 2011-05-02  187  		if (!node_online(nid))
a4106eae650a4d Tejun Heo                 2011-05-02  188  			numa_clear_node(i);
a4106eae650a4d Tejun Heo                 2011-05-02  189  	}
a4106eae650a4d Tejun Heo                 2011-05-02  190  	numa_init_array();
a0acda91728418 Tang Chen                 2014-01-21  191  
a4106eae650a4d Tejun Heo                 2011-05-02  192  	return 0;
a4106eae650a4d Tejun Heo                 2011-05-02  193  }
a4106eae650a4d Tejun Heo                 2011-05-02  194  
a4106eae650a4d Tejun Heo                 2011-05-02  195  /**
a4106eae650a4d Tejun Heo                 2011-05-02  196   * dummy_numa_init - Fallback dummy NUMA init
a4106eae650a4d Tejun Heo                 2011-05-02  197   *
a4106eae650a4d Tejun Heo                 2011-05-02  198   * Used if there's no underlying NUMA architecture, NUMA initialization
a4106eae650a4d Tejun Heo                 2011-05-02  199   * fails, or NUMA is disabled on the command line.
a4106eae650a4d Tejun Heo                 2011-05-02  200   *
a4106eae650a4d Tejun Heo                 2011-05-02  201   * Must online at least one node and add memory blocks that cover all
a4106eae650a4d Tejun Heo                 2011-05-02  202   * allowed memory.  This function must not fail.
a4106eae650a4d Tejun Heo                 2011-05-02  203   */
a4106eae650a4d Tejun Heo                 2011-05-02  204  static int __init dummy_numa_init(void)
a4106eae650a4d Tejun Heo                 2011-05-02  205  {
a4106eae650a4d Tejun Heo                 2011-05-02  206  	printk(KERN_INFO "%s\n",
a4106eae650a4d Tejun Heo                 2011-05-02  207  	       numa_off ? "NUMA turned off" : "No NUMA configuration found");
365811d6f9bd98 Bjorn Helgaas             2012-05-29  208  	printk(KERN_INFO "Faking a node at [mem %#018Lx-%#018Lx]\n",
365811d6f9bd98 Bjorn Helgaas             2012-05-29  209  	       0LLU, PFN_PHYS(max_pfn) - 1);
a4106eae650a4d Tejun Heo                 2011-05-02  210  
a4106eae650a4d Tejun Heo                 2011-05-02  211  	node_set(0, numa_nodes_parsed);
38f3e1ca24cc3e Tejun Heo                 2011-05-02  212  	numa_add_memblk(0, 0, PFN_PHYS(max_pfn));
a4106eae650a4d Tejun Heo                 2011-05-02  213  
a4106eae650a4d Tejun Heo                 2011-05-02  214  	return 0;
a4106eae650a4d Tejun Heo                 2011-05-02  215  }
a4106eae650a4d Tejun Heo                 2011-05-02  216  
a4106eae650a4d Tejun Heo                 2011-05-02  217  /**
a4106eae650a4d Tejun Heo                 2011-05-02  218   * x86_numa_init - Initialize NUMA
a4106eae650a4d Tejun Heo                 2011-05-02  219   *
a4106eae650a4d Tejun Heo                 2011-05-02  220   * Try each configured NUMA initialization method until one succeeds.  The
11a98f37a5c11f Cao jin                   2019-11-18  221   * last fallback is dummy single node config encompassing whole memory and
a4106eae650a4d Tejun Heo                 2011-05-02  222   * never fails.
a4106eae650a4d Tejun Heo                 2011-05-02  223   */
a4106eae650a4d Tejun Heo                 2011-05-02  224  void __init x86_numa_init(void)
a4106eae650a4d Tejun Heo                 2011-05-02  225  {
a4106eae650a4d Tejun Heo                 2011-05-02  226  	if (!numa_off) {
a4106eae650a4d Tejun Heo                 2011-05-02  227  #ifdef CONFIG_ACPI_NUMA
a4106eae650a4d Tejun Heo                 2011-05-02  228  		if (!numa_init(x86_acpi_numa_init))
a4106eae650a4d Tejun Heo                 2011-05-02  229  			return;
a4106eae650a4d Tejun Heo                 2011-05-02  230  #endif
a4106eae650a4d Tejun Heo                 2011-05-02  231  #ifdef CONFIG_AMD_NUMA
a4106eae650a4d Tejun Heo                 2011-05-02  232  		if (!numa_init(amd_numa_init))
a4106eae650a4d Tejun Heo                 2011-05-02  233  			return;
a4106eae650a4d Tejun Heo                 2011-05-02  234  #endif
0c436a58292d0c Saurabh Sengar            2023-08-25  235  		if (acpi_disabled && !numa_init(of_numa_init))
0c436a58292d0c Saurabh Sengar            2023-08-25  236  			return;
a4106eae650a4d Tejun Heo                 2011-05-02  237  	}
a4106eae650a4d Tejun Heo                 2011-05-02  238  
a4106eae650a4d Tejun Heo                 2011-05-02  239  	numa_init(dummy_numa_init);
a4106eae650a4d Tejun Heo                 2011-05-02  240  }
a4106eae650a4d Tejun Heo                 2011-05-02  241  
8db78cc4b4048e Tejun Heo                 2011-01-23  242  
73bf7382debb1a Jonathan Cameron          2020-09-30  243  /*
73bf7382debb1a Jonathan Cameron          2020-09-30  244   * A node may exist which has one or more Generic Initiators but no CPUs and no
73bf7382debb1a Jonathan Cameron          2020-09-30  245   * memory.
73bf7382debb1a Jonathan Cameron          2020-09-30  246   *
73bf7382debb1a Jonathan Cameron          2020-09-30  247   * This function must be called after init_cpu_to_node(), to ensure that any
73bf7382debb1a Jonathan Cameron          2020-09-30  248   * memoryless CPU nodes have already been brought online, and before the
73bf7382debb1a Jonathan Cameron          2020-09-30  249   * node_data[nid] is needed for zone list setup in build_all_zonelists().
73bf7382debb1a Jonathan Cameron          2020-09-30  250   *
73bf7382debb1a Jonathan Cameron          2020-09-30  251   * When this function is called, any nodes containing either memory and/or CPUs
73bf7382debb1a Jonathan Cameron          2020-09-30  252   * will already be online and there is no need to do anything extra, even if
73bf7382debb1a Jonathan Cameron          2020-09-30  253   * they also contain one or more Generic Initiators.
73bf7382debb1a Jonathan Cameron          2020-09-30  254   */
73bf7382debb1a Jonathan Cameron          2020-09-30 @255  void __init init_gi_nodes(void)
73bf7382debb1a Jonathan Cameron          2020-09-30  256  {
73bf7382debb1a Jonathan Cameron          2020-09-30  257  	int nid;
73bf7382debb1a Jonathan Cameron          2020-09-30  258  
1ca75fa7f19d69 Oscar Salvador            2022-03-22  259  	/*
1ca75fa7f19d69 Oscar Salvador            2022-03-22  260  	 * Exclude this node from
1ca75fa7f19d69 Oscar Salvador            2022-03-22  261  	 * bringup_nonboot_cpus
1ca75fa7f19d69 Oscar Salvador            2022-03-22  262  	 *  cpu_up
1ca75fa7f19d69 Oscar Salvador            2022-03-22  263  	 *   __try_online_node
1ca75fa7f19d69 Oscar Salvador            2022-03-22  264  	 *    register_one_node
1ca75fa7f19d69 Oscar Salvador            2022-03-22  265  	 * because node_subsys is not initialized yet.
1ca75fa7f19d69 Oscar Salvador            2022-03-22  266  	 * TODO remove dependency on node_online
1ca75fa7f19d69 Oscar Salvador            2022-03-22  267  	 */
73bf7382debb1a Jonathan Cameron          2020-09-30  268  	for_each_node_state(nid, N_GENERIC_INITIATOR)
73bf7382debb1a Jonathan Cameron          2020-09-30  269  		if (!node_online(nid))
1ca75fa7f19d69 Oscar Salvador            2022-03-22  270  			node_set_online(nid);
73bf7382debb1a Jonathan Cameron          2020-09-30  271  }
73bf7382debb1a Jonathan Cameron          2020-09-30  272  
8db78cc4b4048e Tejun Heo                 2011-01-23  273  /*
8db78cc4b4048e Tejun Heo                 2011-01-23  274   * Setup early cpu_to_node.
8db78cc4b4048e Tejun Heo                 2011-01-23  275   *
8db78cc4b4048e Tejun Heo                 2011-01-23  276   * Populate cpu_to_node[] only if x86_cpu_to_apicid[],
8db78cc4b4048e Tejun Heo                 2011-01-23  277   * and apicid_to_node[] tables have valid entries for a CPU.
8db78cc4b4048e Tejun Heo                 2011-01-23  278   * This means we skip cpu_to_node[] initialisation for NUMA
8db78cc4b4048e Tejun Heo                 2011-01-23  279   * emulation and faking node case (when running a kernel compiled
8db78cc4b4048e Tejun Heo                 2011-01-23  280   * for NUMA on a non NUMA box), which is OK as cpu_to_node[]
8db78cc4b4048e Tejun Heo                 2011-01-23  281   * is already initialized in a round robin manner at numa_init_array,
8db78cc4b4048e Tejun Heo                 2011-01-23  282   * prior to this call, and this initialization is good enough
8db78cc4b4048e Tejun Heo                 2011-01-23  283   * for the fake NUMA cases.
8db78cc4b4048e Tejun Heo                 2011-01-23  284   *
8db78cc4b4048e Tejun Heo                 2011-01-23  285   * Called before the per_cpu areas are setup.
8db78cc4b4048e Tejun Heo                 2011-01-23  286   */
8db78cc4b4048e Tejun Heo                 2011-01-23 @287  void __init init_cpu_to_node(void)
8db78cc4b4048e Tejun Heo                 2011-01-23  288  {
8db78cc4b4048e Tejun Heo                 2011-01-23  289  	int cpu;
4705243d237ab6 Thomas Gleixner           2023-08-14  290  	u32 *cpu_to_apicid = early_per_cpu_ptr(x86_cpu_to_apicid);
8db78cc4b4048e Tejun Heo                 2011-01-23  291  
8db78cc4b4048e Tejun Heo                 2011-01-23  292  	BUG_ON(cpu_to_apicid == NULL);
8db78cc4b4048e Tejun Heo                 2011-01-23  293  
8db78cc4b4048e Tejun Heo                 2011-01-23  294  	for_each_possible_cpu(cpu) {
8db78cc4b4048e Tejun Heo                 2011-01-23  295  		int node = numa_cpu_node(cpu);
8db78cc4b4048e Tejun Heo                 2011-01-23  296  
8db78cc4b4048e Tejun Heo                 2011-01-23  297  		if (node == NUMA_NO_NODE)
8db78cc4b4048e Tejun Heo                 2011-01-23  298  			continue;
2532fc318db0e1 Tang Chen                 2016-08-25  299  
1ca75fa7f19d69 Oscar Salvador            2022-03-22  300  		/*
1ca75fa7f19d69 Oscar Salvador            2022-03-22  301  		 * Exclude this node from
1ca75fa7f19d69 Oscar Salvador            2022-03-22  302  		 * bringup_nonboot_cpus
1ca75fa7f19d69 Oscar Salvador            2022-03-22  303  		 *  cpu_up
1ca75fa7f19d69 Oscar Salvador            2022-03-22  304  		 *   __try_online_node
1ca75fa7f19d69 Oscar Salvador            2022-03-22  305  		 *    register_one_node
1ca75fa7f19d69 Oscar Salvador            2022-03-22  306  		 * because node_subsys is not initialized yet.
1ca75fa7f19d69 Oscar Salvador            2022-03-22  307  		 * TODO remove dependency on node_online
1ca75fa7f19d69 Oscar Salvador            2022-03-22  308  		 */
8db78cc4b4048e Tejun Heo                 2011-01-23  309  		if (!node_online(node))
1ca75fa7f19d69 Oscar Salvador            2022-03-22  310  			node_set_online(node);
2532fc318db0e1 Tang Chen                 2016-08-25  311  
8db78cc4b4048e Tejun Heo                 2011-01-23  312  		numa_set_node(cpu, node);
8db78cc4b4048e Tejun Heo                 2011-01-23  313  	}
8db78cc4b4048e Tejun Heo                 2011-01-23  314  }
8db78cc4b4048e Tejun Heo                 2011-01-23  315  
de2d9445f16278 Tejun Heo                 2011-01-23  316  #ifndef CONFIG_DEBUG_PER_CPU_MAPS
de2d9445f16278 Tejun Heo                 2011-01-23  317  
de2d9445f16278 Tejun Heo                 2011-01-23  318  # ifndef CONFIG_NUMA_EMU
7a7152857d962a Mike Rapoport (Microsoft  2024-08-07  319) void numa_add_cpu(unsigned int cpu)
de2d9445f16278 Tejun Heo                 2011-01-23  320  {
de2d9445f16278 Tejun Heo                 2011-01-23  321  	cpumask_set_cpu(cpu, node_to_cpumask_map[early_cpu_to_node(cpu)]);
de2d9445f16278 Tejun Heo                 2011-01-23  322  }
de2d9445f16278 Tejun Heo                 2011-01-23  323  
7a7152857d962a Mike Rapoport (Microsoft  2024-08-07  324) void numa_remove_cpu(unsigned int cpu)
de2d9445f16278 Tejun Heo                 2011-01-23  325  {
de2d9445f16278 Tejun Heo                 2011-01-23  326  	cpumask_clear_cpu(cpu, node_to_cpumask_map[early_cpu_to_node(cpu)]);
de2d9445f16278 Tejun Heo                 2011-01-23  327  }
de2d9445f16278 Tejun Heo                 2011-01-23  328  # endif	/* !CONFIG_NUMA_EMU */
de2d9445f16278 Tejun Heo                 2011-01-23  329  
de2d9445f16278 Tejun Heo                 2011-01-23  330  #else	/* !CONFIG_DEBUG_PER_CPU_MAPS */
645a79195f66eb Tejun Heo                 2011-01-23  331  
645a79195f66eb Tejun Heo                 2011-01-23  332  int __cpu_to_node(int cpu)
645a79195f66eb Tejun Heo                 2011-01-23  333  {
645a79195f66eb Tejun Heo                 2011-01-23  334  	if (early_per_cpu_ptr(x86_cpu_to_node_map)) {
645a79195f66eb Tejun Heo                 2011-01-23  335  		printk(KERN_WARNING
645a79195f66eb Tejun Heo                 2011-01-23  336  			"cpu_to_node(%d): usage too early!\n", cpu);
645a79195f66eb Tejun Heo                 2011-01-23  337  		dump_stack();
645a79195f66eb Tejun Heo                 2011-01-23  338  		return early_per_cpu_ptr(x86_cpu_to_node_map)[cpu];
645a79195f66eb Tejun Heo                 2011-01-23  339  	}
645a79195f66eb Tejun Heo                 2011-01-23  340  	return per_cpu(x86_cpu_to_node_map, cpu);
645a79195f66eb Tejun Heo                 2011-01-23  341  }
645a79195f66eb Tejun Heo                 2011-01-23  342  EXPORT_SYMBOL(__cpu_to_node);
645a79195f66eb Tejun Heo                 2011-01-23  343  
645a79195f66eb Tejun Heo                 2011-01-23  344  /*
645a79195f66eb Tejun Heo                 2011-01-23  345   * Same function as cpu_to_node() but used if called before the
645a79195f66eb Tejun Heo                 2011-01-23  346   * per_cpu areas are setup.
645a79195f66eb Tejun Heo                 2011-01-23  347   */
645a79195f66eb Tejun Heo                 2011-01-23  348  int early_cpu_to_node(int cpu)
645a79195f66eb Tejun Heo                 2011-01-23  349  {
645a79195f66eb Tejun Heo                 2011-01-23  350  	if (early_per_cpu_ptr(x86_cpu_to_node_map))
645a79195f66eb Tejun Heo                 2011-01-23  351  		return early_per_cpu_ptr(x86_cpu_to_node_map)[cpu];
645a79195f66eb Tejun Heo                 2011-01-23  352  
645a79195f66eb Tejun Heo                 2011-01-23  353  	if (!cpu_possible(cpu)) {
645a79195f66eb Tejun Heo                 2011-01-23  354  		printk(KERN_WARNING
645a79195f66eb Tejun Heo                 2011-01-23  355  			"early_cpu_to_node(%d): no per_cpu area!\n", cpu);
645a79195f66eb Tejun Heo                 2011-01-23  356  		dump_stack();
645a79195f66eb Tejun Heo                 2011-01-23  357  		return NUMA_NO_NODE;
645a79195f66eb Tejun Heo                 2011-01-23  358  	}
645a79195f66eb Tejun Heo                 2011-01-23  359  	return per_cpu(x86_cpu_to_node_map, cpu);
645a79195f66eb Tejun Heo                 2011-01-23  360  }
645a79195f66eb Tejun Heo                 2011-01-23  361  
7a7152857d962a Mike Rapoport (Microsoft  2024-08-07 @362) void debug_cpumask_set_cpu(unsigned int cpu, int node, bool enable)
de2d9445f16278 Tejun Heo                 2011-01-23  363  {
de2d9445f16278 Tejun Heo                 2011-01-23  364  	struct cpumask *mask;
de2d9445f16278 Tejun Heo                 2011-01-23  365  
14392fd329eca9 David Rientjes            2011-02-07  366  	if (node == NUMA_NO_NODE) {
14392fd329eca9 David Rientjes            2011-02-07  367  		/* early_cpu_to_node() already emits a warning and trace */
7a6c6547825a23 David Rientjes            2011-04-20  368  		return;
14392fd329eca9 David Rientjes            2011-02-07  369  	}
de2d9445f16278 Tejun Heo                 2011-01-23  370  	mask = node_to_cpumask_map[node];
625395c4a0f477 Siddh Raman Pant          2022-07-31  371  	if (!cpumask_available(mask)) {
de2d9445f16278 Tejun Heo                 2011-01-23  372  		pr_err("node_to_cpumask_map[%i] NULL\n", node);
de2d9445f16278 Tejun Heo                 2011-01-23  373  		dump_stack();
7a6c6547825a23 David Rientjes            2011-04-20  374  		return;
de2d9445f16278 Tejun Heo                 2011-01-23  375  	}
de2d9445f16278 Tejun Heo                 2011-01-23  376  
7a6c6547825a23 David Rientjes            2011-04-20  377  	if (enable)
7a6c6547825a23 David Rientjes            2011-04-20  378  		cpumask_set_cpu(cpu, mask);
7a6c6547825a23 David Rientjes            2011-04-20  379  	else
7a6c6547825a23 David Rientjes            2011-04-20  380  		cpumask_clear_cpu(cpu, mask);
7a6c6547825a23 David Rientjes            2011-04-20  381  
bf58b4879c33b3 Tejun Heo                 2015-02-13  382  	printk(KERN_DEBUG "%s cpu %d node %d: mask now %*pbl\n",
de2d9445f16278 Tejun Heo                 2011-01-23  383  		enable ? "numa_add_cpu" : "numa_remove_cpu",
bf58b4879c33b3 Tejun Heo                 2015-02-13  384  		cpu, node, cpumask_pr_args(mask));
7a6c6547825a23 David Rientjes            2011-04-20  385  	return;
de2d9445f16278 Tejun Heo                 2011-01-23  386  }
de2d9445f16278 Tejun Heo                 2011-01-23  387  

:::::: The code at line 172 was first introduced by commit
:::::: a4106eae650a4d5d30fcdd36d998edfa5ccb0ec4 x86, NUMA: Move NUMA init logic from numa_64.c to numa.c

:::::: TO: Tejun Heo <tj@kernel.org>
:::::: CC: Tejun Heo <tj@kernel.org>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2025-04-07 12:55 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202504072048.fRQ7N8Kk-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=llvm@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=rppt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.