arm64, numa: Add numa support for arm64 platforms
Subsystems (2)
v8 cover arm64, numa: Add numa support for arm64 platforms
v8:
- Incorporated review comments of Mark Rutland and Will Deacon.
- Added pci helper function and macro for numa.
v7:
- managing numa memory mapping using memblock.
- Incorporated review comments of Mark Rutland.
v6:
- defined and implemented the numa dt binding using node property proximity and device node distance-map.
- renamed dt_numa to of_numa
v5:
- created base verion of numa.c which creates dummy numa without using dt on single socket platforms. Then added patches for dt support.
- Incorporated review comments from Hanjun Guo.
v4:
done changes as per Arnd review comments.
v3:
Added changes to support numa on arm64 based platforms. Tested these patches on cavium's multinode(2 node topology) platform. In this patchset, defined and implemented dt bindings for numa mapping for core and memory using device node property arm,associativity.
v2:
Defined and implemented numa map for memory, cores to node and proximity distance matrix of nodes.
v1:
Initial patchset to support numa on arm64 platforms.
Note:
1. This patchset is tested for numa with dt on
thunderx single socket and dual socket boards.
2. Numa DT booting needs the dt memory nodes, which are deleted in current efi-stub, hence to try numa with dt, you need to rebase with ard's patchset.
http://git.linaro.org/people/ard.biesheuvel/linux-arm.git/shortlog/refs/heads/arm64-uefi-early-fdt-handling
Ganapatrao Kulkarni (4):
arm64, numa: adding numa support for arm64 platforms. Documentation, dt, arm64/arm: dt bindings for numa. arm64/arm, numa, dt: adding numa dt binding implementation for arm64
platforms.
arm64, dt, thunderx: Add initial dts for Cavium Thunderx in 2 node
topology.
Documentation/devicetree/bindings/arm/numa.txt | 272 ++++++++ arch/arm64/Kconfig | 35 + arch/arm64/boot/dts/cavium/Makefile | 2 +- arch/arm64/boot/dts/cavium/thunder-88xx-2n.dts | 83 +++ arch/arm64/boot/dts/cavium/thunder-88xx-2n.dtsi | 806 ++++++++++++++++++++++++ arch/arm64/include/asm/mmzone.h | 18 + arch/arm64/include/asm/numa.h | 56 ++ arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/of_numa.c | 265 ++++++++ arch/arm64/kernel/pci.c | 9 + arch/arm64/kernel/setup.c | 4 + arch/arm64/kernel/smp.c | 4 + arch/arm64/mm/Makefile | 1 + arch/arm64/mm/init.c | 31 +- arch/arm64/mm/mmu.c | 1 + arch/arm64/mm/numa.c | 395 ++++++++++++ 16 files changed, 1977 insertions(+), 6 deletions(-) create mode 100644 Documentation/devicetree/bindings/arm/numa.txt create mode 100644 arch/arm64/boot/dts/cavium/thunder-88xx-2n.dts create mode 100644 arch/arm64/boot/dts/cavium/thunder-88xx-2n.dtsi create mode 100644 arch/arm64/include/asm/mmzone.h create mode 100644 arch/arm64/include/asm/numa.h create mode 100644 arch/arm64/kernel/of_numa.c create mode 100644 arch/arm64/mm/numa.c
Signature · 1 line
1.8.1.4
PATCH v8 1/4 arm64, numa: adding numa support for arm64 platforms.
Adding numa support for arm64 based platforms.
This patch adds by default the dummy numa node and
maps all memory and cpus to node 0.
using this patch, numa can be simulated on single node arm64 platforms.
--- arch/arm64/Kconfig | 25 +++ arch/arm64/include/asm/mmzone.h | 18 ++ arch/arm64/include/asm/numa.h | 46 +++++ arch/arm64/kernel/pci.c | 9 + arch/arm64/kernel/setup.c | 4 + arch/arm64/kernel/smp.c | 2 + arch/arm64/mm/Makefile | 1 + arch/arm64/mm/init.c | 31 +++- arch/arm64/mm/mmu.c | 1 + arch/arm64/mm/numa.c | 387 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 519 insertions(+), 5 deletions(-) create mode 100644 arch/arm64/include/asm/mmzone.h create mode 100644 arch/arm64/include/asm/numa.h create mode 100644 arch/arm64/mm/numa.c
arch/arm64/Kconfig +25 -0
@@ -71,6 +71,7 @@ config ARM64 select HAVE_GENERIC_DMA_COHERENT select HAVE_HW_BREAKPOINT if PERF_EVENTS select HAVE_MEMBLOCK + select HAVE_MEMBLOCK_NODE_MAP if NUMA select HAVE_PATA_PLATFORM select HAVE_PERF_EVENTS select HAVE_PERF_REGS
@@ -503,6 +504,30 @@ config HOTPLUG_CPU Say Y here to experiment with turning CPUs off and on. CPUs can be controlled through /sys/devices/system/cpu. +# Common NUMA Features +config NUMA + bool "Numa Memory Allocation and Scheduler Support" + depends on SMP + help + Enable NUMA (Non Uniform Memory Access) support. + + The kernel will try to allocate memory used by a CPU on the + local memory of the CPU and add some more + NUMA awareness to the kernel. + +config NODES_SHIFT + int "Maximum NUMA Nodes (as a power of 2)" + range 1 10 + default "2" + depends on NEED_MULTIPLE_NODES + help + Specify the maximum number of NUMA Nodes available on the target + system. Increases memory reserved to accommodate various tables. + +config USE_PERCPU_NUMA_NODE_ID + def_bool y + depends on NUMA + source kernel/Kconfig.preempt source kernel/Kconfig.hz
arch/arm64/include/asm/mmzone.h new file +18 -0
@@ -0,0 +1,18 @@ +#ifndef __ASM_MMZONE_H +#define __ASM_MMZONE_H + +#ifdef CONFIG_NUMA + +#include <linux/mmdebug.h> +#include <linux/types.h> + +#include <asm/smp.h> +#include <asm/numa.h> + +extern struct pglist_data *node_data[]; + +#define NODE_DATA (nid) (node_data[(nid)]) + +#endif /* CONFIG_NUMA */ + +#endif /* __ASM_MMZONE_H */
arch/arm64/include/asm/numa.h new file +46 -0
46 lines not on this page · raw message
arch/arm64/kernel/pci.c +9 -0
@@ -84,3 +84,12 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) return NULL; }#endif + +#ifdef CONFIG_NUMA +int pcibus_to_node (struct pci_bus *bus) +{ +return dev_to_node (&bus->dev); +} +EXPORT_SYMBOL (pcibus_to_node); +#endif +
arch/arm64/kernel/setup.c +4 -0
@@ -53,6 +53,7 @@#include <asm/cpufeature.h> #include <asm/cpu_ops.h> #include <asm/kasan.h> +#include <asm/numa.h> #include <asm/sections.h> #include <asm/setup.h> #include <asm/smp_plat.h>
@@ -372,6 +373,9 @@ static int __init topology_init(void) {int i; +for_each_online_node (i) +register_one_node (i); +for_each_possible_cpu (i) {struct cpu *cpu = &per_cpu (cpu_data.cpu, i); cpu->hotpluggable =1 ;
arch/arm64/kernel/smp.c +2 -0
@@ -45,6 +45,7 @@#include <asm/cputype.h> #include <asm/cpu_ops.h> #include <asm/mmu_context.h> +#include <asm/numa.h> #include <asm/pgtable.h> #include <asm/pgalloc.h> #include <asm/processor.h>
@@ -125,6 +126,7 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle)static void smp_store_cpu_info (unsigned int cpuid) {store_cpu_topology (cpuid); +numa_store_cpu_info (cpuid); }/*
arch/arm64/mm/Makefile +1 -0
@@ -6,4 +6,5 @@ obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o obj-$(CONFIG_ARM64_PTDUMP) += dump.o obj-$(CONFIG_KASAN) += kasan_init.o +obj-$(CONFIG_NUMA) += numa.o KASAN_SANITIZE_kasan_init.o := n
arch/arm64/mm/init.c +26 -5
@@ -37,6 +37,7 @@#include <asm/fixmap.h> #include <asm/memory.h> +#include <asm/numa.h> #include <asm/sections.h> #include <asm/setup.h> #include <asm/sizes.h>
@@ -77,6 +78,19 @@ static phys_addr_t max_zone_dma_phys(void)return min (offset + (1ULL <<32 ),memblock_end_of_DRAM ()); } +#ifdef CONFIG_NUMA +static void __init zone_sizes_init (unsigned long min,unsigned long max) +{ +unsigned long max_zone_pfns[MAX_NR_ZONES ] = {0 }; + +if (IS_ENABLED (CONFIG_ZONE_DMA )) + max_zone_pfns[ZONE_DMA ] =PFN_DOWN (max_zone_dma_phys ()); + max_zone_pfns[ZONE_NORMAL ] = max; + +free_area_init_nodes (max_zone_pfns); +} + +#else static void __init zone_sizes_init (unsigned long min,unsigned long max) {struct memblock_region *reg;
@@ -116,6 +130,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max) free_area_init_node(0, zone_size, min, zhole_size); } +#endif /* CONFIG_NUMA */ #ifdef CONFIG_HAVE_ARCH_PFN_VALID int pfn_valid (unsigned long pfn)
@@ -133,10 +148,15 @@ static void arm64_memory_present(void)static void arm64_memory_present (void ) {struct memblock_region *reg; +int nid =0 ; -for_each_memblock (memory, reg) -memory_present (0 ,memblock_region_memory_base_pfn (reg), -memblock_region_memory_end_pfn (reg)); +for_each_memblock (memory, reg) { +#ifdef CONFIG_NUMA + nid = reg->nid; +#endif +memory_present (nid,memblock_region_memory_base_pfn (reg), +memblock_region_memory_end_pfn (reg)); + } }#endif
@@ -181,7 +201,6 @@ void __init arm64_memblock_init(void)dma_contiguous_reserve (arm64_dma_phys_limit);memblock_allow_resize (); -memblock_dump_all (); }void __init bootmem_init (void )
@@ -193,6 +212,9 @@ void __init bootmem_init(void)early_memtest (min <<PAGE_SHIFT , max <<PAGE_SHIFT ); + max_pfn = max_low_pfn = max; + +arm64_numa_init ();/* * Sparsemem tries to allocate bootmem in memory_present(), so must be * done after the fixed reservations.
@@ -203,7 +225,6 @@ void __init bootmem_init(void)zone_sizes_init (min, max); high_memory =__va ((max <<PAGE_SHIFT ) -1 ) +1 ; - max_pfn = max_low_pfn = max; }#ifndef CONFIG_SPARSEMEM_VMEMMAP
arch/arm64/mm/mmu.c +1 -0
@@ -453,6 +453,7 @@ void __init paging_init(void) zero_page =early_alloc (PAGE_SIZE );bootmem_init (); +memblock_dump_all (); empty_zero_page =virt_to_page (zero_page);
arch/arm64/mm/numa.c new file +387 -0
387 lines not on this page · raw message
Signature · 1 line
1.8.1.4
PATCH v8 2/4 Documentation, dt, arm64/arm: dt bindings for numa.
In reply to Ganapatrao KulkarniDT bindings for numa mapping of memory, cores and IOs.
--- Documentation/devicetree/bindings/arm/numa.txt | 272 +++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 Documentation/devicetree/bindings/arm/numa.txt
Documentation/devicetree/bindings/arm/numa.txt new file +272 -0
@@ -0,0 +1,272 @@ +============================================================================== +NUMA binding description. +============================================================================== + +============================================================================== +1 - Introduction +============================================================================== + +Systems employing a Non Uniform Memory Access (NUMA) architecture contain +collections of hardware resources including processors, memory, and I/O buses, +that comprise what is commonly known as a NUMA node. +Processor accesses to memory within the local NUMA node is generally faster +than processor accesses to memory outside of the local NUMA node. +DT defines interfaces that allow the platform to convey NUMA node +topology information to OS. + +============================================================================== +2 - numa-node-id +============================================================================== + +For the purpose of identification, each NUMA node is associated with a unique +token known as a node id. For the purpose of this binding +a node id is a 32-bit integer. + +A device node is associated with a NUMA node by the presence of a +numa-node-id property which contains the node id of the device. + +Example: + /* numa node 0 */ + numa-node-id = <0>; + + /* numa node 1 */ + numa-node-id = <1>; + +============================================================================== +3 - distance-map +============================================================================== + +The device tree node distance-map describes the relative +distance(memory latency) between all numa nodes. + +- compatible : Should at least contain "numa-distance-map-v1". + +- distance-matrix + This property defines a matrix to describe the relative distances + between all numa nodes. + It is represented as a list of node pairs and their relative distance. + + Note: + 1. Each entry represents distance from first node to second node. + The distance are equal in either direction. + 2. The distance from a node to self(local distance) is represented + with value 10 and all inter node distance should be represented with + value greater than 10. + 3. distance-matrix shold have entries in lexicographical ascending + order of nodes. + 4. There must be only one Device node distance-map and must reside in the root node. + +Example: + 4 nodes connected in mesh/ring topology as below, + + 0_______20______1 + | | + | | + 20 20 + | | + | | + |_______________| + 3 20 2 + + if relative distance for each hop is 20, + then inter node distance would be, + 0 -> 1 = 20 + 1 -> 2 = 20 + 2 -> 3 = 20 + 3 -> 0 = 20 + 0 -> 2 = 40 + 1 -> 3 = 40 + + and dt presentation for this distance matrix is, + + distance-map { + compatible = "numa-distance-map-v1"; + distance-matrix = <0 0 10>, + <0 1 20>, + <0 2 40>, + <0 3 20>, + <1 0 20>, + <1 1 10>, + <1 2 20>, + <1 3 40>, + <2 0 40>, + <2 1 20>, + <2 2 10>, + <2 3 20>, + <3 0 20>, + <3 1 40>, + <3 2 20>, + <3 3 10>; + }; + +============================================================================== +4 - Example dts +============================================================================== + +2 sockets system consists of 2 boards connected through ccn bus and +each board having one socket/soc of 8 cpus, memory and pci bus. + + memory at 00c00000 { + device_type = "memory"; + reg = <0x0 0x00c00000 0x0 0x80000000>; + /* node 0 */ + numa-node-id = <0>; + }; + + memory at 10000000000 { + device_type = "memory"; + reg = <0x100 0x00000000 0x0 0x80000000>; + /* node 1 */ + numa-node-id = <1>; + }; + + cpus { + #address-cells = <2>; + #size-cells = <0>; + + cpu at 000 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x000>; + enable-method = "psci"; + /* node 0 */ + numa-node-id = <0>; + }; + cpu at 001 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x001>; + enable-method = "psci"; + numa-node-id = <0>; + }; + cpu at 002 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x002>; + enable-method = "psci"; + numa-node-id = <0>; + }; + cpu at 003 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x003>; + enable-method = "psci"; + numa-node-id = <0>; + }; + cpu at 004 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x004>; + enable-method = "psci"; + numa-node-id = <0>; + }; + cpu at 005 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x005>; + enable-method = "psci"; + numa-node-id = <0>; + }; + cpu at 006 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x006>; + enable-method = "psci"; + numa-node-id = <0>; + }; + cpu at 007 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x007>; + enable-method = "psci"; + numa-node-id = <0>; + }; + cpu at 008 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x008>; + enable-method = "psci"; + /* node 1 */ + numa-node-id = <1>; + }; + cpu at 009 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x009>; + enable-method = "psci"; + numa-node-id = <1>; + }; + cpu at 00a { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x00a>; + enable-method = "psci"; + numa-node-id = <1>; + }; + cpu at 00b { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x00b>; + enable-method = "psci"; + numa-node-id = <1>; + }; + cpu at 00c { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x00c>; + enable-method = "psci"; + numa-node-id = <1>; + }; + cpu at 00d { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x00d>; + enable-method = "psci"; + numa-node-id = <1>; + }; + cpu at 00e { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x00e>; + enable-method = "psci"; + numa-node-id = <1>; + }; + cpu at 00f { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x00f>; + enable-method = "psci"; + numa-node-id = <1>; + }; + }; + + pcie0: pcie0 at 0x8480,00000000 { + compatible = "arm,armv8"; + device_type = "pci"; + bus-range = <0 255>; + #size-cells = <2>; + #address-cells = <3>; + reg = <0x8480 0x00000000 0 0x10000000>; /* Configuration space */ + ranges = <0x03000000 0x8010 0x00000000 0x8010 0x00000000 0x70 0x00000000>; + /* node 0 */ + numa-node-id = <0>; + }; + + pcie1: pcie1 at 0x9480,00000000 { + compatible = "arm,armv8"; + device_type = "pci"; + bus-range = <0 255>; + #size-cells = <2>; + #address-cells = <3>; + reg = <0x9480 0x00000000 0 0x10000000>; /* Configuration space */ + ranges = <0x03000000 0x9010 0x00000000 0x9010 0x00000000 0x70 0x00000000>; + /* node 1 */ + numa-node-id = <1>; + }; + + distance-map { + compatible = "numa-distance-map-v1"; + distance-matrix = <0 0 10>, + <0 1 20>, + <1 1 10>; + };
Signature · 1 line
1.8.1.4
PATCH v8 3/4 arm64/arm, numa, dt: adding numa dt binding implementation for arm64 platforms.
In reply to Ganapatrao KulkarniAdding numa dt binding support for arm64 based platforms. dt node parsing for numa topology is done using device property numa-node-id and device node distance-map.
--- arch/arm64/Kconfig | 10 ++ arch/arm64/include/asm/numa.h | 10 ++ arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/of_numa.c | 265 ++++++++++++++++++++++++++++++++++++++++++ arch/arm64/kernel/smp.c | 2 + arch/arm64/mm/numa.c | 10 +- 6 files changed, 297 insertions(+), 1 deletion(-) create mode 100644 arch/arm64/kernel/of_numa.c
arch/arm64/Kconfig +10 -0
@@ -515,6 +515,16 @@ config NUMA local memory of the CPU and add some more NUMA awareness to the kernel. +config OF_NUMA + bool "Device Tree NUMA support" + depends on NUMA + depends on OF + default y + help + Enable Device Tree NUMA support. + This enables the numa mapping of cpu, memory, io and + inter node distances using dt bindings. + config NODES_SHIFT int "Maximum NUMA Nodes (as a power of 2)" range 1 10
arch/arm64/include/asm/numa.h +10 -0
@@ -43,4 +43,14 @@ void numa_store_cpu_info(unsigned int cpu);static inline void numa_store_cpu_info (unsigned int cpu) { }static inline void arm64_numa_init (void ) { }#endif /* CONFIG_NUMA */ + +struct device_node ; +#ifdef CONFIG_OF_NUMA +int __init arm64_of_numa_init (void ); +void __init of_numa_set_node_info (unsigned int cpu,struct device_node *dn); +#else +static inline void of_numa_set_node_info (unsigned int cpu, +struct device_node *dn) { } +#endif +#endif /* __ASM_NUMA_H */
arch/arm64/kernel/Makefile +1 -0
@@ -41,6 +41,7 @@ arm64-obj-$(CONFIG_EFI) += efi.o efi-entry.stub.o arm64-obj-$(CONFIG_PCI) += pci.o arm64-obj-$(CONFIG_ARMV8_DEPRECATED) += armv8_deprecated.o arm64-obj-$(CONFIG_ACPI) += acpi.o +arm64-obj-$(CONFIG_OF_NUMA) += of_numa.o obj-y += $(arm64-obj-y) vdso/ obj-m += $(arm64-obj-m)
arch/arm64/kernel/of_numa.c new file +265 -0
265 lines not on this page · raw message
arch/arm64/kernel/smp.c +2 -0
@@ -520,6 +520,8 @@ static void __init of_parse_and_init_cpus(void)pr_debug ("cpu logical map 0x%llx\n" , hwid);cpu_logical_map (cpu_count) = hwid; +/* map logical cpu to node */ +of_numa_set_node_info (cpu_count, dn); next: cpu_count++; }
arch/arm64/mm/numa.c +9 -1
@@ -383,5 +383,13 @@ static int __init dummy_numa_init(void)*/ void __init arm64_numa_init (void ) { -numa_init (dummy_numa_init); +int ret = -ENODEV ; + +#ifdef CONFIG_OF_NUMA +if (!numa_off) + ret =numa_init (arm64_of_numa_init); +#endif + +if (ret) +numa_init (dummy_numa_init); }
Signature · 1 line
1.8.1.4
PATCH v8 3/4 arm64/arm, numa, dt: adding numa dt binding implementation for arm64 platforms.
Hi Ganapatrao,
Quoted 34 lines · Ganapatrao Kulkarni
arch/arm64/kernel/of_numa.c new file +34
-0+static int __init early_init_parse_memory_node (unsigned long node) +{ +const __be32 *reg, *endp; +int length; +int nid; + +const char *type =of_get_flat_dt_prop (node,"device_type" ,NULL ); + +/* We are scanning "memory" nodes only */ +if (type ==NULL ) +return 0 ; +else if (strcmp (type,"memory" ) !=0 ) +return 0 ; + + nid =early_init_of_get_numa_nid (node); + +if (nid ==NUMA_NO_NODE ) +return -EINVAL ; + + reg =of_get_flat_dt_prop (node,"reg" , &length); + endp = reg + (length /sizeof (__be32)); + +while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) { +u64 base, size; +struct memblock_region *mblk; + + base =dt_mem_next_cell (dt_root_addr_cells, ®); + size =dt_mem_next_cell (dt_root_size_cells, ®); +pr_debug ("NUMA-DT: base = %llx , node = %u\n" , + base, nid); + +for_each_memblock (memory, mblk) { +if (mblk->base == base) { + if (numa_add_memblk(nid,
arch/arm64/kernel/of_numa.c line 184
Quoted 10 lines
arch/arm64/kernel/of_numa.c new file +10
-0+ mblk->base, + mblk->size) < 0) +return -EINVAL ; +break ; + } + } + } + +return 0 ; +}
Here it seems that you didn't address the comments[1] I gave on your previous patch set.
[1] http://www.spinics.net/lists/devicetree/msg104493.html
Thanks,
Signature · 1 line
Shannon
PATCH v8 3/4 arm64/arm, numa, dt: adding numa dt binding implementation for arm64 platforms.
Hi Shannon,
Quoted 43 lines · Shannon Zhao
Hi Ganapatrao,
Quoted 39 lines · Ganapatrao Kulkarni
arch/arm64/kernel/of_numa.c new file +39
-0+static int __init early_init_parse_memory_node (unsigned long node) +{ +const __be32 *reg, *endp; +int length; +int nid; + +const char *type =of_get_flat_dt_prop (node,"device_type" ,NULL ); + +/* We are scanning "memory" nodes only */ +if (type ==NULL ) +return 0 ; +else if (strcmp (type,"memory" ) !=0 ) +return 0 ; + + nid =early_init_of_get_numa_nid (node); + +if (nid ==NUMA_NO_NODE ) +return -EINVAL ; + + reg =of_get_flat_dt_prop (node,"reg" , &length); + endp = reg + (length /sizeof (__be32)); + +while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) { +u64 base, size; +struct memblock_region *mblk; + + base =dt_mem_next_cell (dt_root_addr_cells, ®); + size =dt_mem_next_cell (dt_root_size_cells, ®); +pr_debug ("NUMA-DT: base = %llx , node = %u\n" , + base, nid); + +for_each_memblock (memory, mblk) { +if (mblk->base == base) { +if (numa_add_memblk (nid, + mblk->base, + mblk->size) <0 ) +return -EINVAL ; +break ; + }
Quoted 8 lines
arch/arm64/kernel/of_numa.c line 139
Quoted 5 lines
arch/arm64/kernel/of_numa.c new file +5
-0+ } + } + +return 0 ; +}Here it seems that you didn't address the comments[1] I gave on your previous patch set.
sorry, i have missed your comment.
i will update it.
Quoted 7 lines
[1] http://www.spinics.net/lists/devicetree/msg104493.html
Thanks,
--
Shannon
thanks
Ganapat
PATCH v8 4/4 arm64, dt, thunderx: Add initial dts for Cavium Thunderx in 2 node topology.
In reply to Ganapatrao KulkarniAdding dt file for Cavium's Thunderx dual socket platform.
--- arch/arm64/boot/dts/cavium/Makefile | 2 +- arch/arm64/boot/dts/cavium/thunder-88xx-2n.dts | 83 +++ arch/arm64/boot/dts/cavium/thunder-88xx-2n.dtsi | 806 ++++++++++++++++++++++++ 3 files changed, 890 insertions(+), 1 deletion(-) create mode 100644 arch/arm64/boot/dts/cavium/thunder-88xx-2n.dts create mode 100644 arch/arm64/boot/dts/cavium/thunder-88xx-2n.dtsi
arch/arm64/boot/dts/cavium/Makefile +1 -1
@@ -1,4 +1,4 @@ -dtb-$(CONFIG_ARCH_THUNDER) += thunder-88xx.dtb +dtb-$(CONFIG_ARCH_THUNDER) += thunder-88xx.dtb thunder-88xx-2n.dtb always := $(dtb-y) subdir-y := $(dts-dirs)
arch/arm64/boot/dts/cavium/thunder-88xx-2n.dts new file +83 -0
83 lines not on this page · raw message
arch/arm64/boot/dts/cavium/thunder-88xx-2n.dtsi new file +806 -0
806 lines not on this page · raw message
Signature · 1 line
1.8.1.4