256084 Commits

Author SHA1 Message Date
Bryan Venteicher
05041794d0 if_vtnet: Defer updating generated MAC address until attached
This improves spec compliance because the driver is not suppose
to notify the device prior to setting the DRIVER_OK status, which
could happen with the VIRTIO_NET_F_CTRL_MAC_ADDR.

The VIRTIO_NET_F_MAC feature should always be negotiated so would
be a rare situation.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27910
2021-01-19 04:55:24 +00:00
Bryan Venteicher
25dbc30ef5 if_vtnet: Remove at attach PROMISC handling
This may have been required in an early, early, early version of the
specification but I cannot find any reference to it, and a promiscuous
default seems very odd so remove this code.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27909
2021-01-19 04:55:24 +00:00
Bryan Venteicher
6a73339365 if_vtnet: Support VIRTIO_NET_F_SPEED_DUPLEX
This features lets the guest driver know the speed and duplex of
the "link". Instead of trying to support many media types based
on the possible/likely speeds/duplexes, only use the speed to
set the interface baudrate.

Cleanup ifmedia code to match other drivers.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27908
2021-01-19 04:55:24 +00:00
Bryan Venteicher
aabdf5b6e8 if_vtnet: Support VIRTIO_NET_F_MTU
This feature lets the guest driver know the maximum MTU size
supported by the host device. If set, use this to limit the
acceptable MTUs, and improve how the receive mbuf cluster size
then is selected.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27907
2021-01-19 04:55:24 +00:00
Bryan Venteicher
fa7ca1e332 if_vtnet: Rx path cleanup
- Fix the NEEDS_CSUM and DATA_VALID checksum flags. The NEEDS_CSUM
    checksum is incomplete (partial) so offer a fallback for the driver
    to calculate the checksum. Simplify DATA_VALID because we know
    the host has validated the checksum.

  - Default 4K mbuf clusters for mergeable buffers. May need to
    scale this down to 2K clusters in certain configurations such
    many queue pairs, big queues (like 4096 in GCP), and low memory.

  - Use the MTU when calculated the receive mbuf cluster size
    when not doing TSO/LRO. This will need more adjustment once
    the MTU feature is supported.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27906
2021-01-19 04:55:24 +00:00
Bryan Venteicher
149ab110dd virtio_blk: Use DISKFLAG_WRITE_PROTECT for RO disks
Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27905
2021-01-19 04:55:24 +00:00
Bryan Venteicher
5e22081177 if_vtnet: Add initial modern (V1) support
Very basic support to get packets flowing on modern QEMU but still
several conformance issues remain that will be addressed in later
commits.

First of many passes at cleaning up various accumulated cruft

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27904
2021-01-19 04:55:24 +00:00
Bryan Venteicher
15be49535d virtio_scsi: Add modern (V1) support
Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27903
2021-01-19 04:55:24 +00:00
Bryan Venteicher
d7f979bed0 virtio_blk: Add modern (V1) support
Rework the header file changes from 2cc8a52 to use our
canonical upstream, Linux.

geom_disk already checks DISKFLAG_CANDELETE for BIO_DELETE
so remove an unnecessary check.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27902
2021-01-19 04:55:24 +00:00
Bryan Venteicher
edf7c8ddce virtio_console: Add modern (V1) support
Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27901
2021-01-19 04:55:24 +00:00
Bryan Venteicher
f7f9c266e4 virtio_balloon: Add modern (V1) support
Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27900
2021-01-19 04:55:23 +00:00
Bryan Venteicher
d2536a25cc virtio_random: Add modern (V1) support
Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27899
2021-01-19 04:55:23 +00:00
Bryan Venteicher
703f17d60f virtio_pci: Add sysctl to show current features
Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27898
2021-01-19 04:55:23 +00:00
Bryan Venteicher
fbe0c4f4c7 virtio: Add modern (v1) virtqueue support
This only supports the legacy virtqueue format that is now called
"Split Virtqueues". Support for the new "Packed Virtqueues" described
in v1.1 is left for a later date.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27857
2021-01-19 04:55:23 +00:00
Bryan Venteicher
9da9560c4d virtio: Add VirtIO PCI modern (V1) support
Use the existing legacy PCI driver as the basis for shared code
between the legacy and modern PCI drivers. The existing virtio_pci
kernel module will contain both the legacy and modern drivers.

