27017 Commits

Author SHA1 Message Date
iwasaki
865f67f6ea Fix some trivial bugs.
- fix segment limit mis-calculation for GCODE_SEL, GDATA_SEL, GPRIV_SEL,
   LUCODE_SEL and LUDATA_SEL.
 - move `loader(8) metadata' related printf() after cninit().
 - use atop macro (address to pages) for segment limit calculation
   instead of i386_btop macro (bytes to pages).
 - fix style bugs for the declarations of ints.

Reviewed by:    bde, msmith (and arch & audit ML)
2001-08-12 08:37:39 +00:00
mp
f1340e224f Remove unused nmdmpoll function.
Approved by:	julian
2001-08-11 00:18:15 +00:00
jhb
e1cf3a4743 If we've panic'd already, then just bail in lockmgr rather than blocking or
possibly panic'ing again.
2001-08-10 23:29:15 +00:00
julian
de6d7f13db Make the protoswitch definitiosn checkable in the same way that
cdevsw entries have been for a long time.
Discover that we now have two version sof the same structure.
I will shoot one of them shortly when I figure out why someone thinks
they need it. (And I can prove they don't)
(netinet/ipprotosw.h should GO AWAY)
2001-08-10 23:17:22 +00:00
wpaul
69603fe5d4 Fix some of the GDB linkage setup. The l_name member of the gdb linkage
structure is always free()ed yet only sometimes malloc()ed. In particular,
it was simply set to point to l_filename from the a linker_file_t in
link_elf_link_preload_finish(). The l_filename had been malloc()ed inside
the kern_linker.c module and was being free()ed twice: once by
link_elf_unload_file() and again by linker_file_unload(), leading to
a panic.

How to duplicate the problem:

- Pre-load a kernel module from the loader, i.e. if_sis.ko
- Boot system
- Attempt to unload module with kldunload if_sis
- Bewm

The problem here is that the case where the module was loaded with kldload
after system boot would work correctly, so this bug went unnoticed until
I stubbed my toe on it just now. (Also, you can only trip this bug if
you compile a kernel with options DDB, but that's the default now.)

Fix: remember to malloc() a separate copy of the module name for the
l_name member of the gdb linkage structure in three places where the
linkage structure can be initialized.
2001-08-10 23:15:13 +00:00
jhb
a246c20aae Add an optimization where we check hte PS_ASTPENDING and PS_NEEDRESCHED
flags with interrupts disabled to see if we should call ast() during
doreti.  This was mostly submitted by Bruce, but his original patch did
the looping in ast() in assembly rather than in the ast() function itself.
Once we've actually called into the ast() function, it's cheaper to just
loop inside the function rather than returning from the function,
performing the check, and then calling the function again.  However, we
can optimize the first check to avoid calling the function at all.
Other architectures may choose to implement this optimization if they
wish but it is not required for correct operation.

Submitted by:	bde
2001-08-10 23:00:07 +00:00
jhb
4a89454dcd - Close races with signals and other AST's being triggered while we are in
the process of exiting the kernel.  The ast() function now loops as long
  as the PS_ASTPENDING or PS_NEEDRESCHED flags are set.  It returns with
  preemption disabled so that any further AST's that arrive via an
  interrupt will be delayed until the low-level MD code returns to user
  mode.
- Use u_int's to store the tick counts for profiling purposes so that we
  do not need sched_lock just to read p_sticks.  This also closes a
  problem where the call to addupc_task() could screw up the arithmetic
  due to non-atomic reads of p_sticks.
- Axe need_proftick(), aston(), astoff(), astpending(), need_resched(),
  clear_resched(), and resched_wanted() in favor of direct bit operations
  on p_sflag.
- Fix up locking with sched_lock some.  In addupc_intr(), use sched_lock
  to ensure pr_addr and pr_ticks are updated atomically with setting
  PS_OWEUPC.  In ast() we clear pr_ticks atomically with clearing
  PS_OWEUPC.  We also do not grab the lock just to test a flag.
- Simplify the handling of Giant in ast() slightly.

Reviewed by:	bde (mostly)
2001-08-10 22:53:32 +00:00
jhb
63014c2530 Make witness compile w/o DDB.
Reported by:	wpaul
2001-08-10 22:33:59 +00:00
obrien
44bfd6c08a Style cleanup. 2001-08-10 22:31:05 +00:00
iedowse
b3168db212 Arbitrarily limit to 64k the number of bytes that can be read at
a time using the ogetdirentries() compatibility syscall. This is a
hack to ensure that rediculous values don't get passed to MALLOC().

Reviewed by:	kris
2001-08-10 22:14:18 +00:00
jhb
54a0ded8d4 Work around a race between msleep() and endtsleep() where it was possible
for endtsleep() to be executing when msleep() resumed, for endtsleep()
to spin on sched_lock long enough for the other process to loop on
msleep() and sleep again resulting in endtsleep() waking up the "wrong"
msleep.

Obtained from:	BSD/OS
2001-08-10 21:08:56 +00:00
jhb
22915435df Change callout_stop() to return an integer. If callout_stop() succeeds in
removing the callout entry, return 1.  If callout_stop() fails to remove
the callout entry because it is currently executing or has already been
executed, then the function returns 0.  The idea was obtained from BSD/OS,
however, BSD/OS changed untimeout(), and I've just changed callout_stop()
to be more conservative.

Obtained from:	BSD/OS
2001-08-10 21:06:59 +00:00
jhb
18c8b84e2f Style nit: covert a couple of if (p_wchan) tests to if (p_wchan != NULL). 2001-08-10 20:56:25 +00:00
ru
f858dca3dc mdoc(7) police: join split punctuation to macro calls. 2001-08-10 17:35:21 +00:00
julian
f3e8b0f40c Do NOT allocate a 1K buffer on the kernel stack.
Found by: Smashed u-area and hardware watch points.
MFC after: 1 week
2001-08-10 17:32:11 +00:00
yokota
a685abddda Fix missing splx(). 2001-08-10 14:26:48 +00:00
phk
aa55336f13 Eliminate the hot-spare 'r' in Arrray.
Submitted by:	Søren Schrøder <sch@chaos.dk>
2001-08-10 11:47:08 +00:00
julian
257f6bb43a DO NOT ALLOCATE 2+K OBJECTS ON THE KERNEL STACK!!!!
found by: Getting my u-area overwritten
2001-08-10 07:50:14 +00:00
jhb
def8c67e00 - Remove asleep(), await(), and M_ASLEEP.
- Callers of asleep() and await() have been converted to calling tsleep().
  The only caller outside of M_ASLEEP was the ata driver, which called both
  asleep() and await() with spl-raised, so there was no need for the
  asleep() and await() pair.  M_ASLEEP was unused.

Reviewed by:	jasone, peter
2001-08-10 06:56:12 +00:00
jhb
6c77154134 - Remove asleep(), await(), and M_ASLEEP.
- Callers of asleep() and await() have been converted to calling tsleep().
  The only caller outside of M_ASLEEP was the ata driver, which called both
  asleep() and await() with spl-raised, so there was no need for the
  asleep() and await() pair.  M_ASLEEP was unused.

Reviewed by:	jasone, peter
2001-08-10 06:45:43 +00:00
jhb
2ff1c253cd - Remove asleep(), await(), and M_ASLEEP.
- Callers of asleep() and await() have been converted to calling tsleep().
  The only caller outside of M_ASLEEP was the ata driver, which called both
  asleep() and await() with spl-raised, so there was no need for the
  asleep() and await() pair.  M_ASLEEP was unused.

Reviewed by:	jasone, peter
2001-08-10 06:37:05 +00:00
imp
bb40f57a7c Move ISA interrupt ISR and timeout routines to pcic from pcic_isa so
that we can use them in the pci code when we have to fall back to ISA
interrupt routing.
2001-08-10 06:07:20 +00:00
imp
41502082f3 Type sanity: use uintptr_t * for read_ivar and u_int8_t instead of u_char 2001-08-10 06:00:44 +00:00
imp
57b70118c1 Rearrange the pcic_irq_type enum (and specifically tag the first one
as being 1) in anticipation of documentation.
2001-08-10 05:42:08 +00:00
jhb
f066389aac Bump MAXCOMLEN from 16 to 19 to take advantage of 32-bit alignment.
Approved by:	peter, jasone
2001-08-10 05:34:48 +00:00
jake
a2ccfa0c6d Correct copyright language. 2001-08-10 04:51:19 +00:00
jake
cdce7694e2 Add code to program the tick register and to setup its interrupt handler. 2001-08-10 04:49:33 +00:00
jake
3aedfd6196 Add early code to support interrupts. 2001-08-10 04:48:48 +00:00
jake
ea3624730c Fake up the frame pointers on a process's initial stack so they can be
restored correctly from the trapframe.

Submitted by:	tmm
2001-08-10 04:47:14 +00:00
jake
51df5872b5 Handle all types of mmu misses from user mode.
Pass a context argument to tlb functions.
2001-08-10 04:44:33 +00:00
jake
0f671f083d Use the macro for getting the trap type from the trapframe.
Only set sticks (and acquire sched_lock) on entry from user mode.
Add handlers for all kinds of mmu misses, and for interrupts from
user mode.
Acquire Giant before calling into the vm system so this runs with
invariants.
Try to get the restrictions for page faults on user memory from
kernel mode right.
Only set pcb_onfault and return to the alternate return code if
this is actually a fault on user memory from kernel mode.
2001-08-10 04:43:31 +00:00
jake
b6b80770d8 Store 8 bytes instead of 4 in suword. Use a temporary stack that's known
to be locked in the tlb for calling openfirmware.

Submitted by:	tmm
2001-08-10 04:39:23 +00:00
jake
351b4d0652 Pass a context to tlb_store_slot, use a member(Sync) after setting the
secondary context register.
2001-08-10 04:37:03 +00:00
jake
557d27322d 1. Start the clock running early for testing.
2. Use the upcoming "tick" interface.
3. Save a call frame as well as a trap frame on proc0's initial stack.
4. Setup a pointer to the per-cpu interrupt queue.
5. Install the per-cpu pointer in interrupt and alternate globals as well.
6. Flush out setregs so exec works.

Submitted by:	tmm (3, 5, 6)
2001-08-10 04:36:00 +00:00
jake
e2dd4bc232 Set the pil to something sane on startup. 2001-08-10 04:32:13 +00:00
jake
51f9c4ea38 Add definitions needed by new assembler code. 2001-08-10 04:31:30 +00:00
jake
0c6ba3f6f4 1. Add code to handle traps and interrupts from user mode.
2. Add spill and fill handlers for spills to the user stack on entry
   to the kernel.
3. Add code to handle instruction mmu misses from user mode.
4. Add code to handle level interrupts from kernel mode and vectored
   interrupt traps from either.
5. Save the pil in the trapframe on entry from kernel mode and restore
   it on return.

Submitted by:	tmm (1, 2)
2001-08-10 04:30:36 +00:00
jake
02f57a4a09 Add code to handle stack traces that go all the way back to userland.
Use a better algorithm for finding out if an address is in the kernel.

Submitted by:	tmm
2001-08-10 04:23:41 +00:00
jake
46fd39a866 Add trap types for interrupts. Ad definitions to get the interrupt level
from the trap type.
2001-08-10 04:22:24 +00:00
jake
636a22e19d 1. Add code to demap pages from the tlb for user contexts.
2. Add a context argument to most functions, instead of extracting it from
   from the tte.

Submitted by:	tmm (1).
2001-08-10 04:21:44 +00:00
jake
bd7595b429 Add fields that point to per-cpu interrupt data. 2001-08-10 04:18:48 +00:00
jake
f49fc709ca Add a field to trapframe for saving the pil. 2001-08-10 04:18:13 +00:00
jake
a9e7523870 Add asis for interrupt registers. 2001-08-10 04:17:29 +00:00
jhb
89b722b37f Axe spl's obsoleted by the callout mutex. 2001-08-10 01:36:25 +00:00
simokawa
4725d9a069 Fix unaligned access (fault) on alpha with ndp -p/-r and sysctl -a.
Discussed on users@jp.ipv6.org

MFC candidate.
2001-08-10 00:34:20 +00:00
mp
c3c304385c Allow for text section alignment to properly align the "end" symbol at the
actual end of the section. The new gas (binutils) puts in additional padding
which was misaligning the concatenated btx loader.

Reported by:	Oliver Hartmann <ohartman@klima.physik.uni-mainz.de>,
		Harti Brandt <brandt@fokus.gmd.de>
Tested by:	Oliver Hartmann <ohartman@klima.physik.uni-mainz.de>,
		David Wolfskill <dhw@whistle.com>, ps
Reviewed by:	jhb
MFC after:	1 day
2001-08-09 20:47:58 +00:00
jhb
f31a34e5d1 Trim trailing whitespace. 2001-08-09 18:07:45 +00:00
obrien
7b125fc898 The author isn't a [UC] Regents. Correct the copyright language. 2001-08-09 02:32:05 +00:00
obrien
1b5e0592ae Fix VCS ID spamage. 2001-08-09 02:29:32 +00:00
obrien
ffdbb9dc0c Restore the proper copyright on this and remove the gratuitous changes from
sys/alpha/include/elf.h.
2001-08-09 02:24:05 +00:00