Commit Graph

8843 Commits

Author SHA1 Message Date
Rodney W. Grimes
160eabb8c0 This is a major rework of newvers.sh to put it back much closer to
what CSRG had, plus make things like, TYPE, REVISION, and BRANCH
easy to set, and derive RELEASE and VERSION from them.

Kill the JUST_TELL_ME hack, it is no longer needed.

Kill DISTNAME, I could find no reveference to it any place in the
source tree.

Now I just need to rework a few bits in release/Makefile, but want
to wait and talk to jkh about that.

Oh, and your now all running:
TYPE="FreeBSD"
REVISION="2.2"
BRANCH="CURRENT"

and the -BUILD-yymmdd is dead and gone.  The date was already in the
version[] string, no need for it to be there in 2 formats!
1995-07-13 10:54:23 +00:00
David Greenman
588d138f56 Added a copyright to this file. 1995-07-13 10:29:34 +00:00
David Greenman
2541af0bba Oops, forgot to add the "default" pager files...
NOTE: libkvm, w, ps, 'top', and any other utility which depends on struct
      proc or any VM system structure will have to be rebuilt!!!

Much needed overhaul of the VM system. Included in this first round of
changes:

1) Improved pager interfaces: init, alloc, dealloc, getpages, putpages,
   haspage, and sync operations are supported. The haspage interface now
   provides information about clusterability. All pager routines now take
   struct vm_object's instead of "pagers".

2) Improved data structures. In the previous paradigm, there is constant
   confusion caused by pagers being both a data structure ("allocate a
   pager") and a collection of routines. The idea of a pager structure has
   escentially been eliminated. Objects now have types, and this type is
   used to index the appropriate pager. In most cases, items in the pager
   structure were duplicated in the object data structure and thus were
   unnecessary. In the few cases that remained, a un_pager structure union
   was created in the object to contain these items.

3) Because of the cleanup of #1 & #2, a lot of unnecessary layering can now
   be removed. For instance, vm_object_enter(), vm_object_lookup(),
   vm_object_remove(), and the associated object hash list were some of the
   things that were removed.

4) simple_lock's removed. Discussion with several people reveals that the
   SMP locking primitives used in the VM system aren't likely the mechanism
   that we'll be adopting. Even if it were, the locking that was in the code
   was very inadequate and would have to be mostly re-done anyway. The
   locking in a uni-processor kernel was a no-op but went a long way toward
   making the code difficult to read and debug.

5) Places that attempted to kludge-up the fact that we don't have kernel
   thread support have been fixed to reflect the reality that we are really
   dealing with processes, not threads. The VM system didn't have complete
   thread support, so the comments and mis-named routines were just wrong.
   We now use tsleep and wakeup directly in the lock routines, for instance.

6) Where appropriate, the pagers have been improved, especially in the
   pager_alloc routines. Most of the pager_allocs have been rewritten and
   are now faster and easier to maintain.

7) The pagedaemon pageout clustering algorithm has been rewritten and
   now tries harder to output an even number of pages before and after
   the requested page. This is sort of the reverse of the ideal pagein
   algorithm and should provide better overall performance.

8) Unnecessary (incorrect) casts to caddr_t in calls to tsleep & wakeup
   have been removed. Some other unnecessary casts have also been removed.

9) Some almost useless debugging code removed.

10) Terminology of shadow objects vs. backing objects straightened out.
    The fact that the vm_object data structure escentially had this
    backwards really confused things. The use of "shadow" and "backing
    object" throughout the code is now internally consistent and correct
    in the Mach terminology.

11) Several minor bug fixes, including one in the vm daemon that caused
    0 RSS objects to not get purged as intended.

12) A "default pager" has now been created which cleans up the transition
    of objects to the "swap" type. The previous checks throughout the code
    for swp->pg_data != NULL were really ugly. This change also provides
    the rudiments for future backing of "anonymous" memory by something
    other than the swap pager (via the vnode pager, for example), and it
    allows the decision about which of these pagers to use to be made
    dynamically (although will need some additional decision code to do
    this, of course).

