mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
![Chris Wilson](/assets/img/avatar_default.png)
By placing our idle-barriers in the i915_active fence tree, we expose those for reuse by other components that are issuing requests along the kernel_context. Reusing the proto-barrier active_node is perfectly fine as the new request implies a context-switch, and so an opportune point to run the idle-barrier. However, the proto-barrier is not equivalent to a normal active_node and care must be taken to avoid dereferencing the ERR_PTR used as its request marker. v2: Comment the more egregious cheek v3: A glossary! Reported-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Fixes:ce476c80b8
("drm/i915: Keep contexts pinned until after the next kernel context switch") Fixes:a9877da2d6
("drm/i915/oa: Reconfigure contexts on the fly") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190802100015.1281-1-chris@chris-wilson.co.uk
48 lines
960 B
C
48 lines
960 B
C
/*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _I915_ACTIVE_TYPES_H_
|
|
#define _I915_ACTIVE_TYPES_H_
|
|
|
|
#include <linux/atomic.h>
|
|
#include <linux/llist.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/rbtree.h>
|
|
#include <linux/rcupdate.h>
|
|
|
|
struct drm_i915_private;
|
|
struct i915_active_request;
|
|
struct i915_request;
|
|
|
|
typedef void (*i915_active_retire_fn)(struct i915_active_request *,
|
|
struct i915_request *);
|
|
|
|
struct i915_active_request {
|
|
struct i915_request __rcu *request;
|
|
struct list_head link;
|
|
i915_active_retire_fn retire;
|
|
};
|
|
|
|
struct active_node;
|
|
|
|
struct i915_active {
|
|
struct drm_i915_private *i915;
|
|
|
|
struct active_node *cache;
|
|
struct rb_root tree;
|
|
struct mutex mutex;
|
|
atomic_t count;
|
|
|
|
unsigned long flags;
|
|
#define I915_ACTIVE_GRAB_BIT 0
|
|
|
|
int (*active)(struct i915_active *ref);
|
|
void (*retire)(struct i915_active *ref);
|
|
|
|
struct llist_head preallocated_barriers;
|
|
};
|
|
|
|
#endif /* _I915_ACTIVE_TYPES_H_ */
|