Date: Fri, 22 May 2026 22:13:38 +0000 (UTC) From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: Mark Johnston <markj@FreeBSD.org> Cc: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: Re: git: 36b855f18925 - main - amd64/vmm: Lock global PCI passthrough structures Message-ID: <21416977-p363-rs27-90n6-qq2o931r4ps5@mnoonqbm.arg> In-Reply-To: <69860b30.3f83f.acb567e@gitrepo.freebsd.org>
index | next in thread | previous in thread | raw e-mail
On Fri, 6 Feb 2026, Mark Johnston wrote: > The branch main has been updated by markj: > > URL: https://cgit.FreeBSD.org/src/commit/?id=36b855f1892575cbfe1cd5455b989bfc8ae07502 > > commit 36b855f1892575cbfe1cd5455b989bfc8ae07502 > Author: Mark Johnston <markj@FreeBSD.org> > AuthorDate: 2026-02-06 15:29:22 +0000 > Commit: Mark Johnston <markj@FreeBSD.org> > CommitDate: 2026-02-06 15:38:51 +0000 > > amd64/vmm: Lock global PCI passthrough structures > > There is a global list of ppt-claimed devices, accessed via several > vmm ioctls. The ioctls are locked by per-VM locks, but this isn't > sufficient to prevent multiple VMs from trying to bind a given device. > > Add a sleepable lock and use that to synchronize all access to ppt > devices. > > Reviewed by: corvink, jhb > MFC after: 2 weeks > Differential Revision: https://reviews.freebsd.org/D55065 > --- > sys/amd64/vmm/io/ppt.c | 162 +++++++++++++++++++++++++++++++++---------------- > 1 file changed, 111 insertions(+), 51 deletions(-) > > diff --git a/sys/amd64/vmm/io/ppt.c b/sys/amd64/vmm/io/ppt.c > index 6feac5dcbbed..b522e18e3b24 100644 > --- a/sys/amd64/vmm/io/ppt.c > +++ b/sys/amd64/vmm/io/ppt.c ... > int > @@ -529,10 +558,12 @@ ppt_unmap_mmio(struct vm *vm, int bus, int slot, int func, > struct pptseg *seg; > struct pptdev *ppt; > > + PPT_LOCK(); > error = ppt_find(vm, bus, slot, func, &ppt); > if (error) > - return (error); > + goto out; > > + error = ENOENT; > for (i = 0; i < MAX_MMIOSEGS; i++) { > seg = &ppt->mmio[i]; > if (seg->gpa == gpa && seg->len == len) { > @@ -541,9 +572,11 @@ ppt_unmap_mmio(struct vm *vm, int bus, int slot, int func, > seg->gpa = 0; > seg->len = 0; > } > - return (error); > + break; > } > } > +out: > + PPT_UNLOCK(); > return (ENOENT); > } There's a bug here. That should be return (error). That's been breaking pci passthru since February. I cannot imagine how no one noticed this in 3 months? /bz -- Bjoern A. Zeeb r15:7home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?21416977-p363-rs27-90n6-qq2o931r4ps5>
