msm_sysstats: define callback to get the kgsl memory stats
Define a callback filled that will be registered by the kgsl driver which will be called by the msm-systats to know about the kgsl allocated memory in the system or for a process. Change-Id: I557213800a73ff73d5852a6db7e655013cf025e1 Signed-off-by: Charan Teja Kalla <quic_charante@quicinc.com>
This commit is contained in:
parent
ab732a554c
commit
ffcc41a593
23
include/linux/msm_sysstats.h
Normal file
23
include/linux/msm_sysstats.h
Normal file
@ -0,0 +1,23 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _MSM_SYSSTATS_H_
|
||||
#define _MSM_SYSSTATS_H_
|
||||
|
||||
#include <uapi/linux/msm_sysstats.h>
|
||||
|
||||
#if IS_ENABLED(CONFIG_MSM_SYSSTATS)
|
||||
extern void sysstats_register_kgsl_stats_cb(u64 (*cb)(pid_t pid));
|
||||
extern void sysstats_unregister_kgsl_stats_cb(void);
|
||||
#else
|
||||
static inline void sysstats_register_kgsl_stats_cb(u64 (*cb)(pid_t pid))
|
||||
{
|
||||
}
|
||||
static inline void sysstats_unregister_kgsl_stats_cb(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#endif /* _MSM_SYSSTATS_H_ */
|
||||
|
@ -27,12 +27,34 @@ struct tgid_iter {
|
||||
|
||||
static struct genl_family family;
|
||||
|
||||
static u64 (*sysstats_kgsl_get_stats)(pid_t pid);
|
||||
|
||||
static DEFINE_PER_CPU(__u32, sysstats_seqnum);
|
||||
#define SYSSTATS_CMD_ATTR_MAX 3
|
||||
static const struct nla_policy sysstats_cmd_get_policy[SYSSTATS_CMD_ATTR_MAX + 1] = {
|
||||
[SYSSTATS_TASK_CMD_ATTR_PID] = { .type = NLA_U32 },
|
||||
[SYSSTATS_TASK_CMD_ATTR_FOREACH] = { .type = NLA_U32 },
|
||||
[SYSSTATS_TASK_CMD_ATTR_PIDS_OF_NAME] = { .type = NLA_NUL_STRING}};
|
||||
/*
|
||||
* The below dummy function is a means to get rid of calling
|
||||
* callbacks with out any external sync.
|
||||
*/
|
||||
static u64 sysstats_kgsl_stats(pid_t pid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sysstats_register_kgsl_stats_cb(u64 (*cb)(pid_t pid))
|
||||
{
|
||||
sysstats_kgsl_get_stats = cb;
|
||||
}
|
||||
EXPORT_SYMBOL(sysstats_register_kgsl_stats_cb);
|
||||
|
||||
void sysstats_unregister_kgsl_stats_cb(void)
|
||||
{
|
||||
sysstats_kgsl_get_stats = sysstats_kgsl_stats;
|
||||
}
|
||||
EXPORT_SYMBOL(sysstats_unregister_kgsl_stats_cb);
|
||||
|
||||
static int sysstats_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
|
||||
struct genl_info *info)
|
||||
@ -191,6 +213,9 @@ static unsigned long get_system_unreclaimble_info(void)
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
/* Account the kgsl information. */
|
||||
size += sysstats_kgsl_get_stats(-1) >> PAGE_SHIFT;
|
||||
|
||||
return size;
|
||||
}
|
||||
static char *nla_strdup_cust(const struct nlattr *nla, gfp_t flags)
|
||||
@ -267,6 +292,8 @@ static int sysstats_task_cmd_attr_pid(struct genl_info *info)
|
||||
task_unlock(p);
|
||||
}
|
||||
|
||||
stats->unreclaimable += sysstats_kgsl_get_stats(stats->pid) >> 10;
|
||||
|
||||
task_cputime(tsk, &utime, &stime);
|
||||
stats->utime = div_u64(utime, NSEC_PER_USEC);
|
||||
stats->stime = div_u64(stime, NSEC_PER_USEC);
|
||||
@ -639,6 +666,7 @@ static int __init sysstats_init(void)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
sysstats_register_kgsl_stats_cb(sysstats_kgsl_stats);
|
||||
pr_info("registered sysstats version %d\n", SYSSTATS_GENL_VERSION);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user