2 years agoMerge remote-tracking branch 'origin/vendor/GCC80'
zrj [Mon, 14 May 2018 04:36:02 +0000 (07:36 +0300)]
Merge remote-tracking branch 'origin/vendor/GCC80'

2 years agoipfw3: Fix kernel building without DEBUG in the config as well.
Sascha Wildner [Sun, 13 May 2018 09:25:54 +0000 (11:25 +0200)]
ipfw3: Fix kernel building without DEBUG in the config as well.

2 years agoFix LINT64 for the recent ipfw3 changes.
Sascha Wildner [Sun, 13 May 2018 08:08:02 +0000 (10:08 +0200)]
Fix LINT64 for the recent ipfw3 changes.

Reported-by: ftigeot
2 years agokernel: Remove vm_zeroidle.c
François Tigeot [Sun, 13 May 2018 07:41:31 +0000 (09:41 +0200)]
kernel: Remove vm_zeroidle.c

Background page zeroing doesn't bring any performance benefit
on modern hardware.

2 years agodrm/linux: Add cond_resched()
François Tigeot [Sun, 13 May 2018 07:13:59 +0000 (09:13 +0200)]
drm/linux: Add cond_resched()

2 years agokernel - pack struct fid
Matthew Dillon [Sat, 12 May 2018 03:50:07 +0000 (20:50 -0700)]
kernel - pack struct fid

* Use __packed for struct fid for correctness.  Does not change generated

2 years agotmpfs - Fix tmpfs_fid, fix NFS exports
Matthew Dillon [Sat, 12 May 2018 03:48:39 +0000 (20:48 -0700)]
tmpfs - Fix tmpfs_fid, fix NFS exports

* Fix the tmpfs_fid structure, the 64-bit elements made it incompatible
  with the system fid mapping.

  This fixes NFS exports of a tmpfs filesystem.

* Fix tmpfs_fhtovp, the inode number can exceed tmp->tm_nodes_max,
  do not error-out in that case.

2 years agoipfw3_nat: highspeed lockless in-kernel NAT
Bill Yuan [Sat, 12 May 2018 15:26:07 +0000 (15:26 +0000)]
ipfw3_nat: highspeed lockless in-kernel NAT

RB-Tree to stored the state for the outgoing packets, and multidimentional
array of pointers to keep the state for the incoming packets.

2 years agomtree(8): Fix crc() prototype.
Sascha Wildner [Fri, 11 May 2018 10:06:50 +0000 (12:06 +0200)]
mtree(8): Fix crc() prototype.

It is taken from usr.bin/cksum/crc.c. This fixes a -Wlto-type-mismatch
warning reported by zrj. Similar to the fix for ckdist(1) as pushed in

2 years agorpc.yppasswdd(8): Fix ok_shell() prototype.
Sascha Wildner [Fri, 11 May 2018 09:46:03 +0000 (11:46 +0200)]
rpc.yppasswdd(8): Fix ok_shell() prototype.

It is taken from usr.bin/chpass/util.c. This fixes a -Wlto-type-mismatch
warning reported by zrj.

2 years agotcp_wrappers: Remove mystdarg.h and simplify code.
Sascha Wildner [Thu, 10 May 2018 17:51:34 +0000 (19:51 +0200)]
tcp_wrappers: Remove mystdarg.h and simplify code.

This fixes an -Wlto-type-mismatch warning (reported by zrj) because
syslog()'s prototype was wrongly setup (using VARARGS but it has to
take 2 arguments).

2 years agomount{,_ufs}(8): Remove unnecessary code to prevent warnings.
Sascha Wildner [Thu, 10 May 2018 07:21:13 +0000 (09:21 +0200)]
mount{,_ufs}(8): Remove unnecessary code to prevent warnings.

2 years agovkernel - Adjust to fix buildkernel
Matthew Dillon [Wed, 9 May 2018 23:51:44 +0000 (16:51 -0700)]
vkernel - Adjust to fix buildkernel

* Adjust to fix buildkernel

2 years agockdist(1): Sync with FreeBSD.
Sascha Wildner [Tue, 8 May 2018 19:22:18 +0000 (21:22 +0200)]
ckdist(1): Sync with FreeBSD.

Not much to see, but it allows us to raise WARNS to 6, and the crc()
prototype adjustment part also fixes a -Wlto-type-mismatch warning
that was..

Reported-by: zrj
2 years agoImport GCC-8 to a new vendor branch
zrj [Wed, 2 May 2018 13:07:02 +0000 (16:07 +0300)]
Import GCC-8 to a new vendor branch

2 years agokernel - Refactor copyin, copyout
Matthew Dillon [Tue, 8 May 2018 16:33:19 +0000 (09:33 -0700)]
kernel - Refactor copyin, copyout

* Conditionalize movsq/movsb sequences to improve performance.

