Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 fixes from Martin Schwidefsky:
"Two patches to save some memory if CONFIG_NR_CPUS is large, a changed
default for the use of compare-and-delay, and a couple of bug fixes"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
s390/spinlock: disabled compare-and-delay by default
s390/mm: align 64-bit PIE binaries to 4GB
s390/cacheinfo: coding style changes
s390/cacheinfo: fix shared cpu masks
s390/smp: reduce size of struct pcpu
s390/topology: convert cpu_topology array to per cpu variable
s390/topology: delay initialization of topology cpu masks
s390/vdso: fix clock_gettime for CLOCK_THREAD_CPUTIME_ID, -2 and -3

+119 -142
+8 -16
arch/s390/include/asm/topology.h
··· 18 18 cpumask_t book_mask; 19 19 }; 20 20 21 - extern struct cpu_topology_s390 cpu_topology[NR_CPUS]; 21 + DECLARE_PER_CPU(struct cpu_topology_s390, cpu_topology); 22 22 23 - #define topology_physical_package_id(cpu) (cpu_topology[cpu].socket_id) 24 - #define topology_thread_id(cpu) (cpu_topology[cpu].thread_id) 25 - #define topology_thread_cpumask(cpu) (&cpu_topology[cpu].thread_mask) 26 - #define topology_core_id(cpu) (cpu_topology[cpu].core_id) 27 - #define topology_core_cpumask(cpu) (&cpu_topology[cpu].core_mask) 28 - #define topology_book_id(cpu) (cpu_topology[cpu].book_id) 29 - #define topology_book_cpumask(cpu) (&cpu_topology[cpu].book_mask) 23 + #define topology_physical_package_id(cpu) (per_cpu(cpu_topology, cpu).socket_id) 24 + #define topology_thread_id(cpu) (per_cpu(cpu_topology, cpu).thread_id) 25 + #define topology_thread_cpumask(cpu) (&per_cpu(cpu_topology, cpu).thread_mask) 26 + #define topology_core_id(cpu) (per_cpu(cpu_topology, cpu).core_id) 27 + #define topology_core_cpumask(cpu) (&per_cpu(cpu_topology, cpu).core_mask) 28 + #define topology_book_id(cpu) (per_cpu(cpu_topology, cpu).book_id) 29 + #define topology_book_cpumask(cpu) (&per_cpu(cpu_topology, cpu).book_mask) 30 30 31 31 #define mc_capable() 1 32 32 ··· 50 50 #define POLARIZATION_VL (1) 51 51 #define POLARIZATION_VM (2) 52 52 #define POLARIZATION_VH (3) 53 - 54 - #ifdef CONFIG_SCHED_BOOK 55 - void s390_init_cpu_topology(void); 56 - #else 57 - static inline void s390_init_cpu_topology(void) 58 - { 59 - }; 60 - #endif 61 53 62 54 #include <asm-generic/topology.h> 63 55
+7 -18
arch/s390/kernel/cache.c
··· 91 91 { 92 92 if (level >= CACHE_MAX_LEVEL) 93 93 return CACHE_TYPE_NOCACHE; 94 - 95 94 ci += level; 96 - 97 95 if (ci->scope != CACHE_SCOPE_SHARED && ci->scope != CACHE_SCOPE_PRIVATE) 98 96 return CACHE_TYPE_NOCACHE; 99 - 100 97 return cache_type_map[ci->type]; 101 98 } 102 99 ··· 108 111 } 109 112 110 113 static void ci_leaf_init(struct cacheinfo *this_leaf, int private, 111 - enum cache_type type, unsigned int level) 114 + enum cache_type type, unsigned int level, int cpu) 112 115 { 113 116 int ti, num_sets; 114 - int cpu = smp_processor_id(); 115 117 116 118 if (type == CACHE_TYPE_INST) 117 119 ti = CACHE_TI_INSTRUCTION; 118 120 else 119 121 ti = CACHE_TI_UNIFIED; 120 - 121 122 this_leaf->level = level + 1; 122 123 this_leaf->type = type; 123 124 this_leaf->coherency_line_size = ecag(EXTRACT_LINE_SIZE, level, ti); 124 - this_leaf->ways_of_associativity = ecag(EXTRACT_ASSOCIATIVITY, 125 - level, ti); 125 + this_leaf->ways_of_associativity = ecag(EXTRACT_ASSOCIATIVITY, level, ti); 126 126 this_leaf->size = ecag(EXTRACT_SIZE, level, ti); 127 - 128 127 num_sets = this_leaf->size / this_leaf->coherency_line_size; 129 128 num_sets /= this_leaf->ways_of_associativity; 130 129 this_leaf->number_of_sets = num_sets; ··· 138 145 139 146 if (!this_cpu_ci) 140 147 return -EINVAL; 141 - 142 148 ct.raw = ecag(EXTRACT_TOPOLOGY, 0, 0); 143 149 do { 144 150 ctype = get_cache_type(&ct.ci[0], level); ··· 146 154 /* Separate instruction and data caches */ 147 155 leaves += (ctype == CACHE_TYPE_SEPARATE) ? 2 : 1; 148 156 } while (++level < CACHE_MAX_LEVEL); 149 - 150 157 this_cpu_ci->num_levels = level; 151 158 this_cpu_ci->num_leaves = leaves; 152 - 153 159 return 0; 154 160 } 155 161 156 162 int populate_cache_leaves(unsigned int cpu) 157 163 { 164 + struct cpu_cacheinfo *this_cpu_ci = get_cpu_cacheinfo(cpu); 165 + struct cacheinfo *this_leaf = this_cpu_ci->info_list; 158 166 unsigned int level, idx, pvt; 159 167 union cache_topology ct; 160 168 enum cache_type ctype; 161 - struct cpu_cacheinfo *this_cpu_ci = get_cpu_cacheinfo(cpu); 162 - struct cacheinfo *this_leaf = this_cpu_ci->info_list; 163 169 164 170 ct.raw = ecag(EXTRACT_TOPOLOGY, 0, 0); 165 171 for (idx = 0, level = 0; level < this_cpu_ci->num_levels && 166 172 idx < this_cpu_ci->num_leaves; idx++, level++) { 167 173 if (!this_leaf) 168 174 return -EINVAL; 169 - 170 175 pvt = (ct.ci[level].scope == CACHE_SCOPE_PRIVATE) ? 1 : 0; 171 176 ctype = get_cache_type(&ct.ci[0], level); 172 177 if (ctype == CACHE_TYPE_SEPARATE) { 173 - ci_leaf_init(this_leaf++, pvt, CACHE_TYPE_DATA, level); 174 - ci_leaf_init(this_leaf++, pvt, CACHE_TYPE_INST, level); 178 + ci_leaf_init(this_leaf++, pvt, CACHE_TYPE_DATA, level, cpu); 179 + ci_leaf_init(this_leaf++, pvt, CACHE_TYPE_INST, level, cpu); 175 180 } else { 176 - ci_leaf_init(this_leaf++, pvt, ctype, level); 181 + ci_leaf_init(this_leaf++, pvt, ctype, level, cpu); 177 182 } 178 183 } 179 184 return 0;
+7 -5
arch/s390/kernel/early.c
··· 393 393 S390_lowcore.machine_flags |= MACHINE_FLAG_TLB_LC; 394 394 if (test_facility(129)) 395 395 S390_lowcore.machine_flags |= MACHINE_FLAG_VX; 396 - if (test_facility(128)) 397 - S390_lowcore.machine_flags |= MACHINE_FLAG_CAD; 398 396 #endif 399 397 } 400 398 401 - static int __init nocad_setup(char *str) 399 + static int __init cad_setup(char *str) 402 400 { 403 - S390_lowcore.machine_flags &= ~MACHINE_FLAG_CAD; 401 + int val; 402 + 403 + get_option(&str, &val); 404 + if (val && test_facility(128)) 405 + S390_lowcore.machine_flags |= MACHINE_FLAG_CAD; 404 406 return 0; 405 407 } 406 - early_param("nocad", nocad_setup); 408 + early_param("cad", cad_setup); 407 409 408 410 static int __init cad_init(void) 409 411 {
-1
arch/s390/kernel/setup.c
··· 909 909 setup_lowcore(); 910 910 smp_fill_possible_mask(); 911 911 cpu_init(); 912 - s390_init_cpu_topology(); 913 912 914 913 /* 915 914 * Setup capabilities (ELF_HWCAP & ELF_PLATFORM).
+27 -27
arch/s390/kernel/smp.c
··· 59 59 CPU_STATE_CONFIGURED, 60 60 }; 61 61 62 + static DEFINE_PER_CPU(struct cpu *, cpu_device); 63 + 62 64 struct pcpu { 63 - struct cpu *cpu; 64 65 struct _lowcore *lowcore; /* lowcore page(s) for the cpu */ 65 - unsigned long async_stack; /* async stack for the cpu */ 66 - unsigned long panic_stack; /* panic stack for the cpu */ 67 66 unsigned long ec_mask; /* bit mask for ec_xxx functions */ 68 - int state; /* physical cpu state */ 69 - int polarization; /* physical polarization */ 67 + signed char state; /* physical cpu state */ 68 + signed char polarization; /* physical polarization */ 70 69 u16 address; /* physical cpu address */ 71 70 }; 72 71 ··· 172 173 pcpu_sigp_retry(pcpu, order, 0); 173 174 } 174 175 176 + #define ASYNC_FRAME_OFFSET (ASYNC_SIZE - STACK_FRAME_OVERHEAD - __PT_SIZE) 177 + #define PANIC_FRAME_OFFSET (PAGE_SIZE - STACK_FRAME_OVERHEAD - __PT_SIZE) 178 + 175 179 static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu) 176 180 { 181 + unsigned long async_stack, panic_stack; 177 182 struct _lowcore *lc; 178 183 179 184 if (pcpu != &pcpu_devices[0]) { 180 185 pcpu->lowcore = (struct _lowcore *) 181 186 __get_free_pages(GFP_KERNEL | GFP_DMA, LC_ORDER); 182 - pcpu->async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER); 183 - pcpu->panic_stack = __get_free_page(GFP_KERNEL); 184 - if (!pcpu->lowcore || !pcpu->panic_stack || !pcpu->async_stack) 187 + async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER); 188 + panic_stack = __get_free_page(GFP_KERNEL); 189 + if (!pcpu->lowcore || !panic_stack || !async_stack) 185 190 goto out; 191 + } else { 192 + async_stack = pcpu->lowcore->async_stack - ASYNC_FRAME_OFFSET; 193 + panic_stack = pcpu->lowcore->panic_stack - PANIC_FRAME_OFFSET; 186 194 } 187 195 lc = pcpu->lowcore; 188 196 memcpy(lc, &S390_lowcore, 512); 189 197 memset((char *) lc + 512, 0, sizeof(*lc) - 512); 190 - lc->async_stack = pcpu->async_stack + ASYNC_SIZE 191 - - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs); 192 - lc->panic_stack = pcpu->panic_stack + PAGE_SIZE 193 - - STACK_FRAME_OVERHEAD - sizeof(struct pt_regs); 198 + lc->async_stack = async_stack + ASYNC_FRAME_OFFSET; 199 + lc->panic_stack = panic_stack + PANIC_FRAME_OFFSET; 194 200 lc->cpu_nr = cpu; 195 201 lc->spinlock_lockval = arch_spin_lockval(cpu); 196 202 #ifndef CONFIG_64BIT ··· 216 212 return 0; 217 213 out: 218 214 if (pcpu != &pcpu_devices[0]) { 219 - free_page(pcpu->panic_stack); 220 - free_pages(pcpu->async_stack, ASYNC_ORDER); 215 + free_page(panic_stack); 216 + free_pages(async_stack, ASYNC_ORDER); 221 217 free_pages((unsigned long) pcpu->lowcore, LC_ORDER); 222 218 } 223 219 return -ENOMEM; ··· 239 235 #else 240 236 vdso_free_per_cpu(pcpu->lowcore); 241 237 #endif 242 - if (pcpu != &pcpu_devices[0]) { 243 - free_page(pcpu->panic_stack); 244 - free_pages(pcpu->async_stack, ASYNC_ORDER); 245 - free_pages((unsigned long) pcpu->lowcore, LC_ORDER); 246 - } 238 + if (pcpu == &pcpu_devices[0]) 239 + return; 240 + free_page(pcpu->lowcore->panic_stack-PANIC_FRAME_OFFSET); 241 + free_pages(pcpu->lowcore->async_stack-ASYNC_FRAME_OFFSET, ASYNC_ORDER); 242 + free_pages((unsigned long) pcpu->lowcore, LC_ORDER); 247 243 } 248 244 249 245 #endif /* CONFIG_HOTPLUG_CPU */ ··· 370 366 void smp_call_ipl_cpu(void (*func)(void *), void *data) 371 367 { 372 368 pcpu_delegate(&pcpu_devices[0], func, data, 373 - pcpu_devices->panic_stack + PAGE_SIZE); 369 + pcpu_devices->lowcore->panic_stack - 370 + PANIC_FRAME_OFFSET + PAGE_SIZE); 374 371 } 375 372 376 373 int smp_find_processor_id(u16 address) ··· 940 935 pcpu->state = CPU_STATE_CONFIGURED; 941 936 pcpu->address = stap(); 942 937 pcpu->lowcore = (struct _lowcore *)(unsigned long) store_prefix(); 943 - pcpu->async_stack = S390_lowcore.async_stack - ASYNC_SIZE 944 - + STACK_FRAME_OVERHEAD + sizeof(struct pt_regs); 945 - pcpu->panic_stack = S390_lowcore.panic_stack - PAGE_SIZE 946 - + STACK_FRAME_OVERHEAD + sizeof(struct pt_regs); 947 938 S390_lowcore.percpu_offset = __per_cpu_offset[0]; 948 939 smp_cpu_set_polarization(0, POLARIZATION_UNKNOWN); 949 940 set_cpu_present(0, true); ··· 1079 1078 void *hcpu) 1080 1079 { 1081 1080 unsigned int cpu = (unsigned int)(long)hcpu; 1082 - struct cpu *c = pcpu_devices[cpu].cpu; 1083 - struct device *s = &c->dev; 1081 + struct device *s = &per_cpu(cpu_device, cpu)->dev; 1084 1082 int err = 0; 1085 1083 1086 1084 switch (action & ~CPU_TASKS_FROZEN) { ··· 1102 1102 c = kzalloc(sizeof(*c), GFP_KERNEL); 1103 1103 if (!c) 1104 1104 return -ENOMEM; 1105 - pcpu_devices[cpu].cpu = c; 1105 + per_cpu(cpu_device, cpu) = c; 1106 1106 s = &c->dev; 1107 1107 c->hotpluggable = 1; 1108 1108 rc = register_cpu(c, cpu);
+64 -70
arch/s390/kernel/topology.c
··· 7 7 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt 8 8 9 9 #include <linux/workqueue.h> 10 - #include <linux/bootmem.h> 11 10 #include <linux/cpuset.h> 12 11 #include <linux/device.h> 13 12 #include <linux/export.h> 14 13 #include <linux/kernel.h> 15 14 #include <linux/sched.h> 16 - #include <linux/init.h> 17 15 #include <linux/delay.h> 16 + #include <linux/init.h> 17 + #include <linux/slab.h> 18 18 #include <linux/cpu.h> 19 19 #include <linux/smp.h> 20 20 #include <linux/mm.h> ··· 42 42 static struct mask_info socket_info; 43 43 static struct mask_info book_info; 44 44 45 - struct cpu_topology_s390 cpu_topology[NR_CPUS]; 46 - EXPORT_SYMBOL_GPL(cpu_topology); 45 + DEFINE_PER_CPU(struct cpu_topology_s390, cpu_topology); 46 + EXPORT_PER_CPU_SYMBOL_GPL(cpu_topology); 47 47 48 48 static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu) 49 49 { ··· 90 90 if (lcpu < 0) 91 91 continue; 92 92 for (i = 0; i <= smp_cpu_mtid; i++) { 93 - cpu_topology[lcpu + i].book_id = book->id; 94 - cpu_topology[lcpu + i].core_id = rcore; 95 - cpu_topology[lcpu + i].thread_id = lcpu + i; 93 + per_cpu(cpu_topology, lcpu + i).book_id = book->id; 94 + per_cpu(cpu_topology, lcpu + i).core_id = rcore; 95 + per_cpu(cpu_topology, lcpu + i).thread_id = lcpu + i; 96 96 cpumask_set_cpu(lcpu + i, &book->mask); 97 97 cpumask_set_cpu(lcpu + i, &socket->mask); 98 98 if (one_socket_per_cpu) 99 - cpu_topology[lcpu + i].socket_id = rcore; 99 + per_cpu(cpu_topology, lcpu + i).socket_id = rcore; 100 100 else 101 - cpu_topology[lcpu + i].socket_id = socket->id; 101 + per_cpu(cpu_topology, lcpu + i).socket_id = socket->id; 102 102 smp_cpu_set_polarization(lcpu + i, tl_core->pp); 103 103 } 104 104 if (one_socket_per_cpu) ··· 249 249 250 250 spin_lock_irqsave(&topology_lock, flags); 251 251 for_each_possible_cpu(cpu) { 252 - cpu_topology[cpu].thread_mask = cpu_thread_map(cpu); 253 - cpu_topology[cpu].core_mask = cpu_group_map(&socket_info, cpu); 254 - cpu_topology[cpu].book_mask = cpu_group_map(&book_info, cpu); 252 + per_cpu(cpu_topology, cpu).thread_mask = cpu_thread_map(cpu); 253 + per_cpu(cpu_topology, cpu).core_mask = cpu_group_map(&socket_info, cpu); 254 + per_cpu(cpu_topology, cpu).book_mask = cpu_group_map(&book_info, cpu); 255 255 if (!MACHINE_HAS_TOPOLOGY) { 256 - cpu_topology[cpu].thread_id = cpu; 257 - cpu_topology[cpu].core_id = cpu; 258 - cpu_topology[cpu].socket_id = cpu; 259 - cpu_topology[cpu].book_id = cpu; 256 + per_cpu(cpu_topology, cpu).thread_id = cpu; 257 + per_cpu(cpu_topology, cpu).core_id = cpu; 258 + per_cpu(cpu_topology, cpu).socket_id = cpu; 259 + per_cpu(cpu_topology, cpu).book_id = cpu; 260 260 } 261 261 } 262 262 spin_unlock_irqrestore(&topology_lock, flags); ··· 332 332 return; 333 333 atomic_add(60, &topology_poll); 334 334 set_topology_timer(); 335 - } 336 - 337 - static int __init early_parse_topology(char *p) 338 - { 339 - if (strncmp(p, "off", 3)) 340 - return 0; 341 - topology_enabled = 0; 342 - return 0; 343 - } 344 - early_param("topology", early_parse_topology); 345 - 346 - static void __init alloc_masks(struct sysinfo_15_1_x *info, 347 - struct mask_info *mask, int offset) 348 - { 349 - int i, nr_masks; 350 - 351 - nr_masks = info->mag[TOPOLOGY_NR_MAG - offset]; 352 - for (i = 0; i < info->mnest - offset; i++) 353 - nr_masks *= info->mag[TOPOLOGY_NR_MAG - offset - 1 - i]; 354 - nr_masks = max(nr_masks, 1); 355 - for (i = 0; i < nr_masks; i++) { 356 - mask->next = alloc_bootmem_align( 357 - roundup_pow_of_two(sizeof(struct mask_info)), 358 - roundup_pow_of_two(sizeof(struct mask_info))); 359 - mask = mask->next; 360 - } 361 - } 362 - 363 - void __init s390_init_cpu_topology(void) 364 - { 365 - struct sysinfo_15_1_x *info; 366 - int i; 367 - 368 - if (!MACHINE_HAS_TOPOLOGY) 369 - return; 370 - tl_info = alloc_bootmem_pages(PAGE_SIZE); 371 - info = tl_info; 372 - store_topology(info); 373 - pr_info("The CPU configuration topology of the machine is:"); 374 - for (i = 0; i < TOPOLOGY_NR_MAG; i++) 375 - printk(KERN_CONT " %d", info->mag[i]); 376 - printk(KERN_CONT " / %d\n", info->mnest); 377 - alloc_masks(info, &socket_info, 1); 378 - alloc_masks(info, &book_info, 2); 379 335 } 380 336 381 337 static int cpu_management; ··· 423 467 424 468 const struct cpumask *cpu_thread_mask(int cpu) 425 469 { 426 - return &cpu_topology[cpu].thread_mask; 470 + return &per_cpu(cpu_topology, cpu).thread_mask; 427 471 } 428 472 429 473 430 474 const struct cpumask *cpu_coregroup_mask(int cpu) 431 475 { 432 - return &cpu_topology[cpu].core_mask; 476 + return &per_cpu(cpu_topology, cpu).core_mask; 433 477 } 434 478 435 479 static const struct cpumask *cpu_book_mask(int cpu) 436 480 { 437 - return &cpu_topology[cpu].book_mask; 481 + return &per_cpu(cpu_topology, cpu).book_mask; 438 482 } 483 + 484 + static int __init early_parse_topology(char *p) 485 + { 486 + if (strncmp(p, "off", 3)) 487 + return 0; 488 + topology_enabled = 0; 489 + return 0; 490 + } 491 + early_param("topology", early_parse_topology); 439 492 440 493 static struct sched_domain_topology_level s390_topology[] = { 441 494 { cpu_thread_mask, cpu_smt_flags, SD_INIT_NAME(SMT) }, ··· 453 488 { cpu_cpu_mask, SD_INIT_NAME(DIE) }, 454 489 { NULL, }, 455 490 }; 491 + 492 + static void __init alloc_masks(struct sysinfo_15_1_x *info, 493 + struct mask_info *mask, int offset) 494 + { 495 + int i, nr_masks; 496 + 497 + nr_masks = info->mag[TOPOLOGY_NR_MAG - offset]; 498 + for (i = 0; i < info->mnest - offset; i++) 499 + nr_masks *= info->mag[TOPOLOGY_NR_MAG - offset - 1 - i]; 500 + nr_masks = max(nr_masks, 1); 501 + for (i = 0; i < nr_masks; i++) { 502 + mask->next = kzalloc(sizeof(*mask->next), GFP_KERNEL); 503 + mask = mask->next; 504 + } 505 + } 506 + 507 + static int __init s390_topology_init(void) 508 + { 509 + struct sysinfo_15_1_x *info; 510 + int i; 511 + 512 + if (!MACHINE_HAS_TOPOLOGY) 513 + return 0; 514 + tl_info = (struct sysinfo_15_1_x *)__get_free_page(GFP_KERNEL); 515 + info = tl_info; 516 + store_topology(info); 517 + pr_info("The CPU configuration topology of the machine is:"); 518 + for (i = 0; i < TOPOLOGY_NR_MAG; i++) 519 + printk(KERN_CONT " %d", info->mag[i]); 520 + printk(KERN_CONT " / %d\n", info->mnest); 521 + alloc_masks(info, &socket_info, 1); 522 + alloc_masks(info, &book_info, 2); 523 + set_sched_topology(s390_topology); 524 + return 0; 525 + } 526 + early_initcall(s390_topology_init); 456 527 457 528 static int __init topology_init(void) 458 529 { ··· 499 498 return device_create_file(cpu_subsys.dev_root, &dev_attr_dispatching); 500 499 } 501 500 device_initcall(topology_init); 502 - 503 - static int __init early_topology_init(void) 504 - { 505 - set_sched_topology(s390_topology); 506 - return 0; 507 - } 508 - early_initcall(early_topology_init);
+2 -4
arch/s390/kernel/vdso64/clock_gettime.S
··· 25 25 je 4f 26 26 cghi %r2,__CLOCK_REALTIME 27 27 je 5f 28 - cghi %r2,__CLOCK_THREAD_CPUTIME_ID 29 - je 9f 30 - cghi %r2,-2 /* Per-thread CPUCLOCK with PID=0, VIRT=1 */ 28 + cghi %r2,-3 /* Per-thread CPUCLOCK with PID=0, VIRT=1 */ 31 29 je 9f 32 30 cghi %r2,__CLOCK_MONOTONIC_COARSE 33 31 je 3f ··· 104 106 aghi %r15,16 105 107 br %r14 106 108 107 - /* CLOCK_THREAD_CPUTIME_ID for this thread */ 109 + /* CPUCLOCK_VIRT for this thread */ 108 110 9: icm %r0,15,__VDSO_ECTG_OK(%r5) 109 111 jz 12f 110 112 ear %r2,%a4
+4 -1
arch/s390/mm/mmap.c
··· 183 183 { 184 184 unsigned long base; 185 185 186 - base = (STACK_TOP / 3 * 2) & (~mmap_align_mask << PAGE_SHIFT); 186 + base = STACK_TOP / 3 * 2; 187 + if (!is_32bit_task()) 188 + /* Align to 4GB */ 189 + base &= ~((1UL << 32) - 1); 187 190 return base + mmap_rnd(); 188 191 } 189 192