13) (dyson) MAP_COPY has been deprecated and the corresponding "copy
    object" code has been removed. MAP_COPY was undocumented and non-
    standard. It was furthermore broken in several ways which caused its
    behavior to degrade to MAP_PRIVATE. Binaries that use MAP_COPY will
    continue to work correctly, but via the slightly different semantics
    of MAP_PRIVATE.

14) (dyson) Sharing maps have been removed. It's marginal usefulness in a
    threads design can be worked around in other ways. Both #12 and #13
    were done to simplify the code and improve readability and maintain-
    ability. (As were most all of these changes)

TODO:

1) Rewrite most of the vnode pager to use VOP_GETPAGES/PUTPAGES. Doing
   this will reduce the vnode pager to a mere fraction of its current size.

2) Rewrite vm_fault and the swap/vnode pagers to use the clustering
   information provided by the new haspage pager interface. This will
   substantially reduce the overhead by eliminating a large number of
   VOP_BMAP() calls. The VOP_BMAP() filesystem interface should be
   improved to provide both a "behind" and "ahead" indication of
   contiguousness.

3) Implement the extended features of pager_haspage in swap_pager_haspage().
   It currently just says 0 pages ahead/behind.

4) Re-implement the swap device (swstrategy) in a more elegant way, perhaps
   via a much more general mechanism that could also be used for disk
   striping of regular filesystems.

5) Do something to improve the architecture of vm_object_collapse(). The
   fact that it makes calls into the swap pager and knows too much about
   how the swap pager operates really bothers me. It also doesn't allow
   for collapsing of non-swap pager objects ("unnamed" objects backed by
   other pagers).
1995-07-13 10:15:03 +00:00
Rodney W. Grimes
38d29ffcd6 Remove NOOBJ, we now need it.
Remove JUST_TELL_ME hack, let the newvers.sh output fall into the
obj dir, and add CLEANFILES= to clean up after it.
1995-07-13 10:04:11 +00:00
Rodney W. Grimes
5e92b09f4f Add a sprinkling of ${.CURDIR} to some paths so that this works
in the presence of an obj dir (though NOOBJ is set now, that shall
change in the near future.)
1995-07-13 09:57:34 +00:00
Rodney W. Grimes
d0a25995fc [I cvs admin -o the last one of these you saw, it was commited on
the wrong branch :-(]

Eliminate incorrect double negative logic Bruce has been gripping
about for a year now.  Change = no_way to = true.

Submitted by: bde (sort of, patch by me :-))
1995-07-13 09:15:50 +00:00
David Greenman
24a1cce34f NOTE: libkvm, w, ps, 'top', and any other utility which depends on struct
proc or any VM system structure will have to be rebuilt!!!

Much needed overhaul of the VM system. Included in this first round of
changes:

1) Improved pager interfaces: init, alloc, dealloc, getpages, putpages,
   haspage, and sync operations are supported. The haspage interface now
   provides information about clusterability. All pager routines now take
   struct vm_object's instead of "pagers".

2) Improved data structures. In the previous paradigm, there is constant
   confusion caused by pagers being both a data structure ("allocate a
   pager") and a collection of routines. The idea of a pager structure has
   escentially been eliminated. Objects now have types, and this type is
   used to index the appropriate pager. In most cases, items in the pager
   structure were duplicated in the object data structure and thus were
   unnecessary. In the few cases that remained, a un_pager structure union
   was created in the object to contain these items.

3) Because of the cleanup of #1 & #2, a lot of unnecessary layering can now
   be removed. For instance, vm_object_enter(), vm_object_lookup(),
   vm_object_remove(), and the associated object hash list were some of the
   things that were removed.

4) simple_lock's removed. Discussion with several people reveals that the
   SMP locking primitives used in the VM system aren't likely the mechanism
   that we'll be adopting. Even if it were, the locking that was in the code
   was very inadequate and would have to be mostly re-done anyway. The
   locking in a uni-processor kernel was a no-op but went a long way toward
   making the code difficult to read and debug.

5) Places that attempted to kludge-up the fact that we don't have kernel
   thread support have been fixed to reflect the reality that we are really
   dealing with processes, not threads. The VM system didn't have complete
   thread support, so the comments and mis-named routines were just wrong.
   We now use tsleep and wakeup directly in the lock routines, for instance.

