From nobody Mon Feb 9 12:15:39 2026 Received: from mail-qv1-f100.google.com (mail-qv1-f100.google.com [209.85.219.100]) (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 5C2AA31062C for ; Mon, 29 Dec 2025 21:59:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.100 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767045584; cv=none; b=UCbRt5dZQsBhhQ5fZslmLE9CGANfO17GvuNLZWDHmmVBli6g5eMDkK1vgSZNqFWnCGsBOQz2BL28mDQxFF1OlrLPNEau9RxBJxtg2IgJb4glnJUXuWRT2d9Pv7CH6TS53Pufj903Fhzngoc6Ajcgzun+2Epf1crkF0H+PdwR1Cs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767045584; c=relaxed/simple; bh=dQpvv6P8rpsc9VhbHXErM++gAE6dp88Qa5WuWmijx9Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=COxyDODF17wV+At7jco/Hq4MI7a8LsCNRFO+OA4Ek6Pc4HEmQ1PJEDyz5w+b9l1rft4MND+82h6Hgx/Un6Is1iG5etEo/O0lgzmImIgoLBampHu2UaDB9/EVZEypekDG4I3XuAillw/FpPavviWadKSF/shBx+9JmRK+fsXnwFc= 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=gDQIf74g; arc=none smtp.client-ip=209.85.219.100 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="gDQIf74g" Received: by mail-qv1-f100.google.com with SMTP id 6a1803df08f44-8888a444300so102285146d6.1 for ; Mon, 29 Dec 2025 13:59:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767045580; x=1767650380; 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=4cjHGpdx5LLmnDfUfy3cg6m+WR+7JCISjjlWlDNw0F4=; b=KX3VPLcp/L/Gh9idporYBKZqcVJVrQ0X/zG17ZRU4xYs2A2GiVNP1jTUAgaGW2FLaq F7X0QCVSIkpssk1PrJLJhmm3Z8u++pel424Rq0C07VRT1Z9sg49pxU0IO9VPy3Mz6vJ9 B/JoKiF0ftt0fiYAydF8xOcJfjdq9vkUwnP32vlgTXKW9lkNCRrDD3ePZRdRS+5JpB1M Nkvv+AmnLR0Qn63R04CwdMeSJRwolqSgOuo69T+U8rnVvuIz/7X/3TJts74fjgOC+pOm ibUfFN3YLIgSkajG0Evblkx3COjdNaL+aSD4hXNnjzHgDBzRRYyachRnokftbAvmNnzr 8e6w== X-Forwarded-Encrypted: i=1; AJvYcCWQ3UbRjKDmzXsZEpaOanD5kZo4JdgGtLaRKYRmsOEJsiE40WRqefDfqQ+F5rm7PQV9rK/9AY2tgt9dhO0=@vger.kernel.org X-Gm-Message-State: AOJu0YwfK6X6YA/j9DiiEBLVjqSWr7MQV08FzIVb5TVIsk6rBaf4hBYf ri2T346Mc0hlHrhevuF9kksnR/91MIVkOzdSB3sN444lYeR4F0deJAhaYDbiSy1tUvEAoQYnEOn Ta8G0pXDYuwwgbrabJyADwsEw5Y9qcLv5sakYSmIqGO08O4Sjg59wZ2A5Lg8DhNQUwv23q0Q4C/ QNIRGdCa+xYB73rKvDpR+qewQzgq0urh2XZ29AklgCY/1jz16Y+of0Sqn1OasdkrtwA6s0rgBRl DsPVMyyIMJvZOG6 X-Gm-Gg: AY/fxX5+DxHYlrXmpn8DTSFN5d0iXBNHN/RCyCzOCWDLDos76EXASEK5DJ4F6NwxX+Z Q18wAYy5GUQ6MhOUIiiCh7FKwLoFN0Tgx3DCKYjb+9SPmtsVrmyO7qZbmtTAWXWWoI1boMVhTAk D554P9BcId+aMOtO/Npb6CizoKDjgn1mwr9YFNgEd42lGtZMCh1Ebq6b9NY+aRR4DILD3Sr0IEn 2+7K6UBfCUa5vulF0nPlUEOd91hF8tVFglBAhr/VFQDX+Zi1nU2/hHvxD8V2IO3hrSGr7UHUR9X qUONCsCk0njlKn+NFYNGBwCMCWnpwSwngd1+57B9u0ON13ed3+clmOeI95UoqGm6icSR5/IkJxR cYUHzd8jVhWL2roAscKcWOCsMazrnL9/SQdtGjuaebJ5otqYLm0PCeBU7VHextGCAQDkuTkKKo8 2n43/5qoiGcOzok1sA3vfjAUDlWAiUPjbNlieNzwgh5UDY X-Google-Smtp-Source: AGHT+IEyGUAHia8nc0YQwTidbTs1ZxZUdWVpoV343Bd288Xe4YJVsM4jAlQj8GSLFy8oOt15RzdG/wWH12sF X-Received: by 2002:a0c:f990:0:b0:880:6719:db40 with SMTP id 6a1803df08f44-88d854e1679mr361695896d6.64.1767045580148; Mon, 29 Dec 2025 13:59:40 -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 6a1803df08f44-88d95889cbasm42509556d6.13.2025.12.29.13.59.39 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Dec 2025 13:59:40 -0800 (PST) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-88a3356a310so266283186d6.3 for ; Mon, 29 Dec 2025 13:59:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1767045579; x=1767650379; 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=4cjHGpdx5LLmnDfUfy3cg6m+WR+7JCISjjlWlDNw0F4=; b=gDQIf74g0f4XN814wGOEeni7K74zctudEumOwUwtDut0irXYw8qeKDbeygAknuCbjW TXPFwcAJhveCNs5mBxBt9XOqkWHPnqycUegmsVGP/0IVTgvWXjUlRARmNSF9neLrlUbf fVA4cOKJgsQW1IvzVSMY0Qa5XLoI3dBhQ4eGg= X-Forwarded-Encrypted: i=1; AJvYcCXoZeetOBWMXran0HERyL8JLu0gPDyCRozMpyRcwNs5iXsX/PyOM6+0jYUUT+EKY+CadzcKI9aDN09Mzsc=@vger.kernel.org X-Received: by 2002:a05:6214:458b:b0:882:437d:282d with SMTP id 6a1803df08f44-88d82de8226mr482656256d6.30.1767045579087; Mon, 29 Dec 2025 13:59:39 -0800 (PST) X-Received: by 2002:a05:6214:458b:b0:882:437d:282d with SMTP id 6a1803df08f44-88d82de8226mr482656146d6.30.1767045578716; Mon, 29 Dec 2025 13:59:38 -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.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Dec 2025 13:59:36 -0800 (PST) From: Zack Rusin To: dri-devel@lists.freedesktop.org Cc: Deepak Rawat , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 09/12] drm/hyperv: Add sysfb restore on probe failure Date: Mon, 29 Dec 2025 16:58:15 -0500 Message-ID: <20251229215906.3688205-10-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 vmbus device to restore the system framebuffer (efifb/simpledrm) if the driver's probe fails after removing the firmware framebuffer. Unlike PCI drivers, hyperv cannot use the devm_aperture_remove_conflicting_pci_devices() helper because this is a vmbus device, not a PCI device. Instead, register the sysfb restore action on the hv device (&hdev->device) which will be released if probe fails. Cancel the action after successful probe since the driver is now responsible for display output. This ensures users don't lose display output if the hyperv driver fails to probe after removing the firmware framebuffer. Signed-off-by: Zack Rusin Cc: Deepak Rawat Cc: Maarten Lankhorst Cc: Maxime Ripard Cc: Thomas Zimmermann Cc: David Airlie Cc: Simona Vetter Cc: linux-hyperv@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org --- drivers/gpu/drm/hyperv/hyperv_drm_drv.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/gpu/drm/hyperv/hyperv_drm_drv.c b/drivers/gpu/drm/hype= rv/hyperv_drm_drv.c index 06b5d96e6eaf..6d66cd243bab 100644 --- a/drivers/gpu/drm/hyperv/hyperv_drm_drv.c +++ b/drivers/gpu/drm/hyperv/hyperv_drm_drv.c @@ -8,6 +8,7 @@ #include #include #include +#include =20 #include #include @@ -102,6 +103,11 @@ static int hyperv_setup_vram(struct hyperv_drm_device = *hv, return ret; } =20 +static void hyperv_restore_sysfb(void *unused) +{ + sysfb_restore(); +} + static int hyperv_vmbus_probe(struct hv_device *hdev, const struct hv_vmbus_device_id *dev_id) { @@ -127,6 +133,17 @@ static int hyperv_vmbus_probe(struct hv_device *hdev, =20 aperture_remove_all_conflicting_devices(hyperv_driver.name); =20 + /* + * Register sysfb restore on the hv device. We can't use + * devm_aperture_remove_conflicting_pci_devices() because this + * is a vmbus device, not a PCI device. Register on &hdev->device + * so it fires if our probe fails after removing firmware FB. + */ + ret =3D devm_add_action_or_reset(&hdev->device, hyperv_restore_sysfb, + NULL); + if (ret) + goto err_vmbus_close; + ret =3D hyperv_setup_vram(hv, hdev); if (ret) goto err_vmbus_close; @@ -152,6 +169,12 @@ static int hyperv_vmbus_probe(struct hv_device *hdev, =20 drm_client_setup(dev, NULL); =20 + /* + * Probe succeeded - cancel sysfb restore. We're now responsible + * for display output. + */ + devm_remove_action(&hdev->device, hyperv_restore_sysfb, NULL); + return 0; =20 err_free_mmio: --=20 2.48.1