提交 0f4c524c 编写于 作者: X Xie XiuQi

arm64/mpam: debug: print more useful info for mon_data

hulk inclusion
category: feature
bugzilla: 5510
CVE: NA
Signed-off-by: NXie XiuQi <xiexiuqi@huawei.com>
Reviewed-by: NHanjun Guo <guohanjun@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 b4617397
...@@ -55,6 +55,8 @@ int resctrl_group_schemata_show(struct kernfs_open_file *of, ...@@ -55,6 +55,8 @@ int resctrl_group_schemata_show(struct kernfs_open_file *of,
r < resctrl_resources_all + MPAM_NUM_RESOURCES; \ r < resctrl_resources_all + MPAM_NUM_RESOURCES; \
r++) \ r++) \
int mpam_get_mon_config(struct resctrl_resource *r);
int mkdir_mondata_all(struct kernfs_node *parent_kn, int mkdir_mondata_all(struct kernfs_node *parent_kn,
struct resctrl_group *prgrp, struct resctrl_group *prgrp,
struct kernfs_node **dest_kn); struct kernfs_node **dest_kn);
......
...@@ -338,6 +338,8 @@ static __init bool get_rdt_mon_resources(void) ...@@ -338,6 +338,8 @@ static __init bool get_rdt_mon_resources(void)
{ {
bool ret = true; bool ret = true;
mpam_get_mon_config(&resctrl_resources_all[MPAM_RESOURCE_CACHE]);
mpam_get_mon_config(&resctrl_resources_all[MPAM_RESOURCE_MC]);
return ret; return ret;
} }
......
...@@ -256,7 +256,7 @@ int resctrl_group_schemata_show(struct kernfs_open_file *of, ...@@ -256,7 +256,7 @@ int resctrl_group_schemata_show(struct kernfs_open_file *of,
* use pmg as monitor id * use pmg as monitor id
* just use match_pardid only. * just use match_pardid only.
*/ */
static u64 mbwu_read(struct rdt_domain *d, struct rdtgroup *g) static inline u64 mbwu_read(struct rdt_domain *d, struct rdtgroup *g)
{ {
u32 pmg = g->mon.rmid; u32 pmg = g->mon.rmid;
...@@ -264,7 +264,7 @@ static u64 mbwu_read(struct rdt_domain *d, struct rdtgroup *g) ...@@ -264,7 +264,7 @@ static u64 mbwu_read(struct rdt_domain *d, struct rdtgroup *g)
return mpam_readl(d->base + MSMON_MBWU); return mpam_readl(d->base + MSMON_MBWU);
} }
static u64 csu_read(struct rdt_domain *d, struct rdtgroup *g) static inline u64 csu_read(struct rdt_domain *d, struct rdtgroup *g)
{ {
u32 pmg = g->mon.rmid; u32 pmg = g->mon.rmid;
...@@ -272,23 +272,66 @@ static u64 csu_read(struct rdt_domain *d, struct rdtgroup *g) ...@@ -272,23 +272,66 @@ static u64 csu_read(struct rdt_domain *d, struct rdtgroup *g)
return mpam_readl(d->base + MSMON_CSU); return mpam_readl(d->base + MSMON_CSU);
} }
static inline char *kernfs_node_name(struct kernfs_open_file *of)
{
return (char *)(of ? of->kn->name : NULL);
}
static inline void put_resource_name(char *res)
{
kfree(res);
}
/*
* pick resource name from mon data name
* eg. from mon_L3_01 we got L3
* */
static inline char *get_resource_name(char *name)
{
char *s, *p, *res;
if (!name)
return NULL;
s = name + 4; /* skip "mon_" prefix */
p = strrchr(name, '_');
res = kmemdup_nul(s, p - s, GFP_KERNEL);
if (!res)
res = NULL;
return res;
}
int resctrl_group_mondata_show(struct seq_file *m, void *arg) int resctrl_group_mondata_show(struct seq_file *m, void *arg)
{ {
struct kernfs_open_file *of = m->private; struct kernfs_open_file *of = m->private;
struct rdtgroup *rdtgrp; struct rdtgroup *rdtgrp;
struct rdt_domain *d; struct rdt_domain *d;
int ret = 0; int ret = 0;
char *resname = get_resource_name(kernfs_node_name(of));
if (!resname)
return -ENOMEM;
rdtgrp = resctrl_group_kn_lock_live(of->kn); rdtgrp = resctrl_group_kn_lock_live(of->kn);
d = of->kn->priv; d = of->kn->priv;
if (rdtgrp)
/* for debug */ /* for debug */
seq_printf(m, "group: partid: %d, pmg: %d", seq_printf(m, "resource: %s, group: partid: %d, pmg: %d\n",
rdtgrp->closid, rdtgrp->mon.rmid); resname, rdtgrp->closid, rdtgrp->mon.rmid);
else
seq_printf(m, "resource: %s: need partid and pmg here\n",
resname);
if (d)
seq_printf(m, "domain: id %d: cpu_list %s, base %016llx\n",
d->id, d->cpus_list, (u64)d->base);
/* show monitor data */ /* show monitor data */
put_resource_name(resname);
resctrl_group_kn_unlock(of->kn); resctrl_group_kn_unlock(of->kn);
return ret; return ret;
} }
...@@ -342,10 +385,9 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn, ...@@ -342,10 +385,9 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
#if 1 #if 1
struct kernfs_node *kn; struct kernfs_node *kn;
char name[32]; char name[32];
int ret; int ret = 0;
sprintf(name, "mon_%s_%02d", r->name, d->id); sprintf(name, "mon_%s_%02d", r->name, d->id);
kn = __kernfs_create_file(parent_kn, name, 0444, kn = __kernfs_create_file(parent_kn, name, 0444,
GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, 0, GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, 0,
&kf_mondata_ops, d, NULL, NULL); &kf_mondata_ops, d, NULL, NULL);
...@@ -354,6 +396,7 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn, ...@@ -354,6 +396,7 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
ret = resctrl_group_kn_set_ugid(kn); ret = resctrl_group_kn_set_ugid(kn);
if (ret) { if (ret) {
pr_info("%s: create name %s, error ret %d\n", __func__, name, ret);
kernfs_remove(kn); kernfs_remove(kn);
return ret; return ret;
} }
...@@ -442,10 +485,13 @@ mongroup_create_dir(struct kernfs_node *parent_kn, struct resctrl_group *prgrp, ...@@ -442,10 +485,13 @@ mongroup_create_dir(struct kernfs_node *parent_kn, struct resctrl_group *prgrp,
struct kernfs_node *kn; struct kernfs_node *kn;
int ret; int ret;
pr_info("%s: create dir %s\n", __func__, name);
/* create the directory */ /* create the directory */
kn = kernfs_create_dir(parent_kn, name, parent_kn->mode, prgrp); kn = kernfs_create_dir(parent_kn, name, parent_kn->mode, prgrp);
if (IS_ERR(kn)) if (IS_ERR(kn)) {
pr_info("%s: create dir %s, error\n", __func__, name);
return PTR_ERR(kn); return PTR_ERR(kn);
}
if (dest_kn) if (dest_kn)
*dest_kn = kn; *dest_kn = kn;
......
...@@ -51,8 +51,11 @@ int alloc_pmg(void) ...@@ -51,8 +51,11 @@ int alloc_pmg(void)
{ {
u32 pmg = ffs(pmg_free_map); u32 pmg = ffs(pmg_free_map);
if (pmg == 0) if (pmg == 0) {
pr_info("%s: no pmg available\n");
return -ENOSPC; return -ENOSPC;
}
pmg--; pmg--;
pmg_free_map &= ~(1 << pmg); pmg_free_map &= ~(1 << pmg);
...@@ -79,3 +82,11 @@ void free_rmid(u32 pmg) ...@@ -79,3 +82,11 @@ void free_rmid(u32 pmg)
{ {
free_pmg(pmg); free_pmg(pmg);
} }
int mpam_get_mon_config(struct resctrl_resource *r)
{
r->mon_capable = true;
r->mon_enabled = true;
return 0;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册