dragonfly.git
2 years agoBranching 3.2/3.3. v3.2.0
Justin C. Sherrill [Tue, 9 Oct 2012 03:27:30 +0000 (23:27 -0400)]
Branching 3.2/3.3.

2 years agokernel - Fix UP build for usched_dfly.c
Matthew Dillon [Tue, 9 Oct 2012 00:56:09 +0000 (17:56 -0700)]
kernel - Fix UP build for usched_dfly.c

* Fix UP build errors

Reported-by: multiple
2 years agovkernel - Properly initialize pool tokens.
Antonio Huete Jimenez [Mon, 8 Oct 2012 14:28:20 +0000 (16:28 +0200)]
vkernel - Properly initialize pool tokens.

 * There was no call to init_locks() in vkernel's initialization
   code, so provide one.

 * As pool tokens weren't initialized, the attempt to copy its
   t_desc in lwkt_getalltokens() resulted in a panic. This should
   be fixed now.

 * Add a KASSERT() so that uninitialized tokens will panic the system.

Suggested by: swildner

2 years agokmalloc.9: Document M_POWEROF2.
Sascha Wildner [Mon, 8 Oct 2012 12:53:28 +0000 (14:53 +0200)]
kmalloc.9: Document M_POWEROF2.

2 years agokmalloc: Use 'fls' to round up the size to the nearest power of 2
Sepherosa Ziehau [Mon, 8 Oct 2012 12:14:56 +0000 (20:14 +0800)]
kmalloc: Use 'fls' to round up the size to the nearest power of 2

On average tests conducted on Intel i3, i7 and xeon-e3 in x86_64 mode,
fls version is 3 times faster than the simple loop version.

Submitted-by: vsrinivas@
Also M_POWEROF2 flag is used to do the nearest power of 2 size rounding
up, instead of a seperate function (was kmalloc_powerof2)

Suggested-by: sjg@, vsrinivas@
2 years agolibgcc.a47: build with -fpic
John Marino [Sun, 7 Oct 2012 17:34:31 +0000 (19:34 +0200)]
libgcc.a47: build with -fpic

The vendor makefile builds libgcc.a with the PIC flag.  The x86_64
platform needs it for packages that need need to link to libgcc.a

2 years agobuild - Unbreak world
Matthew Dillon [Sun, 7 Oct 2012 23:39:37 +0000 (16:39 -0700)]
build - Unbreak world

* Fix issue w/ last commit

Submitted-by: marino
2 years agoUse GCC's builtin offset_of as the first option
John Marino [Sun, 7 Oct 2012 21:27:36 +0000 (23:27 +0200)]
Use GCC's builtin offset_of as the first option

Other than C++ code, the GCC offsetof builtin was never getting used.
The version that did get expanded could not be used for array
declarations on GCC 4.5 and later because it wasn't considered a
constant expression by those later GCC compilers.

The first symptom was seen when building world with GCC 4.6, but the
the offsetof expansion was finally identified as the cause of the
problem while discussion PostgreSQL 9.1 build failures on DragonFly.
Since DragonFly was the only platform exibiting the behavior, the
problem was narrowed down to the offsetof macro or the compiler itself.
Fixing the macro allowed the unpatched pgsql to compile.

Thanks-to: Tom Lane

2 years agoifpoll: Utilize kmalloc_cachealign()
Sepherosa Ziehau [Sun, 7 Oct 2012 06:14:22 +0000 (14:14 +0800)]
ifpoll: Utilize kmalloc_cachealign()

2 years agobusdma: Panic if the kmalloc_powerof2() fails to meet the dma requirement
Sepherosa Ziehau [Sun, 7 Oct 2012 04:53:42 +0000 (12:53 +0800)]
busdma: Panic if the kmalloc_powerof2() fails to meet the dma requirement

2 years agobusdma: Utilize kmalloc_powerof2()
Sepherosa Ziehau [Sun, 7 Oct 2012 04:40:57 +0000 (12:40 +0800)]
busdma: Utilize kmalloc_powerof2()

2 years agoigb: Use kmalloc_cachealign to allocate rx ring, tx ring and msix data
Sepherosa Ziehau [Sun, 7 Oct 2012 04:22:35 +0000 (12:22 +0800)]
igb: Use kmalloc_cachealign to allocate rx ring, tx ring and msix data

2 years agokmalloc: Add kmalloc_powerof2() and kmalloc_cachealign()
Sepherosa Ziehau [Sun, 7 Oct 2012 04:14:52 +0000 (12:14 +0800)]
kmalloc: Add kmalloc_powerof2() and kmalloc_cachealign()

kmalloc_powerof2()
    Ensures that the returned address will be power of 2 aligned.

kmalloc_cachealign()
    Ensures that the returned address will be cacheline size aligned.
    It is useful to allocate structs declared with __cachealign
    attribute.

These two function probably should _not_ be used on the hot code path
due to the computational cost to find the nearest power of 2 size.

