freebsd-dev/sys/amd64/isa
peter bb717e117a Revive backed out pmap related changes from Feb 2002. The highlights are:
- It actually works this time, honest!
- Fine grained TLB shootdowns for SMP on i386.  IPI's are very expensive,
  so try and optimize things where possible.
- Introduce ranged shootdowns that can be done as a single IPI.
- PG_G support for i386
- Specific-cpu targeted shootdowns.  For example, there is no sense in
  globally purging the TLB cache for where we are stealing a page from
  the local unshared process on the local cpu.  Use pm_active to track
  this.
- Add some instrumentation for the tlb shootdown code.
- Rip out SMP code from <machine/cpufunc.h>
- Try and fix some very bogus PG_G and PG_PS interactions that were bad
  enough to cause vm86 bios calls to break.  vm86 depended on our existing
  bugs and this was the cause of the VESA panics last time.
- Fix the silly one-line error that caused the 'panic: bad pte' last time.
- Fix a couple of other silly one-line errors that should have caused more
  pain than they did.

Some more work is needed:
- pmap_{zero,copy}_page[_idle].  These can be done without IPI's if we
  have a hook in cpu_switch.
- The IPI handlers need some cleanup.  I have a bogus %ds load that can
  be avoided.
- APTD handling is rather bogus and appears to be a large source of
  global TLB IPI shootdowns for no really good reason.

I see speedups of between 1.5% and ~4% on buildworlds in a while 1 loop.
I expect to see a bigger difference when there is significant pageout
activity or the system otherwise has memory shortages.

I have backed out a few optimizations that I had been using over the last
few days in order to be a little more conservative.  I'll revisit these
again over the next few days as the dust settles.

New option:  DISABLE_PG_G - In case I missed something.
2002-07-12 07:56:11 +00:00
..
atpic_vector.S Move ICU_* defines into icu.h. 2002-04-06 08:25:05 +00:00
clock.c Clock frequencies reported by sysctl should be unsigned values. Discovered 2002-06-22 16:30:18 +00:00
icu_ipl.s Move ICU_* defines into icu.h. 2002-04-06 08:25:05 +00:00
icu_ipl.S Move ICU_* defines into icu.h. 2002-04-06 08:25:05 +00:00
icu_vector.s Move ICU_* defines into icu.h. 2002-04-06 08:25:05 +00:00
icu_vector.S Move ICU_* defines into icu.h. 2002-04-06 08:25:05 +00:00
icu.h Move ICU_* defines into icu.h. 2002-04-06 08:25:05 +00:00
intr_machdep.c The clock is already allocated as 'fast' - no need to try and intercept a 2002-07-08 09:12:22 +00:00
intr_machdep.h Revive backed out pmap related changes from Feb 2002. The highlights are: 2002-07-12 07:56:11 +00:00
isa_dma.c Tidy up some loose ends. 2002-04-29 07:43:16 +00:00
isa_dma.h Remove __P. 2002-03-20 07:51:46 +00:00
isa.c - Split the routine to initialize a bus_space_handle into the separate 2002-02-17 09:16:45 +00:00
isa.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
ithread.c Removed unused includes. In particular, don't include <isa/isavar.h> since 2002-01-30 12:23:49 +00:00
nmi.c The clock is already allocated as 'fast' - no need to try and intercept a 2002-07-08 09:12:22 +00:00
npx.c Compromise for critical*()/cpu_critical*() recommit. Cleanup the interrupt 2002-03-27 05:39:23 +00:00
timerreg.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
vector.s Introduce a standard name for the lock protecting an interrupt controller 2001-12-20 23:48:31 +00:00
vector.S Introduce a standard name for the lock protecting an interrupt controller 2001-12-20 23:48:31 +00:00