6) Where appropriate, the pagers have been improved, especially in the
   pager_alloc routines. Most of the pager_allocs have been rewritten and
   are now faster and easier to maintain.

7) The pagedaemon pageout clustering algorithm has been rewritten and
   now tries harder to output an even number of pages before and after
   the requested page. This is sort of the reverse of the ideal pagein
   algorithm and should provide better overall performance.

8) Unnecessary (incorrect) casts to caddr_t in calls to tsleep & wakeup
   have been removed. Some other unnecessary casts have also been removed.

9) Some almost useless debugging code removed.

10) Terminology of shadow objects vs. backing objects straightened out.
    The fact that the vm_object data structure escentially had this
    backwards really confused things. The use of "shadow" and "backing
    object" throughout the code is now internally consistent and correct
    in the Mach terminology.

11) Several minor bug fixes, including one in the vm daemon that caused
    0 RSS objects to not get purged as intended.

12) A "default pager" has now been created which cleans up the transition
    of objects to the "swap" type. The previous checks throughout the code
    for swp->pg_data != NULL were really ugly. This change also provides
    the rudiments for future backing of "anonymous" memory by something
    other than the swap pager (via the vnode pager, for example), and it
    allows the decision about which of these pagers to use to be made
    dynamically (although will need some additional decision code to do
    this, of course).

13) (dyson) MAP_COPY has been deprecated and the corresponding "copy
    object" code has been removed. MAP_COPY was undocumented and non-
    standard. It was furthermore broken in several ways which caused its
    behavior to degrade to MAP_PRIVATE. Binaries that use MAP_COPY will
    continue to work correctly, but via the slightly different semantics
    of MAP_PRIVATE.

14) (dyson) Sharing maps have been removed. It's marginal usefulness in a
    threads design can be worked around in other ways. Both #12 and #13
    were done to simplify the code and improve readability and maintain-
    ability. (As were most all of these changes)

TODO:

1) Rewrite most of the vnode pager to use VOP_GETPAGES/PUTPAGES. Doing
   this will reduce the vnode pager to a mere fraction of its current size.

2) Rewrite vm_fault and the swap/vnode pagers to use the clustering
   information provided by the new haspage pager interface. This will
   substantially reduce the overhead by eliminating a large number of
   VOP_BMAP() calls. The VOP_BMAP() filesystem interface should be
   improved to provide both a "behind" and "ahead" indication of
   contiguousness.

3) Implement the extended features of pager_haspage in swap_pager_haspage().
   It currently just says 0 pages ahead/behind.

4) Re-implement the swap device (swstrategy) in a more elegant way, perhaps
   via a much more general mechanism that could also be used for disk
   striping of regular filesystems.

5) Do something to improve the architecture of vm_object_collapse(). The
   fact that it makes calls into the swap pager and knows too much about
   how the swap pager operates really bothers me. It also doesn't allow
   for collapsing of non-swap pager objects ("unnamed" objects backed by
   other pagers).
1995-07-13 08:48:48 +00:00
Rodney W. Grimes
33d23de425 Remove CCFPU, it is no longer used any place in the source tree.
Submitted by:	Thomas Graichen <graichen@sirius.physik.fu-berlin.de>
1995-07-13 08:43:14 +00:00
Rodney W. Grimes
c7e5c6a843 Make ld's error messages consistent with gcc when no input files
are given on the command line.