2 years agoigb: Cache align msix, rx and tx data
Sepherosa Ziehau [Sat, 6 Oct 2012 15:03:22 +0000 (23:03 +0800)]
igb: Cache align msix, rx and tx data

2 years agoigb: Remove unused code
Sepherosa Ziehau [Sat, 6 Oct 2012 15:02:52 +0000 (23:02 +0800)]
igb: Remove unused code

2 years agoigb: Change polling(4) support to ifpoll support
Sepherosa Ziehau [Sat, 6 Oct 2012 10:59:50 +0000 (18:59 +0800)]
igb: Change polling(4) support to ifpoll support

For 82576, this means that all of the 16 RX rings could be enabled
and fully utilized; even in MSI-X mode, only 8 RX rings could be
used.

2 years agokernel/ixgbe: Remove double definition.
Sascha Wildner [Sat, 6 Oct 2012 13:03:29 +0000 (15:03 +0200)]
kernel/ixgbe: Remove double definition.

2 years agoixgbe: Define missing DEBUGOUT# macros.
François Tigeot [Sat, 6 Oct 2012 09:27:28 +0000 (11:27 +0200)]
ixgbe: Define missing DEBUGOUT# macros.

DEBUGOUT[45] are not yet used but are being defined pre-emptively
to avoid future build breakage

Obtained-from: FreeBSD

2 years agokernel/hammer: Staticize hammer_skip_redo.
Sascha Wildner [Sat, 6 Oct 2012 10:14:45 +0000 (12:14 +0200)]
kernel/hammer: Staticize hammer_skip_redo.

It's just used in hammer_recover.c.

2 years agore: Don't enable MSI by default
Sepherosa Ziehau [Sat, 6 Oct 2012 10:00:45 +0000 (18:00 +0800)]
re: Don't enable MSI by default

2 years agoigb: Initialize if_name so functions used on if_init could use if_printf
Sepherosa Ziehau [Sat, 6 Oct 2012 09:45:08 +0000 (17:45 +0800)]
igb: Initialize if_name so functions used on if_init could use if_printf

2 years agoRemove some more GCC 4.1 specific files via 'make upgrade'.
Sascha Wildner [Fri, 5 Oct 2012 13:56:03 +0000 (15:56 +0200)]
Remove some more GCC 4.1 specific files via 'make upgrade'.

2 years agore(4): Use MSI if device supports it.
Tim Bisson [Mon, 19 Mar 2012 02:39:37 +0000 (19:39 -0700)]
re(4): Use MSI if device supports it.

RT8168E supports MSI.

2 years agokernel - Acquire vm_token in pmap_remove_all() (3)
Matthew Dillon [Fri, 5 Oct 2012 05:15:04 +0000 (22:15 -0700)]
kernel - Acquire vm_token in pmap_remove_all() (3)

* Correct bug in last commit, resident_count adjustment has to be
  moved past the revalidation.

2 years agokernel - Acquire vm_token in pmap_remove_all() (2)
Matthew Dillon [Fri, 5 Oct 2012 05:09:30 +0000 (22:09 -0700)]
kernel - Acquire vm_token in pmap_remove_all() (2)

* Remove this, the token is already acquired in all pmap_remove_all()
  paths.

* Instead, try catching the problem in pmap_remove_all(m) by re-validating
  the pv_entry (essentially detecting a removal race).

2 years agokernel - (fix syntax error last commit)
Matthew Dillon [Fri, 5 Oct 2012 04:16:02 +0000 (21:16 -0700)]
kernel - (fix syntax error last commit)

* i386 pmap.c

2 years agokernel - Acquire vm_token in pmap_remove_all()
Matthew Dillon [Fri, 5 Oct 2012 04:14:32 +0000 (21:14 -0700)]
kernel - Acquire vm_token in pmap_remove_all()

* Kitchen sink try to fix the wire_count panic, acquire vm_token
  in pmap_remove_all().

2 years agokernel - Fix edge case with machdep.pmap_mmu_optimize on x86-64
Matthew Dillon [Fri, 5 Oct 2012 03:51:02 +0000 (20:51 -0700)]
kernel - Fix edge case with machdep.pmap_mmu_optimize on x86-64

* Fix two edge cases when enabling or disabling machdep.pmap_mmu_optimize,
  causing a shared page table page to be reverted to a local page table page
  and vise-versa.

* Remove debugging kprintf()s

Reported-by: thesjg
2 years agogcc47: Remove a gcc-aux leftover.
Sascha Wildner [Thu, 4 Oct 2012 16:58:37 +0000 (18:58 +0200)]
gcc47: Remove a gcc-aux leftover.

2 years agobsd.prog.mk: Avoid redefining $PROG target
John Marino [Thu, 4 Oct 2012 16:17:47 +0000 (18:17 +0200)]
bsd.prog.mk: Avoid redefining $PROG target

In rare cases, the PROG target is intentionally redefined before
including bsd.prog.mk, but when that happens a target redefinition
warning is emitting.  This adds a check for a pre-existing $PROG
target before attempting to define it.

