Commit Graph

52255 Commits

Author SHA1 Message Date
chs
43973be0c5 introduce a new UVM fault type, VM_FAULT_WIREMAX. this is different
from VM_FAULT_WIRE in that when the pages being wired are faulted in,
the simulated fault is at the maximum protection allowed for the mapping
instead of the current protection.  use this in uvm_map_pageable{,_all}()
to fix the problem where writing via ptrace() to shared libraries that
are also mapped with wired mappings in another process causes a
diagnostic panic when the wired mapping is removed.

this is a really obscure problem so it deserves some more explanation.
ptrace() writing to another process ends up down in uvm_map_extract(),
which for MAP_PRIVATE mappings (such as shared libraries) will cause
the amap to be copied or created.  then the amap is made shared
(ie. the AMAP_SHARED flag is set) between the kernel and the ptrace()d
process so that the kernel can modify pages in the amap and have the
ptrace()d process see the changes.  then when the page being modified
is actually faulted on, the object pages (from the shared library vnode)
is copied to a new anon page and inserted into the shared amap.
to make all the processes sharing the amap actually see the new anon
page instead of the vnode page that was there before, we need to
invalidate all the pmap-level mappings of the vnode page in the pmaps
of the processes sharing the amap, but we don't have a good way of
doing this.  the amap doesn't keep track of the vm_maps which map it.
so all we can do at this point is to remove all the mappings of the
page with pmap_page_protect(), but this has the unfortunate side-effect
of removing wired mappings as well.  removing wired mappings with
pmap_page_protect() is a legitimate operation, it can happen when a file
with a wired mapping is truncated.  so the pmap has no way of knowing
whether a request to remove a wired mapping is normal or when it's due to
this weird situation.  so the pmap has to remove the weird mapping.
the process being ptrace()d goes away and life continues.  then,
much later when we go to unwire or remove the wired vm_map mapping,
we discover that the pmap mapping has been removed when it should
still be there, and we panic.

so where did we go wrong?  the problem is that we don't have any way
to update just the pmap mappings that need to be updated in this
scenario.  we could invent a mechanism to do this, but that is much
more complicated than this change and it doesn't seem like the right
way to go in the long run either.

the real underlying problem here is that wired pmap mappings just
aren't a good concept.  one of the original properties of the pmap
design was supposed to be that all the information in the pmap could
be thrown away at any time and the VM system could regenerate it all
through fault processing, but wired pmap mappings don't allow that.
a better design for UVM would not require wired pmap mappings,
and Chuck C. and I are talking about this, but it won't be done
anytime soon, so this change will do for now.

this change has the effect of causing MAP_PRIVATE mappings to be
copied to anonymous memory when they are mlock()d, so that uvm_fault()
doesn't need to copy these pages later when called from ptrace(), thus
avoiding the call to pmap_page_protect() and the panic that results
from this when the mlock()d region is unlocked or freed.  note that
this change doesn't help the case where the wired mapping is MAP_SHARED.

