because support for the Alpha was removed from the HEAD of CVS just
before the introduction of pmap_enter_object(). I am adding
pmap_enter_object() to the Alpha because it allows for an efficient
solution to a race condition affecting pmap_enter_quick(). (See
sys/amd64/amd64/pmap.c revision 1.557.)
Eliminate unneeded diagnostic code.
Change pmap_enter_quick() to use the vm_prot_t parameter introduced in
revision 1.179 to correctly set/clear execute permission on the mapping
it creates.
Eliminate an unneeded Instruction Memory Barrier (IMB) in
pmap_enter_quick().
Retire pmap_track_modified().
- Remove SCHED_ULE from GENERIC to better avoid foot-shooting by
unsuspecting users.
- Add a comment in NOTES about experimental status of SCHED_ULE.
- Make warning about experimental status in sched_ule(4) a bit
stronger.
This is not an exact MFC since we don't have alpha in -CURRENT.
Approved by: re (kensmith)
showing lockmgr) encountered with "make -jX release" for X > 1
and running on SMP hardware are gone once PREEMPTION is disabled.
Better ideas on fixing the problem are more than welcome.
I encountered repeatable Unaligned access panics similar to:
fatal kernel trap:
trap entry = 0x4 (unaligned access fault)
cpuid = 0
faulting va = 0xfffffc0000fae1c2
opcode = 0x28
register = 0x1
pc = 0xfffffc00004d07dc
ra = 0xfffffc00004d0a1c
sp = 0xfffffe0031875bc0
curthread = 0xfffffc007da237a0
pid = 2, comm = g_event
These occur when a floppy or a CD (the 6.1R install CD will do in most
cases) is in the drive during boot. A floppy or CD inserted *after*
the system was booted did not give me this problem. Interestingly
enough booting from the 6.1-R install CD sometimes caused the crash,
sometimes it did not. When it did not panic an installation of 6.1-R
was possible without any incidents. A subsequent boot from HD with
the CD still present sometimes(...) worked fine, sometimes paniced.
Taking GEOM_GPT out of the kernel config file allows booting without
incidents. We do not need GPT on Alpha, so this is the easy way out.
Discussed with: phk
associated changes. More details below:
Remove public declarations of variables that were forgotten when they were
made static.
Revision Changes Path
1.31 +0 -1 src/sys/sys/interrupt.h
Make sure the interrupt is masked before processing it, or bad things
can happen.
Revision Changes Path
1.10 +3 -3 src/sys/arm/arm/intr.c
Reorganize the interrupt handling code a bit to make a few things cleaner
and increase flexibility to allow various different approaches to be tried
in the future.
- Split struct ithd up into two pieces. struct intr_event holds the list
of interrupt handlers associated with interrupt sources.
struct intr_thread contains the data relative to an interrupt thread.
Currently we still provide a 1:1 relationship of events to threads
with the exception that events only have an associated thread if there
is at least one threaded interrupt handler attached to the event. This
means that on x86 we no longer have 4 bazillion interrupt threads with
no handlers. It also means that interrupt events with only INTR_FAST
handlers no longer have an associated thread either.
- Renamed struct intrhand to struct intr_handler to follow the struct
intr_foo naming convention. This did require renaming the powerpc
MD struct intr_handler to struct ppc_intr_handler.
- INTR_FAST no longer implies INTR_EXCL on all architectures except for
powerpc. This means that multiple INTR_FAST handlers can attach to the
same interrupt and that INTR_FAST and non-INTR_FAST handlers can attach
to the same interrupt. Sharing INTR_FAST handlers may not always be
desirable, but having sio(4) and uhci(4) fight over an IRQ isn't fun
either. Drivers can always still use INTR_EXCL to ask for an interrupt
exclusively. The way this sharing works is that when an interrupt
comes in, all the INTR_FAST handlers are executed first, and if any
threaded handlers exist, the interrupt thread is scheduled afterwards.
This type of layout also makes it possible to investigate using interrupt
filters ala OS X where the filter determines whether or not its companion
threaded handler should run.
- Aside from the INTR_FAST changes above, the impact on MD interrupt code
is mostly just 's/ithread/intr_event/'.
- A new MI ddb command 'show intrs' walks the list of interrupt events
dumping their state. It also has a '/v' verbose switch which dumps
info about all of the handlers attached to each event.
- We currently don't destroy an interrupt thread when the last threaded
handler is removed because it would suck for things like ppbus(8)'s
braindead behavior. The code is present, though, it is just under
#if 0 for now.
- Move the code to actually execute the threaded handlers for an interrrupt
event into a separate function so that ithread_loop() becomes more
readable. Previously this code was all in the middle of ithread_loop()
and indented halfway across the screen.
- Made struct intr_thread private to kern_intr.c and replaced td_ithd
with a thread private flag TDP_ITHREAD.
- In statclock, check curthread against idlethread directly rather than
curthread's proc against idlethread's proc. (Not really related to intr
changes)
Tested on: alpha, amd64, i386, sparc64
Tested on: arm, ia64 (older version of patch by cognet and marcel)
Revision Changes Path
1.88 +43 -29 src/sys/alpha/alpha/interrupt.c
1.38 +5 -5 src/sys/alpha/isa/isa.c
1.16 +58 -52 src/sys/amd64/amd64/intr_machdep.c
1.6 +1 -1 src/sys/amd64/include/intr_machdep.h
1.16 +2 -2 src/sys/amd64/isa/atpic.c
1.11 +28 -22 src/sys/arm/arm/intr.c
1.462 +2 -2 src/sys/dev/sio/sio.c
1.6 +1 -1 src/sys/dev/uart/uart_kbd_sun.c
1.24 +2 -2 src/sys/dev/uart/uart_tty.c
1.15 +58 -52 src/sys/i386/i386/intr_machdep.c
1.8 +1 -1 src/sys/i386/include/intr_machdep.h
1.21 +2 -2 src/sys/i386/isa/atpic.c
1.52 +32 -25 src/sys/ia64/ia64/interrupt.c
1.180 +3 -2 src/sys/kern/kern_clock.c
1.127 +437 -270 src/sys/kern/kern_intr.c
1.206 +0 -1 src/sys/kern/subr_witness.c
1.6 +3 -3 src/sys/powerpc/include/intr_machdep.h
1.7 +35 -32 src/sys/powerpc/powerpc/intr_machdep.c
1.14 +1 -1 src/sys/sparc64/include/intr_machdep.h
1.24 +43 -36 src/sys/sparc64/sparc64/intr_machdep.c
1.32 +36 -36 src/sys/sys/interrupt.h
1.440 +1 -3 src/sys/sys/proc.h
Catch up with interrupt-thread changes.
Revision Changes Path
1.32 +1 -1 src/sys/dev/zs/zs.c
Catch up with new interrupt handling code.
Revision Changes Path
1.16 +3 -3 src/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c
Catch up with new interrupt handling code.
Revision Changes Path
1.162 +2 -2 src/sys/dev/cy/cy.c
1.101 +2 -2 src/sys/dev/rc/rc.c
Catch up with new interrupt handling code.
Revision Changes Path
1.50 +2 -2 src/sys/dev/cx/if_cx.c
1.41 +1 -1 src/sys/dev/sab/sab.c
1.238 +2 -2 src/sys/pc98/cbus/sio.c
Add a swi_remove() function to teardown software interrupt handlers. For
now it just calls intr_event_remove_handler(), but at some point it might
also be responsible for tearing down interrupt events created via swi_add.
Revision Changes Path
1.128 +17 -0 src/sys/kern/kern_intr.c
1.33 +1 -0 src/sys/sys/interrupt.h
- Use swi_remove() to teardown swi handlers rather than
intr_event_remove_handler().
- Remove tty: prefix from a couple of swi handler names.
Revision Changes Path
1.51 +1 -1 src/sys/dev/cx/if_cx.c
1.102 +2 -2 src/sys/dev/rc/rc.c
1.42 +1 -1 src/sys/dev/sab/sab.c
1.25 +1 -1 src/sys/dev/uart/uart_tty.c
1.33 +1 -1 src/sys/dev/zs/zs.c
1.17 +2 -2 src/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c
Remove a stray return statement in the interrupt dispatch function
that caused a premature exit after calling a fast interrupt handler
and bypassing a much needed critical_exit() and the scheduling of
the interrupt thread for non-fast handlers. In short: unbreak :-)
Revision Changes Path
1.53 +0 -1 src/sys/ia64/ia64/interrupt.c
If we get a stray interrupt, return after logging it. In the extremely
rare case of a stray interrupt to an unregistered source (such as a stray
interrupt from the 8259As when using APIC), this could result in a page
fault when it tried to walk the list of interrupt handlers to execute
INTR_FAST handlers. This bug was introduced with the intr_event changes,
so it's not present in 5.x or 6.x.
Submitted by: Mark Tinguely tinguely at casselton dot net
Revision Changes Path
1.17 +1 -0 src/sys/amd64/amd64/intr_machdep.c
1.16 +1 -0 src/sys/i386/i386/intr_machdep.c
Approved by: re (scottl)
exit1() to block until any current PHOLD's are released. This includes
Simplifying the cleanup code in kern_ptrace() and removing the now
unnecessary vmspace ref counting magic from proc_rwmem(). Also, the
locking for ptrace_single_step(), ptrace_set_pc(), and
ptrace_clear_single_step() have been fixed to be consistent across the
tree.
Approved by: re (scottl)
Begin and end the initialization of pvzone in pmap_init().
Previously, pvzone's initialization was split between pmap_init() and
pmap_init2(). This split initialization was the underlying cause of
some UMA panics during initialization. Specifically, if the UMA boot
pages was exhausted before the pvzone was fully initialized, then UMA,
through no fault of its own, would use an inappropriate back-end
allocator leading to a panic. (Previously, as a workaround, we have
increased the UMA boot pages.) Fortunately, there is no longer any
reason that pvzone's initialization cannot be completed in
pmap_init().
Eliminate a check for whether pv_entry_high_water has been initialized
or not from get_pv_entry(). Since pvzone's initialization is
completed in pmap_init(), this check is no longer needed.
Use cnt.v_page_count, the actual count of available physical pages,
instead of vm_page_array_size to compute the maximum number of pv
entries.
Introduce the vm.pmap.pv_entries tunable on alpha and ia64.
Eliminate some unnecessary white space.
Specifically panic() in the case where pmap_insert_entry() fails to
get a new pv under high system load where the available pv entries
have been exhausted before the pagedaemon has a chance to wake up
to reclaim some.
Approved by: re (scottl)
slots to probe. Problems have been reported in this area, lets hope
this bandaid helps.
!! Owners of EISA-equipped Alpha machines are requested to at least
!! boot-test a 6-BETA build and report back to the Alpha list. Thanks!
Approved by: re (scottl)
Suggested by: ticso
address, writting non-canonical address can cause kernel a panic,
by restricting base values to 0..VM_MAXUSER_ADDRESS, ensuring
only canonical values get written to the registers.
Reviewed by: peter, Josepha Koshy < joseph.koshy at gmail dot com >
Approved by: re (scottl)
further changes and fixes in the future:
- Use aliases via macros rather than duplicated inlines wherever possible.
- Move all the aliases to the bottom of these files and the inline
functions to the top.
- Add various comments.
- On alpha, drop atomic_{load_acq,store_rel}_{8,char,16,short}().
- On i386 and amd64, don't duplicate the extern declarations for functions
in the two non-inline cases (KLD_MODULE and compiler doesn't do inlines),
instead, consolidate those two cases.
- Some whitespace fixes.
Approved by: re (scottl)
It can be used to panic the kernel by giving too big value.
Fix it by moving allocation and size verification into kern_getfsstat().
This even simplifies kern_getfsstat() consumers, but destroys symmetry -
memory is allocated inside kern_getfsstat(), but has to be freed by the
caller.
Found by: FreeBSD Kernel Stress Test Suite: http://www.holm.cc/stress/
Reported by: Peter Holm <peter@holm.cc>
vm_page's machine-dependent fields. Use this function in
vm_pageq_add_new_page() so that the vm_page's machine-dependent and
machine-independent fields are initialized at the same time.
Remove code from pmap_init() for initializing the vm_page's
machine-dependent fields.
Remove stale comments from pmap_init().
Eliminate the Boolean variable pmap_initialized from the alpha, amd64,
i386, and ia64 pmap implementations. Its use is no longer required
because of the above changes and earlier changes that result in physical
memory that is being mapped at initialization time being mapped without
pv entries.
Tested by: cognet, kensmith, marcel
- Implement sampling modes and logging support in hwpmc(4).
- Separate MI and MD parts of hwpmc(4) and allow sharing of
PMC implementations across different architectures.
Add support for P4 (EMT64) style PMCs to the amd64 code.
- New pmcstat(8) options: -E (exit time counts) -W (counts
every context switch), -R (print log file).
- pmc(3) API changes, improve our ability to keep ABI compatibility
in the future. Add more 'alias' names for commonly used events.
- bug fixes & documentation.
audit event identifier associated with each system call, which will
be stored by makesyscalls.sh in the sy_auevent field of struct sysent.
For now, default the audit identifier on all system calls to AUE_NULL,
but in the near future, other BSM event identifiers will be used. The
mapping of system calls to event identifiers is many:one due to
multiple system calls that map to the same end functionality across
compatibility wrappers, ABI wrappers, etc.
Submitted by: wsalamon
Obtained from: TrustedBSD Project