1 /* 2 * arch/s390/kernel/smp.c 3 * 4 * Copyright IBM Corp. 1999,2007 5 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), 6 * Martin Schwidefsky (schwidefsky@de.ibm.com) 7 * Heiko Carstens (heiko.carstens@de.ibm.com) 8 * 9 * based on other smp stuff by 10 * (c) 1995 Alan Cox, CymruNET Ltd <alan@cymru.net> 11 * (c) 1998 Ingo Molnar 12 * 13 * We work with logical cpu numbering everywhere we can. The only 14 * functions using the real cpu address (got from STAP) are the sigp 15 * functions. For all other functions we use the identity mapping. 16 * That means that cpu_number_map[i] == i for every cpu. cpu_number_map is 17 * used e.g. to find the idle task belonging to a logical cpu. Every array 18 * in the kernel is sorted by the logical cpu number and not by the physical 19 * one which is causing all the confusion with __cpu_logical_map and 20 * cpu_number_map in other architectures. 21 */ 22 23 #include <linux/module.h> 24 #include <linux/init.h> 25 #include <linux/mm.h> 26 #include <linux/err.h> 27 #include <linux/spinlock.h> 28 #include <linux/kernel_stat.h> 29 #include <linux/delay.h> 30 #include <linux/cache.h> 31 #include <linux/interrupt.h> 32 #include <linux/cpu.h> 33 #include <linux/timex.h> 34 #include <linux/bootmem.h> 35 #include <asm/ipl.h> 36 #include <asm/setup.h> 37 #include <asm/sigp.h> 38 #include <asm/pgalloc.h> 39 #include <asm/irq.h> 40 #include <asm/s390_ext.h> 41 #include <asm/cpcmd.h> 42 #include <asm/tlbflush.h> 43 #include <asm/timer.h> 44 #include <asm/lowcore.h> 45 #include <asm/sclp.h> 46 #include <asm/cpu.h> 47 #include "entry.h" 48 49 /* 50 * An array with a pointer the lowcore of every CPU. 51 */ 52 struct _lowcore *lowcore_ptr[NR_CPUS]; 53 EXPORT_SYMBOL(lowcore_ptr); 54 55 cpumask_t cpu_online_map = CPU_MASK_NONE; 56 EXPORT_SYMBOL(cpu_online_map); 57 58 cpumask_t cpu_possible_map = CPU_MASK_ALL; 59 EXPORT_SYMBOL(cpu_possible_map); 60 61 static struct task_struct *current_set[NR_CPUS]; 62 63 static u8 smp_cpu_type; 64 static int smp_use_sigp_detection; 65 66 enum s390_cpu_state { 67 CPU_STATE_STANDBY, 68 CPU_STATE_CONFIGURED, 69 }; 70 71 DEFINE_MUTEX(smp_cpu_state_mutex); 72 int smp_cpu_polarization[NR_CPUS]; 73 static int smp_cpu_state[NR_CPUS]; 74 static int cpu_management; 75 76 static DEFINE_PER_CPU(struct cpu, cpu_devices); 77 78 static void smp_ext_bitcall(int, ec_bit_sig); 79 80 /* 81 * Structure and data for __smp_call_function_map(). This is designed to 82 * minimise static memory requirements. It also looks cleaner. 83 */ 84 static DEFINE_SPINLOCK(call_lock); 85 86 struct call_data_struct { 87 void (*func) (void *info); 88 void *info; 89 cpumask_t started; 90 cpumask_t finished; 91 int wait; 92 }; 93 94 static struct call_data_struct *call_data; 95 96 /* 97 * 'Call function' interrupt callback 98 */ 99 static void do_call_function(void) 100 { 101 void (*func) (void *info) = call_data->func; 102 void *info = call_data->info; 103 int wait = call_data->wait; 104 105 cpu_set(smp_processor_id(), call_data->started); 106 (*func)(info); 107 if (wait) 108 cpu_set(smp_processor_id(), call_data->finished);; 109 } 110 111 static void __smp_call_function_map(void (*func) (void *info), void *info, 112 int nonatomic, int wait, cpumask_t map) 113 { 114 struct call_data_struct data; 115 int cpu, local = 0; 116 117 /* 118 * Can deadlock when interrupts are disabled or if in wrong context. 119 */ 120 WARN_ON(irqs_disabled() || in_irq()); 121 122 /* 123 * Check for local function call. We have to have the same call order 124 * as in on_each_cpu() because of machine_restart_smp(). 125 */ 126 if (cpu_isset(smp_processor_id(), map)) { 127 local = 1; 128 cpu_clear(smp_processor_id(), map); 129 } 130 131 cpus_and(map, map, cpu_online_map); 132 if (cpus_empty(map)) 133 goto out; 134 135 data.func = func; 136 data.info = info; 137 data.started = CPU_MASK_NONE; 138 data.wait = wait; 139 if (wait) 140 data.finished = CPU_MASK_NONE; 141 142 spin_lock(&call_lock); 143 call_data = &data; 144 145 for_each_cpu_mask(cpu, map) 146 smp_ext_bitcall(cpu, ec_call_function); 147 148 /* Wait for response */ 149 while (!cpus_equal(map, data.started)) 150 cpu_relax(); 151 if (wait) 152 while (!cpus_equal(map, data.finished)) 153 cpu_relax(); 154 spin_unlock(&call_lock); 155 out: 156 if (local) { 157 local_irq_disable(); 158 func(info); 159 local_irq_enable(); 160 } 161 } 162 163 /* 164 * smp_call_function: 165 * @func: the function to run; this must be fast and non-blocking 166 * @info: an arbitrary pointer to pass to the function 167 * @nonatomic: unused 168 * @wait: if true, wait (atomically) until function has completed on other CPUs 169 * 170 * Run a function on all other CPUs. 171 * 172 * You must not call this function with disabled interrupts, from a 173 * hardware interrupt handler or from a bottom half. 174 */ 175 int smp_call_function(void (*func) (void *info), void *info, int nonatomic, 176 int wait) 177 { 178 cpumask_t map; 179 180 preempt_disable(); 181 map = cpu_online_map; 182 cpu_clear(smp_processor_id(), map); 183 __smp_call_function_map(func, info, nonatomic, wait, map); 184 preempt_enable(); 185 return 0; 186 } 187 EXPORT_SYMBOL(smp_call_function); 188 189 /* 190 * smp_call_function_single: 191 * @cpu: the CPU where func should run 192 * @func: the function to run; this must be fast and non-blocking 193 * @info: an arbitrary pointer to pass to the function 194 * @nonatomic: unused 195 * @wait: if true, wait (atomically) until function has completed on other CPUs 196 * 197 * Run a function on one processor. 198 * 199 * You must not call this function with disabled interrupts, from a 200 * hardware interrupt handler or from a bottom half. 201 */ 202 int smp_call_function_single(int cpu, void (*func) (void *info), void *info, 203 int nonatomic, int wait) 204 { 205 preempt_disable(); 206 __smp_call_function_map(func, info, nonatomic, wait, 207 cpumask_of_cpu(cpu)); 208 preempt_enable(); 209 return 0; 210 } 211 EXPORT_SYMBOL(smp_call_function_single); 212 213 /** 214 * smp_call_function_mask(): Run a function on a set of other CPUs. 215 * @mask: The set of cpus to run on. Must not include the current cpu. 216 * @func: The function to run. This must be fast and non-blocking. 217 * @info: An arbitrary pointer to pass to the function. 218 * @wait: If true, wait (atomically) until function has completed on other CPUs. 219 * 220 * Returns 0 on success, else a negative status code. 221 * 222 * If @wait is true, then returns once @func has returned; otherwise 223 * it returns just before the target cpu calls @func. 224 * 225 * You must not call this function with disabled interrupts or from a 226 * hardware interrupt handler or from a bottom half handler. 227 */ 228 int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info, 229 int wait) 230 { 231 preempt_disable(); 232 cpu_clear(smp_processor_id(), mask); 233 __smp_call_function_map(func, info, 0, wait, mask); 234 preempt_enable(); 235 return 0; 236 } 237 EXPORT_SYMBOL(smp_call_function_mask); 238 239 void smp_send_stop(void) 240 { 241 int cpu, rc; 242 243 /* Disable all interrupts/machine checks */ 244 __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK); 245 246 /* write magic number to zero page (absolute 0) */ 247 lowcore_ptr[smp_processor_id()]->panic_magic = __PANIC_MAGIC; 248 249 /* stop all processors */ 250 for_each_online_cpu(cpu) { 251 if (cpu == smp_processor_id()) 252 continue; 253 do { 254 rc = signal_processor(cpu, sigp_stop); 255 } while (rc == sigp_busy); 256 257 while (!smp_cpu_not_running(cpu)) 258 cpu_relax(); 259 } 260 } 261 262 /* 263 * This is the main routine where commands issued by other 264 * cpus are handled. 265 */ 266 267 static void do_ext_call_interrupt(__u16 code) 268 { 269 unsigned long bits; 270 271 /* 272 * handle bit signal external calls 273 * 274 * For the ec_schedule signal we have to do nothing. All the work 275 * is done automatically when we return from the interrupt. 276 */ 277 bits = xchg(&S390_lowcore.ext_call_fast, 0); 278 279 if (test_bit(ec_call_function, &bits)) 280 do_call_function(); 281 } 282 283 /* 284 * Send an external call sigp to another cpu and return without waiting 285 * for its completion. 286 */ 287 static void smp_ext_bitcall(int cpu, ec_bit_sig sig) 288 { 289 /* 290 * Set signaling bit in lowcore of target cpu and kick it 291 */ 292 set_bit(sig, (unsigned long *) &lowcore_ptr[cpu]->ext_call_fast); 293 while (signal_processor(cpu, sigp_emergency_signal) == sigp_busy) 294 udelay(10); 295 } 296 297 #ifndef CONFIG_64BIT 298 /* 299 * this function sends a 'purge tlb' signal to another CPU. 300 */ 301 static void smp_ptlb_callback(void *info) 302 { 303 __tlb_flush_local(); 304 } 305 306 void smp_ptlb_all(void) 307 { 308 on_each_cpu(smp_ptlb_callback, NULL, 0, 1); 309 } 310 EXPORT_SYMBOL(smp_ptlb_all); 311 #endif /* ! CONFIG_64BIT */ 312 313 /* 314 * this function sends a 'reschedule' IPI to another CPU. 315 * it goes straight through and wastes no time serializing 316 * anything. Worst case is that we lose a reschedule ... 317 */ 318 void smp_send_reschedule(int cpu) 319 { 320 smp_ext_bitcall(cpu, ec_schedule); 321 } 322 323 /* 324 * parameter area for the set/clear control bit callbacks 325 */ 326 struct ec_creg_mask_parms { 327 unsigned long orvals[16]; 328 unsigned long andvals[16]; 329 }; 330 331 /* 332 * callback for setting/clearing control bits 333 */ 334 static void smp_ctl_bit_callback(void *info) 335 { 336 struct ec_creg_mask_parms *pp = info; 337 unsigned long cregs[16]; 338 int i; 339 340 __ctl_store(cregs, 0, 15); 341 for (i = 0; i <= 15; i++) 342 cregs[i] = (cregs[i] & pp->andvals[i]) | pp->orvals[i]; 343 __ctl_load(cregs, 0, 15); 344 } 345 346 /* 347 * Set a bit in a control register of all cpus 348 */ 349 void smp_ctl_set_bit(int cr, int bit) 350 { 351 struct ec_creg_mask_parms parms; 352 353 memset(&parms.orvals, 0, sizeof(parms.orvals)); 354 memset(&parms.andvals, 0xff, sizeof(parms.andvals)); 355 parms.orvals[cr] = 1 << bit; 356 on_each_cpu(smp_ctl_bit_callback, &parms, 0, 1); 357 } 358 EXPORT_SYMBOL(smp_ctl_set_bit); 359 360 /* 361 * Clear a bit in a control register of all cpus 362 */ 363 void smp_ctl_clear_bit(int cr, int bit) 364 { 365 struct ec_creg_mask_parms parms; 366 367 memset(&parms.orvals, 0, sizeof(parms.orvals)); 368 memset(&parms.andvals, 0xff, sizeof(parms.andvals)); 369 parms.andvals[cr] = ~(1L << bit); 370 on_each_cpu(smp_ctl_bit_callback, &parms, 0, 1); 371 } 372 EXPORT_SYMBOL(smp_ctl_clear_bit); 373 374 /* 375 * In early ipl state a temp. logically cpu number is needed, so the sigp 376 * functions can be used to sense other cpus. Since NR_CPUS is >= 2 on 377 * CONFIG_SMP and the ipl cpu is logical cpu 0, it must be 1. 378 */ 379 #define CPU_INIT_NO 1 380 381 #if defined(CONFIG_ZFCPDUMP) || defined(CONFIG_ZFCPDUMP_MODULE) 382 383 /* 384 * zfcpdump_prefix_array holds prefix registers for the following scenario: 385 * 64 bit zfcpdump kernel and 31 bit kernel which is to be dumped. We have to 386 * save its prefix registers, since they get lost, when switching from 31 bit 387 * to 64 bit. 388 */ 389 unsigned int zfcpdump_prefix_array[NR_CPUS + 1] \ 390 __attribute__((__section__(".data"))); 391 392 static void __init smp_get_save_area(unsigned int cpu, unsigned int phy_cpu) 393 { 394 if (ipl_info.type != IPL_TYPE_FCP_DUMP) 395 return; 396 if (cpu >= NR_CPUS) { 397 printk(KERN_WARNING "Registers for cpu %i not saved since dump " 398 "kernel was compiled with NR_CPUS=%i\n", cpu, NR_CPUS); 399 return; 400 } 401 zfcpdump_save_areas[cpu] = kmalloc(sizeof(union save_area), GFP_KERNEL); 402 __cpu_logical_map[CPU_INIT_NO] = (__u16) phy_cpu; 403 while (signal_processor(CPU_INIT_NO, sigp_stop_and_store_status) == 404 sigp_busy) 405 cpu_relax(); 406 memcpy(zfcpdump_save_areas[cpu], 407 (void *)(unsigned long) store_prefix() + SAVE_AREA_BASE, 408 SAVE_AREA_SIZE); 409 #ifdef CONFIG_64BIT 410 /* copy original prefix register */ 411 zfcpdump_save_areas[cpu]->s390x.pref_reg = zfcpdump_prefix_array[cpu]; 412 #endif 413 } 414 415 union save_area *zfcpdump_save_areas[NR_CPUS + 1]; 416 EXPORT_SYMBOL_GPL(zfcpdump_save_areas); 417 418 #else 419 420 static inline void smp_get_save_area(unsigned int cpu, unsigned int phy_cpu) { } 421 422 #endif /* CONFIG_ZFCPDUMP || CONFIG_ZFCPDUMP_MODULE */ 423 424 static int cpu_stopped(int cpu) 425 { 426 __u32 status; 427 428 /* Check for stopped state */ 429 if (signal_processor_ps(&status, 0, cpu, sigp_sense) == 430 sigp_status_stored) { 431 if (status & 0x40) 432 return 1; 433 } 434 return 0; 435 } 436 437 static int cpu_known(int cpu_id) 438 { 439 int cpu; 440 441 for_each_present_cpu(cpu) { 442 if (__cpu_logical_map[cpu] == cpu_id) 443 return 1; 444 } 445 return 0; 446 } 447 448 static int smp_rescan_cpus_sigp(cpumask_t avail) 449 { 450 int cpu_id, logical_cpu; 451 452 logical_cpu = first_cpu(avail); 453 if (logical_cpu == NR_CPUS) 454 return 0; 455 for (cpu_id = 0; cpu_id <= 65535; cpu_id++) { 456 if (cpu_known(cpu_id)) 457 continue; 458 __cpu_logical_map[logical_cpu] = cpu_id; 459 smp_cpu_polarization[logical_cpu] = POLARIZATION_UNKNWN; 460 if (!cpu_stopped(logical_cpu)) 461 continue; 462 cpu_set(logical_cpu, cpu_present_map); 463 smp_cpu_state[logical_cpu] = CPU_STATE_CONFIGURED; 464 logical_cpu = next_cpu(logical_cpu, avail); 465 if (logical_cpu == NR_CPUS) 466 break; 467 } 468 return 0; 469 } 470 471 static int smp_rescan_cpus_sclp(cpumask_t avail) 472 { 473 struct sclp_cpu_info *info; 474 int cpu_id, logical_cpu, cpu; 475 int rc; 476 477 logical_cpu = first_cpu(avail); 478 if (logical_cpu == NR_CPUS) 479 return 0; 480 info = kmalloc(sizeof(*info), GFP_KERNEL); 481 if (!info) 482 return -ENOMEM; 483 rc = sclp_get_cpu_info(info); 484 if (rc) 485 goto out; 486 for (cpu = 0; cpu < info->combined; cpu++) { 487 if (info->has_cpu_type && info->cpu[cpu].type != smp_cpu_type) 488 continue; 489 cpu_id = info->cpu[cpu].address; 490 if (cpu_known(cpu_id)) 491 continue; 492 __cpu_logical_map[logical_cpu] = cpu_id; 493 smp_cpu_polarization[logical_cpu] = POLARIZATION_UNKNWN; 494 cpu_set(logical_cpu, cpu_present_map); 495 if (cpu >= info->configured) 496 smp_cpu_state[logical_cpu] = CPU_STATE_STANDBY; 497 else 498 smp_cpu_state[logical_cpu] = CPU_STATE_CONFIGURED; 499 logical_cpu = next_cpu(logical_cpu, avail); 500 if (logical_cpu == NR_CPUS) 501 break; 502 } 503 out: 504 kfree(info); 505 return rc; 506 } 507 508 static int smp_rescan_cpus(void) 509 { 510 cpumask_t avail; 511 512 cpus_xor(avail, cpu_possible_map, cpu_present_map); 513 if (smp_use_sigp_detection) 514 return smp_rescan_cpus_sigp(avail); 515 else 516 return smp_rescan_cpus_sclp(avail); 517 } 518 519 static void __init smp_detect_cpus(void) 520 { 521 unsigned int cpu, c_cpus, s_cpus; 522 struct sclp_cpu_info *info; 523 u16 boot_cpu_addr, cpu_addr; 524 525 c_cpus = 1; 526 s_cpus = 0; 527 boot_cpu_addr = S390_lowcore.cpu_data.cpu_addr; 528 info = kmalloc(sizeof(*info), GFP_KERNEL); 529 if (!info) 530 panic("smp_detect_cpus failed to allocate memory\n"); 531 /* Use sigp detection algorithm if sclp doesn't work. */ 532 if (sclp_get_cpu_info(info)) { 533 smp_use_sigp_detection = 1; 534 for (cpu = 0; cpu <= 65535; cpu++) { 535 if (cpu == boot_cpu_addr) 536 continue; 537 __cpu_logical_map[CPU_INIT_NO] = cpu; 538 if (!cpu_stopped(CPU_INIT_NO)) 539 continue; 540 smp_get_save_area(c_cpus, cpu); 541 c_cpus++; 542 } 543 goto out; 544 } 545 546 if (info->has_cpu_type) { 547 for (cpu = 0; cpu < info->combined; cpu++) { 548 if (info->cpu[cpu].address == boot_cpu_addr) { 549 smp_cpu_type = info->cpu[cpu].type; 550 break; 551 } 552 } 553 } 554 555 for (cpu = 0; cpu < info->combined; cpu++) { 556 if (info->has_cpu_type && info->cpu[cpu].type != smp_cpu_type) 557 continue; 558 cpu_addr = info->cpu[cpu].address; 559 if (cpu_addr == boot_cpu_addr) 560 continue; 561 __cpu_logical_map[CPU_INIT_NO] = cpu_addr; 562 if (!cpu_stopped(CPU_INIT_NO)) { 563 s_cpus++; 564 continue; 565 } 566 smp_get_save_area(c_cpus, cpu_addr); 567 c_cpus++; 568 } 569 out: 570 kfree(info); 571 printk(KERN_INFO "CPUs: %d configured, %d standby\n", c_cpus, s_cpus); 572 get_online_cpus(); 573 smp_rescan_cpus(); 574 put_online_cpus(); 575 } 576 577 /* 578 * Activate a secondary processor. 579 */ 580 int __cpuinit start_secondary(void *cpuvoid) 581 { 582 /* Setup the cpu */ 583 cpu_init(); 584 preempt_disable(); 585 /* Enable TOD clock interrupts on the secondary cpu. */ 586 init_cpu_timer(); 587 #ifdef CONFIG_VIRT_TIMER 588 /* Enable cpu timer interrupts on the secondary cpu. */ 589 init_cpu_vtimer(); 590 #endif 591 /* Enable pfault pseudo page faults on this cpu. */ 592 pfault_init(); 593 594 /* Mark this cpu as online */ 595 cpu_set(smp_processor_id(), cpu_online_map); 596 /* Switch on interrupts */ 597 local_irq_enable(); 598 /* Print info about this processor */ 599 print_cpu_info(&S390_lowcore.cpu_data); 600 /* cpu_idle will call schedule for us */ 601 cpu_idle(); 602 return 0; 603 } 604 605 static void __init smp_create_idle(unsigned int cpu) 606 { 607 struct task_struct *p; 608 609 /* 610 * don't care about the psw and regs settings since we'll never 611 * reschedule the forked task. 612 */ 613 p = fork_idle(cpu); 614 if (IS_ERR(p)) 615 panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p)); 616 current_set[cpu] = p; 617 spin_lock_init(&(&per_cpu(s390_idle, cpu))->lock); 618 } 619 620 static int __cpuinit smp_alloc_lowcore(int cpu) 621 { 622 unsigned long async_stack, panic_stack; 623 struct _lowcore *lowcore; 624 int lc_order; 625 626 lc_order = sizeof(long) == 8 ? 1 : 0; 627 lowcore = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, lc_order); 628 if (!lowcore) 629 return -ENOMEM; 630 async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER); 631 panic_stack = __get_free_page(GFP_KERNEL); 632 if (!panic_stack || !async_stack) 633 goto out; 634 memcpy(lowcore, &S390_lowcore, 512); 635 memset((char *)lowcore + 512, 0, sizeof(*lowcore) - 512); 636 lowcore->async_stack = async_stack + ASYNC_SIZE; 637 lowcore->panic_stack = panic_stack + PAGE_SIZE; 638 639 #ifndef CONFIG_64BIT 640 if (MACHINE_HAS_IEEE) { 641 unsigned long save_area; 642 643 save_area = get_zeroed_page(GFP_KERNEL); 644 if (!save_area) 645 goto out_save_area; 646 lowcore->extended_save_area_addr = (u32) save_area; 647 } 648 #endif 649 lowcore_ptr[cpu] = lowcore; 650 return 0; 651 652 #ifndef CONFIG_64BIT 653 out_save_area: 654 free_page(panic_stack); 655 #endif 656 out: 657 free_pages(async_stack, ASYNC_ORDER); 658 free_pages((unsigned long) lowcore, lc_order); 659 return -ENOMEM; 660 } 661 662 #ifdef CONFIG_HOTPLUG_CPU 663 static void smp_free_lowcore(int cpu) 664 { 665 struct _lowcore *lowcore; 666 int lc_order; 667 668 lc_order = sizeof(long) == 8 ? 1 : 0; 669 lowcore = lowcore_ptr[cpu]; 670 #ifndef CONFIG_64BIT 671 if (MACHINE_HAS_IEEE) 672 free_page((unsigned long) lowcore->extended_save_area_addr); 673 #endif 674 free_page(lowcore->panic_stack - PAGE_SIZE); 675 free_pages(lowcore->async_stack - ASYNC_SIZE, ASYNC_ORDER); 676 free_pages((unsigned long) lowcore, lc_order); 677 lowcore_ptr[cpu] = NULL; 678 } 679 #endif /* CONFIG_HOTPLUG_CPU */ 680 681 /* Upping and downing of CPUs */ 682 int __cpuinit __cpu_up(unsigned int cpu) 683 { 684 struct task_struct *idle; 685 struct _lowcore *cpu_lowcore; 686 struct stack_frame *sf; 687 sigp_ccode ccode; 688 689 if (smp_cpu_state[cpu] != CPU_STATE_CONFIGURED) 690 return -EIO; 691 if (smp_alloc_lowcore(cpu)) 692 return -ENOMEM; 693 694 ccode = signal_processor_p((__u32)(unsigned long)(lowcore_ptr[cpu]), 695 cpu, sigp_set_prefix); 696 if (ccode) { 697 printk("sigp_set_prefix failed for cpu %d " 698 "with condition code %d\n", 699 (int) cpu, (int) ccode); 700 return -EIO; 701 } 702 703 idle = current_set[cpu]; 704 cpu_lowcore = lowcore_ptr[cpu]; 705 cpu_lowcore->kernel_stack = (unsigned long) 706 task_stack_page(idle) + THREAD_SIZE; 707 cpu_lowcore->thread_info = (unsigned long) task_thread_info(idle); 708 sf = (struct stack_frame *) (cpu_lowcore->kernel_stack 709 - sizeof(struct pt_regs) 710 - sizeof(struct stack_frame)); 711 memset(sf, 0, sizeof(struct stack_frame)); 712 sf->gprs[9] = (unsigned long) sf; 713 cpu_lowcore->save_area[15] = (unsigned long) sf; 714 __ctl_store(cpu_lowcore->cregs_save_area[0], 0, 15); 715 asm volatile( 716 " stam 0,15,0(%0)" 717 : : "a" (&cpu_lowcore->access_regs_save_area) : "memory"); 718 cpu_lowcore->percpu_offset = __per_cpu_offset[cpu]; 719 cpu_lowcore->current_task = (unsigned long) idle; 720 cpu_lowcore->cpu_data.cpu_nr = cpu; 721 cpu_lowcore->kernel_asce = S390_lowcore.kernel_asce; 722 cpu_lowcore->ipl_device = S390_lowcore.ipl_device; 723 eieio(); 724 725 while (signal_processor(cpu, sigp_restart) == sigp_busy) 726 udelay(10); 727 728 while (!cpu_online(cpu)) 729 cpu_relax(); 730 return 0; 731 } 732 733 static int __init setup_possible_cpus(char *s) 734 { 735 int pcpus, cpu; 736 737 pcpus = simple_strtoul(s, NULL, 0); 738 cpu_possible_map = cpumask_of_cpu(0); 739 for (cpu = 1; cpu < pcpus && cpu < NR_CPUS; cpu++) 740 cpu_set(cpu, cpu_possible_map); 741 return 0; 742 } 743 early_param("possible_cpus", setup_possible_cpus); 744 745 #ifdef CONFIG_HOTPLUG_CPU 746 747 int __cpu_disable(void) 748 { 749 struct ec_creg_mask_parms cr_parms; 750 int cpu = smp_processor_id(); 751 752 cpu_clear(cpu, cpu_online_map); 753 754 /* Disable pfault pseudo page faults on this cpu. */ 755 pfault_fini(); 756 757 memset(&cr_parms.orvals, 0, sizeof(cr_parms.orvals)); 758 memset(&cr_parms.andvals, 0xff, sizeof(cr_parms.andvals)); 759 760 /* disable all external interrupts */ 761 cr_parms.orvals[0] = 0; 762 cr_parms.andvals[0] = ~(1 << 15 | 1 << 14 | 1 << 13 | 1 << 12 | 763 1 << 11 | 1 << 10 | 1 << 6 | 1 << 4); 764 /* disable all I/O interrupts */ 765 cr_parms.orvals[6] = 0; 766 cr_parms.andvals[6] = ~(1 << 31 | 1 << 30 | 1 << 29 | 1 << 28 | 767 1 << 27 | 1 << 26 | 1 << 25 | 1 << 24); 768 /* disable most machine checks */ 769 cr_parms.orvals[14] = 0; 770 cr_parms.andvals[14] = ~(1 << 28 | 1 << 27 | 1 << 26 | 771 1 << 25 | 1 << 24); 772 773 smp_ctl_bit_callback(&cr_parms); 774 775 return 0; 776 } 777 778 void __cpu_die(unsigned int cpu) 779 { 780 /* Wait until target cpu is down */ 781 while (!smp_cpu_not_running(cpu)) 782 cpu_relax(); 783 smp_free_lowcore(cpu); 784 printk(KERN_INFO "Processor %d spun down\n", cpu); 785 } 786 787 void cpu_die(void) 788 { 789 idle_task_exit(); 790 signal_processor(smp_processor_id(), sigp_stop); 791 BUG(); 792 for (;;); 793 } 794 795 #endif /* CONFIG_HOTPLUG_CPU */ 796 797 void __init smp_prepare_cpus(unsigned int max_cpus) 798 { 799 #ifndef CONFIG_64BIT 800 unsigned long save_area = 0; 801 #endif 802 unsigned long async_stack, panic_stack; 803 struct _lowcore *lowcore; 804 unsigned int cpu; 805 int lc_order; 806 807 smp_detect_cpus(); 808 809 /* request the 0x1201 emergency signal external interrupt */ 810 if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0) 811 panic("Couldn't request external interrupt 0x1201"); 812 print_cpu_info(&S390_lowcore.cpu_data); 813 814 /* Reallocate current lowcore, but keep its contents. */ 815 lc_order = sizeof(long) == 8 ? 1 : 0; 816 lowcore = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, lc_order); 817 panic_stack = __get_free_page(GFP_KERNEL); 818 async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER); 819 #ifndef CONFIG_64BIT 820 if (MACHINE_HAS_IEEE) 821 save_area = get_zeroed_page(GFP_KERNEL); 822 #endif 823 local_irq_disable(); 824 local_mcck_disable(); 825 lowcore_ptr[smp_processor_id()] = lowcore; 826 *lowcore = S390_lowcore; 827 lowcore->panic_stack = panic_stack + PAGE_SIZE; 828 lowcore->async_stack = async_stack + ASYNC_SIZE; 829 #ifndef CONFIG_64BIT 830 if (MACHINE_HAS_IEEE) 831 lowcore->extended_save_area_addr = (u32) save_area; 832 #endif 833 set_prefix((u32)(unsigned long) lowcore); 834 local_mcck_enable(); 835 local_irq_enable(); 836 for_each_possible_cpu(cpu) 837 if (cpu != smp_processor_id()) 838 smp_create_idle(cpu); 839 } 840 841 void __init smp_prepare_boot_cpu(void) 842 { 843 BUG_ON(smp_processor_id() != 0); 844 845 current_thread_info()->cpu = 0; 846 cpu_set(0, cpu_present_map); 847 cpu_set(0, cpu_online_map); 848 S390_lowcore.percpu_offset = __per_cpu_offset[0]; 849 current_set[0] = current; 850 smp_cpu_state[0] = CPU_STATE_CONFIGURED; 851 smp_cpu_polarization[0] = POLARIZATION_UNKNWN; 852 spin_lock_init(&(&__get_cpu_var(s390_idle))->lock); 853 } 854 855 void __init smp_cpus_done(unsigned int max_cpus) 856 { 857 } 858 859 /* 860 * the frequency of the profiling timer can be changed 861 * by writing a multiplier value into /proc/profile. 862 * 863 * usually you want to run this on all CPUs ;) 864 */ 865 int setup_profiling_timer(unsigned int multiplier) 866 { 867 return 0; 868 } 869 870 #ifdef CONFIG_HOTPLUG_CPU 871 static ssize_t cpu_configure_show(struct sys_device *dev, char *buf) 872 { 873 ssize_t count; 874 875 mutex_lock(&smp_cpu_state_mutex); 876 count = sprintf(buf, "%d\n", smp_cpu_state[dev->id]); 877 mutex_unlock(&smp_cpu_state_mutex); 878 return count; 879 } 880 881 static ssize_t cpu_configure_store(struct sys_device *dev, const char *buf, 882 size_t count) 883 { 884 int cpu = dev->id; 885 int val, rc; 886 char delim; 887 888 if (sscanf(buf, "%d %c", &val, &delim) != 1) 889 return -EINVAL; 890 if (val != 0 && val != 1) 891 return -EINVAL; 892 893 mutex_lock(&smp_cpu_state_mutex); 894 get_online_cpus(); 895 rc = -EBUSY; 896 if (cpu_online(cpu)) 897 goto out; 898 rc = 0; 899 switch (val) { 900 case 0: 901 if (smp_cpu_state[cpu] == CPU_STATE_CONFIGURED) { 902 rc = sclp_cpu_deconfigure(__cpu_logical_map[cpu]); 903 if (!rc) { 904 smp_cpu_state[cpu] = CPU_STATE_STANDBY; 905 smp_cpu_polarization[cpu] = POLARIZATION_UNKNWN; 906 } 907 } 908 break; 909 case 1: 910 if (smp_cpu_state[cpu] == CPU_STATE_STANDBY) { 911 rc = sclp_cpu_configure(__cpu_logical_map[cpu]); 912 if (!rc) { 913 smp_cpu_state[cpu] = CPU_STATE_CONFIGURED; 914 smp_cpu_polarization[cpu] = POLARIZATION_UNKNWN; 915 } 916 } 917 break; 918 default: 919 break; 920 } 921 out: 922 put_online_cpus(); 923 mutex_unlock(&smp_cpu_state_mutex); 924 return rc ? rc : count; 925 } 926 static SYSDEV_ATTR(configure, 0644, cpu_configure_show, cpu_configure_store); 927 #endif /* CONFIG_HOTPLUG_CPU */ 928 929 static ssize_t cpu_polarization_show(struct sys_device *dev, char *buf) 930 { 931 int cpu = dev->id; 932 ssize_t count; 933 934 mutex_lock(&smp_cpu_state_mutex); 935 switch (smp_cpu_polarization[cpu]) { 936 case POLARIZATION_HRZ: 937 count = sprintf(buf, "horizontal\n"); 938 break; 939 case POLARIZATION_VL: 940 count = sprintf(buf, "vertical:low\n"); 941 break; 942 case POLARIZATION_VM: 943 count = sprintf(buf, "vertical:medium\n"); 944 break; 945 case POLARIZATION_VH: 946 count = sprintf(buf, "vertical:high\n"); 947 break; 948 default: 949 count = sprintf(buf, "unknown\n"); 950 break; 951 } 952 mutex_unlock(&smp_cpu_state_mutex); 953 return count; 954 } 955 static SYSDEV_ATTR(polarization, 0444, cpu_polarization_show, NULL); 956 957 static ssize_t show_cpu_address(struct sys_device *dev, char *buf) 958 { 959 return sprintf(buf, "%d\n", __cpu_logical_map[dev->id]); 960 } 961 static SYSDEV_ATTR(address, 0444, show_cpu_address, NULL); 962 963 964 static struct attribute *cpu_common_attrs[] = { 965 #ifdef CONFIG_HOTPLUG_CPU 966 &attr_configure.attr, 967 #endif 968 &attr_address.attr, 969 &attr_polarization.attr, 970 NULL, 971 }; 972 973 static struct attribute_group cpu_common_attr_group = { 974 .attrs = cpu_common_attrs, 975 }; 976 977 static ssize_t show_capability(struct sys_device *dev, char *buf) 978 { 979 unsigned int capability; 980 int rc; 981 982 rc = get_cpu_capability(&capability); 983 if (rc) 984 return rc; 985 return sprintf(buf, "%u\n", capability); 986 } 987 static SYSDEV_ATTR(capability, 0444, show_capability, NULL); 988 989 static ssize_t show_idle_count(struct sys_device *dev, char *buf) 990 { 991 struct s390_idle_data *idle; 992 unsigned long long idle_count; 993 994 idle = &per_cpu(s390_idle, dev->id); 995 spin_lock_irq(&idle->lock); 996 idle_count = idle->idle_count; 997 spin_unlock_irq(&idle->lock); 998 return sprintf(buf, "%llu\n", idle_count); 999 } 1000 static SYSDEV_ATTR(idle_count, 0444, show_idle_count, NULL); 1001 1002 static ssize_t show_idle_time(struct sys_device *dev, char *buf) 1003 { 1004 struct s390_idle_data *idle; 1005 unsigned long long new_time; 1006 1007 idle = &per_cpu(s390_idle, dev->id); 1008 spin_lock_irq(&idle->lock); 1009 if (idle->in_idle) { 1010 new_time = get_clock(); 1011 idle->idle_time += new_time - idle->idle_enter; 1012 idle->idle_enter = new_time; 1013 } 1014 new_time = idle->idle_time; 1015 spin_unlock_irq(&idle->lock); 1016 return sprintf(buf, "%llu\n", new_time >> 12); 1017 } 1018 static SYSDEV_ATTR(idle_time_us, 0444, show_idle_time, NULL); 1019 1020 static struct attribute *cpu_online_attrs[] = { 1021 &attr_capability.attr, 1022 &attr_idle_count.attr, 1023 &attr_idle_time_us.attr, 1024 NULL, 1025 }; 1026 1027 static struct attribute_group cpu_online_attr_group = { 1028 .attrs = cpu_online_attrs, 1029 }; 1030 1031 static int __cpuinit smp_cpu_notify(struct notifier_block *self, 1032 unsigned long action, void *hcpu) 1033 { 1034 unsigned int cpu = (unsigned int)(long)hcpu; 1035 struct cpu *c = &per_cpu(cpu_devices, cpu); 1036 struct sys_device *s = &c->sysdev; 1037 struct s390_idle_data *idle; 1038 1039 switch (action) { 1040 case CPU_ONLINE: 1041 case CPU_ONLINE_FROZEN: 1042 idle = &per_cpu(s390_idle, cpu); 1043 spin_lock_irq(&idle->lock); 1044 idle->idle_enter = 0; 1045 idle->idle_time = 0; 1046 idle->idle_count = 0; 1047 spin_unlock_irq(&idle->lock); 1048 if (sysfs_create_group(&s->kobj, &cpu_online_attr_group)) 1049 return NOTIFY_BAD; 1050 break; 1051 case CPU_DEAD: 1052 case CPU_DEAD_FROZEN: 1053 sysfs_remove_group(&s->kobj, &cpu_online_attr_group); 1054 break; 1055 } 1056 return NOTIFY_OK; 1057 } 1058 1059 static struct notifier_block __cpuinitdata smp_cpu_nb = { 1060 .notifier_call = smp_cpu_notify, 1061 }; 1062 1063 static int __devinit smp_add_present_cpu(int cpu) 1064 { 1065 struct cpu *c = &per_cpu(cpu_devices, cpu); 1066 struct sys_device *s = &c->sysdev; 1067 int rc; 1068 1069 c->hotpluggable = 1; 1070 rc = register_cpu(c, cpu); 1071 if (rc) 1072 goto out; 1073 rc = sysfs_create_group(&s->kobj, &cpu_common_attr_group); 1074 if (rc) 1075 goto out_cpu; 1076 if (!cpu_online(cpu)) 1077 goto out; 1078 rc = sysfs_create_group(&s->kobj, &cpu_online_attr_group); 1079 if (!rc) 1080 return 0; 1081 sysfs_remove_group(&s->kobj, &cpu_common_attr_group); 1082 out_cpu: 1083 #ifdef CONFIG_HOTPLUG_CPU 1084 unregister_cpu(c); 1085 #endif 1086 out: 1087 return rc; 1088 } 1089 1090 #ifdef CONFIG_HOTPLUG_CPU 1091 static ssize_t __ref rescan_store(struct sys_device *dev, 1092 const char *buf, size_t count) 1093 { 1094 cpumask_t newcpus; 1095 int cpu; 1096 int rc; 1097 1098 mutex_lock(&smp_cpu_state_mutex); 1099 get_online_cpus(); 1100 newcpus = cpu_present_map; 1101 rc = smp_rescan_cpus(); 1102 if (rc) 1103 goto out; 1104 cpus_andnot(newcpus, cpu_present_map, newcpus); 1105 for_each_cpu_mask(cpu, newcpus) { 1106 rc = smp_add_present_cpu(cpu); 1107 if (rc) 1108 cpu_clear(cpu, cpu_present_map); 1109 } 1110 rc = 0; 1111 out: 1112 put_online_cpus(); 1113 mutex_unlock(&smp_cpu_state_mutex); 1114 if (!cpus_empty(newcpus)) 1115 topology_schedule_update(); 1116 return rc ? rc : count; 1117 } 1118 static SYSDEV_ATTR(rescan, 0200, NULL, rescan_store); 1119 #endif /* CONFIG_HOTPLUG_CPU */ 1120 1121 static ssize_t dispatching_show(struct sys_device *dev, char *buf) 1122 { 1123 ssize_t count; 1124 1125 mutex_lock(&smp_cpu_state_mutex); 1126 count = sprintf(buf, "%d\n", cpu_management); 1127 mutex_unlock(&smp_cpu_state_mutex); 1128 return count; 1129 } 1130 1131 static ssize_t dispatching_store(struct sys_device *dev, const char *buf, 1132 size_t count) 1133 { 1134 int val, rc; 1135 char delim; 1136 1137 if (sscanf(buf, "%d %c", &val, &delim) != 1) 1138 return -EINVAL; 1139 if (val != 0 && val != 1) 1140 return -EINVAL; 1141 rc = 0; 1142 mutex_lock(&smp_cpu_state_mutex); 1143 get_online_cpus(); 1144 if (cpu_management == val) 1145 goto out; 1146 rc = topology_set_cpu_management(val); 1147 if (!rc) 1148 cpu_management = val; 1149 out: 1150 put_online_cpus(); 1151 mutex_unlock(&smp_cpu_state_mutex); 1152 return rc ? rc : count; 1153 } 1154 static SYSDEV_ATTR(dispatching, 0644, dispatching_show, dispatching_store); 1155 1156 static int __init topology_init(void) 1157 { 1158 int cpu; 1159 int rc; 1160 1161 register_cpu_notifier(&smp_cpu_nb); 1162 1163 #ifdef CONFIG_HOTPLUG_CPU 1164 rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj, 1165 &attr_rescan.attr); 1166 if (rc) 1167 return rc; 1168 #endif 1169 rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj, 1170 &attr_dispatching.attr); 1171 if (rc) 1172 return rc; 1173 for_each_present_cpu(cpu) { 1174 rc = smp_add_present_cpu(cpu); 1175 if (rc) 1176 return rc; 1177 } 1178 return 0; 1179 } 1180 subsys_initcall(topology_init); 1181