numa.c (692d73d2f0f75e58828ab05872b3789ae1f486ef) numa.c (1b5695b02444660297cc54cab44f123ff28de2cc)
1// SPDX-License-Identifier: GPL-2.0-only
2/* Common code for 32 and 64-bit NUMA */
3#include <linux/acpi.h>
4#include <linux/kernel.h>
5#include <linux/mm.h>
6#include <linux/of.h>
7#include <linux/string.h>
8#include <linux/init.h>

--- 439 unchanged lines hidden (view full) ---

448 }
449}
450
451u64 __init numa_emu_dma_end(void)
452{
453 return PFN_PHYS(MAX_DMA32_PFN);
454}
455#endif /* CONFIG_NUMA_EMU */
1// SPDX-License-Identifier: GPL-2.0-only
2/* Common code for 32 and 64-bit NUMA */
3#include <linux/acpi.h>
4#include <linux/kernel.h>
5#include <linux/mm.h>
6#include <linux/of.h>
7#include <linux/string.h>
8#include <linux/init.h>

--- 439 unchanged lines hidden (view full) ---

448 }
449}
450
451u64 __init numa_emu_dma_end(void)
452{
453 return PFN_PHYS(MAX_DMA32_PFN);
454}
455#endif /* CONFIG_NUMA_EMU */
456
457#ifdef CONFIG_NUMA_KEEP_MEMINFO
458static int meminfo_to_nid(struct numa_meminfo *mi, u64 start)
459{
460 int i;
461
462 for (i = 0; i < mi->nr_blks; i++)
463 if (mi->blk[i].start <= start && mi->blk[i].end > start)
464 return mi->blk[i].nid;
465 return NUMA_NO_NODE;
466}
467
468int phys_to_target_node(phys_addr_t start)
469{
470 int nid = meminfo_to_nid(&numa_meminfo, start);
471
472 /*
473 * Prefer online nodes, but if reserved memory might be
474 * hot-added continue the search with reserved ranges.
475 */
476 if (nid != NUMA_NO_NODE)
477 return nid;
478
479 return meminfo_to_nid(&numa_reserved_meminfo, start);
480}
481EXPORT_SYMBOL_GPL(phys_to_target_node);
482
483int memory_add_physaddr_to_nid(u64 start)
484{
485 int nid = meminfo_to_nid(&numa_meminfo, start);
486
487 if (nid == NUMA_NO_NODE)
488 nid = numa_meminfo.blk[0].nid;
489 return nid;
490}
491EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);
492
493#endif