git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
x86: xen: 64-bit kernel RPL should be 0
[safe/jmp/linux-2.6]
/
arch
/
x86
/
mm
/
pageattr-test.c
diff --git
a/arch/x86/mm/pageattr-test.c
b/arch/x86/mm/pageattr-test.c
index
75f1b10
..
e1d1069
100644
(file)
--- a/
arch/x86/mm/pageattr-test.c
+++ b/
arch/x86/mm/pageattr-test.c
@@
-1,8
+1,8
@@
/*
* self test for change_page_attr.
*
/*
* self test for change_page_attr.
*
- * Clears the
global bit on random pages in the direct mapping, then reverts
- * and compares page tables forwards and afterwards.
+ * Clears the
a test pte bit on random pages in the direct mapping,
+ *
then reverts
and compares page tables forwards and afterwards.
*/
#include <linux/bootmem.h>
#include <linux/kthread.h>
*/
#include <linux/bootmem.h>
#include <linux/kthread.h>
@@
-32,6
+32,13
@@
enum {
GPS = (1<<30)
};
GPS = (1<<30)
};
+#define PAGE_CPA_TEST __pgprot(_PAGE_CPA_TEST)
+
+static int pte_testbit(pte_t pte)
+{
+ return pte_flags(pte) & _PAGE_UNUSED1;
+}
+
struct split_state {
long lpg, gpg, spg, exec;
long min_exec, max_exec;
struct split_state {
long lpg, gpg, spg, exec;
long min_exec, max_exec;
@@
-111,6
+118,7
@@
static int pageattr_test(void)
unsigned int level;
int i, k;
int err;
unsigned int level;
int i, k;
int err;
+ unsigned long test_addr;
if (print)
printk(KERN_INFO "CPA self-test:\n");
if (print)
printk(KERN_INFO "CPA self-test:\n");
@@
-165,15
+173,15
@@
static int pageattr_test(void)
continue;
}
continue;
}
- err = change_page_attr_clear(addr[i], len[i],
-
__pgprot(_PAGE_GLOBAL)
);
+ test_addr = addr[i];
+
err = change_page_attr_set(&test_addr, len[i], PAGE_CPA_TEST, 0
);
if (err < 0) {
printk(KERN_ERR "CPA %d failed %d\n", i, err);
failed++;
}
pte = lookup_address(addr[i], &level);
if (err < 0) {
printk(KERN_ERR "CPA %d failed %d\n", i, err);
failed++;
}
pte = lookup_address(addr[i], &level);
- if (!pte ||
pte_global
(*pte) || pte_huge(*pte)) {
+ if (!pte ||
!pte_testbit
(*pte) || pte_huge(*pte)) {
printk(KERN_ERR "CPA %lx: bad pte %Lx\n", addr[i],
pte ? (u64)pte_val(*pte) : 0ULL);
failed++;
printk(KERN_ERR "CPA %lx: bad pte %Lx\n", addr[i],
pte ? (u64)pte_val(*pte) : 0ULL);
failed++;
@@
-198,14
+206,14
@@
static int pageattr_test(void)
failed++;
continue;
}
failed++;
continue;
}
- err = change_page_attr_set(addr[i], len[i],
-
__pgprot(_PAGE_GLOBAL)
);
+ test_addr = addr[i];
+
err = change_page_attr_clear(&test_addr, len[i], PAGE_CPA_TEST, 0
);
if (err < 0) {
printk(KERN_ERR "CPA reverting failed: %d\n", err);
failed++;
}
pte = lookup_address(addr[i], &level);
if (err < 0) {
printk(KERN_ERR "CPA reverting failed: %d\n", err);
failed++;
}
pte = lookup_address(addr[i], &level);
- if (!pte ||
!pte_global
(*pte)) {
+ if (!pte ||
pte_testbit
(*pte)) {
printk(KERN_ERR "CPA %lx: bad pte after revert %Lx\n",
addr[i], pte ? (u64)pte_val(*pte) : 0ULL);
failed++;
printk(KERN_ERR "CPA %lx: bad pte after revert %Lx\n",
addr[i], pte ? (u64)pte_val(*pte) : 0ULL);
failed++;
@@
-216,8
+224,7
@@
static int pageattr_test(void)
failed += print_split(&sc);
if (failed) {
failed += print_split(&sc);
if (failed) {
- printk(KERN_ERR "NOT PASSED. Please report.\n");
- WARN_ON(1);
+ WARN(1, KERN_ERR "NOT PASSED. Please report.\n");
return -EINVAL;
} else {
if (print)
return -EINVAL;
} else {
if (print)