Date: Fri, 06 Feb 2026 15:39:29 +0000 From: Mark Johnston <markj@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 86150ed98b79 - main - bhyve: Simplify passthru_msix_addr() Message-ID: <69860b31.3f8c9.5a7bead4@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=86150ed98b7903feaba942f01619e74894cd23c4 commit 86150ed98b7903feaba942f01619e74894cd23c4 Author: Mark Johnston <markj@FreeBSD.org> AuthorDate: 2026-02-06 15:30:56 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2026-02-06 15:38:51 +0000 bhyve: Simplify passthru_msix_addr() It can use the passthru_mmio_map() helper function. Make that change, and also make passthru_mmio_map() use EPRINTLN to fix formatting when the guest console is stdio. Reviewed by: corvink, jhb MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D55067 --- usr.sbin/bhyve/pci_passthru.c | 80 ++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 54 deletions(-) diff --git a/usr.sbin/bhyve/pci_passthru.c b/usr.sbin/bhyve/pci_passthru.c index 8ddcd8bd56e8..662390413dbc 100644 --- a/usr.sbin/bhyve/pci_passthru.c +++ b/usr.sbin/bhyve/pci_passthru.c @@ -1310,58 +1310,6 @@ passthru_read(struct pci_devinst *pi, int baridx, uint64_t offset, int size) return (val); } -static void -passthru_msix_addr(struct pci_devinst *pi, int baridx, int enabled, - uint64_t address) -{ - struct passthru_softc *sc; - size_t remaining; - uint32_t table_size, table_offset; - - sc = pi->pi_arg; - table_offset = rounddown2(pi->pi_msix.table_offset, 4096); - if (table_offset > 0) { - if (!enabled) { - if (vm_unmap_pptdev_mmio(pi->pi_vmctx, - sc->psc_sel.pc_bus, - sc->psc_sel.pc_dev, - sc->psc_sel.pc_func, address, - table_offset) != 0) - warnx("pci_passthru: unmap_pptdev_mmio failed"); - } else { - if (vm_map_pptdev_mmio(pi->pi_vmctx, sc->psc_sel.pc_bus, - sc->psc_sel.pc_dev, - sc->psc_sel.pc_func, address, - table_offset, - sc->psc_bar[baridx].addr) != 0) - warnx("pci_passthru: map_pptdev_mmio failed"); - } - } - table_size = pi->pi_msix.table_offset - table_offset; - table_size += pi->pi_msix.table_count * MSIX_TABLE_ENTRY_SIZE; - table_size = roundup2(table_size, 4096); - remaining = pi->pi_bar[baridx].size - table_offset - table_size; - if (remaining > 0) { - address += table_offset + table_size; - if (!enabled) { - if (vm_unmap_pptdev_mmio(pi->pi_vmctx, - sc->psc_sel.pc_bus, - sc->psc_sel.pc_dev, - sc->psc_sel.pc_func, address, - remaining) != 0) - warnx("pci_passthru: unmap_pptdev_mmio failed"); - } else { - if (vm_map_pptdev_mmio(pi->pi_vmctx, sc->psc_sel.pc_bus, - sc->psc_sel.pc_dev, - sc->psc_sel.pc_func, address, - remaining, - sc->psc_bar[baridx].addr + - table_offset + table_size) != 0) - warnx("pci_passthru: map_pptdev_mmio failed"); - } - } -} - static int passthru_mmio_map(struct pci_devinst *pi, int baridx, int enabled, uint64_t address, uint64_t off, uint64_t size) @@ -1373,14 +1321,16 @@ passthru_mmio_map(struct pci_devinst *pi, int baridx, int enabled, if (vm_unmap_pptdev_mmio(pi->pi_vmctx, sc->psc_sel.pc_bus, sc->psc_sel.pc_dev, sc->psc_sel.pc_func, address + off, size) != 0) { - warnx("pci_passthru: unmap_pptdev_mmio failed"); + EPRINTLN("pci_passthru: unmap_pptdev_mmio failed: %s", + strerror(errno)); return (-1); } } else { if (vm_map_pptdev_mmio(pi->pi_vmctx, sc->psc_sel.pc_bus, sc->psc_sel.pc_dev, sc->psc_sel.pc_func, address + off, size, sc->psc_bar[baridx].addr + off) != 0) { - warnx("pci_passthru: map_pptdev_mmio failed"); + EPRINTLN("pci_passthru: map_pptdev_mmio failed: %s", + strerror(errno)); return (-1); } } @@ -1388,6 +1338,28 @@ passthru_mmio_map(struct pci_devinst *pi, int baridx, int enabled, return (0); } +static void +passthru_msix_addr(struct pci_devinst *pi, int baridx, int enabled, + uint64_t address) +{ + size_t remaining; + uint32_t table_size, table_offset; + + table_offset = rounddown2(pi->pi_msix.table_offset, 4096); + if (table_offset > 0) { + (void)passthru_mmio_map(pi, baridx, enabled, address, 0, + table_offset); + } + table_size = pi->pi_msix.table_offset - table_offset; + table_size += pi->pi_msix.table_count * MSIX_TABLE_ENTRY_SIZE; + table_size = roundup2(table_size, 4096); + remaining = pi->pi_bar[baridx].size - table_offset - table_size; + if (remaining > 0) { + (void)passthru_mmio_map(pi, baridx, enabled, address, + table_offset + table_size, remaining); + } +} + static void passthru_mmio_addr(struct pci_devinst *pi, int baridx, int enabled, uint64_t address)home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69860b31.3f8c9.5a7bead4>