Changes to the virtqueue and each device driver (network, block, etc)
for V1 support come in later commits.

Update the MMIO driver to reflect the VirtIO bus method changes, but
the modern compliance can be improved on later.

Note that the modern PCI driver requires bus_map_resource() to be
implemented, which is not the case on all archs.

The hw.virtio.pci.transitional tunable default value is zero so
transitional devices will continue to be driven via the legacy
driver.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27856
2021-01-19 04:55:23 +00:00
Bryan Venteicher
1cd1ed3f5d Revert: virtio: Support non-legacy network device and queue
And subsequent fix 576b099a.

By adding the mergable header to the vtnet_rx_header structure, the size
was increased by 2 bytes, breaking the alignment of this structure as
described the in preceding comments.

Furthermore, the mergable header does not belong the structure. With the
mergable feature, the header is placed in line with the data, so there is
no need for a separate segment, and misleading to follow the mergable
header with any padding.

The V1 header is effectively identical to mergable header, and the driver
has long supported the mergable feature. Revert this so the later changes
that add V1 support can show how V1 is derived from the existing mergable
buffers support, and to facilitate a later MFC.

Reviewed by: grehan (mentor)
Differential Revision: https://reviews.freebsd.org/D27855
2021-01-19 04:55:23 +00:00
Emmanuel Vadot
613fe5321f pkgbase: differentiate package versions for ALPHA/BETA/PRERELEASE/RC phases
The current postfix conversions are:

  CURRENT / STABLE / PRERELEASE, 12.x-CURRENT becomes 12.snapYYYYMMDDhhmmss
  ALPHAx -> .ax, so 11.3-ALPHA1 becomes 11.3.a1.YYYYMMDDhhmmss
  BETAx -> .bx, so 12.1-BETA2 becomes 12.1.b2.YYYYMMDDhhmmss
  RCx -> .rcx, so 13.0-RC3 becomes 13.0.rc3.YYYYMMDDhhmmss
  RELEASE -> (nothing), so 12.1-RELEASE becomes 12.1
  RELEASE-pX -> pX, so 12.1-RELEASE-p1 becomes 12.1p1

Note that for development branches we will start to drop the minor version
component entirely, which more closely matches how these branches are
physically named (stable/NN).

snap is a new prefix that was added to pkg in [0], which is simply a more
verbose version of the current ".s" used.

As noted, build timestamps are also added to ALPHA/BETA/RC versions.  This
is largely irrelevant for re@ snapshots because they will only produce one
set of snapshots for each alpha/beta/rc, but external folks may produce
multiple in that timeframe -- at least for alpha.  For them, it is
imperative that the builds have a differentiating characteristic like this
rather than multiple builds across multiple revisions being versioned
identically.

[0] https://github.com/freebsd/pkg/pull/1929

Reviewed by:	gjb, manu
Submitted by:	rene (original, original version)
Differential Revision:	https://reviews.freebsd.org/D28167
2021-01-18 22:26:22 -06:00
Jamie Gritton
effad35ed1 jail: Clean up some function placement and improve comments.
Move prison_hold, prison_hold_locked ,prison_proc_hold, and
prison_proc_free to a more intuitive part of the file (together with
with prison_free and prison_free_locked), and add or improve comments
to these and others, to better describe what's going in the prison
reference cycle.

No functional changes.
2021-01-18 17:23:51 -08:00
Mark Johnston
a45d905616 ppbus: Fix the direction of the PPISEPPA ioctl
PR:		252711
Submitted by:	Eugene <merfi@nearly.ru>
2021-01-18 19:44:42 -05:00
Oleksandr Tymoshenko
248f0cabca make maximum interrupt number tunable on ARM, ARM64, MIPS, and RISC-V
Use a machdep.nirq tunable intead of compile-time constant NIRQ
as a value for maximum number of interrupts. It allows keep a system
footprint small by default with an option to increase the limit
for large systems like server-grade ARM64

