1 /* SPDX-License-Identifier: MIT */
3 * Copyright © 2020 Intel Corporation
6 #ifndef __I915_DRM_CLIENT_H__
7 #define __I915_DRM_CLIENT_H__
9 #include <linux/kref.h>
10 #include <linux/list.h>
11 #include <linux/spinlock.h>
12 #include <linux/xarray.h>
14 #include <uapi/drm/i915_drm.h>
16 #define I915_LAST_UABI_ENGINE_CLASS I915_ENGINE_CLASS_COMPUTE
18 struct drm_i915_private;
20 struct i915_drm_clients {
21 struct drm_i915_private *i915;
27 struct i915_drm_client {
32 spinlock_t ctx_lock; /* For add/remove from ctx_list. */
33 struct list_head ctx_list; /* List of contexts belonging to client. */
35 struct i915_drm_clients *clients;
38 * @past_runtime: Accumulation of pphwsp runtimes from closed contexts.
40 atomic64_t past_runtime[I915_LAST_UABI_ENGINE_CLASS + 1];
43 void i915_drm_clients_init(struct i915_drm_clients *clients,
44 struct drm_i915_private *i915);
46 static inline struct i915_drm_client *
47 i915_drm_client_get(struct i915_drm_client *client)
49 kref_get(&client->kref);
53 void __i915_drm_client_free(struct kref *kref);
55 static inline void i915_drm_client_put(struct i915_drm_client *client)
57 kref_put(&client->kref, __i915_drm_client_free);
60 struct i915_drm_client *i915_drm_client_add(struct i915_drm_clients *clients);
63 void i915_drm_client_fdinfo(struct seq_file *m, struct file *f);
66 void i915_drm_clients_fini(struct i915_drm_clients *clients);
68 #endif /* !__I915_DRM_CLIENT_H__ */