| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
Notes:
svn path=/head/; revision=33181
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- A nonprofiling version of s_lock (called s_lock_np) is used
by mcount.
- When profiling is active, more registers are clobbered in
seemingly simple assembly routines. This means that some
callers needed to save/restore extra registers.
- The stack pointer must have space for a 'fake' return address
in idle, to avoid stack underflow.
Notes:
svn path=/head/; revision=31723
|
| |
|
|
|
|
|
| |
when a panic has occured.
Notes:
svn path=/head/; revision=31720
|
| |
|
|
|
|
|
| |
Problem found by: Bruce Evans <bde@zeta.org.au>
Notes:
svn path=/head/; revision=31689
|
| |
|
|
|
|
|
|
|
|
| |
Wrappered and enabled by the define BETTER_CLOCK (on by default in smpyests.h)
Reviewed by: smp@csn.net
Submitted by: Tor Egge <Tor.Egge@idi.ntnu.no>
Notes:
svn path=/head/; revision=31639
|
| |
|
|
| |
Notes:
svn path=/head/; revision=31030
|
| |
|
|
| |
Notes:
svn path=/head/; revision=30813
|
| |
|
|
| |
Notes:
svn path=/head/; revision=30343
|
| |
|
|
|
|
|
|
| |
on by the files that use it. Changing the VM86 option now only causes
a recompile of a dozen files or so rather than the entire kernel.
Notes:
svn path=/head/; revision=30265
|
| |
|
|
|
|
|
| |
the mtrr registers. This just fills in more of the registers.
Notes:
svn path=/head/; revision=30136
|
| |
|
|
|
|
|
|
|
| |
in a P6 SMP system. Some MB bios'es don't set the registers up correctly
for the AP's. Additionally, set the memory between 0xa0000 and 0xbffff
as write combining.
Notes:
svn path=/head/; revision=30112
|
| |
|
|
| |
Notes:
svn path=/head/; revision=29663
|
| |
|
|
| |
Notes:
svn path=/head/; revision=29655
|
| |
|
|
|
|
|
|
|
|
|
|
| |
from machine/smptests.h:
#define PUSHDOWN_LEVEL_1
#define PUSHDOWN_LEVEL_2
#define PUSHDOWN_LEVEL_3
#define PUSHDOWN_LEVEL_4_NOT
Notes:
svn path=/head/; revision=29213
|
| |
|
|
| |
Notes:
svn path=/head/; revision=28999
|
| |
|
|
|
|
|
|
|
| |
LINT now compiles but doesn't link. Other link-time breakage for LINT
is now visible (SMP is incompatible with SIMPLELOCK_DEBUG).
Submitted by: jlemon
Notes:
svn path=/head/; revision=28984
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
holding CPU along with the lock. When a CPU fails to get the lock
it compares its own id to the holder id. If they are the same it
panic()s, as simple locks are binary, and this would cause a deadlock.
Controlled by smptests.h: SL_DEBUG, ON by default.
Some minor cleanup.
Notes:
svn path=/head/; revision=28951
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Add a simplelock to deal with disable_intr()/enable_intr() as used in UP kernel.
UP kernel expects that this is enough to guarantee exclusive access to
regions of code bracketed by these 2 functions.
Add a simplelock to bracket clock accesses in clock.c: clock_lock.
Help from: Bruce Evans <bde@zeta.org.au>
Notes:
svn path=/head/; revision=28921
|
| |
|
|
|
|
|
|
|
|
| |
smp_active = 1 used to indicate that the system had frozen previously
started AP's, while smp_active = 0 was "AP's not yet started". I have split
this into smp_started (which is set when the AP's come online), and
smp_active is left for turning on/off AP scheduling.
Notes:
svn path=/head/; revision=28809
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- We now have enough per-cpu idle context, the real idle loop has been
revived (cpu's halt now with nothing to do).
- Some preliminary support for running some operations outside the
global lock (eg: zeroing "free but not yet zeroed pages") is present
but appears to cause problems. Off by default.
- the smp_active sysctl now behaves differently. It's merely a 'true/false'
option. Setting smp_active to zero causes the AP's to halt in the idle
loop and stop scheduling processes.
- bootstrap is a lot safer. Instead of sharing a statically compiled in
stack a number of times (which has caused lots of problems) and then
abandoning it, we use the idle context to boot the AP's directly. This
should help >2 cpu support since the bootlock stuff was in doubt.
- print physical apic id in traps.. helps identify private pages getting
out of sync. (You don't want to know how much hair I tore out with this!)
More cleanup to follow, this is more of a checkpoint than a
'finished' thing.
Notes:
svn path=/head/; revision=28808
|
| |
|
|
| |
Notes:
svn path=/head/; revision=28743
|
| |
|
|
|
|
|
|
|
|
|
| |
Added a new variable, 'bsp_apic_ready', which is set as soon as the bootstrap
CPU has initialized its local APIC. Conditionalize the GENSPLR functions
to call ss_lock ONLY after bsp_apic_ready is TRUE; This should prevent
any problems with races between the time the 1st AP becomes ready and the
time smp_active is set.
Notes:
svn path=/head/; revision=28669
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Made NEW_STRATEGY default.
Removed misc. old cruft.
Centralized simple locks into mp_machdep.c
Centralized simple lock macros into param.h
More cleanup in the direction of making splxx()/cpl MP-safe.
Notes:
svn path=/head/; revision=28487
|
| |
|
|
|
|
|
|
|
|
|
| |
Several new fine-grained locks.
New FAST_INTR() methods:
- separate simplelock for FAST_INTR, no more giant lock.
- FAST_INTR()s no longer checks ipending on way out of ISR.
sio made MP-safe (I hope).
Notes:
svn path=/head/; revision=28442
|
| |
|
|
|
|
|
| |
If the problem is seen this fix suggests a compile-time work-around then panics.
Notes:
svn path=/head/; revision=28041
|
| |
|
|
|
|
|
|
|
| |
Still not fixed, no idea why.
Debug help from: "Thomas D. Dean" <tomdean@ix.netcom.com>
Notes:
svn path=/head/; revision=28027
|
| |
|
|
|
|
|
|
| |
Created mplock functions that save/restore NO registers.
Minor cleanup.
Notes:
svn path=/head/; revision=27780
|
| |
|
|
|
|
|
| |
Noticed by: dave adkins <adkin003@gold.tc.umn.edu> and others.
Notes:
svn path=/head/; revision=27728
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- removed TEST_ALTTIMER.
- removed APIC_PIN0_TIMER.
- removed TIMER_ALL.
mplock.s:
- minor update of try_mplock for new algorithm where a CPU uses try_mplock
instead of get_mplock in the ISRs.
Notes:
svn path=/head/; revision=27697
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- s_lock_init()
- s_lock()
- s_lock_try()
- s_unlock()
Created lock for IO APIC and apic_imen (SMP version of imen)
- imen_lock
Code to use imen_lock for access from apic_ipl.s and apic_vector.s.
Moved this code *outside* of mp_lock.
It seems to work!!!
Notes:
svn path=/head/; revision=27634
|
| |
|
|
| |
Notes:
svn path=/head/; revision=27563
|
| |
|
|
|
|
|
|
| |
Pass string arg to apic_dump.
Moved bootverbose printing of SMP enabled INTs from clock.c to autoconf.c
Notes:
svn path=/head/; revision=27561
|
| |
|
|
| |
Notes:
svn path=/head/; revision=27535
|
| |
|
|
|
|
|
|
| |
This code ALWAYS runs the 8254 timer thru the 8259 ICU.
It depricates the usage of "options SMP_TIMER_NC" in the config file.
Notes:
svn path=/head/; revision=27523
|
| |
|
|
| |
Notes:
svn path=/head/; revision=27517
|
| |
|
|
| |
Notes:
svn path=/head/; revision=27489
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1) Make sure that the region mapped by a 4MB page is
properly aligned.
2) Don't turn on the PG_G flag in locore for SMP. I plan
to do that later in startup anyway.
3) Make sure the 2nd processor has PSE enabled, so that 4MB
pages don't hose it.
We don't use PG_G yet on SMP -- there is work to be done to make that
work correctly. It isn't that important anyway...
Notes:
svn path=/head/; revision=27484
|
| |
|
|
|
|
|
|
|
|
| |
this code is controlled by smptests.h: TEST_CPUSTOP, OFF by default
new code for handling mixed-mode 8259/APIC programming without 'ExtInt'
this code is controlled by smptests.h: TEST_ALTTIMER, ON by default
Notes:
svn path=/head/; revision=27353
|
| |
|
|
|
|
|
| |
stop_cpus()/restart_cpus() STILL not working!
Notes:
svn path=/head/; revision=27289
|
| |
|
|
|
|
|
| |
restart_cpus(), currently BROKEN! (turned off in smptests.h by default).
Notes:
svn path=/head/; revision=27255
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
General cleanup.
New functions to stop/start CPUs via IPIs:
- int stop_cpus( u_int map );
- int restart_cpus( u_int map );
Turned off by default, enabled via smptests.h:TEST_CPUSTOP.
Current version has a BUG, perhaps a deadlock?
Notes:
svn path=/head/; revision=27005
|
| |
|
|
|
|
|
|
|
| |
Till now NMIs would be ignored. Now an NMI is caught by the BSP.
APs still ignore NMI, am working on code to allow a CPU to stop other CPUs
via an IPI.
Notes:
svn path=/head/; revision=27001
|
| |
|
|
|
|
|
|
|
| |
- get_isa_apic_mask() -> isa_apic_mask()
- get_isa_apic_irq() && get_eisa_apic_irq() -> isa_apic_pin()
- get_pci_apic_irq() -> pci_apic_pin()
Notes:
svn path=/head/; revision=26950
|
| |
|
|
|
|
|
| |
This fixes one of the problems noted in PR kern/3688.
Notes:
svn path=/head/; revision=26896
|
| |
|
|
|
|
|
| |
We now use LOGICAL, not PHYSICAL, IDs to calculate the mplock.
Notes:
svn path=/head/; revision=26886
|
| |
|
|
| |
Notes:
svn path=/head/; revision=26882
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This eliminates a lot of #ifdef SMP type code. Things like _curproc reside
in a data page that is unique on each cpu, eliminating the expensive macros
like: #define curproc (SMPcurproc[cpunumber()])
There are some unresolved bootstrap and address space sharing issues at
present, but Steve is waiting on this for other work. There is still some
strictly temporary code present that isn't exactly pretty.
This is part of a larger change that has run into some bumps, this part is
standalone so it should be safe. The temporary code goes away when the
full idle cpu support is finished.
Reviewed by: fsmp, dyson
Notes:
svn path=/head/; revision=26812
|
| |
|
|
| |
Notes:
svn path=/head/; revision=26379
|
| |
|
|
|
|
|
|
|
| |
Changes to pmap.c for lapic_t lapic && ioapic_t ioapic pointers,
currently equal to apic_base && io_apic_base, will stand alone with the
private page mapping.
Notes:
svn path=/head/; revision=26270
|
| |
|
|
| |
Notes:
svn path=/head/; revision=26266
|