From mboxrd@z Thu Jan 1 00:00:00 1970 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 D144CCD4F5F for ; Thu, 13 Nov 2025 08:25:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DAEE510E5FF; Thu, 13 Nov 2025 08:25:41 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="Q8yxmXQC"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by gabe.freedesktop.org (Postfix) with ESMTPS id D856610E157; Thu, 13 Nov 2025 08:25:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1763022340; x=1794558340; h=from:to:cc:subject:in-reply-to:references:date: message-id:mime-version; bh=GSJ5a64dynzTRqvvAx14TR4skpSaLs7YUkENENcVnY4=; b=Q8yxmXQCX2fBy2Ov8h201ayWTIk2ucwjD7wrzg8QYQKgdwe9phBScC/2 nkBBqV1FxHdCRQ0TnNaDLK6oKSxUT9phpy6fehXJLT2qVrQJIJgejT1HB wVlK1shekDgyz5kExMEWb3GwvX6Pxykj+dBdI8w3UpG/7bG1RosWFS20Z 89fxF5WpDo8pzBS8G59+Ql+gzhM5Mir6mq/JXKB/r4kECWiBt4OH0zS+U BntTXIIzGqTKLRktva1hPYDmLnkuTfLBYpHtj6XGJx3j+28Gj4gPH8f3M 5+5KBaojoGm4ImDWxCodL8g0B/n+/761J2+FUdHPtRVMFg9YSrJam7hCj A==; X-CSE-ConnectionGUID: 56cK2QzqSGeWXegKWxPDBw== X-CSE-MsgGUID: XQh+v5fTR5mZzVZ+BLy8sw== X-IronPort-AV: E=McAfee;i="6800,10657,11611"; a="90569665" X-IronPort-AV: E=Sophos;i="6.19,301,1754982000"; d="scan'208";a="90569665" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Nov 2025 00:25:39 -0800 X-CSE-ConnectionGUID: Jz+SNo7+QguSy0a0Ohua9Q== X-CSE-MsgGUID: 4sPzZUtdQJKrRd4RcAkCmA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,301,1754982000"; d="scan'208";a="193696788" Received: from aotchere-mobl1.ger.corp.intel.com (HELO localhost) ([10.245.246.135]) by fmviesa005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Nov 2025 00:25:37 -0800 From: Jani Nikula To: Suraj Kandpal , dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: ankit.k.nautiyal@intel.com, arun.r.murthy@intel.com, imre.deak@intel.com, Suraj Kandpal Subject: Re: [PATCH] drm/display/dp_mst: Add protection against 0 vcpi In-Reply-To: <20251113043918.716367-1-suraj.kandpal@intel.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20251113043918.716367-1-suraj.kandpal@intel.com> Date: Thu, 13 Nov 2025 10:25:34 +0200 Message-ID: MIME-Version: 1.0 Content-Type: text/plain 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" On Thu, 13 Nov 2025, Suraj Kandpal wrote: > When releasing a timeslot there is a slight chance we may end up > with the wrong payload mask due to overflow if the delayed_destroy_work > ends up coming into play after a DP 2.1 monitor gets disconnected > which causes vcpi to become 0 then we try to make the payload = > ~BIT(vcpi - 1) which is a negative shift. Is that a real scenario or a hypothetical one? > > Signed-off-by: Suraj Kandpal > --- > drivers/gpu/drm/display/drm_dp_mst_topology.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c > index 64e5c176d5cc..3cf1eafcfcb5 100644 > --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c > +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c > @@ -4531,6 +4531,7 @@ int drm_dp_atomic_release_time_slots(struct drm_atomic_state *state, > struct drm_dp_mst_atomic_payload *payload; > struct drm_connector_state *old_conn_state, *new_conn_state; > bool update_payload = true; > + int bit; > > old_conn_state = drm_atomic_get_old_connector_state(state, port->connector); > if (!old_conn_state->crtc) > @@ -4572,7 +4573,8 @@ int drm_dp_atomic_release_time_slots(struct drm_atomic_state *state, > if (!payload->delete) { > payload->pbn = 0; > payload->delete = true; > - topology_state->payload_mask &= ~BIT(payload->vcpi - 1); > + bit = payload->vcpi ? payload->vcpi - 1 : 0; > + topology_state->payload_mask &= ~BIT(bit); > } > > return 0; -- Jani Nikula, Intel