diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2008-02-04 10:48:06 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-02-04 10:48:06 -0500 |
| commit | 331e406588dc90331753e6562e5e3757bb907eb8 (patch) | |
| tree | eff21a6aee567367bc63f4b81ecf9b2582eed1ec | |
| parent | 1c083eb2cbdd917149f6acaa55efca129d05c2a9 (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.c | 14 |
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, | |||
| 405 | static int change_page_attr_set_clr(unsigned long addr, int numpages, | 405 | static int change_page_attr_set_clr(unsigned long addr, int numpages, |
| 406 | pgprot_t mask_set, pgprot_t mask_clr) | 406 | pgprot_t mask_set, pgprot_t mask_clr) |
| 407 | { | 407 | { |
| 408 | int ret = __change_page_attr_set_clr(addr, numpages, mask_set, | 408 | int ret; |
| 409 | mask_clr); | 409 | |
| 410 | /* | ||
| 411 | * Check, if we are requested to change a not supported | ||
| 412 | * feature: | ||
| 413 | */ | ||
| 414 | mask_set = canon_pgprot(mask_set); | ||
| 415 | mask_clr = canon_pgprot(mask_clr); | ||
| 416 | if (!pgprot_val(mask_set) && !pgprot_val(mask_clr)) | ||
| 417 | return 0; | ||
| 418 | |||
| 419 | ret = __change_page_attr_set_clr(addr, numpages, mask_set, mask_clr); | ||
| 410 | 420 | ||
| 411 | /* | 421 | /* |
| 412 | * On success we use clflush, when the CPU supports it to | 422 | * On success we use clflush, when the CPU supports it to |
