Brian Somers [Mon, 21 Jun 2004 08:01:16 +0000 (08:01 +0000)]
o Reduce path names in RRQ and WRQ packets by:
Reducing "/+./" strings to "/"
Reducing "/[^/]+/../" to "/"
o Don't send an OACK when the result of the [RW]RQ is an error.
These changes allow tftpd to interact with pxelinux.bin from the syslinux
package.
Whilst the path reducing code doesn't properly handle situations where the
path component before the "/../" is a symlink to (say) ".", I would suggest
that it does the right thing in terms of the clients perception of what
their path string actually represents. This seems better than using
realpath() and breaking environments where symlinks point outside of the
directory hierarchy that tftpd is configured to allow.
Robert Watson [Mon, 21 Jun 2004 00:20:43 +0000 (00:20 +0000)]
Merge next step in socket buffer locking:
- sowakeup() now asserts the socket buffer lock on entry. Move
the call to KNOTE higher in sowakeup() so that it is made with
the socket buffer lock held for consistency with other calls.
Release the socket buffer lock prior to calling into pgsigio(),
so_upcall(), or aio_swake(). Locking for this event management
will need revisiting in the future, but this model avoids lock
order reversals when upcalls into other subsystems result in
socket/socket buffer operations. Assert that the socket buffer
lock is not held at the end of the function.
- Wrapper macros for sowakeup(), sorwakeup() and sowwakeup(), now
have _locked versions which assert the socket buffer lock on
entry. If a wakeup is required by sb_notify(), invoke
sowakeup(); otherwise, unconditionally release the socket buffer
lock. This results in the socket buffer lock being released
whether a wakeup is required or not.
- Break out socantsendmore() into socantsendmore_locked() that
asserts the socket buffer lock. socantsendmore()
unconditionally locks the socket buffer before calling
socantsendmore_locked(). Note that both functions return with
the socket buffer unlocked as socantsendmore_locked() calls
sowwakeup_locked() which has the same properties. Assert that
the socket buffer is unlocked on return.
- Break out socantrcvmore() into socantrcvmore_locked() that
asserts the socket buffer lock. socantrcvmore() unconditionally
locks the socket buffer before calling socantrcvmore_locked().
Note that both functions return with the socket buffer unlocked
as socantrcvmore_locked() calls sorwakeup_locked() which has
similar properties. Assert that the socket buffer is unlocked
on return.
- Break out sbrelease() into a sbrelease_locked() that asserts the
socket buffer lock. sbrelease() unconditionally locks the
socket buffer before calling sbrelease_locked().
sbrelease_locked() now invokes sbflush_locked() instead of
sbflush().
- Assert the socket buffer lock in socket buffer sanity check
functions sblastrecordchk(), sblastmbufchk().
- Assert the socket buffer lock in SBLINKRECORD().
- Break out various sbappend() functions into sbappend_locked()
(and variations on that name) that assert the socket buffer
lock. The !_locked() variations unconditionally lock the socket
buffer before calling their _locked counterparts. Internally,
make sure to call _locked() support routines, etc, if already
holding the socket buffer lock.
- Break out sbinsertoob() into sbinsertoob_locked() that asserts
the socket buffer lock. sbinsertoob() unconditionally locks the
socket buffer before calling sbinsertoob_locked().
- Break out sbflush() into sbflush_locked() that asserts the
socket buffer lock. sbflush() unconditionally locks the socket
buffer before calling sbflush_locked(). Update panic strings
for new function names.
- Break out sbdrop() into sbdrop_locked() that asserts the socket
buffer lock. sbdrop() unconditionally locks the socket buffer
before calling sbdrop_locked().
- Break out sbdroprecord() into sbdroprecord_locked() that asserts
the socket buffer lock. sbdroprecord() unconditionally locks
the socket buffer before calling sbdroprecord_locked().
- sofree() now calls socantsendmore_locked() and re-acquires the
socket buffer lock on return. It also now calls
sbrelease_locked().
- sorflush() now calls socantrcvmore_locked() and re-acquires the
socket buffer lock on return. Clean up/mess up other behavior
in sorflush() relating to the temporary stack copy of the socket
buffer used with dom_dispose by more properly initializing the
temporary copy, and selectively bzeroing/copying more carefully
to prevent WITNESS from getting confused by improperly
initialized mutexes. Annotate why that's necessary, or at
least, needed.
- soisconnected() now calls sbdrop_locked() before unlocking the
socket buffer to avoid locking overhead.
Some parts of this change were:
Submitted by: sam
Sponsored by: FreeBSD Foundation
Obtained from: BSD/OS
Add the `-O emul' format option, which prints the name of the system-call
emulation environment the process is in. "emul" as a keyword is picked
up from OpenBSD.
Marcel Moolenaar [Sun, 20 Jun 2004 22:32:19 +0000 (22:32 +0000)]
Fix the following error:
ld: locore.o: non-pic code with imm relocation against dynamic
symbol `__gp'
With binutils 2.15, ld(1) defines the implicit/automatic symbol __gp
as a dynamic symbol and thus will now complain when used in a non-PIC
fashion (the immediate relocation used to set the GP register). Resolve
this by defining __gp in the linker script. Make sure __gp is aligned
on a 16-byte boundary.
Note: the 0x200000 magic offset is due to having a 22-bit GP-relative
relocation. The GOT will be accessed with negative offsets from GP.
From SUSv3:
Any [standard output] field need not be meaningful in all
implementations. In such a case a hyphen ('-') should be
output in place of the field value
So have the `-O label' option print out the string " -" if the
process has no label.
Approved by: Silence from rwatson and green (when asked in March...)
Add new output-format keywords of LWP and NLWP, which show the thread-id
and number-of-threads tied to a process. Result can be seen by typing,
e.g.: ps -HO lwp,nlwp
These new options are not documented yet. More options will be coming,
and I will update the man page after I get farther along.
PR: bin/65803 (though adjusted to fit our present source)
Submitted by: Cyrille Lefevre
Change the architecture-based setting of KINFO_PROC_SIZE and KI_NSPARE so
that it is a series of alphabetically-ordered #fidef's, from Bruce Evans.
Define two new thread-related values in kproc_info, from Cyrille Lefevre.
Also remove a few values from kproc_info that were not needed, and change
around a few comments, from me. Changes are combined into a single commit
simply because it is a hassle to make sure that alignments and sizes are
not changed on any platform when modifying kproc_info.
Robert Watson [Sun, 20 Jun 2004 21:47:12 +0000 (21:47 +0000)]
It's now the responsibility of the consumer of soabort() to remove a
socket from its accept queue when aborting it during a new inbound
connection. Update spx_input() to acquire the accept lock, assert
the condition of the socket on its parent queue, and approriately
disconnect it from the queue before calling soabort() on it.
Have the main() routine calculate %CPU and (if needed) memory information
when copying per-process info before starting to sort the list. This way,
sort-by-CPU or sort-by-memory will only calculate values once-per-process,
instead of twice-per-comparison. Also take advantage of this to simplify
the pscomp() routine.
Bill Paul [Sun, 20 Jun 2004 21:08:58 +0000 (21:08 +0000)]
Remove one more unneeded reference to arpcom.ac_netgraph.
Tweak things so that ng_fec has a chance of working with things
other than ethernet. Use ifp->if_output of the underlying interfaces
and use IF_HANDOFF() rather than depending on ether_output() and
ether_output_frame() explicitly. Also, don't insist that underlying
devices be IFM_ETHER when checking their link states in the link
monitor code.
With these changes, I was able to create a two channel bundle
consisting of one ethernet interface and one 802.11 wireless
device (via ndis). Note that this only works because both devices
use the same if_output vector: ng_fec will not let you bundle
devices with different output vectors together (it really doesn't
make sense to do that).
Alan Cox [Sun, 20 Jun 2004 20:57:06 +0000 (20:57 +0000)]
- Simplify pmap_remove_pages(), eliminating unnecessary indirection.
- Simplify the locking of pmap_is_modified() by converting control flow to
data flow.
Marcel Moolenaar [Sun, 20 Jun 2004 20:36:15 +0000 (20:36 +0000)]
Revive files which were pulled from the vendor branch only to be
removed on HEAD, but which are part of the GDB 6.1.1 import. This
makes HEAD identical to the vendor branch, for better or for
worse.
Robert Watson [Sun, 20 Jun 2004 20:10:05 +0000 (20:10 +0000)]
IP multicast code no longer needs to acquire Giant before appending
an mbuf onto a socket buffer. This is left over from debug.mpsafenet
affecting the forwarding/bridging plane only.
Bill Paul [Sun, 20 Jun 2004 19:22:22 +0000 (19:22 +0000)]
Stash our node context pointer somewhere else within struct ifnet of
underlying interfaces rather than using ac_netgraph in struct arpcom.
The latter is meant only for use by ng_ether, and using it breaks
interoperability with the rest of netgraph.
Robert Watson [Sun, 20 Jun 2004 17:50:42 +0000 (17:50 +0000)]
When retrieving the SO_LINGER socket option for user space, hold the
socket lock over pulling so_options and so_linger out of the socket
structure in order to retrieve a consistent snapshot. This may be
overkill if user space doesn't require a consistent snapshot.
Robert Watson [Sun, 20 Jun 2004 17:38:19 +0000 (17:38 +0000)]
Annotate some ordering-related issues in solisten() which are not yet
resolved by socket locking: in particular, that we test the connection
state at the socket layer without locking, request that the protocol
begin listening, and then set the listen state on the socket
non-atomically, resulting in a non-atomic cross-layer test-and-set.
Thomas Moestl [Sun, 20 Jun 2004 17:31:01 +0000 (17:31 +0000)]
Initialize ni_cnd.cn_cred before calling lookup() (this is normally done
by namei(), which cannot easily be used here however). This fixes boot
time crashes on sparc64 and probably other platforms.
Maxime Henrion [Sun, 20 Jun 2004 14:30:33 +0000 (14:30 +0000)]
Re-add the code to automatically load the smbfs.ko module if necessary.
We can't realy on the mount(2) system call to do it for us here because
smb_lib_init() needs the module and we call it before mount(). The old
code has been slightly modified to not use the getvfsent(3) API which
is now retired.
David Schultz [Sun, 20 Jun 2004 09:25:27 +0000 (09:25 +0000)]
Add trivial implementations of scalbln() and scalblnf().
These routines are specified in C99 for the sake of
architectures where an int isn't big enough to represent
the full range of floating-point exponents. However,
even the 128-bit long double format has an exponent smaller
than 15 bits, so for all practical purposes, scalbln() and
scalblnf() are aliases for scalbn() and scalbnf(), respectively.
Bruce Evans [Sun, 20 Jun 2004 03:11:19 +0000 (03:11 +0000)]
Backed out previous commit. The dev_t -> `struct cdev *' changes have
lots of errors. Blind substitution of "dev_t foo" by "struct cdev *foo"
in comments usually just created an English syntax error (e.g.,
"struct cdev *changes"), but here it did less than that since the dev_t
is a user dev_t.
Add a call to calcru() to update the kproc_info fields of ki_rusage.ru_utime
and ki_rusage.ru_stime. This greatly improves the accuracy of those fields.
Ian Dowse [Sat, 19 Jun 2004 22:41:18 +0000 (22:41 +0000)]
Print the `99.99% done, finished soon' message only as often as the
normal status messages. Previously a large number of these new
messages could be spewed out towards the end of a dump.
Bruce Evans [Sat, 19 Jun 2004 22:24:16 +0000 (22:24 +0000)]
Clear any pending exceptions before using frstor (in the non-FXSR case)
in npxsetregs() too. npxsetregs() must overwrite the previous state, and
it is never paired with an npxgetregs() that would defuse the previous
state (since npxgetregs() would have fninit'ed the state, leaving nothing
to do).
PR: 68058 (this should complete the fix)
Tested by: Simon Barner <barner@in.tum.de>
Sean Kelly [Sat, 19 Jun 2004 21:17:07 +0000 (21:17 +0000)]
Yield to ru's ninja-like manpage skills and update watchdog(4) to
look more like other manpages. Move some content around, use an EXAMPLES
section, etc.
Marcel Moolenaar [Sat, 19 Jun 2004 21:14:10 +0000 (21:14 +0000)]
Add the necessary branding of ELF files. This is relatively easy to
achieve on ia64, because we need to generate the ELF64/ia64 code and
simply tag elf-fbsd-brand.c at the end of it.
This hasn't actually been tested beyond trivial compilation testing.
A buildworld has been started and it's time I wait for my changes to
loop back to my local repo anyway. I'll get back to this in a couple
of hours...
David E. O'Brien [Sat, 19 Jun 2004 20:40:00 +0000 (20:40 +0000)]
Grrr. our rev 1.19 (FSF GCC rev 1.579) is causing some problems on 32-bit
systems. So only use the rev 1.19 (FSF GCC rev 1.579) change on 64-bit
systems.
Marcel Moolenaar [Sat, 19 Jun 2004 20:37:38 +0000 (20:37 +0000)]
Move the elf32-target.h and elf64-target.h targets from the MD
makefiles to the centralized makefile. This not only reduces
duplication, it also makes the MD quirks stand out better and
thus improves maintenance.
Warner Losh [Sat, 19 Jun 2004 19:46:13 +0000 (19:46 +0000)]
The 3C3SH573BT looks like the Xircom RealPort cards to the naked eye,
but it appears to have a 3CxFE575BT under the hood (and is identified
as such by the xl driver). Add it to the list of supported cards. No
driver changes are required or necessary to support this card.
Marcel Moolenaar [Sat, 19 Jun 2004 19:25:33 +0000 (19:25 +0000)]
Update to binutils 2.15:
o HAVE_SEEKO and HAVE_TELLO are defined now. These are used in bfdio.c.
o HAVE_STRTOULL is defined now. This is used in bfd.c.
Marcel Moolenaar [Sat, 19 Jun 2004 17:58:32 +0000 (17:58 +0000)]
Define __lwpid_t as an int32_t in <sys/_types.h> and define lwpid_t
as an __lwpid_t in <sys/types.h>. Retype td_tid from an int to a
lwpid_t and change related definitions accordingly.
Tim J. Robbins [Sat, 19 Jun 2004 14:46:13 +0000 (14:46 +0000)]
When no fixed address is given in a shmat() request, pass a hint address
to vm_map_find() that is less likely to be outside of addressable memory
for 32-bit processes: just past the end of the largest possible heap.
This is the same hint that mmap() uses.
Fill in the some new fields 'struct kinfo_proc', namely ki_childstime,
ki_childutime, and ki_emul. Also uses the timeradd() macro to correct
the calculation of ki_childtime. That will correct the value returned
when ki_childtime.tv_usec > 1,000,000.
This also implements a new KERN_PROC_GID option for kvm_getprocs().
It also implements the KERN_PROC_RGID and KERN_PROC_SESSION options
which were added to sys/kern/kern_proc.c revision 1.203.
PR: bin/65803 (a very tiny piece of the PR)
Submitted by: Cyrille Lefevre
Fill in the some new fields 'struct kinfo_proc', namely ki_childstime,
ki_childutime, and ki_emul. Also uses the timevaladd() routine to
correct the calculation of ki_childtime. That will correct the value
returned when ki_childtime.tv_usec > 1,000,000.
This also implements a new KERN_PROC_GID option for kvm_getprocs().
(there will be a similar update to lib/libkvm/kvm_proc.c)