2 years agokernel - Rearrange struct vm_zone slightly
Matthew Dillon [Sun, 6 May 2018 05:47:07 +0000 (22:47 -0700)]
kernel - Rearrange struct vm_zone slightly

* Rearrange struct vm_zone to group cache lines together a bit better.

2 years agokernel - Refactor bcmp, bcopy, bzero, memset
Matthew Dillon [Sun, 6 May 2018 04:52:37 +0000 (21:52 -0700)]
kernel - Refactor bcmp, bcopy, bzero, memset

* For now continue to use stosq/stosb, movsq/movsb, cmpsq/cmpsb sequences
  which are well optimized on AMD and Intel.  Do not just use the '*b'
  string op.  While this is optimized on Intel it is not optimized on

* Note that two string ops in a row result in a serious pessimization.
  To fix this, for now, conditionalize the movsb, stosb, or cmpsb op so
  it is only executed when the remaining count is non-zero.  That is,
  assume nominal 8-byte alignment.

* Refactor pagezero() to use a movq/addq/jne sequence.  This is
  significantly faster than movsq on AMD and only just very slightly
  slower than movsq on Intel.

* Also use the above adjusted kernel code in libc for these functions,
  with minor modifications.  Since we are copying the code wholesale,
  replace the copyright for the related files in libc.

* Refactor libc's memset() to replicate the data to all 64 bits code and
  then use code similar to bzero().

Reported-by: mjg_ (info on pessimizations)
2 years agokernel - Optimize syscall path, remove old unused compat code
Matthew Dillon [Fri, 4 May 2018 17:48:29 +0000 (10:48 -0700)]
kernel - Optimize syscall path, remove old unused compat code

* Use the built-in memcpy with a constant length for the register arg
  copy instead of calling bcopy().  This saves us 25ns.

* Remove several system call compatibility support features that are
  no longer used (as we no longer have a linux compat module).  We
  remove sv_mask and sv_prepsyscall.  Saves 1ns (woo woo!).

* Do some minor rearrangement of code to remove additional unnecessary

2 years agokernel - Adjust pv caching a little
Matthew Dillon [Fri, 4 May 2018 04:58:40 +0000 (21:58 -0700)]
kernel - Adjust pv caching a little

* Rearrange pv_cache() usage to remove a conditional.

* Use atomic_fcmpset_*() to improve performance a little.

2 years agokernel - Flesh out Spectre mitigation support
Matthew Dillon [Tue, 1 May 2018 03:50:13 +0000 (20:50 -0700)]
kernel - Flesh out Spectre mitigation support

* Add handling for all modes for AMD CPUs, including support for
  IBRS_AUTO and STIBP_AUTO (always-on) bits which will be added
  to future cpus.

* Add STIBP handling to Intel CPUs.  I can't find definitions for
  AUTO (always-on) modes for Intel, so those are still not supported
  (no current CPU has AUTO support yet anyway).

* Current DragonFlyBSD defaults: Will enable IBRS_AUTO and STIBP_AUTO
  (always on) support by default if the cpu has it.  Will NOT enable IBRS
  or STIBP (non-auto) toggling by default.  Will not enable IBPB by default.

  IBPB is currently not enabled by default.  The overhead is an enormous
  ~2uS.  We will follow Linux in this regard.

* Change the machdep.spectre_mitigation sysctl to take a string of
  features to enable.  Change machdep.spectre_support to display a
  string of features supported.  Possible features are:

  IBRS          Indirect Branch Restricted Speculation (U->K and K->U)
  STIBP         Single Thread Indirect Branch Prediction (U->K and K->U)
  IBPB          Branch Prediction Barrier (U->K)
  IBRS_AUTO     IBRS always-on (set once and forget)
  STIBP_AUTO    STIBP always-on (set once and forget)

  The machdep.spectre_support sysctl tells you whats available.

* Refactor tr_pcb_gflags into tr_pcb_spec_ctrl[2] to make it easier
  for the assembly code to program the SPEC_CTRL MSR.

* Note that some of the above bits will never be supported by current
  hardware and exist to allow future hardware to support these features
  in a less expensive manner.

* Also note that for Meltdown, AMD is immune and the meltdown mitigation
  will not be enabled.  Intel is vulnerable and the mitigation will be
  enabled by default.  See sysctl machdep.meltdown_mitigation.

2 years agokernel - Fix CVE-2018-8897, debug register issue
Matthew Dillon [Tue, 1 May 2018 03:47:20 +0000 (20:47 -0700)]
kernel - Fix CVE-2018-8897, debug register issue

* #DB can be delayed in a way that causes it to occur on the first
  instruction of the int $3 or syscall handlers.  These handlers must
  be able to detect and handle the condition.  This is a historical
  artifact of cpu operation that has existed for a very long time on
  both AMD and Intel CPUs.