It stops warnings from being emitted when loader and loader_tftp
are built.

2 years agogcc47: Restore cross-build capability
John Marino [Thu, 4 Oct 2012 16:03:52 +0000 (18:03 +0200)]
gcc47: Restore cross-build capability

The internal specs of gcc47 featured an hardcoded standard include
directory which prevented cross-target builds.  The same mistake also
caused the "crosstools" compiler in a native build to look at the host
system includes instead of the world_{TARGET}/usr/includes directory.
As a result, the cross-build would break as soon as GCC47 was used to
build its own libraries.

A stage-specific prefix was added to the internal specs directory
definition that restored cross-target building capability.

2 years agoixgbe: Do not use mbuf jumbo clusters
François Tigeot [Wed, 3 Oct 2012 10:04:56 +0000 (12:04 +0200)]
ixgbe: Do not use mbuf jumbo clusters

* They caused crashes when using jumbo frames; the root of the issue should
  probably be investigated further but the driver works perfectly with this
  change.

* Single-stream TCP performance has been measured up to 9.89 Gb/s with
  mtu=16114

2 years agoMakefile.inc1: Unbreak buildworld
John Marino [Wed, 3 Oct 2012 00:42:34 +0000 (02:42 +0200)]
Makefile.inc1: Unbreak buildworld

There was a bootstrap problem with gcc47.
For systems without gcc47 (which is almost all of them), the buildworld
failed on the first gcc47 libraries which require gcc47 to build.  The
gnu/lib/gcc47/csu target was duplicated and the makefile was attempting
to build it before gcc47 was installed.

2 years agokernel: Fix a few more mbuf MB_* vs. kmalloc M_* flag misuses.
Nuno Antunes [Tue, 2 Oct 2012 06:39:26 +0000 (07:39 +0100)]
kernel: Fix a few more mbuf MB_* vs. kmalloc M_* flag misuses.

2 years agolibstdc++47: fix wrong vec.o inclusion
John Marino [Tue, 2 Oct 2012 20:07:43 +0000 (22:07 +0200)]
libstdc++47: fix wrong vec.o inclusion

The vec.cc file never got compiled for libstdc++.  The gcc/vec.c object
file was getting included into the library instead.  This change
effectively renames vec.cc to avoid name clashes.

This also allows gcc47 to completely build world.

2 years agomtree: Use spaces for indentation.
Sascha Wildner [Tue, 2 Oct 2012 11:43:30 +0000 (13:43 +0200)]
mtree: Use spaces for indentation.

2 years agoixgbe: Use MB_DONTWAIT with mbuf operations
François Tigeot [Tue, 2 Oct 2012 05:59:33 +0000 (07:59 +0200)]
ixgbe: Use MB_DONTWAIT with mbuf operations

* M_NOWAIT is only valid with kmalloc(9)

2 years agobsd.sys.mk: Remove -Werror flag from gcc47 builds
John Marino [Mon, 1 Oct 2012 17:39:37 +0000 (19:39 +0200)]
bsd.sys.mk: Remove -Werror flag from gcc47 builds

While most of the breakage caused by new GCC47 warnings have been fixed,
swildner would prefer to complete the task and review the previously
and hastily submitted warning fixes at his leisure.

To accommodate this, the -Werror flag is removed when gcc47 is used to
build so the new warnings will pass by harmlessly.  swildner will
restore the -Werror flag when his task is complete.

2 years agogcc47 warnings: A few more fixes
John Marino [Mon, 1 Oct 2012 17:32:45 +0000 (19:32 +0200)]
gcc47 warnings: A few more fixes

usr.bin/make pass -fno-address, NO_WERROR=true
usr.bin/monitor modified source file
usr.bin/netstat modified source file (2)
usr.bin/sdpquery WARNS=2, pass -fno-unused-but-set-variable

Make has several evaluations that gcc47 believes will always
(without exception) evaluate to true or false.  Likely gcc47 is not
detecting some cases correctly, so -Wno-address was passed to it.
However, -Werror overrides it, so NO_WERROR had to be set on this
Makefile.

The remaining GCC warnings will be left for swildner to handle.
The -Werror flag will be suppress for GCC47 until further notice.

2 years agolibstdc++47: Fix c++config.h race
John Marino [Mon, 1 Oct 2012 12:52:03 +0000 (14:52 +0200)]
libstdc++47: Fix c++config.h race

With high job numbers, sometimes c++config.h would get included before
it finished getting generated.  Solve this race by using "depend all"
which should ensure c++config.h gets generated before anything else
in libstdc++ starts to build.

2 years agoSwitch on gcc47 and switch off gcc41
John Marino [Sat, 29 Sep 2012 20:47:42 +0000 (22:47 +0200)]
Switch on gcc47 and switch off gcc41

