jhb [Tue, 20 May 2003 20:50:33 +0000 (20:50 +0000)]
The per-CPU spinlocks list is only maintained when WITNESS is enabled.
Thus, treat all page faults while in a critical section as fatal rather
than just those that occur with a non-empty spinlocks list. All such page
faults are fatal anyways. Calling trap_fatal() earlier increases the
chances of getting more useful panic messages and a possible DDB prompt.
marcel [Tue, 20 May 2003 06:57:20 +0000 (06:57 +0000)]
o Fix a definite bogon: the dirty bity fault, instruction access
failt and data access fault install the PTE in question into
the VHPT table. However, a post-increment was missing and we
wrote the raw PTE data into the pagesize/access key field.
This leaves a corrupt VHPT entry.
o While here, remove the explicit cache purge. Insertion into
the translation implicitly purges any overlapping entries.
o Make sure there's a cycle break between the itc and the rfi.
o Whitespace fixes.
marcel [Tue, 20 May 2003 02:52:41 +0000 (02:52 +0000)]
Prevent corruption of the VHPT collision chain by protecting it with
a mutex. The only volatile chain operations are insertion and deletion
but since updating an existing PTE also updates the VHPT entry itself,
and we have the VHPT mutex in both other cases, we also lock when we
update an existing PTE even though no chain operation is involved.
Note that we perform the insertion and deletion careful enough that
we don't need to lock traversals. If we need to lock traversals, we
also need to lock from the exception handler, which we can't without
creating a trapframe.
We're now able to withstand a -j8 buildworld. More work is needed to
withstand Murphy fields. In other words: we still have a bogon...
scottl [Tue, 20 May 2003 01:46:09 +0000 (01:46 +0000)]
Move the isp driver back to the alpha BOOTMFS kernel, and trim the size
of inodes for the alpha driver floppy. With this patch, alpha actually
built a full release!
deischen [Mon, 19 May 2003 23:04:50 +0000 (23:04 +0000)]
Eek, staticize a couple of functions that shouldn't
be external (initialize()!).
Remove cancellation points from _pthread_cond_wait and
_pthread_cond_timedwait (single underscore versions are
libc private functions). Point the weak reference(!) for
these functions to the versions with cancellation points.
Approved by: re@(blanket till 5/19)
Pointed out by: kan (cancellation point bug)
peter [Mon, 19 May 2003 22:35:00 +0000 (22:35 +0000)]
Deal with the possibility of negative available space from the file server
to avoid Bad Things(TM) happening (eg: df crashing with a floating point
exception).
Submitted by: Harold Gutch <logix@foobar.franken.de>
Approved by: re (scottl)
kan [Mon, 19 May 2003 20:29:07 +0000 (20:29 +0000)]
sys/sys/limits.h:
- Fix visibilty test for LONG_BIT and WORD_BIT. `#if defined(__FOO_VISIBLE)'
is alays wrong because __FOO_VISIBLE is always defined (to 0 for
invisibility).
ru [Mon, 19 May 2003 14:37:41 +0000 (14:37 +0000)]
Apply a vendor fix for one problem with tagged lists. From ChangeLog:
2003-05-18 Werner LEMBERG <wl@gnu.org>
* tmac/doc.tmac (doc-tag-list): Force horizontal mode after tag
to make items work which consist only of a tag.
2003-05-17 Werner LEMBERG <wl@gnu.org>
* tmac/doc.tmac (doc-tag-list): Don't use \Z to assure that spaces
aren't stretched in a tag (this can fail with unformatted boxes).
Instead, insert a break and go back one line.
marcel [Mon, 19 May 2003 08:02:36 +0000 (08:02 +0000)]
Turn pmap_install_pte() into a critical section. We better not get
interrupted while writing into the VHPT table. While here, make sure
memory accesses a properly ordered. Tag invalidation must happen
first so that the hardware VHPT walker will not be able to match
this entry while we're updating it and we have to make sure the new
new tag gets written only after the PTE is completely updated.
marcel [Mon, 19 May 2003 06:05:30 +0000 (06:05 +0000)]
Unconditionally set pcb_current_pmap. WIP versions of the code
previously committed cleared pcb_current_pmap prior to changing
the region registers, but that was removed before committing.
Since we don't normally (at all?) pass a NULL pointer, the bug
was mostly harmless. Fix it while I'm here...
I'm here because we need to have data serialization after writing
to the region registers. Not doing so was likely the cause of the
hangs we were experiencing. General exceptions in cpu_switch may
also be caused by the lack of serialization.
marcel [Mon, 19 May 2003 04:16:30 +0000 (04:16 +0000)]
pmap_install() needs to be atomic WRT to context switching. Protect
switching user regions (region 0-4) with schedlock. Avoid unnecessary
recursion on schedlock by moving the core functionality to another
function (pmap_switch()) where we assert schedlock is held. Turn
pmap_install() into a wrapper that grabs schedlock. This minimizes
the number of callsites that need to be changed.
Since we already have schedlock in cpu_switch() and cpu_throw(),
have them call pmap_switch() directly. These were also the only two
calls to pmap_install() outside pmap.c, so make pmap_install() static
and remove its prototype from pmap.h
das [Mon, 19 May 2003 00:51:07 +0000 (00:51 +0000)]
If we seem to be out of VM, don't allow the pagedaemon to kill
processes in the first pass. Among other things, this will give
us a chance to launder vnode-backed pages before concluding that
we need more swap. This is particularly useful for systems that
have no swap.
While here, update a comment and remove some long-unused code.
Reported by: Lucky Green <shamrock@cypherpunks.to>
Suggested by: dillon
Approved by: re (rwatson)
jmallett [Sun, 18 May 2003 19:34:03 +0000 (19:34 +0000)]
For EXT*DIR, use -H in addition to -R, so that a symlink may be
used in the EXTSRCDIR case, for example, if one finds it useful
to symlink /usr/src to an actual source tree, and use /usr/src
as the EXTSRCDIR.
This has no effects on release builds not using external directories.
imp [Sun, 18 May 2003 04:21:38 +0000 (04:21 +0000)]
Tell how to completely disable ACPI. Add warnings about how bad
kharma it will be to disable some or all of acpi on ia64 or amd64 (are
there other non-i386 platforms that FreeBSD supports with ACPI?).
Submitted by: Ryan Losh
Approved by: re@ (rwatson)
mtm [Sun, 18 May 2003 03:39:39 +0000 (03:39 +0000)]
Apparently ldconfig(8) prefers the format as the first argument
with the rest of the options following it. This caused problems for
people using ldconfig_insecure=yes because the '-i' switch was being
positioned before the format argument.
ru [Sat, 17 May 2003 19:16:28 +0000 (19:16 +0000)]
disklabel(8) is spelled bsdlabel(8) or sunlabel(8) these days.
Also make sure bsdlabel(8) (along with the disklabel(8) compat
link) still appear on the fixit floppies of platforms that use
it natively (alpha, i386, and pc98).
des [Sat, 17 May 2003 14:12:48 +0000 (14:12 +0000)]
Constrain the chekout date to ISO format (yyyy-mm-dd) and add a special
case, "today", which corresponds to 00:00 on the day the run starts.
Remove NO_CPU_CFLAGS and NO_CPU_COPTFLAGS. This should be safe since we
clear the environment and set __MAKE_CONF to /dev/null. NO_CPU_CFLAGS
actually breaks the Alpha release by preventing the inclusion of -mieee
in CFLAGS.
Do not set BUILDNAME as the release/Makefile already constructs a better
one than we do (though I wish there was a way to s/-SNAP/-TINDERBOX/)
marcel [Fri, 16 May 2003 21:26:42 +0000 (21:26 +0000)]
Revamp of the syscall path, exception and context handling. The
prime objectives are:
o Implement a syscall path based on the epc inststruction (see
sys/ia64/ia64/syscall.s).
o Revisit the places were we need to save and restore registers
and define those contexts in terms of the register sets (see
sys/ia64/include/_regset.h).
Secundairy objectives:
o Remove the requirement to use contigmalloc for kernel stacks.
o Better handling of the high FP registers for SMP systems.
o Switch to the new cpu_switch() and cpu_throw() semantics.
o Add a good unwinder to reconstruct contexts for the rare
cases we need to (see sys/contrib/ia64/libuwx)
Many files are affected by this change. Functionally it boils
down to:
o The EPC syscall doesn't preserve registers it does not need
to preserve and places the arguments differently on the stack.
This affects libc and truss.
o The address of the kernel page directory (kptdir) had to
be unstaticized for use by the nested TLB fault handler.
The name has been changed to ia64_kptdir to avoid conflicts.
The renaming affects libkvm.
o The trapframe only contains the special registers and the
scratch registers. For syscalls using the EPC syscall path
no scratch registers are saved. This affects all places where
the trapframe is accessed. Most notably the unaligned access
handler, the signal delivery code and the debugger.
o Context switching only partly saves the special registers
and the preserved registers. This affects cpu_switch() and
triggered the move to the new semantics, which additionally
affects cpu_throw().
o The high FP registers are either in the PCB or on some
CPU. context switching for them is done lazily. This affects
trap().
o The mcontext has room for all registers, but not all of them
have to be defined in all cases. This mostly affects signal
delivery code now. The *context syscalls are as of yet still
unimplemented.
Many details went into the removal of the requirement to use
contigmalloc for kernel stacks. The details are mostly CPU
specific and limited to exception_save() and exception_restore().
The few places where we create, destroy or switch stacks were
mostly simplified by not having to construct physical addresses
and additionally saving the virtual addresses for later use.
Besides more efficient context saving and restoring, which of
course yields a noticable speedup, this also fixes the dreaded
SMP bootup problem as a side-effect. The details of which are
still not fully understood.
This change includes all the necessary backward compatibility
code to have it handle older userland binaries that use the
break instruction for syscalls. Support for break-based syscalls
has been pessimized in favor of a clean implementation. Due to
the overall better performance of the kernel, this will still
be notived as an improvement if it's noticed at all.
deischen [Fri, 16 May 2003 19:58:30 +0000 (19:58 +0000)]
Add a method of yielding the current thread with the scheduler
lock held (_thr_sched_switch_unlocked()) and use this to avoid
dropping the scheduler lock and having the scheduler retake the
same lock again.
Add a better way of detecting if a low-level lock is in use.
When switching out a thread due to blocking in the UTS, don't
switch to the KSE's scheduler stack only to switch back to
another thread. If possible switch to the new thread directly
from the old thread and avoid the overhead of the extra
context switch.
Check for pending signals on a thread when entering the scheduler
and add them to the threads signal frame. This includes some
other minor signal fixes.
Most of this was a joint effor between davidxu and myself.
Reviewed by: davidxu
Approved by: re@ (blanket for libpthread)
truckman [Fri, 16 May 2003 19:46:51 +0000 (19:46 +0000)]
Detect that a vnode has been reclaimed while vflush() was waiting to lock
the vnode and restart the loop. Vflush() is vulnerable since it does not
hold a reference to the vnode and it holds no other locks while waiting
for the vnode lock. The vnode will no longer be on the list when the
loop is restarted.