* Fix by giving #DB its own trampoline stack and a way to load a
  deterministic %gs and %cr3 independent of the normal CS check.
  This is CVE-2018-8897.

* Also fix the NMI trampoline while I'm here.

* Also fix an old issue with debug register trace traps which can
  occur when the kernel is accessing the user's address space.
  This fix was lost years ago, now recovered.

Credits: Nick Peterson of Everdox Tech, LLC (original reporter)
Credits: Thanks to Microsoft for coordinating the OS vendor response

2 years agoRaise WARNS to 1 in gnu/usr.bin/cvs.
Sascha Wildner [Tue, 8 May 2018 09:22:50 +0000 (11:22 +0200)]
Raise WARNS to 1 in gnu/usr.bin/cvs.

2 years agoconfig.8: Mention NO_KERNEL_OLD_STRIP.
Sascha Wildner [Tue, 8 May 2018 08:48:38 +0000 (10:48 +0200)]
config.8: Mention NO_KERNEL_OLD_STRIP.

2 years agokernel/nfs: Use the correct prototype for sys_nfssvc().
Sascha Wildner [Mon, 7 May 2018 16:13:41 +0000 (18:13 +0200)]
kernel/nfs: Use the correct prototype for sys_nfssvc().

The code handles loading of nfs.ko (nfssvc() is the only {,un}loadable
syscall). sys_nfssvc()'s prototype is automatically generated, so just
use that.

The sy_narg setting is not strictly needed because it is already
initialized correctly. Just the sy_call pointer is either sys_nosys
or sys_nfssvc, depending on the module load.

Reported-by: zrj
2 years agoigb: Dump registers.
Sepherosa Ziehau [Mon, 7 May 2018 14:55:46 +0000 (22:55 +0800)]
igb: Dump registers.

This helps debugging.

Obtained-from: dillon

2 years agomrsas(4): Remove wrong extra arg from MR_LdBlockSizeGet().
Sascha Wildner [Mon, 7 May 2018 12:43:02 +0000 (14:43 +0200)]
mrsas(4): Remove wrong extra arg from MR_LdBlockSizeGet().

Reported-by: zrj
2 years agodrm/i915: Start building i915_gpu_error.c
François Tigeot [Mon, 7 May 2018 07:42:24 +0000 (09:42 +0200)]
drm/i915: Start building i915_gpu_error.c

2 years agodrm/linux: Add scnprintf()
François Tigeot [Mon, 7 May 2018 07:02:10 +0000 (09:02 +0200)]
drm/linux: Add scnprintf()

Obtained-from: FreeBSD

2 years agodrm/linux: Add or improve various *printf functions
François Tigeot [Mon, 7 May 2018 05:45:28 +0000 (07:45 +0200)]
drm/linux: Add or improve various *printf functions

2 years agodrm/linux: Start using stop_machine.h
François Tigeot [Mon, 7 May 2018 05:28:35 +0000 (07:28 +0200)]
drm/linux: Start using stop_machine.h

2 years agoSync zoneinfo database with tzdata2018e from ftp://ftp.iana.org/tz/releases
Sascha Wildner [Sun, 6 May 2018 20:20:20 +0000 (22:20 +0200)]
Sync zoneinfo database with tzdata2018e from ftp://ftp.iana.org/tz/releases

* North Korea switched back from +0830 to +09 on May, 5.

* Miscellaneous changes, see NEWS.

For a detailed list of changes, see share/zoneinfo/NEWS.

2 years agoppp(8): Don't go via <sys/tty.h> for bringing in <termios.h>.
Sascha Wildner [Sun, 6 May 2018 17:05:15 +0000 (19:05 +0200)]
ppp(8): Don't go via <sys/tty.h> for bringing in <termios.h>.

Include it directly.

2 years ago<unistd.h>: Remove 'restrict' from symlink().
Sascha Wildner [Sun, 6 May 2018 16:25:14 +0000 (18:25 +0200)]
<unistd.h>: Remove 'restrict' from symlink().

Neither NetBSD, OpenBSD, glibc, nor any standard I checked has them.

Discussed-with: zrj

2 years ago<libgen.h>: Add comments about POSIX diffs for {base,dir}name().
Sascha Wildner [Sun, 6 May 2018 15:18:12 +0000 (17:18 +0200)]
<libgen.h>: Add comments about POSIX diffs for {base,dir}name().

2 years agodrm/linux: Add do_gettimeofday()
François Tigeot [Sun, 6 May 2018 14:42:05 +0000 (16:42 +0200)]
drm/linux: Add do_gettimeofday()

2 years agodrm: Sync include directives with Linux
François Tigeot [Sun, 6 May 2018 14:33:01 +0000 (16:33 +0200)]
drm: Sync include directives with Linux

* Add a few key include/asm or include/linux headers

* Move some code from .h to .c files in order to avoid clashes
  between the DragonFly and Linux variants of kmalloc() and kfree()

