Commit Graph

2728 Commits

Author SHA1 Message Date
ross d6a25f9b02 Add DEBUGLIST mechanism. Example config line:
makeoptions DEBUGLIST="uvm* trap ufs*"
This turns on -g for only those files matching a DEBUGLIST pattern word.
2001-05-08 05:47:35 +00:00
ad 14ad1926a8 Add mlx at eisa. 2001-05-06 20:32:20 +00:00
thorpej 18c5f91b0b Fix a deadlock cause by a lock ordering interaction between pmap_enter()
and pmap_growkernel().
2001-05-05 18:22:04 +00:00
thorpej 18639a81be No need to have code we don't use anymore. 2001-05-05 02:20:53 +00:00
thorpej fcbf0b9d21 Add systype for "Titan" systems (systype 38). 2001-05-03 20:52:19 +00:00
scw 2963ff5c58 Add `l_poll' to `struct linesw' and provide an xxxpoll() entry point
in each tty driver to indirect through it.

This allows tty line-disciplines to handle poll(2) system calls.
2001-05-02 10:32:08 +00:00
thorpej cfda5afaa5 Add some page coloring defaults. 2001-05-02 02:30:30 +00:00
thorpej 5291142217 Determine the size of the B-Cache earier, and initialize the
number of page colors accordingly.
2001-05-02 01:24:29 +00:00
thorpej 05dac31b1e Initialize the VM page size before calling the platform init routine. 2001-05-02 01:05:16 +00:00
ross 43c3cc6cc0 Fix lock problems with error flow reorg. 2001-05-01 05:53:29 +00:00
thorpej cf3594e27e Delete the pmap_copy() calls. 2001-05-01 05:33:12 +00:00
thorpej 72a57e578e Use CPU_INFO_FOREACH(). 2001-05-01 05:16:44 +00:00
thorpej ed63ff3c52 Use a single linked list for PV entries. This saves 1MB of space
on my 1G RAM AlphaServer.
2001-05-01 02:53:05 +00:00
thorpej cf67ac7122 Per discussion w/ chuck and chuck, restructure the md page stuff
to use a structure called "vm_page_md", and use __HAVE_VM_PAGE_MD
and __HAVE_PMAP_PHYSSEG.
2001-05-01 02:19:13 +00:00
ross 613d465e10 apply recent changes to DEBUG code 2001-04-30 19:00:41 +00:00
thorpej 2b27ac7a99 Add a VM_MDPAGE_MEMBERS macro that defines pmap-specific data for
each vm_page structure.  Add a VM_MDPAGE_INIT() macro to init this
data when pages are initialized by UVM.  These macros are mandatory,
but ports may #define them to nothing if they are not needed/used.

This deprecates struct pmap_physseg.  As a transitional measure,
allow a port to #define PMAP_PHYSSEG so that it can continue to
use it until its pmap is converted to use VM_MDPAGE_MEMBERS.