Replace GCC 4.1 with GCC 4.7.  The primary compiler remains GCC 4.4
and the source and makefiles for GCC 4.1 remain intact so it can be
brought back if necessary.  All references to GCC 4.1 in documentation
where updated to reflect version 4.7.

A full world build is probably required after this point.

2 years agogcc47: Add DragonFly READMEs and world makefiles
John Marino [Sat, 29 Sep 2012 20:14:07 +0000 (22:14 +0200)]
gcc47: Add DragonFly READMEs and world makefiles

2 years agoGCC47: Add local modifications
John Marino [Sat, 29 Sep 2012 19:58:02 +0000 (21:58 +0200)]
GCC47: Add local modifications

The majority of these changes are new files required to build GCC on
DragonFly.  They are identical to the lang/gcc-aux modifications.  Of
interest:

1) The modification to c-format.c is a carry-over from GCC44. It
   maintains support for the DragonFly-specific %b and %D conversions.
2) The modification to tree-inline.c is a carry-over from GCC44. It
   maintains the suppression of "unlikely call" inline warnings.
3) The gcc driver was modified to strip out all the bad paths in its
   search path.  gcc -print-search-dirs is now short and accurate.

2 years agoMerge branch 'vendor/GCC47'
John Marino [Mon, 1 Oct 2012 10:43:18 +0000 (12:43 +0200)]
Merge branch 'vendor/GCC47'

2 years agoImport gcc-4.7.2 to new vendor branch
John Marino [Mon, 1 Oct 2012 10:42:17 +0000 (12:42 +0200)]
Import gcc-4.7.2 to new vendor branch

2 years agogcc47 build fixes: Unused-but-set-variable + more warnings
John Marino [Mon, 1 Oct 2012 01:09:06 +0000 (03:09 +0200)]
gcc47 build fixes: Unused-but-set-variable + more warnings

The following programs fail to build with gcc47 due to the new
unused-but-set-variable warning.  They've been fixed in various ways.
The ones set with WARNS=3 suppress cast-qual warning
There is a single enum-compare error too.

This effort is not complete.

bin/csh pass -Wno-unused-but-set-variable
bin/mined source file modified
bin/sh set WARNS=3
crypto/openssh source file modified (2)
gnu/lib/libdialog source file modified
gnu/usr.bin/gdb/kgdb source file modified
gnu/usr.bin/rcs  source file modified
lib/libalias source file modified
lib/libdevstat source file modified
lib/libdm set WARNS=3
lib/libevtr source file modified
lib/libldns pass -Wno-unused-but-set-variable
lib/libncp source file modified
lib/libpam set WARNS=3
lib/libsmdb pass -Wno-unused-but-set-variable
lib/libstand source file modified (4)
lib/libtcplay source file modified
lib/libthread_xu source file modified (2)
libexec/rshd source file modified
libexec/telnetd source file modified
libexec/ypxfr pass -Wno-enum-compare
sbin/atm/fore_dnld source file modified
sbin/atm/ilmid source file modified
sbin/atm/camcontrol source file modifief (2)
sbin/ccdconfig source file modified
sbin/cryptdisks source file modified
sbin/ffsinfo source file modified
sbin/fsirand source file modified
sbin/growfs source file modified
sbin/hammer source file modified
sbin/ldconfig source file modified (real bug here?)
sbin/mount source file modified
sbin/mount_ufs source file modified
sbin/mount_extfs source file modified
sbin/mountd source file modified
sbin/natd source file modified
sbin/newfs source file modified
sbin/ping6 set WARNS=3, source modified
sbin/rcorder source file modified
sbin/reboot source file modified (real bug here?)
sbin/udevd source file modified
sbin/usched source file modified
sbin/vinum source file modified
sys/boot/common  source file modified
sys/boot/pc32/loader source file modified
usr.bin/brandelf source file modified
usr.bin/bzip2 pass -Wno-unused-but-set-variable
usr.bin/dfregress source file modified
usr.bin/ee source file modified
usr.bin/less pass -Wno-unused-but-set-variable

2 years agojme: Factor out jme_rx_restart
Sepherosa Ziehau [Sun, 30 Sep 2012 13:45:52 +0000 (21:45 +0800)]
jme: Factor out jme_rx_restart

2 years agojme: Rework MSI-X mapping, so RX MSI-X need not read register
Sepherosa Ziehau [Sun, 30 Sep 2012 13:25:25 +0000 (21:25 +0800)]
jme: Rework MSI-X mapping, so RX MSI-X need not read register

RX empty event rarely happens (I didn't see it even if the card is
sinking full speed tiny packets on one RX ring).  Put the RX empty
events into independent MSI-X, so the hot path RX MSI-X need not
read register at all.

2 years agojme: Remove unused macros
Sepherosa Ziehau [Sun, 30 Sep 2012 12:14:05 +0000 (20:14 +0800)]
jme: Remove unused macros

2 years agojme: Make sure only rx desc empty is cleared in status register
Sepherosa Ziehau [Sun, 30 Sep 2012 12:11:53 +0000 (20:11 +0800)]
jme: Make sure only rx desc empty is cleared in status register

