mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-08-27 10:34:13 +00:00

In order to show per client memory consumption, we need tracking support APIs to add at every bo consumption and removal. Adding APIs here to add tracking calls at places wherever it is applicable. V5: - Rebase V4: - remove client bo before vm_put - spin_lock_irqsave not required - Auld V3: - update .h to return xe_drm_client_remove_bo void - protect xe_drm_client_remove_bo under CONFIG_PROC_FS check - Himal - Fixed Checkpatch error - CI V2: - make xe_drm_client_remove_bo return void - Himal Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2023 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _XE_DRM_CLIENT_H_
|
|
#define _XE_DRM_CLIENT_H_
|
|
|
|
#include <linux/kref.h>
|
|
#include <linux/list.h>
|
|
#include <linux/pid.h>
|
|
#include <linux/rcupdate.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/spinlock.h>
|
|
|
|
struct drm_file;
|
|
struct drm_printer;
|
|
struct xe_bo;
|
|
|
|
struct xe_drm_client {
|
|
struct kref kref;
|
|
unsigned int id;
|
|
#ifdef CONFIG_PROC_FS
|
|
/**
|
|
* @bos_lock: lock protecting @bos_list
|
|
*/
|
|
spinlock_t bos_lock;
|
|
/**
|
|
* @bos_list: list of bos created by this client
|
|
*
|
|
* Protected by @bos_lock.
|
|
*/
|
|
struct list_head bos_list;
|
|
#endif
|
|
};
|
|
|
|
static inline struct xe_drm_client *
|
|
xe_drm_client_get(struct xe_drm_client *client)
|
|
{
|
|
kref_get(&client->kref);
|
|
return client;
|
|
}
|
|
|
|
void __xe_drm_client_free(struct kref *kref);
|
|
|
|
static inline void xe_drm_client_put(struct xe_drm_client *client)
|
|
{
|
|
kref_put(&client->kref, __xe_drm_client_free);
|
|
}
|
|
|
|
struct xe_drm_client *xe_drm_client_alloc(void);
|
|
static inline struct xe_drm_client *
|
|
xe_drm_client_get(struct xe_drm_client *client);
|
|
static inline void xe_drm_client_put(struct xe_drm_client *client);
|
|
#ifdef CONFIG_PROC_FS
|
|
void xe_drm_client_fdinfo(struct drm_printer *p, struct drm_file *file);
|
|
void xe_drm_client_add_bo(struct xe_drm_client *client,
|
|
struct xe_bo *bo);
|
|
void xe_drm_client_remove_bo(struct xe_bo *bo);
|
|
#else
|
|
static inline void xe_drm_client_add_bo(struct xe_drm_client *client,
|
|
struct xe_bo *bo)
|
|
{
|
|
}
|
|
|
|
static inline void xe_drm_client_remove_bo(struct xe_bo *bo)
|
|
{
|
|
}
|
|
#endif
|
|
#endif
|