John Baldwin [Mon, 22 Jun 2009 20:14:10 +0000 (20:14 +0000)]
Include definitions for the audit identifiers for compat system calls in
sysproto.h. This makes it possible to use SYSCALL_MODULE() for compat
system calls that live in kernel modules.
John Baldwin [Mon, 22 Jun 2009 20:08:06 +0000 (20:08 +0000)]
Enable MSI in the MSI capability registers any time that the first message
in an MSI group is enabled, not just if the address/data pair are not
initialized.
Andre Oppermann [Mon, 22 Jun 2009 19:35:39 +0000 (19:35 +0000)]
Update m_demote:
- remove HT_HEADER test (MT_HEADER == MT_DATA for some time now)
- be more pedantic about m_nextpkt in other than first mbuf
- update m_flags to be retained
Bjoern A. Zeeb [Mon, 22 Jun 2009 17:56:07 +0000 (17:56 +0000)]
Updates after r194640:
- shrink size guards for vnet_net.
vnet_rtable does not need size guards as it is self-contained.
- remove a bunch of defines from vnet.h no longer valid.
Rong-En Fan [Mon, 22 Jun 2009 15:00:15 +0000 (15:00 +0000)]
- Fall-back to /etc/termcap.small if there is no /usr/share/misc/termcap
(i.e. /etc/termcap). This can be useful when using /rescue/vi while /usr
is not (or unable to be) mounted. The termcap.small can be found in
src/etc/termcap.small.
PR: bin/80256 (audit-trail)
Submitted by: Brian Candler <B.Candler at pobox.com>, Alex Kozlov <spam at rm-rf.kiev.ua>
MFC after: 1 month
Scott Long [Mon, 22 Jun 2009 14:43:48 +0000 (14:43 +0000)]
Change cam_periph_ioctl() to take 'cmd' and a u_long instead of an
int. All of its callers pass in cmd as a u_long, so this has
always been a dangerous type demotion. It was spooted by clang/llvm
trying to do a type promotion and sign extension within
cam_periph_ioctl.
Robert Watson [Mon, 22 Jun 2009 10:59:34 +0000 (10:59 +0000)]
Add a new function, ifa_ifwithaddr_check(), which rather than returning
a pointer to an ifaddr matching the passed socket address, returns a
boolean indicating whether one was present. In the (near) future,
ifa_ifwithaddr() will return a referenced ifaddr rather than a raw
ifaddr pointer, and the new wrapper will allow callers that care only
about the boolean condition to avoid having to free that reference.
Robert Watson [Mon, 22 Jun 2009 10:23:54 +0000 (10:23 +0000)]
Add a global rwlock, at_ifaddr_rw, to protect the global netatalk
address lists, at_ifaddr_list. Acquire the lock, and use ifaddr
refcounts where necessary, to close most known address-related
races in netatalk.
Annotate one potential race in at_control() where we acquire an
ifaddr reference, drop the global lock, and scrub the address from
the ifnet before re-acquiring the global lock, which could allow
for a writer-writer race.
Bjoern A. Zeeb [Mon, 22 Jun 2009 09:24:46 +0000 (09:24 +0000)]
Remove a hack from r186086 so that IPsec via loopback routes continued
working. It was targeted for stable/7 compatibility and actually never
did anything in HEAD.
Robert Watson [Sun, 21 Jun 2009 21:42:29 +0000 (21:42 +0000)]
Add ipx_ifaddr locking to ipx_control(), which should close most
remaining potential races in ifconfig's management of IPX addresses.
This is largely accomplished by dropping a global write lock for the
IPX address list over the body of in_control(), although there are
some places we bump the refcount on an ifaddr of interest while
calling out to the routing code or link layer code, which might
require revisiting.
Annotate one as a potential race if two simultaneous delete ioctls
are issued for the same IPX addresses at once.
Robert Watson [Sun, 21 Jun 2009 21:04:12 +0000 (21:04 +0000)]
Introduce basic locking of global IPX address list 'ipx_ifaddr' using
a new rwlock, ipx_ifaddr_rw, wrapped with macros. This locking is
necessary but not sufficient, in isolation, to satisfy the stability
requirements of a fully parallel IPX input path during interface
reconfiguration.
Alan Cox [Sun, 21 Jun 2009 20:29:14 +0000 (20:29 +0000)]
Implement a mechanism within vm_phys_alloc_contig() to defer all necessary
calls to vdrop() until after the free page queues lock is released. This
eliminates repeatedly releasing and reacquiring the free page queues lock
each time the last cached page is reclaimed from a vnode-backed object.
Robert Watson [Sun, 21 Jun 2009 19:30:33 +0000 (19:30 +0000)]
Clean up common ifaddr management:
- Unify reference count and lock initialization in a single function,
ifa_init().
- Move tear-down from a macro (IFAFREE) to a function ifa_free().
- Move reference count bump from a macro (IFAREF) to a function ifa_ref().
- Instead of using a u_int protected by a mutex to refcount(9) for
reference count management.
The ifa_mtx is now used for exactly one ioctl, and possibly should be
removed.
Add explicit struct ucred * argument for VOP_VPTOCNP, to be used by
vn_open_cred in default implementation. Valid struct ucred is needed for
audit and MAC, and curthread credentials may be wrong.
This further requires modifying the interface of vn_fullpath(9), but it
is out of scope of this change.
Add another flags argument to vn_open_cred. Use it to specify that some
vn_open_cred invocations shall not audit namei path.
In particular, specify VN_OPEN_NOAUDIT for dotdot lookup performed by
default implementation of vop_vptocnp, and for the open done for core
file. vn_fullpath is called from the audit code, and vn_open there need
to disable audit to avoid infinite recursion. Core file is created on
return to user mode, that, in particular, happens during syscall return.
The creation of the core file is audited by direct calls, and we do not
want to overwrite audit information for syscall.
Stanislav Sedov [Sun, 21 Jun 2009 13:15:56 +0000 (13:15 +0000)]
- Eliminate extra subcs instruction. I have not noticed before that we
always perform substraction now, so no instruction could be rordered
to eliminate the conditional substraction.
Stanislav Sedov [Sun, 21 Jun 2009 12:58:56 +0000 (12:58 +0000)]
- Fix strncmp on arm. Return 0 as result without performing the
main cycle only if the len passed is equal to 0. If end address
overflows use last possible address as the end address.
Remko Lodder [Sun, 21 Jun 2009 11:21:16 +0000 (11:21 +0000)]
Add support for the Myson Heden 8813.
Note that I also added the usbdev to the list, because the 8813 version
is not yet known there. I might have twisted the sorting there but because
8813 comes before 8818, I added it before that (with _8813 to differentiate)
the item.
Robert Watson [Sun, 21 Jun 2009 10:10:44 +0000 (10:10 +0000)]
Remove historical support for capturing IPX packets in the output path
using raw IPX sockets. While functional, this support is disabled
using a flag that can't be changed from userspace, and google reveals
no documentation or use of that flag anywhere. This eliminates a
potential lock order reversal and code reentrance issue in which the
output path reentered the input path in IPX.
An alternative to removal would be to use the netisr, as a comment I
added in 2005 suggests. While this change is fairly straight-forward,
the lack of any consumers or the easy possibility of consumers (kernel
modification and recompile required) suggests that this is simply an
unused feature.
Update README to remove this TODO, and a TODO regarding IPX/IP
encapsulation which was also removed a few years ago.
Xin LI [Sun, 21 Jun 2009 09:39:43 +0000 (09:39 +0000)]
Add support for uncompressing pack(1)'ed files. Pack(1) is a program found
in some commercial Unix systems, which utilizes Huffman minimum redundancy
code tree to compress files. This implementation supports the "new" pack
format only, just like GNU gzip did.
Thanks for oliver@'s archive set which I can test against, and Mingyan Guo
for providing helpful review of my code.
Pyun YongHyeon [Sun, 21 Jun 2009 07:34:12 +0000 (07:34 +0000)]
For ICH based fxp(4) controllers treat them as 82559 compatibles.
To detect which controller is ICH based one, add a new member
variable ich to struct fxp_ident and move the struct to
if_fxpvar.h. Since I've faked controller revision, don't allow
microcode loading for ICH based controllers.
With this change all ICH based controllers will have WOL and Rx
checksum offload capability.
PR: kern/135451
Tested by: Alexey Shuvaev ( shuvaev <> physik dot uni-wuerzburg dot de ),
pluknet ( pluknet <> gmail dot com ),
Gary Jennejohn ( gary.jennejohn <> freenet dot de )
Pyun YongHyeon [Sun, 21 Jun 2009 07:17:49 +0000 (07:17 +0000)]
Overhaul fxp(4) multicast filter programming. fxp(4) hardwares do
not allow multicast filter programming when controller is busy to
send/receive frames. So it used to mark need_mcsetup bit and defer
multicast filter programming until controller becomes idle state.
To detect when the controller is idle fxp(4) relied on Tx
completion interrupt with NOP command and fxp_start_body and
fxp_intr_body had to see whether pending multicast filter
programming was requested. This resulted in very complex logic and
sometimes it did not work as expected.
Since the controller should be in idle state before any multicast
filter modifications I changed it to reinitialize the controller
whenever multicast filter programming is required. This is the same
way what OpenBSD and NetBSD does. Also I added IFF_DRV_RUNNING
check in ioctl handler so controller would be reinitialized only if
it is absolutely needed.
With this change I guess we can remove fxp(4) DELAY hack in ifioctl
for IPv6 case.
Pyun YongHyeon [Sun, 21 Jun 2009 06:46:32 +0000 (06:46 +0000)]
Always check fxp(4) is running, see if it can accept frames from
upper stack in fxp_start_body().
fxp(4) drops driver lock in Rx path so check the fxp(4) is still
running after reacquiring driver lock in Rx path. Also don't
invoke fxp_intr_body if fxp(4) is not running. With this change
there is no need to set suspend bit in device attach phase.
Pyun YongHyeon [Sun, 21 Jun 2009 06:18:19 +0000 (06:18 +0000)]
Due to possible PCI bus lock-up issues fxp(4) didn't perform full
hardware reset in attach phase. Selective reset does not clear
configured parameters so I think full hardware reset is required.
To prevent PCI bus lock-up, do selective reset first which will get
off the controller from PCI bus and request software reset after
selective reset. Software reset will unmask interrupts so disable
it after the reset.
Pyun YongHyeon [Sun, 21 Jun 2009 06:06:43 +0000 (06:06 +0000)]
Introduce Rx mbuf dma tag and use it in Rx path. Previously it used
common mbuf dma tag for both Tx and Rx path but Rx buffer should
have single DMA segment and maximum buffer size of the segment
should be less than MCLBYTES.
fxp(4) also have to check Tx completion status which was updated by
DMA so we need BUS_DMASYNC_PREREAD and BUS_DMASYNC_POSTWRITE
synchronization in Tx path. Fix all misuse of bus_dmamap_sync(9) in
fxp(4). I guess this change shall fix occasional driver breakage in
PAE environments.
While I'm here add error messages of dma tag/buffer creation and
correct messages.
Alan Cox [Sun, 21 Jun 2009 00:21:33 +0000 (00:21 +0000)]
Strive for greater consistency among the places that implement real,
fictious, and contiguous page allocation. Eliminate unnecessary
reinitialization of a page's fields.
Brooks Davis [Sat, 20 Jun 2009 20:29:21 +0000 (20:29 +0000)]
Change crsetgroups_locked() (called by crsetgroups()) to sort the
supplemental groups using insertion sort. Use this property in
groupmember() to let us use a binary search instead of the previous
linear search.
Brooks Davis [Sat, 20 Jun 2009 18:52:02 +0000 (18:52 +0000)]
Use NGROUPS instead of NGROUPS_MAX as the limits on setgroups and
getgroups for ibcs emulation. It seems vanishingly likely any
programs will actually be affected since they probably assume a much
lower value and use a static array size.
Robert Watson [Sat, 20 Jun 2009 18:27:19 +0000 (18:27 +0000)]
Remove definition of dtom(), which converted a data pointer into a
pointer to the containing mbuf. This eliminates a strong assumption
about the layout of network buffer memory, giving us greater
flexibility to revise mbuf semantics in the future.
Robert Watson [Sat, 20 Jun 2009 18:24:25 +0000 (18:24 +0000)]
Rework SPX segment reassembly, which was originally based on our TCP
reassembly but failed to be modernized over time:
- Use queue(9).
- Specifically allocate queue entries of type M_SPXREASSQ to point at
member mbufs, rather than casting mbuf data to 'spx_q'.
- Maintain the mbuf pointer as part of the queue entry so that we can
later free the mbuf without using dtom().
Ed Schouten [Sat, 20 Jun 2009 14:50:32 +0000 (14:50 +0000)]
Improve nested jail awareness of devfs by handling credentials.
Now that we start to use credentials on character devices more often
(because of MPSAFE TTY), move the prison-checks that are in place in the
TTY code into devfs.
Instead of strictly comparing the prisons, use the more common
prison_check() function to compare credentials. This means that
pseudo-terminals are only visible in devfs by processes within the same
jail and parent jails.
Even though regular users in parent jails can now interact with
pseudo-terminals from child jails, this seems to be the right approach.
These processes are also capable of interacting with the jailed
processes anyway, through signals for example.
Alexander Kabaev [Sat, 20 Jun 2009 14:16:41 +0000 (14:16 +0000)]
Allow order of initialization of loaded shared objects to be
altered through their .init code. This might happen if init
vector calls dlopen on its own and that dlopen causes some not
yet initialized object to be initialized earlier as part of that
dlopened DAG.
Do not reset module reference counts to zero on final fini vector
run when process is exiting. Just add an additional parameter to
force fini vector invocation regardless of current reference count
value if object was not destructed yet. This allows dlclose called
from fini vector to proceed normally instead of failing with handle
validation error.
Marcel Moolenaar [Sat, 20 Jun 2009 05:36:53 +0000 (05:36 +0000)]
Drop the high FP state of an exiting thread in cpu_thread_exit() and
not in cpu_exit(). The latter is called after td_md.md_highfp_mtx
has been destroyed, which results in a race condition when another
thread wants to use the high FP registers on the CPU that still has
the high FP registers in question.
Rick Macklem [Sat, 20 Jun 2009 00:54:57 +0000 (00:54 +0000)]
Change the size of the nfsc_groups[] array in the experimental nfs
client to RPCAUTH_UNIXGIDS + 1 (17), since that is what can go on
the wire for AUTH_SYS authentication.
Kip Macy [Fri, 19 Jun 2009 23:34:32 +0000 (23:34 +0000)]
Greatly simplify cxgb by removing almost all of the custom mbuf management logic
- remove mbuf iovec - useful, but adds too much complexity when isolated to
the driver
- remove driver private caching - insufficient benefit over UMA to justify
the added complexity and maintenance overhead
- remove separate logic for managing multiple transmit queues, with the
new drbr routines the control flow can be made to much more closely resemble
legacy drivers
- remove dedicated service threads, with per-cpu callouts one can get the same
benefit much more simply by registering a callout 1 tick in the future if there
are still buffered packets
- remove embedded mbuf usage - Jeffr's changes will (I hope) soon be integrated
greatly reducing the overhead of using kernel APIs for reference counting
clusters
- add hysteresis to descriptor coalescing logic
- add coalesce threshold sysctls to allow users to decide at run-time
between optimizing for forwarding / UDP or optimizing for TCP
- add once per second watchdog to effectively close the very rare races
occurring from coalescing
- incorporate Navdeep's changes to the initialization path required to
convert port and adapter locks back to ordinary mutexes (silencing BPF
LOR complaints)
Jilles Tjoelker [Fri, 19 Jun 2009 22:09:55 +0000 (22:09 +0000)]
Fix some issues with quoted output and shorten it in some cases.
Output quoted suitable for re-input to the shell occurs in
various cases such as 'set', 'trap'.
Bugfix: *, ? and [ must be quoted (except sole [)
Bugfix: ~ and # must be quoted (really only sometimes, but keep it simple)
Bugfix: space, tab and newline must always be quoted
Shortening: other IFS characters do not need quoting
Bugfix: send to correct output file, not hard-coded stdout
Shortening: avoid unnecessary '' with \'
Bjoern A. Zeeb [Fri, 19 Jun 2009 21:01:55 +0000 (21:01 +0000)]
Move setting of ports from NAT-T below key_getsah() and actually
below key_setsaval().
Without that, the lookup for the SA had failed as we were looking for
a SA with the new, updated port numbers instead of the old ones and
were comparing the ports in key_cmpsaidx().
This makes updating the remote -> local SA on the initiator work again.
Implement the -z (zero counters) option for the various bpf counters.
Add necessary changes to the kernel for this (basically introduce a
bpf_zero_counters() function). As well, update the man page.