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 30E97CCD190 for ; Wed, 8 Oct 2025 21:45:49 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C5D9F10E8F8; Wed, 8 Oct 2025 21:45:48 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="Q7MGh9wu"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7159610E89B for ; Wed, 8 Oct 2025 21:45:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1759959941; x=1791495941; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=xf/V92XwtRk1SA2w74BRoAP1Cioc4CR0QnEpxaomIuY=; b=Q7MGh9wuZ5XYgc9AYKrfNO3I+vixJpSocgMNci4uKt9Ju29P9INLvt+M joDra9/mWCWMWYNLVXkopJNDz1xQM/dqhzlbdbGWXKVyr6AltglhU+83K gDLrRzzomuQu5qL12CQgcbCDwrSexK7wWwdREFS7cTnIExIkrZ5dAdJuk MoGO93w0MfYg6pcJZgyuyzIQlexvm8edMHuCKCBaj2MIvI2+ssQj2dEtP pPyZdkpSxGOZPyR1GiviEsjM1lS8CCP8kn7Qsyc3e48uHR88eaAnm4nz8 YUE3pCd2lED0iGK9wZlpJ6lWzS9vp6mDCDXjCpP5wkOqqs+RvunolKQ4f A==; X-CSE-ConnectionGUID: VBQi+mYeRYacDGvHvA8Bpw== X-CSE-MsgGUID: QwixMih1SZmCIJ4BIbBSzA== X-IronPort-AV: E=McAfee;i="6800,10657,11576"; a="49726848" X-IronPort-AV: E=Sophos;i="6.19,214,1754982000"; d="scan'208";a="49726848" Received: from orviesa001.jf.intel.com ([10.64.159.141]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Oct 2025 14:45:40 -0700 X-CSE-ConnectionGUID: eEhHiO6ITgqgSfx6mXaymQ== X-CSE-MsgGUID: i+JWt5N5T4+HURRPt/VY3w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,214,1754982000"; d="scan'208";a="217635185" Received: from lstrano-desk.jf.intel.com ([10.54.39.91]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Oct 2025 14:45:36 -0700 From: Matthew Brost To: intel-xe@lists.freedesktop.org Subject: [PATCH v10 06/34] drm/xe: Don't change LRC ring head on job resubmission Date: Wed, 8 Oct 2025 14:45:04 -0700 Message-Id: <20251008214532.3442967-7-matthew.brost@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251008214532.3442967-1-matthew.brost@intel.com> References: <20251008214532.3442967-1-matthew.brost@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" Now that we save the job's head during submission, it's no longer necessary to adjust the LRC ring head during resubmission. Instead, a software-based adjustment of the tail will overwrite the old jobs in place. For some odd reason, adjusting the LRC ring head didn't work on parallel queues, which was causing issues in our CI. v5: - Add comment in guc_exec_queue_start explaning why the function works (Auld) v7: - Only adjust first state on first unsignaled job (Auld) v8: - Break unsignaled job handling to separate patch (Auld) Signed-off-by: Matthew Brost Reviewed-by: Tomasz Lis --- drivers/gpu/drm/xe/xe_guc_submit.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c index 3a534d93505f..d123bdb63369 100644 --- a/drivers/gpu/drm/xe/xe_guc_submit.c +++ b/drivers/gpu/drm/xe/xe_guc_submit.c @@ -2008,11 +2008,25 @@ static void guc_exec_queue_start(struct xe_exec_queue *q) struct xe_gpu_scheduler *sched = &q->guc->sched; if (!exec_queue_killed_or_banned_or_wedged(q)) { + struct xe_sched_job *job = xe_sched_first_pending_job(sched); int i; trace_xe_exec_queue_resubmit(q); - for (i = 0; i < q->width; ++i) - xe_lrc_set_ring_head(q->lrc[i], q->lrc[i]->ring.tail); + if (job) { + for (i = 0; i < q->width; ++i) { + /* + * The GuC context is unregistered at this point + * time, adjusting software ring tail ensures + * jobs are rewritten in original placement, + * adjusting LRC tail ensures the newly loaded + * GuC / contexts only view the LRC tail + * increasing as jobs are written out. + */ + q->lrc[i]->ring.tail = job->ptrs[i].head; + xe_lrc_set_ring_tail(q->lrc[i], + xe_lrc_ring_head(q->lrc[i])); + } + } xe_sched_resubmit_jobs(sched); } -- 2.34.1