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 CC0B7CCA475 for ; Mon, 29 Sep 2025 02:56:32 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8261710E3A4; Mon, 29 Sep 2025 02:56:32 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="DjGWGXhf"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7FEDD10E20C for ; Mon, 29 Sep 2025 02:55:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1759114552; x=1790650552; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=06NSORxwHWferiEi2SDKAuRpcSUaP+aUGjxubpCFxFQ=; b=DjGWGXhfzIb+TpOjL7KRucsD2/m5NZvrMk6woe9vN+ZS4UWPg7Egogqq aDOG8miGsdH3QieCSFw8JU10tCWnOLBetnCbjTgJUHW2sBqdswcEfxqPI a0XBXqhpd8IzjdDt26S1M328wgKrYHUVwiVOi2RD28AIiCXcs16O8NF7c 8tKO2WluIp7qNmDLB3uWfb5q3qmJ7DgYPpYa9IOFjA79X7sTjzaiALCQA 3FN1vfDN35t0yrnh+fpF94VItwT4vS1bkPbEwqcSEviJs5qW2kQFgK/Az 0utzZjBVz4m+SxcmN+h5bXFt6c8jl+ldSqZ4++8A8Bo9Bj8OYBNVciQTn w==; X-CSE-ConnectionGUID: GmWqKHlnRCiszEjqbOXRQQ== X-CSE-MsgGUID: a596R7bRRXW/B7NkKMc36g== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="61398543" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="61398543" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Sep 2025 19:55:52 -0700 X-CSE-ConnectionGUID: kxPxQpYZQt+G2r247MDorg== X-CSE-MsgGUID: N9XAxFhqQgK2jWkeT+59Cw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,300,1751266800"; d="scan'208";a="182529277" Received: from lstrano-desk.jf.intel.com ([10.54.39.91]) by fmviesa005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Sep 2025 19:55:51 -0700 From: Matthew Brost To: intel-xe@lists.freedesktop.org Subject: [PATCH v3 27/36] drm/xe/vf: Abort VF post migration recovery on failure Date: Sun, 28 Sep 2025 19:55:33 -0700 Message-Id: <20250929025542.1486303-28-matthew.brost@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250929025542.1486303-1-matthew.brost@intel.com> References: <20250929025542.1486303-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" If VF post-migration recovery fails, the device is wedged. However, submission queues still need to be enabled for proper cleanup. In such cases, call into the GuC submission backend to restart all queues that were previously paused. v3: - s/Avort/Abort (Tomasz) Signed-off-by: Matthew Brost --- drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 10 ++++++++++ drivers/gpu/drm/xe/xe_guc_submit.c | 20 ++++++++++++++++++++ drivers/gpu/drm/xe/xe_guc_submit.h | 1 + 3 files changed, 31 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c index cb3e9f6e83fa..9f33561b91c6 100644 --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c @@ -1224,6 +1224,15 @@ static void vf_post_migration_kickstart(struct xe_gt *gt) xe_guc_submit_unpause(>->uc.guc); } +static void vf_post_migration_abort(struct xe_gt *gt) +{ + spin_lock_irq(>->sriov.vf.migration.lock); + WRITE_ONCE(gt->sriov.vf.migration.recovery_inprogress, false); + spin_unlock_irq(>->sriov.vf.migration.lock); + + xe_guc_submit_pause_abort(>->uc.guc); +} + static int vf_post_migration_notify_resfix_done(struct xe_gt *gt) { bool skip_resfix = false; @@ -1282,6 +1291,7 @@ static void vf_post_migration_recovery(struct xe_gt *gt) xe_gt_sriov_notice(gt, "migration recovery ended\n"); return; fail: + vf_post_migration_abort(gt); xe_pm_runtime_put(xe); xe_gt_sriov_err(gt, "migration recovery failed (%pe)\n", ERR_PTR(err)); xe_device_declare_wedged(xe); diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c index 9320fe9fbb29..99ea9b3507cd 100644 --- a/drivers/gpu/drm/xe/xe_guc_submit.c +++ b/drivers/gpu/drm/xe/xe_guc_submit.c @@ -2359,6 +2359,26 @@ void xe_guc_submit_unpause(struct xe_guc *guc) wake_up_all(&guc->ct.wq); } +/** + * xe_guc_submit_abort - Abort all paused submission task on given GuC. + * @guc: the &xe_guc struct instance whose scheduler is to be aborted + */ +void xe_guc_submit_pause_abort(struct xe_guc *guc) +{ + struct xe_exec_queue *q; + unsigned long index; + + mutex_lock(&guc->submission_state.lock); + xa_for_each(&guc->submission_state.exec_queue_lookup, index, q) { + struct xe_gpu_scheduler *sched = &q->guc->sched; + + xe_sched_submission_start(sched); + if (exec_queue_killed_or_banned_or_wedged(q)) + xe_guc_exec_queue_trigger_cleanup(q); + } + mutex_unlock(&guc->submission_state.lock); +} + static struct xe_exec_queue * g2h_exec_queue_lookup(struct xe_guc *guc, u32 guc_id) { diff --git a/drivers/gpu/drm/xe/xe_guc_submit.h b/drivers/gpu/drm/xe/xe_guc_submit.h index f535fe3895e5..fe82c317048e 100644 --- a/drivers/gpu/drm/xe/xe_guc_submit.h +++ b/drivers/gpu/drm/xe/xe_guc_submit.h @@ -22,6 +22,7 @@ void xe_guc_submit_stop(struct xe_guc *guc); int xe_guc_submit_start(struct xe_guc *guc); void xe_guc_submit_pause(struct xe_guc *guc); void xe_guc_submit_unpause(struct xe_guc *guc); +void xe_guc_submit_pause_abort(struct xe_guc *guc); void xe_guc_submit_wedge(struct xe_guc *guc); int xe_guc_read_stopped(struct xe_guc *guc); -- 2.34.1