Reviewd by:	mhorne
Differential Revision:	https://reviews.freebsd.org/D27844
Submitted by:	Klara, Inc.
Sponsored by:	Ampere Computing
2021-01-18 16:36:39 -08:00
Jamie Gritton
83bc72a04e jail: Fix a stray mutex from 76ad42abf9d4. 2021-01-18 15:47:09 -08:00
Mark Johnston
098c902b52 aesni: Ensure that key schedules are aligned
Rather than depending on malloc() returning 16-byte aligned chunks,
allocate some extra pad bytes and ensure that key schedules are
appropriately aligned.

Reviewed by:	kib
MFC after:	2 weeks
Sponsored by:	Rubicon Communications, LLC (Netgate)
Differential Revision:	https://reviews.freebsd.org/D28157
2021-01-18 17:07:56 -05:00
Mark Johnston
5bdb8b273a safexcel: Maintain per-session context records
The context record contains key material precomputed by the driver at
session creation time.  Rather than storing various components of the
context record in each session, go a bit further and store the full
context record image so that safexcel_process() can simply copy the
image into each request submitted to the hardware.  This simplifies the
data path and eliminates a bunch of unnecessary conditional logic that
was getting executed for each request.

MFC after:	1 week
Sponsored by:	Rubicon Communications, LLC (Netgate)
2021-01-18 17:07:56 -05:00
Mark Johnston
1a6ffed5d7 safexcel: Simplify request allocation
Rather than preallocating a set of requests and moving them between
queues during state transitions, maintain a shadow of the command
descriptor ring to track the driver context of each request.  This is
simpler and requires less synchronization between safexcel_process() and
the ring interrupt handler.

MFC after:	1 week
Sponsored by:	Rubicon Communications, LLC (Netgate)
2021-01-18 17:07:56 -05:00
Mark Johnston
b7e27af36b safexcel: Handle command/result descriptor exhaustion gracefully
Rather than returning a hard error in this case, return ERESTART so that
upper layers get a chance to retry the request (or drop it, depending on
the desired policy).

This case is hard to hit due to the somewhat low bound on queued
requests, but that will no longer be true after an upcoming change.

MFC after:	1 week
Sponsored by:	Rubicon Communications, LLC (Netgate)
2021-01-18 17:07:56 -05:00
Mark Johnston
0371c3faaa safexcel: Add counters for some resource exhaustion conditions
This is useful when analyzing performance problems.

MFC after:	1 week
Sponsored by:	Rubicon Communications, LLC (Netgate)
2021-01-18 17:07:55 -05:00
Mark Johnston
e934d455ba safexcel: Dispatch requests to the current CPU's ring
This gives better performance in some tests than the previous policy of
statically binding each session to a ring.

MFC after:	1 week
Sponsored by:	Rubicon Communications, LLC (Netgate)
2021-01-18 17:07:55 -05:00
Mark Johnston
4af9323542 linuxkpi: Fix the shrinker scan target
Use the number of items scanned to control the duration of the shrink
loop.  Otherwise, if a consumer like TTM is not able to free the number
of items requested for some reason, the shrinker keeps looping forever.

Reviewed by:	manu
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D28224
2021-01-18 17:07:55 -05:00
Mitchell Horne
a520f5ca58 armv8crypto: print a message on probe failure
Similar to the message printed by aesni(4), let the user know if the
driver is unsupported by their CPU.

