1 /* $NetBSD: igt_reset.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $ */ 2 3 /* 4 * SPDX-License-Identifier: MIT 5 * 6 * Copyright 2018 Intel Corporation 7 */ 8 9 #include <sys/cdefs.h> 10 __KERNEL_RCSID(0, "$NetBSD: igt_reset.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $"); 11 12 #include "igt_reset.h" 13 14 #include "gt/intel_engine.h" 15 #include "gt/intel_gt.h" 16 17 #include "../i915_drv.h" 18 19 void igt_global_reset_lock(struct intel_gt *gt) 20 { 21 struct intel_engine_cs *engine; 22 enum intel_engine_id id; 23 24 pr_debug("%s: current gpu_error=%08lx\n", __func__, gt->reset.flags); 25 26 while (test_and_set_bit(I915_RESET_BACKOFF, >->reset.flags)) 27 wait_event(gt->reset.queue, 28 !test_bit(I915_RESET_BACKOFF, >->reset.flags)); 29 30 for_each_engine(engine, gt, id) { 31 while (test_and_set_bit(I915_RESET_ENGINE + id, 32 >->reset.flags)) 33 wait_on_bit(>->reset.flags, I915_RESET_ENGINE + id, 34 TASK_UNINTERRUPTIBLE); 35 } 36 } 37 38 void igt_global_reset_unlock(struct intel_gt *gt) 39 { 40 struct intel_engine_cs *engine; 41 enum intel_engine_id id; 42 43 for_each_engine(engine, gt, id) 44 clear_bit(I915_RESET_ENGINE + id, >->reset.flags); 45 46 clear_bit(I915_RESET_BACKOFF, >->reset.flags); 47 wake_up_all(>->reset.queue); 48 } 49 50 bool igt_force_reset(struct intel_gt *gt) 51 { 52 intel_gt_set_wedged(gt); 53 intel_gt_reset(gt, 0, NULL); 54 55 return !intel_gt_is_wedged(gt); 56 } 57