Home | History | Annotate | Download | only in uvm
History log of /src/sys/uvm/uvm_vnode.c
RevisionDateAuthorComments
 1.121  05-Apr-2024  riastradh uvm: Expand v_size <= v_writesize assertions to help diagnostics.

PR kern/58117
 1.120  09-Apr-2023  riastradh uvm: Simplify assertion in uvn_get.

No functional change intended.
 1.119  09-Apr-2023  riastradh uvm(9): KASSERT(A && B) -> KASSERT(A); KASSERT(B)
 1.118  13-Mar-2021  skrll Consistently use %#jx instead of 0x%jx or just %jx in UVMHIST_LOG formats
 1.117  16-Aug-2020  chs branches: 1.117.2;
in uvm_findpage(), when uvm_page_array_fill_and_peek() returns a page
that is not the one we want and we make an assertion about dirtiness,
check the dirty status of the page we wanted rather than the page we got.
 1.116  14-Aug-2020  chs centralize calls from UVM to radixtree into a few functions.
in those functions, assert that the object lock is held in
the correct mode.
 1.115  09-Jul-2020  skrll Consistently use UVMHIST(__func__)

Convert UVMHIST_{CALLED,LOG} into UVMHIST_CALLARGS
 1.114  25-May-2020  ad - Alter the convention for uvm_page_array slightly, so the basic search
parameters can't change part way through a search: move the "uobj" and
"flags" arguments over to uvm_page_array_init() and store those with the
array.

- With that, detect when it's not possible to find any more pages in the
tree with the given search parameters, and avoid repeated tree lookups if
the caller loops over uvm_page_array_fill_and_peek().
 1.113  19-May-2020  ad PR kern/32166: pgo_get protocol is ambiguous
Also problems with tmpfs+nfs noted by hannken@.

Don't pass PGO_ALLPAGES to pgo_get, and ignore PGO_DONTCARE in the
!PGO_LOCKED case. In uao_get() have uvm_pagealloc() take care of page
zeroing and release busy pages on error.
 1.112  19-May-2020  ad Don't try to do readahead on tmpfs.
 1.111  22-Mar-2020  ad Process concurrent page faults on individual uvm_objects / vm_amaps in
parallel, where the relevant pages are already in-core. Proposed on
tech-kern.

Temporarily disabled on MP architectures with __HAVE_UNLOCKED_PMAP until
adjustments are made to their pmaps.
 1.110  14-Mar-2020  ad Make uvm_pagemarkdirty() responsible for putting vnodes onto the syncer
work list. Proposed on tech-kern@.
 1.109  14-Mar-2020  ad Make page waits (WANTED vs BUSY) interlocked by pg->interlock. Gets RW
locks out of the equation for sleep/wakeup, and allows observing+waiting
for busy pages when holding only a read lock. Proposed on tech-kern.
 1.108  03-Mar-2020  rjs Make some wait channel names unique to six characters.
 1.107  27-Feb-2020  ad Tighten up the locking around vp->v_iflag a little more after the recent
split of vmobjlock & v_interlock.
 1.106  23-Feb-2020  ad UVM locking changes, proposed on tech-kern:

- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock.
- Break v_interlock and vmobjlock apart. v_interlock remains a mutex.
- Do partial PV list locking in the x86 pmap. Others to follow later.
 1.105  15-Jan-2020  ad Merge from yamt-pagecache (after much testing):

- Reduce unnecessary page scan in putpages esp. when an object has a ton of
pages cached but only a few of them are dirty.

- Reduce the number of pmap operations by tracking page dirtiness more
precisely in uvm layer.
 1.104  21-Dec-2019  ad branches: 1.104.2;
- Rename VM_PGCOLOR_BUCKET() to VM_PGCOLOR(). I want to reuse "bucket" for
something else soon and TBH it matches what this macro does better.

- Add inlines to set/get locator values in the unused lower bits of
pg->phys_addr. Begin by using it to cache the freelist index, because
computing it is expensive and that shows up during profiling. Discussed
on tech-kern.
 1.103  28-Oct-2017  pgoyette branches: 1.103.4;
Update the kernhist(9) kernel history code to address issues identified
in PR kern/52639, as well as some general cleaning-up...

(As proposed on tech-kern@ with additional changes and enhancements.)

Details of changes:

* All history arguments are now stored as uintmax_t values[1], both in
the kernel and in the structures used for exporting the history data
to userland via sysctl(9). This avoids problems on some architectures
where passing a 64-bit (or larger) value to printf(3) can cause it to
process the value as multiple arguments. (This can be particularly
problematic when printf()'s format string is not a literal, since in
that case the compiler cannot know how large each argument should be.)

* Update the data structures used for exporting kernel history data to
include a version number as well as the length of history arguments.

* All [2] existing users of kernhist(9) have had their format strings
updated. Each format specifier now includes an explicit length
modifier 'j' to refer to numeric values of the size of uintmax_t.

* All [2] existing users of kernhist(9) have had their format strings
updated to replace uses of "%p" with "%#jx", and the pointer
arguments are now cast to (uintptr_t) before being subsequently cast
to (uintmax_t). This is needed to avoid compiler warnings about
casting "pointer to integer of a different size."

* All [2] existing users of kernhist(9) have had instances of "%s" or
"%c" format strings replaced with numeric formats; several instances
of mis-match between format string and argument list have been fixed.

* vmstat(1) has been modified to handle the new size of arguments in the
history data as exported by sysctl(9).

* vmstat(1) now provides a warning message if the history requested with
the -u option does not exist (previously, this condition was silently
ignored, with only a single blank line being printed).

* vmstat(1) now checks the version and argument length included in the
data exported via sysctl(9) and exits if they do not match the values
with which vmstat was built.

* The kernhist(9) man-page has been updated to note the additional
requirements imposed on the format strings, along with several other
minor changes and enhancements.

[1] It would have been possible to use an explicit length (for example,
uint64_t) for the history arguments. But that would require another
"rototill" of all the users in the future when we add support for an
architecture that supports a larger size. Also, the printf(3) format
specifiers for explicitly-sized values, such as "%"PRIu64, are much
more verbose (and less aesthetically appealing, IMHO) than simply
using "%ju".

[2] I've tried very hard to find "all [the] existing users of kernhist(9)"
but it is possible that I've missed some of them. I would be glad to
update any stragglers that anyone identifies.
 1.102  06-Dec-2015  wiz branches: 1.102.10;
Fix typo in comment.
 1.101  06-Dec-2015  mlelstv Clean up assertions and catch integer overflow.
 1.100  24-Aug-2015  pooka to garnish, dust with _KERNEL_OPT
 1.99  30-Jul-2012  matt branches: 1.99.2; 1.99.16;
