From nobody Mon Feb 9 10:27:35 2026 Received: from mail-pj1-f98.google.com (mail-pj1-f98.google.com [209.85.216.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DCEC730F7E3 for ; Mon, 29 Dec 2025 21:59:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.98 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767045571; cv=none; b=stzVwYhfWGkDT0Fr4BRfRiL0zhGzcpGuB6+iu40/wnRp6r3IakOj3iMos0bcfUaBffTNmCZnuMt+J5fqqtt8fg/hMuMey+V6TojYhC1GRBtCu0d9BGdA0s2K3HWmDOcsUmA5QZi9zi0MfGVyToBrVyFp2+T8Bz1nELgvqFOJKHA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767045571; c=relaxed/simple; bh=HLz/pKvZ8fPvlFlHYFg+4MkikJW/YUYjkfO51McHq3E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lDWt+QW3zYA/XC8Ns2qVFB5vJQDgV/igdQ/FWeyE2MlI87z78IIabiTDtWMzwJ00ITNZxklujcJEqrwpX8vOtnREPQTly+EYO9hNw+x6fieyhm4zyGM9MfZZAEo33cxMUmE8a2Xs4zaEtWd/Y/kC6+m+B3/PUCQVg2q4uv6jORQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=Jb9dfM8n; arc=none smtp.client-ip=209.85.216.98 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="Jb9dfM8n" Received: by mail-pj1-f98.google.com with SMTP id 98e67ed59e1d1-34c277ea011so9551094a91.1 for ; Mon, 29 Dec 2025 13:59:29 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767045569; x=1767650369; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=twseZy54c+QB1Kjp/hds53EAQKHotDuR3NVPADpEAm0=; b=m+LoyllZcAGO7Ppjp4l7UqhpjrtuhruglyRdv2DNqKp26MN8grFqz/lYQ+pKd7MLq2 MOlwJeTyvFQpRpIVgIovlkPC5ZXtqTMlonzBlPbOT69tckTC8Pyb2BwdVJYzyQvIKB5V jTgtsEC2tIxXr1MdpM8uGwWFMRhQ9ag/vBHZHAxfezd74FewmJrnuMweKzVymNbQB6AQ 8SiqRftFSiLjbQpC2d7nCTa1qJSx2f8Ncon0KTbIDTU9Sf6R544mE0jPgIA41Ja9BmRK klyhdUTY1RpWDJNqSM7SDZ5vbZ+IGmCH2bE02jv2Yxyw0lvzPkplyvpZ5B99O8HAlUr8 vyvw== X-Forwarded-Encrypted: i=1; AJvYcCW5ZsBzgXuus5BpDqogv5oVpq0s3K9ecTmh/fUMrZD4NFMBRs9tBWDyAsAGJqcwqQXzs75GI+EphXN6evI=@vger.kernel.org X-Gm-Message-State: AOJu0Ywpab9Aeo3qfyUJ+C7q1MU76zT7rNHv3qqZFJA4wCZi/qYOr+nB lTI6Zu+smu2UJe3S+BBHbWgu1v4nKMYG55kZ3toU6E1Kka0knEaxrN4kAPKdtmhQRu7JroUwcEF YqtXNomKkJOu2RuwsOEZWgO2v4mXLGq8yHF89v9rDidZO+ILvyfk422SkvAV26qSGI09L8wDCme S4QN3aS+mAZKgkaE+2p1AuW1x1aRVuRDJRikzRyXD7fWO3af4pbjvvIM9umPojgcW3VbTmtSTIb vslKAKRfDrSwfL4 X-Gm-Gg: AY/fxX6aRGONklBA0ZgwOlt4W4hmO8Vygjfi3IbcsVoMOGf+pYFBjgHihmJ65+D3C1N 79RSiv+p/jpKNubleBdJG4tz59tL5eTAasj2KtyjfnqX5gwDvnLWUEHLUWDz8C5MazVrQkFP/AR ThyKHxiPeQkfeefGJxz43T3K5F9UYakLMNKIIKSmm148pq/5Up9ievhByvmnp7nGSnzJaLQLCnM GtVPLZN53OedV5y8PknzFXKkSVTLm0R5pZ0bxSz3zRepAtKfrC/HtFl/rgOUTNxbDqrxBDiBE58 3PpdhG9D3qxHMy0qV7qkW6yJ/TDhHF07NrrmndRgz4qG2XXpDDy3Bg0zpQOneb59Cx/cr2yljje P7PvP4wQW5/36AuBYqonieAOezmicuTwugOYM8kleVio2nevdF6oS9gZOC+KXjrDhycz4GDYnLZ Whwdg1HJlOdoEGhPVaWwXj48xgAMO/DKi6ngNbRa4X6WCh X-Google-Smtp-Source: AGHT+IEMvlzG9R3PHA5dbD6iuwYeYaeVli3bfT1odqM84Jt4W6gq1LPz8weoEmJv6xk75Qmm+gSMCWMQ3x+N X-Received: by 2002:a17:90b:3d0d:b0:32e:38b0:15f4 with SMTP id 98e67ed59e1d1-34e9212f34cmr29870513a91.7.1767045569133; Mon, 29 Dec 2025 13:59:29 -0800 (PST) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-117.dlp.protect.broadcom.com. [144.49.247.117]) by smtp-relay.gmail.com with ESMTPS id 41be03b00d2f7-c1e79617ef3sm1810855a12.3.2025.12.29.13.59.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Dec 2025 13:59:29 -0800 (PST) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-8888447ffebso226215426d6.1 for ; Mon, 29 Dec 2025 13:59:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1767045565; x=1767650365; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=twseZy54c+QB1Kjp/hds53EAQKHotDuR3NVPADpEAm0=; b=Jb9dfM8nfGi+WctiF4ug3SKDmmcIgrlL35Q2MweQbQCpNyksRXklAo8bUfu5hVztwb SkTpfcZVeYqMngJBgDvuAos9nAfRyfjghh7Jn63bl4H+XOWJM/60O2RY8TIt9o0HICUr 1dif5JnCHdRuZsJmaKBVaSzR4/Hk3WDPYRwnY= X-Forwarded-Encrypted: i=1; AJvYcCU6OVPKhRYVxOOpPIAUhQ8x0U29dI8SSSD7zJbdtgH0JSfNPh9TCpmYQv8/Jv5ZIffDYeDxLXrwf1zC+ZM=@vger.kernel.org X-Received: by 2002:a05:6214:1d26:b0:890:2480:f027 with SMTP id 6a1803df08f44-8902480f3d0mr64568786d6.27.1767045565042; Mon, 29 Dec 2025 13:59:25 -0800 (PST) X-Received: by 2002:a05:6214:1d26:b0:890:2480:f027 with SMTP id 6a1803df08f44-8902480f3d0mr64568576d6.27.1767045564676; Mon, 29 Dec 2025 13:59:24 -0800 (PST) Received: from localhost.localdomain (pool-173-49-113-140.phlapa.fios.verizon.net. [173.49.113.140]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-88d9759f164sm231530026d6.24.2025.12.29.13.59.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 13:59:22 -0800 (PST) From: Zack Rusin To: dri-devel@lists.freedesktop.org Cc: David Airlie , Gerd Hoffmann , Dmitry Osipenko , Gurchetan Singh , Chia-I Wu , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Simona Vetter , virtualization@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 05/12] drm/virtio: Add sysfb restore on probe failure Date: Mon, 29 Dec 2025 16:58:11 -0500 Message-ID: <20251229215906.3688205-6-zack.rusin@broadcom.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251229215906.3688205-1-zack.rusin@broadcom.com> References: <20251229215906.3688205-1-zack.rusin@broadcom.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Register a devm action on the virtio device to restore the system framebuffer (efifb/simpledrm) if the driver's probe fails after removing the firmware framebuffer. Unlike PCI drivers, virtio-gpu cannot use the devm_aperture_remove_conflicting_pci_devices() helper because the PCI device is managed by the virtio-pci driver, not by virtio-gpu. When virtio-gpu probe fails, the PCI device remains bound to virtio-pci, so devm actions registered on the PCI device won't fire. Instead, register the sysfb restore action on the virtio device (&vdev->dev) which will be released if virtio-gpu probe fails. Cancel the action after successful probe since the driver is now responsible for display output. This only applies to VGA devices where aperture_remove_conflicting_pci_devi= ces() is called to remove the firmware framebuffer. Signed-off-by: Zack Rusin Cc: David Airlie Cc: Gerd Hoffmann Cc: Dmitry Osipenko Cc: Gurchetan Singh Cc: Chia-I Wu Cc: Maarten Lankhorst Cc: Maxime Ripard Cc: Thomas Zimmermann Cc: Simona Vetter Cc: dri-devel@lists.freedesktop.org Cc: virtualization@lists.linux.dev Cc: linux-kernel@vger.kernel.org Acked-by: Dmitry Osipenko --- drivers/gpu/drm/virtio/virtgpu_drv.c | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/= virtgpu_drv.c index a5ce96fb8a1d..13cc8396fc78 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.c +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include =20 @@ -52,6 +53,11 @@ static int virtio_gpu_modeset =3D -1; MODULE_PARM_DESC(modeset, "Disable/Enable modesetting"); module_param_named(modeset, virtio_gpu_modeset, int, 0400); =20 +static void virtio_gpu_restore_sysfb(void *unused) +{ + sysfb_restore(); +} + static int virtio_gpu_pci_quirk(struct drm_device *dev) { struct pci_dev *pdev =3D to_pci_dev(dev->dev); @@ -75,6 +81,7 @@ static int virtio_gpu_probe(struct virtio_device *vdev) { struct drm_device *dev; int ret; + bool sysfb_restore_registered =3D false; =20 if (drm_firmware_drivers_only() && virtio_gpu_modeset =3D=3D -1) return -EINVAL; @@ -97,6 +104,21 @@ static int virtio_gpu_probe(struct virtio_device *vdev) ret =3D virtio_gpu_pci_quirk(dev); if (ret) goto err_free; + + /* + * For VGA devices, register sysfb restore on the virtio device. + * We can't use devm_aperture_remove_conflicting_pci_devices() + * because the PCI device is managed by virtio-pci, not us. + * Register on &vdev->dev so it fires if our probe fails. + */ + if (pci_is_vga(to_pci_dev(vdev->dev.parent))) { + ret =3D devm_add_action_or_reset(&vdev->dev, + virtio_gpu_restore_sysfb, + NULL); + if (ret) + goto err_free; + sysfb_restore_registered =3D true; + } } =20 dma_set_max_seg_size(dev->dev, dma_max_mapping_size(dev->dev) ?: UINT_MAX= ); @@ -110,6 +132,13 @@ static int virtio_gpu_probe(struct virtio_device *vdev) =20 drm_client_setup(vdev->priv, NULL); =20 + /* + * Probe succeeded - cancel sysfb restore. We're now responsible + * for display output. + */ + if (sysfb_restore_registered) + devm_remove_action(&vdev->dev, virtio_gpu_restore_sysfb, NULL); + return 0; =20 err_deinit: --=20 2.48.1