git: 32f8c7821394 - stable/14 - virtio: add loader tunables to sysctl
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 26 Apr 2026 09:22:10 UTC
The branch stable/14 has been updated by tuexen:
URL: https://cgit.FreeBSD.org/src/commit/?id=32f8c7821394b3be2d97641dbe8bf8962e2bb90a
commit 32f8c7821394b3be2d97641dbe8bf8962e2bb90a
Author: Timo Völker <timo.voelker@fh-muenster.de>
AuthorDate: 2026-03-02 18:15:37 +0000
Commit: Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2026-04-26 07:20:41 +0000
virtio: add loader tunables to sysctl
virtio_pci uses two loader tunables that should be more visible.
This patch adds these loader tunables to sysctl and describes them
in the virtio(4) man page.
Reviewed by: imp (erlier version), tuexen
Differential Revision: https://reviews.freebsd.org/D55533
Event: Wiesbaden Hackathon 2026
(cherry picked from commit c70755bc0d8f703dbaa1520c15e8213a95847dd5)
---
share/man/man4/virtio.4 | 28 ++++++++++++++++++++++++++--
sys/dev/virtio/pci/virtio_pci.c | 7 ++++++-
sys/dev/virtio/pci/virtio_pci_modern.c | 7 ++++++-
sys/dev/virtio/virtio.c | 4 ++++
4 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/share/man/man4/virtio.4 b/share/man/man4/virtio.4
index 1e5ea0e4a7da..0598d5d8621d 100644
--- a/share/man/man4/virtio.4
+++ b/share/man/man4/virtio.4
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd May 26, 2019
+.Dd March 2, 2026
.Dt VIRTIO 4
.Os
.Sh NAME
@@ -54,7 +54,7 @@ The
.Nm
module provides a shared memory transport called a virtqueue.
The
-.Xr virtio_pci
+.Sy virtio_pci
device driver represents an emulated PCI device that the hypervisor makes
available to the VM.
This device provides the probing, configuration, and
@@ -92,6 +92,30 @@ An emulated SCSI HBA is provided by the
.Xr virtio_scsi 4
device driver.
.El
+.Sh LOADER TUNABLES
+Tunables can be set at the
+.Xr loader 8
+prompt before booting the kernel or stored in
+.Xr loader.conf 5 .
+.Bl -tag -width "hw.virtio.pci.transitional"
+.It Va hw.virtio.pci.disable_msix
+If set to 1, disables MSI-X.
+The default value is 0.
+.It Va hw.virtio.pci.transitional
+For a transitional
+.Nm
+device, this tunable specifies whether to negotiate
+modern mode and use the modern
+.Nm
+driver
+.Pq 1
+or to negotiate legacy mode and
+use the legacy
+.Nm
+driver
+.Pq 1 .
+The default value is 0.
+.El
.Sh SEE ALSO
.Xr virtio_balloon 4 ,
.Xr virtio_blk 4 ,
diff --git a/sys/dev/virtio/pci/virtio_pci.c b/sys/dev/virtio/pci/virtio_pci.c
index 4849affae58c..451a93d11759 100644
--- a/sys/dev/virtio/pci/virtio_pci.c
+++ b/sys/dev/virtio/pci/virtio_pci.c
@@ -98,8 +98,13 @@ MODULE_VERSION(virtio_pci, 1);
MODULE_DEPEND(virtio_pci, pci, 1, 1, 1);
MODULE_DEPEND(virtio_pci, virtio, 1, 1, 1);
+SYSCTL_DECL(_hw_virtio);
+SYSCTL_NODE(_hw_virtio, OID_AUTO, pci, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
+ "VirtIO PCI driver parameters");
+
int vtpci_disable_msix = 0;
-TUNABLE_INT("hw.virtio.pci.disable_msix", &vtpci_disable_msix);
+SYSCTL_INT(_hw_virtio_pci, OID_AUTO, disable_msix, CTLFLAG_RDTUN,
+ &vtpci_disable_msix, 0, "If set to 1, disables MSI-X.");
static uint8_t
vtpci_read_isr(struct vtpci_common *cn)
diff --git a/sys/dev/virtio/pci/virtio_pci_modern.c b/sys/dev/virtio/pci/virtio_pci_modern.c
index 2e59448b4b5e..2c54288aefba 100644
--- a/sys/dev/virtio/pci/virtio_pci_modern.c
+++ b/sys/dev/virtio/pci/virtio_pci_modern.c
@@ -34,6 +34,7 @@
#include <sys/bus.h>
#include <sys/lock.h>
#include <sys/kernel.h>
+#include <sys/sysctl.h>
#include <sys/module.h>
#include <machine/bus.h>
@@ -189,8 +190,12 @@ static void vtpci_modern_write_device_8(struct vtpci_modern_softc *,
bus_size_t, uint64_t);
/* Tunables. */
+SYSCTL_DECL(_hw_virtio_pci);
+
static int vtpci_modern_transitional = 0;
-TUNABLE_INT("hw.virtio.pci.transitional", &vtpci_modern_transitional);
+SYSCTL_INT(_hw_virtio_pci, OID_AUTO, transitional, CTLFLAG_RDTUN,
+ &vtpci_modern_transitional, 0,
+ "If 0, a transitional VirtIO device is used in legacy mode; otherwise, in modern mode.");
static device_method_t vtpci_modern_methods[] = {
/* Device interface. */
diff --git a/sys/dev/virtio/virtio.c b/sys/dev/virtio/virtio.c
index 0637e0299333..14dad88b3f6d 100644
--- a/sys/dev/virtio/virtio.c
+++ b/sys/dev/virtio/virtio.c
@@ -31,6 +31,7 @@
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
+#include <sys/sysctl.h>
#include <sys/module.h>
#include <sys/sbuf.h>
@@ -84,6 +85,9 @@ static struct virtio_feature_desc virtio_common_feature_desc[] = {
{ 0, NULL }
};
+SYSCTL_NODE(_hw, OID_AUTO, virtio, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
+ "VirtIO driver parameters");
+
const char *
virtio_device_name(uint16_t devid)
{