-fno-common broke kernhist since it used commons.
Add a KERNHIST_DEFINE which is define the kernel history.
Change UVM to deal with the new usage.
 1.98  01-Jun-2012  martin Only use generic readahead on VREG vnodes, the space used to store the
context is not valid on other types.
Prevents the crash reported in PR kern/38889, but does not fix the
mmap of block devices, more work is needed (no size on VBLK vnodes).
 1.97  06-Sep-2011  matt branches: 1.97.2; 1.97.6; 1.97.8;
Allocate color appropriate pages.
 1.96  12-Jun-2011  rmind Welcome to 5.99.53! Merge rmind-uvmplock branch:

- Reorganize locking in UVM and provide extra serialisation for pmap(9).
New lock order: [vmpage-owner-lock] -> pmap-lock.

- Simplify locking in some pmap(9) modules by removing P->V locking.

- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share
the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).

- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner.
Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.

- Unify /dev/mem et al in MI code and provide required locking (removes
kernel-lock on some ports). Also, avoid cache-aliasing issues.

Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches
formed the core changes of this branch.
 1.95  23-Apr-2011  rmind branches: 1.95.2;
Replace "malloc" in comments, remove unnecessary header inclusions.
 1.94  02-Feb-2011  chuck udpate license clauses on my code to match the new-style BSD licenses.
verified with Mike Hibler it is ok to remove clause 3 on utah copyright,
as per UCB.
based on diff that rmind@ sent me.

no functional change with this commit.
 1.93  08-Jan-2010  pooka branches: 1.93.2; 1.93.4; 1.93.6; 1.93.8;
The VATTR_NULL/VREF/VHOLD/HOLDRELE() macros lost their will to live
years ago when the kernel was modified to not alter ABI based on
DIAGNOSTIC, and now just call the respective function interfaces
(in lowercase). Plenty of mix'n match upper/lowercase has creeped
into the tree since then. Nuke the macros and convert all callsites
to lowercase.

no functional change
 1.92  04-Aug-2009  pooka uvm_vnp_zerorange() logically and by implementation more a part of
ubc than uvm_vnode, so move it over.
 1.91  04-Aug-2009  pooka kernel opt polish: g/c unnecessary fs_nfs.h and opt_ddb.h
 1.90  02-Jan-2008  ad branches: 1.90.10; 1.90.28;
Merge vmlocking2 to head.
 1.89  01-Dec-2007  yamt branches: 1.89.2; 1.89.6;
constify pagerops.
 1.88  01-Dec-2007  yamt use designated initiaizers for uvm_pagerops.
 1.87  11-Oct-2007  ad branches: 1.87.4;
Remove LOCK_ASSERT(!simple_lock_held(&foo));
 1.86  10-Oct-2007  ad Merge from vmlocking:

- Split vnode::v_flag into three fields, depending on field locking.
- simple_lock -> kmutex in a few places.
- Fix some simple locking problems.
 1.85  04-Aug-2007  pooka branches: 1.85.2; 1.85.4; 1.85.6;
Use VSIZENOTSET only in KASSERTs
 1.84  22-Jul-2007  pooka branches: 1.84.4;
Retire uvn_attach() - it abuses VXLOCK and its functionality,
setting vnode sizes, is handled elsewhere: file system vnode creation
or spec_open() for regular files or block special files, respectively.

Add a call to VOP_MMAP() to the pagedvn exec path, since the vnode
is being memory mapped.

reviewed by tech-kern & wrstuden
 1.83  09-Jul-2007  ad branches: 1.83.2;
Merge some of the less invasive changes from the vmlocking branch:

- kthread, callout, devsw API changes
- select()/poll() improvements
- miscellaneous MT safety improvements
 1.82  05-Jun-2007  yamt improve post-ubc file overwrite performance in common cases.
ie. when it's safe, actually overwrite blocks rather than doing
read-modify-write.

also fixes PR/33152 and PR/36303.
 1.81  04-Mar-2007  christos branches: 1.81.2; 1.81.4;
Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
 1.80  22-Feb-2007  thorpej TRUE -> true, FALSE -> false
 1.79  21-Feb-2007  thorpej Replace the Mach-derived boolean_t type with the C99 bool type. A
future commit will replace use of TRUE and FALSE with true and false.
 1.78  09-Dec-2006  chs branches: 1.78.2;
