From: Xie XiuQi <xiexiuqi(a)huawei.com>
commit ad4a9b6fb56642d36c76abbeae62dc4e9a66b154 openEuler-1.0
hulk inclusion
category: bugfix
bugzilla: 14212
CVE: NA
Signed-off-by: Xie XiuQi <xiexiuqi(a)huawei.com>
Reviewed-by: Hanjun Guo <guohanjun(a)huawei.com>
Signed-off-by: Yang Yingliang <yangyingliang(a)huawei.com>
Signed-off-by: Xin Hao <haoxing990(a)gmail.com>
---
arch/arm64/kernel/mpam.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/arch/arm64/kernel/mpam.c b/arch/arm64/kernel/mpam.c
index d0b4f6ab70ad..a83b43c9dcaa 100644
--- a/arch/arm64/kernel/mpam.c
+++ b/arch/arm64/kernel/mpam.c
@@ -101,6 +101,21 @@ struct mpam_node mpam_node_all[] = {
MPAM_NODE(HHAALL3, MPAM_RESOURCE_MC, 0x200090ULL, 0xC1),
};
+void mpam_nodes_unmap(void)
+{
+ int i;
+ size_t num_nodes = ARRAY_SIZE(mpam_node_all);
+ struct mpam_node *n;
+
+ for (i = 0; i < num_nodes; i++) {
+ n = &mpam_node_all[i];
+ if (n->base) {
+ iounmap(n->base);
+ n->base = NULL;
+ }
+ }
+}
+
int mpam_nodes_init(void)
{
int i, ret = 0;
@@ -111,6 +126,10 @@ int mpam_nodes_init(void)
n = &mpam_node_all[i];
ret |= cpulist_parse(n->cpus_list, &n->cpu_mask);
n->base = ioremap(n->addr, 0x10000);
+ if (!n->base) {
+ mpam_nodes_unmap();
+ return -ENOMEM;
+ }
}
return ret;
--
2.31.0