2 years agojme: Move colesce parameters setup out of sysctl tree creation
Sepherosa Ziehau [Tue, 25 Sep 2012 00:01:17 +0000 (08:01 +0800)]
jme: Move colesce parameters setup out of sysctl tree creation

2 years agojme: Change polling(4) support to ifpoll support
Sepherosa Ziehau [Mon, 24 Sep 2012 12:01:17 +0000 (20:01 +0800)]
jme: Change polling(4) support to ifpoll support

While I'm here, fix the disable/enable intr handing.

2 years agoFix buildworld with NO_GCC41.
Sascha Wildner [Sun, 30 Sep 2012 14:35:39 +0000 (16:35 +0200)]
Fix buildworld with NO_GCC41.

The Makefile logic was kinda broken and gmp/mpfr were built only when
gcc41 was being built (i.e., when NO_GCC41 was not specified).

Instead, just build them in any case.

2 years agoixgbe: Purge queue on inactive interfaces
François Tigeot [Sun, 30 Sep 2012 11:27:15 +0000 (13:27 +0200)]
ixgbe: Purge queue on inactive interfaces

* The transmission code needs to process all queued packets in one way or
  another; if this is not done, the kernel will busy loop

* Fix a kernel freeze issue when bringing up network interfaces not having
  an active link (cable not plugged...)

2 years agoRevert "Makefile.usr - Switch to pkgsrc-2012Q2."
Justin C. Sherrill [Sun, 30 Sep 2012 02:23:13 +0000 (22:23 -0400)]
Revert "Makefile.usr - Switch to pkgsrc-2012Q2."

This reverts commit f22a9489615d510c36982f39cd47f93d42a1c0aa.

This does not match the current batch of pkgsrc binaries.
Also, pkgsrc-2012Q3 is due out in the next 24 hours.

2 years agoMakefile.usr - Switch to pkgsrc-2012Q2.
Antonio Huete Jimenez [Sat, 29 Sep 2012 23:40:23 +0000 (01:40 +0200)]
Makefile.usr - Switch to pkgsrc-2012Q2.

2 years agoixgbe: Remove useless locking directives
François Tigeot [Sat, 29 Sep 2012 17:41:04 +0000 (19:41 +0200)]
ixgbe: Remove useless locking directives

2 years agoixgbe: Remove link handler tasklet remnants
François Tigeot [Sat, 29 Sep 2012 12:12:23 +0000 (14:12 +0200)]
ixgbe: Remove link handler tasklet remnants

2 years agogmp/mpfr relocation: Forgot to commit one file
John Marino [Sat, 29 Sep 2012 19:15:06 +0000 (21:15 +0200)]
gmp/mpfr relocation: Forgot to commit one file

2 years agoRelocate libgmp and libmpfr world makefiles
John Marino [Sat, 29 Sep 2012 17:57:07 +0000 (19:57 +0200)]
Relocate libgmp and libmpfr world makefiles

This action prepares for the import of GCC 4.7 into base.
GCC 4.4, unlike GCC 4.1, requires gmp and mpfr, and these libraries
were part of the GCC 4.4 world makefile set.  GCC 4.7 also needs
these libraries, so rather than build them twice, they are moved out
to a common area where both compilers can use them.

2 years agompc: Add DragonFly READMEs and world makefiles
John Marino [Sat, 29 Sep 2012 17:39:13 +0000 (19:39 +0200)]
mpc: Add DragonFly READMEs and world makefiles

2 years agoMerge branch 'vendor/MPC'
John Marino [Sat, 29 Sep 2012 19:04:33 +0000 (21:04 +0200)]
Merge branch 'vendor/MPC'

2 years agoImport mpc-1.0.1 to new vendor branch vendor/MPC
John Marino [Sat, 29 Sep 2012 19:03:54 +0000 (21:03 +0200)]
Import mpc-1.0.1 to new vendor branch

This multiprecision library is required for gcc 4.6 and later.

2 years agobsd.lib.mk: Prevent "profiling impossible" warning
John Marino [Sat, 29 Sep 2012 16:25:58 +0000 (18:25 +0200)]
bsd.lib.mk: Prevent "profiling impossible" warning

The flag combination of "-pg" and "-ffunction-sections" do not mix.
GCC will emit the warning: "-ffunction-sections disabled; it makes
profiling impossible"

This simple modification to bsd.lib.mk will filter out
-ffunction-sections flag whenever it tries to build profile
objects.  The seemingly hundreds of warning in the world build
log are now gone.

2 years agokernel: Make KTR_USCHED_DFLY a kernel option.
Sascha Wildner [Fri, 28 Sep 2012 15:48:02 +0000 (17:48 +0200)]
kernel: Make KTR_USCHED_DFLY a kernel option.

2 years agoAdd NO_LWKT_SPLIT_USERPRI to the LINTs.
Sascha Wildner [Fri, 28 Sep 2012 15:47:13 +0000 (17:47 +0200)]
Add NO_LWKT_SPLIT_USERPRI to the LINTs.

