smpboot.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:29k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * x86 SMP booting functions
  3.  *
  4.  * (c) 1995 Alan Cox, Building #3 <alan@redhat.com>
  5.  * (c) 1998, 1999, 2000 Ingo Molnar <mingo@redhat.com>
  6.  *
  7.  * Much of the core SMP work is based on previous work by Thomas Radke, to
  8.  * whom a great many thanks are extended.
  9.  *
  10.  * Thanks to Intel for making available several different Pentium,
  11.  * Pentium Pro and Pentium-II/Xeon MP machines.
  12.  * Original development of Linux SMP code supported by Caldera.
  13.  *
  14.  * This code is released under the GNU General Public License version 2 or
  15.  * later.
  16.  *
  17.  * Fixes
  18.  * Felix Koop : NR_CPUS used properly
  19.  * Jose Renau : Handle single CPU case.
  20.  * Alan Cox : By repeated request 8) - Total BogoMIP report.
  21.  * Greg Wright : Fix for kernel stacks panic.
  22.  * Erich Boleyn : MP v1.4 and additional changes.
  23.  * Matthias Sattler : Changes for 2.1 kernel map.
  24.  * Michel Lespinasse : Changes for 2.1 kernel map.
  25.  * Michael Chastain : Change trampoline.S to gnu as.
  26.  * Alan Cox : Dumb bug: 'B' step PPro's are fine
  27.  * Ingo Molnar : Added APIC timers, based on code
  28.  * from Jose Renau
  29.  * Ingo Molnar : various cleanups and rewrites
  30.  * Tigran Aivazian : fixed "0.00 in /proc/uptime on SMP" bug.
  31.  * Maciej W. Rozycki : Bits for genuine 82489DX APICs
  32.  * Martin J. Bligh :  Added support for multi-quad systems
  33.  */
  34. #include <linux/config.h>
  35. #include <linux/init.h>
  36. #include <linux/mm.h>
  37. #include <linux/kernel_stat.h>
  38. #include <linux/smp_lock.h>
  39. #include <linux/irq.h>
  40. #include <linux/bootmem.h>
  41. #include <linux/delay.h>
  42. #include <linux/mc146818rtc.h>
  43. #include <asm/mtrr.h>
  44. #include <asm/pgalloc.h>
  45. #include <asm/smpboot.h>
  46. /* Set if we find a B stepping CPU */
  47. static int smp_b_stepping;
  48. /* Setup configured maximum number of CPUs to activate */
  49. static int max_cpus = -1;
  50. /* Total count of live CPUs */
  51. int smp_num_cpus = 1;
  52. /* Number of siblings per CPU package */
  53. int smp_num_siblings = 1;
  54. int __initdata phys_proc_id[NR_CPUS]; /* Package ID of each logical CPU */
  55. /* Bitmask of currently online CPUs */
  56. unsigned long cpu_online_map;
  57. static volatile unsigned long cpu_callin_map;
  58. static volatile unsigned long cpu_callout_map;
  59. /* Per CPU bogomips and other parameters */
  60. struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
  61. /* Set when the idlers are all forked */
  62. int smp_threads_ready;
  63. /*
  64.  * Setup routine for controlling SMP activation
  65.  *
  66.  * Command-line option of "nosmp" or "maxcpus=0" will disable SMP
  67.  * activation entirely (the MPS table probe still happens, though).
  68.  *
  69.  * Command-line option of "maxcpus=<NUM>", where <NUM> is an integer
  70.  * greater than 0, limits the maximum number of CPUs activated in
  71.  * SMP mode to <NUM>.
  72.  */
  73. static int __init nosmp(char *str)
  74. {
  75. max_cpus = 0;
  76. return 1;
  77. }
  78. __setup("nosmp", nosmp);
  79. static int __init maxcpus(char *str)
  80. {
  81. get_option(&str, &max_cpus);
  82. return 1;
  83. }
  84. __setup("maxcpus=", maxcpus);
  85. /*
  86.  * Trampoline 80x86 program as an array.
  87.  */
  88. extern unsigned char trampoline_data [];
  89. extern unsigned char trampoline_end  [];
  90. static unsigned char *trampoline_base;
  91. /*
  92.  * Currently trivial. Write the real->protected mode
  93.  * bootstrap into the page concerned. The caller
  94.  * has made sure it's suitably aligned.
  95.  */
  96. static unsigned long __init setup_trampoline(void)
  97. {
  98. memcpy(trampoline_base, trampoline_data, trampoline_end - trampoline_data);
  99. return virt_to_phys(trampoline_base);
  100. }
  101. /*
  102.  * We are called very early to get the low memory for the
  103.  * SMP bootup trampoline page.
  104.  */
  105. void __init smp_alloc_memory(void)
  106. {
  107. trampoline_base = (void *) alloc_bootmem_low_pages(PAGE_SIZE);
  108. /*
  109.  * Has to be in very low memory so we can execute
  110.  * real-mode AP code.
  111.  */
  112. if (__pa(trampoline_base) >= 0x9F000)
  113. BUG();
  114. }
  115. /*
  116.  * The bootstrap kernel entry code has set these up. Save them for
  117.  * a given CPU
  118.  */
  119. void __init smp_store_cpu_info(int id)
  120. {
  121. struct cpuinfo_x86 *c = cpu_data + id;
  122. *c = boot_cpu_data;
  123. c->pte_quick = 0;
  124. c->pmd_quick = 0;
  125. c->pgd_quick = 0;
  126. c->pgtable_cache_sz = 0;
  127. identify_cpu(c);
  128. /*
  129.  * Mask B, Pentium, but not Pentium MMX
  130.  */
  131. if (c->x86_vendor == X86_VENDOR_INTEL &&
  132.     c->x86 == 5 &&
  133.     c->x86_mask >= 1 && c->x86_mask <= 4 &&
  134.     c->x86_model <= 3)
  135. /*
  136.  * Remember we have B step Pentia with bugs
  137.  */
  138. smp_b_stepping = 1;
  139. }
  140. /*
  141.  * Architecture specific routine called by the kernel just before init is
  142.  * fired off. This allows the BP to have everything in order [we hope].
  143.  * At the end of this all the APs will hit the system scheduling and off
  144.  * we go. Each AP will load the system gdt's and jump through the kernel
  145.  * init into idle(). At this point the scheduler will one day take over
  146.  * and give them jobs to do. smp_callin is a standard routine
  147.  * we use to track CPUs as they power up.
  148.  */
  149. static atomic_t smp_commenced = ATOMIC_INIT(0);
  150. void __init smp_commence(void)
  151. {
  152. /*
  153.  * Lets the callins below out of their loop.
  154.  */
  155. Dprintk("Setting commenced=1, go go gon");
  156. wmb();
  157. atomic_set(&smp_commenced,1);
  158. }
  159. /*
  160.  * TSC synchronization.
  161.  *
  162.  * We first check wether all CPUs have their TSC's synchronized,
  163.  * then we print a warning if not, and always resync.
  164.  */
  165. static atomic_t tsc_start_flag = ATOMIC_INIT(0);
  166. static atomic_t tsc_count_start = ATOMIC_INIT(0);
  167. static atomic_t tsc_count_stop = ATOMIC_INIT(0);
  168. static unsigned long long tsc_values[NR_CPUS];
  169. #define NR_LOOPS 5
  170. extern unsigned long fast_gettimeoffset_quotient;
  171. /*
  172.  * accurate 64-bit/32-bit division, expanded to 32-bit divisions and 64-bit
  173.  * multiplication. Not terribly optimized but we need it at boot time only
  174.  * anyway.
  175.  *
  176.  * result == a / b
  177.  * == (a1 + a2*(2^32)) / b
  178.  * == a1/b + a2*(2^32/b)
  179.  * == a1/b + a2*((2^32-1)/b) + a2/b + (a2*((2^32-1) % b))/b
  180.  *     ^---- (this multiplication can overflow)
  181.  */
  182. static unsigned long long __init div64 (unsigned long long a, unsigned long b0)
  183. {
  184. unsigned int a1, a2;
  185. unsigned long long res;
  186. a1 = ((unsigned int*)&a)[0];
  187. a2 = ((unsigned int*)&a)[1];
  188. res = a1/b0 +
  189. (unsigned long long)a2 * (unsigned long long)(0xffffffff/b0) +
  190. a2 / b0 +
  191. (a2 * (0xffffffff % b0)) / b0;
  192. return res;
  193. }
  194. static void __init synchronize_tsc_bp (void)
  195. {
  196. int i;
  197. unsigned long long t0;
  198. unsigned long long sum, avg;
  199. long long delta;
  200. unsigned long one_usec;
  201. int buggy = 0;
  202. printk("checking TSC synchronization across CPUs: ");
  203. one_usec = ((1<<30)/fast_gettimeoffset_quotient)*(1<<2);
  204. atomic_set(&tsc_start_flag, 1);
  205. wmb();
  206. /*
  207.  * We loop a few times to get a primed instruction cache,
  208.  * then the last pass is more or less synchronized and
  209.  * the BP and APs set their cycle counters to zero all at
  210.  * once. This reduces the chance of having random offsets
  211.  * between the processors, and guarantees that the maximum
  212.  * delay between the cycle counters is never bigger than
  213.  * the latency of information-passing (cachelines) between
  214.  * two CPUs.
  215.  */
  216. for (i = 0; i < NR_LOOPS; i++) {
  217. /*
  218.  * all APs synchronize but they loop on '== num_cpus'
  219.  */
  220. while (atomic_read(&tsc_count_start) != smp_num_cpus-1) mb();
  221. atomic_set(&tsc_count_stop, 0);
  222. wmb();
  223. /*
  224.  * this lets the APs save their current TSC:
  225.  */
  226. atomic_inc(&tsc_count_start);
  227. rdtscll(tsc_values[smp_processor_id()]);
  228. /*
  229.  * We clear the TSC in the last loop:
  230.  */
  231. if (i == NR_LOOPS-1)
  232. write_tsc(0, 0);
  233. /*
  234.  * Wait for all APs to leave the synchronization point:
  235.  */
  236. while (atomic_read(&tsc_count_stop) != smp_num_cpus-1) mb();
  237. atomic_set(&tsc_count_start, 0);
  238. wmb();
  239. atomic_inc(&tsc_count_stop);
  240. }
  241. sum = 0;
  242. for (i = 0; i < smp_num_cpus; i++) {
  243. t0 = tsc_values[i];
  244. sum += t0;
  245. }
  246. avg = div64(sum, smp_num_cpus);
  247. sum = 0;
  248. for (i = 0; i < smp_num_cpus; i++) {
  249. delta = tsc_values[i] - avg;
  250. if (delta < 0)
  251. delta = -delta;
  252. /*
  253.  * We report bigger than 2 microseconds clock differences.
  254.  */
  255. if (delta > 2*one_usec) {
  256. long realdelta;
  257. if (!buggy) {
  258. buggy = 1;
  259. printk("n");
  260. }
  261. realdelta = div64(delta, one_usec);
  262. if (tsc_values[i] < avg)
  263. realdelta = -realdelta;
  264. printk("BIOS BUG: CPU#%d improperly initialized, has %ld usecs TSC skew! FIXED.n",
  265. i, realdelta);
  266. }
  267. sum += delta;
  268. }
  269. if (!buggy)
  270. printk("passed.n");
  271. }
  272. static void __init synchronize_tsc_ap (void)
  273. {
  274. int i;
  275. /*
  276.  * smp_num_cpus is not necessarily known at the time
  277.  * this gets called, so we first wait for the BP to
  278.  * finish SMP initialization:
  279.  */
  280. while (!atomic_read(&tsc_start_flag)) mb();
  281. for (i = 0; i < NR_LOOPS; i++) {
  282. atomic_inc(&tsc_count_start);
  283. while (atomic_read(&tsc_count_start) != smp_num_cpus) mb();
  284. rdtscll(tsc_values[smp_processor_id()]);
  285. if (i == NR_LOOPS-1)
  286. write_tsc(0, 0);
  287. atomic_inc(&tsc_count_stop);
  288. while (atomic_read(&tsc_count_stop) != smp_num_cpus) mb();
  289. }
  290. }
  291. #undef NR_LOOPS
  292. extern void calibrate_delay(void);
  293. static atomic_t init_deasserted;
  294. void __init smp_callin(void)
  295. {
  296. int cpuid, phys_id;
  297. unsigned long timeout;
  298. /*
  299.  * If waken up by an INIT in an 82489DX configuration
  300.  * we may get here before an INIT-deassert IPI reaches
  301.  * our local APIC.  We have to wait for the IPI or we'll
  302.  * lock up on an APIC access.
  303.  */
  304. if (!clustered_apic_mode) 
  305. while (!atomic_read(&init_deasserted));
  306. /*
  307.  * (This works even if the APIC is not enabled.)
  308.  */
  309. phys_id = GET_APIC_ID(apic_read(APIC_ID));
  310. cpuid = current->processor;
  311. if (test_and_set_bit(cpuid, &cpu_online_map)) {
  312. printk("huh, phys CPU#%d, CPU#%d already present??n",
  313. phys_id, cpuid);
  314. BUG();
  315. }
  316. Dprintk("CPU#%d (phys ID: %d) waiting for CALLOUTn", cpuid, phys_id);
  317. /*
  318.  * STARTUP IPIs are fragile beasts as they might sometimes
  319.  * trigger some glue motherboard logic. Complete APIC bus
  320.  * silence for 1 second, this overestimates the time the
  321.  * boot CPU is spending to send the up to 2 STARTUP IPIs
  322.  * by a factor of two. This should be enough.
  323.  */
  324. /*
  325.  * Waiting 2s total for startup (udelay is not yet working)
  326.  */
  327. timeout = jiffies + 2*HZ;
  328. while (time_before(jiffies, timeout)) {
  329. /*
  330.  * Has the boot CPU finished it's STARTUP sequence?
  331.  */
  332. if (test_bit(cpuid, &cpu_callout_map))
  333. break;
  334. rep_nop();
  335. }
  336. if (!time_before(jiffies, timeout)) {
  337. printk("BUG: CPU%d started up but did not get a callout!n",
  338. cpuid);
  339. BUG();
  340. }
  341. /*
  342.  * the boot CPU has finished the init stage and is spinning
  343.  * on callin_map until we finish. We are free to set up this
  344.  * CPU, first the APIC. (this is probably redundant on most
  345.  * boards)
  346.  */
  347. Dprintk("CALLIN, before setup_local_APIC().n");
  348. /*
  349.  * Because we use NMIs rather than the INIT-STARTUP sequence to
  350.  * bootstrap the CPUs, the APIC may be in a wierd state. Kick it.
  351.  */
  352. if (clustered_apic_mode)
  353. clear_local_APIC();
  354. setup_local_APIC();
  355. __sti();
  356. #ifdef CONFIG_MTRR
  357. /*
  358.  * Must be done before calibration delay is computed
  359.  */
  360. mtrr_init_secondary_cpu ();
  361. #endif
  362. /*
  363.  * Get our bogomips.
  364.  */
  365. calibrate_delay();
  366. Dprintk("Stack at about %pn",&cpuid);
  367. /*
  368.  * Save our processor parameters
  369.  */
  370.   smp_store_cpu_info(cpuid);
  371. /*
  372.  * Allow the master to continue.
  373.  */
  374. set_bit(cpuid, &cpu_callin_map);
  375. /*
  376.  *      Synchronize the TSC with the BP
  377.  */
  378. if (cpu_has_tsc)
  379. synchronize_tsc_ap();
  380. }
  381. int cpucount;
  382. extern int cpu_idle(void);
  383. /*
  384.  * Activate a secondary processor.
  385.  */
  386. int __init start_secondary(void *unused)
  387. {
  388. /*
  389.  * Dont put anything before smp_callin(), SMP
  390.  * booting is too fragile that we want to limit the
  391.  * things done here to the most necessary things.
  392.  */
  393. cpu_init();
  394. smp_callin();
  395. while (!atomic_read(&smp_commenced))
  396. rep_nop();
  397. /*
  398.  * low-memory mappings have been cleared, flush them from
  399.  * the local TLBs too.
  400.  */
  401. local_flush_tlb();
  402. return cpu_idle();
  403. }
  404. /*
  405.  * Everything has been set up for the secondary
  406.  * CPUs - they just need to reload everything
  407.  * from the task structure
  408.  * This function must not return.
  409.  */
  410. void __init initialize_secondary(void)
  411. {
  412. /*
  413.  * We don't actually need to load the full TSS,
  414.  * basically just the stack pointer and the eip.
  415.  */
  416. asm volatile(
  417. "movl %0,%%espnt"
  418. "jmp *%1"
  419. :
  420. :"r" (current->thread.esp),"r" (current->thread.eip));
  421. }
  422. extern struct {
  423. void * esp;
  424. unsigned short ss;
  425. } stack_start;
  426. static int __init fork_by_hand(void)
  427. {
  428. struct pt_regs regs;
  429. /*
  430.  * don't care about the eip and regs settings since
  431.  * we'll never reschedule the forked task.
  432.  */
  433. return do_fork(CLONE_VM|CLONE_PID, 0, &regs, 0);
  434. }
  435. /* which physical APIC ID maps to which logical CPU number */
  436. volatile int physical_apicid_2_cpu[MAX_APICID];
  437. /* which logical CPU number maps to which physical APIC ID */
  438. volatile int cpu_2_physical_apicid[NR_CPUS];
  439. /* which logical APIC ID maps to which logical CPU number */
  440. volatile int logical_apicid_2_cpu[MAX_APICID];
  441. /* which logical CPU number maps to which logical APIC ID */
  442. volatile int cpu_2_logical_apicid[NR_CPUS];
  443. static inline void init_cpu_to_apicid(void)
  444. /* Initialize all maps between cpu number and apicids */
  445. {
  446. int apicid, cpu;
  447. for (apicid = 0; apicid < MAX_APICID; apicid++) {
  448. physical_apicid_2_cpu[apicid] = -1;
  449. logical_apicid_2_cpu[apicid] = -1;
  450. }
  451. for (cpu = 0; cpu < NR_CPUS; cpu++) {
  452. cpu_2_physical_apicid[cpu] = -1;
  453. cpu_2_logical_apicid[cpu] = -1;
  454. }
  455. }
  456. static inline void map_cpu_to_boot_apicid(int cpu, int apicid)
  457. /* 
  458.  * set up a mapping between cpu and apicid. Uses logical apicids for multiquad,
  459.  * else physical apic ids
  460.  */
  461. {
  462. if (clustered_apic_mode) {
  463. logical_apicid_2_cpu[apicid] = cpu;
  464. cpu_2_logical_apicid[cpu] = apicid;
  465. } else {
  466. physical_apicid_2_cpu[apicid] = cpu;
  467. cpu_2_physical_apicid[cpu] = apicid;
  468. }
  469. }
  470. static inline void unmap_cpu_to_boot_apicid(int cpu, int apicid)
  471. /* 
  472.  * undo a mapping between cpu and apicid. Uses logical apicids for multiquad,
  473.  * else physical apic ids
  474.  */
  475. {
  476. if (clustered_apic_mode) {
  477. logical_apicid_2_cpu[apicid] = -1;
  478. cpu_2_logical_apicid[cpu] = -1;
  479. } else {
  480. physical_apicid_2_cpu[apicid] = -1;
  481. cpu_2_physical_apicid[cpu] = -1;
  482. }
  483. }
  484. #if APIC_DEBUG
  485. static inline void inquire_remote_apic(int apicid)
  486. {
  487. int i, regs[] = { APIC_ID >> 4, APIC_LVR >> 4, APIC_SPIV >> 4 };
  488. char *names[] = { "ID", "VERSION", "SPIV" };
  489. int timeout, status;
  490. printk("Inquiring remote APIC #%d...n", apicid);
  491. for (i = 0; i < sizeof(regs) / sizeof(*regs); i++) {
  492. printk("... APIC #%d %s: ", apicid, names[i]);
  493. /*
  494.  * Wait for idle.
  495.  */
  496. apic_wait_icr_idle();
  497. apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(apicid));
  498. apic_write_around(APIC_ICR, APIC_DM_REMRD | regs[i]);
  499. timeout = 0;
  500. do {
  501. udelay(100);
  502. status = apic_read(APIC_ICR) & APIC_ICR_RR_MASK;
  503. } while (status == APIC_ICR_RR_INPROG && timeout++ < 1000);
  504. switch (status) {
  505. case APIC_ICR_RR_VALID:
  506. status = apic_read(APIC_RRR);
  507. printk("%08xn", status);
  508. break;
  509. default:
  510. printk("failedn");
  511. }
  512. }
  513. }
  514. #endif
  515. static int wakeup_secondary_via_NMI(int logical_apicid)
  516. /* 
  517.  * Poke the other CPU in the eye to wake it up. Remember that the normal
  518.  * INIT, INIT, STARTUP sequence will reset the chip hard for us, and this
  519.  * won't ... remember to clear down the APIC, etc later.
  520.  */
  521. {
  522. unsigned long send_status = 0, accept_status = 0;
  523. int timeout, maxlvt;
  524. /* Target chip */
  525. apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(logical_apicid));
  526. /* Boot on the stack */
  527. /* Kick the second */
  528. apic_write_around(APIC_ICR, APIC_DM_NMI | APIC_DEST_LOGICAL);
  529. Dprintk("Waiting for send to finish...n");
  530. timeout = 0;
  531. do {
  532. Dprintk("+");
  533. udelay(100);
  534. send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
  535. } while (send_status && (timeout++ < 1000));
  536. /*
  537.  * Give the other CPU some time to accept the IPI.
  538.  */
  539. udelay(200);
  540. /*
  541.  * Due to the Pentium erratum 3AP.
  542.  */
  543. maxlvt = get_maxlvt();
  544. if (maxlvt > 3) {
  545. apic_read_around(APIC_SPIV);
  546. apic_write(APIC_ESR, 0);
  547. }
  548. accept_status = (apic_read(APIC_ESR) & 0xEF);
  549. Dprintk("NMI sent.n");
  550. if (send_status)
  551. printk("APIC never delivered???n");
  552. if (accept_status)
  553. printk("APIC delivery error (%lx).n", accept_status);
  554. return (send_status | accept_status);
  555. }
  556. static int wakeup_secondary_via_INIT(int phys_apicid, unsigned long start_eip)
  557. {
  558. unsigned long send_status = 0, accept_status = 0;
  559. int maxlvt, timeout, num_starts, j;
  560. Dprintk("Asserting INIT.n");
  561. /*
  562.  * Turn INIT on target chip
  563.  */
  564. apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
  565. /*
  566.  * Send IPI
  567.  */
  568. apic_write_around(APIC_ICR, APIC_INT_LEVELTRIG | APIC_INT_ASSERT
  569. | APIC_DM_INIT);
  570. Dprintk("Waiting for send to finish...n");
  571. timeout = 0;
  572. do {
  573. Dprintk("+");
  574. udelay(100);
  575. send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
  576. } while (send_status && (timeout++ < 1000));
  577. mdelay(10);
  578. Dprintk("Deasserting INIT.n");
  579. /* Target chip */
  580. apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
  581. /* Send IPI */
  582. apic_write_around(APIC_ICR, APIC_INT_LEVELTRIG | APIC_DM_INIT);
  583. Dprintk("Waiting for send to finish...n");
  584. timeout = 0;
  585. do {
  586. Dprintk("+");
  587. udelay(100);
  588. send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
  589. } while (send_status && (timeout++ < 1000));
  590. atomic_set(&init_deasserted, 1);
  591. /*
  592.  * Should we send STARTUP IPIs ?
  593.  *
  594.  * Determine this based on the APIC version.
  595.  * If we don't have an integrated APIC, don't send the STARTUP IPIs.
  596.  */
  597. if (APIC_INTEGRATED(apic_version[phys_apicid]))
  598. num_starts = 2;
  599. else
  600. num_starts = 0;
  601. /*
  602.  * Run STARTUP IPI loop.
  603.  */
  604. Dprintk("#startup loops: %d.n", num_starts);
  605. maxlvt = get_maxlvt();
  606. for (j = 1; j <= num_starts; j++) {
  607. Dprintk("Sending STARTUP #%d.n",j);
  608. apic_read_around(APIC_SPIV);
  609. apic_write(APIC_ESR, 0);
  610. apic_read(APIC_ESR);
  611. Dprintk("After apic_write.n");
  612. /*
  613.  * STARTUP IPI
  614.  */
  615. /* Target chip */
  616. apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
  617. /* Boot on the stack */
  618. /* Kick the second */
  619. apic_write_around(APIC_ICR, APIC_DM_STARTUP
  620. | (start_eip >> 12));
  621. /*
  622.  * Give the other CPU some time to accept the IPI.
  623.  */
  624. udelay(300);
  625. Dprintk("Startup point 1.n");
  626. Dprintk("Waiting for send to finish...n");
  627. timeout = 0;
  628. do {
  629. Dprintk("+");
  630. udelay(100);
  631. send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
  632. } while (send_status && (timeout++ < 1000));
  633. /*
  634.  * Give the other CPU some time to accept the IPI.
  635.  */
  636. udelay(200);
  637. /*
  638.  * Due to the Pentium erratum 3AP.
  639.  */
  640. if (maxlvt > 3) {
  641. apic_read_around(APIC_SPIV);
  642. apic_write(APIC_ESR, 0);
  643. }
  644. accept_status = (apic_read(APIC_ESR) & 0xEF);
  645. if (send_status || accept_status)
  646. break;
  647. }
  648. Dprintk("After Startup.n");
  649. if (send_status)
  650. printk("APIC never delivered???n");
  651. if (accept_status)
  652. printk("APIC delivery error (%lx).n", accept_status);
  653. return (send_status | accept_status);
  654. }
  655. extern unsigned long cpu_initialized;
  656. static void __init do_boot_cpu (int apicid) 
  657. /*
  658.  * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
  659.  * (ie clustered apic addressing mode), this is a LOGICAL apic ID.
  660.  */
  661. {
  662. struct task_struct *idle;
  663. unsigned long boot_error = 0;
  664. int timeout, cpu;
  665. unsigned long start_eip;
  666. unsigned short nmi_high, nmi_low;
  667. cpu = ++cpucount;
  668. /*
  669.  * We can't use kernel_thread since we must avoid to
  670.  * reschedule the child.
  671.  */
  672. if (fork_by_hand() < 0)
  673. panic("failed fork for CPU %d", cpu);
  674. /*
  675.  * We remove it from the pidhash and the runqueue
  676.  * once we got the process:
  677.  */
  678. idle = init_task.prev_task;
  679. if (!idle)
  680. panic("No idle process for CPU %d", cpu);
  681. idle->processor = cpu;
  682. idle->cpus_runnable = 1 << cpu; /* we schedule the first task manually */
  683. map_cpu_to_boot_apicid(cpu, apicid);
  684. idle->thread.eip = (unsigned long) start_secondary;
  685. del_from_runqueue(idle);
  686. unhash_process(idle);
  687. init_tasks[cpu] = idle;
  688. /* start_eip had better be page-aligned! */
  689. start_eip = setup_trampoline();
  690. /* So we see what's up   */
  691. printk("Booting processor %d/%d eip %lxn", cpu, apicid, start_eip);
  692. stack_start.esp = (void *) (1024 + PAGE_SIZE + (char *)idle);
  693. /*
  694.  * This grunge runs the startup process for
  695.  * the targeted processor.
  696.  */
  697. atomic_set(&init_deasserted, 0);
  698. Dprintk("Setting warm reset code and vector.n");
  699. if (clustered_apic_mode == CLUSTERED_APIC_NUMAQ) {
  700. /* stash the current NMI vector, so we can put things back */
  701. nmi_high = *((volatile unsigned short *) TRAMPOLINE_HIGH);
  702. nmi_low = *((volatile unsigned short *) TRAMPOLINE_LOW);
  703. CMOS_WRITE(0xa, 0xf);
  704. local_flush_tlb();
  705. Dprintk("1.n");
  706. *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4;
  707. Dprintk("2.n");
  708. *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf;
  709. Dprintk("3.n");
  710. /*
  711.  * Be paranoid about clearing APIC errors.
  712.  */
  713. if (!clustered_apic_mode && APIC_INTEGRATED(apic_version[apicid])) {
  714. apic_read_around(APIC_SPIV);
  715. apic_write(APIC_ESR, 0);
  716. apic_read(APIC_ESR);
  717. }
  718. /*
  719.  * Status is now clean
  720.  */
  721. boot_error = 0;
  722. /*
  723.  * Starting actual IPI sequence...
  724.  */
  725. if (clustered_apic_mode == CLUSTERED_APIC_NUMAQ)
  726. boot_error = wakeup_secondary_via_NMI(apicid);
  727. else 
  728. boot_error = wakeup_secondary_via_INIT(apicid, start_eip);
  729. if (!boot_error) {
  730. /*
  731.  * allow APs to start initializing.
  732.  */
  733. Dprintk("Before Callout %d.n", cpu);
  734. set_bit(cpu, &cpu_callout_map);
  735. Dprintk("After Callout %d.n", cpu);
  736. /*
  737.  * Wait 5s total for a response
  738.  */
  739. for (timeout = 0; timeout < 50000; timeout++) {
  740. if (test_bit(cpu, &cpu_callin_map))
  741. break; /* It has booted */
  742. udelay(100);
  743. }
  744. if (test_bit(cpu, &cpu_callin_map)) {
  745. /* number CPUs logically, starting from 1 (BSP is 0) */
  746. Dprintk("OK.n");
  747. printk("CPU%d: ", cpu);
  748. print_cpu_info(&cpu_data[cpu]);
  749. Dprintk("CPU has booted.n");
  750. } else {
  751. boot_error= 1;
  752. if (*((volatile unsigned char *)phys_to_virt(8192))
  753. == 0xA5)
  754. /* trampoline started but...? */
  755. printk("Stuck ??n");
  756. else
  757. /* trampoline code not run */
  758. printk("Not responding.n");
  759. #if APIC_DEBUG
  760. if (!clustered_apic_mode)
  761. inquire_remote_apic(apicid);
  762. #endif
  763. }
  764. }
  765. if (boot_error) {
  766. /* Try to put things back the way they were before ... */
  767. unmap_cpu_to_boot_apicid(cpu, apicid);
  768. clear_bit(cpu, &cpu_callout_map); /* was set here (do_boot_cpu()) */
  769. clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
  770. clear_bit(cpu, &cpu_online_map);  /* was set in smp_callin() */
  771. cpucount--;
  772. }
  773. /* mark "stuck" area as not stuck */
  774. *((volatile unsigned long *)phys_to_virt(8192)) = 0;
  775. if(clustered_apic_mode == CLUSTERED_APIC_NUMAQ) {
  776. printk("Restoring NMI vectorn");
  777. *((volatile unsigned short *) TRAMPOLINE_HIGH) = nmi_high;
  778. *((volatile unsigned short *) TRAMPOLINE_LOW) = nmi_low;
  779. }
  780. }
  781. cycles_t cacheflush_time;
  782. static void smp_tune_scheduling (void)
  783. {
  784. unsigned long cachesize;       /* kB   */
  785. unsigned long bandwidth = 350; /* MB/s */
  786. /*
  787.  * Rough estimation for SMP scheduling, this is the number of
  788.  * cycles it takes for a fully memory-limited process to flush
  789.  * the SMP-local cache.
  790.  *
  791.  * (For a P5 this pretty much means we will choose another idle
  792.  *  CPU almost always at wakeup time (this is due to the small
  793.  *  L1 cache), on PIIs it's around 50-100 usecs, depending on
  794.  *  the cache size)
  795.  */
  796. if (!cpu_khz) {
  797. /*
  798.  * this basically disables processor-affinity
  799.  * scheduling on SMP without a TSC.
  800.  */
  801. cacheflush_time = 0;
  802. return;
  803. } else {
  804. cachesize = boot_cpu_data.x86_cache_size;
  805. if (cachesize == -1) {
  806. cachesize = 16; /* Pentiums, 2x8kB cache */
  807. bandwidth = 100;
  808. }
  809. cacheflush_time = (cpu_khz>>10) * (cachesize<<10) / bandwidth;
  810. }
  811. printk("per-CPU timeslice cutoff: %ld.%02ld usecs.n",
  812. (long)cacheflush_time/(cpu_khz/1000),
  813. ((long)cacheflush_time*100/(cpu_khz/1000)) % 100);
  814. }
  815. /*
  816.  * Cycle through the processors sending APIC IPIs to boot each.
  817.  */
  818. extern int prof_multiplier[NR_CPUS];
  819. extern int prof_old_multiplier[NR_CPUS];
  820. extern int prof_counter[NR_CPUS];
  821. static int boot_cpu_logical_apicid;
  822. /* Where the IO area was mapped on multiquad, always 0 otherwise */
  823. void *xquad_portio;
  824. int cpu_sibling_map[NR_CPUS] __cacheline_aligned;
  825. void __init smp_boot_cpus(void)
  826. {
  827. int apicid, cpu, bit;
  828.         if ((clustered_apic_mode == CLUSTERED_APIC_NUMAQ) && (numnodes > 1)) {
  829.                 printk("Remapping cross-quad port I/O for %d quadsn",
  830. numnodes);
  831.                 printk("xquad_portio vaddr 0x%08lx, len %08lxn",
  832.                         (u_long) xquad_portio, 
  833. (u_long) numnodes * XQUAD_PORTIO_LEN);
  834.                 xquad_portio = ioremap (XQUAD_PORTIO_BASE, 
  835. numnodes * XQUAD_PORTIO_LEN);
  836.         }
  837. #ifdef CONFIG_MTRR
  838. /*  Must be done before other processors booted  */
  839. mtrr_init_boot_cpu ();
  840. #endif
  841. /*
  842.  * Initialize the logical to physical CPU number mapping
  843.  * and the per-CPU profiling counter/multiplier
  844.  */
  845. for (cpu = 0; cpu < NR_CPUS; cpu++) {
  846. prof_counter[cpu] = 1;
  847. prof_old_multiplier[cpu] = 1;
  848. prof_multiplier[cpu] = 1;
  849. }
  850. init_cpu_to_apicid();
  851. /*
  852.  * Setup boot CPU information
  853.  */
  854. smp_store_cpu_info(0); /* Final full version of the data */
  855. printk("CPU%d: ", 0);
  856. print_cpu_info(&cpu_data[0]);
  857. /*
  858.  * We have the boot CPU online for sure.
  859.  */
  860. set_bit(0, &cpu_online_map);
  861. boot_cpu_logical_apicid = logical_smp_processor_id();
  862. map_cpu_to_boot_apicid(0, boot_cpu_apicid);
  863. global_irq_holder = 0;
  864. current->processor = 0;
  865. init_idle();
  866. smp_tune_scheduling();
  867. /*
  868.  * If we couldnt find an SMP configuration at boot time,
  869.  * get out of here now!
  870.  */
  871. if (!smp_found_config) {
  872. printk(KERN_NOTICE "SMP motherboard not detected.n");
  873. #ifndef CONFIG_VISWS
  874. io_apic_irqs = 0;
  875. #endif
  876. cpu_online_map = phys_cpu_present_map = 1;
  877. smp_num_cpus = 1;
  878. if (APIC_init_uniprocessor())
  879. printk(KERN_NOTICE "Local APIC not detected."
  880.    " Using dummy APIC emulation.n");
  881. goto smp_done;
  882. }
  883. /*
  884.  * Should not be necessary because the MP table should list the boot
  885.  * CPU too, but we do it for the sake of robustness anyway.
  886.  * Makes no sense to do this check in clustered apic mode, so skip it
  887.  */
  888. if (!clustered_apic_mode && 
  889.     !test_bit(boot_cpu_physical_apicid, &phys_cpu_present_map)) {
  890. printk("weird, boot CPU (#%d) not listed by the BIOS.n",
  891. boot_cpu_physical_apicid);
  892. phys_cpu_present_map |= (1 << hard_smp_processor_id());
  893. }
  894. /*
  895.  * If we couldn't find a local APIC, then get out of here now!
  896.  */
  897. if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid]) &&
  898.     !test_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability)) {
  899. printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...n",
  900. boot_cpu_physical_apicid);
  901. printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)n");
  902. #ifndef CONFIG_VISWS
  903. io_apic_irqs = 0;
  904. #endif
  905. cpu_online_map = phys_cpu_present_map = 1;
  906. smp_num_cpus = 1;
  907. goto smp_done;
  908. }
  909. verify_local_APIC();
  910. /*
  911.  * If SMP should be disabled, then really disable it!
  912.  */
  913. if (!max_cpus) {
  914. smp_found_config = 0;
  915. printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.n");
  916. #ifndef CONFIG_VISWS
  917. io_apic_irqs = 0;
  918. #endif
  919. cpu_online_map = phys_cpu_present_map = 1;
  920. smp_num_cpus = 1;
  921. goto smp_done;
  922. }
  923. connect_bsp_APIC();
  924. setup_local_APIC();
  925. if (GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_physical_apicid)
  926. BUG();
  927. /*
  928.  * Scan the CPU present map and fire up the other CPUs via do_boot_cpu
  929.  *
  930.  * In clustered apic mode, phys_cpu_present_map is a constructed thus:
  931.  * bits 0-3 are quad0, 4-7 are quad1, etc. A perverse twist on the 
  932.  * clustered apic ID.
  933.  */
  934. Dprintk("CPU present map: %lxn", phys_cpu_present_map);
  935. for (bit = 0; bit < NR_CPUS; bit++) {
  936. apicid = cpu_present_to_apicid(bit);
  937. /*
  938.  * Don't even attempt to start the boot CPU!
  939.  */
  940. if (apicid == boot_cpu_apicid)
  941. continue;
  942. if (!(phys_cpu_present_map & (1 << bit)))
  943. continue;
  944. if ((max_cpus >= 0) && (max_cpus <= cpucount+1))
  945. continue;
  946. do_boot_cpu(apicid);
  947. /*
  948.  * Make sure we unmap all failed CPUs
  949.  */
  950. if ((boot_apicid_to_cpu(apicid) == -1) &&
  951. (phys_cpu_present_map & (1 << bit)))
  952. printk("CPU #%d not responding - cannot use it.n",
  953. apicid);
  954. }
  955. /*
  956.  * Cleanup possible dangling ends...
  957.  */
  958. #ifndef CONFIG_VISWS
  959. {
  960. /*
  961.  * Install writable page 0 entry to set BIOS data area.
  962.  */
  963. local_flush_tlb();
  964. /*
  965.  * Paranoid:  Set warm reset code and vector here back
  966.  * to default values.
  967.  */
  968. CMOS_WRITE(0, 0xf);
  969. *((volatile long *) phys_to_virt(0x467)) = 0;
  970. }
  971. #endif
  972. /*
  973.  * Allow the user to impress friends.
  974.  */
  975. Dprintk("Before bogomips.n");
  976. if (!cpucount) {
  977. printk(KERN_ERR "Error: only one processor found.n");
  978. } else {
  979. unsigned long bogosum = 0;
  980. for (cpu = 0; cpu < NR_CPUS; cpu++)
  981. if (cpu_online_map & (1<<cpu))
  982. bogosum += cpu_data[cpu].loops_per_jiffy;
  983. printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).n",
  984. cpucount+1,
  985. bogosum/(500000/HZ),
  986. (bogosum/(5000/HZ))%100);
  987. Dprintk("Before bogocount - setting activated=1.n");
  988. }
  989. smp_num_cpus = cpucount + 1;
  990. if (smp_b_stepping)
  991. printk(KERN_WARNING "WARNING: SMP operation may be unreliable with B stepping processors.n");
  992. Dprintk("Boot done.n");
  993. /*
  994.  * If Hyper-Threading is avaialble, construct cpu_sibling_map[], so
  995.  * that we can tell the sibling CPU efficiently.
  996.  */
  997. if (test_bit(X86_FEATURE_HT, boot_cpu_data.x86_capability)
  998.     && smp_num_siblings > 1) {
  999. for (cpu = 0; cpu < NR_CPUS; cpu++)
  1000. cpu_sibling_map[cpu] = NO_PROC_ID;
  1001. for (cpu = 0; cpu < smp_num_cpus; cpu++) {
  1002. int  i;
  1003. for (i = 0; i < smp_num_cpus; i++) {
  1004. if (i == cpu)
  1005. continue;
  1006. if (phys_proc_id[cpu] == phys_proc_id[i]) {
  1007. cpu_sibling_map[cpu] = i;
  1008. printk("cpu_sibling_map[%d] = %dn", cpu, cpu_sibling_map[cpu]);
  1009. break;
  1010. }
  1011. }
  1012. if (cpu_sibling_map[cpu] == NO_PROC_ID) {
  1013. smp_num_siblings = 1;
  1014. printk(KERN_WARNING "WARNING: No sibling found for CPU %d.n", cpu);
  1015. }
  1016. }
  1017. }
  1018.      
  1019. #ifndef CONFIG_VISWS
  1020. /*
  1021.  * Here we can be sure that there is an IO-APIC in the system. Let's
  1022.  * go and set it up:
  1023.  */
  1024. if (!skip_ioapic_setup && nr_ioapics)
  1025. setup_IO_APIC();
  1026. #endif
  1027. /*
  1028.  * Set up all local APIC timers in the system:
  1029.  */
  1030. setup_APIC_clocks();
  1031. /*
  1032.  * Synchronize the TSC with the AP
  1033.  */
  1034. if (cpu_has_tsc && cpucount)
  1035. synchronize_tsc_bp();
  1036. smp_done:
  1037. zap_low_mappings();
  1038. }