summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2008-02-04 16:48:06 +0100
committerIngo Molnar <mingo@elte.hu>2008-02-04 16:48:06 +0100
commit331e406588dc90331753e6562e5e3757bb907eb8 (patch)
treeeff21a6aee567367bc63f4b81ecf9b2582eed1ec
parent1c083eb2cbdd917149f6acaa55efca129d05c2a9 (diff)
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>
-rw-r--r--arch/x86/mm/pageattr.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index a629cea5e465..f60b93dc2e57 100644
--- a/arch/x86/mm/pageattr.c
+++ b/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