2 years agoAdd NetBSD's orders(7) manual page.
Sascha Wildner [Sat, 5 May 2018 21:10:01 +0000 (23:10 +0200)]
Add NetBSD's orders(7) manual page.

2 years agolibc/termios: Sync a bit with FreeBSD.
Sascha Wildner [Sat, 5 May 2018 20:12:02 +0000 (22:12 +0200)]
libc/termios: Sync a bit with FreeBSD.

Add tcsetsid() to libc.

Taken-from:     FreeBSD
Dports-testing: zrj

2 years agolibc: Add strsuftoll{,x}()
Sascha Wildner [Sat, 5 May 2018 20:07:33 +0000 (22:07 +0200)]
libc: Add strsuftoll{,x}()

In preparation for makefs(8).

Various dports (such as ftp/tnftpd) will also pick it up.

Taken-from:     NetBSD
Dports-testing: zrj

2 years agolibc/{un,}vis: Remove some useless junk. _DIAGASSERT() is defined.
Sascha Wildner [Mon, 30 Apr 2018 11:04:39 +0000 (13:04 +0200)]
libc/{un,}vis: Remove some useless junk. _DIAGASSERT() is defined.

2 years agoFix a few typos across the tree.
Sascha Wildner [Sat, 5 May 2018 18:39:20 +0000 (20:39 +0200)]
Fix a few typos across the tree.

2 years agoMakefile_upgrade.inc: Move dot.rhosts to the right place.
Sascha Wildner [Sat, 5 May 2018 12:11:45 +0000 (14:11 +0200)]
Makefile_upgrade.inc: Move dot.rhosts to the right place.

2 years agolibc/stdtime: Avoid signed overflow in mktime.
zrj [Fri, 4 May 2018 14:10:08 +0000 (17:10 +0300)]
libc/stdtime: Avoid signed overflow in mktime.

Fixes runtime issue with gcc80 -O2 constant folding. We need to use
__generic() macro to properly detect and set LONG_MIN/LONG_MAX here.

2 years agoboot/pc32: Avoid issues at -O2.
zrj [Fri, 4 May 2018 11:29:02 +0000 (14:29 +0300)]
boot/pc32: Avoid issues at -O2.

The 32-bit Legacy boot loader is intended to be compiled at -O1
optimization level. It is easy to forget this when overriding cflags.
For now do not use of frame pointer register as a general register.

2 years agolibstand/quad.h: Rename __qdivrem() to __udivmoddi4().
zrj [Thu, 26 Apr 2018 09:38:18 +0000 (12:38 +0300)]
libstand/quad.h: Rename __qdivrem() to __udivmoddi4().

The gcc80 at -O2 emits calls to __udivmoddi4() in loader.


2 years agocalloc - Work around gcc-8 bug (2).
zrj [Sat, 28 Apr 2018 05:30:03 +0000 (08:30 +0300)]
calloc - Work around gcc-8 bug (2).

GCC-8 at -O2 improperly tries to optimize calloc() replacement even for
malloc+bzero sequence back to calloc from calloc itself. This affects
both main root's shell (tcsh as default) and ld-elf.so dynamic linker.

Explicitly use -fno-builtin-malloc to prevent that at any -Ox level.

2 years agowatch(8): Add fallthrough.
zrj [Thu, 26 Apr 2018 07:25:53 +0000 (10:25 +0300)]
watch(8): Add fallthrough.

Mainly to suppress the warning.

2 years agortadvd(8): Suppress implicit-fallthrough.
zrj [Thu, 26 Apr 2018 07:23:41 +0000 (10:23 +0300)]
rtadvd(8): Suppress implicit-fallthrough.

For now don't change logic and just suppress the warning.

2 years agotset(1): Suppress implicit-fallthrough.
zrj [Thu, 26 Apr 2018 07:16:56 +0000 (10:16 +0300)]
tset(1): Suppress implicit-fallthrough.

It looks like ESC character should be followed by space code.
For now don't change logic and just suppress the warning.

2 years agolimits(1): Add fallthrough.
zrj [Thu, 26 Apr 2018 07:10:28 +0000 (10:10 +0300)]
limits(1): Add fallthrough.

In case of end of string fallthrough straight to default.

2 years agoident(1): Suppress implicit-fallthrough warnings.
zrj [Thu, 26 Apr 2018 07:08:02 +0000 (10:08 +0300)]
ident(1): Suppress implicit-fallthrough warnings.

Logic looks to be OK.

2 years agops(1): Add fallthrough.
zrj [Thu, 26 Apr 2018 07:02:30 +0000 (10:02 +0300)]
ps(1): Add fallthrough.

Fallthrough is intended here, check

2 years agosed(1): Suppress implicit-fallthrough.
zrj [Thu, 26 Apr 2018 06:53:22 +0000 (09:53 +0300)]
sed(1): Suppress implicit-fallthrough.

