From patchwork Wed Feb 19 16:02:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?VmlsbGUgU3lyasOkbMOk?= X-Patchwork-Id: 13982523 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1FF5DC021AA for ; Wed, 19 Feb 2025 16:34:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EF02310E855; Wed, 19 Feb 2025 16:34:10 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="MqpYZSmq"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by gabe.freedesktop.org (Postfix) with ESMTPS id E22F810E159; Wed, 19 Feb 2025 16:34:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1739982849; x=1771518849; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=LZP9spHzBkXi8OevGQHa9oaBE1omnHWKEEy+0ExF+Ns=; b=MqpYZSmqBV8Io7ezxQuw35jGZIa/LiqiLYbqE/l9A20SX5FsajZN4OmK EjmnhMWDDuZ65i0uJwFBp48FdBYDq+0lw4ZxEzxVrSON3lHaUtrIvYsyn sa9qZTXdHwNHiQyC3vTWAZIvsPSykITrqQaoYFhBg3VWzMrzuWf/5grAg mFYwVYaR2tOfOKMk3yjeBu2EA0KOWcEtk9emRPNKxkmw/IGJKuFcMyKpr Zy2IOxxdP7WC0cfz97w5/XJB3cp1RtOWkXbuIi5UlHVdf/l0lgM+5Z0xe EAa+81i+f70YslD2Z5Iv02ZtFkIDStVtd/9PtGh01rcsgIpH1l6oT46tA g==; X-CSE-ConnectionGUID: n8xsrt0KSa63/ycN0aDWDA== X-CSE-MsgGUID: viBY5R/0QKG2qlnp8m9uIQ== X-IronPort-AV: E=McAfee;i="6700,10204,11350"; a="66086988" X-IronPort-AV: E=Sophos;i="6.13,299,1732608000"; d="scan'208";a="66086988" Received: from fmviesa008.fm.intel.com ([10.60.135.148]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2025 08:34:08 -0800 X-CSE-ConnectionGUID: 5PLyzEAaREKK7yvbAcQCLA== X-CSE-MsgGUID: pJK2ghGMQLeK7a2MxJTl/Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,299,1732608000"; d="scan'208";a="114950780" Received: from stinkpipe.fi.intel.com (HELO stinkbox) ([10.237.72.74]) by fmviesa008.fm.intel.com with SMTP; 19 Feb 2025 08:02:43 -0800 Received: by stinkbox (sSMTP sendmail emulation); Wed, 19 Feb 2025 18:02:39 +0200 From: Ville Syrjala To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org Subject: [PATCH] drm/atomic: Filter out redundant DPMS calls Date: Wed, 19 Feb 2025 18:02:39 +0200 Message-ID: <20250219160239.17502-1-ville.syrjala@linux.intel.com> X-Mailer: git-send-email 2.45.3 MIME-Version: 1.0 X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" From: Ville Syrjälä Video players (eg. mpv) do periodic XResetScreenSaver() calls to keep the screen on while the video playing. The modesetting ddx plumbs these straight through into the kernel as DPMS setproperty ioctls, without any filtering whatsoever. When implemented via atomic these end up as full commits on the crtc, which leads to a dropped frame every time XResetScreenSaver() is called. Let's just filter out redundant DPMS property changes in the kernel to avoid this issue. Signed-off-by: Ville Syrjälä Reviewed-by: Simona Vetter --- drivers/gpu/drm/drm_atomic_uapi.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index 2765ba90ad8f..c2726af6698e 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -957,6 +957,10 @@ int drm_atomic_connector_commit_dpms(struct drm_atomic_state *state, if (mode != DRM_MODE_DPMS_ON) mode = DRM_MODE_DPMS_OFF; + + if (connector->dpms == mode) + goto out; + connector->dpms = mode; crtc = connector->state->crtc;