From nobody Tue Sep 16 06:57:08 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4cQt4N2KMkz68Rd8; Tue, 16 Sep 2025 06:57:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cQt4N183vz3YTM; Tue, 16 Sep 2025 06:57:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758005828; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=EsiL77LZTTko3dsxzrTqEiMeqZlXIAz4Qc2RgPtOHgk=; b=Mqz+dLVEaIBXVvYOxKTCj/MiygAj6P3K1GIgPmrhDXD9OfNurU/o2hqCgL/BTkzDh2b4HJ Md3+LREHX8td/iZByEYQadFW9R1s4h3U3wDtGrMkWnANMlpFd+tMQBgSU29nP+EYoMKINy fqDR8iUs6gvRWtGfXWQyUBJZbpnJ26X5fktcrxis7es7WRceIQSgsNA2VngaNxengwvPAd vzxw7ka8hrAPHOvn1D3obFi6zPA9k50bk+g/ixjAjimwY4RoOrnOHikZANFTBpoU77S7pm vho/Ln/5SBE3fAdrW3BVPR5W0tr63F6V+cHv0qgwlLQMjvwRPVYg2gHUNGdFQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758005828; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=EsiL77LZTTko3dsxzrTqEiMeqZlXIAz4Qc2RgPtOHgk=; b=BixuvDkyGZInoHyrcGUqsCEItpm7R4Qjru1M2ZmNJ8sMuU4RjMcXP3QALJ6hD5Y/3qL60K X8g1qO9QpSP/4y5qSJ2z8uSm10du8GLudLk61I1O0OobneZJztmRtTB/0Ntch/ITvbLRGO ACNjh46MQiiweT8+hc2047gvnTdDKBqdlIxwdXxedZc/Q3PcRsbmR3LPeyFIbBWSTNLk6Q ndXcmEGWbTdqyKvQwsXzKzOdsMb2LL3J11DY6O7I7F9d3LGcCEIdNDd130lzHoap4EGPCJ XjXb0BGiH2kF19xqOwG5ov/7aZyP+Ba9CvsHxyCPcGvHuSTlNNlxTFThQBsUqw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1758005828; a=rsa-sha256; cv=none; b=Bg2vS19j6qMT62HiMoNhJs378Thx/+d1U6w9+SjSYah5FYH7GWLCwcS4bTY7vgsfFNwbT5 b4K7w0QsHHOZAcIZMyJmdIHl0LpkiXZQyPf3WV6DYIHcHd5ZS4CZ9biNOStUzGDxJ0CAoA WS2s6jag1XbhKgvEXSMnxq8J0UirDxYtbs/AObE0M+b9Ozagk+Nl4UPHh2jtRZwZXbRbDj eTB1vao7DcI1RUkiW0Xfg3489W2gV+Vqg/Rr3NP/Z/EFU+aB7KVAJL8RL4dr+7mQTtTnH7 WuBc+y6a8q1pEaFDF4gsKOdro4p/hrvQ2wqelEAMMfucpqOuVoMs5iGACOHAXw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4cQt4N0fYQzTyc; Tue, 16 Sep 2025 06:57:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 58G6v8dJ070908; Tue, 16 Sep 2025 06:57:08 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58G6v843070905; Tue, 16 Sep 2025 06:57:08 GMT (envelope-from git) Date: Tue, 16 Sep 2025 06:57:08 GMT Message-Id: <202509160657.58G6v843070905@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Corvin =?utf-8?Q?K=C3=B6hne?= Subject: git: effcd0ded0ef - main - bhyve: assign a valid INTPIN to NVIDIA GPUs List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: corvink X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: effcd0ded0ef1c92bef29c1e9bbf517c97bb45b8 Auto-Submitted: auto-generated The branch main has been updated by corvink: URL: https://cgit.FreeBSD.org/src/commit/?id=effcd0ded0ef1c92bef29c1e9bbf517c97bb45b8 commit effcd0ded0ef1c92bef29c1e9bbf517c97bb45b8 Author: Corvin Köhne AuthorDate: 2022-03-17 12:11:14 +0000 Commit: Corvin Köhne CommitDate: 2025-09-16 06:55:09 +0000 bhyve: assign a valid INTPIN to NVIDIA GPUs When passing an NVIDIA GPU to a Linux VM, the GPU driver refuses to work and complains about a missing IRQ: [ 77.208984] NVRM: Can't find an IRQ for your NVIDIA card! [ 77.212697] NVRM: Please check your BIOS settings. [ 77.212699] NVRM: [Plug & Play OS] should be set to NO [ 77.212700] NVRM: [Assign IRQ to VGA] should be set to YES [ 77.212702] nvidia: probe of 0000:00:07.0 failed with error -1 By setting a valid INTPIN in the PCI config space those error messages disappear. Additionally, tools like nvidia-smi are able to detect the GPU and the GPU driver seems to work properly. Note that bhyve still doesn't support legacy interrupts. So, the guest shouldn't try to use it even though we're assigning an INTPIN. Reviewed by: jhb Tested by: chuck MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Differential Revision: https://reviews.freebsd.org/D51892 --- usr.sbin/bhyve/amd64/Makefile.inc | 1 + usr.sbin/bhyve/pci_passthru_quirks.c | 48 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/usr.sbin/bhyve/amd64/Makefile.inc b/usr.sbin/bhyve/amd64/Makefile.inc index 92e53433ff01..50a011ed4bfd 100644 --- a/usr.sbin/bhyve/amd64/Makefile.inc +++ b/usr.sbin/bhyve/amd64/Makefile.inc @@ -13,6 +13,7 @@ SRCS+= \ pci_gvt-d.c \ pci_lpc.c \ pci_passthru.c \ + pci_passthru_quirks.c \ pctestdev.c \ pm.c \ post.c \ diff --git a/usr.sbin/bhyve/pci_passthru_quirks.c b/usr.sbin/bhyve/pci_passthru_quirks.c new file mode 100644 index 000000000000..5ba0e674f311 --- /dev/null +++ b/usr.sbin/bhyve/pci_passthru_quirks.c @@ -0,0 +1,48 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2025 Beckhoff Automation GmbH & Co. KG + * Author: Corvin Köhne + */ + +#include + +#include + +#include "pci_passthru.h" + +#define PCI_VENDOR_NVIDIA 0x10DE + +static int +nvidia_gpu_probe(struct pci_devinst *const pi) +{ + struct passthru_softc *sc; + uint16_t vendor; + uint8_t class; + + sc = pi->pi_arg; + + vendor = pci_host_read_config(passthru_get_sel(sc), PCIR_VENDOR, 0x02); + if (vendor != PCI_VENDOR_NVIDIA) + return (ENXIO); + + class = pci_host_read_config(passthru_get_sel(sc), PCIR_CLASS, 0x01); + if (class != PCIC_DISPLAY) + return (ENXIO); + + return (0); +} + +static int +nvidia_gpu_init(struct pci_devinst *const pi, nvlist_t *const nvl __unused) +{ + pci_set_cfgdata8(pi, PCIR_INTPIN, 1); + + return (0); +} + +static struct passthru_dev nvidia_gpu = { + .probe = nvidia_gpu_probe, + .init = nvidia_gpu_init, +}; +PASSTHRU_DEV_SET(nvidia_gpu);