2 years agotcp: Reduce RTO minimal value from 1 second to 500ms
Sepherosa Ziehau [Thu, 27 Sep 2012 06:43:32 +0000 (14:43 +0800)]
tcp: Reduce RTO minimal value from 1 second to 500ms

The RTO slop is reduced from 200ms to 100ms.  The effect RTO minimal
value is 600ms, which should be suitable even for satellite links.

2 years agokernel - Fix i386 wire_count panics (2)
Matthew Dillon [Wed, 26 Sep 2012 18:03:32 +0000 (11:03 -0700)]
kernel - Fix i386 wire_count panics (2)

* Optimize wakeup case.

2 years agokernel - Fix i386 wire_count panics
Matthew Dillon [Wed, 26 Sep 2012 17:36:13 +0000 (10:36 -0700)]
kernel - Fix i386 wire_count panics

* Tracked down to a situation where a pmap structure is being dtor'd by
  the objcache simultaniously with a vm_page_protect() operation on
  a page table page's vm_page_t.

  (1) vm_page_protect() begins running, finds page table page to remove,
      removes the related pv_entry, but then gets stuck waiting for the
      pmap->pm_pteobj (vm_object token).

  (2) Exit on another thread simultaniously removes all remaining VM
      pages from the pmap.  However, due to #(1), there is still an
      active page table page in pmap->pm_pteobj that the exit code has
      no visibility to.

  (3) The related pmap is then dtor'd due to heavy fork/exec/exit load
      on the system.  The VM page is still present, vm_page_protect()
      is still stuck on the token (or hasn't gotten cpu back).

  (4) Nominal vm_object_terminate() destroys the page table page.

  (5) vm_page_protect() unblocks and tries to destroy the page.

  (6) BOOM.

* This fix places a barrier between the normal process exit code and the
  dtor which will block while a vm_page_protect() is active on the pmap.

* This time for sure, but if not we still know that the problem is related
  to this exit race.

2 years agoMerge branch 'master' of ssh://crater.dragonflybsd.org/repository/git/dragonfly
Samuel J. Greear [Wed, 26 Sep 2012 04:51:10 +0000 (22:51 -0600)]
Merge branch 'master' of ssh://crater.dragonflybsd.org/repository/git/dragonfly

2 years agodloader - Add user_scheduler kenv tuneable sample
Samuel J. Greear [Wed, 26 Sep 2012 04:50:33 +0000 (22:50 -0600)]
dloader - Add user_scheduler kenv tuneable sample

2 years agokernel - usched_dfly revamp (8), add reschedule hints
Matthew Dillon [Wed, 26 Sep 2012 02:13:39 +0000 (19:13 -0700)]
kernel - usched_dfly revamp (8), add reschedule hints

* Add reschedule hints when issuing a read() on a pipe or socket, or
  issuing a blocking kevent() call.

* usched_dfly will force a reschedule after the round-robin count has
  passed the half-way point if it detects a scheduling hint.  This is
  an attempt to avoid rescheduling in the middle of some critical user
  operation (e.g. postgres server holding internal locks).

* Add kern.usched_dfly.fast_resched which allows the scheduler to avoid
  interrupting a less desireable process with a more desireable process
  as long as the priority difference is not too great.

  However, default the value to 0, because setting the value has
  consequences for interactive responsiveness.

* When running pgbench we recommend leaving fast_resched disabled and
  instead running the pgbench at idprio 15 to work around issues where
  the postgres server process(es) get interrupted by the pgbench processes
  which causes the postgres server process(es) to hit internal lock conflicts
  more quickly and enter a semaphore wait more often (when both pgbench and
  the postgres servers are running on the same machine).

  This is really an issue with postgres server scaling.  Because the pgbench's
  use so much less cpu than the postgres server processes they are given a
  more desireable priority and thus can interrupt the postgres server
  processes.  We can't really 'fix' this in the scheduler without really
  messing up normal interactive responsiveness for the system.

  Example:

  idprio pgbench -j 80 -c 80 -T 60 -S bench

2 years agokernel - usched_dfly revamp (7), bring back td_release, sysv_sem, weights
Matthew Dillon [Tue, 25 Sep 2012 18:53:58 +0000 (11:53 -0700)]
kernel - usched_dfly revamp (7), bring back td_release, sysv_sem, weights

* Bring back the td_release kernel priority adjustment.

* sysv_sem now attempts to delay wakeups until after releasing its token.

* Tune default weights.

* Do not depress priority until we've become the uschedcp.

* Fix priority sort for LWKT and usched_dfly to avoid context-switching
  across all runable threads twice.

2 years agomake.conf.5: Add some words about WANT_NETGRAPH7.
Sascha Wildner [Tue, 25 Sep 2012 15:21:52 +0000 (17:21 +0200)]
make.conf.5: Add some words about WANT_NETGRAPH7.

2 years agoarcmsr(4): Sync with FreeBSD (Areca's driver version 1.20.00.25).
Sascha Wildner [Tue, 25 Sep 2012 05:37:07 +0000 (07:37 +0200)]
arcmsr(4): Sync with FreeBSD (Areca's driver version 1.20.00.25).

Some bug fixes and added support for ARC-1213, ARC-1223 and ARC-1882.

Thanks to ftigeot for giving it some testing.

2 years agokernel - usched_dfly revamp (6), reimplement shared spinlocks & misc others
Matthew Dillon [Tue, 25 Sep 2012 01:24:22 +0000 (18:24 -0700)]
kernel - usched_dfly revamp (6), reimplement shared spinlocks & misc others

* Rename gd_spinlocks_wr to just gd_spinlocks.

* Reimplement shared spinlocks and optimize the shared spinlock path.
  Contended exclusive spinlocks are less optimal with this change.

* Use shared spinlocks for all file descriptor accesses.  This includes
  not only most IO calls like read() and write(), but also callbacks
  from kqueue to double-check the validity of a file descriptor.

* Use getnanouptime() instead of nanouptime() in kqueue_sleep() and
  kern_kevent(), removing a hardware I/O serialization (to read the HPET)
  from the critical path.

* These changes significantly reduce kernel spinlock contention when running
  postgres/pgbench benchmarks.

2 years agokernel - Add PC sampling for x86-64
Matthew Dillon [Mon, 24 Sep 2012 21:34:41 +0000 (14:34 -0700)]
kernel - Add PC sampling for x86-64

* Xtimer interrupt (lapic timer) now samples the %rip value and stores
  it in the globaldata structure.  Sampling occurs whether the machine is
  in a critical section or not.

* Used for debugging.

2 years agokernel - usched_dfly revamp (5), correct default in last commit
Matthew Dillon [Mon, 24 Sep 2012 20:43:50 +0000 (13:43 -0700)]
kernel - usched_dfly revamp (5), correct default in last commit

* Doh. weight2 should be 120, not 1200.

2 years agokernel - usched_dfly revamp (4), improve tail
Matthew Dillon [Mon, 24 Sep 2012 20:32:11 +0000 (13:32 -0700)]
kernel - usched_dfly revamp (4), improve tail

* Improve tail performance (many more cpu-bound processes than available
  cpus).

* Experiment with removing the LWKT priority adjustments for kernel vs user.
  Instead give LWKT a hint about the user scheduler when scheduling a thread.
  LWKT's round-robin is left unhinted to hopefully round-robin starved LWKTs
  running in kernel mode.

* Implement a better calculation for the per-thread uload than the priority.
  Instead, use estcpu.

* Adjust default weigntings for new uload calculation scale.

2 years agosystat - Ensure vmmeter output separates fields by at least one space.
Matthew Dillon [Mon, 24 Sep 2012 17:31:47 +0000 (10:31 -0700)]
systat - Ensure vmmeter output separates fields by at least one space.

* Ensure vmmeter output separates fields by at least one space.

* Fix minor formatting issue with token names.

2 years agosystat - Display colliding token
Matthew Dillon [Mon, 24 Sep 2012 17:27:32 +0000 (10:27 -0700)]
systat - Display colliding token

* Display the colliding token when a non-zero token collision count is
  reported.  This is somewhat statistical but should still provide good
  information on MP bottlenecks.

2 years agokernel - Add v_token_name to gd_cnt
Matthew Dillon [Mon, 24 Sep 2012 17:26:28 +0000 (10:26 -0700)]
kernel - Add v_token_name to gd_cnt

* Copy the tok->t_desc field into the gd_cnt.v_token_name buffer
  when a token collides so systat -pv 1 can pick it up.

2 years agousr.sbin/Makefile: Remove an obsolete old comment.
Sascha Wildner [Mon, 24 Sep 2012 12:45:04 +0000 (12:45 +0000)]
usr.sbin/Makefile: Remove an obsolete old comment.

2 years agopnpinfo(8): Don't build/install for x86_64.
Sascha Wildner [Mon, 24 Sep 2012 12:44:16 +0000 (12:44 +0000)]
pnpinfo(8): Don't build/install for x86_64.

It crashes and isn't really useful. FreeBSD did so, too.

2 years agovlan: Dispatch mbuf to be sent to physical interface's start cpu
Sepherosa Ziehau [Sun, 23 Sep 2012 09:12:52 +0000 (17:12 +0800)]
vlan: Dispatch mbuf to be sent to physical interface's start cpu

2 years agobridge: Utilize netisr to run physical interface's if_start
Sepherosa Ziehau [Sun, 23 Sep 2012 09:08:22 +0000 (17:08 +0800)]
bridge: Utilize netisr to run physical interface's if_start

2 years agoaue/lgue: Utilize netisr to run if_start
Sepherosa Ziehau [Sun, 23 Sep 2012 09:07:01 +0000 (17:07 +0800)]
aue/lgue: Utilize netisr to run if_start

2 years agoif: Defer if_start to netisr instead of ifnet for further processing
Sepherosa Ziehau [Sun, 23 Sep 2012 09:04:48 +0000 (17:04 +0800)]
if: Defer if_start to netisr instead of ifnet for further processing

2 years agoifpoll: Use u_long for statistics
Sepherosa Ziehau [Sun, 23 Sep 2012 07:59:03 +0000 (15:59 +0800)]
ifpoll: Use u_long for statistics

2 years agoifpoll: Reorder iopoll fields a little bit
Sepherosa Ziehau [Sun, 23 Sep 2012 07:48:31 +0000 (15:48 +0800)]
ifpoll: Reorder iopoll fields a little bit

2 years agoifpoll: Simplify TX polling logic
Sepherosa Ziehau [Sun, 23 Sep 2012 07:42:14 +0000 (15:42 +0800)]
ifpoll: Simplify TX polling logic

2 years agotop - Fix -t / -S
Matthew Dillon [Sun, 23 Sep 2012 02:07:02 +0000 (19:07 -0700)]
top - Fix -t / -S

* -t to show threads now just shows threaded processes (all LWPs),
  and no longer also shows system processes.

* -s to show system threads now works as expected.

2 years agotop - Adjust top to account for kernel changes
Matthew Dillon [Sun, 23 Sep 2012 02:00:12 +0000 (19:00 -0700)]
top - Adjust top to account for kernel changes

* ccpu no longer exists

* if top is out of sync with the system, fix a seg-fault which can occur
  when it tries to use lwp_stat as an array indx.

2 years agops - Adjust ps to account for kernel changes
Matthew Dillon [Sun, 23 Sep 2012 01:59:26 +0000 (18:59 -0700)]
ps - Adjust ps to account for kernel changes

* ccpu no longer exists.

* pctcpu is now accurate regardless of the lwp's state.

2 years agokernel - usched_dfly revamp (3), fix estcpu
Matthew Dillon [Sun, 23 Sep 2012 01:57:06 +0000 (18:57 -0700)]
kernel - usched_dfly revamp (3), fix estcpu

* Fix the estcpu calculation, which previously assumed only a single
  runq (in usched_dfly there is a runq per cpu).

* Add a global atomic int accounting for all running and runnable lwp's.

* Fix cpu-hogging issues for bursty processes by creating a fast-decay-mode
  for estcpu when a thread first starts up, or after it has been asleep
  for more than 1 seconds.

2 years agoemx: Allow user to specify RX/TX processing CPU's offset
Sepherosa Ziehau [Sat, 22 Sep 2012 13:45:43 +0000 (21:45 +0800)]
emx: Allow user to specify RX/TX processing CPU's offset

2 years agokernel - usched_dfly revamp (2), reduce token collisions
Matthew Dillon [Sat, 22 Sep 2012 01:34:09 +0000 (18:34 -0700)]
kernel - usched_dfly revamp (2), reduce token collisions

* Add wakeup_start_delayed() and wakeup_end_delayed().  These functions
  will attempt to delay any wakeup() calls made between them.

  Use the functions in the unix domain socket send code.

* This removes a lot of volatility from monster's 48:48 pgbench tests by
  delaying the wakeup()s related to a unix domain socket write until after
  the pool token has been released.

* Adjust usched_dfly parameters.  In particular, weight2 can be higher now.

2 years agokernel - Add vmmeter counter for token collisions
Matthew Dillon [Fri, 21 Sep 2012 23:53:37 +0000 (16:53 -0700)]
kernel - Add vmmeter counter for token collisions

* Add vmmeter counter for token collisions.

* Add token collisions to systat -pv's display.

2 years agokernel - usched_dfly revamp
Matthew Dillon [Fri, 21 Sep 2012 23:09:25 +0000 (16:09 -0700)]
kernel - usched_dfly revamp

* NOTE: This introduces a few regressions at high loads.  They've been
  identified and will be fixed in another iteration.

  We've identified an issue with weight2.  When weight2 successfully
  schedules a process pair on the same cpu it can lead to inefficiencies
  elsewhere in the scheduler related to user-mode and kernel-mode
  priority switching.  In this situation testing pgbench/postgres pairs
  (e.g. -j $ncpus -c $ncpus) we sometimes see some serious regressions on
  multi-socket machines, and other times see remarkably high performance.

* Fix a reported panic.

* Revamp the weights and algorithms signficantly.  Fix algorithmic errors
  and improve the accuracy of weight3.  Add weight4 which basically tells
  the scheduler to try harder to find a free cpu to schedule the lwp on
  when the current cpu is busy doing something else.

2 years agokdump - cleanup cpu-stamp formatting
Matthew Dillon [Fri, 21 Sep 2012 23:07:00 +0000 (16:07 -0700)]
kdump - cleanup cpu-stamp formatting

* %2d instead of %d so columns align.