git: c70755bc0d8f - main - virtio: add loader tunables to sysctl
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 02 Mar 2026 18:17:56 UTC
The branch main has been updated by tuexen:
URL: https://cgit.FreeBSD.org/src/commit/?id=c70755bc0d8f703dbaa1520c15e8213a95847dd5
commit c70755bc0d8f703dbaa1520c15e8213a95847dd5
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-03-02 18:15:37 +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
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D55533
---
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 b7b34b448f6e..2d33d99014ae 100644
--- a/sys/dev/virtio/pci/virtio_pci.c
+++ b/sys/dev/virtio/pci/virtio_pci.c
@@ -97,8 +97,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 eb1d5a1e6989..108fd2b5f8e9 100644
--- a/sys/dev/virtio/pci/virtio_pci_modern.c
+++ b/sys/dev/virtio/pci/virtio_pci_modern.c
@@ -33,6 +33,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>
@@ -188,8 +189,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 75d65ba4a8c8..be5edcafa7ff 100644
--- a/sys/dev/virtio/virtio.c
+++ b/sys/dev/virtio/virtio.c
@@ -30,6 +30,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>
@@ -90,6 +91,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)
{