ChangeSet 1.1236.32.15, 2005/03/21 13:23:44+00:00, mafetter@xxxxxxxxxxxxxxxx
Added #ifdef CONFIG_XEN_SHADOW_MODE to protect all of Christian's new
code.
Signed-off-by: michael.fetterman@xxxxxxxxxxxx
linux-2.6.10-xen-sparse/arch/xen/Kconfig | 9
linux-2.6.10-xen-sparse/arch/xen/configs/xen0_defconfig | 1
linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/common.c | 4
linux-2.6.10-xen-sparse/arch/xen/i386/kernel/ldt.c | 20 -
linux-2.6.10-xen-sparse/arch/xen/i386/kernel/pci-dma.c | 5
linux-2.6.10-xen-sparse/arch/xen/i386/kernel/process.c | 8
linux-2.6.10-xen-sparse/arch/xen/i386/kernel/setup.c | 34 ++
linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c | 13 +
linux-2.6.10-xen-sparse/arch/xen/i386/mm/hypervisor.c | 128
++++++++++
linux-2.6.10-xen-sparse/arch/xen/i386/mm/init.c | 27 +-
linux-2.6.10-xen-sparse/arch/xen/i386/mm/ioremap.c | 27 +-
linux-2.6.10-xen-sparse/arch/xen/i386/mm/pageattr.c | 11
linux-2.6.10-xen-sparse/arch/xen/i386/mm/pgtable.c | 56 ++++
linux-2.6.10-xen-sparse/arch/xen/kernel/reboot.c | 21 +
linux-2.6.10-xen-sparse/drivers/xen/balloon/balloon.c | 13 +
linux-2.6.10-xen-sparse/drivers/xen/blkback/blkback.c | 4
linux-2.6.10-xen-sparse/drivers/xen/blkfront/blkfront.c | 16 +
linux-2.6.10-xen-sparse/drivers/xen/blkfront/vbd.c | 4
linux-2.6.10-xen-sparse/drivers/xen/netback/netback.c | 12
linux-2.6.10-xen-sparse/drivers/xen/netfront/netfront.c | 25 +
linux-2.6.10-xen-sparse/drivers/xen/privcmd/privcmd.c | 4
linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/desc.h | 4
linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/fixmap.h | 11
linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/io.h | 28 ++
linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/page.h | 49 +++
linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgalloc.h | 7
linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h | 22 +
linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h | 20 +
xen/include/public/arch-x86_32.h | 6
29 files changed, 566 insertions(+), 23 deletions(-)
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/Kconfig
b/linux-2.6.10-xen-sparse/arch/xen/Kconfig
--- a/linux-2.6.10-xen-sparse/arch/xen/Kconfig 2005-04-05 12:14:20 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/Kconfig 2005-04-05 12:14:20 -04:00
@@ -115,8 +115,15 @@
space. Odds are that you want to say N here.
config XEN_WRITABLE_PAGETABLES
- bool
+ bool "writable page tables"
default y
+
+config XEN_SHADOW_MODE
+ bool "Fake shadow mode"
+ default n
+ help
+ fakes out a shadow mode kernel
+
config XEN_SCRUB_PAGES
bool "Scrub memory before freeing it to Xen"
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/configs/xen0_defconfig
b/linux-2.6.10-xen-sparse/arch/xen/configs/xen0_defconfig
--- a/linux-2.6.10-xen-sparse/arch/xen/configs/xen0_defconfig 2005-04-05
12:14:20 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/configs/xen0_defconfig 2005-04-05
12:14:20 -04:00
@@ -20,6 +20,7 @@
# CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
# CONFIG_XEN_BLKDEV_TAP is not set
CONFIG_XEN_WRITABLE_PAGETABLES=y
+CONFIG_XEN_SHADOW_MODE=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_X86=y
# CONFIG_X86_64 is not set
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/common.c
b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/common.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/common.c 2005-04-05
12:14:20 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/cpu/common.c 2005-04-05
12:14:20 -04:00
@@ -512,7 +512,11 @@
for (va = gdt_descr->address, f = 0;
va < gdt_descr->address + gdt_descr->size;
va += PAGE_SIZE, f++) {
+#ifndef CONFIG_XEN_SHADOW_MODE
+ frames[f] = virt_to_machine(va) >> PAGE_SHIFT;
+#else /* CONFIG_XEN_SHADOW_MODE */
frames[f] = __vms_virt_to_machine(va) >> PAGE_SHIFT;
+#endif /* CONFIG_XEN_SHADOW_MODE */
make_page_readonly((void *)va);
}
flush_page_update_queue();
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/ldt.c
b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/ldt.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/ldt.c 2005-04-05
12:14:21 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/ldt.c 2005-04-05
12:14:21 -04:00
@@ -61,10 +61,10 @@
cpumask_t mask;
preempt_disable();
#endif
-#if 0
+#ifndef CONFIG_XEN_SHADOW_MODE
make_pages_readonly(pc->ldt, (pc->size * LDT_ENTRY_SIZE) /
PAGE_SIZE);
-#endif
+#endif /* CONFIG_XEN_SHADOW_MODE */
load_LDT(pc);
flush_page_update_queue();
#ifdef CONFIG_SMP
@@ -75,10 +75,10 @@
#endif
}
if (oldsize) {
-#if 0
+#ifndef CONFIG_XEN_SHADOW_MODE
make_pages_writable(oldldt, (oldsize * LDT_ENTRY_SIZE) /
PAGE_SIZE);
-#endif
+#endif /* ! CONFIG_XEN_SHADOW_MODE */
flush_page_update_queue();
if (oldsize*LDT_ENTRY_SIZE > PAGE_SIZE)
vfree(oldldt);
@@ -94,10 +94,10 @@
if (err < 0)
return err;
memcpy(new->ldt, old->ldt, old->size*LDT_ENTRY_SIZE);
-#if 0
+#ifndef CONFIG_XEN_SHADOW_MODE
make_pages_readonly(new->ldt, (new->size * LDT_ENTRY_SIZE) /
PAGE_SIZE);
-#endif
+#endif /* ! CONFIG_XEN_SHADOW_MODE */
flush_page_update_queue();
return 0;
}
@@ -130,11 +130,11 @@
if (mm->context.size) {
if (mm == current->active_mm)
clear_LDT();
-#if 0
+#ifndef CONFIG_XEN_SHADOW_MODE
make_pages_writable(mm->context.ldt,
(mm->context.size * LDT_ENTRY_SIZE) /
PAGE_SIZE);
-#endif
+#endif /* ! CONFIG_XEN_SHADOW_MODE */
flush_page_update_queue();
if (mm->context.size*LDT_ENTRY_SIZE > PAGE_SIZE)
vfree(mm->context.ldt);
@@ -230,7 +230,11 @@
}
lp = (__u32 *) ((ldt_info.entry_number << 3) + (char *)
mm->context.ldt);
+#ifndef CONFIG_XEN_SHADOW_MODE
+ mach_lp = arbitrary_virt_to_machine(lp);
+#else /* CONFIG_XEN_SHADOW_MODE */
mach_lp = arbitrary_virt_to_phys(lp);
+#endif /* CONFIG_XEN_SHADOW_MODE */
/* Allow LDTs to be cleared by the user. */
if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/pci-dma.c
b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/pci-dma.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/pci-dma.c 2005-04-05
12:14:21 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/pci-dma.c 2005-04-05
12:14:21 -04:00
@@ -30,8 +30,7 @@
static void
xen_contig_memory(unsigned long vstart, unsigned int order)
{
-#define HACK
-#ifndef HACK
+#ifndef CONFIG_XEN_SHADOW_MODE
/*
* Ensure multi-page extents are contiguous in machine memory.
* This code could be cleaned up some, and the number of
@@ -78,7 +77,7 @@
xen_tlb_flush();
balloon_unlock(flags);
-#endif
+#endif /* CONFIG_XEN_SHADOW_MODE */
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/process.c
b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/process.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/process.c 2005-04-05
12:14:20 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/process.c 2005-04-05
12:14:20 -04:00
@@ -514,17 +514,23 @@
* Load the per-thread Thread-Local Storage descriptor.
* This is load_TLS(next, cpu) with multicalls.
*/
+#ifndef CONFIG_XEN_SHADOW_MODE
+#define C_VIRT_TO_MACH virt_to_machine
+#else /* CONFIG_XEN_SHADOW_MODE */
+#define C_VIRT_TO_MACH virt_to_phys
+#endif
#define C(i) do { \
if (unlikely(next->tls_array[i].a != prev->tls_array[i].a || \
next->tls_array[i].b != prev->tls_array[i].b)) \
queue_multicall3(__HYPERVISOR_update_descriptor, \
- virt_to_phys(&get_cpu_gdt_table(cpu) \
+ C_VIRT_TO_MACH(&get_cpu_gdt_table(cpu) \
[GDT_ENTRY_TLS_MIN + i]), \
((u32 *)&next->tls_array[i])[0], \
((u32 *)&next->tls_array[i])[1]); \
} while (0)
C(0); C(1); C(2);
#undef C
+#undef C_VIRT_TO_MACH
if (xen_start_info.flags & SIF_PRIVILEGED) {
op.cmd = DOM0_IOPL;
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/setup.c
b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/setup.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/setup.c 2005-04-05
12:14:21 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/kernel/setup.c 2005-04-05
12:14:21 -04:00
@@ -345,8 +345,13 @@
shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
EXPORT_SYMBOL(HYPERVISOR_shared_info);
+#ifndef CONFIG_XEN_SHADOW_MODE
+unsigned int *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
+EXPORT_SYMBOL(phys_to_machine_mapping);
+#else /* CONFIG_XEN_SHADOW_MODE */
unsigned int *__vms_phys_to_machine_mapping, *__vms_pfn_to_mfn_frame_list;
EXPORT_SYMBOL(__vms_phys_to_machine_mapping);
+#endif /* CONFIG_XEN_SHADOW_MODE */
DEFINE_PER_CPU(multicall_entry_t, multicall_list[8]);
DEFINE_PER_CPU(int, nr_multicall_ents);
@@ -1142,7 +1147,11 @@
}
#endif
+#ifndef CONFIG_XEN_SHADOW_MODE
+ phys_to_machine_mapping = (unsigned int *)xen_start_info.mfn_list;
+#else /* CONFIG_XEN_SHADOW_MODE */
__vms_phys_to_machine_mapping = (unsigned int *)xen_start_info.mfn_list;
+#endif /* CONFIG_XEN_SHADOW_MODE */
return max_low_pfn;
}
@@ -1437,11 +1446,23 @@
/* Make sure we have a large enough P->M table. */
if (max_pfn > xen_start_info.nr_pages) {
+#ifndef CONFIG_XEN_SHADOW_MODE
+ phys_to_machine_mapping = alloc_bootmem_low_pages(
+#else /* CONFIG_XEN_SHADOW_MODE */
__vms_phys_to_machine_mapping = alloc_bootmem_low_pages(
+#endif /* CONFIG_XEN_SHADOW_MODE */
max_pfn * sizeof(unsigned long));
+#ifndef CONFIG_XEN_SHADOW_MODE
+ memset(phys_to_machine_mapping, ~0,
+#else /* CONFIG_XEN_SHADOW_MODE */
memset(__vms_phys_to_machine_mapping, ~0,
+#endif /* CONFIG_XEN_SHADOW_MODE */
max_pfn * sizeof(unsigned long));
+#ifndef CONFIG_XEN_SHADOW_MODE
+ memcpy(phys_to_machine_mapping,
+#else /* CONFIG_XEN_SHADOW_MODE */
memcpy(__vms_phys_to_machine_mapping,
+#endif /* CONFIG_XEN_SHADOW_MODE */
(unsigned long *)xen_start_info.mfn_list,
xen_start_info.nr_pages * sizeof(unsigned long));
free_bootmem(
@@ -1450,14 +1471,27 @@
sizeof(unsigned long))));
}
+#ifndef CONFIG_XEN_SHADOW_MODE
+ pfn_to_mfn_frame_list = alloc_bootmem_low_pages(PAGE_SIZE);
+#else /* CONFIG_XEN_SHADOW_MODE */
__vms_pfn_to_mfn_frame_list = alloc_bootmem_low_pages(PAGE_SIZE);
+#endif /* CONFIG_XEN_SHADOW_MODE */
for ( i=0, j=0; i < max_pfn; i+=(PAGE_SIZE/sizeof(unsigned long)), j++ )
{
+#ifndef CONFIG_XEN_SHADOW_MODE
+ pfn_to_mfn_frame_list[j] =
+ virt_to_machine(&phys_to_machine_mapping[i]) >> PAGE_SHIFT;
+#else /* CONFIG_XEN_SHADOW_MODE */
__vms_pfn_to_mfn_frame_list[j] =
__vms_virt_to_machine(&__vms_phys_to_machine_mapping[i]) >>
PAGE_SHIFT;
+#endif /* CONFIG_XEN_SHADOW_MODE */
}
HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list =
+#ifndef CONFIG_XEN_SHADOW_MODE
+ virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT;
+#else /* CONFIG_XEN_SHADOW_MODE */
__vms_virt_to_machine(__vms_pfn_to_mfn_frame_list) >> PAGE_SHIFT;
+#endif /* CONFIG_XEN_SHADOW_MODE */
/*
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c
b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c 2005-04-05 12:14:20
-04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c 2005-04-05 12:14:20
-04:00
@@ -458,8 +458,13 @@
printk("%08lx\n", regs->eip);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|