Commit Graph

83 Commits

Author SHA1 Message Date
chris 8298c55eab Correct comments for ffs algoritm (it isn't using register r0) 2001-11-11 22:07:41 +00:00
thorpej 671a1b111f Print the fault PC for non-USR Prefetch Aborts. 2001-11-09 19:04:23 +00:00
thorpej 42a10f6cd4 Implement a badaddr_read() routine which performs a load of the
specified size for the caller, and returns true or false indicating
whether or not a Data Abort occurred (i.e. the address was "bad").
2001-11-09 17:58:00 +00:00
thorpej 147b1bdc1c Add some rudimentary support for ELF symbols in DDB on the ARM ports.
On platforms which load the kernel sans symbols directly from firmware
(possibly in e.g. S-Record format), call ddb_init() with empty arguments,
so that it will search any compiled in SYMTAB_SPACE.  On all other platforms,
if __ELF__, also call ddb_init() with empty arguments until ELF bootloaders
which pass symbol information are ready.
2001-11-09 07:21:37 +00:00
thorpej 46309d6bc6 Const poisoning of cpu/class names. 2001-11-06 20:39:13 +00:00
thorpej 5b3f78d953 "i80200", not "80200". 2001-11-06 20:02:13 +00:00
thorpej f12c8ee306 "XScale", not "Xscale". 2001-11-06 19:59:43 +00:00
rearnsha e4fff4a560 Replace most uses of pmap_pde_p with pmap_pde_page, since that is what
we need later in the code.  This fixes a fatal kernel fault in
pmap_modified_emulation if a user application tries to access a kernel
address that is section-mapped.

Add a diagnostic that detects attempts to call pmap_kenter_pa with a
va that is section-mapped.
2001-11-03 00:06:02 +00:00
rearnsha 87cb8af648 When clearing the modified bit for modified emulation, don't turn
caching on for a page just because we are clearing the writable bit in
the PTE: this is incompatible with the way pmap_vac_me_harder works,
and the code in the modified emulation handler doesn't know about
recalculating the cachable attributes (nor should it, IMO).

Also, if we are invalidating a page, flush its TLB entry; for some
reason we were only doing this when clearing the Write or modified
bits.

These patches together seem to solve the random seg-faults that were
still occuring occasionally under heavy paging.
2001-11-01 15:49:16 +00:00
rearnsha 839525d027 When creating section maps, use pte_cache_mode for setting the
page attributes of cacheable pages.
2001-10-27 16:51:44 +00:00
rearnsha 9a322ae54f Set initial spl level to SPL_SERIAL, which for some strange reason
is higher than SPL_HIGH (maybe we should be fixing SPL_HIGH).

If IPL_STATCLOCK is defined, initialize spl_masks[_SPL_STATCLOCK] from
it; otherwise initialize use IPL_CLOCK.
2001-10-27 16:41:00 +00:00
rearnsha 8a92dcdaa8 Pull in machine/conf.h to find out if we have the plcom serial driver.
If so, then call plcomsoft when appropriate.
2001-10-27 16:34:12 +00:00
rearnsha 4487810503 Add the IFPGA console device. 2001-10-27 16:29:23 +00:00
rearnsha 81fc80144a Add a comment describing the logic implemented by pmap_vac_me_harder. 2001-10-18 18:15:56 +00:00
rearnsha b5a8c6922a On processors that support both write-through and write-back cacheing
(eg ARM920), the mode in which the processor operates is governed by
the use of both the PT_C and PT_B bits:

	PT_C=1,PT_B=1 -> Write-back
	PT_C=1,PT_B=0 -> Write-through

To support this define pte_cache_mode (initialized to PT_C|PT_B) and
use that when enabling cacheing for a page.
2001-10-18 17:06:14 +00:00
rearnsha 7de86d9ccd With a diagnostic kernel, printing out a message each time we fail
to allocate a L1 pt is often enough to bring the system to its knees:
so make the messages PDEBUG(0,...).

However, even with this step having more than a small number of
processes searching for a L1 pt can still be enough to bring the system
down, since they all run at high priority and sleep for very little time,
thus blocking out user code from completing.  So implement an exponential
backoff when waiting for a page table, so that we don't hog the CPU when
memory is scarce.

Tested by running a make of the C compiler with "gnumake -j30" (and plenty
of swap space).
2001-10-18 16:50:30 +00:00
rearnsha d447073383 Fix pmap_vac_me_harder to take into account pages that are mapped
into both kernel and user space.

Fixes port-arm32/13998.
2001-10-18 16:32:40 +00:00
rearnsha bc8cd3375d Support for ARM9. 2001-10-18 15:19:58 +00:00
rearnsha 2c48187673 Don't unmap page 0 when preparing to swap out a process. If the pmap
is shared with another process (as can happen if vfork is being used),
then that other process will end up not having a page 0, which is bad
news indeed, since then there is no way back into the kernel.

Found this using a multi-ice box, so they are useful after all!

This seems to fix pr port-arm32/11921 and (possibly) kern/9859.
2001-10-18 09:26:08 +00:00
chris 5f0c745782 Add a couple of simplelocks to make sure we call pagealloc with the uvm_object locked. Found while running a LOCKDEBUG kernel on cats. 2001-09-29 09:39:12 +00:00
chris fa742cde19 Tweak spl functions a little, try to do something between an ldr and it's use. Not the greatest of gains but spl is called a lot it might add up.
Also add comments stating alignment of stack.
2001-09-28 10:01:02 +00:00
chris 38f962d504 Note the alignment state of the stack. This is part of the work to get the stack 8byte aligned for ELF 2001-09-28 09:56:03 +00:00
chris 79f5d977e0 Add extra arg to fpa_test as it should have 4 args. Also add prototypes for fpa_test and fpa_handler. 2001-09-28 09:53:41 +00:00
chris 8fd1ceb7bf Fix bug in vmapbuf, was using len before it had been adjusted. Found by Frank while Luke was tracking down a bug. 2001-09-20 23:32:23 +00:00
matt ec78dd0fce Add missing devices (IOP,MLX,MLY,LD), PCI, stub AGP, ... 2001-09-16 17:40:40 +00:00
matt d75fe4fc1e Fix .type which uses wrong symbol name. 2001-09-16 17:38:08 +00:00
chs 64c6d1d2dc a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps.  this is
   required now, since I've removed the globals that expose the address range.
   pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's
   no longer any need to special-case it.
 - eliminate struct uvm_vnode by moving its fields into struct vnode.
 - rewrite the pageout path.  the pager is now responsible for handling the
   high-level requests instead of only getting control after a bunch of work
   has already been done on its behalf.  this will allow us to UBCify LFS,
   which needs tighter control over its pages than other filesystems do.
   writing a page to disk no longer requires making it read-only, which
   allows us to write wired pages without causing all kinds of havoc.
 - use a new PG_PAGEOUT flag to indicate that a page should be freed
   on behalf of the pagedaemon when it's unlocked.  this flag is very similar
   to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the
   pageout fails due to eg. an indirect-block buffer being locked.
   this allows us to remove the "version" field from struct vm_page,
   and together with shrinking "loan_count" from 32 bits to 16,
   struct vm_page is now 4 bytes smaller.
 - no longer use PG_RELEASED for swap-backed pages.  if the page is busy
   because it's being paged out, we can't release the swap slot to be
   reallocated until that write is complete, but unlike with vnodes we
   don't keep a count of in-progress writes so there's no good way to
   know when the write is done.  instead, when we need to free a busy
   swap-backed page, just sleep until we can get it busy ourselves.
 - implement a fast-path for extending writes which allows us to avoid
   zeroing new pages.  this substantially reduces cpu usage.
 - encapsulate the data used by the genfs code in a struct genfs_node,
   which must be the first element of the filesystem-specific vnode data
   for filesystems which use genfs_{get,put}pages().
 - eliminate many of the UVM pagerops, since they aren't needed anymore
   now that the pager "put" operation is a higher-level operation.
 - enhance the genfs code to allow NFS to use the genfs_{get,put}pages
   instead of a modified copy.
 - clean up struct vnode by removing all the fields that used to be used by
   the vfs_cluster.c code (which we don't use anymore with UBC).
 - remove kmem_object and mb_object since they were useless.
   instead of allocating pages to these objects, we now just allocate
   pages with no object.  such pages are mapped in the kernel until they
   are freed, so we can use the mapping to find the page to free it.
   this allows us to remove splvm() protection in several places.

The sum of all these changes improves write throughput on my
decstation 5000/200 to within 1% of the rate of NetBSD 1.5
and reduces the elapsed time for "make release" of a NetBSD 1.5
source tree on my 128MB pc to 10% less than a 1.5 kernel took.
2001-09-15 20:36:31 +00:00
chris 5cb5484ce3 Sprinkle some static and inline into a couple of functions. Remove dead entries from pmap.h. 2001-09-13 23:56:01 +00:00
chris 5695ad388d Update pmap_clearbit to flush the cache if the area is being made readonly. Also only do this and the tlb flush if the pmap is the current pmap. 2001-09-13 22:45:23 +00:00
rearnsha 9358e3ecc3 Fix warning errors for printing size_t types when compiling with
DEBUG_DMA (uses casts due to a.out and ELF having different base
types for size_t).
2001-09-12 09:41:50 +00:00
chris bd81d66bb5 Update the pmap following some comments from Chuck Silvers:
Remove some overzealous locking of HEAD_TO_MAP
Remove a potential deadlock in pmap_copy_page
Change alloc and free l1pt to use kenter/kremove.
Update pmap_map to use kenter (only actually used by dumpsys, so no matching kremove)
2001-09-10 23:40:02 +00:00
chris 0e7661f023 Update pmap_update to now take the updated pmap as an argument.
This will allow improvements to the pmaps so that they can more easily defer expensive operations, eg tlb/cache flush, til the last possible moment.

Currently this is a no-op on most platforms, so they should see no difference.

Reviewed by Jason.
2001-09-10 21:19:08 +00:00
toshii 7c9e82d6e3 Don't define pcb_* register macros.
pcb_sp macro conflicts with sys/netinet6/ipsec.c.
2001-09-09 10:33:42 +00:00
toshii b45ffd445a Readd sacom to cdevsw. 2001-09-09 09:54:13 +00:00
matt ff5f5ea027 Don't compile SPL/INTR stuff if NEWINTR is defined. 2001-09-05 17:08:41 +00:00
matt 0b5b9ca90e Change <machine/irqhandler.h> to <machine/intr.h>. Change
{irq,fiq}handler_t to struct XXXhandler
2001-09-05 16:23:10 +00:00
matt 792b7ebd13 Change <machine/irqhandler.h> to <machine/intr.h> since the latter always
includes the former and is a standard include file.
2001-09-05 16:17:35 +00:00
matt 4370f884b2 Flesh XSCALE support. 2001-09-05 16:13:18 +00:00
wiz b940fa8a83 Fix typos (CONS instead of CONF, and specifc instead of specific). 2001-09-04 21:45:19 +00:00
matt b0f89169ee Switch netwinder to use a common conf.c for the arm ports. 2001-09-03 01:50:00 +00:00
chris 37fb92dcab Remove unused entries from the pcb. This is with a long term view of merging the arm26 and arm32 pcb's. 2001-08-27 11:39:43 +00:00
chris 140252be2b Arm has a vac, so we must use pmap_enter/remove for vmapbuf rather than k* versions, otherwise we may not be doing the right caching thing. 2001-08-20 21:52:09 +00:00
jdolecek c495131fe3 Move _insque()/_remque() to libkern. Once remaining uses would
be converted to <sys/queue.h> macros, _insque()/_remque() would be eliminated
altogether.
2001-08-12 08:35:31 +00:00
chris 0b0518e0dd Fix compile without DIAGNOSTICs enabled 2001-08-11 14:47:56 +00:00
chris 191de4d242 Checking a whole host of pmap changes:
Improved locking (not that we actually use it on a uniprocessor, but one day :)
Removed unneeded splvm's
tweaked pmap_clean_page code to only flush the cache if the page is mapped in the current pmap  (based on diff from richard E)
Adopted pv entry allocation mechanism from i386.
Laid framework for returning ptp's when we've finished with them rather than holding onto them till the process exits.
ptp's are now allocated with a uvm object for the pmap, means that we can walk a list to free them off in pmap_release, until they get freed off by pmap_remove.

Also implemented a page zeroing function when the processor is idling.  Note that hpcarm may wish to disable this.

I believe this code to be stable, if anyone has any problems please shout up.
2001-08-11 13:20:19 +00:00
chris c5de587666 Make use of pmap_kenter instead of pmap_enter for kernel buffers. 2001-08-11 13:00:48 +00:00
chris 6cca1c3f58 Update to make use of a proper kenter implementation for vmapbuf and vunmapbuf. 2001-08-11 12:57:25 +00:00
chris 6e43d02452 Patch in Richard E's changes to bcopy page, the loop doesn't need unrolling as much as it currently is due to the overhead of the load/stores taking most of the time. (profiling shows minimal time difference) 2001-08-11 12:44:42 +00:00
chris 9522cf08d4 Share procfs_machdep.c across arm. 2001-08-05 13:09:45 +00:00
matt 9509e734a3 Force size_t formats/arge to be (u_long). I'd use 'z' for this but gcc
2.95.3
2001-08-05 05:07:27 +00:00