Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Apr 2026 09:22:10 +0000
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc:        Timo =?utf-8?Q?V=C3=B6lker?= <timo.voelker@fh-muenster.de>
Subject:   git: 32f8c7821394 - stable/14 - virtio: add loader tunables to sysctl
Message-ID:  <69edd942.38c08.5c5d6f7@gitrepo.freebsd.org>

index | next in thread | raw e-mail

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)
 {


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69edd942.38c08.5c5d6f7>