The enum in C is really an int in size and space and gcc80 warns on
switch default. Add explict errx() to avoid that. If compiler can prove
that default case would not be reached in linked script->type, then
statement will be optimized out.

2 years agodma(8): Use FALLTHROUGH consistently.
zrj [Thu, 26 Apr 2018 06:36:34 +0000 (09:36 +0300)]
dma(8): Use FALLTHROUGH consistently.

Avoids -Wimplicit-fallthrough warnings.

2 years agomount_smbfs(8): Mark usage() as dead.
zrj [Thu, 26 Apr 2018 06:29:58 +0000 (09:29 +0300)]
mount_smbfs(8): Mark usage() as dead.

2 years ago[skel] chase previous commit with file removal
Eitan Adler [Sat, 5 May 2018 07:11:14 +0000 (07:11 +0000)]
[skel] chase previous commit with file removal

Don't forget to remove the file in upgrade case.

2 years agoRemove rhosts from default template
Eitan Adler [Sat, 5 May 2018 06:59:11 +0000 (06:59 +0000)]
Remove rhosts from default template

The 'rcmds' were removed in 2458c6f4cb6284cf8c259e0e5bf12ff74ff41952.

2 years agokernel - Remove kthread exit debug kprintf()s
Matthew Dillon [Fri, 4 May 2018 18:28:10 +0000 (11:28 -0700)]
kernel - Remove kthread exit debug kprintf()s

* Remove TDF_VERBOSE and debugging kprintf()s on kthread exit.
  We don't need this debugging any more.

Reported-by: zrj
2 years agokernel - Fix spinlock bug introduced with windowing (2)
Matthew Dillon [Fri, 4 May 2018 17:46:02 +0000 (10:46 -0700)]
kernel - Fix spinlock bug introduced with windowing (2)

* Fix the fix for the spinlock bug to be the actual fix and not
  a bad dream.

Reported-by: zrj
2 years agosbin/mount_autofs: Use __DECONST() instead of local __UNCONST()
Tomohiro Kusumi [Thu, 3 May 2018 06:51:02 +0000 (23:51 -0700)]
sbin/mount_autofs: Use __DECONST() instead of local __UNCONST()

2 years agokernel - Fix spinlock bug introduced with windowing
Matthew Dillon [Wed, 2 May 2018 17:19:01 +0000 (10:19 -0700)]
kernel - Fix spinlock bug introduced with windowing

* The exclusive spinlock contention code was improperly assuming that
  non-zero EXCLWAIT bits prevented the SHARED bit from being set.  This
  is no longer true, shared locks can sometimes override EXCLWAIT.
  This assumption could result in spin_lock() returning with a shared
  lock instead of an exclusive lock.

* Fixed by ensuring that the SHARED bit is cleared when resolving the
  contended exclusive lock.

* Should hopefully fix the pmap pv == NULL assertion.

Reported-by: dillon, zrj
2 years agoigb: Bring in WOL configuration from FreeBSD.
Sepherosa Ziehau [Tue, 1 May 2018 12:11:33 +0000 (20:11 +0800)]
igb: Bring in WOL configuration from FreeBSD.

This does _not_ fix rebooting issue on certain LOM.

Tested-by: dillon
Obtained-from: FreeBSD

2 years agonetgraph7: Protect so_rcv properly
Sepherosa Ziehau [Tue, 1 May 2018 11:49:59 +0000 (19:49 +0800)]
netgraph7: Protect so_rcv properly

Reported-by: Markus Pfeiffer <markus.pfeiffer@morphism.de>
Tested-by: Markus Pfeiffer <markus.pfeiffer@morphism.de>

2 years agokernel - Refactor machdep.cpu_idle_hlt
Matthew Dillon [Sun, 29 Apr 2018 01:06:19 +0000 (18:06 -0700)]
kernel - Refactor machdep.cpu_idle_hlt

* Refactor machdep.cpu_idle_hlt.  Operation works essentially the
  same way as before but the code is a lot easier to read.

* Refactor mode 3 to have ACPI call back into machdep when entering
  a C1 halt.  Continue using HLT for this situation as we aren't
  really sure what ACPI may or may not have done.  MONITOR/MWAIT
  might not be appropriate.

* Fix bug in cpu_smp_stopped().  Just because cpu_mwait_hints is
  non-zero does not mean that there is an index entry for CPU_MWAIT_C1.
  Use the last entry based on cpu_mwait_hints instead.

* Note that machdep.cpu_idle_hlt mode 2 still doesn't work as intended.

2 years agosystat - Enhance -pv display
Matthew Dillon [Sat, 28 Apr 2018 18:10:38 +0000 (11:10 -0700)]
systat - Enhance -pv display

* Enhance systat -pv.  Add a delimeter between the totals rows and
  the cpu rows, add average user, sys, intr, and idle% over all cpus,
  add total collisions, and include a percentage of total system eaten
  up by collisions.