a smorgasbord of improvements to vnode locking and path lookup:
- LOCKPARENT is no longer relevant for lookup(), relookup() or VOP_LOOKUP().
these now always return the parent vnode locked. namei() works as before.
lookup() and various other paths no longer acquire vnode locks in the
wrong order via vrele(). fixes PR 32535.
as a nice side effect, path lookup is also up to 25% faster.
- the above allows us to get rid of PDIRUNLOCK.
- also get rid of WANTPARENT (just use LOCKPARENT and unlock it).
- remove an assumption in layer_node_find() that all file systems implement
a recursive VOP_LOCK() (unionfs doesn't).
- require that all file systems supply vfs_vptofh and vfs_fhtovp routines.
fill in eopnotsupp() for file systems that don't support being exported
and remove the checks for NULL. (layerfs calls these without checking.)
- in union_lookup1(), don't change refcounts in the ISDOTDOT case, just
adjust which vnode is locked. fixes PR 33374.
- apply fixes for ufs_rename() from ufs_vnops.c rev. 1.61 to ext2fs_rename().
 1.77  01-Nov-2006  yamt branches: 1.77.2;
remove some __unused from function parameters.
 1.76  14-Oct-2006  yamt uvm_vnp_setsize: put back v_size assignment after uvn_put.
PR/34147 from Juergen Hannken-Illjes.
 1.75  12-Oct-2006  yamt move some knowledge about vnode into uvm_vnode.c.
 1.74  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.73  15-Sep-2006  yamt branches: 1.73.2;
merge yamt-pdpolicy branch.
- separate page replacement policy from the rest of kernel
- implement an alternative replacement policy
 1.72  22-Jul-2006  yamt branches: 1.72.4;
- in genfs_getpages, take g_glock earlier so that it can't be
intervened by truncation.
it also fixes a deadlock. (g_glock vs pages locking order)
- uvm_vnp_setsize: modify v_size while holding v_interlock.

reviewed by Chuck Silvers.
 1.71  21-Jul-2006  ad - Use the LWP cached credentials where sane.
- Minor cosmetic changes.
 1.70  14-May-2006  elad integrate kauth.
 1.69  11-Dec-2005  christos branches: 1.69.4; 1.69.6; 1.69.8; 1.69.10; 1.69.12;
merge ktrace-lwp.
 1.68  29-Nov-2005  yamt merge yamt-readahead branch.
 1.67  29-Nov-2005  yamt read-ahead statistics.
 1.66  27-Jun-2005  thorpej branches: 1.66.2; 1.66.8;
Sprinkle some static.
 1.65  27-Jun-2005  thorpej Use ANSI function decls.
 1.64  09-Jan-2005  chs adjust the UBC mapping code to support non-vnode uvm_objects.
this means we can no longer look at the vnode size to determine how many
pages to request in a fault, which is good since for NFS the size can change
out from under us on the server anyway. there's also a new flag UBC_UNMAP
for ubc_release(), so that the file system code can make the decision about
whether to cache mappings for files being used as executables.
 1.63  24-Mar-2004  junyoung Nuke __P().
 1.62  29-Jun-2003  fvdl branches: 1.62.2;
Back out the lwp/ktrace changes. They contained a lot of colateral damage,
and need to be examined and discussed more.
 1.61  28-Jun-2003  darrenr Pass lwp pointers throughtout the kernel, as required, so that the lwpid can
be inserted into ktrace records. The general change has been to replace
"struct proc *" with "struct lwp *" in various function prototypes, pass
the lwp through and use l_proc to get the process pointer when needed.

Bump the kernel rev up to 1.6V
 1.60  22-Apr-2003  yamt correct accounting of {exec,file}pages.
they are not updated correctly when breaking loan.
 1.59  06-Sep-2002  gehenna Merge the gehenna-devsw branch into the trunk.

This merge changes the device switch tables from static array to
dynamically generated by config(8).

- All device switches is defined as a constant structure in device drivers.

- The new grammer ``device-major'' is introduced to ``files''.

device-major <prefix> char <num> [block <num>] [<rules>]

- All device major numbers must be listed up in port dependent majors.<arch>
by using this grammer.

- Added the new naming convention.
The name of the device switch must be <prefix>_[bc]devsw for auto-generation
of device switch tables.

- The backward compatibility of loading block/character device
switch by LKM framework is broken. This is necessary to convert
from block/character device major to device name in runtime and vice versa.

- The restriction to assign device major by LKM is completely removed.
We don't need to reserve LKM entries for dynamic loading of device switch.

- In compile time, device major numbers list is packed into the kernel and
the LKM framework will refer it to assign device major number dynamically.
 1.58  17-May-2002  enami Make uvn_findpages to return number of pages found so that caller can
easily check if all requested pages are found or not.
 1.57  31-Dec-2001  chs branches: 1.57.8;
in uvm_vnp_setsize(), wait for any i/o in progress on pages that we free.
 1.56  09-Dec-2001  chs replace "vnode" and "vtext" with "file" and "exec" in uvmexp field names.
 1.55  10-Nov-2001  lukem add RCSIDs, and in some cases, slightly cleanup #include order
 1.54  26-Sep-2001  chs branches: 1.54.2;
change the names of the arguments to uvn_put() to match their usage.
 1.53  22-Sep-2001  sommerfeld VOP_PUTPAGES must release the uobj's lock for us, so ensure it's locked
beforehand and unlocked afterwards using LOCK_ASSERT().
 1.52  15-Sep-2001  chs a whole bunch of changes to improve performance and robustness under load:

- remove special treatment of pager_map mappings in pmaps. this is
required now, since I've removed the globals that expose the address range.
pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's
no longer any need to special-case it.
- eliminate struct uvm_vnode by moving its fields into struct vnode.
- rewrite the pageout path. the pager is now responsible for handling the
high-level requests instead of only getting control after a bunch of work
has already been done on its behalf. this will allow us to UBCify LFS,
which needs tighter control over its pages than other filesystems do.
writing a page to disk no longer requires making it read-only, which
allows us to write wired pages without causing all kinds of havoc.
- use a new PG_PAGEOUT flag to indicate that a page should be freed
on behalf of the pagedaemon when it's unlocked. this flag is very similar
to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the
pageout fails due to eg. an indirect-block buffer being locked.
this allows us to remove the "version" field from struct vm_page,
and together with shrinking "loan_count" from 32 bits to 16,
struct vm_page is now 4 bytes smaller.
- no longer use PG_RELEASED for swap-backed pages. if the page is busy
because it's being paged out, we can't release the swap slot to be
reallocated until that write is complete, but unlike with vnodes we
don't keep a count of in-progress writes so there's no good way to
know when the write is done. instead, when we need to free a busy
swap-backed page, just sleep until we can get it busy ourselves.
- implement a fast-path for extending writes which allows us to avoid
zeroing new pages. this substantially reduces cpu usage.
- encapsulate the data used by the genfs code in a struct genfs_node,
which must be the first element of the filesystem-specific vnode data
for filesystems which use genfs_{get,put}pages().
- eliminate many of the UVM pagerops, since they aren't needed anymore
now that the pager "put" operation is a higher-level operation.
- enhance the genfs code to allow NFS to use the genfs_{get,put}pages
instead of a modified copy.
- clean up struct vnode by removing all the fields that used to be used by
the vfs_cluster.c code (which we don't use anymore with UBC).
- remove kmem_object and mb_object since they were useless.
instead of allocating pages to these objects, we now just allocate
pages with no object. such pages are mapped in the kernel until they
are freed, so we can use the mapping to find the page to free it.
this allows us to remove splvm() protection in several places.

The sum of all these changes improves write throughput on my
decstation 5000/200 to within 1% of the rate of NetBSD 1.5
and reduces the elapsed time for "make release" of a NetBSD 1.5
source tree on my 128MB pc to 10% less than a 1.5 kernel took.
 1.51  17-Aug-2001  chs branches: 1.51.2;
allow mappings of VBLK vnodes.
 1.50  26-May-2001  chs branches: 1.50.2;
replace vm_page_t with struct vm_page *.
 1.49  25-May-2001  chs remove trailing whitespace.
 1.48  10-Mar-2001  chs eliminate the VM_PAGER_* error codes in favor of the traditional E* codes.
the mapping is:

VM_PAGER_OK 0
VM_PAGER_BAD <unused>
VM_PAGER_FAIL <unused>
VM_PAGER_PEND 0 (see below)
VM_PAGER_ERROR EIO
VM_PAGER_AGAIN EAGAIN
VM_PAGER_UNLOCK EBUSY
VM_PAGER_REFAULT ERESTART

for async i/o requests, it used to be possible for the request to
be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND
to indicate whether the caller should perform post-i/o cleanup.
this is no longer allowed; pagers must now return 0 to indicate that
the async i/o was successfully started, and the caller never needs to
worry about doing the post-i/o cleanup.
 1.47  09-Mar-2001  chs add UBC memory-usage balancing. we track the number of pages in use for
each of the basic types (anonymous data, executable image, cached files)
and prevent the pagedaemon from reusing a given page if that would reduce
the count of that type of page below a sysctl-setable minimum threshold.
the thresholds are controlled via three new sysctl tunables:
vm.anonmin, vm.vnodemin, and vm.vtextmin. these tunables are the
percentages of pageable memory reserved for each usage, and we do not allow
the sum of the minimums to be more than 95% so that there's always some
memory that can be reused.
 1.46  22-Feb-2001  enami branches: 1.46.2;
When shrinking file size, don't dispose of a page still in use.
 1.45  18-Feb-2001  chs in uvn_flush(), add a fast path for the case where the vnode has no pages.
update the comment above this function while I'm here.
 1.44  08-Feb-2001  chs remove a debug printf() that has outlived its usefulness.
 1.43  06-Feb-2001  chs in uvn_flush(), interpret a "stop" value of 0 as meaning all pages at
offsets equal to or higher than "start". use this in uvm_vnp_setsize()
instead of the vnode's size since there can be pages past EOF.
 1.42  28-Jan-2001  thorpej Page scanner improvements, behavior is actually a bit more like
Mach VM's now. Specific changes:
- Pages now need not have all of their mappings removed before being
put on the inactive list. They only need to have the "referenced"
attribute cleared. This makes putting pages onto the inactive list
much more efficient. In order to eliminate redundant clearings of
"refrenced", callers of uvm_pagedeactivate() must now do this
themselves.
- When checking the "modified" attribute for a page (for clearing
PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on
the page (saves a potentially expensive pmap operation).
- When scanning the inactive list, if a page is referenced, reactivate
it (this part was actually added in uvm_pdaemon.c,v 1.27). This
now works properly now that pages on the inactive list are allowed to
have mappings.
- When scanning the inactive list and considering a page for freeing,
remove all mappings, and then check the "modified" attribute if the
page is marked PG_CLEAN.
- When scanning the active list, if the page was referenced since its
last sweep by the scanner, don't deactivate it. (This part was
actually added in uvm_pdaemon.c,v 1.28.)

These changes greatly improve interactive performance during
moderate to high memory and I/O load.
 1.41  08-Jan-2001  chs in uvn_flush(), when PGO_SYNCIO is specified then we should wait for
pending i/os to complete before returning even if PGO_CLEANIT is not
specified. this fixes two races:

(1) NFS write rpcs vs. setattr operations which truncate the file.
if the truncate doesn't wait for pending writes to complete then
a later write rpc completion can undo the effect of the truncate.
this problem has been reported by several people.

(2) write i/os in disk-based filesystem vs. the disk block being
freed by a truncation, allocated to a new file, and written
again with different data. if the disk driver reorders the requests
and does the second i/o first, the old data will clobber the new,
corrupting the new file. I haven't heard of anyone experiencing
this problem yet, but it's fixed now anyway.
 1.40  16-Dec-2000  chs in uvn_flush(), don't deactivate busy pages.
 1.39  06-Dec-2000  chs in uvn_findpage(), only increment the counter of vnode pages
if we succeed in allocating a page.

from Lars Heidieker <lars@heidieker.de> in PR 11636.
 1.38  30-Nov-2000  simonb Move uvm_pgcnt_vnode and uvm_pgcnt_anon into uvmexp (as vnodepages and
anonpages), and add vtextpages which is currently unused but will be
used to trace the number of pages used by vtext vnodes.
 1.37  27-Nov-2000  chs Initial integration of the Unified Buffer Cache project.
 1.36  24-Nov-2000  chs g/c unused pager ops "asyncget" and "aiodone".
 1.35  27-Jun-2000  mrg remove include of <vm/vm.h>
 1.34  26-Jun-2000  mrg remove/move more mach vm header files:

<vm/pglist.h> -> <uvm/uvm_pglist.h>
<vm/vm_inherit.h> -> <uvm/uvm_inherit.h>
<vm/vm_kern.h> -> into <uvm/uvm_extern.h>
<vm/vm_object.h> -> nothing
<vm/vm_pager.h> -> into <uvm/uvm_pager.h>

also includes a bunch of <vm/vm_page.h> include removals (due to redudancy
with <vm/vm.h>), and a scattering of other similar headers.
 1.33  19-May-2000  thorpej branches: 1.33.4;
Tell uvm_pagermapin() the direction of the I/O so that it can map
with only the protection that it needs.
 1.32  03-Apr-2000  chs remove the "shareprot" pagerop. it's not needed anymore since
share maps are long gone.
 1.31  27-Mar-2000  kleink Kill duplicate uvn_attach() prototype (public, already in uvm_vnode.h).
 1.30  26-Mar-2000  kleink Merge parts of chs-ubc2 into the trunk:
Add a new type voff_t (defined as a synonym for off_t) to describe offsets
into uvm objects, and update the appropriate interfaces to use it, the
most visible effect being the ability to mmap() file offsets beyond
the range of a vaddr_t.

Originally by Chuck Silvers; blame me for problems caused by merging this
into non-UBC.
 1.29  13-Mar-2000  soren Fix doubled 'the's in comments.
 1.28  28-Jan-2000  chs remove a debug printf that has outlived its usefulness.
 1.27  19-Oct-1999  chs put various debugging printfs under #ifdef DEBUG.
 1.26  12-Sep-1999  chs branches: 1.26.2; 1.26.4; 1.26.6;
eliminate the PMAP_NEW option by making it required for all ports.
ports which previously had no support for PMAP_NEW now implement
the pmap_k* interfaces as wrappers around the non-k versions.
 1.25  22-Jul-1999  thorpej Garbage collect thread_sleep()/thread_wakeup() left over from the old
Mach VM code. Also nuke iprintf(), which was no longer used anywhere.

Add proclist locking where appropriate.
 1.24  22-Jul-1999  thorpej 0 -> FALSE in a few places.
 1.23  11-Apr-1999  chs add a `flags' argument to uvm_pagealloc_strat().
define a flag UVM_PGA_USERESERVE to allow non-kernel object
allocations to use pages from the reserve.
use the new flag for allocations in pmap modules.
 1.22  25-Mar-1999  mrg branches: 1.22.2;
remove now >1 year old pre-release message.
 1.21  25-Mar-1999  sommerfe Prevent deadlock cited in PR4629 from crashing the system. (copyout
and system call now just return EFAULT). A complete fix will
presumably have to wait for UBC and/or for vnode locking protocols to
be revamped to allow use of shared locks.
 1.20  24-Mar-1999  cgd after discussion with chuck, nuke pgo_attach from uvm_pagerops
 1.19  04-Mar-1999  chs fix printf arg types.
 1.18  29-Jan-1999  bouyer A small typo fix, + enclose "used_vnode_size = %qu" debug printf inside
#ifdef DEBUG/#endif
 1.17  04-Nov-1998  chs branches: 1.17.2;
we must unlock a vp's object's lock before calling vrele().
 1.16  18-Oct-1998  chs shift by PAGE_SHIFT instead of multiplying or dividing by PAGE_SIZE.
 1.15  13-Aug-1998  eeh Merge paddr_t changes into the main branch.
 1.14  09-Aug-1998  perry bzero->memset, bcopy->memcpy, bcmp->memcmp
 1.13  07-Jul-1998  thorpej branches: 1.13.2;
Add support for mmap'ing disk block devices.
 1.12  24-Jun-1998  sommerfe Always include fifos; "not an option any more".
 1.11  22-Jun-1998  sommerfe defopt for options FIFO
 1.10  05-May-1998  kleink Remove inclusions of syscall (and syscall argument) related header files;
we don't need them here.
 1.9  11-Mar-1998  chuck bug fix: when doing uvm_vnp_sync() actually skip over blocked uvn's so
that we don't try and sync them later. should get rid of the
"uvm_vnp_sync: dying vnode on sync list" related warnings that were
occuring during a "make install."
 1.8  09-Mar-1998  mrg KNF.
 1.7  01-Mar-1998  fvdl Merge with Lite2 + local changes
 1.6  19-Feb-1998  thorpej Include the NFS option header.
 1.5  18-Feb-1998  mrg bug fix from chuck: uvm_vnp_terminate panic when /sbin/init was unlinked
 1.4  10-Feb-1998  mrg - add defopt's for UVM, UVMHIST and PMAP_NEW.
- remove unnecessary UVMHIST_DECL's.
 1.3  07-Feb-1998  mrg restore rcsids
 1.2  06-Feb-1998  thorpej RCS ID police.
 1.1  05-Feb-1998  mrg branches: 1.1.1;
Initial revision
 1.1.1.1  05-Feb-1998  mrg initial import of the new virtual memory system, UVM, into -current.

UVM was written by chuck cranor <chuck@maria.wustl.edu>, with some
minor portions derived from the old Mach code. i provided some help
getting swap and paging working, and other bug fixes/ideas. chuck
silvers <chuq@chuq.com> also provided some other fixes.

this is the UVM kernel code portion.


this will be KNF'd shortly. :-)
 1.13.2.1  30-Jul-1998  eeh Split vm_offset_t and vm_size_t into paddr_t, psize_t, vaddr_t, and vsize_t.
 1.17.2.8  02-Jun-1999  chs implement UFP_NORDONLY.
 1.17.2.7  30-May-1999  chs add uvm_vnp_asyncget() and uvn_doasyncget() for doing readahead.
in uvm_vnp_sync(), use an async uvn_flush() again.
remove uvm_vnp_setpageblknos().
 1.17.2.6  30-Apr-1999  chs fix uvn_flush() to actually wait for sync i/os.
fix uvm_vnp_setpageblknos() to deal with big ranges.
fix uvm_vnp_zerorange() to not be just totally wrong.
also, use the new ubc_alloc() interface.
 1.17.2.5  29-Apr-1999  chs temporarily make uvm_vnp_sync() use sync io.
make uvm_vnp_zerorange() deal with ranges larger than 1 ubc window.
 1.17.2.4  09-Apr-1999  chs fix vnode reference-counting in uvm_vnp_sync().
 1.17.2.3  25-Feb-1999  chs delete non-UBC parts of uvn_attach(), uvn_reference(), uvn_detach(),
uvm_vnp_terminate(), uvm_vnp_uncache().
add uvn_findpages(), for looking-up/allocating multiple pages.
allow async vnode pageouts.
lock the writeable list when remove vnodes from it too.
rename uvm_vnp_relocate() to uvm_vnp_setpageblknos() and expand
its functionality to optionally zero the pages.
add uvm_vnp_zerorange(), incomplete but does enough for the moment.
use LIST_* macros and SLOCK_{,UN}LOCKED.
 1.17.2.2  16-Nov-1998  chs uvn_put() now unlocks the uobj before calling VOP_PUTPAGES().
move the important line of uvm_vnp_setsize() outside the debug ifdef.
adjust other debugging code.
 1.17.2.1  09-Nov-1998  chs initial snapshot. lots left to do.
 1.22.2.2  31-Jan-2000  he Pull up revision 1.28 (via patch, requested by chs):
Remove a debug printf that has outlived its usefulness.
 1.22.2.1  16-Apr-1999  chs branches: 1.22.2.1.2;
pull up 1.22 -> 1.23:
add a `flags' argument to uvm_pagealloc_strat().
define a flag UVM_PGA_USERESERVE to allow non-kernel object
allocations to use pages from the reserve.
use the new flag for allocations in pmap modules.
 1.22.2.1.2.9  31-Aug-1999  perseant Rudimentary support for LFS under UBC:

- LFS-specific VOP_BALLOC and VOP_PUTPAGES vnode ops.

- getblk VREG panic #ifdef'd out (can be reinstated when Ifile is
internalized and Ifile can be made another type from VREG)

- interface to VOP_PUTPAGES changed to pass all pager flags, not
just sync. FS putpages routines must know about the pager flags.

- new LFS magic disk address, -2 ("unwritten"), meaning accounted for
but not assigned to a fixed disk location (since LFS does these two
things separately, and the previous accounting method using buffer
headers no longer will work). Changed references to (foo == (daddr_t)-1)
to (foo < 0). Since disk drivers reject all addresses < 0, this should
not present a problem for other FSs.
 1.22.2.1.2.8  11-Aug-1999  chs fix uvn_flush() to work now that vnode offsets are signed.
 1.22.2.1.2.7  09-Aug-1999  chs create a new type "voff_t" for uvm_object offsets
and define it to be "off_t". also, remove pgo_asyncget().
 1.22.2.1.2.6  06-Aug-1999  chs clean up some leftovers.
 1.22.2.1.2.5  02-Aug-1999  thorpej Update from trunk.
 1.22.2.1.2.4  31-Jul-1999  chs in uvn_findpage(), ignore any offsets where the return page pointer
is non-NULL.
 1.22.2.1.2.3  11-Jul-1999  chs remove uvm_vnp_uncache(), it's not needed anymore.
use uvm_errno2vmerror().
put uvm_vnp_zerorange() back the way it was before,
it was right the first time.
 1.22.2.1.2.2  04-Jul-1999  chs remove UVM_VNODE_* flags in favor of V* vnode flags.
rewrite uvm_vnp_zerorange(). it's still wrong, but it's closer.
update stuff to use buf instead of uvm_aiobuf.
uvm_vnp_asyncget() can now determine the blocksize from the vnode
rather than needing it to be passed in.
 1.22.2.1.2.1  07-Jun-1999  chs merge everything from chs-ubc branch.
 1.26.6.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.26.4.1  15-Nov-1999  fvdl Sync with -current
 1.26.2.8  23-Mar-2001  bouyer Make sure files that shouldn't change are identical to HEAD.
 1.26.2.7  12-Mar-2001  bouyer Sync with HEAD.
 1.26.2.6  11-Feb-2001  bouyer Sync with HEAD.
 1.26.2.5  18-Jan-2001  bouyer Sync with head (for UBC+NFS fixes, mostly).
 1.26.2.4  05-Jan-2001  bouyer Sync with HEAD
 1.26.2.3  08-Dec-2000  bouyer Sync with HEAD.
 1.26.2.2  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
 1.26.2.1  20-Oct-1999  thorpej Sync w/ trunk.
 1.33.4.1  15-Nov-2001  he Apply patch (requested by chs):
Make sure to initialize uio_procp in uvn_io(). Fixes kernel
crash problem, reported in PR#14185.
 1.46.2.13  17-Sep-2002  nathanw Catch up to -current.
 1.46.2.12  16-Jul-2002  nathanw Whitespace.
 1.46.2.11  12-Jul-2002  nathanw No longer need to pull in lwp.h; proc.h pulls it in for us.
 1.46.2.10  24-Jun-2002  nathanw Curproc->curlwp renaming.

Change uses of "curproc->l_proc" back to "curproc", which is more like the
original use. Bare uses of "curproc" are now "curlwp".

"curproc" is now #defined in proc.h as ((curlwp) ? (curlwp)->l_proc) : NULL)
so that it is always safe to reference curproc (*de*referencing curproc
is another story, but that's always been true).
 1.46.2.9  20-Jun-2002  nathanw Catch up to -current.
 1.46.2.8  08-Jan-2002  nathanw Catch up to -current.
 1.46.2.7  14-Nov-2001  nathanw Catch up to -current.
 1.46.2.6  26-Sep-2001  nathanw Catch up to -current.
Again.
 1.46.2.5  21-Sep-2001  nathanw Catch up to -current.
 1.46.2.4  24-Aug-2001  nathanw Catch up with -current.
 1.46.2.3  21-Jun-2001  nathanw Catch up to -current.
 1.46.2.2  09-Apr-2001  nathanw Catch up with -current.
 1.46.2.1  05-Mar-2001  nathanw Initial commit of scheduler activations and lightweight process support.
 1.50.2.4  10-Oct-2002  jdolecek sync kqueue with -current; this includes merge of gehenna-devsw branch,
merge of i386 MP branch, and part of autoconf rototil work
 1.50.2.3  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.50.2.2  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.50.2.1  25-Aug-2001  thorpej Merge Aug 24 -current into the kqueue branch.
 1.51.2.2  01-Oct-2001  fvdl Catch up with -current.
 1.51.2.1  07-Sep-2001  thorpej Commit my "devvp" changes to the thorpej-devvp branch. This
replaces the use of dev_t in most places with a struct vnode *.

This will form the basic infrastructure for real cloning device
support (besides being architecurally cleaner -- it'll be good
to get away from using numbers to represent objects).
 1.54.2.1  12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.57.8.2  30-May-2002  gehenna Catch up with -current.
 1.57.8.1  16-May-2002  gehenna Replace the direct-access to devsw table with calling devsw APIs.
 1.62.2.7  11-Dec-2005  christos Sync with head.
 1.62.2.6  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.62.2.5  17-Jan-2005  skrll Sync with HEAD.
 1.62.2.4  21-Sep-2004  skrll Fix the sync with head I botched.
 1.62.2.3  18-Sep-2004  skrll Sync with HEAD.
 1.62.2.2  03-Aug-2004  skrll Sync with HEAD
 1.62.2.1  02-Jul-2003  darrenr Apply the aborted ktrace-lwp changes to a specific branch. This is just for
others to review, I'm concerned that patch fuziness may have resulted in some
errant code being generated but I'll look at that later by comparing the diff
from the base to the branch with the file I attempt to apply to it. This will,
at the very least, put the changes in a better context for others to review
them and attempt to tinker with removing passing of 'struct lwp' through
the kernel.
 1.66.8.2  29-Nov-2005  yamt sync with head.
 1.66.8.1  19-Nov-2005  yamt - as read-ahead context is per-vnode now,
there are less reasons to make VOP_READ call uvm_ra_request explicitly.
move it to pager (uvn_get) so that it can handle accesses via mmap as well.
- pass advice to pager via ubc.
- tweak DPRINTF.

XXX can be disturbed by PGO_LOCKED.

XXX it's controversial where it should be done.
(uvm_fault, uvn_get or genfs_getpages.)
 1.66.2.7  21-Jan-2008  yamt sync with head
 1.66.2.6  07-Dec-2007  yamt sync with head
 1.66.2.5  27-Oct-2007  yamt sync with head.
 1.66.2.4  03-Sep-2007  yamt sync with head.
 1.66.2.3  26-Feb-2007  yamt sync with head.
 1.66.2.2  30-Dec-2006  yamt sync with head.
 1.66.2.1  21-Jun-2006  yamt sync with head.
 1.69.12.1  24-May-2006  tron Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
 1.69.10.1  08-Mar-2006  elad Adapt to kernel authorization changes.
 1.69.8.3  11-Aug-2006  yamt sync with head
 1.69.8.2  24-May-2006  yamt sync with head.
 1.69.8.1  12-Mar-2006  yamt - change the way to account read-ahead stats.
- fix UVM_PQFLAGBITS.
 1.69.6.1  01-Jun-2006  kardel Sync with head.
 1.69.4.1  09-Sep-2006  rpaulo sync with head
 1.72.4.2  12-Jan-2007  ad Sync with head.
 1.72.4.1  18-Nov-2006  ad Sync with head.
 1.73.2.2  10-Dec-2006  yamt sync with head.
 1.73.2.1  22-Oct-2006  yamt sync with head
 1.77.2.1  17-Feb-2007  tron Apply patch (requested by chs in ticket #422):
- Fix various deadlock problems with nullfs and unionfs.
- Speed up path lookups by upto 25%.
 1.78.2.2  12-Mar-2007  rmind Sync with HEAD.
 1.78.2.1  27-Feb-2007  yamt - sync with head.
- move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
 1.81.4.1  11-Jul-2007  mjf Sync with head.
 1.81.2.10  09-Oct-2007  ad Sync with head.
 1.81.2.9  20-Aug-2007  ad Sync with HEAD.
 1.81.2.8  15-Jul-2007  ad Sync with head.
 1.81.2.7  15-Jul-2007  ad Sync with head.
 1.81.2.6  17-Jun-2007  ad - Increase the number of thread priorities from 128 to 256. How the space
is set up is to be revisited.
- Implement soft interrupts as kernel threads. A generic implementation
is provided, with hooks for fast-path MD code that can run the interrupt
threads over the top of other threads executing in the kernel.
- Split vnode::v_flag into three fields, depending on how the flag is
locked (by the interlock, by the vnode lock, by the file system).
- Miscellaneous locking fixes and improvements.
 1.81.2.5  09-Jun-2007  ad Sync with head.
 1.81.2.4  13-Apr-2007  ad - Make the devsw interface MP safe, and add some comments.
- Allow individual block/character drivers to be marked MP safe.
- Provide wrappers around the device methods that look up the
device, returning ENXIO if it's not found, and acquire the
kernel lock if needed.
 1.81.2.3  13-Apr-2007  ad - Fix a (new) bug where vget tries to acquire freed vnodes' interlocks.
- Minor locking fixes.
 1.81.2.2  21-Mar-2007  ad Acquire the kernel lock in the VOP_* wrappers and the socket ops.
 1.81.2.1  13-Mar-2007  ad Pull in the initial set of changes for the vmlocking branch.
 1.83.2.1  15-Aug-2007  skrll Sync with HEAD.
 1.84.4.3  03-Dec-2007  joerg Sync with HEAD.
 1.84.4.2  26-Oct-2007  joerg Sync with HEAD.

Follow the merge of pmap.c on i386 and amd64 and move
pmap_init_tmp_pgtbl into arch/x86/x86/pmap.c. Modify the ACPI wakeup
code to restore CR4 before jumping back into kernel space as the large
page option might cover that.
 1.84.4.1  04-Aug-2007  jmcneill Sync with HEAD.
 1.85.6.2  04-Aug-2007  pooka Use VSIZENOTSET only in KASSERTs
 1.85.6.1  04-Aug-2007  pooka file uvm_vnode.c was added on branch matt-mips64 on 2007-08-04 09:42:59 +0000
 1.85.4.1  14-Oct-2007  yamt sync with head.
 1.85.2.2  09-Jan-2008  matt sync with HEAD
 1.85.2.1  06-Nov-2007  matt sync with HEAD
 1.87.4.2  18-Feb-2008  mjf Sync with HEAD.
 1.87.4.1  08-Dec-2007  mjf Sync with HEAD.
 1.89.6.1  02-Jan-2008  bouyer Sync with HEAD
 1.89.2.2  18-Dec-2007  ad Lock readahead context using the associated object's lock.
 1.89.2.1  04-Dec-2007  ad Pull the vmlocking changes into a new branch.
 1.90.28.4  29-Feb-2012  matt Improve UVM_PAGE_TRKOWN.
Add more asserts to uvm_page.
 1.90.28.3  03-Jun-2011  matt Restore $NetBSD$
 1.90.28.2  03-Jun-2011  matt Rework page free lists to be sorted by color first rather than free_list.
Kept per color PGFL_* counter in each page free list.
Minor cleanups.
 1.90.28.1  25-May-2011  matt Make uvm_map recognize UVM_FLAG_COLORMATCH which tells uvm_map that the
'align' argument specifies the starting color of the KVA range to be returned.

When calling uvm_km_alloc with UVM_KMF_VAONLY, also specify the starting
color of the kva range returned (UMV_KMF_COLORMATCH) and pass those to
uvm_map.

In uvm_pglistalloc, make sure the pages being returned have sequentially
advancing colors (so they can be mapped in a contiguous address range).
Add a few missing UVM_FLAG_COLORMATCH flags to uvm_pagealloc calls.

Make the socket and pipe loan color-safe.

Make the mips pmap enforce strict page color (color(VA) == color(PA)).
 1.90.10.2  11-Mar-2010  yamt sync with head
 1.90.10.1  19-Aug-2009  yamt sync with head.
 1.93.8.1  08-Feb-2011  bouyer Sync with HEAD
 1.93.6.1  06-Jun-2011  jruoho Sync with HEAD.
 1.93.4.4  31-May-2011  rmind sync with head
 1.93.4.3  05-Mar-2011  rmind sync with head
 1.93.4.2  17-Mar-2010  rmind Reorganise UVM locking to protect P->V state and serialise pmap(9)
operations on the same page(s) by always locking their owner. Hence
lock order: "vmpage"-lock -> pmap-lock.

Patch, proposed on tech-kern@, from Andrew Doran.
 1.93.4.1  16-Mar-2010  rmind Change struct uvm_object::vmobjlock to be dynamically allocated with
mutex_obj_alloc(). It allows us to share the locks among UVM objects.
 1.93.2.6  21-Nov-2010  uebayasi uvm_findpage_xip: A few UVMHIST logs.
 1.93.2.5  20-Nov-2010  uebayasi uvn_findpage_xip: This is responsible to return a page with marked
as "busy".
 1.93.2.4  18-Nov-2010  uebayasi Make XIP pager use cdev_mmap() instead of struct vm_physseg.
 1.93.2.3  16-Nov-2010  uebayasi Factor out the part which lookups physical page "identity" from
UVM object, into sys/uvm/uvm_vnode.c:uvn_findpage_xip(). Eventually
this will become a call to cdev UVM object pager.
 1.93.2.2  25-Aug-2010  uebayasi Actually make this build with options XIP.
 1.93.2.1  11-Feb-2010  uebayasi uvn_get: For XIP vnodes, skip read-ahead, because it's pointless.
 1.95.2.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.97.8.1  11-Jun-2012  riz Pull up following revision(s) (requested by martin in ticket #301):
sys/uvm/uvm_vnode.c: revision 1.98
tests/lib/libc/sys/t_mmap.c: revision 1.3
tests/lib/libc/sys/t_mmap.c: revision 1.4
tests/lib/libc/sys/t_mmap.c: revision 1.5
tests/lib/libc/sys/t_mmap.c: revision 1.6
Only use generic readahead on VREG vnodes, the space used to store the
context is not valid on other types.
Prevents the crash reported in PR kern/38889, but does not fix the
mmap of block devices, more work is needed (no size on VBLK vnodes).
Do not skip the block device mmap test, as it does not crash
the kernel any more. Mark it as expected failure instead.
mmap_block:
do not use a hardcoded block device list, but query the kernel for attached
disks instead, then try to mmap the raw partition.
Use atf_tc_skip().
A test case for serious PR kern/38889: crash on open/mmap/close of block
device. The test case is skipped for the time being as it replicates the
panic described in the PR (tested on NetBSD/amd64 6.0 BETA).
 1.97.6.1  02-Jun-2012  mrg sync to latest -current.
 1.97.2.9  02-Nov-2012  yamt uvn_findpage: fix dense case. add comments.
 1.97.2.8  30-Oct-2012  yamt sync with head
 1.97.2.7  01-Aug-2012  yamt - fix integrity sync.
putpages for integrity sync (fsync, msync with MS_SYNC, etc) should not
skip pages being written back by other threads.

- adapt to radix tree tag api changes.
 1.97.2.6  01-Aug-2012  yamt fix a typo in a comment.
 1.97.2.5  17-Feb-2012  yamt byebye PG_HOLE as it turned out to be unnecessary.
 1.97.2.4  18-Jan-2012  yamt - bug fixes
- minor optimizations
- assertions
- comments
 1.97.2.3  20-Dec-2011  yamt don't inline uvn_findpages in genfs_io.
 1.97.2.2  26-Nov-2011  yamt - uvm_page_array_fill: add some more parameters
- uvn_findpages: use gang-lookup
- genfs_putpages: re-enable backward clustering
- mechanical changes after the recent radixtree.h api changes
 1.97.2.1  02-Nov-2011  yamt page cache related changes

- maintain object pages in radix tree rather than rb tree.
- reduce unnecessary page scan in putpages. esp. when an object has a ton of
pages cached but only a few of them are dirty.
- reduce the number of pmap operations by tracking page dirtiness more
precisely in uvm layer.
- fix nfs commit range tracking.
- fix nfs write clustering. XXX hack
 1.99.16.2  27-Dec-2015  skrll Sync with HEAD (as of 26th Dec)
 1.99.16.1  22-Sep-2015  skrll Sync with HEAD
 1.99.2.1  03-Dec-2017  jdolecek update from HEAD
 1.102.10.1  02-Nov-2017  snj Pull up following revision(s) (requested by pgoyette in ticket #335):
share/man/man9/kernhist.9: 1.5-1.8
sys/arch/acorn26/acorn26/pmap.c: 1.39
sys/arch/arm/arm32/fault.c: 1.105 via patch
sys/arch/arm/arm32/pmap.c: 1.350, 1.359
sys/arch/arm/broadcom/bcm2835_bsc.c: 1.7
sys/arch/arm/omap/if_cpsw.c: 1.20
sys/arch/arm/omap/tiotg.c: 1.7
sys/arch/evbarm/conf/RPI2_INSTALL: 1.3
sys/dev/ic/sl811hs.c: 1.98
sys/dev/usb/ehci.c: 1.256
sys/dev/usb/if_axe.c: 1.83
sys/dev/usb/motg.c: 1.18
sys/dev/usb/ohci.c: 1.274
sys/dev/usb/ucom.c: 1.119
sys/dev/usb/uhci.c: 1.277
sys/dev/usb/uhub.c: 1.137
sys/dev/usb/umass.c: 1.160-1.162
sys/dev/usb/umass_quirks.c: 1.100
sys/dev/usb/umass_scsipi.c: 1.55
sys/dev/usb/usb.c: 1.168
sys/dev/usb/usb_mem.c: 1.70
sys/dev/usb/usb_subr.c: 1.221
sys/dev/usb/usbdi.c: 1.175
sys/dev/usb/usbdi_util.c: 1.67-1.70
sys/dev/usb/usbroothub.c: 1.3
sys/dev/usb/xhci.c: 1.75
sys/external/bsd/drm2/dist/drm/i915/i915_gem.c: 1.34
sys/kern/kern_history.c: 1.15
sys/kern/kern_xxx.c: 1.74
sys/kern/vfs_bio.c: 1.275-1.276
sys/miscfs/genfs/genfs_io.c: 1.71
sys/sys/kernhist.h: 1.21
sys/ufs/ffs/ffs_balloc.c: 1.63
sys/ufs/lfs/lfs_vfsops.c: 1.361
sys/ufs/lfs/ulfs_inode.c: 1.21
sys/ufs/lfs/ulfs_vnops.c: 1.52
sys/ufs/ufs/ufs_inode.c: 1.102
sys/ufs/ufs/ufs_vnops.c: 1.239
sys/uvm/pmap/pmap.c: 1.37-1.39
sys/uvm/pmap/pmap_tlb.c: 1.22
sys/uvm/uvm_amap.c: 1.108
sys/uvm/uvm_anon.c: 1.64
sys/uvm/uvm_aobj.c: 1.126
sys/uvm/uvm_bio.c: 1.91
sys/uvm/uvm_device.c: 1.66
sys/uvm/uvm_fault.c: 1.201
sys/uvm/uvm_km.c: 1.144
sys/uvm/uvm_loan.c: 1.85
sys/uvm/uvm_map.c: 1.353
sys/uvm/uvm_page.c: 1.194
sys/uvm/uvm_pager.c: 1.111
sys/uvm/uvm_pdaemon.c: 1.109
sys/uvm/uvm_swap.c: 1.175
sys/uvm/uvm_vnode.c: 1.103
usr.bin/vmstat/vmstat.c: 1.219
Reorder to test for null before null deref in debug code
--
Reorder to test for null before null deref in debug code
--
KNF
--
No need for '\n' in UVMHIST_LOG
--
normalise a BIOHIST log message
--
Update the kernhist(9) kernel history code to address issues identified
in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in
the kernel and in the structures used for exporting the history data
to userland via sysctl(9). This avoids problems on some architectures
where passing a 64-bit (or larger) value to printf(3) can cause it to
process the value as multiple arguments. (This can be particularly
problematic when printf()'s format string is not a literal, since in
that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to
include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings
updated. Each format specifier now includes an explicit length
modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings
updated to replace uses of "%p" with "%#jx", and the pointer
arguments are now cast to (uintptr_t) before being subsequently cast
to (uintmax_t). This is needed to avoid compiler warnings about
casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or
"%c" format strings replaced with numeric formats; several instances
of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the
history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with
the -u option does not exist (previously, this condition was silently
ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the
data exported via sysctl(9) and exits if they do not match the values
with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional
requirements imposed on the format strings, along with several other
minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example,
uint64_t) for the history arguments. But that would require another
"rototill" of all the users in the future when we add support for an
architecture that supports a larger size. Also, the printf(3)
format
specifiers for explicitly-sized values, such as "%"PRIu64, are much
more verbose (and less aesthetically appealing, IMHO) than simply
using "%ju".
[2] I've tried very hard to find "all [the] existing users of
kernhist(9)"
but it is possible that I've missed some of them. I would be glad
to
update any stragglers that anyone identifies.
--
For some reason this single kernel seems to have outgrown its declared
size as a result of the kernhist(9) changes. Bump the size.
XXX The amount of increase may be excessive - anyone with more detailed
XXX knowledge please feel free to further adjust the value
appropriately.
--
Misssed one cast of pointer --> uintptr_t in previous kernhist(9) commit
--
And yet another one. :(
--
Use correct mark-up for NetBSD version.
--
More improvements in grammar and readability.
--
Remove a stray '"' (obvious typo) and add a couple of casts that are
probably needed.
--
And replace an instance of "%p" conversion with "%#jx"
--
Whitespace fix. Give Bl tag table a width. Fix Xr.
 1.103.4.1  08-Apr-2020  martin Merge changes from current as of 20200406
 1.104.2.2  29-Feb-2020  ad Sync with head.
 1.104.2.1  17-Jan-2020  ad Sync with head.
 1.117.2.1  03-Apr-2021  thorpej Sync with HEAD.

RSS XML Feed