aboutsummaryrefslogtreecommitdiffstats
path: root/linux-2.6-xen-sparse
diff options
context:
space:
mode:
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>2007-01-17 21:31:22 -0700
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>2007-01-17 21:31:22 -0700
commit9b7ae1d44feef1dc104243038f20d4d4f87e6b07 (patch)
tree80f904f6f4185a91b739440a80cee3bf56c4ad27 /linux-2.6-xen-sparse
parent9f9308c4e84955d529593f3c255ecd3c15955167 (diff)
parent9d15d8d54a82cc665b83e98ecb03ef68e123f718 (diff)
downloadxen-9b7ae1d44feef1dc104243038f20d4d4f87e6b07.tar.gz
xen-9b7ae1d44feef1dc104243038f20d4d4f87e6b07.tar.bz2
xen-9b7ae1d44feef1dc104243038f20d4d4f87e6b07.zip
merge with xen-unstable.hg
Diffstat (limited to 'linux-2.6-xen-sparse')
-rw-r--r--linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c2
-rw-r--r--linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c16
2 files changed, 11 insertions, 7 deletions
diff --git a/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c b/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c
index 926ba175c3..756c13e586 100644
--- a/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c
@@ -85,7 +85,7 @@ static ssize_t microcode_write (struct file *file, const char __user *buf, size_
{
ssize_t ret;
- if (len < DEFAULT_UCODE_TOTALSIZE) {
+ if (len < MC_HEADER_SIZE) {
printk(KERN_ERR "microcode: not enough data\n");
return -EINVAL;
}
diff --git a/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c b/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c
index cd40fabc08..7e52b47b04 100644
--- a/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c
+++ b/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c
@@ -232,9 +232,12 @@ static void dump_fault_path(unsigned long address)
p += (address >> 21) * 2;
printk(KERN_ALERT "%08lx -> *pme = %08lx:%08lx\n",
page, p[1], p[0]);
-#ifndef CONFIG_HIGHPTE
+ mfn = (p[0] >> PAGE_SHIFT) | (p[1] << 20);
+#ifdef CONFIG_HIGHPTE
+ if (mfn_to_pfn(mfn) >= highstart_pfn)
+ return;
+#endif
if (p[0] & 1) {
- mfn = (p[0] >> PAGE_SHIFT) | (p[1] << 20);
page = mfn_to_pfn(mfn) << PAGE_SHIFT;
p = (unsigned long *) __va(page);
address &= 0x001fffff;
@@ -242,7 +245,6 @@ static void dump_fault_path(unsigned long address)
printk(KERN_ALERT "%08lx -> *pte = %08lx:%08lx\n",
page, p[1], p[0]);
}
-#endif
}
}
#else
@@ -254,13 +256,16 @@ static void dump_fault_path(unsigned long address)
page = ((unsigned long *) __va(page))[address >> 22];
printk(KERN_ALERT "*pde = ma %08lx pa %08lx\n", page,
machine_to_phys(page));
+#ifdef CONFIG_HIGHPTE
/*
* We must not directly access the pte in the highpte
- * case, the page table might be allocated in highmem.
+ * case if the page table is located in highmem.
* And lets rather not kmap-atomic the pte, just in case
* it's allocated already.
*/
-#ifndef CONFIG_HIGHPTE
+ if ((page >> PAGE_SHIFT) >= highstart_pfn)
+ return;
+#endif
if (page & 1) {
page &= PAGE_MASK;
address &= 0x003ff000;
@@ -269,7 +274,6 @@ static void dump_fault_path(unsigned long address)
printk(KERN_ALERT "*pte = ma %08lx pa %08lx\n", page,
machine_to_phys(page));
}
-#endif
}
#endif