2 years agoAvoid absolute SYMLINKS in cpio(1), tar(1) and mailwrapper(8).
Sascha Wildner [Sat, 28 Apr 2018 16:13:16 +0000 (18:13 +0200)]
Avoid absolute SYMLINKS in cpio(1), tar(1) and mailwrapper(8).

2 years agohammer - Add missing lock
Matthew Dillon [Sat, 28 Apr 2018 03:55:34 +0000 (20:55 -0700)]
hammer - Add missing lock

* Add missing lock around hammer_redo_fifo_end_flush().  The missing
  lock could result in an assertion under heavy loads.

2 years agokernel - Adjust the scheduler to fix nice +N glitches
Matthew Dillon [Sat, 28 Apr 2018 03:21:46 +0000 (20:21 -0700)]
kernel - Adjust the scheduler to fix nice +N glitches

* Swap the DIDYIELD and steal code.  The steal code needs to
  go first, allowing a more desirable thread to steal the uschedcp
  designation from a less desirable thread.

* The DIDYIELD code also needs a need_user_resched() to interrupt the
  currently running less desirable thread.

* Set a half-queue default for usched_dfly_fast_resched instead of 0.
  This should reduce unnecessary ping-ponging of user threads that
  belong to the same queue.

* Increase the dynamic priority range from 12 to 20 queues.
  This ensures that a cpu-bound nice -20 process cannot completely
  override a nice +0 process, and ensures that a nice +20 process
  does not complete stall against a nice +0 cpu-bound process.
  That would be '16'.  We set it to 20 to give ourselves some headroom.

* Remove some dead code.

* These changes fix relative priority glitches.  More desirable
  threads no longer glitch waiting for a significantly less desirable
  thread to switch away on the current cpu, reducing the switch
  latency from 1+ scheduler ticks to a few microseconds.

  This allows nice +N processes and dynamic priority adjustments
  to run in the background fully cpu-bound.

2 years agokernel - Improve indefinite macros a bit
Matthew Dillon [Fri, 27 Apr 2018 18:41:12 +0000 (11:41 -0700)]
kernel - Improve indefinite macros a bit

* Delay saving SMP collision info and label string for a few loops
  so we don't lose performance by doing it after the contested lock has
  been resolved.

2 years agotermios.4: Improve markup.
Sascha Wildner [Fri, 27 Apr 2018 15:05:14 +0000 (17:05 +0200)]
termios.4: Improve markup.

2 years agokernel - Add two debug variables to struct globaldata
Matthew Dillon [Fri, 27 Apr 2018 06:43:15 +0000 (23:43 -0700)]
kernel - Add two debug variables to struct globaldata

* Add two debug variables to struct globaldata.  These variables
  can be used in assembly to debug difficult issues and accessed
  in kgdb or by IPI failure alerts.

2 years agokernel - Fix several usched nits
Matthew Dillon [Fri, 27 Apr 2018 06:11:07 +0000 (23:11 -0700)]
kernel - Fix several usched nits

* Fix an issue where a usched-restricted process is pulled onto a
  cpu that is outside of its mask.  The process will immediately
  push itself back onto a cpu in its mask, but this bug leads to
  unwanted cpu ping ponging.

* Fix an issue where cpu-bound usched-restricted processes can
  cause other processes to be misscheduled at a lower priority
  than their actual priority, resulting in unexpected stuttering.

* With these changes, nice +/- priorities should work considerably
  better.  In the normal case, alotted cpu time will be as shown
  below.  This is intended to be non-linear:

     1   RQ0N    1:42.11 forever
     2   R0N     1:22.55 forever
     3   R0N     0:51.46 forever
     4   RQ0N    0:24.23 forever
     5   R0N     0:23.12 forever
     6   RQ0N    0:19.91 forever
     7   RQ0N    0:09.08 forever
     8   RQ0N    0:08.38 forever
     9   RQ0N    0:06.46 forever
    10   RQ0N    0:06.72 forever
    11   RQ0N    0:04.65 forever
    12   RQ0N    0:04.60 forever
    13   RQ0N    0:03.04 forever
    14   RQ0N    0:02.53 forever
    15   RQ0N    0:02.16 forever
    16   RQ0N    0:01.55 forever
    17   RQ0N    0:01.25 forever
    18   RQ0N    0:00.81 forever
    19   RQ0N    0:00.76 forever
    20   RQ0N    0:00.32 forever

* In addition, dynamic priority operation should also work better with
  these changes.

* WARNING!  With this change, nice values actually work as intended.  A
  nice +20 process will get very little cpu in the face of a cpu-bound
  nice +0 process on a cpu.  Similarly, a cpu-bound nice -20 process will
  allow nice +0 processes to barely function on a cpu.

  And if you use an even larger spread, a cpu-bound nice -20 process
  will not allow a nice +1 or higher process any cpu time at all.

  Having multiple cores mitigations this somewhat, but users must be
  careful especially when specifying negative nice values for processes.

