93 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Copyright © 2020 Intel Corporation4 */5 6#ifndef __I915_DRM_CLIENT_H__7#define __I915_DRM_CLIENT_H__8 9#include <linux/kref.h>10#include <linux/list.h>11#include <linux/spinlock.h>12 13#include <uapi/drm/i915_drm.h>14 15#include "i915_file_private.h"16#include "gem/i915_gem_object_types.h"17#include "gt/intel_context_types.h"18 19#define I915_LAST_UABI_ENGINE_CLASS I915_ENGINE_CLASS_COMPUTE20 21struct drm_file;22struct drm_printer;23 24struct i915_drm_client {25 struct kref kref;26 27 spinlock_t ctx_lock; /* For add/remove from ctx_list. */28 struct list_head ctx_list; /* List of contexts belonging to client. */29 30#ifdef CONFIG_PROC_FS31 /**32 * @objects_lock: lock protecting @objects_list33 */34 spinlock_t objects_lock;35 36 /**37 * @objects_list: list of objects created by this client38 *39 * Protected by @objects_lock.40 */41 struct list_head objects_list;42#endif43 44 /**45 * @past_runtime: Accumulation of pphwsp runtimes from closed contexts.46 */47 atomic64_t past_runtime[I915_LAST_UABI_ENGINE_CLASS + 1];48};49 50static inline struct i915_drm_client *51i915_drm_client_get(struct i915_drm_client *client)52{53 kref_get(&client->kref);54 return client;55}56 57void __i915_drm_client_free(struct kref *kref);58 59static inline void i915_drm_client_put(struct i915_drm_client *client)60{61 kref_put(&client->kref, __i915_drm_client_free);62}63 64struct i915_drm_client *i915_drm_client_alloc(void);65 66void i915_drm_client_fdinfo(struct drm_printer *p, struct drm_file *file);67 68#ifdef CONFIG_PROC_FS69void i915_drm_client_add_object(struct i915_drm_client *client,70 struct drm_i915_gem_object *obj);71void i915_drm_client_remove_object(struct drm_i915_gem_object *obj);72void i915_drm_client_add_context_objects(struct i915_drm_client *client,73 struct intel_context *ce);74#else75static inline void i915_drm_client_add_object(struct i915_drm_client *client,76 struct drm_i915_gem_object *obj)77{78}79 80static inline void81i915_drm_client_remove_object(struct drm_i915_gem_object *obj)82{83}84 85static inline void86i915_drm_client_add_context_objects(struct i915_drm_client *client,87 struct intel_context *ce)88{89}90#endif91 92#endif /* !__I915_DRM_CLIENT_H__ */93