| 1 | /* |
| 2 | * SPDX-License-Identifier: MIT |
| 3 | * |
| 4 | * Copyright © 2018 Intel Corporation |
| 5 | */ |
| 6 | |
| 7 | #ifndef _I915_PRIOLIST_TYPES_H_ |
| 8 | #define _I915_PRIOLIST_TYPES_H_ |
| 9 | |
| 10 | #include <linux/list.h> |
| 11 | #include <linux/rbtree.h> |
| 12 | |
| 13 | #include <uapi/drm/i915_drm.h> |
| 14 | |
| 15 | enum { |
| 16 | I915_PRIORITY_MIN = I915_CONTEXT_MIN_USER_PRIORITY - 1, |
| 17 | I915_PRIORITY_NORMAL = I915_CONTEXT_DEFAULT_PRIORITY, |
| 18 | I915_PRIORITY_MAX = I915_CONTEXT_MAX_USER_PRIORITY + 1, |
| 19 | |
| 20 | /* A preemptive pulse used to monitor the health of each engine */ |
| 21 | I915_PRIORITY_HEARTBEAT, |
| 22 | |
| 23 | /* Interactive workload, scheduled for immediate pageflipping */ |
| 24 | I915_PRIORITY_DISPLAY, |
| 25 | }; |
| 26 | |
| 27 | /* Smallest priority value that cannot be bumped. */ |
| 28 | #define I915_PRIORITY_INVALID (INT_MIN) |
| 29 | |
| 30 | /* |
| 31 | * Requests containing performance queries must not be preempted by |
| 32 | * another context. They get scheduled with their default priority and |
| 33 | * once they reach the execlist ports we ensure that they stick on the |
| 34 | * HW until finished by pretending that they have maximum priority, |
| 35 | * i.e. nothing can have higher priority and force us to usurp the |
| 36 | * active request. |
| 37 | */ |
| 38 | #define I915_PRIORITY_UNPREEMPTABLE INT_MAX |
| 39 | #define I915_PRIORITY_BARRIER (I915_PRIORITY_UNPREEMPTABLE - 1) |
| 40 | |
| 41 | struct i915_priolist { |
| 42 | struct list_head requests; |
| 43 | struct rb_node node; |
| 44 | int priority; |
| 45 | }; |
| 46 | |
| 47 | #endif /* _I915_PRIOLIST_TYPES_H_ */ |
| 48 | |