* If you run X and have jerkiness issues due to process load, you may want
  to give the X server itself around a nice -5.  You can fiddle, but in
  basic testing with everything running at nice 0, the scheduler appears
  to do a pretty good just generally.  For example, if your browser is
  so overloaded that it has essentially become cpu bound, it will get cpu
  on an equal basis with batch jobs like bulk builds.

2 years agolib/i18n_module: Fix out of bounds bug.
zrj [Thu, 26 Apr 2018 11:49:16 +0000 (14:49 +0300)]
lib/i18n_module: Fix out of bounds bug.

Taken-from: NetBSD

2 years agogcore(1): Mark as breaking strict aliasing.
zrj [Thu, 26 Apr 2018 10:55:13 +0000 (13:55 +0300)]
gcore(1): Mark as breaking strict aliasing.

IS_ELF(*(Elf_Ehdr *)&exec).

2 years agotip(1): Mark as breaking strict aliasing.
zrj [Thu, 26 Apr 2018 10:49:33 +0000 (13:49 +0300)]
tip(1): Mark as breaking strict aliasing.

The boolean(v) macro uses type-punned pointers.

2 years agogcc50: Fix false positive for -Walloc-size-large-than.
zrj [Thu, 26 Apr 2018 10:38:01 +0000 (13:38 +0300)]
gcc50: Fix false positive for -Walloc-size-large-than.

Backport fix for PR 79132, prevent using alloca(-1).

2 years agogcc47: Fix false positive for -Walloc-size-large-than.
zrj [Thu, 26 Apr 2018 10:35:33 +0000 (13:35 +0300)]
gcc47: Fix false positive for -Walloc-size-large-than.

Backport fix for PR 79132, prevent using alloca(-1).

2 years agompsutil(8): Add missing braces.
Sascha Wildner [Thu, 26 Apr 2018 16:17:33 +0000 (18:17 +0200)]
mpsutil(8): Add missing braces.

Reported-by: zrj
2 years agobsd.sys.mk: Implement WARNS framework for HOST_CCVER.
zrj [Wed, 25 Apr 2018 16:22:13 +0000 (19:22 +0300)]
bsd.sys.mk: Implement WARNS framework for HOST_CCVER.

Previously we were handling just a CCVER only.

2 years agoworld: Mark all build-tools.
zrj [Wed, 25 Apr 2018 16:21:40 +0000 (19:21 +0300)]
world: Mark all build-tools.

2 years agocsh(1): Separate hostprog.
zrj [Wed, 25 Apr 2018 16:20:33 +0000 (19:20 +0300)]
csh(1): Separate hostprog.

2 years agoawk(1): Separate hostprog.
zrj [Wed, 25 Apr 2018 16:20:06 +0000 (19:20 +0300)]
awk(1): Separate hostprog.

2 years agolibmagic(3): Separate hostprog.
zrj [Wed, 25 Apr 2018 16:19:40 +0000 (19:19 +0300)]
libmagic(3): Separate hostprog.

Set WARNS=1 for mkmagic.nx so as not to use -w.

2 years agophantasia(6): Separate hostprog.
zrj [Wed, 25 Apr 2018 16:19:07 +0000 (19:19 +0300)]
phantasia(6): Separate hostprog.

Make substantial effort to reduce dependencies for setup.nx.
While there install monsters file as 640.

2 years agohack(6): Separate hostprog.
zrj [Wed, 25 Apr 2018 16:18:29 +0000 (19:18 +0300)]
hack(6): Separate hostprog.

2 years agoadventure(6): Separate hostprog.
zrj [Wed, 25 Apr 2018 16:18:06 +0000 (19:18 +0300)]
adventure(6): Separate hostprog.

2 years agodrm: Implement parts of the Linux irq subsystem
François Tigeot [Wed, 25 Apr 2018 09:52:23 +0000 (11:52 +0200)]
drm: Implement parts of the Linux irq subsystem

* Allowing to reuse more drm drivers code as-is from Linux

* Also allowing Linux irq functions to return expected status
  codes, increasing general driver robustness

Tested-with: many i915 devices, Radeon HD6450

2 years agokernel/mpr: Remove unused malloc type.
Sascha Wildner [Tue, 24 Apr 2018 20:03:51 +0000 (22:03 +0200)]
kernel/mpr: Remove unused malloc type.

2 years agoRemove <sys/ioctl_compat.h>.
Sascha Wildner [Tue, 24 Apr 2018 20:03:51 +0000 (22:03 +0200)]
Remove <sys/ioctl_compat.h>.

Now that tkusumi's fix for benchmarks/fio for the name and location
change of the IOCTLTRIM ioctl is in DeltaPorts, remove the header