Submitted by:	Thomas Graichen <graichen@omega.physik.fu-berlin.de>
1995-07-13 08:30:07 +00:00
Satoshi Asami
eb2e3d5f9b Add new sup targets for the following categories:
benchmarks, emulators, security, sysutils
1995-07-12 23:56:50 +00:00
Gary Palmer
30bf6ffa62 Don't set SHELL by default - if you chpass -s your shell, this
will over-ride it and confuse several applications, including
xterm
1995-07-12 22:42:55 +00:00
Garrett Wollman
99005ad98e Added support for an LCS-style `wheel su' which allows users in group wheel
to su to root by authenticating as themselves (using a password or S/Key)
rather than by using the root password.  This is useful in contexts like
ours, where a large group of people need root access to a set of machines.
(However, the security implications are such that this should not be
enabled by default.)

The code is conditionalized on WHEELSU.
1995-07-12 20:11:19 +00:00
Bruce Evans
926e94cd40 Don't attempt to read the variable total' from the kernel. total'
isn't used in systat or in the kernel (it was replaced by a sysctl()
call involving VM_METER) and will go away when I clean up bogus
common variables in the kernel.
1995-07-12 20:09:02 +00:00
Bruce Evans
7e4a866916 Instantiate our own variables instead of depending on bogus common
declarations in system headers that will be fixed soon.
1995-07-12 19:21:36 +00:00
Bruce Evans
30df0b88e1 Instantiate our own variables instead of depending on bogus common
declarations in system headers that will be fixed soon.
1995-07-12 19:10:17 +00:00
Bruce Evans
fce8868368 Fix dependencies for regex.texi. It is constructed by merging a C header
file with an info source file.
1995-07-12 19:02:06 +00:00
Bruce Evans
460396d6ee Fix dependencies for gcc.info and reno.info. `make depend' doesn't handle
info files although texinfo supports @include.
1995-07-12 18:57:21 +00:00
Bruce Evans
6e13a63dcd Add kbdmap. 1995-07-12 18:43:38 +00:00
Bruce Evans
0a49b28a4f Remove -g from CFLAGS. 1995-07-12 18:35:45 +00:00
Bill Paul
e1086b16a9 ypserv performance improvements:
- There are two cases where the server can potentially block for a long
  time while servicing a request: when handling a yp_all() request, which
  could take a while to complete if the map being transfered is large
  (e.g. 'ypcat passwd' where passwd.byname has 10,000 entries in it),
  and while doing DNS lookups when in SunOS compat mode (with the -dns
  flag), since some DNS lookups can take a long time to complete. While
  ypserv is blocked, other clients making requests to the server will
  also block. To fix this, we fork() ypall and DNS lookups into subprocesses
  and let the parent ypserv process go on servicing other incoming
  requests.

  We place a cap on the number of simultaneous processes that ypserv can
  fork (set at 20 for now) and go back to 'linear mode' if it hits the
  limit (which just means it won't fork() anymore until the number of
  simultaneous processes drops under 20 again). The cap does not apply
  to fork()s done as a result of ypxfr calls, since we want to do our
  best to insure that map transfers from master servers succeed.

  To make this work, we need our own special copy of svc_run() so that
  we can properly terminate child processes once the RPC dispatch
  functions have run.

  (I have no idea what SunOS does in this situation. The only other
  possibility I can think of is async socket I/O, but that seems
  like a headache and a half to implement.)

- Do the politically correct thing and use sigaction() instead of
  signal() to install the SIGCHLD handler and to ignore SIGPIPEs.