PR:		252543
Reported by:	gbe
MFC after:	3 days
Sponsored by:	The FreeBSD Foundation
2021-01-18 16:59:21 -04:00
Kyle Evans
95ae95d413 pkgbase: limit PKG_VERSION_FROM calculation to real-update-packages
PKG_ABI is defined in some other targets that do not need to shell out and
calculate PKG_VERSION_FROM. Moreover, it produces extra errors when
bootstrapping an initial pkgbase repo, as the /latest link doesn't exist
yet.
2021-01-18 13:34:54 -06:00
Jamie Gritton
76ad42abf9 jail: Add prison_isvalid() and prison_isalive()
prison_isvalid() checks if a prison record can be used at all, i.e.
pr_ref > 0.  This filters out prisons that aren't fully created, and
those that are either in the process of being dismantled, or will be
at the next opportunity.  While the check for pr_ref > 0 is simple
enough to make without a convenience function, this prepares the way
for other measures of prison validity.

prison_isalive() checks not only validity as far as the useablity of
the prison structure, but also whether the prison is visible to user
space.  It replaces a test for pr_uref > 0, which is currently only
used within kern_jail.c, and not often there.

Both of these functions also assert that either the prison mutex or
allprison_lock is held, since it's generally the case that unlocked
prisons aren't guaranteed to remain useable for any length of time.
This isn't entirely true, for example a thread can assume its own
prison is good, but most exceptions will exist inside of kern_jail.c.
2021-01-18 10:56:20 -08:00
Andrew Gallatin
efa9c21bca KTLS: Enable KERN_TLS in GENERIC on amd64
Based on discussions on freebsd-arch@, enable KERN_TLS in
GENERIC on amd64, but leave it disabled via the
sysctl kern.ipc.tls.enable.  Users wishing to enable
ktls must set kern.ipc.tls.enable=1

While here, fix wording in NOTES to mention that KERN_TLS
also does receive now.

Sponsored by:	Netflix

Reviewed by:	allanjude
Differential Revision:	https://reviews.freebsd.org/D28163
2021-01-18 13:29:10 -05:00
Lutz Donnerhacke
c3e75b6c1a netgraph/ng_one2main: Clarification in comments about copy mode
The original comment suggests an optimization, which was proven wrong.

Reported by:	nc
Reviewed by:	kp, nc
Approved by:	kp (mentor)
Differential Revision:	https://reviews.freebsd.org/D23727
2021-01-18 14:10:34 +01:00
Lutz Donnerhacke
7c7c231c14 netgraph/ng_tag: permit variable length data
ng_tag(4) operate on arbitrary data of mbuf_tags(9).  Those structures
are padded to the next multiple of the alignment by the compiler.
Hence a valid argument has be at most as long as the data received.

PR:		241462
Reviewed by:	kp
Approved by:	kp (mentor)
MFC after:	2 weeks
Differential Revision: https://reviews.freebsd.org/D22140
2021-01-18 13:23:22 +01:00
Martin Tournoij
f850fd2496 grep: fix LINKS in Makefile
zstdegrep was listed twice, instead of zstdfgrep

Pull Request:	https://github.com/freebsd/freebsd-src/pull/450
2021-01-18 11:22:48 +01:00
Konstantin Belousov
36bcc44e2c Add ddb 'show timecounter' command.
MFC after:	1 week
Sponsored by:	The FreeBSD Foundation
2021-01-18 09:51:48 +02:00
Rick Macklem
448de00de5 mount_nfs: update man page description for oneopenown
A recent email discussion indicated that a large
accumulation of NFSv4 Opens was occurring on
a mount. This appears to have been caused by a
shared library within the mount being used by
several processes, such that there is always at
least one of these processes running.
A new Open was created by each process and
were not closed, since all the Opens were never
closed. This is alleviated by using the
"oneopenown" mount option.

This man page update attempts to indicate the
use of "oneopenown" for this case.

This is a content change.

