brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 2e7a50d Raw
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