Keep track of interrupt nesting level. It is normally 0
for syscalls and traps, but is fudged to 1 for their exit
processing in case they metamorphose into an interrupt
handler.
i386/genassym.c;
Remove support for the obsolete pcb_iml and pcb_cmap2.
Add support for pcb_inl.
i386/swtch.s:
Fudge the interrupt nesting level across context switches and in
the idle loop so that the work for preemptive context switches
gets counted as interrupt time, the work for voluntary context
switches gets counted mostly as system time (the part when
curproc == 0 gets counted as interrupt time), and only truly idle
time gets counted as idle time.
Remove obsolete support (commented out and otherwise) for pcb_iml.
Load curpcb just before curproc instead of just after so that
curpcb is always valid if curproc is. A few more changes like
this may fix tracing through context switches.
Remove obsolete function swtch_to_inactive().
include/cpu.h:
Use the new interrupt nesting level variable to implement a
non-fake CLF_INTR() so that accounting for the interrupt state
works.
You can use top, iostat or (best) an up to date systat to see
interrupt overheads. I see the expected huge interrupt overheads
for ISA devices (on a 486DX/33, about 55% for an IDE drive
transferring 1250K/sec and the same for a WD8013EBT network card
transferring 1100K/sec). The huge interrupt overheads for serial
devices are unfortunately normally invisible.
include/pcb.h:
Remove the obsolete pcb_iml and pcb_cmap2. Replace them by
padding to preserve binary compatibility.
Use part of the new padding for pcb_inl.
isa/icu.s:
isa/vector.s:
Keep track of interrupt nesting level.
Now floppy tape support is *disabled* unless you specifically
request otherwise. Poul wanted it this way, and I guess I'm not going to argue
though it may seem counter-intuitive. We can always change it back, later.
flags & 0x1. Somebody should build a kernel with this and see if
the floppy-tape damaged people can turn it off properly with userconfig.
I can't reproduce the original problem here.
This should have been disabled for some time, but I had screwed up ...
This made spurious values appear for fd0 in systat, when there was
NCR SCSI activity.
comconsole will behave as expected. The true problem should be fixed
instead, Bruce' comment for this:
>Anyway, i found the reason for my problems: somehow, ICRNL isn't in
>effect at `userconfig' time (but only for comconsole?), hence only
ICRNL doesn't apply to cngetc(). cnputc() unconditionally does the
equivalent of ONLCR; perhaps cngetc() should unconditionally do the
equivalent of ICRNL. Ddb must be checking for CR. Userconfig only
checks for NL. Userconfig works with syscons because pccngetc()
does the conversion. This is probably the wrong place to do it.
and into ether_input(). It was silly to have bpf want this one way and
ether_input want it another way. Ripped out trailer support from the few
remaining drivers that still had it.
1) make #includes correct
2) fix bugs in address check macros
3) fixed bugs in, and enabled, recopy if heavily fragmented code
4) moved call to bpf tap to be before enqueing packet (probably gratuitous)
5) fixed bug that caused "abnormal interrupt" at boot time/first use
6) added support for reading Zynx address ROM
7) fixed bug that caused broadcasts to not work shortly after booting (only
manifested if not using multicast - e.g. not in FreeBSD 2.0)
8) fixed spelling errors in comments
Submitted by: Matt Thomas
Subject: Mea culpa -- small fix for netboot fixes
In accordance with the unavoidable principle sof Murphy's Law, I discovered
that the fixes I recently contributed for the netboot code had some small
flaws in them. Two of them were just typos and had no effect on how the
program functioned. The other one was a missing line from the rootopts and
swapopts functions I created in bootmenu.c, which was supposed to initialize
the NFS sotype flag. It defaults to UDP, and you can change it to TCP with
the rootopts or swapopts commands, but then you can't change it back again.
I originally had a line at the top of each function to reinitialize this
flag, but somehow it got lost in the shuffle, probably because I don't
actually have a need for that flag yet.
Submitted by: wpaul
That was the good news. The bad news is that bad144 is a proper mess,
and I don't have time to fix it now, so you will probably not be able to
use it anyway.
Sorry guys, go out and buy a 100Mb IDE drive and a paddleboard :-(
If somebody wants to pick up on this: bad144 needs to learn how to
stay inside our slice of the disk. That's the trick.
Go to a single dependancy in files.i386. Using a .c file for the
sequencer code won't work since I need to know the size of the program,
so we just include the generated .h file as:
"../../sys/gnu/misc/aic7770/aic7770_seq.h"
Reviewed by:
Submitted by:
Obtained from:
instead. The entire scheme just doesn't work as envisioned (hint: think
about make depend as well as all). Those extremely rare individuals who
actually hack on the sequencer code will know how to keep stuff in sync,
I *do* get the feeling!
Somehow, I don't think this stuff was tested at all! :-(
I really hope that it actually works, though my hopes are steadily diminishing.
Anyone with 27xx/28xx boards in -current is *strongly encouraged* to give this
stuff a shot! Otherwise, I suspect that we'll be punting this out of
2.0. I haven't found a single part of Justin's commit that wasn't broken
in some way.
of config so YOU MUST RECOMPILE CONFIG. Modifying config was the cleanest
solution to integrating this driver into the tree which will become more
obvious in the next commit.
Smack the netboot program around so that it will allow the user to
specify mount options. [So that you can boot from a privileged port]
Change the default boot image name in netboot to /kernel, then strip
the leading slash when actually going out to get the NFS file handle.
Added support for 3Com 3c503 cards. Also added another command to
the (trans) that allows you to switch the 3Com's on-board transceiver
on and off. (ether.c, ether.h, bootmenu.c)
Modified the Makefile to support new compile-time options for 3c503
cards:
-DINCLUDE_3COM Include support for 3c503
-D_3COM_BASE=0x300 Define 3c503 base i/o address (if not
specified, 0x300 is the default)
-D_3COM_USE_AUI Disable the 3c503's transceiver by
default (without this flag the transceiver
is on by default)
was supposed to have already been made, but got botched somewhere.
Don't clobber the last page of memory (where the message buffer is). Some
BIOS don't gratuitously wipe it out on reboot.
Remove bogus declaration of Debugger(). Call Debugger() even if DDB is
not defined, but still call panic() after Debugger() returns, although
most other SCSI drivers just call Debugger().
printf() is inconsistent with the prototype for the library printf() and
gets declared if DIAGNOSTIC is defined because <vm/vm_page.h> includes
<sys/systm.h>.
Alphabetize.
Write all i/o functions in sleep so that we don't use anything from
NetBSD.
Restore the correct type of u_int for ports. This saves a whole cycle
per i/o on 486's.
Change `inline' back to __inline to avoid compiler warnings with
-Wreally-all.
Don't implement bdb() unless BDE_DEBUGGER is defined. Declare bdb_exists
outside the function to avoid hundreds of compiler warnings.
Let the compiler pick the register in asms if possible.
Implement ffs() using inline asm(). gcc provides a slightly different
one. It was broken in gcc-2.4.5 but works now. Declaring a correct
version inline ensures getting a correct version. FreeBSD-1.1.5 has
an slow inline version but FreeBSD-2.0 has a library version (which
probably never gets used).
Do inb() and outb() without using %edx for constant ports below 0x100.
Remove casts to the same type in queue functions.
Declare prototypes for everything implemented i386/*.s and also for
everything that is normally implemented as an inline here (I don't
like the current complete dependency on gcc). Ifdef out the prototypes
that are declared elsewhere. THere should be a separate header to
declare things implemented in i386/*.s, but then it would be harder
to override declarations with inlines.
${UII}
with the current default exception (un)mask. There should be no such
processes unless you change the mask. Someday the mask should be
changed to the IEEE default of everything masked. The npx state
gets saved so that it can be checked and this may have the side effect
of fixing a bug that was reported for 1.1.5. (npx exceptions may
sometimes leak across exits and clobber another process. I can't see
how this can happen.)
Get some missing/wrong declarations from headers now that the headers
have them.
the following.
Move declarations to and from <machine/segments.h>. Make segment stuff
static if possible.
Remove unused (although initialized) global variables _default_ldt,
currentldt, _gsel_tss (rename the latter to the auto variable
gtel_tss).
Use "correct" and consistent types for interrupt handlers.
Remove a mailing address from the code.
Fix type mismatches found by adding prototypes.
Partly support BDE_DEBUGGER. Still broken by conflict with APM. Does
nothing if BDE_DEBUGGER is not defined.
Clean up prototypes and data declarations. Declare most of the segment
functions that are implemented in support.s. Make data private in
machdep.c if possible.
Parenthesize expressions in macros properly!
${Uniformize idempotency ifdef}.
to avoid compiler warnings.
Clean up prototypes: alphabetize; don't use redundant `extern' or
meaningless `extern inline'.
Uniformize idempotency ifdef.
get truncated to LONG_MAX. Don't lobotomize the merged library source.
Make all private data static.
Use int_parms for the i/o "address" since the "address" is really a number
and is represented as an int.
Add command `flags' to allow changing device flags.
Fix scrolling of device listing. Only scrolling of the current devtab
was controlled. Reprint the header after scrolling.
Rename commands and change strings to match their config(8) keywords:
io -> port
IOaddr -> port
mem -> iomem (abbreviation is io :-()
MemAddr -> iomem
case changes
Don't use NULL for ASCII NUL.
Call strtoul() with base 0 for both numbers and addresses so that input
is consistent and hex and octal can be used for numbers.
Fix entry of irq number. Check the range at no extra cost. It wasn't
possible to enter irq -1.
Format device listing better. Large numbers (such as 0xffffffff for the
GENERIC lpt0 port) messed up the formatting.
Show the unit number in the device listing. Comment about the fields
that aren't shown.
of the 1.1.5 driver, a recent version of the NetBSD driver, Andres'
transmission start threshold code, and all other relavent changes to the driver
since it was brought into 2.0. The multicast support from NetBSD has not be
folded in yet. I've tested it under high loads for two weeks and it is now
robust enough to be included in the GENERIC kernel.
Reviewed by: gibbs
Submitted by: vega@sophia.inria.fr (Andres Vega Garcia)
cosmetique) because we already have right things there or his changes
are incorrect.
Fix mcd_subchan to return position, inspired by idea from
bugress@s069.infonet.net, but different implementation.
Here is the improved probe for the mse (Bus Mouse) device driver. I
have been running with this under 1.1.5.1 as well as 2.0 without a hitch for
quite a while.
Submitted by: lars
Somebody should make a mib variable for it.
Just now it is pointless to dump the kernel, since we have nothing which
can read the dump.
Furthermore is should never be the default to dump.
options DODUMP
will enable dumps.
for all reasonable HZ's. HZ > 1000 doesn't work because of sloppy
conversions in hzto() (division by (tick / 1000) == 0). This was
fixed in 1.1.5.
Eliminate some extern declarations by including the appropriate header
files that now contain appropriate declarations.
tsleep()). Try `dd if=/dev/zero of=/dev/pcaudio bs=640k count=1'. The
write takes a few hundred seconds to drain, and if it is killed by a
signal, it still takes a few hundred seconds to drain and all of those
seconds are spent busy-waiting.
Clean up includes and declarations. Remove bogus casts of args to
timeout functions.
doesn't have to calculate it every call.
Rename `timer0_prescale' to `timer0_prescaler_count' and maintain it
correctly. Previously we lost a few 8253 cycles for every "prescaled"
clock interrupt, and the lossage grows rapidly at 16 KHz. Now we
only lose a few cycles for every standard clock interrupt.
Rename `*_divisor' to `*_max_count'.
Do the calculation of TIMER_DIV(rate) only once instead of 3 times each
time the rate is changed.
Don't allow preposterously large interrupt rates. Bug fixes elsewhere
should allow the system to survive rates that saturate the system, however.
Clean up declarations.
Include <machine/clock.h> to check our own declarations.
outside the critical region.
Make it work with 2.0. It wasn't designed to be called at splclock().
Make it work with prescaling. The overflow threshold was bogus.
Make it work for any HZ. Side effect of fixing prescaling.
Speed it up. Allocate registers better. Reduce multiplication and
division to multiplication and a shift. Speed is now 5-6 usec on a
486DX/33, was about 3 usec more.
Optimize for the non-pentium case. The pentium code got moved around
a bit and hasn't been tested.
Change #include's to 2.0 style.
for it is incomplete and buggy. There is no problem unless Xintr0()
is reentered or should be reentered, but high clock interrupt
frequencies for pcaudio cause Xintr0() to be reentered (or clock
ticks to be lost when Xintr0() should have been reentered but
wasn't), and we lose little by delaying the call to softclock().
Move declarations related to the clock driver to clock.h.
Move declarations related to the npx driver to npx.h.
Clean up the remaining declarations.
I know that many of these entries are bogus and need to be revisited,
but let's get the tree working again for now and then do a pass through
looking at all the __FreeBSD__ entries, shall we?
floppies now. I'm not sure why, but things hang when it gets to the
`changing root to fd0c' part. Without your latest commit, everything works
fine. Maybe you can figure out what you broke after ALPHA! :)
errors at a lower ipl. clist starvation problems can cause hundreds of
tty buffer overflows per second and logging them all amplified the
problems. This problem was less serious in 1.1.5.
Avoid a race in the check for starting a new block of output. com_events
was sometimes messed up and siopoll() looped endlessly. This bug was
introduced in 2.0.
Clean up previous 2 commits. Rename sio_registerdev() to sioregisterdev()
to match the (bad) surrounding naming conventions. There should be a
generic_registerdev().
created by Amancio Hasty (specificly, this, in conjunction with his sound
driver mods for dual-mode DMA will allow VAT compiled for BSD/386 1.1 to
run under FreeBSD 2.x.)
Otherwise clean up the includes. Don't include anything included by
param.h. Do include systm.h and cons.h to avoid satisfy -Wimplicit.
Don't include console.h or use NOKEY because these are for syscons
and we use generic consoles.
Don't follow null pointer for command "ls -lrt" - don't allow extra
args but do allow trailing blanks.
Check for invalid device numbers. strtol() failures are now checked
for in all cases, but not carefully enough. We should check for
trailing junk, allow any base in all cases (just like config) and
handle signs better . (Use strtoul not strtol and cast by assignment
to the correct type - always an integral type, PARM_ADDR is bogus.
Hex numbers > 0x7fffffff can't be entered now. 0xffffffff has to
be entered as -1.)
Cosmetic.
Return from trap() if trap_fatal() returns. trap_fatal() isn't
fatal if you have ddb. Returning from trap() is usually the right
thing to do and much better than falling through.
Build a dummy frame at the top of tmpstk to help debuggers trace the stack
when the system is idle.
swtch.s: idle():
Initialize the frame pointer so that debuggers don't try to trace a bogus
stack.
Load the frame pointer, load the stack pointer and switch out the old
stack in the unique order that never leaves one of the pointers pointers
invalid so that debuggers can trace idle(). Disabling interrupts
provides sufficient validity for normal operation, but debuggers use
(trace) traps.
. avoid resetting the FDC every time the last motor is going off;
instead, give it a 60-second period for possible later reactivation.
This prevents us from needing to recalibrate the FDC too often,
but still allows for an ``automagic error recovery', just in case the
controller is absolutely stuck. (Simply wait for 60 seconds, and
try it again.)
. made the floppy head settle time after a seek a constant
that might be overridden by a config option. (Well, actually the
divisor of the settle time). Pepople often reported problems with
their floppies, so i need a simply mechanism that allows them
to play with that value. (I personally cannot find any problem
on *my* drives.)
. implement the FD_DEBUG ioctl command, in case the driver
is compiled with DEBUG turned on.
. removed a bogus parameter from a printf; the remaining warnings
from gcc -Wall seem to be warnings about the %b format gcc cannot
understand
. rearrange Garett's code to fit better in the existing structure
of #define/type/function ordering.
. make everything fit into 79 columns again.
This way, it's possible for a user to activate/deactivate floppy driver
debugging, even if (s)he doesn't like the overhead of running DDB.
Since some ppl tend to have problems with their drives, this might be
valuable for investigations.
in the far pointers are multiples of 4K (as is normal when the video
BIOS is at seg 0xc000). Disallow mode switching if the pointer is bad.
Use a new pa_to_va() macro for all BIOS and video addresses in syscons.