Reported by:	j.david.lists@gmail.com
Reviewed by:	0mp
MFC:	1 month
Differential Revision:	https://reviews.freebsd.org/D28215
2021-01-17 19:00:41 -08:00
Jamie Gritton
25c2c952e3 jail: Add proper prison locking in mqfs_prison_remove. 2021-01-17 17:41:09 -08:00
Toomas Soome
1caed70c62 loader: update gfx module
Update from illumos review process.
Add more comments, drop memory buffer from blt functions.
2021-01-18 00:15:36 +02:00
Lutz Donnerhacke
75e7ef74df netgraph/ng_source: Allow ng_source to inject into any netgraph network
PR:		240530
Reviewed by:	kp
Approved by:	kp (mentor)
MFC after:	1 month
Differential Revision: https://reviews.freebsd.org/D21968
2021-01-17 22:17:01 +01:00
Alexander V. Chernikov
74935ce881 Enable running fib tests inside vnet jail. 2021-01-17 20:32:26 +00:00
Alexander V. Chernikov
f879876721 Fix IPv4 fib bsearch4() lookup array construction.
Current code didn't properly handle the case with nested prefixes
 like 10.0.0.0/24 && 10.0.0.0/25.
2021-01-17 20:32:26 +00:00
Alexander V. Chernikov
9d6567bc30 Fix panic on vnet creation if fib algo has been set to fixed value.
Make fixed algo property per-VNET instead of global.
2021-01-17 20:32:25 +00:00
Alexander V. Chernikov
f9e0752e35 Create new in6_purgeifaddr() which purges bound ifa prefix if
it gets unused.

Currently if_purgeifaddrs() uses in6_purgeaddr() to remove IPv6
 ifaddrs. in6_purgeaddr() does not trrigger prefix removal if
 number of linked ifas goes to 0, as this is a low-level function.
 As a result, if_purgeifaddrs() purges all IPv4/IPv6 addresses but
 keeps corresponding IPv6 prefixes.

Fix this by creating higher-level wrapper which handles unused
 prefix usecase and use it in if_purgeifaddrs().

Differential revision:	https://reviews.freebsd.org/D28128
2021-01-17 20:32:25 +00:00
Kyle Evans
da8cc827ae pkgbase: collapse -PRERELEASE into STABLE/CURRENT case for version suffix
-PRERELEASE exists as a given stable/X branch while the next minor version
release is in progress. From a functional standpoint, it should be treated
as -STABLE since it'll typically be a superset of what's included in the
concurrent releng branch.

Reviewed by:	gjb
Differential Revision:	https://reviews.freebsd.org/D28166
2021-01-17 14:08:13 -06:00
Kyle Evans
9af9e7c5cc pkgbase: default to installing all specified kernels
These only get staged off to the side, not installed into the system. Let's
change the default for packages/update-packages to be less surprising.

MFC after:	1 week
Reviewed by:	manu, meena <me igalic co>
Differential Revision:	https://reviews.freebsd.org/D28190
2021-01-17 14:05:33 -06:00
Conrad Meyer
ddf6115613 fstyp(8): fix exfat detection
In the presence of high-level errors (spec violations, bad boot blocks
checksum), report non-detection instead of detection.

PR:	252787 (related, but does not fully address)
2021-01-17 11:55:06 -08:00
Konstantin Belousov
f3ea417f96 x86 busdma_bounce: use malloc_domainset_aligned(9).
This stops busdma bounce making assumptions about alignment of malloc(9)
results, which are no longer true.

Also add assert that the result of malloc_aligned() fits into single
page, which is the assumption of the code.

Reported by:	dim
Reviewed by:	andrew, jah, markj
Tested by:	pho
MFC after:	1 week
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D28147
2021-01-17 19:29:05 +02:00
Konstantin Belousov
3b15beb30b Implement malloc_domainset_aligned(9).
Change the power-of-two malloc zones to require alignment equal to the
size [*].  Current uma allocator already provides such alignment, so in
fact this change does not change anything except providing future-proof
setup.

Suggested by:	markj [*]
Reviewed by:	andrew, jah, markj
Tested by:	pho
MFC after:	1 week
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D28147
2021-01-17 19:29:05 +02:00
Ed Maste
e83b514a95 cat: depend on Makefile to rebuild when WITH_CASPER changes
We try to ensure building WITHOUT_CLEAN (or -DNO_CLEAN) works on an
ongoing basis.  b7ab6832cd98 changed cat to build w/o -DWITH_CASPER
by default; add a cat.o dependency on the Makefile so that it gets
rebuilt.
2021-01-17 12:19:00 -05:00