浏览代码

x86: CPA return early when requested feature is not available

Mask out the not supported bits (e.g. NX). If the clr/set masks
are empty after the mask return without changing anything.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Thomas Gleixner 17 年之前
父节点
当前提交
331e406588
共有 1 个文件被更改,包括 12 次插入2 次删除
  1. 12 2
      arch/x86/mm/pageattr.c

+ 12 - 2
arch/x86/mm/pageattr.c

@@ -405,8 +405,18 @@ static int __change_page_attr_set_clr(unsigned long addr, int numpages,
 static int change_page_attr_set_clr(unsigned long addr, int numpages,
 				    pgprot_t mask_set, pgprot_t mask_clr)
 {
-	int ret = __change_page_attr_set_clr(addr, numpages, mask_set,
-					     mask_clr);
+	int ret;
+
+	/*
+	 * Check, if we are requested to change a not supported
+	 * feature:
+	 */
+	mask_set = canon_pgprot(mask_set);
+	mask_clr = canon_pgprot(mask_clr);
+	if (!pgprot_val(mask_set) && !pgprot_val(mask_clr))
+		return 0;
+
+	ret = __change_page_attr_set_clr(addr, numpages, mask_set, mask_clr);
 
 	/*
 	 * On success we use clflush, when the CPU supports it to