提交 34c0582d 编写于 作者: X Xie XiuQi

arm64/mpam: use 5% as min memory bandwidth

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>
上级 794555b3
......@@ -336,6 +336,7 @@ struct raw_resctrl_resource {
};
int parse_cbm(char *buf, struct raw_resctrl_resource *r, struct rdt_domain *d);
int parse_bw(char *buf, struct raw_resctrl_resource *r, struct rdt_domain *d);
union mon_data_bits {
void *priv;
......
......@@ -207,8 +207,8 @@ struct raw_resctrl_resource raw_resctrl_resources_all[] = {
[MPAM_RESOURCE_MC] = {
.msr_update = bw_wrmsr,
.msr_read = bw_rdmsr,
.parse_ctrlval = parse_cbm, /* [FIXME] add parse_bw() helper */
.format_str = "%d=%0*x",
.parse_ctrlval = parse_bw, /* [FIXME] add parse_bw() helper */
.format_str = "%d=%0*d",
.mon_read = mbwu_read,
.mon_write = mbwu_write,
},
......@@ -270,7 +270,8 @@ u64 bw_rdmsr(struct rdt_domain *d, int partid)
mpam_writel(partid, d->base + MPAMCFG_PART_SEL);
max = mpam_readl(d->base + MPAMCFG_MBW_MAX);
return MBW_MAX_GET(max);
max = MBW_MAX_GET(max);
return roundup((max * 100) / 64, 5);
}
/*
......
......@@ -82,6 +82,68 @@ int parse_cbm(char *buf, struct raw_resctrl_resource *r, struct rdt_domain *d)
return 0;
}
/* define bw_min as 5 percentage, that are 5% ~ 100% which cresponding masks: */
static u32 bw_max_mask[20] = {
3, /* 3/64: 5% */
6, /* 6/64: 10% */
10, /* 10/64: 15% */
13, /* 13/64: 20% */
16, /* 16/64: 25% */
19, /* ... */
22,
26,
29,
32,
35,
38,
42,
45,
48,
51,
54,
58,
61,
63 /* 100% */
};
static bool bw_validate(char *buf, unsigned long *data, struct raw_resctrl_resource *r)
{
unsigned long bw;
int ret, idx;
ret = kstrtoul(buf, 10, &bw);
if (ret) {
rdt_last_cmd_printf("non-hex character in mask %s\n", buf);
return false;
}
bw = bw < 5 ? 5 : bw;
bw = bw > 100 ? 100 : bw;
idx = roundup(bw, 5) / 5 - 1;
*data = bw_max_mask[idx];
return true;
}
int parse_bw(char *buf, struct raw_resctrl_resource *r, struct rdt_domain *d)
{
unsigned long data;
if (d->have_new_ctrl) {
rdt_last_cmd_printf("duplicate domain %d\n", d->id);
return -EINVAL;
}
if (!bw_validate(buf, &data, r))
return -EINVAL;
d->new_ctrl = data;
d->have_new_ctrl = true;
return 0;
}
/*
* For each domain in this resource we expect to find a series of:
* id=mask
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
新手
引导
客服 返回
顶部