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 48 /* 49 * An array with a pointer the lowcore of every CPU. 50 */ 51 struct _lowcore *lowcore_ptr[NR_CPUS]; 52 EXPORT_SYMBOL(lowcore_ptr); 53 54 cpumask_t cpu_online_map = CPU_MASK_NONE; 55 EXPORT_SYMBOL(cpu_online_map); 56 57 cpumask_t cpu_possible_map = CPU_MASK_ALL; 58 EXPORT_SYMBOL(cpu_possible_map); 59 60 static struct task_struct *current_set[NR_CPUS]; 61 62 static u8 smp_cpu_type; 63 static int smp_use_sigp_detection; 64 65 enum s390_cpu_state { 66 CPU_STATE_STANDBY, 67 CPU_STATE_CONFIGURED, 68 }; 69 70 #ifdef CONFIG_HOTPLUG_CPU 71 static DEFINE_MUTEX(smp_cpu_state_mutex); 72 #endif 73 static int smp_cpu_state[NR_CPUS]; 74 75 static DEFINE_PER_CPU(struct cpu, cpu_devices); 76 DEFINE_PER_CPU(struct s390_idle_data, s390_idle); 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 229 smp_call_function_mask(cpumask_t mask, 230 void (*func)(void *), void *info, 231 int wait) 232 { 233 preempt_disable(); 234 __smp_call_function_map(func, info, 0, wait, mask); 235 preempt_enable(); 236 return 0; 237 } 238 EXPORT_SYMBOL(smp_call_function_mask); 239 240 void smp_send_stop(void) 241 { 242 int cpu, rc; 243 244 /* Disable all interrupts/machine checks */ 245 __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK); 246 247 /* write magic number to zero page (absolute 0) */ 248 lowcore_ptr[smp_processor_id()]->panic_magic = __PANIC_MAGIC; 249 250 /* stop all processors */ 251 for_each_online_cpu(cpu) { 252 if (cpu == smp_processor_id()) 253 continue; 254 do { 255 rc = signal_processor(cpu, sigp_stop); 256 } while (rc == sigp_busy); 257 258 while (!smp_cpu_not_running(cpu)) 259 cpu_relax(); 260 } 261 } 262 263 /* 264 * This is the main routine where commands issued by other 265 * cpus are handled. 266 */ 267 268 static void do_ext_call_interrupt(__u16 code) 269 { 270 unsigned long bits; 271 272 /* 273 * handle bit signal external calls 274 * 275 * For the ec_schedule signal we have to do nothing. All the work 276 * is done automatically when we return from the interrupt. 277 */ 278 bits = xchg(&S390_lowcore.ext_call_fast, 0); 279 280 if (test_bit(ec_call_function, &bits)) 281 do_call_function(); 282 } 283 284 /* 285 * Send an external call sigp to another cpu and return without waiting 286 * for its completion. 287 */ 288 static void smp_ext_bitcall(int cpu, ec_bit_sig sig) 289 { 290 /* 291 * Set signaling bit in lowcore of target cpu and kick it 292 */ 293 set_bit(sig, (unsigned long *) &lowcore_ptr[cpu]->ext_call_fast); 294 while (signal_processor(cpu, sigp_emergency_signal) == sigp_busy) 295 udelay(10); 296 } 297 298 #ifndef CONFIG_64BIT 299 /* 300 * this function sends a 'purge tlb' signal to another CPU. 301 */ 302 void smp_ptlb_callback(void *info) 303 { 304 __tlb_flush_local(); 305 } 306 307 void smp_ptlb_all(void) 308 { 309 on_each_cpu(smp_ptlb_callback, NULL, 0, 1); 310 } 311 EXPORT_SYMBOL(smp_ptlb_all); 312 #endif /* ! CONFIG_64BIT */ 313 314 /* 315 * this function sends a 'reschedule' IPI to another CPU. 316 * it goes straight through and wastes no time serializing 317 * anything. Worst case is that we lose a reschedule ... 318 */ 319 void smp_send_reschedule(int cpu) 320 { 321 smp_ext_bitcall(cpu, ec_schedule); 322 } 323 324 /* 325 * parameter area for the set/clear control bit callbacks 326 */ 327 struct ec_creg_mask_parms { 328 unsigned long orvals[16]; 329 unsigned long andvals[16]; 330 }; 331 332 /* 333 * callback for setting/clearing control bits 334 */ 335 static void smp_ctl_bit_callback(void *info) 336 { 337 struct ec_creg_mask_parms *pp = info; 338 unsigned long cregs[16]; 339 int i; 340 341 __ctl_store(cregs, 0, 15); 342 for (i = 0; i <= 15; i++) 343 cregs[i] = (cregs[i] & pp->andvals[i]) | pp->orvals[i]; 344 __ctl_load(cregs, 0, 15); 345 } 346 347 /* 348 * Set a bit in a control register of all cpus 349 */ 350 void smp_ctl_set_bit(int cr, int bit) 351 { 352 struct ec_creg_mask_parms parms; 353 354 memset(&parms.orvals, 0, sizeof(parms.orvals)); 355 memset(&parms.andvals, 0xff, sizeof(parms.andvals)); 356 parms.orvals[cr] = 1 << bit; 357 on_each_cpu(smp_ctl_bit_callback, &parms, 0, 1); 358 } 359 EXPORT_SYMBOL(smp_ctl_set_bit); 360 361 /* 362 * Clear a bit in a control register of all cpus 363 */ 364 void smp_ctl_clear_bit(int cr, int bit) 365 { 366 struct ec_creg_mask_parms parms; 367 368 memset(&parms.orvals, 0, sizeof(parms.orvals)); 369 memset(&parms.andvals, 0xff, sizeof(parms.andvals)); 370 parms.andvals[cr] = ~(1L << bit); 371 on_each_cpu(smp_ctl_bit_callback, &parms, 0, 1); 372 } 373 EXPORT_SYMBOL(smp_ctl_clear_bit); 374 375 /* 376 * In early ipl state a temp. logically cpu number is needed, so the sigp 377 * functions can be used to sense other cpus. Since NR_CPUS is >= 2 on 378 * CONFIG_SMP and the ipl cpu is logical cpu 0, it must be 1. 379 */ 380 #define CPU_INIT_NO 1 381 382 #if defined(CONFIG_ZFCPDUMP) || defined(CONFIG_ZFCPDUMP_MODULE) 383 384 /* 385 * zfcpdump_prefix_array holds prefix registers for the following scenario: 386 * 64 bit zfcpdump kernel and 31 bit kernel which is to be dumped. We have to 387 * save its prefix registers, since they get lost, when switching from 31 bit 388 * to 64 bit. 389 */ 390 unsigned int zfcpdump_prefix_array[NR_CPUS + 1] \ 391 __attribute__((__section__(".data"))); 392 393 static void __init smp_get_save_area(unsigned int cpu, unsigned int phy_cpu) 394 { 395 if (ipl_info.type != IPL_TYPE_FCP_DUMP) 396 return; 397 if (cpu >= NR_CPUS) { 398 printk(KERN_WARNING "Registers for cpu %i not saved since dump " 399 "kernel was compiled with NR_CPUS=%i\n", cpu, NR_CPUS); 400 return; 401 } 402 zfcpdump_save_areas[cpu] = kmalloc(sizeof(union save_area), GFP_KERNEL); 403 __cpu_logical_map[CPU_INIT_NO] = (__u16) phy_cpu; 404 while (signal_processor(CPU_INIT_NO, sigp_stop_and_store_status) == 405 sigp_busy) 406 cpu_relax(); 407 memcpy(zfcpdump_save_areas[cpu], 408 (void *)(unsigned long) store_prefix() + SAVE_AREA_BASE, 409 SAVE_AREA_SIZE); 410 #ifdef CONFIG_64BIT 411 /* copy original prefix register */ 412 zfcpdump_save_areas[cpu]->s390x.pref_reg = zfcpdump_prefix_array[cpu]; 413 #endif 414 } 415 416 union save_area *zfcpdump_save_areas[NR_CPUS + 1]; 417 EXPORT_SYMBOL_GPL(zfcpdump_save_areas); 418 419 #else 420 421 static inline void smp_get_save_area(unsigned int cpu, unsigned int phy_cpu) { } 422 423 #endif /* CONFIG_ZFCPDUMP || CONFIG_ZFCPDUMP_MODULE */ 424 425 static int cpu_stopped(int cpu) 426 { 427 __u32 status; 428 429 /* Check for stopped state */ 430 if (signal_processor_ps(&status, 0, cpu, sigp_sense) == 431 sigp_status_stored) { 432 if (status & 0x40) 433 return 1; 434 } 435 return 0; 436 } 437 438 static int cpu_known(int cpu_id) 439 { 440 int cpu; 441 442 for_each_present_cpu(cpu) { 443 if (__cpu_logical_map[cpu] == cpu_id) 444 return 1; 445 } 446 return 0; 447 } 448 449 static int smp_rescan_cpus_sigp(cpumask_t avail) 450 { 451 int cpu_id, logical_cpu; 452 453 logical_cpu = first_cpu(avail); 454 if (logical_cpu == NR_CPUS) 455 return 0; 456 for (cpu_id = 0; cpu_id <= 65535; cpu_id++) { 457 if (cpu_known(cpu_id)) 458 continue; 459 __cpu_logical_map[logical_cpu] = cpu_id; 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 cpu_set(logical_cpu, cpu_present_map); 494 if (cpu >= info->configured) 495 smp_cpu_state[logical_cpu] = CPU_STATE_STANDBY; 496 else 497 smp_cpu_state[logical_cpu] = CPU_STATE_CONFIGURED; 498 logical_cpu = next_cpu(logical_cpu, avail); 499 if (logical_cpu == NR_CPUS) 500 break; 501 } 502 out: 503 kfree(info); 504 return rc; 505 } 506 507 static int smp_rescan_cpus(void) 508 { 509 cpumask_t avail; 510 511 cpus_xor(avail, cpu_possible_map, cpu_present_map); 512 if (smp_use_sigp_detection) 513 return smp_rescan_cpus_sigp(avail); 514 else 515 return smp_rescan_cpus_sclp(avail); 516 } 517 518 static void __init smp_detect_cpus(void) 519 { 520 unsigned int cpu, c_cpus, s_cpus; 521 struct sclp_cpu_info *info; 522 u16 boot_cpu_addr, cpu_addr; 523 524 c_cpus = 1; 525 s_cpus = 0; 526 boot_cpu_addr = S390_lowcore.cpu_data.cpu_addr; 527 info = kmalloc(sizeof(*info), GFP_KERNEL); 528 if (!info) 529 panic("smp_detect_cpus failed to allocate memory\n"); 530 /* Use sigp detection algorithm if sclp doesn't work. */ 531 if (sclp_get_cpu_info(info)) { 532 smp_use_sigp_detection = 1; 533 for (cpu = 0; cpu <= 65535; cpu++) { 534 if (cpu == boot_cpu_addr) 535 continue; 536 __cpu_logical_map[CPU_INIT_NO] = cpu; 537 if (!cpu_stopped(CPU_INIT_NO)) 538 continue; 539 smp_get_save_area(c_cpus, cpu); 540 c_cpus++; 541 } 542 goto out; 543 } 544 545 if (info->has_cpu_type) { 546 for (cpu = 0; cpu < info->combined; cpu++) { 547 if (info->cpu[cpu].address == boot_cpu_addr) { 548 smp_cpu_type = info->cpu[cpu].type; 549 break; 550 } 551 } 552 } 553 554 for (cpu = 0; cpu < info->combined; cpu++) { 555 if (info->has_cpu_type && info->cpu[cpu].type != smp_cpu_type) 556 continue; 557 cpu_addr = info->cpu[cpu].address; 558 if (cpu_addr == boot_cpu_addr) 559 continue; 560 __cpu_logical_map[CPU_INIT_NO] = cpu_addr; 561 if (!cpu_stopped(CPU_INIT_NO)) { 562 s_cpus++; 563 continue; 564 } 565 smp_get_save_area(c_cpus, cpu_addr); 566 c_cpus++; 567 } 568 out: 569 kfree(info); 570 printk(KERN_INFO "CPUs: %d configured, %d standby\n", c_cpus, s_cpus); 571 get_online_cpus(); 572 smp_rescan_cpus(); 573 put_online_cpus(); 574 } 575 576 /* 577 * Activate a secondary processor. 578 */ 579 int __cpuinit start_secondary(void *cpuvoid) 580 { 581 /* Setup the cpu */ 582 cpu_init(); 583 preempt_disable(); 584 /* Enable TOD clock interrupts on the secondary cpu. */ 585 init_cpu_timer(); 586 #ifdef CONFIG_VIRT_TIMER 587 /* Enable cpu timer interrupts on the secondary cpu. */ 588 init_cpu_vtimer(); 589 #endif 590 /* Enable pfault pseudo page faults on this cpu. */ 591 pfault_init(); 592 593 /* Mark this cpu as online */ 594 cpu_set(smp_processor_id(), cpu_online_map); 595 /* Switch on interrupts */ 596 local_irq_enable(); 597 /* Print info about this processor */ 598 print_cpu_info(&S390_lowcore.cpu_data); 599 /* cpu_idle will call schedule for us */ 600 cpu_idle(); 601 return 0; 602 } 603 604 static void __init smp_create_idle(unsigned int cpu) 605 { 606 struct task_struct *p; 607 608 /* 609 * don't care about the psw and regs settings since we'll never 610 * reschedule the forked task. 611 */ 612 p = fork_idle(cpu); 613 if (IS_ERR(p)) 614 panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p)); 615 current_set[cpu] = p; 616 spin_lock_init(&(&per_cpu(s390_idle, cpu))->lock); 617 } 618 619 static int __cpuinit smp_alloc_lowcore(int cpu) 620 { 621 unsigned long async_stack, panic_stack; 622 struct _lowcore *lowcore; 623 int lc_order; 624 625 lc_order = sizeof(long) == 8 ? 1 : 0; 626 lowcore = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, lc_order); 627 if (!lowcore) 628 return -ENOMEM; 629 async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER); 630 if (!async_stack) 631 goto out_async_stack; 632 panic_stack = __get_free_page(GFP_KERNEL); 633 if (!panic_stack) 634 goto out_panic_stack; 635 636 *lowcore = S390_lowcore; 637 lowcore->async_stack = async_stack + ASYNC_SIZE; 638 lowcore->panic_stack = panic_stack + PAGE_SIZE; 639 640 #ifndef CONFIG_64BIT 641 if (MACHINE_HAS_IEEE) { 642 unsigned long save_area; 643 644 save_area = get_zeroed_page(GFP_KERNEL); 645 if (!save_area) 646 goto out_save_area; 647 lowcore->extended_save_area_addr = (u32) save_area; 648 } 649 #endif 650 lowcore_ptr[cpu] = lowcore; 651 return 0; 652 653 #ifndef CONFIG_64BIT 654 out_save_area: 655 free_page(panic_stack); 656 #endif 657 out_panic_stack: 658 free_pages(async_stack, ASYNC_ORDER); 659 out_async_stack: 660 free_pages((unsigned long) lowcore, lc_order); 661 return -ENOMEM; 662 } 663 664 #ifdef CONFIG_HOTPLUG_CPU 665 static void smp_free_lowcore(int cpu) 666 { 667 struct _lowcore *lowcore; 668 int lc_order; 669 670 lc_order = sizeof(long) == 8 ? 1 : 0; 671 lowcore = lowcore_ptr[cpu]; 672 #ifndef CONFIG_64BIT 673 if (MACHINE_HAS_IEEE) 674 free_page((unsigned long) lowcore->extended_save_area_addr); 675 #endif 676 free_page(lowcore->panic_stack - PAGE_SIZE); 677 free_pages(lowcore->async_stack - ASYNC_SIZE, ASYNC_ORDER); 678 free_pages((unsigned long) lowcore, lc_order); 679 lowcore_ptr[cpu] = NULL; 680 } 681 #endif /* CONFIG_HOTPLUG_CPU */ 682 683 /* Upping and downing of CPUs */ 684 int __cpuinit __cpu_up(unsigned int cpu) 685 { 686 struct task_struct *idle; 687 struct _lowcore *cpu_lowcore; 688 struct stack_frame *sf; 689 sigp_ccode ccode; 690 691 if (smp_cpu_state[cpu] != CPU_STATE_CONFIGURED) 692 return -EIO; 693 if (smp_alloc_lowcore(cpu)) 694 return -ENOMEM; 695 696 ccode = signal_processor_p((__u32)(unsigned long)(lowcore_ptr[cpu]), 697 cpu, sigp_set_prefix); 698 if (ccode) { 699 printk("sigp_set_prefix failed for cpu %d " 700 "with condition code %d\n", 701 (int) cpu, (int) ccode); 702 return -EIO; 703 } 704 705 idle = current_set[cpu]; 706 cpu_lowcore = lowcore_ptr[cpu]; 707 cpu_lowcore->kernel_stack = (unsigned long) 708 task_stack_page(idle) + THREAD_SIZE; 709 cpu_lowcore->thread_info = (unsigned long) task_thread_info(idle); 710 sf = (struct stack_frame *) (cpu_lowcore->kernel_stack 711 - sizeof(struct pt_regs) 712 - sizeof(struct stack_frame)); 713 memset(sf, 0, sizeof(struct stack_frame)); 714 sf->gprs[9] = (unsigned long) sf; 715 cpu_lowcore->save_area[15] = (unsigned long) sf; 716 __ctl_store(cpu_lowcore->cregs_save_area[0], 0, 15); 717 asm volatile( 718 " stam 0,15,0(%0)" 719 : : "a" (&cpu_lowcore->access_regs_save_area) : "memory"); 720 cpu_lowcore->percpu_offset = __per_cpu_offset[cpu]; 721 cpu_lowcore->current_task = (unsigned long) idle; 722 cpu_lowcore->cpu_data.cpu_nr = cpu; 723 cpu_lowcore->softirq_pending = 0; 724 cpu_lowcore->ext_call_fast = 0; 725 eieio(); 726 727 while (signal_processor(cpu, sigp_restart) == sigp_busy) 728 udelay(10); 729 730 while (!cpu_online(cpu)) 731 cpu_relax(); 732 return 0; 733 } 734 735 static int __init setup_possible_cpus(char *s) 736 { 737 int pcpus, cpu; 738 739 pcpus = simple_strtoul(s, NULL, 0); 740 cpu_possible_map = cpumask_of_cpu(0); 741 for (cpu = 1; cpu < pcpus && cpu < NR_CPUS; cpu++) 742 cpu_set(cpu, cpu_possible_map); 743 return 0; 744 } 745 early_param("possible_cpus", setup_possible_cpus); 746 747 #ifdef CONFIG_HOTPLUG_CPU 748 749 int __cpu_disable(void) 750 { 751 struct ec_creg_mask_parms cr_parms; 752 int cpu = smp_processor_id(); 753 754 cpu_clear(cpu, cpu_online_map); 755 756 /* Disable pfault pseudo page faults on this cpu. */ 757 pfault_fini(); 758 759 memset(&cr_parms.orvals, 0, sizeof(cr_parms.orvals)); 760 memset(&cr_parms.andvals, 0xff, sizeof(cr_parms.andvals)); 761 762 /* disable all external interrupts */ 763 cr_parms.orvals[0] = 0; 764 cr_parms.andvals[0] = ~(1 << 15 | 1 << 14 | 1 << 13 | 1 << 12 | 765 1 << 11 | 1 << 10 | 1 << 6 | 1 << 4); 766 /* disable all I/O interrupts */ 767 cr_parms.orvals[6] = 0; 768 cr_parms.andvals[6] = ~(1 << 31 | 1 << 30 | 1 << 29 | 1 << 28 | 769 1 << 27 | 1 << 26 | 1 << 25 | 1 << 24); 770 /* disable most machine checks */ 771 cr_parms.orvals[14] = 0; 772 cr_parms.andvals[14] = ~(1 << 28 | 1 << 27 | 1 << 26 | 773 1 << 25 | 1 << 24); 774 775 smp_ctl_bit_callback(&cr_parms); 776 777 return 0; 778 } 779 780 void __cpu_die(unsigned int cpu) 781 { 782 /* Wait until target cpu is down */ 783 while (!smp_cpu_not_running(cpu)) 784 cpu_relax(); 785 smp_free_lowcore(cpu); 786 printk(KERN_INFO "Processor %d spun down\n", cpu); 787 } 788 789 void cpu_die(void) 790 { 791 idle_task_exit(); 792 signal_processor(smp_processor_id(), sigp_stop); 793 BUG(); 794 for (;;); 795 } 796 797 #endif /* CONFIG_HOTPLUG_CPU */ 798 799 void __init smp_prepare_cpus(unsigned int max_cpus) 800 { 801 unsigned int cpu; 802 803 smp_detect_cpus(); 804 805 /* request the 0x1201 emergency signal external interrupt */ 806 if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0) 807 panic("Couldn't request external interrupt 0x1201"); 808 memset(lowcore_ptr, 0, sizeof(lowcore_ptr)); 809 print_cpu_info(&S390_lowcore.cpu_data); 810 smp_alloc_lowcore(smp_processor_id()); 811 812 #ifndef CONFIG_64BIT 813 if (MACHINE_HAS_IEEE) 814 ctl_set_bit(14, 29); /* enable extended save area */ 815 #endif 816 set_prefix((u32)(unsigned long) lowcore_ptr[smp_processor_id()]); 817 818 for_each_possible_cpu(cpu) 819 if (cpu != smp_processor_id()) 820 smp_create_idle(cpu); 821 } 822 823 void __init smp_prepare_boot_cpu(void) 824 { 825 BUG_ON(smp_processor_id() != 0); 826 827 current_thread_info()->cpu = 0; 828 cpu_set(0, cpu_present_map); 829 cpu_set(0, cpu_online_map); 830 S390_lowcore.percpu_offset = __per_cpu_offset[0]; 831 current_set[0] = current; 832 smp_cpu_state[0] = CPU_STATE_CONFIGURED; 833 spin_lock_init(&(&__get_cpu_var(s390_idle))->lock); 834 } 835 836 void __init smp_cpus_done(unsigned int max_cpus) 837 { 838 } 839 840 /* 841 * the frequency of the profiling timer can be changed 842 * by writing a multiplier value into /proc/profile. 843 * 844 * usually you want to run this on all CPUs ;) 845 */ 846 int setup_profiling_timer(unsigned int multiplier) 847 { 848 return 0; 849 } 850 851 #ifdef CONFIG_HOTPLUG_CPU 852 static ssize_t cpu_configure_show(struct sys_device *dev, char *buf) 853 { 854 ssize_t count; 855 856 mutex_lock(&smp_cpu_state_mutex); 857 count = sprintf(buf, "%d\n", smp_cpu_state[dev->id]); 858 mutex_unlock(&smp_cpu_state_mutex); 859 return count; 860 } 861 862 static ssize_t cpu_configure_store(struct sys_device *dev, const char *buf, 863 size_t count) 864 { 865 int cpu = dev->id; 866 int val, rc; 867 char delim; 868 869 if (sscanf(buf, "%d %c", &val, &delim) != 1) 870 return -EINVAL; 871 if (val != 0 && val != 1) 872 return -EINVAL; 873 874 mutex_lock(&smp_cpu_state_mutex); 875 get_online_cpus(); 876 rc = -EBUSY; 877 if (cpu_online(cpu)) 878 goto out; 879 rc = 0; 880 switch (val) { 881 case 0: 882 if (smp_cpu_state[cpu] == CPU_STATE_CONFIGURED) { 883 rc = sclp_cpu_deconfigure(__cpu_logical_map[cpu]); 884 if (!rc) 885 smp_cpu_state[cpu] = CPU_STATE_STANDBY; 886 } 887 break; 888 case 1: 889 if (smp_cpu_state[cpu] == CPU_STATE_STANDBY) { 890 rc = sclp_cpu_configure(__cpu_logical_map[cpu]); 891 if (!rc) 892 smp_cpu_state[cpu] = CPU_STATE_CONFIGURED; 893 } 894 break; 895 default: 896 break; 897 } 898 out: 899 put_online_cpus(); 900 mutex_unlock(&smp_cpu_state_mutex); 901 return rc ? rc : count; 902 } 903 static SYSDEV_ATTR(configure, 0644, cpu_configure_show, cpu_configure_store); 904 #endif /* CONFIG_HOTPLUG_CPU */ 905 906 static ssize_t show_cpu_address(struct sys_device *dev, char *buf) 907 { 908 return sprintf(buf, "%d\n", __cpu_logical_map[dev->id]); 909 } 910 static SYSDEV_ATTR(address, 0444, show_cpu_address, NULL); 911 912 913 static struct attribute *cpu_common_attrs[] = { 914 #ifdef CONFIG_HOTPLUG_CPU 915 &attr_configure.attr, 916 #endif 917 &attr_address.attr, 918 NULL, 919 }; 920 921 static struct attribute_group cpu_common_attr_group = { 922 .attrs = cpu_common_attrs, 923 }; 924 925 static ssize_t show_capability(struct sys_device *dev, char *buf) 926 { 927 unsigned int capability; 928 int rc; 929 930 rc = get_cpu_capability(&capability); 931 if (rc) 932 return rc; 933 return sprintf(buf, "%u\n", capability); 934 } 935 static SYSDEV_ATTR(capability, 0444, show_capability, NULL); 936 937 static ssize_t show_idle_count(struct sys_device *dev, char *buf) 938 { 939 struct s390_idle_data *idle; 940 unsigned long long idle_count; 941 942 idle = &per_cpu(s390_idle, dev->id); 943 spin_lock_irq(&idle->lock); 944 idle_count = idle->idle_count; 945 spin_unlock_irq(&idle->lock); 946 return sprintf(buf, "%llu\n", idle_count); 947 } 948 static SYSDEV_ATTR(idle_count, 0444, show_idle_count, NULL); 949 950 static ssize_t show_idle_time(struct sys_device *dev, char *buf) 951 { 952 struct s390_idle_data *idle; 953 unsigned long long new_time; 954 955 idle = &per_cpu(s390_idle, dev->id); 956 spin_lock_irq(&idle->lock); 957 if (idle->in_idle) { 958 new_time = get_clock(); 959 idle->idle_time += new_time - idle->idle_enter; 960 idle->idle_enter = new_time; 961 } 962 new_time = idle->idle_time; 963 spin_unlock_irq(&idle->lock); 964 return sprintf(buf, "%llu\n", new_time >> 12); 965 } 966 static SYSDEV_ATTR(idle_time_us, 0444, show_idle_time, NULL); 967 968 static struct attribute *cpu_online_attrs[] = { 969 &attr_capability.attr, 970 &attr_idle_count.attr, 971 &attr_idle_time_us.attr, 972 NULL, 973 }; 974 975 static struct attribute_group cpu_online_attr_group = { 976 .attrs = cpu_online_attrs, 977 }; 978 979 static int __cpuinit smp_cpu_notify(struct notifier_block *self, 980 unsigned long action, void *hcpu) 981 { 982 unsigned int cpu = (unsigned int)(long)hcpu; 983 struct cpu *c = &per_cpu(cpu_devices, cpu); 984 struct sys_device *s = &c->sysdev; 985 struct s390_idle_data *idle; 986 987 switch (action) { 988 case CPU_ONLINE: 989 case CPU_ONLINE_FROZEN: 990 idle = &per_cpu(s390_idle, cpu); 991 spin_lock_irq(&idle->lock); 992 idle->idle_enter = 0; 993 idle->idle_time = 0; 994 idle->idle_count = 0; 995 spin_unlock_irq(&idle->lock); 996 if (sysfs_create_group(&s->kobj, &cpu_online_attr_group)) 997 return NOTIFY_BAD; 998 break; 999 case CPU_DEAD: 1000 case CPU_DEAD_FROZEN: 1001 sysfs_remove_group(&s->kobj, &cpu_online_attr_group); 1002 break; 1003 } 1004 return NOTIFY_OK; 1005 } 1006 1007 static struct notifier_block __cpuinitdata smp_cpu_nb = { 1008 .notifier_call = smp_cpu_notify, 1009 }; 1010 1011 static int smp_add_present_cpu(int cpu) 1012 { 1013 struct cpu *c = &per_cpu(cpu_devices, cpu); 1014 struct sys_device *s = &c->sysdev; 1015 int rc; 1016 1017 c->hotpluggable = 1; 1018 rc = register_cpu(c, cpu); 1019 if (rc) 1020 goto out; 1021 rc = sysfs_create_group(&s->kobj, &cpu_common_attr_group); 1022 if (rc) 1023 goto out_cpu; 1024 if (!cpu_online(cpu)) 1025 goto out; 1026 rc = sysfs_create_group(&s->kobj, &cpu_online_attr_group); 1027 if (!rc) 1028 return 0; 1029 sysfs_remove_group(&s->kobj, &cpu_common_attr_group); 1030 out_cpu: 1031 #ifdef CONFIG_HOTPLUG_CPU 1032 unregister_cpu(c); 1033 #endif 1034 out: 1035 return rc; 1036 } 1037 1038 #ifdef CONFIG_HOTPLUG_CPU 1039 static ssize_t rescan_store(struct sys_device *dev, const char *buf, 1040 size_t count) 1041 { 1042 cpumask_t newcpus; 1043 int cpu; 1044 int rc; 1045 1046 mutex_lock(&smp_cpu_state_mutex); 1047 get_online_cpus(); 1048 newcpus = cpu_present_map; 1049 rc = smp_rescan_cpus(); 1050 if (rc) 1051 goto out; 1052 cpus_andnot(newcpus, cpu_present_map, newcpus); 1053 for_each_cpu_mask(cpu, newcpus) { 1054 rc = smp_add_present_cpu(cpu); 1055 if (rc) 1056 cpu_clear(cpu, cpu_present_map); 1057 } 1058 rc = 0; 1059 out: 1060 put_online_cpus(); 1061 mutex_unlock(&smp_cpu_state_mutex); 1062 return rc ? rc : count; 1063 } 1064 static SYSDEV_ATTR(rescan, 0200, NULL, rescan_store); 1065 #endif /* CONFIG_HOTPLUG_CPU */ 1066 1067 static int __init topology_init(void) 1068 { 1069 int cpu; 1070 int rc; 1071 1072 register_cpu_notifier(&smp_cpu_nb); 1073 1074 #ifdef CONFIG_HOTPLUG_CPU 1075 rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj, 1076 &attr_rescan.attr); 1077 if (rc) 1078 return rc; 1079 #endif 1080 for_each_present_cpu(cpu) { 1081 rc = smp_add_present_cpu(cpu); 1082 if (rc) 1083 return rc; 1084 } 1085 return 0; 1086 } 1087 subsys_initcall(topology_init); 1088