Matthew Dillon [Tue, 11 Apr 2017 05:19:30 +0000 (22:19 -0700)]
libtelnet - Fix improper statement construction (not a bug in the binary)
* libstand hammer1.c - remove extra format element in debugging printf.
This code is not compiled by the build anyway.
* Fix statement construction in rsaencpwd.c. The prior code generated
the desired result (incrementing the ptr), but there was an extra
ineffective indirection. Removed the ineffective indirection.
Dragonfly-bugs: 3010 (dcb)
Matthew Dillon [Tue, 11 Apr 2017 05:13:55 +0000 (22:13 -0700)]
libdevstat - Limit sscanf field, fix redundant condition
* Limit a sscanf field to MAXHOSTNAMELEN - 1.
* Remove a redundant condition already tested by the first part of a
conditional.
Dragonfly-bugs: 3009 (dcb)
Matthew Dillon [Tue, 11 Apr 2017 05:06:54 +0000 (22:06 -0700)]
libalias - Cleanup unused variable
* Cleanup an unused variable.
Dragonfly-bugs: 3008 (dcb)
Matthew Dillon [Tue, 11 Apr 2017 05:01:03 +0000 (22:01 -0700)]
openssh - Fix a broken assignment
* Fix a broken assignment. NOTE: OpenSSH master already has this fix.
* Document dangerous sscanf()s, but note that it is not possible for a
buffer overflow to occur in these cases.
Dragonfly-bugs: 3007 (dcb)
Matthew Dillon [Tue, 11 Apr 2017 04:50:14 +0000 (21:50 -0700)]
window - Fix Graphics capability enable test
* Fix Graphics capability enable test, code type-o, logical OR has to be AND.
Dragonfly-bugs: 3005 (dcb)
Matthew Dillon [Tue, 11 Apr 2017 04:47:51 +0000 (21:47 -0700)]
kernel - Fix event preset
* Enable all events was not enabling all events. Fix the memset().
Dragonfly-bugs: 3004 (dcb)
Matthew Dillon [Tue, 11 Apr 2017 04:41:43 +0000 (21:41 -0700)]
mfiutil - Fix static buffer overflow
* Fix static buffer that is too small. Use a dynamic asprintf()
instead.
Dragonfly-bugs: 3002 (dcb)
Sepherosa Ziehau [Mon, 10 Apr 2017 10:05:04 +0000 (18:05 +0800)]
pf: Don't assume # of network procecssing CPUs is power-of-2
Reviewed-by: dillon@
Sepherosa Ziehau [Mon, 10 Apr 2017 10:04:52 +0000 (18:04 +0800)]
toeplitz: Add comment.
Tomohiro Kusumi [Mon, 10 Apr 2017 22:16:24 +0000 (01:16 +0300)]
sbin/newfs_hammer: Add /* not reached */ for usage()
Tomohiro Kusumi [Mon, 10 Apr 2017 22:00:41 +0000 (01:00 +0300)]
sbin/mount_hammer: Add /* not reached */
Tomohiro Kusumi [Mon, 10 Apr 2017 21:57:35 +0000 (00:57 +0300)]
sbin/newfs_hammer: Add /* not reached */
Tomohiro Kusumi [Mon, 10 Apr 2017 17:20:40 +0000 (20:20 +0300)]
sbin/hammer: Partly bring back removed braces from
52e2f1b5
based on comments from dillon@.
(dillon) three types, yah. (1) multi-line condition in if(), (2) if TRUE or FALSE body spans more than one line, put braces around both
(dillon) (including if a comment is part of the body)
Tomohiro Kusumi [Mon, 10 Apr 2017 16:53:20 +0000 (19:53 +0300)]
sbin/newfs_hammer: Partly bring back removed braces from
46689eca
based on comments from dillon@.
(dillon) three types, yah. (1) multi-line condition in if(), (2) if TRUE or FALSE body spans more than one line, put braces around both
(dillon) (including if a comment is part of the body)
Tomohiro Kusumi [Mon, 10 Apr 2017 16:46:21 +0000 (19:46 +0300)]
sbin/mount_hammer: Partly bring back removed braces from
a90e74c5
based on comments from dillon@.
(dillon) three types, yah. (1) multi-line condition in if(), (2) if TRUE or FALSE body spans more than one line, put braces around both
(dillon) (including if a comment is part of the body)
Sepherosa Ziehau [Mon, 10 Apr 2017 05:37:27 +0000 (13:37 +0800)]
netisr: Use netisr_ncpus to convert hash to cpuid.
And factor out netisr_hashlsb() for future use.
Sepherosa Ziehau [Mon, 10 Apr 2017 09:06:29 +0000 (17:06 +0800)]
net: Reorder sysinit a bit.
Tomohiro Kusumi [Sun, 9 Apr 2017 17:10:25 +0000 (20:10 +0300)]
sbin/hammer: Make info command print a proper error message
Printing a function name of some library makes no sense.
Tomohiro Kusumi [Sun, 9 Apr 2017 16:46:20 +0000 (19:46 +0300)]
sbin/hammer: Make info command properly handle non HAMMER path
This shouldn't be needed if i/f of libhammer were carefully designed,
but this seems to be the only guaranteed way to detect non HAMMER path,
and print a proper error message that makes sense for UFS, etc.
-- before this commit
# hammer info /boot
hammer: libhammer_get_fsinfo <--- ???
-- with this commit
# hammer info /boot
hammer: /boot is probably not a HAMMER filesystem: Inappropriate ioctl for device
Tomohiro Kusumi [Sun, 9 Apr 2017 00:05:54 +0000 (03:05 +0300)]
sbin/mount_hammer: Cleanup blocks with a single statement
This commit basically does the same as what Linux kernel's coding
style mentions for braces, which is basically the same with BSDs.
https://github.com/torvalds/linux/blob/master/Documentation/process/coding-style.rst#3-placing-braces-and-spaces
No diff in sbin/mount_hammer/mount_hammer binary when assert(3)
is disabled.
Tomohiro Kusumi [Sun, 9 Apr 2017 00:05:29 +0000 (03:05 +0300)]
sbin/newfs_hammer: Cleanup blocks with a single statement
This commit basically does the same as what Linux kernel's coding
style mentions for braces, which is basically the same with BSDs.
https://github.com/torvalds/linux/blob/master/Documentation/process/coding-style.rst#3-placing-braces-and-spaces
No diff in sbin/newfs_hammer/newfs_hammer binary when assert(3)
is disabled.
Tomohiro Kusumi [Sun, 9 Apr 2017 00:04:16 +0000 (03:04 +0300)]
sbin/hammer: Cleanup blocks with a single statement
This commit basically does the same as what Linux kernel's coding
style mentions for braces, which is basically the same with BSDs.
https://github.com/torvalds/linux/blob/master/Documentation/process/coding-style.rst#3-placing-braces-and-spaces
No diff in sbin/hammer/hammer binary when assert(3) is disabled.
Sepherosa Ziehau [Sun, 9 Apr 2017 05:23:13 +0000 (13:23 +0800)]
ifpoll: Use netisr_ncpus.
Sepherosa Ziehau [Sun, 9 Apr 2017 05:20:47 +0000 (13:20 +0800)]
ifpoll: Use SYSINIT to initialize per-cpu ifpoll context.
Tomohiro Kusumi [Sat, 8 Apr 2017 16:53:12 +0000 (19:53 +0300)]
sys/vfs/hammer: Add __hammer_crc_get_xxx() for CRC test retry
On retry, we don't need extra conditionals inlined (once or twice)
from calling hammer_datacrc(), since we know retry uses old crc.
Newly added inline functions are renamed versions of original ones
before
4c09d9c4.
Tomohiro Kusumi [Sat, 8 Apr 2017 16:39:47 +0000 (19:39 +0300)]
sys/vfs/hammer: Cleanups on CRC functions
Just sync style with other part of the same file.
Tomohiro Kusumi [Thu, 6 Apr 2017 23:18:01 +0000 (02:18 +0300)]
sys/vfs/hammer: Add comments on volume version 7 CRC (
4c09d9c4)
There's no official documentation on this, but shouldn't be necessary
as CRC change does nothing directly to users.
Sepherosa Ziehau [Sat, 8 Apr 2017 06:38:06 +0000 (14:38 +0800)]
inpcb: Use netisr_ncpus for listing inpcbs.
Sepherosa Ziehau [Sat, 8 Apr 2017 05:52:02 +0000 (13:52 +0800)]
syncache: Use netisr_ncpus instead of ncpus2
Sepherosa Ziehau [Sat, 8 Apr 2017 05:51:15 +0000 (13:51 +0800)]
syncache: Cache align per-cpu data.
Sepherosa Ziehau [Sat, 8 Apr 2017 05:36:23 +0000 (13:36 +0800)]
ipdemux: Use netisr_ncpus instead of ncpus2.
Sepherosa Ziehau [Sat, 8 Apr 2017 13:26:40 +0000 (21:26 +0800)]
inet6: Restore mbuf hash after defragmentation.
Reported-by: zach
Sepherosa Ziehau [Sat, 8 Apr 2017 02:10:15 +0000 (10:10 +0800)]
ipfrag: Max # of frags per-cpu should use ncpus instead of ncpus2.
Sepherosa Ziehau [Sat, 8 Apr 2017 02:01:24 +0000 (10:01 +0800)]
inet: Use netisr_ncpus for ifdetach inet processing.
John Marino [Fri, 7 Apr 2017 19:12:02 +0000 (14:12 -0500)]
Bump __DragonFly_version
There have been several signficant changes recently, including the
relocation of the signal trampline, a new KERN_PROC_SIGTRAMP sysctl,
the implementation of the NX (no-execute) pmap bit and the
machdep.pmap_nx_enable TUNABLE.
Sepherosa Ziehau [Fri, 7 Apr 2017 07:27:06 +0000 (15:27 +0800)]
arp: Group llinfo and timer together.
Sepherosa Ziehau [Fri, 7 Apr 2017 07:15:44 +0000 (15:15 +0800)]
arp: Ignore ARP probes by default.
ARP probes are widely used by Cisco switches.
Sepherosa Ziehau [Fri, 7 Apr 2017 06:30:38 +0000 (14:30 +0800)]
arp: ARP entry list should be initialized on all available CPUs.
Peeter Must [Wed, 5 Apr 2017 13:18:49 +0000 (16:18 +0300)]
drm: Include opt_drm.h so that 'options VGA_SWITCHEROO' will be seen by vga_switcheroo.h.
Sepherosa Ziehau [Wed, 5 Apr 2017 05:52:28 +0000 (13:52 +0800)]
net: Make netisr_ncpus sysctl read-only.
Sepherosa Ziehau [Wed, 5 Apr 2017 05:44:24 +0000 (13:44 +0800)]
net: Define # of cpus for network processing.
Ease ncpus2 -> ncpus transition.
Sepherosa Ziehau [Tue, 4 Apr 2017 09:22:45 +0000 (17:22 +0800)]
net: netisr_cpu -> netisr_threads; no functional changes.
Sepherosa Ziehau [Mon, 3 Apr 2017 14:34:34 +0000 (22:34 +0800)]
net: Get rid of ifnet threads.
Sepherosa Ziehau [Mon, 3 Apr 2017 14:16:37 +0000 (22:16 +0800)]
ipfw3: Reduce dependency on ifnet threads.
Prepare to get rid of them.
Sepherosa Ziehau [Mon, 3 Apr 2017 13:38:20 +0000 (21:38 +0800)]
ipfw: Reduce dependency on ifnet threads.
Prepare to get rid of them.
Sepherosa Ziehau [Mon, 3 Apr 2017 09:27:16 +0000 (17:27 +0800)]
bridge: Reduce dependency on ifnet threads.
Prepare to get rid of them.
Sepherosa Ziehau [Sun, 2 Apr 2017 13:55:51 +0000 (21:55 +0800)]
vlan: Reduce dependency on ifnet threads.
Prepare to get rid of them.
Sepherosa Ziehau [Sun, 2 Apr 2017 13:27:35 +0000 (21:27 +0800)]
ipflow: Reduce dependency on ifnet threads.
Prepare to get rid of them.
Sepherosa Ziehau [Sun, 2 Apr 2017 12:42:52 +0000 (20:42 +0800)]
net: Reduce dependency on ifnet threads.
Prepare to get rid of them.
Matthew Dillon [Tue, 4 Apr 2017 17:57:40 +0000 (10:57 -0700)]
kernel - Implement NX (3) - cleanup
* Cleanup extra PROT_EXEC's.
Matthew Dillon [Tue, 4 Apr 2017 17:46:57 +0000 (10:46 -0700)]
kernel - Implement machdep.pmap_nx_enable TUNABLE
* Implement machdep.pmap_nx_enable TUNABLE. You can set this to 0
in /boot/loader.conf to disable the NX feature.
* Also conditionalize on the cpu feature bit being present.
Sascha Wildner [Tue, 4 Apr 2017 11:50:35 +0000 (13:50 +0200)]
bsd-family-tree: Sync with FreeBSD (DragonFly 4.8.0, macOS 10.12).
Sascha Wildner [Tue, 4 Apr 2017 11:49:28 +0000 (13:49 +0200)]
Really ensure that our world/kernel are built under POSIX locale ("C").
dedd9a18e4bbd4f206f9d7f4dba97b92a85e5d49 used LANG but that won't
override any LC_* that are already set.
Matthew Dillon [Mon, 3 Apr 2017 23:18:39 +0000 (16:18 -0700)]
kernel - Implement NX (2)
* Flesh out NX implementation for main kernel.
* Implement NX support for the vkernel.
Matthew Dillon [Mon, 3 Apr 2017 20:38:56 +0000 (13:38 -0700)]
kernel - Implement NX
* Implement the NX (no-execute) pmap bit.
* Shift sigtramp down to a page-bound and protect it prot|VM_PROT_EXECUTE.
* Map the rest of the user stack VM_PROT_READ|VM_PROT_WRITE without
VM_PROT_EXECUTE.
Imre Vadász [Sun, 2 Apr 2017 20:17:26 +0000 (22:17 +0200)]
if_vtnet - Add back vtnet_tx_size variable for now, to fix build.
Tomohiro Kusumi [Sun, 2 Apr 2017 18:45:44 +0000 (21:45 +0300)]
sbin/hammer: Remove local variables only used within assert(3)
These are bothering compile with assert(3) disabled.
Assertions are still there, but local variables are removed.
Imre Vadász [Sun, 2 Apr 2017 11:50:15 +0000 (13:50 +0200)]
libc/libpthread: Inject threadsafe locking callbacks for rtld.
* Make rtld thread-safe. Add lib/libthread_xu/thread/thr_rtld.c
to the build and use it to inject pthread based locking callbacks
for rtld.
* In rtld_lock.c, do the thread_mask_clear(lock->mask); after releasing
the actual lock, to avoid deadlocks when rtld is called recursively
from the pthread locking callbacks.
XXX An alternative solution for this issue would be, to flag the
libpthread dynamic library as bind_now to avoid the recursive rtld
calls.
Imre Vadász [Mon, 6 Mar 2017 21:21:40 +0000 (22:21 +0100)]
if_vtnet - Remove vtnet_{rx,tx}_size variables. Change rx_header padding.
* With a padding of 2 bytes, struct vtnet_rx_header will be 12 bytes now,
which should be correct to ensure the 4 byte alignment of the frame
payload, when mergeable Rx buffers are not negotiated.
Imre Vadász [Sun, 2 Apr 2017 10:25:00 +0000 (12:25 +0200)]
virtio_blk - No need to negotiate unused (and legacy) VIRTIO_BLK_F_BARRIER.
Imre Vadász [Sun, 12 Mar 2017 21:01:08 +0000 (22:01 +0100)]
if_vtnet - Default to link up, when VIRTIO_NET_F_STATUS is not negotiated.
Imre Vadász [Sat, 18 Feb 2017 23:19:09 +0000 (00:19 +0100)]
virtio_blk - Clean up some unneeded functionalities.
* Get rid of remaining code for handling the B_ORDERED flag.
B_ORDERED doesn't even exist anymore in DragonFly.
* Get rid of sc->vtblk_req_ready request list. We can just use
bioqdisksort() to add a request - that we failed to enqueue ino the
virtqueue - back into the bioq.
* Rename req->vbr_bp field to req->vbr_bio.
* Switch vtblk_req_free list from TAILQ to SLIST. A small optimization,
none of the additional features of the TAILQ are needed here.
Imre Vadász [Mon, 13 Feb 2017 19:16:14 +0000 (20:16 +0100)]
virtio: Replace one cpu_mfence() by cpu_lfence(), and one by cpu_sfence().
* The cpu_mfence() in virtqueue_dequeue() can be replaced by cpu_lfence(),
since we only need to make sure that we read the vq->vq_ring.used->idx
value before reading any other entries from the vq->vq_ring.used ring.
* The cpu_mfence() in vq_ring_update_avail() can be replaced by
cpu_sfence(), since no one else is writing to the vq->vq_ring.avail
struct.
Imre Vadász [Sat, 11 Mar 2017 18:19:41 +0000 (19:19 +0100)]
virtio - Get rid of nop {vtblk/vtnet}_modevent methods.
Matthew Dillon [Sat, 1 Apr 2017 23:43:28 +0000 (16:43 -0700)]
kernel - Fix broken wakeup in crypto code
* Depending on which crypto driver is being used and the crypto load,
the crp_sleep variable for the wrong tdinfo is tested to determine
whether a wakeup is needed or not. This can result in the crypto thread
not being woken up when new work is pending.
* Can cause the crypto subsystem to stall indefinitely, in particular
during a normal shutdown,
Reported-by: jh32
Sascha Wildner [Fri, 31 Mar 2017 14:58:37 +0000 (16:58 +0200)]
Fix some cases where an index was used before its limits check.
Dragonfly-bugs: 2998, 2999, 3000, 3001
Sascha Wildner [Fri, 31 Mar 2017 13:18:28 +0000 (15:18 +0200)]
libkvm: Fix char pointer dereference.
Sascha Wildner [Fri, 31 Mar 2017 07:08:18 +0000 (09:08 +0200)]
usr.sbin/Makefile: Fix sorting.
Sascha Wildner [Fri, 31 Mar 2017 07:03:30 +0000 (09:03 +0200)]
uefi.8: Leave the .Dd.
Sascha Wildner [Fri, 31 Mar 2017 06:58:21 +0000 (08:58 +0200)]
Partly revert "uefi.8: Extend SEE ALSO and fix HISTORY."
This partly reverts commit
2bd356f2144fabf57cc538aa4ebb0a70c1baacc9.
UEFI boot support as such was indeed added in 4.5. 4.7 only added
support to the installer.
Sascha Wildner [Fri, 31 Mar 2017 06:53:40 +0000 (08:53 +0200)]
uefi.8: Extend SEE ALSO and fix HISTORY.
Sascha Wildner [Fri, 31 Mar 2017 06:53:11 +0000 (08:53 +0200)]
efisetup.8: Some mdoc improvements.
Sascha Wildner [Fri, 31 Mar 2017 06:52:41 +0000 (08:52 +0200)]
efisetup(8): Fix permissions in the tree.
Sascha Wildner [Fri, 31 Mar 2017 06:52:06 +0000 (08:52 +0200)]
mdoc: Fix manlint warning in efisetup.8
Sascha Wildner [Fri, 31 Mar 2017 06:35:01 +0000 (08:35 +0200)]
<sys/libkern.h>: Fix whitespace/indent, remove arg names in prototypes.
Sascha Wildner [Fri, 31 Mar 2017 06:27:58 +0000 (08:27 +0200)]
<machine/stdint.h>: Check __cplusplus first.
Avoids -Wundef warnings when compiling C++ (which does not define
__STDC_VERSION__).
Antonio Huete Jimenez [Thu, 30 Mar 2017 23:43:08 +0000 (01:43 +0200)]
test/vkernel - Add MAKE_JOBS
Antonio Huete Jimenez [Thu, 30 Mar 2017 23:27:05 +0000 (01:27 +0200)]
nrelease - Show MAKE_JOBS in help
Antonio Huete Jimenez [Thu, 30 Mar 2017 22:54:24 +0000 (00:54 +0200)]
vkernel - Fix build
Matthew Dillon [Thu, 30 Mar 2017 21:04:14 +0000 (14:04 -0700)]
mixer - Fix sscanf() overflow
* Fix %s buffer sizes in sscanf().
Reported-by: dcb
Matthew Dillon [Thu, 30 Mar 2017 21:02:47 +0000 (14:02 -0700)]
gcore - fix overflow in sscanf
* Fix an overflow which can occur in the sscanf() used to parse
/proc/*/map
Reported-by: dcb
Matthew Dillon [Thu, 30 Mar 2017 20:53:05 +0000 (13:53 -0700)]
camcontrol - non-critical fgetc() cleanup
* fgetc() returns int, check EOF against int return, not char.
Reported-by: dcb
Matthew Dillon [Thu, 30 Mar 2017 01:23:27 +0000 (18:23 -0700)]
kernel - Fix deadlock in sound system
* There is a deadlock between the sound system and devfs where one thread
locks the sound system and calls into devfs, and another calls into devfs
which holds the devfs lock while calling back into the sound system.
* Fixed by unlocking devfs across the callback.
* Easily triggered by the mate desktop (mate-session, sound preference,
click random sound effects until deadlock occurs).
Reported-by: ozmage
Matthew Dillon [Wed, 29 Mar 2017 18:31:45 +0000 (11:31 -0700)]
gcc - Adjust the unwind code to use the new sigtramp probe sysctl
* Adjust the unwind code to use the new sigtramp probe sysctl instead
of hardwiring an address range relative to the ps_strings sysctl.
Reported-by: marino
Matthew Dillon [Wed, 29 Mar 2017 18:23:47 +0000 (11:23 -0700)]
kernel - Add KERN_PROC_SIGTRAMP
* Add a sysctl to retrieve the sigtramp address range for gdb.
Reported-by: marino
Matthew Dillon [Wed, 29 Mar 2017 16:57:18 +0000 (09:57 -0700)]
Kernel - Temporarily move sigtramp lower
* There is a bug in Ryzen related to the kernel iretq'ing into a high user
%rip address near the end of the user address space (top of user stack).
This is a temporary workaround for the issue.
* The original %rip for sigtramp was 0x00007fffffffffe0. Moving it down
to fa0 wasn't sufficient. Moving it down to f00 moved the bug from nearly
instant to taking a few hours to reproduce. Moving it down to be0 it took
a day to reproduce. Moving it down to 0x00007ffffffffba0 (this commit)
survived the overnight test.
Sepherosa Ziehau [Wed, 29 Mar 2017 03:43:29 +0000 (11:43 +0800)]
acpi/pstate: Don't attach, if _PSS contains invalid frequency.
Reported-and-Tested-by: OzMage
Sepherosa Ziehau [Wed, 29 Mar 2017 02:51:12 +0000 (10:51 +0800)]
powerd: Add option to disable adjusting userland scheduler's usable CPUs.
Sepherosa Ziehau [Mon, 27 Mar 2017 05:14:16 +0000 (13:14 +0800)]
kern: Add per-cpu helper threads, which handles lwkt messages.
They will be used to avoid netisr abusing.
Sascha Wildner [Wed, 29 Mar 2017 07:36:54 +0000 (09:36 +0200)]
kernel/ale: Fix one more parentheses issue.
Dragonfly-bug: <https://bugs.dragonflybsd.org/issues/2991>
Matthew Dillon [Tue, 28 Mar 2017 19:40:36 +0000 (12:40 -0700)]
kernel - Fix improper parens
* Fix improper parens. The code paths luckily worked correctly
even with the mistakes, for the most part.
* Fix bug in netgraph (netgraph is not used much in DragonFly).
Reported-by: dcb / bugs #2989, 2990, 2991, 2992
Sascha Wildner [Mon, 27 Mar 2017 17:50:42 +0000 (19:50 +0200)]
kernel/identcpu: Add string for MONITORX/MWAITX support to AMD Features2.
Taken-from: FreeBSD
François Tigeot [Mon, 27 Mar 2017 09:41:33 +0000 (11:41 +0200)]
drm: Enable commented-out vga_switcheroo code
With-input-from: peeter0007 and ivadasz
Sepherosa Ziehau [Mon, 27 Mar 2017 07:17:22 +0000 (15:17 +0800)]
sound/hda: Sync device ID table with FreeBSD
Obtained-from: FreeBSD
Matthew Dillon [Mon, 27 Mar 2017 06:40:56 +0000 (23:40 -0700)]
kernel - Add a BIOS quirks for AMD
* BIOS may fail to set InitApicIdCpuIdLo. Set it if no VMM capability.
* BIOS may configure Family 10h processors to convert WC+ to CD,
fixup if the BIOS did this.
Taken-From: FreeBSD
Matthew Dillon [Mon, 27 Mar 2017 06:40:20 +0000 (23:40 -0700)]
kernel - Add GD_IRESERVED access to assembly
* Useful for debugging. No use-cases committed.
Matthew Dillon [Mon, 27 Mar 2017 06:35:55 +0000 (23:35 -0700)]
kernel - Spread IPIs out to more priority levels
* Due to the brandamaged way the LAPIC queues received IPIs, each
priority level (the top 4 bits of the 8 bit vector) has a 2-entry
FIFO. Bring in comments from FreeBSD on how this works.
* Change our IPI vectors which previously used 2 priority levels to now
use 3 priority levels. Each source is generally limited by an atomic
op to avoid multi-queueing and hopefully that means the above LAPIC hw
queue will never refuse to accept an IPI.
IPIQ and TIMER use group 1
INVLTLB (and INVLPG) uses group 2
SNIFF, CPUSTOP, and SPURIOUSINT use group 3
* Reduces the number of vectors available per cpu by 16, but shouldn't
present that big a problem.
Matthew Dillon [Mon, 27 Mar 2017 06:24:09 +0000 (23:24 -0700)]
kernel - Enhance the sniff code, refactor interrupt disablement for IPIs
* Add kern.sniff_enable, default to 1. Allows the sysop to disable the
feature if desired.
* Add kern.sniff_target, allows sniff IPIs to be targetted to all cpus
(-1), or to a particular cpu (0...N). This feature allows the sysop
to test IPI delivery to particular CPUs (typically monitoring with
systat -pv 0.1) to determine that delivery is working properly.
* Bring in some additional AMD-specific setup from FreeBSD, beginnings
of support for the APIC Extended space. For now just make sure the
extended entries are masked.
* Change interrupt disablement expectations. The caller of apic_ipi(),
selected_apic_ipi(), and related macros is now required to hard-disable
interrupts rather than these functions doing so. This allows the caller
to run certain operational sequences atomically.
* Use the TSC to detect IPI send stalls instead of a hard-coded loop count.
* Also set the APIC_LEVEL_ASSERT bit when issuing a directed IPI, though
the spec says this is unnecessary. Do it anyway.
* Remove unnecessary critical section in selected_apic_ipi(). We are in
a hard-disablement and in particular we do not want to accidently trigger
a splz() due to the crit_exit() while in the hard-disablement.
* Enhance the IPI stall detection and recovery code. Provide more
inforamtion. Also enable the LOOPMASK_IN debugging tracker by default.
* Add a testing feature to machdep.all_but_self_ipi_enable. By setting
this to 2, we force the smp_invltlb() to always use the ALL_BUT_SELF IPI.
For testing only.
Matthew Dillon [Mon, 27 Mar 2017 06:15:35 +0000 (23:15 -0700)]
kernel - Use the TSC as the cpu clock on AMD Ryzen or later
* The TSC is usable as the cpu clock on AMD Ryzen or later, adjust
the code for this.
* Recode hw.tsc_cputimer_force to still run the TSC test, but then
force use of the TSC for the cpu clock whether the test succeeds
or fails.
Suggested-by: Sephe
Matthew Dillon [Mon, 27 Mar 2017 06:08:30 +0000 (23:08 -0700)]
kernel - Enhance machdep.cpu_idle_hlt
* Enhance machdep.cpu_idle_hlt. It was not operating as advertised for
settings 0 or 3+. Add mode 5.
0 - Now spins as documented (wasn't, before)
1 - Uses MONITOR/MWAIT if supported, HLT otherwise
2 - Uses mode (1) up to a point, then uses mode (3)
3 - Always use the ACPI halt code.
4 - Always use HLT (do not use MONITOR/MWAIT even if supported)
5 - Always spin
* Recode the default setting for AMD cpus (but no functional changes).
Default setting is 3 for AMD.