discussed at great length with Chuck Cranor.
fixes PRs 10363, 12554, 12604, 13041, 13487, 14580 and 14853.
2001-12-31 22:34:39 +00:00
thorpej
6ca57419d1 Labels must be followed by statements. 2001-12-31 22:07:58 +00:00
thorpej
f9df4d877e Avoid an "unmamed fields" warning (gcc 3.1). 2001-12-31 22:06:47 +00:00
thorpej
17da611b51 Fix a "pointers are not permitted as case values" gcc 3.1 warning. 2001-12-31 21:55:46 +00:00
thorpej
fdb5b56e5f Do not compare an integer to NULL. 2001-12-31 21:37:22 +00:00
thorpej
aedf82267c Move the declaration of an enum to avoid an "unnamed field not allowed"
warning in gcc 3.1.
2001-12-31 21:30:01 +00:00
chs
23c75a9a98 in uvm_map_clean(), add PGO_CLEANIT to the flags passed to an object's pager.
we need to make sure that vnode pages are written to disk at least once,
otherwise processes could gain access to whatever data was previously stored
in disk blocks which are freshly allocated to a file.
2001-12-31 20:34:01 +00:00
thorpej
9e94d2a9fe When compiling for userland, need <stdlib.h> for abort() prototype
(noticed by gcc 3.1).
2001-12-31 20:20:28 +00:00
chs
ef57a67ca1 fix locking for loaning. in general we should be looking at the page's
uobject and uanon pointers rather than at the PQ_ANON flag to determine
which lock to hold, since PQ_ANON can be clear even when the anon's lock
is the one which we should hold (if the page was loaned from an object
and then freed by the object).
2001-12-31 19:21:36 +00:00
dbj
0057f73f87 save and restore sprg[0-3] when calling openfirmware
this fixes calling OF_finddevice() with invalid devices,
and as a result fixes booting with -d.
Apparently openfirmware expects persistence of sprg2 and/or sprg3
I suspect this is used when handling exceptions
2001-12-31 18:35:26 +00:00
dbj
98cbceb382 handle have_address=TRUE 2001-12-31 18:29:07 +00:00
matt
873f33f78e Make the same change to icache/dcache size calculation as was done to ecache.
Fixes PR 12844.
2001-12-31 16:26:10 +00:00
augustss
cec9735688 Delay bus enumeration a little in case the controller is a companion
controller.  This way the main controller can gain ownership of the port
before enumeration starts.
2001-12-31 15:55:51 +00:00
augustss
d8e5a1dc07 Dump enpoint number instead of endpoint index. 2001-12-31 15:54:27 +00:00
lukem
1f5f54d132 add <sys/systm.h> (for libkern.h) now that -ffree-standing is in effect 2001-12-31 15:01:51 +00:00
uwe
0207013726 Now that sbus_bus_mmap was converted to do the proper address
translation, get rid of sbus_bus_addr.  Since sbus_bus_addr is used by
framebuffer drivers that are shared with sparc64 we cannot just change
the callers to use BUS_ADDR() w/out coordinating the change with
sparc64 that uses a different calling protocol, so stub our
sbus_bus_addr to just return BUS_ADDR.
2001-12-31 15:00:58 +00:00
augustss
88da42185c Don't try to deactivate child if we have no bus yet. 2001-12-31 12:52:50 +00:00
augustss
0498c38d3d Whitespace fixes (from FreeBSD). 2001-12-31 12:37:13 +00:00
augustss
637dc4b2fe Change xfer abort to wait for the softintr to run. 2001-12-31 12:20:35 +00:00
augustss
096f451f64 Change abort slightly.
Change debug output.
2001-12-31 12:16:57 +00:00
augustss
f1397b7e37 Dump more of the command. 2001-12-31 12:15:46 +00:00
augustss
152efb1a0e Make a typedef for struct proc to make portingeasier. 2001-12-31 12:15:21 +00:00
augustss
d14e739b92 Don't allow setting the configuration when an endpoint is open. From
FreeBSD.
2001-12-31 11:56:37 +00:00
augustss
0a3269865e Only clear stall if endpoint is stalled. From FreeBSD. 2001-12-31 11:54:06 +00:00
mrg
e5fc1d934a clarify usage. idea from david obrien. 2001-12-31 09:44:04 +00:00
matt
0bc218f05c When determining ecache size, try using ecache-size. if it doesn't exist,
fallback to the old method (ecache-nlines * ecache-linesize).
2001-12-31 07:30:46 +00:00
chs
b4224d4d38 fix locking in nfs_getpages(). 2001-12-31 07:16:47 +00:00
chs
4d069e8517 in uvm_vnp_setsize(), wait for any i/o in progress on pages that we free. 2001-12-31 07:00:15 +00:00
chs
03ea276e84 in genfs_gop_write(), actually set the B_ASYNC flag on buffers that we're
not going to wait for.  this doesn't matter for real devices since we call
VOP_STRATEGY() directly, but NFS uses this flag to decide whether or not
to hand the buffer off to an nfsiod thread.
2001-12-31 06:44:58 +00:00
chs
64b0c2adbb in genfs_putpages(), we must wait for any pending write i/os to complete
if the putpages request is synchronous.
2001-12-31 06:40:08 +00:00
jhawk
a21d1ea7ac Convenience variables (workXX) don't work, so don't document them. 2001-12-31 00:35:21 +00:00
dbj
f03e8813e0 allow ddb access to lr, ctr, cr and xer registers when not on PPC_IBM4XX 2001-12-30 20:53:04 +00:00
dbj
98d1a18067 remove unused variable in kgdb_acc 2001-12-30 20:50:53 +00:00
augustss
ff21b251a0 Make sure we don't have any pending softintrs when entering polling mode.
Thanks to Darrin for finding and fixing this problem when using USB
keyboards in DDB.
2001-12-30 20:26:59 +00:00
augustss
776b0e7851 A little more debug. 2001-12-30 19:37:43 +00:00
someya
a0d9eb8746 add powerhook support to resume correctly, fix PR#13079. 2001-12-30 19:33:15 +00:00
augustss
70dea46276 Fix typo. 2001-12-30 19:22:28 +00:00
pk
5237c5fb99 In cpu_fork() set tf_npc as well in case a signal is taken in child_return()
which will cause the values of tf_pc and tf_npc set here in cpu_fork()
to be restored and used to return to user space from sigreturn() eventually
(before that the tf_pc and tf_npc set in sendsig() will be used in
proc_trampoline()).

