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 D65ECC5AC7A for ; Thu, 6 Aug 2026 22:47:18 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3E23110E3A7; Thu, 6 Aug 2026 22:47:18 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="fCx+WtL9"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B15410E39B for ; Thu, 6 Aug 2026 22:47:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1786056436; x=1817592436; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=3bWLTF67U2FX7nxY+HaLjEd0Mn+fZA1ZljQEKpRyGqY=; b=fCx+WtL9dJNhXCgEMTmcxnzfy24VpUM08RZrgOLbtMsDWLb9+um86Pah wfvdvWyB9VWKzqHaBVYtHV3Lu+BJhOH6a2v10k5atCIVJmsmh38ClExUw snNjnUtz3myO4NvqcBHosyTJLwUql8FD5Fm9BATdHpuhHQAxnHSDwm7iW HdDB6Uva7OdV9nzxVreCWoerzLZHNi6qCE1/b7M9UNZoKJbhxWX4efGzW hpSl6HhA+upV7jWvRmd6vhgrHG9NLJPLB0jUAQplFqs0lvqrOm7K2jv8O fx/qS9TH3J5Xm2+vXh9pRHwsx4HsbrLDjBSLIcqGMfH5396ub6mCxuAPs g==; X-CSE-ConnectionGUID: +ICDesMDRzOWpw4cVakKHw== X-CSE-MsgGUID: mfbsN3BHSMOrxbQtBP1/dg== X-IronPort-AV: E=McAfee;i="6800,10657,11867"; a="86675966" X-IronPort-AV: E=Sophos;i="6.25,209,1779174000"; d="scan'208";a="86675966" Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2026 15:47:16 -0700 X-CSE-ConnectionGUID: Xef7uMMKQc+PZ98wG5NO9g== X-CSE-MsgGUID: OOo5Ea/5QxKYMSa4wL/FhA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,209,1779174000"; d="scan'208";a="258373146" Received: from orsosgc001.jf.intel.com ([10.88.27.185]) by fmviesa010-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2026 15:47:15 -0700 From: Umesh Nerlige Ramappa To: intel-xe@lists.freedesktop.org, Ashutosh Dixit Subject: [PATCH 3/3] drm/xe/xe_oa: Add a lag to the reports that is exported to user Date: Thu, 6 Aug 2026 15:47:06 -0700 Message-ID: <20260806224702.3563031-8-umesh.nerlige.ramappa@intel.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260806224702.3563031-5-umesh.nerlige.ramappa@intel.com> References: <20260806224702.3563031-5-umesh.nerlige.ramappa@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" When running heavy workloads, reading the OA reports too soon does not guarantee that the report has landed in memory. To make sure correct reports are copied to user buffer, only return reports that lag the current HW_TAIL register by 32 reports. This is an empirical number based on a heavy render workload and several test iterations. Signed-off-by: Umesh Nerlige Ramappa --- v2: Fix the LAG logic by using sliding window (Sashiko) v3: Fix checkpatch warning --- drivers/gpu/drm/xe/xe_oa.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c index 5952010e8f51..dc8b402d059a 100644 --- a/drivers/gpu/drm/xe/xe_oa.c +++ b/drivers/gpu/drm/xe/xe_oa.c @@ -224,7 +224,7 @@ static bool mert_wa_14026633728(struct xe_oa_stream *s) static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream) { u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo); - u32 hw_tail, partial_report_size, available; + u32 hw_tail, partial_report_size, available, lag; int report_size = stream->oa_buffer.format->size; unsigned long flags; @@ -234,17 +234,21 @@ static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream) hw_tail -= gtt_offset; /* - * The tail pointer increases in 64 byte (cacheline size), not in report_size + * The hw_tail pointer increases in 64 byte (cacheline size), not in report_size * increments. Also report size may not be a power of 2. Compute potential * partially landed report in OA buffer. */ partial_report_size = xe_oa_circ_diff(stream, hw_tail, stream->oa_buffer.tail); partial_report_size %= report_size; - /* Subtract partial amount off the tail */ + /* Subtract partial amount off the hw_tail */ hw_tail = xe_oa_circ_diff(stream, hw_tail, partial_report_size); - stream->oa_buffer.tail = hw_tail; +#define LAG_REPORTS 32 + lag = xe_oa_circ_diff(stream, hw_tail, stream->oa_buffer.tail); + if (lag > LAG_REPORTS * report_size) + stream->oa_buffer.tail = xe_oa_circ_diff(stream, hw_tail, + LAG_REPORTS * report_size); available = xe_oa_circ_diff(stream, stream->oa_buffer.tail, stream->oa_buffer.head); stream->pollin = available >= stream->wait_num_reports * report_size; -- 2.51.0