patch-2.4.21 linux-2.4.21/arch/x86_64/kernel/smpboot.c
Next file: linux-2.4.21/arch/x86_64/kernel/sys_x86_64.c
Previous file: linux-2.4.21/arch/x86_64/kernel/smp.c
Back to the patch index
Back to the overall index
- Lines: 93
- Date:
2003-06-13 07:51:32.000000000 -0700
- Orig file:
linux-2.4.20/arch/x86_64/kernel/smpboot.c
- Orig date:
2002-11-28 15:53:12.000000000 -0800
diff -urN linux-2.4.20/arch/x86_64/kernel/smpboot.c linux-2.4.21/arch/x86_64/kernel/smpboot.c
@@ -76,6 +76,8 @@
/* Set when the idlers are all forked */
int smp_threads_ready;
+extern void time_init_smp(void);
+
/*
* Setup routine for controlling SMP activation
*
@@ -236,12 +238,16 @@
*/
atomic_inc(&tsc_count_start);
+ sync_core();
rdtscll(tsc_values[smp_processor_id()]);
+
/*
* We clear the TSC in the last loop:
*/
- if (i == NR_LOOPS-1)
+
+ if (i == NR_LOOPS-1) {
write_tsc(0, 0);
+ }
/*
* Wait for all APs to leave the synchronization point:
@@ -302,6 +308,7 @@
atomic_inc(&tsc_count_start);
while (atomic_read(&tsc_count_start) != smp_num_cpus) mb();
+ sync_core();
rdtscll(tsc_values[smp_processor_id()]);
if (i == NR_LOOPS-1)
write_tsc(0, 0);
@@ -403,8 +410,6 @@
*/
smp_store_cpu_info(cpuid);
- notify_die(DIE_CPUINIT, "cpuinit", NULL, 0);
-
/*
* Allow the master to continue.
*/
@@ -772,7 +777,7 @@
static __init void smp_tune_scheduling (void)
{
unsigned long cachesize; /* kB */
- unsigned long bandwidth = 350; /* MB/s */
+ unsigned long bandwidth = 2000; /* MB/s */
/*
* Rough estimation for SMP scheduling, this is the number of
* cycles it takes for a fully memory-limited process to flush
@@ -801,6 +806,8 @@
cacheflush_time = (cpu_khz>>10) * (cachesize<<10) / bandwidth;
}
+ cacheflush_time *= 10; /* Add an NUMA factor */
+
printk("per-CPU timeslice cutoff: %ld.%02ld usecs.\n",
(long)cacheflush_time/(cpu_khz/1000),
((long)cacheflush_time*100/(cpu_khz/1000)) % 100);
@@ -888,6 +895,7 @@
io_apic_irqs = 0;
cpu_online_map = phys_cpu_present_map = 1;
smp_num_cpus = 1;
+ apic_disabled = 1;
goto smp_done;
}
@@ -902,6 +910,7 @@
io_apic_irqs = 0;
cpu_online_map = phys_cpu_present_map = 1;
smp_num_cpus = 1;
+ apic_disabled = 1;
goto smp_done;
}
@@ -989,6 +998,8 @@
*/
if (!skip_ioapic_setup && nr_ioapics)
setup_IO_APIC();
+ else
+ nr_ioapics = 0;
/*
* Set up all local APIC timers in the system:
@@ -1003,4 +1014,5 @@
smp_done:
zap_low_mappings();
+ time_init_smp();
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)