aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/kernel/smpboot.c25
1 files changed, 5 insertions, 20 deletions
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c
index ddc392bee243..f2a234b390e8 100644
--- a/arch/x86_64/kernel/smpboot.c
+++ b/arch/x86_64/kernel/smpboot.c
@@ -429,8 +429,8 @@ static void inquire_remote_apic(int apicid)
429 */ 429 */
430static int __cpuinit wakeup_secondary_via_INIT(int phys_apicid, unsigned int start_rip) 430static int __cpuinit wakeup_secondary_via_INIT(int phys_apicid, unsigned int start_rip)
431{ 431{
432 unsigned long send_status = 0, accept_status = 0; 432 unsigned long send_status, accept_status = 0;
433 int maxlvt, timeout, num_starts, j; 433 int maxlvt, num_starts, j;
434 434
435 Dprintk("Asserting INIT.\n"); 435 Dprintk("Asserting INIT.\n");
436 436
@@ -446,12 +446,7 @@ static int __cpuinit wakeup_secondary_via_INIT(int phys_apicid, unsigned int sta
446 | APIC_DM_INIT); 446 | APIC_DM_INIT);
447 447
448 Dprintk("Waiting for send to finish...\n"); 448 Dprintk("Waiting for send to finish...\n");
449 timeout = 0; 449 send_status = safe_apic_wait_icr_idle();
450 do {
451 Dprintk("+");
452 udelay(100);
453 send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
454 } while (send_status && (timeout++ < 1000));
455 450
456 mdelay(10); 451 mdelay(10);
457 452
@@ -464,12 +459,7 @@ static int __cpuinit wakeup_secondary_via_INIT(int phys_apicid, unsigned int sta
464 apic_write(APIC_ICR, APIC_INT_LEVELTRIG | APIC_DM_INIT); 459 apic_write(APIC_ICR, APIC_INT_LEVELTRIG | APIC_DM_INIT);
465 460
466 Dprintk("Waiting for send to finish...\n"); 461 Dprintk("Waiting for send to finish...\n");
467 timeout = 0; 462 send_status = safe_apic_wait_icr_idle();
468 do {
469 Dprintk("+");
470 udelay(100);
471 send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
472 } while (send_status && (timeout++ < 1000));
473 463
474 mb(); 464 mb();
475 atomic_set(&init_deasserted, 1); 465 atomic_set(&init_deasserted, 1);
@@ -508,12 +498,7 @@ static int __cpuinit wakeup_secondary_via_INIT(int phys_apicid, unsigned int sta
508 Dprintk("Startup point 1.\n"); 498 Dprintk("Startup point 1.\n");
509 499
510 Dprintk("Waiting for send to finish...\n"); 500 Dprintk("Waiting for send to finish...\n");
511 timeout = 0; 501 send_status = safe_apic_wait_icr_idle();
512 do {
513 Dprintk("+");
514 udelay(100);
515 send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
516 } while (send_status && (timeout++ < 1000));
517 502
518 /* 503 /*
519 * Give the other CPU some time to accept the IPI. 504 * Give the other CPU some time to accept the IPI.