Branch data Line data Source code
1 : : /* 2 : : * SPDX-License-Identifier: MIT 3 : : * 4 : : * Copyright © 2008-2018 Intel Corporation 5 : : */ 6 : : 7 : : #ifndef I915_RESET_H 8 : : #define I915_RESET_H 9 : : 10 : : #include <linux/compiler.h> 11 : : #include <linux/types.h> 12 : : #include <linux/srcu.h> 13 : : 14 : : #include "intel_engine_types.h" 15 : : #include "intel_reset_types.h" 16 : : 17 : : struct i915_request; 18 : : struct intel_engine_cs; 19 : : struct intel_gt; 20 : : struct intel_guc; 21 : : 22 : : void intel_gt_init_reset(struct intel_gt *gt); 23 : : void intel_gt_fini_reset(struct intel_gt *gt); 24 : : 25 : : __printf(4, 5) 26 : : void intel_gt_handle_error(struct intel_gt *gt, 27 : : intel_engine_mask_t engine_mask, 28 : : unsigned long flags, 29 : : const char *fmt, ...); 30 : : #define I915_ERROR_CAPTURE BIT(0) 31 : : 32 : : void intel_gt_reset(struct intel_gt *gt, 33 : : intel_engine_mask_t stalled_mask, 34 : : const char *reason); 35 : : int intel_engine_reset(struct intel_engine_cs *engine, 36 : : const char *reason); 37 : : 38 : : void __i915_request_reset(struct i915_request *rq, bool guilty); 39 : : 40 : : int __must_check intel_gt_reset_trylock(struct intel_gt *gt, int *srcu); 41 : : void intel_gt_reset_unlock(struct intel_gt *gt, int tag); 42 : : 43 : : void intel_gt_set_wedged(struct intel_gt *gt); 44 : : bool intel_gt_unset_wedged(struct intel_gt *gt); 45 : : int intel_gt_terminally_wedged(struct intel_gt *gt); 46 : : 47 : : /* 48 : : * There's no unset_wedged_on_init paired with this one. 49 : : * Once we're wedged on init, there's no going back. 50 : : */ 51 : : void intel_gt_set_wedged_on_init(struct intel_gt *gt); 52 : : 53 : : int __intel_gt_reset(struct intel_gt *gt, intel_engine_mask_t engine_mask); 54 : : 55 : : int intel_reset_guc(struct intel_gt *gt); 56 : : 57 : : struct intel_wedge_me { 58 : : struct delayed_work work; 59 : : struct intel_gt *gt; 60 : : const char *name; 61 : : }; 62 : : 63 : : void __intel_init_wedge(struct intel_wedge_me *w, 64 : : struct intel_gt *gt, 65 : : long timeout, 66 : : const char *name); 67 : : void __intel_fini_wedge(struct intel_wedge_me *w); 68 : : 69 : : #define intel_wedge_on_timeout(W, GT, TIMEOUT) \ 70 : : for (__intel_init_wedge((W), (GT), (TIMEOUT), __func__); \ 71 : : (W)->gt; \ 72 : : __intel_fini_wedge((W))) 73 : : 74 : 0 : static inline bool __intel_reset_failed(const struct intel_reset *reset) 75 : : { 76 : 0 : GEM_BUG_ON(test_bit(I915_WEDGED_ON_INIT, &reset->flags) ? 77 : : !test_bit(I915_WEDGED, &reset->flags) : false); 78 : : 79 [ # # # # : 0 : return unlikely(test_bit(I915_WEDGED, &reset->flags)); # # ] 80 : : } 81 : : 82 : : bool intel_has_gpu_reset(const struct intel_gt *gt); 83 : : bool intel_has_reset_engine(const struct intel_gt *gt); 84 : : 85 : : #endif /* I915_RESET_H */