- Doing a yp_all() is sometimes slow due to the way read_database() is
  implemented. This is turn is due to a certain deficiency in the DB
  hash method: the R_CURSOR flag doesn't work, which means that when
  handed a key and asked to return the key/data pair for the _next_
  key in the map, we have to reset the DB pointer to the start of the
  database, step through until we find the requested key, step one
  space ahead to the _next_ key, and then use that. (The original ypserv
  code used GDBM has a function called gdbm_nextkey() that does
  this for you.) This can get really slow for large maps. However,
  when doing a ypall, it seems that all database access are sequential,
  so we can forgo the first step (the 'search the database until we find
  the key') since the database should remain open and the cursor
  should be positioned at the right place until the yp_all() call
  finishes. We can't make this assumption for arbitrary yp_first()s
  and yp_next()s however (since we may have requests from several clients
  for different maps all arriving at different times) so those we have
  to handle the old way.

  (This would be much easier if R_CURSOR really worked. Maybe I should
   be using something other than the hash method.)
1995-07-12 16:28:13 +00:00
John Fieber
afdd6e6485 A variety of small enhancements.
Submitted by:	asami@cs.berkeley.edu (Satoshi Asami)
1995-07-12 15:01:38 +00:00
Poul-Henning Kamp
15abc19f5d Fix to match new MD5 api. Faster, fixes memory leak. 1995-07-12 09:16:13 +00:00
Poul-Henning Kamp
9010366de8 Fix to match new MD5 api, faster. 1995-07-12 09:15:15 +00:00
Poul-Henning Kamp
116805fd7a Fix to match new API. Fixes memory leak, faster. 1995-07-12 09:14:46 +00:00
Poul-Henning Kamp
05f65b296e Change this to do what it should have done from the start.
Add argument for buffer for output.
Fix manuals.
1995-07-12 09:13:49 +00:00
Bruce Evans
270d5e9f91 Optimize the zeroing of quotes. b_to_q() was always taking about 20% of
its time zeroing quotes although quotes are not very common.  E.g., there
are never any quotes in output queues.
1995-07-11 19:39:54 +00:00
Bruce Evans
5182dcbec2 Rearrange the inner loop of scanc() to get better code on i*86's
(on an i486, 10 cycles (+ cache misses) instead of 15).  The
change should be a no-op if the compiler is any good.  The best
possible i*86 code for the same algorithm is only 1 more cycle
faster on i486's so I don't want to bother implementing an
assembler version.

scanc() is a bottleneck for OPOST processing.  It is naturally
about 4 times as slow as bcopy() on 32-bit systems.
1995-07-11 18:50:47 +00:00
Bruce Evans
d800e06858 Fix races in scstart(). q_to_b() wasn't called at spltty(), so there
were two races:
- q_to_b() might unexpectedly return 0 (e.g, after a keyboard signal
  flushes the output queue and isn't echoed).  ansi_put() interprets
  0 bytes as 4GB...
- more output (e.g. for echoes) might arrive afer q_to_b() returns 0.
  Then scstart() returns presumably and the new output might not be
  handled for a long time.

Remove unused function scxint().

Fix prototypes (foo() isn't a prototype).
1995-07-11 18:34:30 +00:00
Bruce Evans
f2fb20ef41 Speed up the inner loop of ansi_put() by a few percent.
syscons' output is now only about 4-5 times slower than I want.
It loses a factor of 2 for scrolling output by unnecessarily copying
the screen buffer, a factor of 4/3 for dumb OPOST processing, and
a factor of 3/2 for clist processing.
1995-07-11 17:59:22 +00:00
Bruce Evans
7fbcd76bb5 Enable pcvt in LINT and don't generate a compile time error if syscons
and pcvt are both configured when LINT is defined.  There will be a
link time error instead.  This is to test building of pcvt more often.
1995-07-11 17:20:20 +00:00
Bruce Evans
50e2fb8055 Remove a bogus fclose. Normally the "w" stream for /var/crash/bounds was
fclosed twice and this didn't seem to cause any problems, but when
/var/crash was on an an unwritable nfs-mounted partition, fclose(NULL)
caused a core dump.
1995-07-11 17:03:44 +00:00
Peter Dufault
ca4b4242c9 The mode page editor never cleaned up the temp files. Thanks
to Joerg for noticing.  This low risk bug fix is appropriate for
2.1.
1995-07-11 09:21:33 +00:00
Jordan K. Hubbard
7c3041774a Documentation changes reflect the new hardware support and change the
appearance version to 2.0.5 (was 2.1).    Nice and tidy.   :-)
Submitted by:	Frank Durda IV <uhclem%nemesis@fw.ast.com>
1995-07-11 03:04:20 +00:00
Jordan K. Hubbard
15c761840a Release summary: (detailed descriptions in Edit History in matcd.c)
Adds support for non-Sound Blaster host adapters, including those
distributed by Reveal, Lasermate, IBM, Media Vision, Crystal and others.
The driver automatically senses the correct adapter type and you can
have both in the system at the same time.
(This change should eliminate a few complaints.)

Corrected bit-masking problem that prevented use on SB Vibra-16 boards.

Declared some internal data and functions static that should have been
that way all along.

Documentation changes reflect the new hardware support and change the
appearance version to 2.0.5 (was 2.1).    Nice and tidy.   :-)


Beta testers have verified functionality on SB16, Vibra-16, Media Vision
and Reveal adapters.   -Wall still shows no warnings.

                                        Frank Durda IV
                                        uhclem%nemesis@fw.ast.com
Submitted by:	Frank Durda IV <uhclem%nemesis@fw.ast.com>
1995-07-11 03:03:47 +00:00
Satoshi Asami
1feb36cd2d Add IS_DEPENDED_TARGET to change the behavior of a port when you want
to do something else than "install".  For example,

make IS_DEPENDED_TARGET=fetch fetch

will fetch the required distfiles including those of the dependencies
without actually building and installing dependencies.

Also document ECHO_MSG.

Requested by:	paul
Reviewed by:	paul, jhs and others
1995-07-11 02:15:35 +00:00
Mark Murray
bc6a510069 Correct typo. kadmin -> kadmind
Submitted by:	rich@lamprey.utmb.edu
1995-07-10 20:14:08 +00:00
Garrett Wollman
5b7ee6ed04 ICMP messages received from broken hosts which reply to multicast packets
were mistakenly delivered, rather than getting thrown out, which caused
substantial lossage.

Submitted by: Bill Fenner <fenner@parc.xerox.com>
1995-07-10 16:16:00 +00:00
Garrett Wollman
b399224dfb Patches to correct endianness bugs in mtrace and a few other little
problems.

Submitted by: bill Fenner <fenner@parc.xerox.com>
1995-07-10 16:13:05 +00:00
Garrett Wollman
dd22498271 tcp_input.c - keep track of how many times a route contained a cached rtt
or ssthresh that we were able to use

tcp_var.h - declare tcpstat entries for above; declare tcp_{send,recv}space

in_rmx.c - fill in the MTU and pipe sizes with the defaults TCP would have
	used anyway in the absence of values here
1995-07-10 15:39:16 +00:00
Garrett Wollman
8e718bb4af When adding a route, set rt_ifa and rt_ifp a little earlier so that
the protocol-specific add routine can examine it if desired.
1995-07-10 15:22:37 +00:00
David Greenman
6306c897b5 swapout_threads() -> swapout_procs(). 1995-07-10 08:53:22 +00:00
David Greenman
f2daac0c69 Increased global RSS limit to total RAM. 1995-07-10 08:48:58 +00:00
David Greenman
6b43f2f020 Killed bogus sparc #ifdef. 1995-07-10 08:39:49 +00:00
John Fieber
5295947e32 Added the contents of CONTRIB.FreeBSD as an appendix. 1995-07-09 21:39:55 +00:00
John Fieber
32e2e7c0cb Change freebsd-users-groups to freebsd-user-groups 1995-07-09 16:36:00 +00:00
David Greenman
c6e8c3576e Fixed panic that occurs on certain firewall rejected packets that was
caused by dtom() being used on an mbuf cluster. The fix involves passing
around the mbuf pointer.

Submitted by:	Bill Fenner
1995-07-09 14:29:46 +00:00
Joerg Wunsch
2c413cbe50 Fix the prototypes for getservby{name,port}().
Closes PR #docs/568: minor manpage bug

Submitted by:	Michael Smith (email address no longer valid)
1995-07-09 08:17:01 +00:00
Joerg Wunsch
6aeb10f748 PR #kern/572:
>Synopsis:       Booting w/scsi tape in drive causes first use to fail

Booting with a tape in a SCSI tape drive will cause the first
use of the tape to fail with the following message:

st0: bad request, must be between 0 and 0.

Submitted by:	mpp@legarto.minn.net (Mike Pritchard)
1995-07-09 08:14:24 +00:00
Joerg Wunsch
6f64074e6b Move some struct definitions outside of struct's, so their scopes for
C++ will match the scopes for C.

Submitted by:	Warner Losh
1995-07-09 08:12:27 +00:00
David Greenman
06cb725951 Moved call to VOP_GETATTR() out of vnode_pager_alloc() and into the places
that call vnode_pager_alloc() so that a failure return can be dealt with.
This fixes a panic seen on NFS clients when a file being opened is deleted
on the server before the open completes.
1995-07-09 06:58:03 +00:00