Use all this stuff to eliminate a lot of extra work in the Alpha
pmap module (it's smaller and faster now).  Changes to other pmap
modules will follow.
2001-04-29 22:44:31 +00:00
sommerfeld a80b986278 Correct microtime() to use the microsecond part of the base timestamp. 2001-04-29 17:04:41 +00:00
thorpej f38e77afea Add glue for page zero'ing in the idle loop. 2001-04-29 06:54:03 +00:00
thorpej a96fcfa38c Disable the optimized in4_cksum() for now -- there seem to be problems. 2001-04-29 05:54:29 +00:00
thorpej cee702b869 Optimized in4_cksum(). 2001-04-29 03:29:21 +00:00
kleink fe3c9ceaf7 * Move definitions of exact-width integer types from <machine/types.h>
to <sys/types.h> and <sys/stdint.h>.
* Add a new C99 <stdint.h> header, which provides integer types of
  explicit width, related limits and integer constant macros.
* Extend <inttypes.h> to provide <stdint.h> definitions and format
  macros for printf() and scanf().
* Add C99 strtoimax() and strtoumax() functions.
* Use the latter within scanf().
* Add C99 %j, %t and %z printf()/scanf() conversions for
  intmax_t, pointer-type and size_t arguments.
2001-04-28 15:41:28 +00:00
thorpej 53c1b3f9d7 Add a microtime() implementation that interpolates between ticks
using the cycle counter.  MP-safeness is achieved by giving each
CPU its own PCC frequency variables, and kicking the non-primary
processors via an IPI once per second.

Based on the sample code from David Mills' "A Kernel Model for
Precision Timekeeping".
2001-04-28 06:10:49 +00:00
kleink 99054d7a6c Add definitions for C99 fastest minimum-width integer types. 2001-04-26 16:25:19 +00:00
ross 32edf97089 Move fp_complete() outside kernel lock perimeter. 2001-04-26 04:21:35 +00:00
ross b569533b9a Clean up 3 comments. 2001-04-26 04:16:17 +00:00
ross 2df695b1e4 o IEEE 754 floating-point completion code.
o Implement the architected FP_C "Floating Point Control Quadword"
2001-04-26 03:10:44 +00:00
bouyer 937a7a3ed9 Pull up the thorpej_scsipi branch to main branch.
This is a completely rewritten scsipi_xfer execution engine, and the
associated changes to HBA drivers. Overview of changes & features:
- All xfers are queued in the mid-layer, rather than doing so in an
  ad-hoc fashion in individual adapter drivers.
- Adapter/channel resource management in the mid-layer, avoids even trying
  to start running an xfer if the adapter/channel doesn't have the resources.
- Better communication between the mid-layer and the adapters.
- Asynchronous event notification mechanism from adapter to mid-layer and
  peripherals.
- Better peripheral queue management: freeze/thaw, sorted requeueing during
  recovery, etc.
- Clean separation of peripherals, adapters, and adapter channels (no more
  scsipi_link).
- Kernel thread for each scsipi_channel makes error recovery much easier
  (no more dealing with interrupt context when recovering from an error).
- Mid-layer support for tagged queueing: commands can have the tag type
  set explicitly, tag IDs are allocated in the mid-layer (thus eliminating
  the need to use buggy tag ID allocation schemes in many adapter drivers).
- support for QUEUE FULL and CHECK CONDITION status in mid-layer; the command
  will be requeued, or a REQUEST SENSE will be sent as appropriate.

Just before the merge syssrc has been tagged with thorpej_scsipi_beforemerge
2001-04-25 17:53:04 +00:00
thorpej c28272808b Remove the PTP and PV entry stealing code. Now that the pmap
module can fail gracefully, it serves little purpose, and the
code is a bit complicated and adds overhead to the context
switching code.
2001-04-24 20:53:43 +00:00
thorpej 20f1193ce2 Delete a couple of statistics that are not really worth keeping. 2001-04-24 20:14:45 +00:00
thorpej 7d4893b529 Gather ASN info into a single structure, and place a variable-length
array of those structures at the end of the pmap structure.  We compute
the size of the pmap structure based on the maximum CPU ID for a
particular machine.  This gives us better cache behavior and better
memory footprint for the ASN info.
2001-04-24 20:11:53 +00:00
thorpej 42113967f9 Fix an uninitialized variable problem in the non-MULTIPROCESSOR case. 2001-04-24 20:03:20 +00:00
thorpej 1c3a62e066 Sprinkle pmap_update() calls after calls to:
- pmap_enter()
- pmap_remove()
- pmap_protect()
- pmap_kenter_pa()
- pmap_kremove()
as described in pmap(9).

These calls are relatively conservative.  It may be possible to
optimize these a little more.
2001-04-24 04:30:50 +00:00
thorpej 2c37838b72 The Alpha pmap_virtual_space() can return compile-time constants,
so do so.  This allows us to call uvm_pageboot_alloc() before
pmap_bootstrap().

Also, the virtual_start variable is unneeded in the Alpha pmap
module, and virtual_end (and the mostly-unused-except-by-bus_dma
variables avail_start and avail_end) can be `computed' at the
same time.
2001-04-23 15:42:29 +00:00
thorpej 92ca543e1c Panic if all mappings are not removed from a pmap when its
reference count drops to 0.
2001-04-23 15:26:08 +00:00
thorpej 55044638aa Remove pmap_kenter_pgs(). It was never really adopted by
anything, and the interface itself wasn't as flexible as
callers would have probably liked.
2001-04-22 23:42:11 +00:00
thorpej 69abdbf60c Undo a misguided previous change to the pmap_update() API. 2001-04-22 23:19:26 +00:00
ross 8e68ebf6df Add one-line placeholder for pending commit so diffs are complete. 2001-04-22 20:47:22 +00:00
thorpej 5871b80f00 Use uvm_pageboot_alloc() for early memory allocation, rather than
calling pmap_steal_memory() directly.  On these platforms, since
uvm_pageboot_alloc() is a wrapper around pmap_steal_memory(), there
is no functional change.  This is merely for API consistency.
2001-04-22 18:21:48 +00:00
thorpej cfb5c7ed9f Make pmap_virtual_space() a required pmap function, even on platforms
which have pmap_steal_memory().  This is to reduce the API differences
between pmaps that implement pmap_steal_memory() and pmaps which do
not.

Note that pmap_steal_memory() needs to adjust *vstartp and/or
*vendp only if it used addresses within the range provided to UVM
via the pmap_virtual_space() call.  I.e. it is not necessary to do
so in any current pmap_steal_memory() implementation.
2001-04-22 17:22:57 +00:00
thorpej 4738622712 Give pmap_update() an argument (a pmap_t) so that it knows which
pmap it should be updating.
2001-04-22 00:33:59 +00:00
thorpej 7f10ba88b1 #define away pmap_update() in <machine/pmap.h> so that no function
call overhead is incurred as we start sprinkling pmap_update() calls
throughout the source tree (no pmaps currently defer operations, but
we are adding the infrastructure to allow them to do so).
2001-04-21 23:51:14 +00:00
ross c8ee2e4ddd Import and use cpu_info_primary for non-MULTIPROCESSOR.
Hey, it compiles, and it's only -current.
2001-04-21 22:03:21 +00:00
thorpej 24e7ecca97 Adjust the way the cpu_info[] array works (array of pointers
rather than array of structures).  Keep a list of active
CPUs and define a CPU_INFO_FOREACH to traverse them.

This fixes cpustates statistics tracking.
2001-04-21 16:27:10 +00:00
ross baa78b5c79 Nonfunctional change split out from pending functional commit. 2001-04-20 23:52:23 +00:00
thorpej 4ad5b289fe No longer need to play with the kernel_lock while waiting
for the other processor to sync FP state.
2001-04-20 22:59:38 +00:00
thorpej c24c3604b0 SPINLOCK_INTERLOCK_RELEASE_HOOK should actually be
SPINLOCK_SPIN_HOOK, so that we actually check for
pending IPIs on the Alpha more than once.  Also,
when we call alpha_ipi_process(), make sure to go
to splipi().
2001-04-20 22:58:39 +00:00
thorpej b8ccfcaac5 Add splipi() to block interprocessor interrupts (which come in at IPL 5). 2001-04-20 22:28:58 +00:00
thorpej 97682364ef Adjust for a multiprocessor data structure change (whee, I guess
I haven't built a GENERIC.MP for a while...)
2001-04-20 18:03:27 +00:00
thorpej 499f5a02fd Alas, we must put pmap_emulate_reference() in the kernel_lock
perimeter as long as we still acquire it in interrupt handlers,
in order to avoid a lock ordering deadlock.
2001-04-20 18:00:50 +00:00
thorpej e84fefd1f1 pmap_asn_alloc(): In a multiprocessor configuration, it's possible
to arrive here referencing the kernel_lev1map without having the
RESERVED ASN -- another CPU may have caused pmap_lev1map_destroy()
to be called, and that routine only invalidates the ASN for the
CPU that called it.  So, in the MULTIPROCESSOR case, simply assign
the RESERVED ASN if we reference the kernel_lev1map rather than
asserting that we already have the RESERVED ASN.  Thanks to Bill
Sommerfeld for helping me track down the problem.

Also add a new IPI that causes a CPU to re-activate its address
space if the pmap it's using changes level 1 maps (this probably
won't happen very often, but it's correct to have it).

This makes Alpha MP kernels boot multiuser.  In fact, this commit
is being made from my dual-CPU AlphaServer 1200 running an MP kernel.
2001-04-20 16:22:33 +00:00