Fixes for stty(1) and pstat(8) are from FreeBSD.

Dports-checking: zrj

2 years agoAdd FreeBSD's mpr(4) driver for LSI Fusion-MPT 3/3.5 SAS controllers.
Sascha Wildner [Tue, 24 Apr 2018 18:45:47 +0000 (20:45 +0200)]
Add FreeBSD's mpr(4) driver for LSI Fusion-MPT 3/3.5 SAS controllers.

This commit also includes a userland utility for mps(4) and mpr(4)
(mprutil(8) aka mpsutil(8)).

After porting bug fixing, testing shows that it seems to be stable,
therefore I have added it to our X64_64_GENERIC as well.

Thanks to zrj for testing and to sephe for some porting clues.

Taken-from: FreeBSD

2 years ago<sys/proc.h>: Fix unused macro name (number == bit number) and comment.
Sascha Wildner [Tue, 24 Apr 2018 12:49:10 +0000 (14:49 +0200)]
<sys/proc.h>: Fix unused macro name (number == bit number) and comment.

2 years agoevtranalyze.1: Fix typo.
Sascha Wildner [Tue, 24 Apr 2018 07:14:57 +0000 (09:14 +0200)]
evtranalyze.1: Fix typo.

2 years agox86_64/ioapic: Make sure that legacy IRQ only appears on one CPU.
Sepherosa Ziehau [Mon, 23 Apr 2018 14:15:44 +0000 (22:15 +0800)]
x86_64/ioapic: Make sure that legacy IRQ only appears on one CPU.

The legacy IRQ lookup assumes only one CPU has a given legacy IRQ.

On system w/ large number of IOAPIC, GSI96 could be mapped to IRQ17
on CPU0 (since IRQ96 is used by SYSCALL), while GSI17 is mapped to
IRQ17 on another CPU.  This breaks later IRQ lookup.

Reported-by: Imre Vadasz
Tested-by: Imre Vadasz

2 years agokernel - Remove cache ping-pong on common scheduler operations
Matthew Dillon [Mon, 23 Apr 2018 07:27:21 +0000 (00:27 -0700)]
kernel - Remove cache ping-pong on common scheduler operations

* Reflect dfly_curprocmask and dfly_rdyprocmask bits in the
  scheduler's pcpu structures.  This allows us to reduce global
  atomic ops that are virtually guaranteed to cause cache ping

* sched_yield and token-based yield operations no longer clear
  the bit in the curprocmask, since they are just yielding
  (XXX needs work, a later blocking op then might not pull a
  new process from another cpu).

2 years agokernel - More deterministic systat -pv lock name output
Matthew Dillon [Mon, 23 Apr 2018 07:23:15 +0000 (00:23 -0700)]
kernel - More deterministic systat -pv lock name output

* Update the lock name in the globaldata structure for any
  contended lock that bumps the SMP collision count (basically,
  any lock which contends for more than 1uS).

* Improved systat -pv accuracy at very little cost.

2 years agokernel - Improve lockf performance
Matthew Dillon [Mon, 23 Apr 2018 07:19:46 +0000 (00:19 -0700)]
kernel - Improve lockf performance

* Improve fcntl lockf performance with two small optimizations.
  Together these add a little over 10% in non-contended

* Add a 2-entry-per-cpu range lock allocation cache.  This
  covers the most typical lock/unlock situations.

* Conditionalize the setting of VMAYHAVELOCKS to avoid unnecessary
  atomic ops.

* Remove the clearing of VMAYHAVELOCKS.  The cost in close() is
  basically nothing while the cost in the lockf critical path
  is several branches and an atomic op.

2 years agolibthread_xu - Improve contended mutex code
Matthew Dillon [Mon, 23 Apr 2018 02:29:58 +0000 (19:29 -0700)]
libthread_xu - Improve contended mutex code

* Retry a few times in a loop before using the umtx*() system
  calls to sleep.

  This significantly reduces IPI traffic and improves performance
  when a mutex is heavily contended.

2 years agokernel - Improve namecache performance
Matthew Dillon [Mon, 23 Apr 2018 02:26:58 +0000 (19:26 -0700)]
kernel - Improve namecache performance

* Improve performance for the edge case where a process is
  deleting a large number of files.  In this situation,
  NCF_DESTROYED ncp entries can build up in the hash table
  and slow things down until the system quiets down, then
  the tables get cleaned up.

  Improve by recycling such entries into new entries when

* Refactor the hash calculation again.  The big-prime idea
  actually has some trivially obvious problems, scrap it
  for the moment.

2 years agokernel - Improve kern_dup() performance
Matthew Dillon [Mon, 23 Apr 2018 02:25:23 +0000 (19:25 -0700)]
kernel - Improve kern_dup() performance

* Run the operation with a single exclusive spinlock instead of
  acquiring and releasing it twice.  Improves thread-concurent
  dup() performance.