From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.128.176 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794361055; b=yRiGjimKbIhfCj/5i8bDRaOpCG9BDSuBVeT7Q4/ERw20E9x5oF48FuhMcDhclRa6Mydd uM2995ccCy0d+fLqNyhOIT7a4zrDNRyPMCsFI9CKg5Txq2UTdko4BDc1psoYMZ/2adiTm ZEhvV5VMnZISNI9GPP4S8ywQqgau3C655YlMo4FiLvUOA6ukQFRwsHRFtf3JTPJA/Mu+q eOYZXxI4/KnkJAj1shaqjia1hAg7cNwn+U6RjhSrU5f4RaEdNgY1xKBa7qCPmm2o4zFFx +xNjg4ceplRW7V/ykDgDn20kR/9mk6HL6sHWC8NfBrSt2ZAaCOrXPDa53ZOqaczLxmQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794361055; h=DMARC-Filter:Received:X-Google-DKIM-Signature:X-Forwarded-Encrypted: X-Gm-Message-State:X-Gm-Gg:X-Received:Received:From:Date:Subject: MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id: X-B4-Tracking:X-Change-ID:To:Cc:X-Mailer; bh=Vcp5eI8JJb1RnVVTP7/VW38KUPuSkqgudGy8DfnBQ6o=; b=sf5b4zjQOUBvlsEwUbwAsvEDS/upHAaLWAZara4S0u4L/YLu8A0MdTgkvfz94I1zXwB2 6kYraxgI3eZ/L5Jrr0NGN80sgj9d1MuxPet0qLwhekpOTCTPU9xCgapPA4DMIgQn9JToe YmIzsa8V7PiItarEEYX/tegxQcwkQrPOGuEDdbnEV66SXaLkEhoKOFs5aUoIlrH1A6VcP GWj83IHLESI/KaqeKJLEF/kwfaolXK08YxRO2BYGYDuDsoMYHFD9HrP49xedthhhfCj/h AC3RACe/Ehk0MNv64UxM2Tmxyl2imnpsmY3hJ6N0Vd6XUwgWPrFsK3VjUVeicEBeVYw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none header.from=telaak.dev; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.remote-ip=209.85.128.176 Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com [209.85.128.176]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C98B9606A324 for ; Wed, 11 Nov 2026 01:37:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org C98B9606A324 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=telaak.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-8b2d14968c9so30294577b3.0 for ; Tue, 10 Nov 2026 17:37:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794361054; x=1794965854; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=Vcp5eI8JJb1RnVVTP7/VW38KUPuSkqgudGy8DfnBQ6o=; b=IecfsQAwzdZVjUKusfHNDdm+y3dG7IPN5bMlEv/zzu/jsVBbQYb1WeEfC+zlbLuazk KW7sWYHKN9qiSvDsMVaaDCMhgsfNyXYXfGzlbmHW3mKyoY2xloq53rD8E72GXmL27j/v saAzIYzlBRVXcEvkYlINgOtc+muSe86xer6mUHqBCApcUwnfdt+wzzrDID+x8+pMdGtq dTcnIHi3SzuFeyf2073cr9OwVVGCx6SdjK8NFzwBS5nmsm7YRHB2W52B4NFuHOVDN5jz WxrTQiiPdq+LkSsooj6zzGjL9xEP0+egBzkgPBBSRrK1ollZc/YSFg2bqD6Dm6vp54uj AKcg== X-Forwarded-Encrypted: i=1; AL+hErHiALCk2CWyCOErOQrqtb8XrWDt4Ntu4aROjJmhTX0H59iwms2I+MNR2z3q/tgw2LaxiNre78b/f/Nwn30=@vger.kernel.org X-Gm-Message-State: APuU4Z9ttnEE4Kd0BwjaePf+qD3PS/EQwWeuBqjKV6r7Td/8WsmSkD9a eKVZWemLZtezpFyVe8SLvDjvPekCYZE/uGsNS+4zFNQitT7c8sGou+zHM90iBIe4q4U= X-Gm-Gg: AYBFou0cBT/TSa0XNfeNtKdb8u3ugF8R3afcmMZdC7iKI8J0KCWhNrKG5rZwAtbvLIw 0NZRxbU2ZgFo3s21tSO+ttrF9yRQVPjbemcyLN/A+NzaIsJF1uNjrE1rAujwG145ZOz1jNmpA4t H7/pMg1ryPjBFpg/x3jSxvupqCuxMYqVQvahr7W3qrEKv/iI4CZ0jgZGzJifWyF4zk1u7ZAZh82 nP/LJ/Odo60gx/VA48YLOBMm9weSmZOFX93PyPfDpQpxEBF3QPoGag2I8qpk+WVpkiuMyeIDP/s iEs7v8Z2GfWWeJPJaxY2rO3UImg3cd+LjIcZU1YBVxTGxrV+aP3Z1QI/gntQZBuVNJ+ytRjiWNL Utu+Xgb3lh7moUAWtJsJChRJo+KEzsGUQ85DiqaUC8OMjQHXfxMaFuriWDnAEp9G8uTmVmJi+aj HBJr+jf8rN9LJJQmURGgcxS/PAlPcFfB3GT2L3y7e/DrNC5v9ums8xaWPPv+Vwu1Ru7ZoxsNf9+ kTl509duwQIhQjLfGxVZ1XI2SKO4/axM5afCWD9dPUAmWMa2wkFBUClezOe0B4BB3moppp2Jrk2 xPEE04LZUSHA406XgHt1YMORRfXIc8AVm9TI+M0fRJFNW5G/e+CbY5H0D4L7sm64BRoPXHP9D1X Zky64OIkQByaGzgyhMA2owPEs6ibMM2OW1ivV5j6y+2Qi7+jmr6LOuLEhyJEHa5Z9Y3YJx9FGxg kfRUve3LFYIjKMm0kV56yuZjrC X-Received: by 2002:a05:690c:82:b0:8b3:5eaf:29fc with SMTP id 00721157ae682-8b3a80632fcmr7901627b3.27.1794361053615; Tue, 10 Nov 2026 17:37:33 -0800 (PST) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa ([71.68.170.161]) by smtp.gmail.com with ESMTPSA id 00721157ae682-8b39324ba4fsm33625677b3.4.2026.11.10.17.37.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Nov 2026 17:37:32 -0800 (PST) From: Joseph Telaak Date: Tue, 10 Nov 2026 20:37:11 -0500 Subject: [PATCH RFC] drm/sysfb: Copy damage outside the DIRTYFB ioctl X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261110-sysfb-dirtyfb-v1-1-8571d455ccbe@telaak.dev> X-B4-Tracking: v=1; b=H4sIAAAAAAAA/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDIzNDQ0MD3eLK4rQk3ZTMopJKIJ2UmpJoaJCWmGRmYKQE1FNQlJqWWQE2L1o pyM1ZKRYiWFyalJWaXAIySam2FgAGuYcydgAAAA== X-Change-ID: 20261110-sysfb-dirtyfb-beda10fab602 To: Thomas Zimmermann , Javier Martinez Canillas Cc: Maarten Lankhorst , Maxime Ripard , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Joseph Telaak X-Mailer: b4 0.16.0 The sysfb drivers implement DIRTYFB with drm_atomic_helper_dirtyfb(), which runs a blocking commit. The commit waits for the framebuffer's fences, so the ioctl doesn't return until the GPU has finished rendering into the framebuffer. Xorg's modesetting driver calls DIRTYFB from its main thread after every frame. When a separate GPU renders for a sysfb display, X then blocks for as long as the GPU takes to render the client's frame. With a game running, X took a median of 1.85 s to answer a pointer query. Queue the damage instead and copy it from a worker. The worker still waits for the fences, so nothing unfinished reaches the screen, and damage that arrives while a copy is pending is merged into it. With this change, X answers in a median of 23 ms and the game's frame rate is unchanged. Signed-off-by: Joseph Telaak --- This is an RFC because I'm not sure DIRTYFB may return before the copy is done. The fbdev emulation already defers its damage to a worker, but userspace might rely on DIRTYFB being synchronous. If the approach is fine, would you rather have it as a nonblocking mode of drm_atomic_helper_dirtyfb() for all drivers instead of in sysfb? I hit this on an Intel Atom CE5300 board, where simpledrm drives the display and the SoC's PowerVR SGX545 GPU renders with a driver I'm writing (not upstream yet). I haven't reproduced it with an upstream GPU driver, but nothing in the stall is specific to the GPU. --- drivers/gpu/drm/sysfb/corebootdrm.c | 3 + drivers/gpu/drm/sysfb/drm_sysfb_helper.h | 15 ++- drivers/gpu/drm/sysfb/drm_sysfb_modeset.c | 154 ++++++++++++++++++++++++++++++ drivers/gpu/drm/sysfb/efidrm.c | 3 + drivers/gpu/drm/sysfb/ofdrm.c | 3 + drivers/gpu/drm/sysfb/simpledrm.c | 3 + drivers/gpu/drm/sysfb/vesadrm.c | 3 + 7 files changed, 183 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/sysfb/corebootdrm.c b/drivers/gpu/drm/sysfb/corebootdrm.c index 853da9a..4ca359b 100644 --- a/drivers/gpu/drm/sysfb/corebootdrm.c +++ b/drivers/gpu/drm/sysfb/corebootdrm.c @@ -206,6 +206,9 @@ static int corebootdrm_mode_config_init(struct corebootdrm_device *cdev, int ret; ret = drmm_mode_config_init(dev); + if (ret) + return ret; + ret = drm_sysfb_damage_init(sysfb); if (ret) return ret; diff --git a/drivers/gpu/drm/sysfb/drm_sysfb_helper.h b/drivers/gpu/drm/sysfb/drm_sysfb_helper.h index 6dab27b..59c4064 100644 --- a/drivers/gpu/drm/sysfb/drm_sysfb_helper.h +++ b/drivers/gpu/drm/sysfb/drm_sysfb_helper.h @@ -5,6 +5,8 @@ #include #include +#include +#include #include