Also, the fork system call never uses the SYSCALL_G2RFLAG shortcut, so drop
the code handling that.
2001-12-30 18:52:54 +00:00
pk
76634d2635 Change interface between cpu_fork() and proc_trampoline() so that `tf_pc'
(instead of `tf_npc') contains the user-space return address. This ensures
entering the signal trampoline code correctly in case we take handled
signal during child_return().
2001-12-30 16:41:29 +00:00
lukem
95c845e4fc add -Os to COPTS after <bsd.prog.mk> is pulled in rather than adding
it in CFLAGS beforehand, as a user's mk.conf COPTS+=-O2 results in
boot files that are too large.
2001-12-30 16:32:29 +00:00
fvdl
a833eaf1fe XXXX temporary measure: in the case of a softdep 'unmount pending error',
do not mark the filesystem clean, as this will mean that one or more
     files were likely not completely removed (will show up as unconnected
     in fsck). Prevents filesystems from being marked clean while they're
     not until this problem has been figured out.
2001-12-30 15:46:53 +00:00
wiz
b5df8875da Uncomment uhidev, since other entries depend on it. 2001-12-30 14:49:08 +00:00
augustss
dbd7c7b7bc Make uhidev change. 2001-12-30 13:28:13 +00:00
junyoung
a6a57e7b6f Registers are of u_int8_t type. 2001-12-30 13:13:04 +00:00
takemura
936fd137e6 BUGFIX: It allocated only 44 bytes for hpcapm while the device needed
764 bytes.

it was really terrible.
2001-12-30 12:57:41 +00:00
ichiro
23d158a3e8 regen 2001-12-30 12:46:10 +00:00
ichiro
3276c42a93 add
TSB43AA22 OHCI IEEE 1394 Host Controller
2001-12-30 12:45:32 +00:00
augustss
dd4b4280f7 Add new scanners to the table.
(The scanners don't actually have to work to be in the uscanner table,
this is how Linux does it and uscanner is just there because Linux has it.)
2001-12-30 11:13:22 +00:00
augustss
fb4d205cd6 Regen. 2001-12-30 11:08:19 +00:00
augustss
095e2b87e3 Fix typo in last commit. 2001-12-30 11:01:44 +00:00