Pyun YongHyeon [Wed, 10 Jun 2009 02:07:58 +0000 (02:07 +0000)]
Add alc(4), a driver for Atheros AR8131/AR8132 PCIe ethernet
controller. These controllers are also known as L1C(AR8131) and
L2C(AR8132) respectively. These controllers resembles the first
generation controller L1 but usage of different descriptor format
and new register mappings over L1 register space requires a new
driver. There are a couple of registers I still don't understand
but the driver seems to have no critical issues for performance and
stability. Currently alc(4) supports the following hardware
features.
o MSI
o TCP Segmentation offload
o Hardware VLAN tag insertion/stripping
o Tx/Rx interrupt moderation
o Hardware statistics counters(dev.alc.%d.stats)
o Jumbo frame
o WOL
AR8131/AR8132 also supports Tx checksum offloading but I disabled
it due to stability issues. I'm not sure this comes from broken
sample boards or hardware bugs. If you know your controller works
without problems you can still enable it. The controller has a
silicon bug for Rx checksum offloading, so the feature was not
implemented.
I'd like to say big thanks to Atheros. Atheros kindly sent sample
boards to me and answered several questions I had.
Kip Macy [Wed, 10 Jun 2009 01:21:32 +0000 (01:21 +0000)]
As far as I can tell systems that have less than 4GB are more often hurt
by prefetched than helped. On i386 systems and systems with less than 4GB,
prefetch is now disabled by default. I've added a prefetch enable tunable, to
enable prefetching for those systems. The prefetch disable tunable will continue
to unconditionally disable prefetching.
Pyun YongHyeon [Wed, 10 Jun 2009 01:15:30 +0000 (01:15 +0000)]
Controller will dma SCB command status for a given command and
driver should read updated status back after issuing a SCB command.
To send a command to controller and read updated status back,
driver should synchronize both memory read and write operations
with device. Fix bus_dmamap_sync operation specifier used in
fxp_dma_wait() by adding both memory read and memory write
operations.
Oleg Bulyzhin [Tue, 9 Jun 2009 21:27:11 +0000 (21:27 +0000)]
Close long existed race with net.inet.ip.fw.one_pass = 0:
If packet leaves ipfw to other kernel subsystem (dummynet, netgraph, etc)
it carries pointer to matching ipfw rule. If this packet then reinjected back
to ipfw, ruleset processing starts from that rule. If rule was deleted
meanwhile, due to existed race condition panic was possible (as well as
other odd effects like parsing rules in 'reap list').
P.S. this commit changes ABI so userland ipfw related binaries should be
recompiled.
Doug Barton [Tue, 9 Jun 2009 20:20:08 +0000 (20:20 +0000)]
1. Update the message that prints out for -U when the mtree database does
not exist to let the user know that it will be created for the next run.
2. Delete more stuff we're not going to use from the temproot prior to
creating the mtree database to dramatically reduce its size (162K -> 37K).
3. We've been deleting the zero-size files from temproot for a long time
now, so remove the spurious "-size +0" from the find command in the
comparison loop, and remove what is now a really stale comment.
Add part of NFSv4 ACL kernel support code that is required for the upcoming
libc changes to work. Not connected to the kernel build yet; for now,
it will be compiled into libc.
Pass the previously returned IRQ back to arm_get_next_irq() so that
the implementation can guarantee forward progress in the event of
a stuck interrupt or interrupt storm. This is especially critical
for fast interrupt handlers, as they can cause a hard hang in that
case. When first called, arm_get_next_irq() is passed -1.
Alan Cox [Tue, 9 Jun 2009 17:04:39 +0000 (17:04 +0000)]
Eliminate an unnecessary restriction on the vm object type from
vm_map_pmap_enter(). The immediate effect of this change is that automatic
prefaulting by mmap() for small mappings is performed on POSIX shared memory
objects just the same as it is on ordinary files.
Sam Leffler [Tue, 9 Jun 2009 16:32:07 +0000 (16:32 +0000)]
Correct ieee80211_gettid:
o don't increment extracted tid, this was a vestige of IEEE80211_NONQOS_TID
being defined as 0 (w/ real tid's +1)
o handle 4-address frames (add IEEE80211_IS_DSTODS to check if an 802.11
header is DSTODS)
Rick Macklem [Tue, 9 Jun 2009 15:18:01 +0000 (15:18 +0000)]
Since vn_lock() with the LK_RETRY flag never returns an error
for FreeBSD-CURRENT, the code that checked for and returned the
error was broken. Change it to check for VI_DOOMED set after
vn_lock() and return an error for that case. I believe this
should only happen for forced dismounts.
John Baldwin [Tue, 9 Jun 2009 14:26:23 +0000 (14:26 +0000)]
Add support for multiple passes of the device tree during the boot-time
probe. The current device order is unchanged. This commit just adds the
infrastructure and ABI changes so that it is easier to merge later changes
into 8.x.
- Driver attachments now have an associated pass level. Attachments are
not allowed to probe or attach to drivers until the system-wide pass level
is >= the attachment's pass level. By default driver attachments use the
"last" pass level (BUS_PASS_DEFAULT). Driver's that wish to probe during
an earlier pass use EARLY_DRIVER_MODULE() instead of DRIVER_MODULE() which
accepts the pass level as an additional parameter.
- A new method BUS_NEW_PASS has been added to the bus interface. This
method is invoked when the system-wide pass level is changed to kick off
a rescan of the device tree so that drivers that have just been made
"eligible" can probe and attach.
- The bus_generic_new_pass() function provides a default implementation of
BUS_NEW_PASS(). It first allows drivers that were just made eligible for
this pass to identify new child devices. Then it propogates the rescan to
child devices that already have an attached driver by invoking their
BUS_NEW_PASS() method. It also reprobes devices without a driver.
- BUS_PROBE_NOMATCH() is only invoked for devices that do not have
an attached driver after being scanned during the final pass.
- The bus_set_pass() function is used during boot to raise the pass level.
Currently it is only called once during root_bus_configure() to raise
the pass level to BUS_PASS_DEFAULT. This has the effect of probing all
devices in a single pass identical to previous behavior.
John Baldwin [Tue, 9 Jun 2009 13:44:17 +0000 (13:44 +0000)]
Rework the _BBN handling for Host-PCI bridges. Previously we only trusted
a _BBN value of 0 if it was for the first bridge encountered since some
older systems returned _BBN of 0 for all bridges. However, some newer
systems enumerate bridges with non-zero _BBN before bus 0 which is
perfectly valid. Handle both cases by trusting the first bridge that has
a _BBN of 0 and falling back to reading from non-standard config registers
only for subsequent bridges with a _BBN of 0. We also only perform this
check for segment (domain) 0. We assume that _BBN is always correct
for segments other than 0.
Tested by: Josef Moellers josef.moellers at fujitsu
MFC after: 1 week
John Baldwin [Tue, 9 Jun 2009 13:33:03 +0000 (13:33 +0000)]
- Remove an unnecessary memory barrier from an atomic op.
- Use the per-softc mutex to protect the softc data in the callout routine
rather than letting it run without any locks whatsoever.
Bjoern A. Zeeb [Tue, 9 Jun 2009 11:31:47 +0000 (11:31 +0000)]
For now only compile flowtable.c if both options FLOWTABLE and INET
are given. This will also work when we add IPv6 support as for now
INET6 depends on INET.
Bjoern A. Zeeb [Tue, 9 Jun 2009 09:03:13 +0000 (09:03 +0000)]
Depend on @ machine (_ILINKS) as we do with other modules so that @
is there for parallel (-jN) builds. Ideally beforedepends in kmod.mk
should do the right thing but it seems it does not.
Ariff Abdullah [Tue, 9 Jun 2009 04:17:36 +0000 (04:17 +0000)]
Move C1E workaround into its own idle function. Previous workaround works
only during initial booting process, while there are laptops/BIOSes that
tend to act 'smarter' by force enabling C1E if the main power adapter
being pulled out, rendering previous workaround ineffective. Given the
fact that we still rely on local APIC to drive timer interrupt, this
workaround should keep all Turion (probably Phenom too) X\d+ alive whether
its on battery power or not.
Xin LI [Tue, 9 Jun 2009 00:54:57 +0000 (00:54 +0000)]
Add line width calculations for 15/16 and 24/32 bit modes in case
the "Get Scan Line Length" function fails, as it does in Parallels
(in Version 2.2, Build 2112 at least).
Brian Somers [Mon, 8 Jun 2009 21:42:30 +0000 (21:42 +0000)]
Fix an off by one error when we limit append/prepend text sizes based on our
internal buffer sizes.
When we 'append', assume we're appending to text. Some MS dhcp servers will
give us a string with the length including the trailing NUL. when we 'append
domain-name', we get something like "search x.y\000 z" in resolv.conf :(
MFC after: 1 week
Security: A buffer overflow (by one NUL byte) was possible.
Ed Schouten [Mon, 8 Jun 2009 20:24:29 +0000 (20:24 +0000)]
Use proper types in kbdmux_kbd_getc():
- The return value should be a signed integer, because -1 means failure.
- The c variable should be unsigned, to force it to be zero-extended
when returned.
Reported by: Andreas Tobler <andreast-list fgznet ch>
Bjoern A. Zeeb [Mon, 8 Jun 2009 19:57:35 +0000 (19:57 +0000)]
After r193232 rt_tables in vnet.h are no longer indirectly dependent on
the ROUTETABLES kernel option thus there is no need to include opt_route.h
anymore in all consumers of vnet.h and no longer depend on it for module
builds.
Remove the hidden include in flowtable.h as well and leave the two
explicit #includes in ip_input.c and ip_output.c.
Rick Macklem [Mon, 8 Jun 2009 18:41:23 +0000 (18:41 +0000)]
Fix nfscl_getcl() so that it doesn't crash when it is called to
do an NFSv4 Close operation with the cred argument NULL. Also,
clarify what NULL arguments mean in the function's comment.
Ed Schouten [Mon, 8 Jun 2009 18:23:43 +0000 (18:23 +0000)]
Revert my change; reintroduce __gnu89_inline.
It turns out our compiler in stable/7 can't build this code anymore.
Even though my opinion is that those people should just run `make
kernel-toolchain' before building a kernel, I am willing to wait and
commit this after we've branched stable/8.
Ed Schouten [Mon, 8 Jun 2009 17:27:25 +0000 (17:27 +0000)]
Remove __gnu89_inline.
Now that we use C99 almost everywhere, just use C99-style in the pmap
code. Since the pmap code is the only consumer of __gnu89_inline, remove
it from cdefs.h as well. Because the flag was only introduced 17 months
ago, I don't expect any problems.
Marko Zec [Mon, 8 Jun 2009 17:15:40 +0000 (17:15 +0000)]
Introduce an infrastructure for dismantling vnet instances.
Vnet modules and protocol domains may now register destructor
functions to clean up and release per-module state. The destructor
mechanisms can be triggered by invoking "vimage -d", or a future
equivalent command which will be provided via the new jail framework.
While this patch introduces numerous placeholder destructor functions,
many of those are currently incomplete, thus leaking memory or (even
worse) failing to stop all running timers. Many of such issues are
already known and will be incrementaly fixed over the next weeks in
smaller incremental commits.
Apart from introducing new fields in structs ifnet, domain, protosw
and vnet_net, which requires the kernel and modules to be rebuilt, this
change should have no impact on nooptions VIMAGE builds, since vnet
destructors can only be called in VIMAGE kernels. Moreover,
destructor functions should be in general compiled in only in
options VIMAGE builds, except for kernel modules which can be safely
kldunloaded at run time.
Jung-uk Kim [Mon, 8 Jun 2009 17:11:47 +0000 (17:11 +0000)]
Clean up FreeBSD-specific header file:
- Define ACPI_USE_DO_WHILE_0 to add do while(0) around return_*() macros.
- Define __cdecl only for user land. It will never be used in kernel.
- Remove __cli() and __sti(). They were deprecated long ago.
Bjoern A. Zeeb [Mon, 8 Jun 2009 15:13:20 +0000 (15:13 +0000)]
Code using COMPAT_ROUTE_FLAGS option, introduced with r187094,
was changed again in r187328, removing any use of the option from
the kernel. The option was never in NOTES. Garbage collect.
Bjoern A. Zeeb [Mon, 8 Jun 2009 15:02:30 +0000 (15:02 +0000)]
Update vimage size guard values but do not yet re-enable them.
Now that rt_tables does no longer change depending on kernel option
we do no longer need any special values for LINT.
The updated values will be used to make sure that an upcoming
opt_route.h cleanup will not again show any side effects.
Luigi Rizzo [Mon, 8 Jun 2009 14:32:29 +0000 (14:32 +0000)]
Permit the specification of bandwidth values within
"profile" files (bandwidth is mandatory when using a
profile, so it makes sense to have everything in one place).
Do not dereference vp->v_rdev without holding any of dev_mtx or vnode
lock. Use code similar to devfs_fp_check(), but inlined to feet other
checks performed by ttyhook_register().
When pages are removed from virtual address space by calling pmap_remove_all()
CPU caches were not invalidated, which led to read corruption when another
page got mapped at this same virtual address at later time (the CPU was
retrieving stale contents).
Submitted by: Piotr Ziecik
Obtained from: Semihalf
Edwin Groothuis [Mon, 8 Jun 2009 05:33:08 +0000 (05:33 +0000)]
[patch] [locale] German locales use old %d.%m.%y date format instead of newer ISO date
From the submitter:
DIN 5008 (German norm for text processing) defines the old date
format (%d.%m.%Y) to be obsolete and to be used only, if unambigous.
In international communications the new format (%Y-%m-%d) is now
required and FreeBSD should respect this.
References:
- DIN 5008
- EN 28 601
- ISO 8601
Thanks to Oliver Lietz for bringing this to my attention.