diff options
author | awilliam@xenbuild2.aw <awilliam@xenbuild2.aw> | 2007-01-17 21:31:22 -0700 |
---|---|---|
committer | awilliam@xenbuild2.aw <awilliam@xenbuild2.aw> | 2007-01-17 21:31:22 -0700 |
commit | 9b7ae1d44feef1dc104243038f20d4d4f87e6b07 (patch) | |
tree | 80f904f6f4185a91b739440a80cee3bf56c4ad27 /linux-2.6-xen-sparse | |
parent | 9f9308c4e84955d529593f3c255ecd3c15955167 (diff) | |
parent | 9d15d8d54a82cc665b83e98ecb03ef68e123f718 (diff) | |
download | xen-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.c | 2 | ||||
-rw-r--r-- | linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c | 16 |
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 |