From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id C4B8B10E1BD for ; Mon, 7 Aug 2023 03:56:24 +0000 (UTC) From: janga.rahul.kumar@intel.com To: igt-dev@lists.freedesktop.org, ramadevi.gandi@intel.com, janga.rahul.kumar@intel.com Date: Mon, 7 Aug 2023 09:28:04 +0530 Message-Id: <20230807035805.1054349-3-janga.rahul.kumar@intel.com> In-Reply-To: <20230807035805.1054349-1-janga.rahul.kumar@intel.com> References: <20230807035805.1054349-1-janga.rahul.kumar@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [PATCH i-g-t 2/3] lib/xe: Add hang library support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sai.gowtham.ch@intel.com, kunal1.joshi@intel.com Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: From: Janga Rahul Kumar Add helper library support to inject hang batch and clean state post hang. Cc: Sai Gowtham Ch Cc: Kunal Joshi Cc: Kamil Konieczny Cc: Anna Karas Signed-off-by: Janga Rahul Kumar Tested-by: Kunal Joshi --- lib/xe/xe_gt.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/xe/xe_gt.h | 7 +++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/lib/xe/xe_gt.c b/lib/xe/xe_gt.c index 9cad739be..912b1e074 100644 --- a/lib/xe/xe_gt.c +++ b/lib/xe/xe_gt.c @@ -60,3 +60,67 @@ void xe_force_gt_reset_all(int xe_fd) xe_force_gt_reset(xe_fd, gt); } +/** + * xe_hang_ring: + * @fd: open xe drm file descriptor + * @ring: execbuf ring flag + * + * This helper function injects a hanging batch into @ring. It returns a + * #igt_hang_t structure which must be passed to xe_post_hang_ring() for + * hang post-processing (after the gpu hang interaction has been tested. + * + * Returns: + * Structure with helper internal state for xe_post_hang_ring(). + */ +igt_hang_t xe_hang_ring(int fd, uint64_t ahnd, uint32_t ctx, int ring, + unsigned int flags) +{ + uint16_t class; + uint32_t vm; + unsigned int exec_queue; + igt_spin_t *spin_t; + + vm = xe_vm_create(fd, 0, 0); + + switch (ring) { + case I915_EXEC_DEFAULT: + case I915_EXEC_RENDER: + if (IS_PONTEVECCHIO(intel_get_drm_devid(fd))) + class = DRM_XE_ENGINE_CLASS_COPY; + else + class = DRM_XE_ENGINE_CLASS_RENDER; + break; + case I915_EXEC_BLT: + class = DRM_XE_ENGINE_CLASS_COPY; + break; + case I915_EXEC_BSD: + class = DRM_XE_ENGINE_CLASS_VIDEO_DECODE; + break; + case I915_EXEC_VEBOX: + class = DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE; + break; + default: + igt_assert_f(false, "Unknown engine: %x", (uint32_t) flags); + } + + exec_queue = xe_exec_queue_create_class(fd, vm, class); + + spin_t = igt_spin_new(fd, .ahnd = ahnd, .engine = exec_queue, .vm = vm, + .flags = IGT_SPIN_NO_PREEMPTION); + return (igt_hang_t){ spin_t, exec_queue, 0, flags }; +} + +/** + * xe_post_hang_ring: + * @fd: open xe drm file descriptor + * @arg: hang state from xe_hang_ring() + * + * This function does the necessary post-processing after a gpu hang injected + * with xe_hang_ring(). + */ +void xe_post_hang_ring(int fd, igt_hang_t arg) +{ + xe_exec_queue_destroy(fd, arg.ctx); + xe_vm_destroy(fd, arg.spin->vm); +} + diff --git a/lib/xe/xe_gt.h b/lib/xe/xe_gt.h index e075ebf62..26bbe23d4 100644 --- a/lib/xe/xe_gt.h +++ b/lib/xe/xe_gt.h @@ -12,6 +12,9 @@ #include "igt_core.h" #include "igt_sysfs.h" +#include "lib/igt_gt.h" +#include "lib/intel_chipset.h" +#include "xe_spin.h" #include "xe_ioctl.h" #include "xe_query.h" @@ -24,4 +27,6 @@ bool has_xe_gt_reset(int fd); void xe_force_gt_reset_all(int fd); - +igt_hang_t xe_hang_ring(int fd, uint64_t ahnd, uint32_t ctx, int ring, + unsigned int flags); +void xe_post_hang_ring(int fd, igt_hang_t arg); -- 2.25.1