cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

i915_drm_client.h (1535B)


      1/* SPDX-License-Identifier: MIT */
      2/*
      3 * Copyright © 2020 Intel Corporation
      4 */
      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#include <linux/xarray.h>
     13
     14#include "gt/intel_engine_types.h"
     15
     16#define I915_LAST_UABI_ENGINE_CLASS I915_ENGINE_CLASS_COMPUTE
     17
     18struct drm_i915_private;
     19
     20struct i915_drm_clients {
     21	struct drm_i915_private *i915;
     22
     23	struct xarray xarray;
     24	u32 next_id;
     25};
     26
     27struct i915_drm_client {
     28	struct kref kref;
     29
     30	unsigned int id;
     31
     32	spinlock_t ctx_lock; /* For add/remove from ctx_list. */
     33	struct list_head ctx_list; /* List of contexts belonging to client. */
     34
     35	struct i915_drm_clients *clients;
     36
     37	/**
     38	 * @past_runtime: Accumulation of pphwsp runtimes from closed contexts.
     39	 */
     40	atomic64_t past_runtime[I915_LAST_UABI_ENGINE_CLASS + 1];
     41};
     42
     43void i915_drm_clients_init(struct i915_drm_clients *clients,
     44			   struct drm_i915_private *i915);
     45
     46static inline struct i915_drm_client *
     47i915_drm_client_get(struct i915_drm_client *client)
     48{
     49	kref_get(&client->kref);
     50	return client;
     51}
     52
     53void __i915_drm_client_free(struct kref *kref);
     54
     55static inline void i915_drm_client_put(struct i915_drm_client *client)
     56{
     57	kref_put(&client->kref, __i915_drm_client_free);
     58}
     59
     60struct i915_drm_client *i915_drm_client_add(struct i915_drm_clients *clients);
     61
     62#ifdef CONFIG_PROC_FS
     63void i915_drm_client_fdinfo(struct seq_file *m, struct file *f);
     64#endif
     65
     66void i915_drm_clients_fini(struct i915_drm_clients *clients);
     67
     68#endif /* !__I915_DRM_CLIENT_H__ */