diff options
| -rw-r--r-- | arch/s390/boot/compressed/Makefile | 2 | ||||
| -rw-r--r-- | arch/s390/configs/default_defconfig | 2 | ||||
| -rw-r--r-- | arch/s390/configs/gcov_defconfig | 2 | ||||
| -rw-r--r-- | arch/s390/configs/performance_defconfig | 2 | ||||
| -rw-r--r-- | arch/s390/include/asm/numa.h | 2 | ||||
| -rw-r--r-- | arch/s390/include/asm/topology.h | 2 | ||||
| -rw-r--r-- | arch/s390/kernel/asm-offsets.c | 1 | ||||
| -rw-r--r-- | arch/s390/kernel/entry.S | 30 | ||||
| -rw-r--r-- | arch/s390/kernel/vtime.c | 66 | ||||
| -rw-r--r-- | arch/s390/numa/mode_emu.c | 4 | ||||
| -rw-r--r-- | arch/s390/numa/numa.c | 4 |
11 files changed, 77 insertions, 40 deletions
diff --git a/arch/s390/boot/compressed/Makefile b/arch/s390/boot/compressed/Makefile index d4788111c161..fac6ac9790fa 100644 --- a/arch/s390/boot/compressed/Makefile +++ b/arch/s390/boot/compressed/Makefile | |||
| @@ -10,7 +10,7 @@ targets += misc.o piggy.o sizes.h head.o | |||
| 10 | 10 | ||
| 11 | KBUILD_CFLAGS := -m64 -D__KERNEL__ $(LINUX_INCLUDE) -O2 | 11 | KBUILD_CFLAGS := -m64 -D__KERNEL__ $(LINUX_INCLUDE) -O2 |
| 12 | KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING | 12 | KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING |
| 13 | KBUILD_CFLAGS += $(cflags-y) -fno-delete-null-pointer-checks | 13 | KBUILD_CFLAGS += $(cflags-y) -fno-delete-null-pointer-checks -msoft-float |
| 14 | KBUILD_CFLAGS += $(call cc-option,-mpacked-stack) | 14 | KBUILD_CFLAGS += $(call cc-option,-mpacked-stack) |
| 15 | KBUILD_CFLAGS += $(call cc-option,-ffreestanding) | 15 | KBUILD_CFLAGS += $(call cc-option,-ffreestanding) |
| 16 | 16 | ||
diff --git a/arch/s390/configs/default_defconfig b/arch/s390/configs/default_defconfig index 0c98f1508542..ed7da281df66 100644 --- a/arch/s390/configs/default_defconfig +++ b/arch/s390/configs/default_defconfig | |||
| @@ -381,7 +381,7 @@ CONFIG_ISCSI_TCP=m | |||
| 381 | CONFIG_SCSI_DEBUG=m | 381 | CONFIG_SCSI_DEBUG=m |
| 382 | CONFIG_ZFCP=y | 382 | CONFIG_ZFCP=y |
| 383 | CONFIG_SCSI_VIRTIO=m | 383 | CONFIG_SCSI_VIRTIO=m |
| 384 | CONFIG_SCSI_DH=m | 384 | CONFIG_SCSI_DH=y |
| 385 | CONFIG_SCSI_DH_RDAC=m | 385 | CONFIG_SCSI_DH_RDAC=m |
| 386 | CONFIG_SCSI_DH_HP_SW=m | 386 | CONFIG_SCSI_DH_HP_SW=m |
| 387 | CONFIG_SCSI_DH_EMC=m | 387 | CONFIG_SCSI_DH_EMC=m |
diff --git a/arch/s390/configs/gcov_defconfig b/arch/s390/configs/gcov_defconfig index 82083e1fbdc4..9858b14cde1e 100644 --- a/arch/s390/configs/gcov_defconfig +++ b/arch/s390/configs/gcov_defconfig | |||
| @@ -377,7 +377,7 @@ CONFIG_ISCSI_TCP=m | |||
| 377 | CONFIG_SCSI_DEBUG=m | 377 | CONFIG_SCSI_DEBUG=m |
| 378 | CONFIG_ZFCP=y | 378 | CONFIG_ZFCP=y |
| 379 | CONFIG_SCSI_VIRTIO=m | 379 | CONFIG_SCSI_VIRTIO=m |
| 380 | CONFIG_SCSI_DH=m | 380 | CONFIG_SCSI_DH=y |
| 381 | CONFIG_SCSI_DH_RDAC=m | 381 | CONFIG_SCSI_DH_RDAC=m |
| 382 | CONFIG_SCSI_DH_HP_SW=m | 382 | CONFIG_SCSI_DH_HP_SW=m |
| 383 | CONFIG_SCSI_DH_EMC=m | 383 | CONFIG_SCSI_DH_EMC=m |
diff --git a/arch/s390/configs/performance_defconfig b/arch/s390/configs/performance_defconfig index c05c9e0821e3..7f14f80717d4 100644 --- a/arch/s390/configs/performance_defconfig +++ b/arch/s390/configs/performance_defconfig | |||
| @@ -377,7 +377,7 @@ CONFIG_ISCSI_TCP=m | |||
| 377 | CONFIG_SCSI_DEBUG=m | 377 | CONFIG_SCSI_DEBUG=m |
| 378 | CONFIG_ZFCP=y | 378 | CONFIG_ZFCP=y |
| 379 | CONFIG_SCSI_VIRTIO=m | 379 | CONFIG_SCSI_VIRTIO=m |
| 380 | CONFIG_SCSI_DH=m | 380 | CONFIG_SCSI_DH=y |
| 381 | CONFIG_SCSI_DH_RDAC=m | 381 | CONFIG_SCSI_DH_RDAC=m |
| 382 | CONFIG_SCSI_DH_HP_SW=m | 382 | CONFIG_SCSI_DH_HP_SW=m |
| 383 | CONFIG_SCSI_DH_EMC=m | 383 | CONFIG_SCSI_DH_EMC=m |
diff --git a/arch/s390/include/asm/numa.h b/arch/s390/include/asm/numa.h index 2a0efc63b9e5..dc19ee0c92aa 100644 --- a/arch/s390/include/asm/numa.h +++ b/arch/s390/include/asm/numa.h | |||
| @@ -19,7 +19,7 @@ int numa_pfn_to_nid(unsigned long pfn); | |||
| 19 | int __node_distance(int a, int b); | 19 | int __node_distance(int a, int b); |
| 20 | void numa_update_cpu_topology(void); | 20 | void numa_update_cpu_topology(void); |
| 21 | 21 | ||
| 22 | extern cpumask_var_t node_to_cpumask_map[MAX_NUMNODES]; | 22 | extern cpumask_t node_to_cpumask_map[MAX_NUMNODES]; |
| 23 | extern int numa_debug_enabled; | 23 | extern int numa_debug_enabled; |
| 24 | 24 | ||
| 25 | #else | 25 | #else |
diff --git a/arch/s390/include/asm/topology.h b/arch/s390/include/asm/topology.h index 27ebde643933..94fc55fc72ce 100644 --- a/arch/s390/include/asm/topology.h +++ b/arch/s390/include/asm/topology.h | |||
| @@ -68,7 +68,7 @@ static inline int cpu_to_node(int cpu) | |||
| 68 | #define cpumask_of_node cpumask_of_node | 68 | #define cpumask_of_node cpumask_of_node |
| 69 | static inline const struct cpumask *cpumask_of_node(int node) | 69 | static inline const struct cpumask *cpumask_of_node(int node) |
| 70 | { | 70 | { |
| 71 | return node_to_cpumask_map[node]; | 71 | return &node_to_cpumask_map[node]; |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | /* | 74 | /* |
diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c index 48c9af7a7683..3aeeb1b562c0 100644 --- a/arch/s390/kernel/asm-offsets.c +++ b/arch/s390/kernel/asm-offsets.c | |||
| @@ -176,6 +176,7 @@ int main(void) | |||
| 176 | DEFINE(__LC_PASTE, offsetof(struct _lowcore, paste)); | 176 | DEFINE(__LC_PASTE, offsetof(struct _lowcore, paste)); |
| 177 | DEFINE(__LC_FP_CREG_SAVE_AREA, offsetof(struct _lowcore, fpt_creg_save_area)); | 177 | DEFINE(__LC_FP_CREG_SAVE_AREA, offsetof(struct _lowcore, fpt_creg_save_area)); |
| 178 | DEFINE(__LC_LAST_BREAK, offsetof(struct _lowcore, breaking_event_addr)); | 178 | DEFINE(__LC_LAST_BREAK, offsetof(struct _lowcore, breaking_event_addr)); |
| 179 | DEFINE(__LC_PERCPU_OFFSET, offsetof(struct _lowcore, percpu_offset)); | ||
| 179 | DEFINE(__LC_VDSO_PER_CPU, offsetof(struct _lowcore, vdso_per_cpu_data)); | 180 | DEFINE(__LC_VDSO_PER_CPU, offsetof(struct _lowcore, vdso_per_cpu_data)); |
| 180 | DEFINE(__LC_GMAP, offsetof(struct _lowcore, gmap)); | 181 | DEFINE(__LC_GMAP, offsetof(struct _lowcore, gmap)); |
| 181 | DEFINE(__LC_PGM_TDB, offsetof(struct _lowcore, pgm_tdb)); | 182 | DEFINE(__LC_PGM_TDB, offsetof(struct _lowcore, pgm_tdb)); |
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 09b039d7983d..582fe44ab07c 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S | |||
| @@ -733,6 +733,14 @@ ENTRY(psw_idle) | |||
| 733 | stg %r3,__SF_EMPTY(%r15) | 733 | stg %r3,__SF_EMPTY(%r15) |
| 734 | larl %r1,.Lpsw_idle_lpsw+4 | 734 | larl %r1,.Lpsw_idle_lpsw+4 |
| 735 | stg %r1,__SF_EMPTY+8(%r15) | 735 | stg %r1,__SF_EMPTY+8(%r15) |
| 736 | #ifdef CONFIG_SMP | ||
| 737 | larl %r1,smp_cpu_mtid | ||
| 738 | llgf %r1,0(%r1) | ||
| 739 | ltgr %r1,%r1 | ||
| 740 | jz .Lpsw_idle_stcctm | ||
| 741 | .insn rsy,0xeb0000000017,%r1,5,__SF_EMPTY+16(%r15) | ||
| 742 | .Lpsw_idle_stcctm: | ||
| 743 | #endif | ||
| 736 | STCK __CLOCK_IDLE_ENTER(%r2) | 744 | STCK __CLOCK_IDLE_ENTER(%r2) |
| 737 | stpt __TIMER_IDLE_ENTER(%r2) | 745 | stpt __TIMER_IDLE_ENTER(%r2) |
| 738 | .Lpsw_idle_lpsw: | 746 | .Lpsw_idle_lpsw: |
| @@ -1159,7 +1167,27 @@ cleanup_critical: | |||
| 1159 | jhe 1f | 1167 | jhe 1f |
| 1160 | mvc __CLOCK_IDLE_ENTER(8,%r2),__CLOCK_IDLE_EXIT(%r2) | 1168 | mvc __CLOCK_IDLE_ENTER(8,%r2),__CLOCK_IDLE_EXIT(%r2) |
| 1161 | mvc __TIMER_IDLE_ENTER(8,%r2),__TIMER_IDLE_EXIT(%r2) | 1169 | mvc __TIMER_IDLE_ENTER(8,%r2),__TIMER_IDLE_EXIT(%r2) |
| 1162 | 1: # account system time going idle | 1170 | 1: # calculate idle cycles |
| 1171 | #ifdef CONFIG_SMP | ||
| 1172 | clg %r9,BASED(.Lcleanup_idle_insn) | ||
| 1173 | jl 3f | ||
| 1174 | larl %r1,smp_cpu_mtid | ||
| 1175 | llgf %r1,0(%r1) | ||
| 1176 | ltgr %r1,%r1 | ||
| 1177 | jz 3f | ||
| 1178 | .insn rsy,0xeb0000000017,%r1,5,__SF_EMPTY+80(%r15) | ||
| 1179 | larl %r3,mt_cycles | ||
| 1180 | ag %r3,__LC_PERCPU_OFFSET | ||
| 1181 | la %r4,__SF_EMPTY+16(%r15) | ||
| 1182 | 2: lg %r0,0(%r3) | ||
| 1183 | slg %r0,0(%r4) | ||
| 1184 | alg %r0,64(%r4) | ||
| 1185 | stg %r0,0(%r3) | ||
| 1186 | la %r3,8(%r3) | ||
| 1187 | la %r4,8(%r4) | ||
| 1188 | brct %r1,2b | ||
| 1189 | #endif | ||
| 1190 | 3: # account system time going idle | ||
| 1163 | lg %r9,__LC_STEAL_TIMER | 1191 | lg %r9,__LC_STEAL_TIMER |
| 1164 | alg %r9,__CLOCK_IDLE_ENTER(%r2) | 1192 | alg %r9,__CLOCK_IDLE_ENTER(%r2) |
| 1165 | slg %r9,__LC_LAST_UPDATE_CLOCK | 1193 | slg %r9,__LC_LAST_UPDATE_CLOCK |
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index c8653435c70d..dafc44f519c3 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
| @@ -25,7 +25,7 @@ static DEFINE_SPINLOCK(virt_timer_lock); | |||
| 25 | static atomic64_t virt_timer_current; | 25 | static atomic64_t virt_timer_current; |
| 26 | static atomic64_t virt_timer_elapsed; | 26 | static atomic64_t virt_timer_elapsed; |
| 27 | 27 | ||
| 28 | static DEFINE_PER_CPU(u64, mt_cycles[32]); | 28 | DEFINE_PER_CPU(u64, mt_cycles[8]); |
| 29 | static DEFINE_PER_CPU(u64, mt_scaling_mult) = { 1 }; | 29 | static DEFINE_PER_CPU(u64, mt_scaling_mult) = { 1 }; |
| 30 | static DEFINE_PER_CPU(u64, mt_scaling_div) = { 1 }; | 30 | static DEFINE_PER_CPU(u64, mt_scaling_div) = { 1 }; |
| 31 | static DEFINE_PER_CPU(u64, mt_scaling_jiffies); | 31 | static DEFINE_PER_CPU(u64, mt_scaling_jiffies); |
| @@ -60,6 +60,34 @@ static inline int virt_timer_forward(u64 elapsed) | |||
| 60 | return elapsed >= atomic64_read(&virt_timer_current); | 60 | return elapsed >= atomic64_read(&virt_timer_current); |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | static void update_mt_scaling(void) | ||
| 64 | { | ||
| 65 | u64 cycles_new[8], *cycles_old; | ||
| 66 | u64 delta, fac, mult, div; | ||
| 67 | int i; | ||
| 68 | |||
| 69 | stcctm5(smp_cpu_mtid + 1, cycles_new); | ||
| 70 | cycles_old = this_cpu_ptr(mt_cycles); | ||
| 71 | fac = 1; | ||
| 72 | mult = div = 0; | ||
| 73 | for (i = 0; i <= smp_cpu_mtid; i++) { | ||
| 74 | delta = cycles_new[i] - cycles_old[i]; | ||
| 75 | div += delta; | ||
| 76 | mult *= i + 1; | ||
| 77 | mult += delta * fac; | ||
| 78 | fac *= i + 1; | ||
| 79 | } | ||
| 80 | div *= fac; | ||
| 81 | if (div > 0) { | ||
| 82 | /* Update scaling factor */ | ||
| 83 | __this_cpu_write(mt_scaling_mult, mult); | ||
| 84 | __this_cpu_write(mt_scaling_div, div); | ||
| 85 | memcpy(cycles_old, cycles_new, | ||
| 86 | sizeof(u64) * (smp_cpu_mtid + 1)); | ||
| 87 | } | ||
| 88 | __this_cpu_write(mt_scaling_jiffies, jiffies_64); | ||
| 89 | } | ||
| 90 | |||
| 63 | /* | 91 | /* |
| 64 | * Update process times based on virtual cpu times stored by entry.S | 92 | * Update process times based on virtual cpu times stored by entry.S |
| 65 | * to the lowcore fields user_timer, system_timer & steal_clock. | 93 | * to the lowcore fields user_timer, system_timer & steal_clock. |
| @@ -69,7 +97,6 @@ static int do_account_vtime(struct task_struct *tsk, int hardirq_offset) | |||
| 69 | struct thread_info *ti = task_thread_info(tsk); | 97 | struct thread_info *ti = task_thread_info(tsk); |
| 70 | u64 timer, clock, user, system, steal; | 98 | u64 timer, clock, user, system, steal; |
| 71 | u64 user_scaled, system_scaled; | 99 | u64 user_scaled, system_scaled; |
| 72 | int i; | ||
| 73 | 100 | ||
| 74 | timer = S390_lowcore.last_update_timer; | 101 | timer = S390_lowcore.last_update_timer; |
| 75 | clock = S390_lowcore.last_update_clock; | 102 | clock = S390_lowcore.last_update_clock; |
| @@ -85,34 +112,10 @@ static int do_account_vtime(struct task_struct *tsk, int hardirq_offset) | |||
| 85 | S390_lowcore.system_timer += timer - S390_lowcore.last_update_timer; | 112 | S390_lowcore.system_timer += timer - S390_lowcore.last_update_timer; |
| 86 | S390_lowcore.steal_timer += S390_lowcore.last_update_clock - clock; | 113 | S390_lowcore.steal_timer += S390_lowcore.last_update_clock - clock; |
| 87 | 114 | ||
| 88 | /* Do MT utilization calculation */ | 115 | /* Update MT utilization calculation */ |
| 89 | if (smp_cpu_mtid && | 116 | if (smp_cpu_mtid && |
| 90 | time_after64(jiffies_64, __this_cpu_read(mt_scaling_jiffies))) { | 117 | time_after64(jiffies_64, this_cpu_read(mt_scaling_jiffies))) |
| 91 | u64 cycles_new[32], *cycles_old; | 118 | update_mt_scaling(); |
| 92 | u64 delta, fac, mult, div; | ||
| 93 | |||
| 94 | cycles_old = this_cpu_ptr(mt_cycles); | ||
| 95 | if (stcctm5(smp_cpu_mtid + 1, cycles_new) < 2) { | ||
| 96 | fac = 1; | ||
| 97 | mult = div = 0; | ||
| 98 | for (i = 0; i <= smp_cpu_mtid; i++) { | ||
| 99 | delta = cycles_new[i] - cycles_old[i]; | ||
| 100 | div += delta; | ||
| 101 | mult *= i + 1; | ||
| 102 | mult += delta * fac; | ||
| 103 | fac *= i + 1; | ||
| 104 | } | ||
| 105 | div *= fac; | ||
| 106 | if (div > 0) { | ||
| 107 | /* Update scaling factor */ | ||
| 108 | __this_cpu_write(mt_scaling_mult, mult); | ||
| 109 | __this_cpu_write(mt_scaling_div, div); | ||
| 110 | memcpy(cycles_old, cycles_new, | ||
| 111 | sizeof(u64) * (smp_cpu_mtid + 1)); | ||
| 112 | } | ||
| 113 | } | ||
| 114 | __this_cpu_write(mt_scaling_jiffies, jiffies_64); | ||
| 115 | } | ||
| 116 | 119 | ||
| 117 | user = S390_lowcore.user_timer - ti->user_timer; | 120 | user = S390_lowcore.user_timer - ti->user_timer; |
| 118 | S390_lowcore.steal_timer -= user; | 121 | S390_lowcore.steal_timer -= user; |
| @@ -181,6 +184,11 @@ void vtime_account_irq_enter(struct task_struct *tsk) | |||
| 181 | S390_lowcore.last_update_timer = get_vtimer(); | 184 | S390_lowcore.last_update_timer = get_vtimer(); |
| 182 | S390_lowcore.system_timer += timer - S390_lowcore.last_update_timer; | 185 | S390_lowcore.system_timer += timer - S390_lowcore.last_update_timer; |
| 183 | 186 | ||
| 187 | /* Update MT utilization calculation */ | ||
| 188 | if (smp_cpu_mtid && | ||
| 189 | time_after64(jiffies_64, this_cpu_read(mt_scaling_jiffies))) | ||
| 190 | update_mt_scaling(); | ||
| 191 | |||
| 184 | system = S390_lowcore.system_timer - ti->system_timer; | 192 | system = S390_lowcore.system_timer - ti->system_timer; |
| 185 | S390_lowcore.steal_timer -= system; | 193 | S390_lowcore.steal_timer -= system; |
| 186 | ti->system_timer = S390_lowcore.system_timer; | 194 | ti->system_timer = S390_lowcore.system_timer; |
diff --git a/arch/s390/numa/mode_emu.c b/arch/s390/numa/mode_emu.c index 7de4e2f780d7..30b2698a28e2 100644 --- a/arch/s390/numa/mode_emu.c +++ b/arch/s390/numa/mode_emu.c | |||
| @@ -368,7 +368,7 @@ static void topology_add_core(struct toptree *core) | |||
| 368 | cpumask_copy(&top->thread_mask, &core->mask); | 368 | cpumask_copy(&top->thread_mask, &core->mask); |
| 369 | cpumask_copy(&top->core_mask, &core_mc(core)->mask); | 369 | cpumask_copy(&top->core_mask, &core_mc(core)->mask); |
| 370 | cpumask_copy(&top->book_mask, &core_book(core)->mask); | 370 | cpumask_copy(&top->book_mask, &core_book(core)->mask); |
| 371 | cpumask_set_cpu(cpu, node_to_cpumask_map[core_node(core)->id]); | 371 | cpumask_set_cpu(cpu, &node_to_cpumask_map[core_node(core)->id]); |
| 372 | top->node_id = core_node(core)->id; | 372 | top->node_id = core_node(core)->id; |
| 373 | } | 373 | } |
| 374 | } | 374 | } |
| @@ -383,7 +383,7 @@ static void toptree_to_topology(struct toptree *numa) | |||
| 383 | 383 | ||
| 384 | /* Clear all node masks */ | 384 | /* Clear all node masks */ |
| 385 | for (i = 0; i < MAX_NUMNODES; i++) | 385 | for (i = 0; i < MAX_NUMNODES; i++) |
| 386 | cpumask_clear(node_to_cpumask_map[i]); | 386 | cpumask_clear(&node_to_cpumask_map[i]); |
| 387 | 387 | ||
| 388 | /* Rebuild all masks */ | 388 | /* Rebuild all masks */ |
| 389 | toptree_for_each(core, numa, CORE) | 389 | toptree_for_each(core, numa, CORE) |
diff --git a/arch/s390/numa/numa.c b/arch/s390/numa/numa.c index 09b1d2355bd9..43f32ce60aa3 100644 --- a/arch/s390/numa/numa.c +++ b/arch/s390/numa/numa.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | pg_data_t *node_data[MAX_NUMNODES]; | 23 | pg_data_t *node_data[MAX_NUMNODES]; |
| 24 | EXPORT_SYMBOL(node_data); | 24 | EXPORT_SYMBOL(node_data); |
| 25 | 25 | ||
| 26 | cpumask_var_t node_to_cpumask_map[MAX_NUMNODES]; | 26 | cpumask_t node_to_cpumask_map[MAX_NUMNODES]; |
| 27 | EXPORT_SYMBOL(node_to_cpumask_map); | 27 | EXPORT_SYMBOL(node_to_cpumask_map); |
| 28 | 28 | ||
| 29 | const struct numa_mode numa_mode_plain = { | 29 | const struct numa_mode numa_mode_plain = { |
| @@ -144,7 +144,7 @@ void __init numa_setup(void) | |||
| 144 | static int __init numa_init_early(void) | 144 | static int __init numa_init_early(void) |
| 145 | { | 145 | { |
| 146 | /* Attach all possible CPUs to node 0 for now. */ | 146 | /* Attach all possible CPUs to node 0 for now. */ |
| 147 | cpumask_copy(node_to_cpumask_map[0], cpu_possible_mask); | 147 | cpumask_copy(&node_to_cpumask_map[0], cpu_possible_mask); |
| 148 | return 0; | 148 | return 0; |
| 149 | } | 149 | } |
| 150 | early_initcall(numa_init_early); | 150 | early_initcall(numa_init_early); |
