Acked-by: Jeff Mahoney <jeffm@suse.com>
Automatically created from "patches.kernel.org/patch-2.6.27" by xen-port-patches.py
-Index: head-2008-12-01/arch/x86/Kconfig
-===================================================================
---- head-2008-12-01.orig/arch/x86/Kconfig 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/Kconfig 2008-12-01 11:49:07.000000000 +0100
-@@ -590,7 +590,7 @@ config CALGARY_IOMMU_ENABLED_BY_DEFAULT
+--- sle11-2009-06-04.orig/arch/x86/Kconfig 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/Kconfig 2009-06-04 10:21:39.000000000 +0200
+@@ -594,7 +594,7 @@ config CALGARY_IOMMU_ENABLED_BY_DEFAULT
config AMD_IOMMU
bool "AMD IOMMU support"
select SWIOTLB
help
With this option you can enable support for AMD IOMMU hardware in
your system. An IOMMU is a hardware component which provides
-@@ -625,8 +625,10 @@ config MAXSMP
+@@ -629,8 +629,10 @@ config MAXSMP
config NR_CPUS
- int "Maximum number of CPUs (2-512)" if !MAXSMP
+ int "Maximum number of CPUs (2-4096)"
+ range 2 32 if XEN
- range 2 512
+ range 2 4096
depends on SMP
+ default "32" if MAXSMP && XEN
default "4096" if MAXSMP
default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000
default "16" if X86_64_XEN
-@@ -1223,7 +1225,7 @@ config MTRR
+@@ -1227,7 +1229,7 @@ config MTRR
config MTRR_SANITIZER
bool
prompt "MTRR cleanup support"
help
Convert MTRR layout from continuous to discrete, so X drivers can
add writeback entries.
-Index: head-2008-12-01/arch/x86/Kconfig.debug
-===================================================================
---- head-2008-12-01.orig/arch/x86/Kconfig.debug 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/Kconfig.debug 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/Kconfig.debug 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/Kconfig.debug 2009-06-04 10:21:39.000000000 +0200
@@ -25,6 +25,7 @@ config STRICT_DEVMEM
config X86_VERBOSE_BOOTUP
bool "Enable verbose x86 bootup info messages"
help
Enables the informational output from the decompression stage
(e.g. bzImage) of the boot. If you disable this you will still
-@@ -166,7 +167,7 @@ config MMIOTRACE_HOOKS
+@@ -179,7 +180,7 @@ config MMIOTRACE_HOOKS
config MMIOTRACE
bool "Memory mapped IO tracing"
select TRACING
select MMIOTRACE_HOOKS
help
-Index: head-2008-12-01/arch/x86/Makefile
-===================================================================
---- head-2008-12-01.orig/arch/x86/Makefile 2008-12-01 11:36:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/Makefile 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/Makefile 2009-02-16 16:18:36.000000000 +0100
++++ sle11-2009-06-04/arch/x86/Makefile 2009-06-04 10:21:39.000000000 +0200
@@ -116,8 +116,8 @@ mflags-$(CONFIG_X86_VOYAGER) := -Iinclud
mcore-$(CONFIG_X86_VOYAGER) := arch/x86/mach-voyager/
KBUILD_CFLAGS += $(mflags-y)
KBUILD_AFLAGS += $(mflags-y)
-Index: head-2008-12-01/arch/x86/ia32/ia32entry-xen.S
-===================================================================
---- head-2008-12-01.orig/arch/x86/ia32/ia32entry-xen.S 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/ia32/ia32entry-xen.S 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/ia32/ia32entry-xen.S 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/ia32/ia32entry-xen.S 2009-06-04 10:21:39.000000000 +0200
@@ -15,6 +15,16 @@
#include <asm/irqflags.h>
#include <linux/linkage.h>
+ .quad sys_pipe2
+ .quad sys_inotify_init1
ia32_syscall_end:
-Index: head-2008-12-01/arch/x86/kernel/Makefile
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/Makefile 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/Makefile 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/Makefile 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/Makefile 2009-06-04 10:21:39.000000000 +0200
@@ -120,9 +120,10 @@ ifeq ($(CONFIG_X86_64),y)
obj-$(CONFIG_PCI_MMCONFIG) += mmconf-fam10h_64.o
time_64-$(CONFIG_XEN) += time_32.o
endif
--disabled-obj-$(CONFIG_XEN) := early-quirks.o hpet.o i8253.o i8259_$(BITS).o \
+-disabled-obj-$(CONFIG_XEN) := crash.o early-quirks.o hpet.o i8253.o i8259_$(BITS).o \
- pci-swiotlb_64.o reboot.o smpboot.o tlb_$(BITS).o tsc_$(BITS).o tsc_sync.o vsmp_64.o
-+disabled-obj-$(CONFIG_XEN) := bios_uv.o early-quirks.o hpet.o i8253.o \
++disabled-obj-$(CONFIG_XEN) := %_uv.o crash.o early-quirks.o hpet.o i8253.o \
+ i8259.o irqinit_$(BITS).o pci-swiotlb_64.o reboot.o smpboot.o \
+ tlb_$(BITS).o tsc.o tsc_sync.o vsmp_64.o
-Index: head-2008-12-01/arch/x86/kernel/acpi/boot.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/acpi/boot.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/acpi/boot.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/acpi/boot.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/acpi/boot.c 2009-06-04 10:21:39.000000000 +0200
@@ -951,7 +951,9 @@ void __init mp_register_ioapic(int id, u
mp_ioapics[idx].mp_flags = MPC_APIC_USABLE;
mp_ioapics[idx].mp_apicaddr = address;
/*
* For GSI >= 64, use IRQ compression
*/
-Index: head-2008-12-01/arch/x86/kernel/acpi/sleep-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/acpi/sleep-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/acpi/sleep-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/acpi/sleep-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/acpi/sleep-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -9,6 +9,7 @@
#include <linux/bootmem.h>
#include <linux/dmi.h>
str = strchr(str, ',');
if (str != NULL)
str += strspn(str, ", \t");
-Index: head-2008-12-01/arch/x86/kernel/apic_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/apic_32-xen.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/apic_32-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/apic_32-xen.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/apic_32-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -59,7 +59,10 @@ static cpumask_t timer_bcast_ipi;
/*
* Debug level, exported for io_apic.c
#ifndef CONFIG_XEN
static int modern_apic(void)
-Index: head-2008-12-01/arch/x86/kernel/apic_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/apic_64-xen.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/apic_64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/apic_64-xen.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/apic_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -39,7 +39,10 @@ int disable_apic;
/*
* Debug level, exported for io_apic.c
/*
* The guts of the apic timer interrupt
-Index: head-2008-12-01/arch/x86/kernel/asm-offsets_64.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/asm-offsets_64.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/asm-offsets_64.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/asm-offsets_64.c 2008-11-25 12:35:54.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/asm-offsets_64.c 2009-06-04 10:21:39.000000000 +0200
@@ -138,7 +138,7 @@ int main(void)
BLANK();
BLANK();
OFFSET(XEN_vcpu_info_mask, vcpu_info, evtchn_upcall_mask);
OFFSET(XEN_vcpu_info_pending, vcpu_info, evtchn_upcall_pending);
-Index: head-2008-12-01/arch/x86/kernel/cpu/amd_64.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/cpu/amd_64.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/cpu/amd_64.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/cpu/amd_64.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/arch/x86/kernel/cpu/amd_64.c 2009-06-04 10:21:39.000000000 +0200
@@ -193,6 +193,7 @@ static void __cpuinit init_amd(struct cp
fam10h_check_enable_mmcfg();
}
}
static struct cpu_dev amd_cpu_dev __cpuinitdata = {
-Index: head-2008-12-01/arch/x86/kernel/cpu/bugs_64.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/cpu/bugs_64.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/cpu/bugs_64.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/cpu/bugs_64.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/arch/x86/kernel/cpu/bugs_64.c 2009-06-04 10:21:39.000000000 +0200
@@ -20,6 +20,7 @@ void __init check_bugs(void)
#endif
alternative_instructions();
set_memory_4k((unsigned long)__va(0), 1);
+#endif
}
-Index: head-2008-12-01/arch/x86/kernel/cpu/common-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/cpu/common-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/cpu/common-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/cpu/common-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/cpu/common-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -13,6 +13,7 @@
#include <asm/mtrr.h>
#include <asm/mce.h>
if (!have_cpuid_p()) {
/*
-Index: head-2008-12-01/arch/x86/kernel/cpu/common_64-xen.c
-===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2008-12-01/arch/x86/kernel/cpu/common_64-xen.c 2008-12-01 11:49:07.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/cpu/common_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -0,0 +1,771 @@
+#include <linux/init.h>
+#include <linux/kernel.h>
+#ifdef CONFIG_IA32_EMULATION
+ syscall32_cpu_init();
+#else
-+ static /*const*/ struct callback_register __cpuinitdata cstar = {
++ static const struct callback_register __cpuinitconst cstar = {
+ .type = CALLBACKTYPE_syscall32,
+ .address = (unsigned long)ignore_sysret
+ };
+ if (is_uv_system())
+ uv_cpu_init();
+}
-Index: head-2008-12-01/arch/x86/kernel/e820-xen.c
-===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2008-12-01/arch/x86/kernel/e820-xen.c 2008-12-01 11:49:07.000000000 +0100
-@@ -0,0 +1,1470 @@
++++ sle11-2009-06-04/arch/x86/kernel/e820-xen.c 2009-06-04 10:21:39.000000000 +0200
+@@ -0,0 +1,1545 @@
+/*
+ * Handle the memory map.
+ * The functions here do the job until bootmem takes over.
+ * next kernel with full memory.
+ */
+struct e820map e820;
++#ifndef CONFIG_XEN
+struct e820map e820_saved;
-+#ifdef CONFIG_XEN
++#else
+static struct e820map machine_e820;
++#define e820_saved machine_e820
+#endif
+
+/* For PCI or other memory-mapped resources */
+ u64 size, unsigned old_type,
+ unsigned new_type)
+{
-+ int i;
++ unsigned int i, x;
+ u64 real_updated_size = 0;
+
+ BUG_ON(old_type == new_type);
+ if (size > (ULLONG_MAX - start))
+ size = ULLONG_MAX - start;
+
-+ for (i = 0; i < e820.nr_map; i++) {
++ for (i = 0; i < e820x->nr_map; i++) {
+ struct e820entry *ei = &e820x->map[i];
+ u64 final_start, final_end;
+ if (ei->type != old_type)
+ final_end = min(start + size, ei->addr + ei->size);
+ if (final_start >= final_end)
+ continue;
-+ e820_add_region(final_start, final_end - final_start,
-+ new_type);
++
++ x = e820x->nr_map;
++ if (x == ARRAY_SIZE(e820x->map)) {
++ printk(KERN_ERR "Too many memory map entries!\n");
++ break;
++ }
++ e820x->map[x].addr = final_start;
++ e820x->map[x].size = final_end - final_start;
++ e820x->map[x].type = new_type;
++ e820x->nr_map++;
++
+ real_updated_size += final_end - final_start;
+
-+ ei->size -= final_end - final_start;
+ if (ei->addr < final_start)
+ continue;
+ ei->addr = final_end;
++ ei->size -= final_end - final_start;
+ }
+ return real_updated_size;
+}
+static u64 __init e820_update_range_saved(u64 start, u64 size,
+ unsigned old_type, unsigned new_type)
+{
++#ifdef CONFIG_XEN
++ if (is_initial_xendomain())
++ return e820_update_range_map(&machine_e820,
++ phys_to_machine(start), size,
++ old_type, new_type);
++#endif
+ return e820_update_range_map(&e820_saved, start, size, old_type,
+ new_type);
+}
+ "address range\n"
+ KERN_ERR "PCI: Unassigned devices with 32bit resource "
+ "registers may break!\n");
-+ found = e820_search_gap(&gapstart, &gapsize, MAX_GAP_END, 0);
++ found = e820_search_gap(&gapstart, &gapsize, MAX_GAP_END, 0);
+ BUG_ON(!found);
+ }
+#endif
+ continue;
+ return addr;
+ }
-+ return -1UL;
+
++ return -1ULL;
+}
+
+/*
+ u64 size = 0;
+ u64 addr;
+ u64 start;
++#ifdef CONFIG_XEN
++ unsigned int order = get_order(sizet);
+
-+ start = startt;
-+ while (size < sizet)
++ if (is_initial_xendomain()) {
++ sizet = PAGE_SIZE << order;
++ if (align < PAGE_SIZE)
++ align = PAGE_SIZE;
++ }
++#endif
++ for (start = startt; ; start += size) {
+ start = find_e820_area_size(start, &size, align);
++ if (!(start + 1))
++ return 0;
++ if (size >= sizet)
++ break;
++ }
+
-+ if (size < sizet)
++#ifdef CONFIG_X86_32
++ if (start >= MAXMEM)
++ return 0;
++ if (start + size > MAXMEM)
++ size = MAXMEM - start;
++#endif
++#ifdef CONFIG_XEN
++ if ((start >> PAGE_SHIFT) >= xen_start_info->nr_pages)
+ return 0;
++ if (PFN_UP(start + size) > xen_start_info->nr_pages)
++ size = ((u64)xen_start_info->nr_pages << PAGE_SHIFT) - start;
++#endif
+
+ addr = round_down(start + size - sizet, align);
++ if (addr < start)
++ return 0;
++#ifdef CONFIG_XEN
++ if (is_initial_xendomain()) {
++ int rc;
++ unsigned long max_initmap_pfn;
++
++ max_initmap_pfn = ALIGN(PFN_UP(__pa(xen_start_info->pt_base))
++ + xen_start_info->nr_pt_frames
++ + 1 + (1 << (19 - PAGE_SHIFT)),
++ 1UL << (22 - PAGE_SHIFT));
++#ifdef CONFIG_X86_32
++ if ((addr >> PAGE_SHIFT)
++ < max(max_initmap_pfn, max_pfn_mapped))
++ rc = xen_create_contiguous_region((unsigned long)
++ __va(addr),
++ order, 32);
++#else
++ if ((addr >> PAGE_SHIFT) < max_pfn_mapped)
++ rc = xen_create_contiguous_region((unsigned long)
++ __va(addr),
++ order, 32);
++ else if ((addr >> PAGE_SHIFT) < max_initmap_pfn)
++ rc = xen_create_contiguous_region(__START_KERNEL_map
++ + addr,
++ order, 32);
++#endif
++ else
++ rc = early_create_contiguous_region(addr >> PAGE_SHIFT,
++ order, 32);
++ if (rc)
++ return 0;
++ }
++#endif
+ e820_update_range(addr, sizet, E820_RAM, E820_RESERVED);
+ e820_update_range_saved(addr, sizet, E820_RAM, E820_RESERVED);
+ printk(KERN_INFO "update e820 for early_reserve_e820\n");
+ if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
+ BUG();
+ machine_e820.nr_map = memmap.nr_entries;
-+ } else
-+ machine_e820 = e820;
++ }
+#endif
+
+ return "Xen";
+ char *who;
+
+ who = memory_setup();
-+ memcpy(&e820_saved, &e820, sizeof(struct e820map));
++#ifdef CONFIG_XEN
++ if (!is_initial_xendomain())
++#endif
++ memcpy(&e820_saved, &e820, sizeof(struct e820map));
+ printk(KERN_INFO "Xen-provided physical RAM map:\n");
+ e820_print_map(who);
+}
-Index: head-2008-12-01/arch/x86/kernel/e820_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/e820_32-xen.c 2008-12-01 11:44:55.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/e820_32-xen.c 2009-03-16 16:38:05.000000000 +0100
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,873 +0,0 @@
-#include <linux/kernel.h>
- print_memory_map("modified");
-}
-#endif
-Index: head-2008-12-01/arch/x86/kernel/e820_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/e820_64-xen.c 2008-12-01 11:44:55.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/e820_64-xen.c 2009-03-16 16:38:05.000000000 +0100
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,1045 +0,0 @@
-/*
- max_pfn << PAGE_SHIFT) - *addr;
- return i + 1;
-}
-Index: head-2008-12-01/arch/x86/kernel/early_printk-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/early_printk-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/early_printk-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/early_printk-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/early_printk-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -225,7 +225,7 @@ static struct console simnow_console = {
static struct console *early_console = &early_vga_console;
static int early_console_initialized;
{
char buf[512];
int n;
-Index: head-2008-12-01/arch/x86/kernel/entry_32-xen.S
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/entry_32-xen.S 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/entry_32-xen.S 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/entry_32-xen.S 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/entry_32-xen.S 2009-06-04 10:21:39.000000000 +0200
@@ -51,15 +51,26 @@
#include <asm/percpu.h>
#include <asm/dwarf2.h>
jmp resume_userspace
END(syscall_exit_work)
CFI_ENDPROC
-@@ -1109,10 +1147,10 @@ ENTRY(native_iret)
+@@ -1113,10 +1151,10 @@ ENTRY(native_iret)
.previous
END(native_iret)
#endif
KPROBE_ENTRY(int3)
-@@ -1261,6 +1299,77 @@ ENTRY(kernel_thread_helper)
+@@ -1265,6 +1303,77 @@ ENTRY(kernel_thread_helper)
CFI_ENDPROC
ENDPROC(kernel_thread_helper)
#include <asm/alternative-asm.h>
# pv syscall call handler stub
-@@ -1286,7 +1395,7 @@ ENTRY(ia32pv_cstar_target)
+@@ -1290,7 +1399,7 @@ ENTRY(ia32pv_cstar_target)
.previous
SAVE_ALL
GET_THREAD_INFO(%ebp)
jnz cstar_trace_entry
cmpl $nr_syscalls,%eax
jae cstar_badsys
-@@ -1320,29 +1429,21 @@ cstar_trace_entry:
+@@ -1324,29 +1433,21 @@ cstar_trace_entry:
btl %eax,cstar_special
jc .Lcstar_trace_special
1: movl %esp,%eax
cmpl $nr_syscalls,%eax
jb syscall_call
jmp syscall_exit
-Index: head-2008-12-01/arch/x86/kernel/entry_64.S
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/entry_64.S 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/entry_64.S 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/entry_64.S 2009-06-04 00:00:00.000000000 +0200
++++ sle11-2009-06-04/arch/x86/kernel/entry_64.S 2009-06-04 10:21:39.000000000 +0200
@@ -1409,7 +1409,7 @@ ENTRY(arch_unwind_init_running)
ENDPROC(arch_unwind_init_running)
#endif
ENTRY(xen_hypervisor_callback)
zeroentry xen_do_hypervisor_callback
END(xen_hypervisor_callback)
-@@ -1507,4 +1507,4 @@ ENTRY(xen_failsafe_callback)
+@@ -1507,7 +1507,7 @@ ENTRY(xen_failsafe_callback)
CFI_ENDPROC
END(xen_failsafe_callback)
-#endif /* CONFIG_XEN */
+#endif /* CONFIG_PARAVIRT_XEN */
-Index: head-2008-12-01/arch/x86/kernel/entry_64-xen.S
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/entry_64-xen.S 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/entry_64-xen.S 2008-12-01 11:49:07.000000000 +0100
+
+ #ifdef CONFIG_KDB
+
+--- sle11-2009-06-04.orig/arch/x86/kernel/entry_64-xen.S 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/entry_64-xen.S 2009-06-04 10:21:39.000000000 +0200
@@ -53,19 +53,130 @@
#include <asm/hw_irq.h>
#include <asm/page.h>
pushq $0
CFI_ADJUST_CFA_OFFSET 8
paranoidentry do_machine_check
-Index: head-2008-12-01/arch/x86/kernel/genapic_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/genapic_64-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/genapic_64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/fixup.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/fixup.c 2009-06-04 10:21:39.000000000 +0200
+@@ -33,6 +33,7 @@
+ #include <linux/kernel.h>
+ #include <linux/delay.h>
+ #include <linux/version.h>
++#include <asm/traps.h>
+
+ #define DP(_f, _args...) printk(KERN_ALERT " " _f "\n" , ## _args )
+
+--- sle11-2009-06-04.orig/arch/x86/kernel/genapic_64-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/genapic_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -58,7 +58,7 @@ void __init setup_apic_routing(void)
else
#endif
}
+EXPORT_SYMBOL_GPL(is_uv_system);
#endif
-Index: head-2008-12-01/arch/x86/kernel/genapic_xen_64.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/genapic_xen_64.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/genapic_xen_64.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/genapic_xen_64.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/genapic_xen_64.c 2009-06-04 10:21:39.000000000 +0200
@@ -43,7 +43,7 @@ void xen_send_IPI_shortcut(unsigned int
__send_IPI_one(smp_processor_id(), vector);
break;
ebx = cpuid_ebx(1);
return ((ebx >> 24) & 0xFF) >> index_msb;
}
-Index: head-2008-12-01/arch/x86/kernel/head-xen.c
-===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2008-12-01/arch/x86/kernel/head-xen.c 2008-12-01 11:49:07.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/head-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -0,0 +1,57 @@
+#include <linux/kernel.h>
+#include <linux/init.h>
+ reserve_early_overlap_ok(lowmem, 0x100000, "BIOS reserved");
+#endif
+}
-Index: head-2008-12-01/arch/x86/kernel/head32-xen.c
-===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2008-12-01/arch/x86/kernel/head32-xen.c 2008-12-01 11:49:07.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/head32-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -0,0 +1,57 @@
+/*
+ * linux/arch/i386/kernel/head32.c -- prepare to run common code
+
+ start_kernel();
+}
-Index: head-2008-12-01/arch/x86/kernel/head64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/head64-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/head64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/head64-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/head64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -32,7 +32,26 @@
#include <asm/e820.h>
#include <asm/bios_ebda.h>
/*
* At this point everything still needed from the boot loader
-Index: head-2008-12-01/arch/x86/kernel/head_64-xen.S
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/head_64-xen.S 2008-12-01 11:36:47.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/head_64-xen.S 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/head_64-xen.S 2009-02-16 16:17:21.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/head_64-xen.S 2009-06-04 10:21:39.000000000 +0200
@@ -95,53 +95,6 @@ NEXT_PAGE(hypercall_page)
#undef NEXT_PAGE
.section .bss.page_aligned, "aw", @nobits
.align PAGE_SIZE
ENTRY(empty_zero_page)
-Index: head-2008-12-01/arch/x86/kernel/io_apic_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/io_apic_32-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/io_apic_32-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/io_apic_32-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/io_apic_32-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -25,6 +25,7 @@
#include <linux/init.h>
#include <linux/delay.h>
+ }
+}
+#endif
-Index: head-2008-12-01/arch/x86/kernel/io_apic_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/io_apic_64-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/io_apic_64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/io_apic_64-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/io_apic_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -45,6 +45,7 @@
#include <asm/proto.h>
#include <asm/acpi.h>
} else {
ioapic_phys = (unsigned long)
alloc_bootmem_pages(PAGE_SIZE);
-Index: head-2008-12-01/arch/x86/kernel/ipi-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/ipi-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/ipi-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/ipi-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/ipi-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -8,7 +8,6 @@
#include <linux/kernel_stat.h>
#include <linux/mc146818rtc.h>
}
#endif
-Index: head-2008-12-01/arch/x86/kernel/irq_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/irq_32-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/irq_32-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/irq_32-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/irq_32-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -48,6 +48,29 @@ void ack_bad_irq(unsigned int irq)
#endif
}
#ifdef CONFIG_HOTPLUG_CPU
void fixup_irqs(cpumask_t map)
-Index: head-2008-12-01/arch/x86/kernel/irq_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/irq_64-xen.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/irq_64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/irq_64-xen.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/irq_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -163,6 +163,34 @@ skip:
}
* do_IRQ handles all normal device IRQ's (the special
* SMP cross-CPU interrupts have their own specific
* handlers).
-Index: head-2008-12-01/arch/x86/kernel/ldt-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/ldt-xen.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/ldt-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/ldt-xen.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/ldt-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -20,9 +20,9 @@
#include <asm/mmu_context.h>
preempt_enable();
#endif
}
-Index: head-2008-12-01/arch/x86/kernel/microcode-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/microcode-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/microcode-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/machine_kexec_32.c 2008-11-25 12:35:53.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/machine_kexec_32.c 2009-06-04 10:21:39.000000000 +0200
+@@ -68,6 +68,8 @@ void machine_kexec_setup_load_arg(xen_ke
+ xki->page_list[PA_PTE_0] = __ma(kexec_pte0);
+ xki->page_list[PA_PTE_1] = __ma(kexec_pte1);
+
++ if (image->type == KEXEC_TYPE_DEFAULT)
++ xki->page_list[PA_SWAP_PAGE] = page_to_phys(image->swap_page);
+ }
+
+ int __init machine_kexec_setup_resources(struct resource *hypervisor,
+--- sle11-2009-06-04.orig/arch/x86/kernel/microcode-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/microcode-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -5,13 +5,14 @@
* 2006 Shaohua Li <shaohua.li@intel.com>
*
return 0;
}
-Index: head-2008-12-01/arch/x86/kernel/mpparse-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/mpparse-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/mpparse-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/mpparse-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/mpparse-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -25,6 +25,9 @@
#include <asm/proto.h>
#include <asm/acpi.h>
#include <mach_apic.h>
#ifdef CONFIG_X86_32
-@@ -32,28 +35,6 @@
+@@ -32,27 +35,10 @@
#include <mach_mpparse.h>
#endif
-/*
- * Intel MP BIOS table parsing routines:
- */
--
++static void *_bus_to_virt(unsigned long ma)
++{
++ return is_ISA_range(ma, ma) ? isa_bus_to_virt(ma) : bus_to_virt(ma);
++}
+
/*
* Checksum an MP configuration block.
- */
-@@ -68,20 +49,8 @@ static int __init mpf_checksum(unsigned
+@@ -68,19 +54,7 @@ static int __init mpf_checksum(unsigned
return sum & 0xFF;
}
- __cpuinitdata;
-#endif
-
- #ifndef CONFIG_XEN
-static void __cpuinit MP_processor_info(struct mpc_config_processor *m)
+static void __init MP_processor_info(struct mpc_config_processor *m)
{
+ #ifndef CONFIG_XEN
int apicid;
- char *bootup_cpu = "";
-@@ -90,11 +59,12 @@ static void __cpuinit MP_processor_info(
+@@ -90,11 +64,12 @@ static void __cpuinit MP_processor_info(
disabled_cpus++;
return;
}
if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) {
bootup_cpu = " (Bootup-CPU)";
boot_cpu_physical_apicid = m->mpc_apicid;
-@@ -104,24 +74,23 @@ static void __cpuinit MP_processor_info(
- generic_processor_info(apicid, m->mpc_apicver);
- }
- #else
--static void __cpuinit MP_processor_info(struct mpc_config_processor *m)
-+static void __init MP_processor_info(struct mpc_config_processor *m)
- {
- num_processors++;
+@@ -107,18 +82,17 @@ static void __cpuinit MP_processor_info(
+ #endif
}
- #endif /* CONFIG_XEN */
+#ifdef CONFIG_X86_IO_APIC
static void __init MP_bus_info(struct mpc_config_bus *m)
#if MAX_MP_BUSSES < 256
if (m->mpc_busid >= MAX_MP_BUSSES) {
-@@ -138,12 +107,10 @@ static void __init MP_bus_info(struct mp
+@@ -135,12 +109,10 @@ static void __init MP_bus_info(struct mp
mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA;
#endif
} else if (strncmp(str, BUSTYPE_PCI, sizeof(BUSTYPE_PCI) - 1) == 0) {
#if defined(CONFIG_EISA) || defined (CONFIG_MCA)
mp_bus_id_to_type[m->mpc_busid] = MP_BUS_PCI;
} else if (strncmp(str, BUSTYPE_EISA, sizeof(BUSTYPE_EISA) - 1) == 0) {
-@@ -154,6 +121,7 @@ static void __init MP_bus_info(struct mp
+@@ -151,6 +123,7 @@ static void __init MP_bus_info(struct mp
} else
printk(KERN_WARNING "Unknown bustype %s - ignoring\n", str);
}
#ifdef CONFIG_X86_IO_APIC
-@@ -183,117 +151,111 @@ static void __init MP_ioapic_info(struct
+@@ -180,117 +153,111 @@ static void __init MP_ioapic_info(struct
if (bad_ioapic(m->mpc_apicaddr))
return;
+ return 6;
+ if (mp_irq->mp_dstirq != m->mpc_dstirq)
+ return 7;
-+
-+ return 0;
-+}
-static void __init smp_read_mpc_oem(struct mp_config_oemtable *oemtable,
- unsigned short oemsize)
++ return 0;
++}
++
+static void __init MP_intsrc_info(struct mpc_config_intsrc *m)
{
- int count = sizeof(*oemtable); /* the header size */
if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) {
printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n",
-@@ -316,19 +278,41 @@ static int __init smp_read_mpc(struct mp
+@@ -313,19 +280,41 @@ static int __init smp_read_mpc(struct mp
}
memcpy(oem, mpc->mpc_oem, 8);
oem[8] = 0;
/* save the local APIC address, it might be non-default */
if (!acpi_lapic)
mp_lapic_addr = mpc->mpc_lapic;
-@@ -336,12 +320,17 @@ static int __init smp_read_mpc(struct mp
+@@ -333,12 +322,17 @@ static int __init smp_read_mpc(struct mp
if (early)
return 1;
while (count < mpc->mpc_length) {
switch (*mpt) {
case MP_PROCESSOR:
-@@ -359,7 +348,9 @@ static int __init smp_read_mpc(struct mp
+@@ -356,7 +350,9 @@ static int __init smp_read_mpc(struct mp
{
struct mpc_config_bus *m =
(struct mpc_config_bus *)mpt;
mpt += sizeof(*m);
count += sizeof(*m);
break;
-@@ -405,10 +396,14 @@ static int __init smp_read_mpc(struct mp
+@@ -402,10 +398,14 @@ static int __init smp_read_mpc(struct mp
count = mpc->mpc_length;
break;
}
setup_apic_routing();
if (!num_processors)
printk(KERN_ERR "MPTABLE: no processors registered!\n");
-@@ -434,7 +429,7 @@ static void __init construct_default_ioi
+@@ -431,7 +431,7 @@ static void __init construct_default_ioi
intsrc.mpc_type = MP_INTSRC;
intsrc.mpc_irqflag = 0; /* conforming */
intsrc.mpc_srcbus = 0;
intsrc.mpc_irqtype = mp_INT;
-@@ -495,40 +490,11 @@ static void __init construct_default_ioi
+@@ -492,40 +492,11 @@ static void __init construct_default_ioi
MP_intsrc_info(&intsrc);
}
bus.mpc_type = MP_BUS;
bus.mpc_busid = 0;
-@@ -557,7 +523,6 @@ static inline void __init construct_defa
+@@ -554,7 +525,6 @@ static inline void __init construct_defa
MP_bus_info(&bus);
}
ioapic.mpc_type = MP_IOAPIC;
ioapic.mpc_apicid = 2;
ioapic.mpc_apicver = mpc_default_type > 4 ? 0x10 : 0x01;
-@@ -569,7 +534,42 @@ static inline void __init construct_defa
+@@ -566,7 +536,42 @@ static inline void __init construct_defa
* We set up most of the low 16 IO-APIC pins according to MPS rules.
*/
construct_default_ioirq_mptable(mpc_default_type);
lintsrc.mpc_type = MP_LINTSRC;
lintsrc.mpc_irqflag = 0; /* conforming */
lintsrc.mpc_srcbusid = 0;
-@@ -587,10 +587,14 @@ static struct intel_mp_floating *mpf_fou
+@@ -584,10 +589,14 @@ static struct intel_mp_floating *mpf_fou
/*
* Scan the memory blocks for an SMP configuration block.
*/
if (acpi_lapic && early)
return;
/*
-@@ -607,7 +611,7 @@ static void __init __get_smp_config(unsi
+@@ -604,7 +613,7 @@ static void __init __get_smp_config(unsi
printk(KERN_INFO "Intel MultiProcessor Specification v1.%d\n",
mpf->mpf_specification);
if (mpf->mpf_feature2 & (1 << 7)) {
printk(KERN_INFO " IMCR and PIC compatibility mode.\n");
pic_mode = 1;
-@@ -639,7 +643,9 @@ static void __init __get_smp_config(unsi
+@@ -635,8 +644,10 @@ static void __init __get_smp_config(unsi
+ * Read the physical hardware table. Anything here will
* override the defaults.
*/
- if (!smp_read_mpc(isa_bus_to_virt(mpf->mpf_physptr), early)) {
+- if (!smp_read_mpc(isa_bus_to_virt(mpf->mpf_physptr), early)) {
++ if (!smp_read_mpc(_bus_to_virt(mpf->mpf_physptr), early)) {
+#ifdef CONFIG_X86_LOCAL_APIC
smp_found_config = 0;
+#endif
printk(KERN_ERR
"BIOS bug, MP table errors detected!...\n");
printk(KERN_ERR "... disabling SMP support. "
-@@ -696,7 +702,8 @@ static int __init smp_scan_config(unsign
- unsigned int *bp = isa_bus_to_virt(base);
+@@ -690,10 +701,11 @@ void __init get_smp_config(void)
+ static int __init smp_scan_config(unsigned long base, unsigned long length,
+ unsigned reserve)
+ {
+- unsigned int *bp = isa_bus_to_virt(base);
++ unsigned int *bp = _bus_to_virt(base);
struct intel_mp_floating *mpf;
- Dprintk("Scan SMP from %p for %ld bytes.\n", bp, length);
BUILD_BUG_ON(sizeof(*mpf) != 16);
while (length > 0) {
-@@ -706,16 +713,22 @@ static int __init smp_scan_config(unsign
+@@ -703,16 +715,22 @@ static int __init smp_scan_config(unsign
!mpf_checksum((unsigned char *)bp, 16) &&
((mpf->mpf_specification == 1)
|| (mpf->mpf_specification == 4))) {
/*
* We cannot access to MPC table to compute
* table size yet, as only few megabytes from
-@@ -725,27 +738,18 @@ static int __init smp_scan_config(unsign
+@@ -722,27 +740,18 @@ static int __init smp_scan_config(unsign
* PAGE_SIZE from mpg->mpf_physptr yields BUG()
* in reserve_bootmem.
*/
}
#else
printk(KERN_INFO "found SMP MP-table at [%p] %08lx\n",
- mpf, ((void *)bp - isa_bus_to_virt(base)) + base);
- #endif
+- mpf, ((void *)bp - isa_bus_to_virt(base)) + base);
+-#endif
-#elif !defined(CONFIG_XEN)
- if (!reserve)
- return 1;
- if (mpf->mpf_physptr)
- reserve_bootmem_generic(mpf->mpf_physptr,
- PAGE_SIZE);
--#endif
++ mpf, ((void *)bp - _bus_to_virt(base)) + base);
+ #endif
- return 1;
+ return 1;
}
bp += 4;
length -= 16;
-@@ -753,10 +757,15 @@ static int __init smp_scan_config(unsign
+@@ -750,12 +759,16 @@ static int __init smp_scan_config(unsign
return 0;
}
{
#ifndef CONFIG_XEN
unsigned int address;
-+
+ #endif
+
+ if (x86_quirks->mach_find_smp_config) {
+ if (x86_quirks->mach_find_smp_config(reserve))
+ return;
+ }
- #endif
-
/*
-@@ -805,300 +814,301 @@ void __init find_smp_config(void)
+ * FIXME: Linux assumes you have 640K of base ram..
+ * this continues the error...
+@@ -802,300 +815,297 @@ void __init find_smp_config(void)
__find_smp_config(1);
}
-#ifndef CONFIG_XEN
- set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
-+ printk(KERN_INFO "OLD ");
++ apic_printk(APIC_VERBOSE, "OLD ");
+ print_MP_intsrc_info(m);
+ i = get_MP_intsrc_index(m);
+ if (i > 0) {
+ assign_to_mpc_intsrc(&mp_irqs[i], m);
-+ printk(KERN_INFO "NEW ");
++ apic_printk(APIC_VERBOSE, "NEW ");
+ print_mp_irq_info(&mp_irqs[i]);
+ } else if (!i) {
+ /* legacy, do nothing */
+ continue;
+
+ if (nr_m_spare > 0) {
-+ printk(KERN_INFO "*NEW* found ");
++ apic_printk(APIC_VERBOSE, "*NEW* found\n");
+ nr_m_spare--;
+ assign_to_mpc_intsrc(&mp_irqs[i], m_spare[nr_m_spare]);
+ m_spare[nr_m_spare] = NULL;
+ alloc_mptable = 1;
+ if (!p)
+ return 0;
-+ mpc_new_length = PAGE_SIZE << get_order(memparse(p, &p));
++ mpc_new_length = memparse(p, &p);
+ return 0;
}
+early_param("alloc_mptable", parse_alloc_mptable_opt);
- */
- mp_bus_id_to_type[MP_ISA_BUS] = MP_BUS_ISA;
+ if (enable_update_mptable && alloc_mptable) {
-+ u64 startt = PAGE_SIZE;
++ u64 startt = 0;
+#ifdef CONFIG_X86_TRAMPOLINE
+ startt = TRAMPOLINE_BASE;
#endif
- intsrc.mpc_dstirq = i;
-
- MP_intsrc_info(&intsrc);
-+ mpc_new_phys = early_reserve_e820(startt, mpc_new_length,
-+ mpc_new_length);
++ mpc_new_phys = early_reserve_e820(startt, mpc_new_length, 4);
}
}
- /* Don't set up the ACPI SCI because it's already set up */
- if (acpi_gbl_FADT.sci_interrupt == gsi)
- return gsi;
-+ mpc = isa_bus_to_virt(mpf->mpf_physptr);
++ mpc = _bus_to_virt(mpf->mpf_physptr);
- ioapic = mp_find_ioapic(gsi);
- if (ioapic < 0) {
+ return 0;
- ioapic_pin = gsi - mp_ioapic_routing[ioapic].gsi_base;
-+ printk(KERN_INFO "mpf: %lx\n", virt_to_phys(mpf));
++ printk(KERN_INFO "mpf: %lx\n", (long)arbitrary_virt_to_machine(mpf));
+ printk(KERN_INFO "mpf_physptr: %x\n", mpf->mpf_physptr);
-#ifndef CONFIG_X86_32
-#else
- return gsi;
-#endif
-+ if (xen_create_contiguous_region((unsigned long)phys_to_virt(mpc_new_phys),
-+ get_order(mpc_new_length), 32))
-+ BUG();
+ mpc_new_bus = phys_to_machine(mpc_new_phys);
+ mpf->mpf_physptr = mpc_new_bus;
+ mpc_new = phys_to_virt(mpc_new_phys);
-#endif /* CONFIG_X86_IO_APIC */
-#endif /* CONFIG_ACPI */
+late_initcall(update_mp_table);
-Index: head-2008-12-01/arch/x86/kernel/nmi.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/nmi.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/nmi.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/nmi.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/arch/x86/kernel/nmi.c 2009-06-04 10:21:39.000000000 +0200
@@ -27,7 +27,9 @@
#include <linux/kdebug.h>
#include <linux/smp.h>
#ifdef CONFIG_X86_32
timer_ack = 0;
#endif
-Index: head-2008-12-01/arch/x86/kernel/pci-dma-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/pci-dma-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/pci-dma-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/pci-dma-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/pci-dma-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -5,13 +5,13 @@
#include <asm/proto.h>
no_iommu_init();
return 0;
-Index: head-2008-12-01/arch/x86/kernel/pci-nommu-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/pci-nommu-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/pci-nommu-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/pci-nommu-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/pci-nommu-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -79,18 +79,12 @@ gnttab_unmap_single(struct device *dev,
gnttab_dma_unmap_page(dma_addr);
}
};
void __init no_iommu_init(void)
-Index: head-2008-12-01/arch/x86/kernel/probe_roms_32.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/probe_roms_32.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/probe_roms_32.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/probe_roms_32.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/arch/x86/kernel/probe_roms_32.c 2009-06-04 10:21:39.000000000 +0200
@@ -99,6 +99,11 @@ void __init probe_roms(void)
unsigned char c;
int i;
if (romsignature(rom)) {
length = extension_rom_resource.end - extension_rom_resource.start + 1;
if (romchecksum(rom, length)) {
-Index: head-2008-12-01/arch/x86/kernel/process-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/process-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/process-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/process-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/process-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -6,6 +6,13 @@
#include <linux/sched.h>
#include <linux/module.h>
return -1;
boot_option_idle_override = 1;
-Index: head-2008-12-01/arch/x86/kernel/process_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/process_32-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/process_32-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/process_32-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/process_32-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -59,15 +59,11 @@
#include <asm/tlbflush.h>
#include <asm/cpu.h>
}
tick_nohz_restart_sched_tick();
preempt_enable_no_resched();
-Index: head-2008-12-01/arch/x86/kernel/process_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/process_64-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/process_64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/process_64-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/process_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -65,15 +65,6 @@ asmlinkage extern void ret_from_fork(voi
unsigned long kernel_thread_flags = CLONE_VM | CLONE_UNTRACED;
if (gsindex)
rdmsrl(MSR_KERNEL_GS_BASE, base);
else
-Index: head-2008-12-01/arch/x86/kernel/quirks-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/quirks-xen.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/quirks-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/quirks-xen.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/quirks-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -63,6 +63,7 @@ static enum {
ICH_FORCE_HPET_RESUME,
VT8237_FORCE_HPET_RESUME,
default:
break;
}
-Index: head-2008-12-01/arch/x86/kernel/setup-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/setup-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/setup-xen.c 2008-12-01 11:49:07.000000000 +0100
-@@ -1,141 +1,1147 @@
+--- sle11-2009-06-04.orig/arch/x86/kernel/setup-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/setup-xen.c 2009-06-04 10:21:39.000000000 +0200
+@@ -1,141 +1,1131 @@
-#include <linux/kernel.h>
+/*
+ * Copyright (C) 1995 Linus Torvalds
+EXPORT_SYMBOL(boot_cpu_data);
+#ifndef CONFIG_XEN
+static void set_mca_bus(int x)
- {
++{
+#ifdef CONFIG_MCA
+ MCA_bus = x;
+#endif
+#ifdef CONFIG_EDD_MODULE
+EXPORT_SYMBOL(edd);
+#endif
- #ifndef CONFIG_XEN
-- int cpu;
++#ifndef CONFIG_XEN
+/**
+ * copy_edd() - Copy the BIOS EDD information
+ * from boot_params into a safe place.
+#endif
+
+static void __init reserve_initrd(void)
-+{
-+#ifndef CONFIG_XEN
+ {
+ #ifndef CONFIG_XEN
+- int cpu;
+ u64 ramdisk_image = boot_params.hdr.ramdisk_image;
+ u64 ramdisk_size = boot_params.hdr.ramdisk_size;
+ u64 ramdisk_end = ramdisk_image + ramdisk_size;
+ u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT;
-
-- for_each_possible_cpu(cpu) {
-- per_cpu(x86_cpu_to_apicid, cpu) = x86_cpu_to_apicid_init[cpu];
-- per_cpu(x86_bios_cpu_apicid, cpu) =
-- x86_bios_cpu_apicid_init[cpu];
--#ifdef CONFIG_NUMA
-- per_cpu(x86_cpu_to_node_map, cpu) =
-- x86_cpu_to_node_map_init[cpu];
++
+ if (!boot_params.hdr.type_of_loader ||
+ !ramdisk_image || !ramdisk_size)
+ return; /* No initrd provided by bootloader */
+ unsigned long ramdisk_size = xen_start_info->mod_len;
+ unsigned long ramdisk_end = ramdisk_image + ramdisk_size;
+ unsigned long end_of_lowmem = max_low_pfn << PAGE_SHIFT;
-+
+
+- for_each_possible_cpu(cpu) {
+- per_cpu(x86_cpu_to_apicid, cpu) = x86_cpu_to_apicid_init[cpu];
+- per_cpu(x86_bios_cpu_apicid, cpu) =
+- x86_bios_cpu_apicid_init[cpu];
+-#ifdef CONFIG_NUMA
+- per_cpu(x86_cpu_to_node_map, cpu) =
+- x86_cpu_to_node_map_init[cpu];
+ if (!xen_start_info->mod_start || !ramdisk_size)
+ return; /* No initrd provided by bootloader */
#endif
+{
+}
+#endif /* CONFIG_BLK_DEV_INITRD */
-
--#ifdef CONFIG_HAVE_CPUMASK_OF_CPU_MAP
--cpumask_t *cpumask_of_cpu_map __read_mostly;
--EXPORT_SYMBOL(cpumask_of_cpu_map);
++
+static void __init parse_setup_data(void)
+{
+#ifndef CONFIG_XEN
+ struct setup_data *data;
+ u64 pa_data;
-+
+
+-#ifdef CONFIG_HAVE_CPUMASK_OF_CPU_MAP
+-cpumask_t *cpumask_of_cpu_map __read_mostly;
+-EXPORT_SYMBOL(cpumask_of_cpu_map);
+ if (boot_params.hdr.version < 0x0209)
+ return;
+ pa_data = boot_params.hdr.setup_data;
+ struct setup_data *data;
+ u64 pa_data;
+ int found = 0;
-
-- /* alloc_bootmem zeroes memory */
-- cpumask_of_cpu_map = alloc_bootmem_low(sizeof(cpumask_t) * nr_cpu_ids);
-- for (i = 0; i < nr_cpu_ids; i++)
-- cpu_set(i, cpumask_of_cpu_map[i]);
++
+ if (boot_params.hdr.version < 0x0209)
+ return;
+ pa_data = boot_params.hdr.setup_data;
+ }
+ if (!found)
+ return;
-+
+
+- /* alloc_bootmem zeroes memory */
+- cpumask_of_cpu_map = alloc_bootmem_low(sizeof(cpumask_t) * nr_cpu_ids);
+- for (i = 0; i < nr_cpu_ids; i++)
+- cpu_set(i, cpumask_of_cpu_map[i]);
+ sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
+ memcpy(&e820_saved, &e820, sizeof(struct e820map));
+ printk(KERN_INFO "extended physical RAM map:\n");
+
+struct x86_quirks *x86_quirks __initdata = &default_x86_quirks;
+
- /*
-- * Great future plan:
-- * Declare PDA itself and support (irqstack,tss,pgd) as per cpu data.
-- * Always point %gs to its beginning
++/*
+ * Determine if we were loaded by an EFI loader. If so, then we have also been
+ * passed the efi memmap, systab, etc., so we should use these data structures
+ * for initialization. Note, the efi init code path is determined by the
+ * global efi_enabled. This allows the same kernel image to be used on existing
+ * systems (with a traditional BIOS) as well as on EFI systems.
- */
--void __init setup_per_cpu_areas(void)
-+/*
++ */
+ /*
+- * Great future plan:
+- * Declare PDA itself and support (irqstack,tss,pgd) as per cpu data.
+- * Always point %gs to its beginning
+ * setup_arch - architecture-specific boot-time initializations
+ *
+ * Note: On x86_64, fixmaps are ready for use even before this is called.
-+ */
+ */
+-void __init setup_per_cpu_areas(void)
+
+void __init setup_arch(char **cmdline_p)
{
+ "EL32",
+#else
+ "EL64",
-+#endif
+ #endif
+- if (!ptr)
+- panic("Cannot allocate cpu data for CPU %d\n", i);
+ 4)) {
+ efi_enabled = 1;
+ efi_reserve_early();
+#ifndef CONFIG_XEN
+ if (!boot_params.hdr.root_flags)
+ root_mountflags &= ~MS_RDONLY;
- #endif
-- if (!ptr)
-- panic("Cannot allocate cpu data for CPU %d\n", i);
++#endif
+ init_mm.start_code = (unsigned long) _text;
+ init_mm.end_code = (unsigned long) _etext;
+ init_mm.end_data = (unsigned long) _edata;
+#endif
+
+ /* max_pfn_mapped is updated here */
-+#ifdef CONFIG_X86_64_XEN
-+ /*
-+ * Due to the way initial table space gets calculated on Xen, we have
-+ * to call init_memory_mapping() with the larger end address first.
-+ */
-+ if (max_pfn > max_low_pfn)
-+ max_pfn_mapped = init_memory_mapping(1UL<<32,
-+ max_pfn<<PAGE_SHIFT);
-+ max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
-+ if (max_pfn > max_low_pfn)
-+ /* can we preserve max_low_pfn ?*/
-+ max_low_pfn = max_pfn;
-+ else
-+ max_pfn_mapped = max_low_pfn_mapped;
-+#else
+ max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
+ max_pfn_mapped = max_low_pfn_mapped;
+
+ max_low_pfn = max_pfn;
}
+#endif
-+#endif
- nr_cpu_ids = highest_cpu + 1;
- printk(KERN_DEBUG "NR_CPUS: %d, nr_cpu_ids: %d\n", NR_CPUS, nr_cpu_ids);
+ return NOTIFY_DONE;
+}
+#endif /* !CONFIG_XEN */
-Index: head-2008-12-01/arch/x86/kernel/setup64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/setup64-xen.c 2008-12-01 11:44:55.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/setup64-xen.c 2009-03-16 16:38:05.000000000 +0100
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,370 +0,0 @@
-/*
- if (is_uv_system())
- uv_cpu_init();
-}
-Index: head-2008-12-01/arch/x86/kernel/setup_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/setup_32-xen.c 2008-12-01 11:44:55.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/setup_32-xen.c 2009-03-16 16:38:05.000000000 +0100
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,1151 +0,0 @@
-/*
-}
-
-subsys_initcall(request_standard_resources);
-Index: head-2008-12-01/arch/x86/kernel/setup_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/setup_64-xen.c 2008-12-01 11:44:55.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/setup_64-xen.c 2009-03-16 16:38:05.000000000 +0100
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,1433 +0,0 @@
-/*
- return 1;
-}
-__setup("clearcpuid=", setup_disablecpuid);
-Index: head-2008-12-01/arch/x86/kernel/setup_percpu-xen.c
-===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2008-12-01/arch/x86/kernel/setup_percpu-xen.c 2008-12-01 11:49:07.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/setup_percpu-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -0,0 +1,385 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+#endif /* X86_64_NUMA */
+
-Index: head-2008-12-01/arch/x86/kernel/smp-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/smp-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/smp-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/smp-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/smp-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -121,132 +121,14 @@ void xen_smp_send_reschedule(int cpu)
send_IPI_mask(cpumask_of_cpu(cpu), RESCHEDULE_VECTOR);
}
return IRQ_HANDLED;
}
-Index: head-2008-12-01/arch/x86/kernel/time_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/time_32-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/time_32-xen.c 2008-12-01 11:58:30.000000000 +0100
-@@ -470,7 +470,7 @@ irqreturn_t timer_interrupt(int irq, voi
+--- sle11-2009-06-04.orig/arch/x86/kernel/time_32-xen.c 2009-03-24 10:13:09.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/time_32-xen.c 2009-06-04 10:21:39.000000000 +0200
+@@ -468,7 +468,7 @@ irqreturn_t timer_interrupt(int irq, voi
/* Keep nmi watchdog up to date */
#ifdef __i386__
#else
add_pda(irq0_irqs, 1);
#endif
-@@ -748,9 +748,7 @@ void __init time_init(void)
+@@ -746,9 +746,7 @@ void __init time_init(void)
update_wallclock();
/* Cannot request_irq() until kmem is initialised. */
late_time_init = setup_cpu0_timer_irq;
-@@ -807,7 +805,8 @@ static void stop_hz_timer(void)
+@@ -805,7 +803,8 @@ static void stop_hz_timer(void)
/* Leave ourselves in tick mode if rcu or softirq or timer pending. */
if (rcu_needs_cpu(cpu) || local_softirq_pending() ||
cpu_clear(cpu, nohz_cpu_mask);
j = jiffies + 1;
}
-Index: head-2008-12-01/arch/x86/kernel/traps_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/traps_32-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/traps_32-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/traps_32-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/traps_32-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -1,5 +1,6 @@
/*
* Copyright (C) 1991, 1992 Linus Torvalds
unsigned long base = (kesp - uesp) & -THREAD_SIZE;
unsigned long new_kesp = kesp - base;
unsigned long lim_pages = (new_kesp | (THREAD_SIZE - 1)) >> PAGE_SHIFT;
-Index: head-2008-12-01/arch/x86/kernel/traps_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/traps_64-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/traps_64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/traps_64-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/traps_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -10,73 +10,56 @@
* 'Traps.c' handles hardware traps and faults after we have saved some
* state in 'entry.S'.
static int __init code_bytes_setup(char *s)
{
code_bytes = simple_strtoul(s, NULL, 0);
-Index: head-2008-12-01/arch/x86/kernel/vsyscall_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/kernel/vsyscall_64-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/kernel/vsyscall_64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/kernel/vsyscall_64-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/kernel/vsyscall_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -42,7 +42,8 @@
#include <asm/topology.h>
#include <asm/vgtod.h>
hotcpu_notifier(cpu_vsyscall_notifier, 0);
return 0;
}
-Index: head-2008-12-01/arch/x86/mach-xen/setup.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mach-xen/setup.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/mach-xen/setup.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mach-xen/setup.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mach-xen/setup.c 2009-06-04 10:21:39.000000000 +0200
@@ -17,6 +17,8 @@
#include <xen/interface/callback.h>
#include <xen/interface/memory.h>
}
+#endif
}
-Index: head-2008-12-01/arch/x86/mm/fault-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/fault-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/fault-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mm/fault-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mm/fault-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -10,6 +10,7 @@
#include <linux/string.h>
#include <linux/types.h>
/*
* We fault-in kernel-space virtual memory on-demand. The
-@@ -832,14 +837,10 @@ bad_area_nosemaphore:
+@@ -831,14 +836,10 @@ bad_area_nosemaphore:
if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) &&
printk_ratelimit()) {
printk(
print_vma_addr(" in ", regs->ip);
printk("\n");
}
-@@ -947,81 +948,45 @@ LIST_HEAD(pgd_list);
+@@ -946,81 +947,45 @@ LIST_HEAD(pgd_list);
void vmalloc_sync_all(void)
{
#ifdef CONFIG_X86_32
}
#endif
}
-Index: head-2008-12-01/arch/x86/mm/hypervisor.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/hypervisor.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/hypervisor.c 2008-12-01 11:49:07.000000000 +0100
-@@ -837,42 +837,9 @@ int write_ldt_entry(struct desc_struct *
+--- sle11-2009-06-04.orig/arch/x86/mm/hypervisor.c 2009-05-14 11:18:39.000000000 +0200
++++ sle11-2009-06-04/arch/x86/mm/hypervisor.c 2009-06-04 10:21:39.000000000 +0200
+@@ -709,6 +709,72 @@ void xen_destroy_contiguous_region(unsig
+ }
+ EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region);
+
++int __init early_create_contiguous_region(unsigned long pfn,
++ unsigned int order,
++ unsigned int address_bits)
++{
++ unsigned long *in_frames = discontig_frames, out_frame = pfn;
++ unsigned int i;
++ int rc, success;
++ struct xen_memory_exchange exchange = {
++ .in = {
++ .nr_extents = 1UL << order,
++ .extent_order = 0,
++ .domid = DOMID_SELF
++ },
++ .out = {
++ .nr_extents = 1,
++ .extent_order = order,
++ .address_bits = address_bits,
++ .domid = DOMID_SELF
++ }
++ };
++
++ if (xen_feature(XENFEAT_auto_translated_physmap))
++ return 0;
++
++ if (unlikely(order > MAX_CONTIG_ORDER))
++ return -ENOMEM;
++
++ for (i = 0; i < (1U << order); ++i) {
++ in_frames[i] = pfn_to_mfn(pfn + i);
++ set_phys_to_machine(pfn + i, INVALID_P2M_ENTRY);
++ }
++
++ set_xen_guest_handle(exchange.in.extent_start, in_frames);
++ set_xen_guest_handle(exchange.out.extent_start, &out_frame);
++
++ rc = HYPERVISOR_memory_op(XENMEM_exchange, &exchange);
++ success = (exchange.nr_exchanged == (1UL << order));
++ BUG_ON(!success && (exchange.nr_exchanged || !rc));
++ BUG_ON(success && rc);
++#if CONFIG_XEN_COMPAT <= 0x030002
++ if (unlikely(rc == -ENOSYS)) {
++ /* Compatibility when XENMEM_exchange is unavailable. */
++ if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
++ &exchange.in) != (1UL << order))
++ BUG();
++ success = (HYPERVISOR_memory_op(XENMEM_populate_physmap,
++ &exchange.out) == 1);
++ if (!success) {
++ for (i = 0; i < (1U << order); ++i)
++ in_frames[i] = pfn + i;
++ if (HYPERVISOR_memory_op(XENMEM_populate_physmap,
++ &exchange.in) != (1UL << order))
++ BUG();
++ }
++ }
++#endif
++
++ for (i = 0; i < (1U << order); ++i, ++out_frame) {
++ if (!success)
++ out_frame = in_frames[i];
++ set_phys_to_machine(pfn + i, out_frame);
++ }
++
++ return success ? 0 : -ENOMEM;
++}
++
+ static void undo_limit_pages(struct page *pages, unsigned int order)
+ {
+ BUG_ON(xen_feature(XENFEAT_auto_translated_physmap));
+@@ -875,42 +941,9 @@ int write_ldt_entry(struct desc_struct *
return HYPERVISOR_update_descriptor(mach_lp, *(const u64*)desc);
}
+ maddr_t mach_gp = virt_to_machine(gdt + entry);
+ return HYPERVISOR_update_descriptor(mach_gp, *(const u64*)desc);
}
-Index: head-2008-12-01/arch/x86/mm/init_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/init_32-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/init_32-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mm/init_32-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mm/init_32-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -54,6 +54,7 @@
unsigned int __VMALLOC_RESERVE = 128 << 20;
EXPORT_SYMBOL_GPL(__supported_pte_mask);
#ifdef CONFIG_X86_PAE
-@@ -528,42 +550,369 @@ static void __init set_nx(void)
+@@ -528,42 +550,364 @@ static void __init set_nx(void)
}
#endif
+ */
+ bootmap_size = bootmem_bootmap_pages(end_pfn)<<PAGE_SHIFT;
+ bootmap = find_e820_area(min_low_pfn<<PAGE_SHIFT,
-+ max_pfn_mapped<<PAGE_SHIFT, bootmap_size,
-+ PAGE_SIZE);
++ min(max_pfn_mapped, xen_start_info->nr_pages)<<PAGE_SHIFT,
++ bootmap_size, PAGE_SIZE);
+ if (bootmap == -1L)
+ panic("Cannot find bootmem map of size %ld\n", bootmap_size);
+ reserve_early(bootmap, bootmap + bootmap_size, "BOOTMAP");
+{
+ unsigned long start_pfn = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT)
+ + xen_start_info->nr_pt_frames;
-+ unsigned long start = start_pfn, va;
++ unsigned long start = start_pfn, va = (unsigned long)&_text;
+ pgd_t *pgd;
+ pud_t *pud;
+ pmd_t *pmd;
+ pte_t *pte;
+
-+ /* Kill mapping of low 1MB. */
-+ for (va = PAGE_OFFSET; va < (unsigned long)&_text; va += PAGE_SIZE)
-+ if (HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0))
-+ BUG();
-+
+ /* Ensure init mappings cover kernel text/data and initial tables. */
+ while (va < PAGE_OFFSET + (start_pfn << PAGE_SHIFT) + tables_space) {
+ pgd = pgd_offset_k(va);
}
/*
-@@ -598,7 +947,7 @@ static struct kcore_list kcore_mem, kcor
+@@ -598,7 +942,7 @@ static struct kcore_list kcore_mem, kcor
void __init mem_init(void)
{
int codesize, reservedpages, datasize, initsize;
unsigned long pfn;
pci_iommu_alloc();
-@@ -606,19 +955,6 @@ void __init mem_init(void)
+@@ -606,19 +950,6 @@ void __init mem_init(void)
#ifdef CONFIG_FLATMEM
BUG_ON(!mem_map);
#endif
/* this will put all low memory onto the freelists */
totalram_pages += free_all_bootmem();
/* XEN: init and count low-mem pages outside initial allocation. */
-@@ -636,7 +972,7 @@ void __init mem_init(void)
+@@ -636,7 +967,7 @@ void __init mem_init(void)
if (page_is_ram(tmp) && PageReserved(pfn_to_page(tmp)))
reservedpages++;
codesize = (unsigned long) &_etext - (unsigned long) &_text;
datasize = (unsigned long) &_edata - (unsigned long) &_etext;
-@@ -657,7 +993,6 @@ void __init mem_init(void)
+@@ -657,7 +988,6 @@ void __init mem_init(void)
(unsigned long) (totalhigh_pages << (PAGE_SHIFT-10))
);
printk(KERN_INFO "virtual kernel memory layout:\n"
" fixmap : 0x%08lx - 0x%08lx (%4ld kB)\n"
#ifdef CONFIG_HIGHMEM
-@@ -698,7 +1033,6 @@ void __init mem_init(void)
+@@ -698,7 +1028,6 @@ void __init mem_init(void)
#endif
BUG_ON(VMALLOC_START > VMALLOC_END);
BUG_ON((unsigned long)high_memory > VMALLOC_START);
if (boot_cpu_data.wp_works_ok < 0)
test_wp_bit();
-@@ -755,6 +1089,8 @@ void mark_rodata_ro(void)
+@@ -755,6 +1084,8 @@ void mark_rodata_ro(void)
unsigned long start = PFN_ALIGN(_text);
unsigned long size = PFN_ALIGN(_etext) - start;
set_pages_ro(virt_to_page(start), size >> PAGE_SHIFT);
printk(KERN_INFO "Write protecting the kernel text: %luk\n",
size >> 10);
-@@ -767,6 +1103,8 @@ void mark_rodata_ro(void)
+@@ -767,6 +1098,8 @@ void mark_rodata_ro(void)
printk(KERN_INFO "Testing CPA: write protecting again\n");
set_pages_ro(virt_to_page(start), size>>PAGE_SHIFT);
#endif
start += size;
size = (unsigned long)__end_rodata - start;
set_pages_ro(virt_to_page(start), size >> PAGE_SHIFT);
-@@ -829,3 +1167,9 @@ void free_initrd_mem(unsigned long start
+@@ -829,3 +1162,9 @@ void free_initrd_mem(unsigned long start
free_init_pages("initrd memory", start, end);
}
#endif
+{
+ return reserve_bootmem(phys, len, flags);
+}
-Index: head-2008-12-01/arch/x86/mm/init_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/init_64-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/init_64-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mm/init_64-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mm/init_64-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -21,6 +21,7 @@
#include <linux/swap.h>
#include <linux/smp.h>
#if CONFIG_XEN_COMPAT <= 0x030002
unsigned int __kernel_page_user;
EXPORT_SYMBOL(__kernel_page_user);
-@@ -60,12 +69,11 @@ EXPORT_SYMBOL(__kernel_page_user);
+@@ -60,13 +69,12 @@ EXPORT_SYMBOL(__kernel_page_user);
int after_bootmem;
DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
extern pmd_t level2_fixmap_pgt[PTRS_PER_PMD];
extern pte_t level1_fixmap_pgt[PTRS_PER_PTE];
+ #ifndef CONFIG_XEN
-int direct_gbpages __meminitdata
+int direct_gbpages
#ifdef CONFIG_DIRECT_GBPAGES
-}
-
static unsigned long __meminitdata table_start;
+-static unsigned long __meminitdata table_end;
+static unsigned long __meminitdata table_cur;
- static unsigned long __meminitdata table_end;
++static unsigned long __meminitdata table_top;
-static __init void *spp_getpage(void)
+/*
- else if (start_pfn < table_end) {
- ptr = __va(start_pfn << PAGE_SHIFT);
- start_pfn++;
-+ else if (table_cur < table_end) {
++ else if (table_cur < table_top) {
+ ptr = __va(table_cur << PAGE_SHIFT);
+ table_cur++;
memset(ptr, 0, PAGE_SIZE);
/*
* The head.S code sets up the kernel high mapping:
*
-@@ -352,33 +319,9 @@ void __init cleanup_highmap(void)
+@@ -352,63 +319,52 @@ void __init cleanup_highmap(void)
}
#endif
- }
-}
-
- static __meminit void *alloc_static_page(unsigned long *phys)
+-static __meminit void *alloc_static_page(unsigned long *phys)
++static __ref void *alloc_low_page(unsigned long *phys)
{
- unsigned long va = (start_pfn << PAGE_SHIFT) + __START_KERNEL_map;
-+ unsigned long va = (table_cur << PAGE_SHIFT) + __START_KERNEL_map;
++ unsigned long pfn;
++ void *adr;
if (after_bootmem) {
- void *adr = (void *)get_zeroed_page(GFP_ATOMIC);
-@@ -387,13 +330,12 @@ static __meminit void *alloc_static_page
+- void *adr = (void *)get_zeroed_page(GFP_ATOMIC);
++ adr = (void *)get_zeroed_page(GFP_ATOMIC);
+ *phys = __pa(adr);
+
return adr;
}
- memset((void *)va, 0, PAGE_SIZE);
- return (void *)va;
+ BUG_ON(!table_cur);
-+ *phys = table_cur++ << PAGE_SHIFT;
-+ return memset((void *)va, 0, PAGE_SIZE);
++ pfn = table_cur++;
++ if (pfn >= table_top)
++ panic("alloc_low_page: ran out of memory");
++
++ adr = early_ioremap(pfn_to_mfn(pfn) * PAGE_SIZE, PAGE_SIZE);
++ memset(adr, 0, PAGE_SIZE);
++ *phys = pfn * PAGE_SIZE;
++ return adr;
}
-#define PTE_SIZE PAGE_SIZE
-+#define unmap_low_page(p) ((void)(p))
++static __ref void unmap_low_page(void *adr)
++{
++ if (after_bootmem)
++ return;
++
++ early_iounmap(adr, PAGE_SIZE);
++}
static inline int __meminit make_readonly(unsigned long paddr)
{
-@@ -408,7 +350,7 @@ static inline int __meminit make_readonl
+ extern char __vsyscall_0;
+ int readonly = 0;
+
+- /* Make new page tables read-only. */
++ /* Make new page tables read-only on the first pass. */
+ if (!xen_feature(XENFEAT_writable_page_tables)
++ && !max_pfn_mapped
+ && (paddr >= (table_start << PAGE_SHIFT))
+- && (paddr < (table_end << PAGE_SHIFT)))
++ && (paddr < (table_top << PAGE_SHIFT)))
+ readonly = 1;
/* Make old page tables read-only. */
if (!xen_feature(XENFEAT_writable_page_tables)
&& (paddr >= (xen_start_info->pt_base - __START_KERNEL_map))
readonly = 1;
/*
-@@ -425,118 +367,129 @@ static inline int __meminit make_readonl
+@@ -425,118 +381,131 @@ static inline int __meminit make_readonl
return readonly;
}
+ unsigned pages = 0;
+ unsigned long last_map_addr = end;
+ int i;
++
++ pte_t *pte = pte_page + pte_index(addr);
++
++ for(i = pte_index(addr); i < PTRS_PER_PTE; i++, addr += PAGE_SIZE, pte++) {
++ unsigned long pteval = addr | __PAGE_KERNEL;
- for (i = 0; i < pmds; i++, addr += PMD_SIZE)
- set_pmd(pmd+i, __pmd(addr | __PAGE_KERNEL_LARGE_EXEC));
- return (void *)vaddr;
-continue_outer_loop:
- ;
-+ pte_t *pte = pte_page + pte_index(addr);
-+
-+ for(i = pte_index(addr); i < PTRS_PER_PTE; i++, addr += PAGE_SIZE, pte++) {
-+ unsigned long pteval = addr | __PAGE_KERNEL;
-+
-+ if (addr >= (after_bootmem
-+ ? end
-+ : xen_start_info->nr_pages << PAGE_SHIFT))
++ if (addr >= end ||
++ (!after_bootmem &&
++ (addr >> PAGE_SHIFT) >= xen_start_info->nr_pages))
+ break;
+
+ if (__pte_val(*pte))
- vaddr = (unsigned long)addr;
- pmds = ((vaddr & ~PMD_MASK) + size + ~PMD_MASK) / PMD_SIZE;
- pmd = level2_kernel_pgt + pmd_index(vaddr);
-+ pte_t *pte = (pte_t *)pmd_page_vaddr(*pmd);
-
+-
- for (i = 0; i < pmds; i++)
- pmd_clear(pmd + i);
--
++ pte_t *pte = (pte_t *)pmd_page_vaddr(*pmd);
+
- __flush_tlb_all();
-+ BUG_ON(!after_bootmem);
++ BUG_ON(!max_pfn_mapped);
+ return phys_pte_init(pte, address, end);
}
-#endif
+ continue;
}
+
-+ pte = alloc_static_page(&pte_phys);
++ pte = alloc_low_page(&pte_phys);
+ last_map_addr = phys_pte_init(pte, address, end);
+ unmap_low_page(pte);
+
if (!after_bootmem) {
- early_make_page_readonly(pte_save, XENFEAT_writable_page_tables);
- *pmd = __pmd(pte_phys | _KERNPG_TABLE);
-+ early_make_page_readonly(pte, XENFEAT_writable_page_tables);
++ if (max_pfn_mapped)
++ make_page_readonly(__va(pte_phys),
++ XENFEAT_writable_page_tables);
+ *pmd = __pmd(pte_phys | _PAGE_TABLE);
} else {
- make_page_readonly(pte_save, XENFEAT_writable_page_tables);
- spin_lock(&init_mm.page_table_lock);
- last_map_addr = phys_pmd_init(pmd, address, end);
- spin_unlock(&init_mm.page_table_lock);
-+ BUG_ON(!after_bootmem);
++ BUG_ON(!max_pfn_mapped);
+ last_map_addr = phys_pmd_init(pmd, address, end, page_size_mask);
__flush_tlb_all();
return last_map_addr;
unsigned long last_map_addr = end;
int i = pud_index(addr);
-@@ -550,29 +503,59 @@ phys_pud_init(pud_t *pud_page, unsigned
+@@ -550,29 +519,55 @@ phys_pud_init(pud_t *pud_page, unsigned
if (__pud_val(*pud)) {
if (!pud_large(*pud))
continue;
}
- pmd = alloc_static_page(&pmd_phys);
-+ last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask);
-+ unmap_low_page(pmd);
-
+- pmd = alloc_static_page(&pmd_phys);
+-
- spin_lock(&init_mm.page_table_lock);
- *pud = __pud(pmd_phys | _KERNPG_TABLE);
- last_map_addr = phys_pmd_init(pmd, addr, end);
- spin_unlock(&init_mm.page_table_lock);
--
++ pmd = alloc_low_page(&pmd_phys);
++ last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask);
++ unmap_low_page(pmd);
+
- early_make_page_readonly(pmd, XENFEAT_writable_page_tables);
+ if (!after_bootmem) {
-+ early_make_page_readonly(pmd, XENFEAT_writable_page_tables);
++ if (max_pfn_mapped)
++ make_page_readonly(__va(pmd_phys),
++ XENFEAT_writable_page_tables);
+ if (page_size_mask & (1 << PG_LEVEL_NUM))
+ xen_l3_entry_update(pud, __pud(pmd_phys | _PAGE_TABLE));
+ else
+{
+ pud_t *pud;
+
-+ if (!after_bootmem) {
-+ unsigned long addr = __pgd_val(*pgd), *page;
-+
-+ addr_to_page(addr, page);
-+ pud = (pud_t *)page;
-+ } else
-+ pud = (pud_t *)pgd_page_vaddr(*pgd);
++ pud = (pud_t *)pgd_page_vaddr(*pgd);
+
+ return phys_pud_init(pud, addr, end, page_size_mask | (1 << PG_LEVEL_NUM));
}
void __init xen_init_pt(void)
-@@ -654,7 +637,7 @@ void __init xen_init_pt(void)
- static void __init extend_init_mapping(unsigned long tables_space)
- {
- unsigned long va = __START_KERNEL_map;
-- unsigned long start = start_pfn;
-+ unsigned long start = table_cur;
- unsigned long phys, addr, *pte_page;
- pmd_t *pmd;
- pte_t *pte, new_pte;
-@@ -674,7 +657,7 @@ static void __init extend_init_mapping(u
-
- /* Ensure init mappings cover kernel text/data and initial tables. */
- while (va < (__START_KERNEL_map
-- + (start_pfn << PAGE_SHIFT)
-+ + (table_cur << PAGE_SHIFT)
- + tables_space)) {
- pmd = (pmd_t *)&page[pmd_index(va)];
- if (pmd_none(*pmd)) {
-@@ -706,9 +689,9 @@ static void __init extend_init_mapping(u
- va += PAGE_SIZE;
+@@ -651,86 +646,36 @@ void __init xen_init_pt(void)
}
-
-- if (start_pfn > start)
-+ if (table_cur > start)
- reserve_early(start << PAGE_SHIFT,
-- start_pfn << PAGE_SHIFT, "INITMAP");
-+ table_cur << PAGE_SHIFT, "INITMAP");
}
- static void __init find_early_table_space(unsigned long end)
-@@ -717,23 +700,25 @@ static void __init find_early_table_spac
-
- puds = (end + PUD_SIZE - 1) >> PUD_SHIFT;
- pmds = (end + PMD_SIZE - 1) >> PMD_SHIFT;
+-static void __init extend_init_mapping(unsigned long tables_space)
+-{
+- unsigned long va = __START_KERNEL_map;
+- unsigned long start = start_pfn;
+- unsigned long phys, addr, *pte_page;
+- pmd_t *pmd;
+- pte_t *pte, new_pte;
+- unsigned long *page = (unsigned long *)init_level4_pgt;
+-
+- addr = page[pgd_index(va)];
+- addr_to_page(addr, page);
+- addr = page[pud_index(va)];
+- addr_to_page(addr, page);
+-
+- /* Kill mapping of low 1MB. */
+- while (va < (unsigned long)&_text) {
+- if (HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0))
+- BUG();
+- va += PAGE_SIZE;
+- }
+-
+- /* Ensure init mappings cover kernel text/data and initial tables. */
+- while (va < (__START_KERNEL_map
+- + (start_pfn << PAGE_SHIFT)
+- + tables_space)) {
+- pmd = (pmd_t *)&page[pmd_index(va)];
+- if (pmd_none(*pmd)) {
+- pte_page = alloc_static_page(&phys);
+- early_make_page_readonly(
+- pte_page, XENFEAT_writable_page_tables);
+- set_pmd(pmd, __pmd(phys | _KERNPG_TABLE));
+- } else {
+- addr = page[pmd_index(va)];
+- addr_to_page(addr, pte_page);
+- }
+- pte = (pte_t *)&pte_page[pte_index(va)];
+- if (pte_none(*pte)) {
+- new_pte = pfn_pte(
+- (va - __START_KERNEL_map) >> PAGE_SHIFT,
+- __pgprot(_KERNPG_TABLE));
+- xen_l1_entry_update(pte, new_pte);
+- }
+- va += PAGE_SIZE;
+- }
+-
+- /* Finally, blow away any spurious initial mappings. */
+- while (1) {
+- pmd = (pmd_t *)&page[pmd_index(va)];
+- if (pmd_none(*pmd))
+- break;
+- if (HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0))
+- BUG();
+- va += PAGE_SIZE;
+- }
+-
+- if (start_pfn > start)
+- reserve_early(start << PAGE_SHIFT,
+- start_pfn << PAGE_SHIFT, "INITMAP");
+-}
+-
+ static void __init find_early_table_space(unsigned long end)
+ {
+ unsigned long puds, pmds, ptes, tables;
+
+ puds = (end + PUD_SIZE - 1) >> PUD_SHIFT;
++ tables = round_up(puds * sizeof(pud_t), PAGE_SIZE);
+ pmds = (end + PMD_SIZE - 1) >> PMD_SHIFT;
- ptes = (end + PTE_SIZE - 1) >> PAGE_SHIFT;
-+ ptes = (end + PAGE_SIZE - 1) >> PAGE_SHIFT;
++ tables += round_up(pmds * sizeof(pmd_t), PAGE_SIZE);
- tables = round_up(puds * 8, PAGE_SIZE) +
- round_up(pmds * 8, PAGE_SIZE) +
- round_up(ptes * 8, PAGE_SIZE);
+- tables = round_up(puds * 8, PAGE_SIZE) +
+- round_up(pmds * 8, PAGE_SIZE) +
+- round_up(ptes * 8, PAGE_SIZE);
++ ptes = (end + PAGE_SIZE - 1) >> PAGE_SHIFT;
++ tables += round_up(ptes * sizeof(pte_t), PAGE_SIZE);
-+ table_cur = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT) +
-+ xen_start_info->nr_pt_frames;
-+
- extend_init_mapping(tables);
+- extend_init_mapping(tables);
++ if (!table_top) {
++ table_start = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT) +
++ xen_start_info->nr_pt_frames;
++ table_cur = table_start;
++ } else {
++ /*
++ * [table_start, table_top) gets passed to reserve_early(),
++ * so we must not use table_cur here, despite continuing
++ * to allocate from there. table_cur possibly being below
++ * table_start is otoh not a problem.
++ */
++ table_start = table_top;
++ }
- table_start = start_pfn;
-+ table_start = table_cur;
- table_end = table_start + (tables>>PAGE_SHIFT);
+- table_end = table_start + (tables>>PAGE_SHIFT);
++ table_top = table_cur + (tables >> PAGE_SHIFT);
- early_printk("kernel direct mapping tables up to %lx @ %lx-%lx\n",
- end, table_start << PAGE_SHIFT,
- (table_start << PAGE_SHIFT) + tables);
+ printk(KERN_DEBUG "kernel direct mapping tables up to %lx @ %lx-%lx\n",
-+ end, table_start << PAGE_SHIFT, table_end << PAGE_SHIFT);
++ end, table_cur << PAGE_SHIFT, table_top << PAGE_SHIFT);
}
--static void __init xen_finish_init_mapping(void)
-+static void __init xen_finish_init_mapping(bool reserve)
- {
- unsigned long i, start, end;
+ static void __init xen_finish_init_mapping(void)
+@@ -752,18 +697,18 @@ static void __init xen_finish_init_mappi
+ xen_start_info->mod_start = (unsigned long)
+ __va(__pa(xen_start_info->mod_start));
-@@ -762,7 +747,8 @@ static void __init xen_finish_init_mappi
+- /* Destroy the Xen-created mappings beyond the kernel image as
+- * well as the temporary mappings created above. Prevents
+- * overlap with modules area (if init mapping is very big).
+- */
++ /* Destroy the Xen-created mappings beyond the kernel image. */
+ start = PAGE_ALIGN((unsigned long)_end);
+- end = __START_KERNEL_map + (table_end << PAGE_SHIFT);
++ end = __START_KERNEL_map + (table_start << PAGE_SHIFT);
+ for (; start < end; start += PAGE_SIZE)
if (HYPERVISOR_update_va_mapping(start, __pte_ma(0), 0))
BUG();
- /* Allocate pte's for initial fixmaps from 'start_pfn' allocator. */
+- table_end = ~0UL;
+ /* Allocate pte's for initial fixmaps from 'table_cur' allocator. */
-+ start = table_cur;
- table_end = ~0UL;
-
- /*
-@@ -789,8 +775,11 @@ static void __init xen_finish_init_mappi
++ start = table_top;
++ WARN(table_cur != start, "start=%lx cur=%lx top=%lx\n",
++ table_start, table_cur, start);
++ table_top = ~0UL;
+
+ /* Switch to the real shared_info page, and clear the dummy page. */
+ set_fixmap(FIX_SHARED_INFO, xen_start_info->shared_info);
+@@ -780,8 +725,7 @@ static void __init xen_finish_init_mappi
<< PAGE_SHIFT,
PAGE_KERNEL_RO);
- /* Disable the 'start_pfn' allocator. */
- table_end = start_pfn;
-+ /* Disable the 'table_cur' allocator. */
-+ table_end = table_cur;
-+ if (reserve && table_cur > start)
-+ reserve_early(start << PAGE_SHIFT,
-+ table_cur << PAGE_SHIFT, "FIXMAP");
++ table_top = max(table_cur, start);
}
static void __init init_gbpages(void)
-@@ -801,126 +790,89 @@ static void __init init_gbpages(void)
- direct_gbpages = 0;
+@@ -794,126 +738,91 @@ static void __init init_gbpages(void)
+ #endif
}
-#ifdef CONFIG_MEMTEST_BOOTPARAM
- default:
- return;
- }
-
+-
- incr = sizeof(unsigned long);
- start_phys_aligned = ALIGN(start_phys, incr);
- count = (size - (start_phys_aligned - start_phys))/incr;
- val, start_bad, last_bad + incr);
- reserve_early(start_bad, last_bad - start_bad, "BAD RAM");
- }
--
+
-}
--
++ unsigned long next, last_map_addr = end;
+
-static int memtest_pattern __initdata = CONFIG_MEMTEST_BOOTPARAM_VALUE;
--
++ start = (unsigned long)__va(start);
++ end = (unsigned long)__va(end);
+
-static int __init parse_memtest(char *arg)
-{
- if (arg)
- memtest_pattern = simple_strtoul(arg, NULL, 0);
- return 0;
-}
-+ unsigned long next, last_map_addr = end;
-
--early_param("memtest", parse_memtest);
-+ start = (unsigned long)__va(start);
-+ end = (unsigned long)__va(end);
-
--static void __init early_memtest(unsigned long start, unsigned long end)
--{
-- u64 t_start, t_size;
-- unsigned pattern;
+ for (; start < end; start = next) {
+ pgd_t *pgd = pgd_offset_k(start);
+ unsigned long pud_phys;
+ pud_t *pud;
-- if (!memtest_pattern)
-- return;
+-early_param("memtest", parse_memtest);
+ next = (start + PGDIR_SIZE) & PGDIR_MASK;
+ if (next > end)
+ next = end;
-- printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern);
-- for (pattern = 0; pattern < memtest_pattern; pattern++) {
-- t_start = start;
-- t_size = 0;
-- while (t_start < end) {
-- t_start = find_e820_area_size(t_start, &t_size, 1);
--
-- /* done ? */
-- if (t_start >= end)
-- break;
-- if (t_start + t_size > end)
-- t_size = end - t_start;
--
-- printk(KERN_CONT "\n %016llx - %016llx pattern %d",
-- (unsigned long long)t_start,
-- (unsigned long long)t_start + t_size, pattern);
+-static void __init early_memtest(unsigned long start, unsigned long end)
+-{
+- u64 t_start, t_size;
+- unsigned pattern;
+ if (__pgd_val(*pgd)) {
+ last_map_addr = phys_pud_update(pgd, __pa(start),
+ __pa(end), page_size_mask);
+ continue;
+ }
-- memtest(t_start, t_size, pattern);
-+ pud = alloc_static_page(&pud_phys);
+- if (!memtest_pattern)
+- return;
++ pud = alloc_low_page(&pud_phys);
+ last_map_addr = phys_pud_init(pud, __pa(start), __pa(next),
+ page_size_mask);
+ unmap_low_page(pud);
-
-- t_start += t_size;
++
+ if(!after_bootmem) {
-+ early_make_page_readonly(pud, XENFEAT_writable_page_tables);
++ if (max_pfn_mapped)
++ make_page_readonly(__va(pud_phys),
++ XENFEAT_writable_page_tables);
+ xen_l4_entry_update(pgd, __pgd(pud_phys | _PAGE_TABLE));
+ } else {
+ make_page_readonly(pud, XENFEAT_writable_page_tables);
+ spin_lock(&init_mm.page_table_lock);
+ pgd_populate(&init_mm, pgd, __va(pud_phys));
+ spin_unlock(&init_mm.page_table_lock);
- }
- }
-- printk(KERN_CONT "\n");
-+
++ }
++ }
+
+- printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern);
+- for (pattern = 0; pattern < memtest_pattern; pattern++) {
+- t_start = start;
+- t_size = 0;
+- while (t_start < end) {
+- t_start = find_e820_area_size(t_start, &t_size, 1);
+ return last_map_addr;
- }
--#else
--static void __init early_memtest(unsigned long start, unsigned long end)
-+
++}
+
+- /* done ? */
+- if (t_start >= end)
+- break;
+- if (t_start + t_size > end)
+- t_size = end - t_start;
+struct map_range {
+ unsigned long start;
+ unsigned long end;
+ unsigned page_size_mask;
+};
-+
+
+- printk(KERN_CONT "\n %016llx - %016llx pattern %d",
+- (unsigned long long)t_start,
+- (unsigned long long)t_start + t_size, pattern);
+#define NR_RANGE_MR 5
-+
+
+- memtest(t_start, t_size, pattern);
+static int save_mr(struct map_range *mr, int nr_range,
+ unsigned long start_pfn, unsigned long end_pfn,
+ unsigned long page_size_mask)
- {
-+
++{
+
+- t_start += t_size;
+- }
+ if (start_pfn < end_pfn) {
+ if (nr_range >= NR_RANGE_MR)
+ panic("run out of range for init_memory_mapping\n");
+ mr[nr_range].end = end_pfn<<PAGE_SHIFT;
+ mr[nr_range].page_size_mask = page_size_mask;
+ nr_range++;
-+ }
+ }
+- printk(KERN_CONT "\n");
+-}
+-#else
+-static void __init early_memtest(unsigned long start, unsigned long end)
+-{
+
+ return nr_range;
}
+ unsigned long last_map_addr = 0;
+ unsigned long page_size_mask = 0;
+ unsigned long start_pfn, end_pfn;
-+ bool first = !table_start;
++
+ struct map_range mr[NR_RANGE_MR];
+ int nr_range, i;
printk(KERN_INFO "init_memory_mapping\n");
-@@ -931,51 +883,123 @@ unsigned long __init_refok init_memory_m
+@@ -924,51 +833,150 @@ unsigned long __init_refok init_memory_m
* memory mapped. Unfortunately this is done currently before the
* nodes are discovered.
*/
+ if (!after_bootmem)
init_gbpages();
- find_early_table_space(end);
-- }
-
-- start = (unsigned long)__va(start);
-- end = (unsigned long)__va(end);
++
+ if (direct_gbpages)
+ page_size_mask |= 1 << PG_LEVEL_1G;
+ if (cpu_has_pse)
+ (nr_range - 1 - i) * sizeof (struct map_range));
+ mr[i--].start = old_start;
+ nr_range--;
-+ }
+ }
-- for (; start < end; start = next) {
-- pgd_t *pgd = pgd_offset_k(start);
-- unsigned long pud_phys;
-- pud_t *pud;
+- start = (unsigned long)__va(start);
+- end = (unsigned long)__va(end);
+ for (i = 0; i < nr_range; i++)
+ printk(KERN_DEBUG " %010lx - %010lx page %s\n",
+ mr[i].start, mr[i].end,
+ (mr[i].page_size_mask & (1<<PG_LEVEL_1G))?"1G":(
+ (mr[i].page_size_mask & (1<<PG_LEVEL_2M))?"2M":"4k"));
+- for (; start < end; start = next) {
+- pgd_t *pgd = pgd_offset_k(start);
+- unsigned long pud_phys;
+- pud_t *pud;
++ if (!after_bootmem)
++ find_early_table_space(end);
+
- if (after_bootmem)
- pud = pud_offset(pgd, start & PGDIR_MASK);
- else
- if (!after_bootmem) {
- early_make_page_readonly(pud, XENFEAT_writable_page_tables);
- set_pgd(pgd_offset_k(start), mk_kernel_pgd(pud_phys));
-- }
-- }
-+ if (first)
-+ find_early_table_space(end);
++ if (!start) {
++ unsigned long addr, va = __START_KERNEL_map;
++ unsigned long *page = (unsigned long *)init_level4_pgt;
++
++ /* Kill mapping of memory below _text. */
++ while (va < (unsigned long)&_text) {
++ if (HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0))
++ BUG();
++ va += PAGE_SIZE;
++ }
++
++ /* Blow away any spurious initial mappings. */
++ va = __START_KERNEL_map + (table_start << PAGE_SHIFT);
++ addr = page[pgd_index(va)];
++ addr_to_page(addr, page);
++ addr = page[pud_index(va)];
++ addr_to_page(addr, page);
++ while (pmd_index(va) | pte_index(va)) {
++ if (pmd_none(*(pmd_t *)&page[pmd_index(va)]))
++ break;
++ if (HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0))
++ BUG();
++ va += PAGE_SIZE;
+ }
+ }
- if (!after_bootmem) {
- BUG_ON(start_pfn != table_end);
-- xen_finish_init_mapping();
+ for (i = 0; i < nr_range; i++)
+ last_map_addr = kernel_physical_mapping_init(
+ mr[i].start, mr[i].end,
+ mr[i].page_size_mask);
+
-+ BUG_ON(table_cur > table_end);
-+ if (start < (table_start << PAGE_SHIFT)) {
-+ WARN_ON(table_cur != table_end);
-+ xen_finish_init_mapping(!first);
- }
++ BUG_ON(table_cur > table_top);
++ if (!start)
+ xen_finish_init_mapping();
+- }
++ else if (table_cur < table_top)
++ /* Disable the 'table_cur' allocator. */
++ table_top = table_cur;
__flush_tlb_all();
- if (!after_bootmem)
-+ if (first && table_end > table_start)
++ if (!after_bootmem && table_top > table_start)
reserve_early(table_start << PAGE_SHIFT,
- table_end << PAGE_SHIFT, "PGTABLE");
-
+- table_end << PAGE_SHIFT, "PGTABLE");
++ table_top << PAGE_SHIFT, "PGTABLE");
++
+ printk(KERN_INFO "last_map_addr: %lx end: %lx\n",
+ last_map_addr, end);
-+
+
if (!after_bootmem)
- early_memtest(start_phys, end_phys);
+ early_memtest(start, end);
void __init paging_init(void)
{
unsigned long max_zone_pfns[MAX_NR_ZONES];
-@@ -983,9 +1007,9 @@ void __init paging_init(void)
+@@ -976,9 +984,9 @@ void __init paging_init(void)
memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
max_zone_pfns[ZONE_DMA] = MAX_DMA_PFN;
max_zone_pfns[ZONE_DMA32] = MAX_DMA32_PFN;
sparse_init();
free_area_init_nodes(max_zone_pfns);
-@@ -1076,8 +1100,8 @@ void __init mem_init(void)
+@@ -1069,8 +1077,8 @@ void __init mem_init(void)
init_page_count(pfn_to_page(pfn));
totalram_pages++;
}
after_bootmem = 1;
codesize = (unsigned long) &_etext - (unsigned long) &_text;
-@@ -1096,7 +1120,7 @@ void __init mem_init(void)
+@@ -1089,7 +1097,7 @@ void __init mem_init(void)
printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, "
"%ldk reserved, %ldk data, %ldk init)\n",
(unsigned long) nr_free_pages() << (PAGE_SHIFT-10),
codesize >> 10,
reservedpages << (PAGE_SHIFT-10),
datasize >> 10,
-@@ -1159,6 +1183,13 @@ EXPORT_SYMBOL_GPL(rodata_test_data);
+@@ -1152,6 +1160,13 @@ EXPORT_SYMBOL_GPL(rodata_test_data);
void mark_rodata_ro(void)
{
unsigned long start = PFN_ALIGN(_stext), end = PFN_ALIGN(__end_rodata);
printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n",
(end - start) >> 10);
-@@ -1168,8 +1199,7 @@ void mark_rodata_ro(void)
+@@ -1161,8 +1176,7 @@ void mark_rodata_ro(void)
* The rodata section (but not the kernel text!) should also be
* not-executable.
*/
rodata_test();
-@@ -1191,24 +1221,26 @@ void free_initrd_mem(unsigned long start
+@@ -1184,24 +1198,26 @@ void free_initrd_mem(unsigned long start
}
#endif
}
/* Should check here against the e820 map to avoid double free */
-@@ -1216,9 +1248,13 @@ void __init reserve_bootmem_generic(unsi
+@@ -1209,9 +1225,13 @@ void __init reserve_bootmem_generic(unsi
nid = phys_to_nid(phys);
next_nid = phys_to_nid(phys + len - 1);
if (nid == next_nid)
#else
reserve_bootmem(phys, len, BOOTMEM_DEFAULT);
#endif
-@@ -1231,6 +1267,8 @@ void __init reserve_bootmem_generic(unsi
+@@ -1222,6 +1242,8 @@ void __init reserve_bootmem_generic(unsi
set_dma_reserve(dma_reserve);
}
#endif
}
int kern_addr_valid(unsigned long addr)
-@@ -1335,7 +1373,7 @@ vmemmap_populate(struct page *start_page
+@@ -1326,7 +1348,7 @@ vmemmap_populate(struct page *start_page
pmd_t *pmd;
for (; addr < end; addr = next) {
pgd = vmemmap_pgd_populate(addr, node);
if (!pgd)
-@@ -1345,33 +1383,51 @@ vmemmap_populate(struct page *start_page
+@@ -1336,33 +1358,51 @@ vmemmap_populate(struct page *start_page
if (!pud)
return -ENOMEM;
}
return 0;
}
-Index: head-2008-12-01/arch/x86/mm/ioremap-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/ioremap-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/ioremap-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mm/ioremap-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mm/ioremap-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -13,6 +13,7 @@
#include <linux/pfn.h>
#include <linux/slab.h>
#ifdef CONFIG_X86_32
static inline pmd_t * __init early_ioremap_pmd(unsigned long addr)
-@@ -693,10 +710,11 @@ static void __init __early_set_fixmap(en
+@@ -695,10 +712,11 @@ static void __init __early_set_fixmap(en
return;
}
pte = early_ioremap_pte(addr);
__flush_tlb_one(addr);
}
-@@ -724,13 +742,11 @@ static int __init check_early_ioremap_le
+@@ -726,13 +744,11 @@ static int __init check_early_ioremap_le
{
if (!early_ioremap_nested)
return 0;
return 1;
}
-Index: head-2008-12-01/arch/x86/mm/pageattr-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/pageattr-xen.c 2008-12-01 12:19:27.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/pageattr-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mm/pageattr-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mm/pageattr-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -34,6 +34,47 @@ struct cpa_data {
unsigned force_split : 1;
};
/*
* Get the target mfn from the original entry:
*/
-@@ -565,10 +617,9 @@ repeat:
+@@ -566,10 +618,9 @@ repeat:
if (!__pte_val(old_pte)) {
if (!primary)
return 0;
return -EINVAL;
}
-@@ -633,15 +684,24 @@ static int cpa_process_alias(struct cpa_
+@@ -634,15 +685,24 @@ static int cpa_process_alias(struct cpa_
struct cpa_data alias_cpa;
int ret = 0;
alias_cpa = *cpa;
alias_cpa.vaddr = (unsigned long) __va(cpa->pfn << PAGE_SHIFT);
-@@ -809,7 +869,7 @@ int set_memory_uc(unsigned long addr, in
+@@ -796,6 +856,51 @@ static inline int change_page_attr_clear
+ return change_page_attr_set_clr(addr, numpages, __pgprot(0), mask, 0);
+ }
+
++#ifdef CONFIG_XEN
++static void _free_memtype(u64 pstart, u64 pend)
++{
++ u64 pa = pstart &= __PHYSICAL_MASK;
++ u64 ma = phys_to_machine(pa);
++
++ while ((pa += PAGE_SIZE) < pend) {
++ if (phys_to_machine(pa) != ma + (pa - pstart)) {
++ free_memtype(ma, ma + (pa - pstart));
++ pstart = pa;
++ ma = phys_to_machine(pa);
++ }
++ }
++ free_memtype(ma, ma + (pend - pstart));
++}
++#define free_memtype _free_memtype
++
++static int _reserve_memtype(u64 pstart, u64 pend, unsigned long req_type)
++{
++ u64 pcur = pstart &= __PHYSICAL_MASK, pa = pcur;
++ u64 ma = phys_to_machine(pa);
++ int rc = 0;
++
++ while ((pa += PAGE_SIZE) < pend) {
++ if (phys_to_machine(pa) != ma + (pa - pcur)) {
++ rc = reserve_memtype(ma, ma + (pa - pcur),
++ req_type, NULL);
++ if (rc)
++ break;
++ pcur = pa;
++ ma = phys_to_machine(pa);
++ }
++ }
++ if (likely(!rc))
++ rc = reserve_memtype(ma, ma + (pend - pcur), req_type, NULL);
++
++ if (unlikely(!rc) && pstart < pcur)
++ _free_memtype(pstart, pcur);
++
++ return rc;
++}
++#define reserve_memtype(s, e, r, n) \
++ _reserve_memtype(s, e, BUILD_BUG_ON_ZERO(n) ?: (r))
++#endif
++
+ int _set_memory_uc(unsigned long addr, int numpages)
+ {
+ /*
+@@ -810,7 +915,7 @@ int set_memory_uc(unsigned long addr, in
/*
* for now UC MINUS. see comments in ioremap_nocache()
*/
_PAGE_CACHE_UC_MINUS, NULL))
return -EINVAL;
-@@ -825,10 +885,10 @@ int _set_memory_wc(unsigned long addr, i
+@@ -826,10 +931,10 @@ int _set_memory_wc(unsigned long addr, i
int set_memory_wc(unsigned long addr, int numpages)
{
_PAGE_CACHE_WC, NULL))
return -EINVAL;
-@@ -844,7 +904,7 @@ int _set_memory_wb(unsigned long addr, i
+@@ -845,7 +950,7 @@ int _set_memory_wb(unsigned long addr, i
int set_memory_wb(unsigned long addr, int numpages)
{
return _set_memory_wb(addr, numpages);
}
-Index: head-2008-12-01/arch/x86/mm/pat-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/pat-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/pat-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mm/pat-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mm/pat-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -12,6 +12,8 @@
#include <linux/gfp.h>
#include <linux/fs.h>
+late_initcall(pat_memtype_list_init);
+
+#endif /* CONFIG_DEBUG_FS */
-Index: head-2008-12-01/arch/x86/mm/pgtable-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/pgtable-xen.c 2008-12-01 11:46:22.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/pgtable-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mm/pgtable-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mm/pgtable-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -4,6 +4,7 @@
#include <asm/pgalloc.h>
#include <asm/pgtable.h>
void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd)
{
-@@ -596,16 +506,97 @@ void pud_populate(struct mm_struct *mm,
+@@ -596,16 +506,101 @@ void pud_populate(struct mm_struct *mm,
xen_tlb_flush();
}
#else /* !CONFIG_X86_PAE */
- return 1;
+ int i;
+
++#ifdef CONFIG_X86_PAE
+ if (contig)
+ xen_destroy_contiguous_region((unsigned long)mm->pgd, 0);
++#endif
+
+ for(i = 0; i < PREALLOCATED_PMDS; i++)
+ if (pmds[i])
+ }
+ }
+
++#ifdef CONFIG_X86_PAE
+ if (!xen_feature(XENFEAT_pae_pgdir_above_4gb))
+ xen_destroy_contiguous_region((unsigned long)pgdp, 0);
++#endif
+}
+
+static void pgd_prepopulate_pmd(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmds[])
#ifdef CONFIG_X86_64
/* We allocate two contiguous pages for kernel and user. */
-@@ -616,19 +607,52 @@ static void pgd_mop_up_pmds(struct mm_st
+@@ -616,19 +611,52 @@ static void pgd_mop_up_pmds(struct mm_st
pgd_t *pgd_alloc(struct mm_struct *mm)
{
}
void pgd_free(struct mm_struct *mm, pgd_t *pgd)
-@@ -644,6 +668,7 @@ void pgd_free(struct mm_struct *mm, pgd_
+@@ -644,6 +672,7 @@ void pgd_free(struct mm_struct *mm, pgd_
pgd_dtor(pgd);
pgd_mop_up_pmds(mm, pgd);
free_pages((unsigned long)pgd, PGD_ORDER);
}
-@@ -685,7 +710,7 @@ int ptep_test_and_clear_young(struct vm_
+@@ -685,7 +714,7 @@ int ptep_test_and_clear_young(struct vm_
if (pte_young(*ptep))
ret = test_and_clear_bit(_PAGE_BIT_ACCESSED,
if (ret)
pte_update(vma->vm_mm, addr, ptep);
-@@ -707,3 +732,42 @@ int ptep_clear_flush_young(struct vm_are
+@@ -707,3 +736,42 @@ int ptep_clear_flush_young(struct vm_are
return young;
}
+ set_pte_vaddr(address, pte);
+ fixmaps_set++;
+}
-Index: head-2008-12-01/arch/x86/mm/pgtable_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/pgtable_32-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/pgtable_32-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/mm/pgtable_32-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/mm/pgtable_32-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -25,51 +25,49 @@
#include <xen/features.h>
#include <asm/hypervisor.h>
void make_lowmem_page_readonly(void *va, unsigned int feature)
{
pte_t *pte;
-Index: head-2008-12-01/arch/x86/pci/amd_bus.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/pci/amd_bus.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/arch/x86/pci/amd_bus.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/pci/amd_bus.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/arch/x86/pci/amd_bus.c 2009-06-04 10:21:39.000000000 +0200
@@ -607,6 +607,14 @@ static int __init pci_io_ecs_init(void)
for_each_online_cpu(cpu)
amd_cpu_notify(&amd_cpu_notifier, (unsigned long)CPU_ONLINE,
if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
return 0;
-Index: head-2008-12-01/arch/x86/pci/irq-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/pci/irq-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/pci/irq-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/pci/irq-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/pci/irq-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -11,8 +11,8 @@
#include <linux/slab.h>
#include <linux/interrupt.h>
}
return 0;
}
-Index: head-2008-12-01/arch/x86/vdso/Makefile
-===================================================================
---- head-2008-12-01.orig/arch/x86/vdso/Makefile 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/vdso/Makefile 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/vdso/Makefile 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/vdso/Makefile 2009-06-04 10:21:39.000000000 +0200
@@ -65,9 +65,7 @@ obj-$(VDSO32-y) += vdso32-syms.lds
vdso32.so-$(VDSO32-y) += int80
vdso32.so-$(CONFIG_COMPAT) += syscall
vdso32-images = $(vdso32.so-y:%=vdso32-%.so)
-Index: head-2008-12-01/arch/x86/vdso/vdso32.S
-===================================================================
---- head-2008-12-01.orig/arch/x86/vdso/vdso32.S 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/arch/x86/vdso/vdso32.S 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/vdso/vdso32.S 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/arch/x86/vdso/vdso32.S 2009-06-04 10:21:39.000000000 +0200
@@ -9,7 +9,7 @@ vdso32_int80_end:
.globl vdso32_syscall_start, vdso32_syscall_end
-#endif
-
__FINIT
-Index: head-2008-12-01/arch/x86/vdso/vdso32-setup-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/vdso/vdso32-setup-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/arch/x86/vdso/vdso32-setup-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/vdso/vdso32-setup-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/arch/x86/vdso/vdso32-setup-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -195,50 +195,28 @@ static __init void relocate_vdso(Elf32_E
}
}
+void __cpuinit syscall32_cpu_init(void)
{
- static const struct callback_register cstar = {
-+ static /*const*/ struct callback_register __cpuinitdata cstar = {
++ static const struct callback_register __cpuinitconst cstar = {
.type = CALLBACKTYPE_syscall32,
.address = (unsigned long)ia32_cstar_target
};
- static const struct callback_register sysenter = {
-+ static /*const*/ struct callback_register __cpuinitdata sysenter = {
++ static const struct callback_register __cpuinitconst sysenter = {
.type = CALLBACKTYPE_sysenter,
.address = (unsigned long)ia32_sysenter_target
};
+#define vdso32_syscall() (boot_cpu_has(X86_FEATURE_SYSCALL32))
extern asmlinkage void ia32pv_cstar_target(void);
- static /*const*/ struct callback_register __cpuinitdata cstar = {
+ static const struct callback_register __cpuinitconst cstar = {
@@ -265,13 +244,13 @@ void __cpuinit enable_sep_cpu(void)
.address = { __KERNEL_CS, (unsigned long)ia32pv_sysenter_target },
};
}
memcpy(syscall_page, vsyscall, vsyscall_len);
-Index: head-2008-12-01/arch/x86/xen/Kconfig
-===================================================================
---- head-2008-12-01.orig/arch/x86/xen/Kconfig 2008-12-01 11:36:47.000000000 +0100
-+++ head-2008-12-01/arch/x86/xen/Kconfig 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/arch/x86/xen/Kconfig 2009-02-16 16:17:21.000000000 +0100
++++ sle11-2009-06-04/arch/x86/xen/Kconfig 2009-06-04 10:21:39.000000000 +0200
@@ -17,7 +17,7 @@ config XEN_MAX_DOMAIN_MEMORY
int "Maximum allowed size of a domain in gigabytes"
default 8 if X86_32
+ depends on PARAVIRT_XEN && PM
default y
\ No newline at end of file
-Index: head-2008-12-01/drivers/acpi/processor_core.c
-===================================================================
---- head-2008-12-01.orig/drivers/acpi/processor_core.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/acpi/processor_core.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/acpi/processor_core.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/acpi/processor_core.c 2009-06-04 10:21:39.000000000 +0200
@@ -721,9 +721,11 @@ static int __cpuinit acpi_processor_star
if (result)
goto end;
acpi_processor_remove_fs(device);
-Index: head-2008-12-01/drivers/char/tpm/tpm_vtpm.c
-===================================================================
---- head-2008-12-01.orig/drivers/char/tpm/tpm_vtpm.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/drivers/char/tpm/tpm_vtpm.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/char/tpm/tpm_vtpm.c 2009-02-16 15:58:14.000000000 +0100
++++ sle11-2009-06-04/drivers/char/tpm/tpm_vtpm.c 2009-06-04 10:21:39.000000000 +0200
@@ -347,7 +347,7 @@ static int _vtpm_send_queued(struct tpm_
{
int rc;
unsigned char buffer[1];
struct vtpm_state *vtpms;
vtpms = (struct vtpm_state *)chip_get_private(chip);
-Index: head-2008-12-01/drivers/misc/Kconfig
-===================================================================
---- head-2008-12-01.orig/drivers/misc/Kconfig 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/drivers/misc/Kconfig 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/misc/Kconfig 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/drivers/misc/Kconfig 2009-06-04 10:21:39.000000000 +0200
@@ -438,7 +438,7 @@ config ENCLOSURE_SERVICES
config SGI_XP
tristate "Support communication between SGI SSIs"
default n
select MMU_NOTIFIER
---help---
-Index: head-2008-12-01/drivers/pci/msi-xen.c
-===================================================================
---- head-2008-12-01.orig/drivers/pci/msi-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/pci/msi-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/pci/msi-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/pci/msi-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -90,12 +90,10 @@ arch_teardown_msi_irqs(struct pci_dev *d
}
#endif
static void msix_set_enable(struct pci_dev *dev, int enable)
{
int pos;
-@@ -573,9 +576,8 @@ int pci_enable_msi(struct pci_dev* dev)
+@@ -568,9 +571,8 @@ int pci_enable_msi(struct pci_dev* dev)
/* Check whether driver already requested for MSI-X irqs */
if (dev->msix_enabled) {
return -EINVAL;
}
-@@ -707,9 +709,8 @@ int pci_enable_msix(struct pci_dev* dev,
+@@ -702,9 +704,8 @@ int pci_enable_msix(struct pci_dev* dev,
temp = dev->irq;
/* Check whether driver already requested for MSI vector */
if (dev->msi_enabled) {
return -EINVAL;
}
-Index: head-2008-12-01/drivers/pci/quirks.c
-===================================================================
---- head-2008-12-01.orig/drivers/pci/quirks.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/drivers/pci/quirks.c 2008-12-01 11:49:07.000000000 +0100
-@@ -42,9 +42,7 @@ static void __devinit quirk_release_reso
+--- sle11-2009-06-04.orig/drivers/pci/quirks.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/drivers/pci/quirks.c 2009-06-04 10:21:39.000000000 +0200
+@@ -44,9 +44,8 @@ static void __devinit quirk_release_reso
/* PCI Host Bridge isn't a target device */
return;
}
- printk(KERN_INFO
-- "PCI: Disable device and release resources [%s].\n",
+- "PCI: Disable memory decoding and release memory resources [%s].\n",
- pci_name(dev));
-+ dev_info(&dev->dev, "disable device and release resources\n");
- pci_disable_device(dev);
-
- for (i=0; i < PCI_NUM_RESOURCES; i++) {
-Index: head-2008-12-01/drivers/pci/setup-res.c
-===================================================================
---- head-2008-12-01.orig/drivers/pci/setup-res.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/drivers/pci/setup-res.c 2008-12-01 11:50:17.000000000 +0100
++ dev_info(&dev->dev,
++ "disable memory decoding and release memory resources\n");
+ pci_read_config_word(dev, PCI_COMMAND, &command);
+ command &= ~PCI_COMMAND_MEMORY;
+ pci_write_config_word(dev, PCI_COMMAND, command);
+--- sle11-2009-06-04.orig/drivers/pci/setup-res.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/drivers/pci/setup-res.c 2009-06-04 10:21:39.000000000 +0200
@@ -129,7 +129,7 @@ int pci_claim_resource(struct pci_dev *d
#ifdef CONFIG_PCI_REASSIGN
void pci_disable_bridge_window(struct pci_dev *dev)
(unsigned long long)res->start,
(unsigned long long)res->end);
#endif
-Index: head-2008-12-01/drivers/xen/Makefile
-===================================================================
---- head-2008-12-01.orig/drivers/xen/Makefile 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/Makefile 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/Makefile 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/Makefile 2009-06-04 10:21:39.000000000 +0200
@@ -1,4 +1,4 @@
-obj-$(CONFIG_PARAVIRT_XEN) += grant-table.o features.o events.o
+obj-$(CONFIG_PARAVIRT_XEN) += grant-table.o features.o events.o manage.o
xen-xencomm-$(CONFIG_PARAVIRT_XEN) := xencomm.o
xen-balloon-$(CONFIG_PARAVIRT_XEN) := balloon.o
-Index: head-2008-12-01/drivers/xen/balloon/sysfs.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/balloon/sysfs.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/drivers/xen/balloon/sysfs.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/balloon/sysfs.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/balloon/sysfs.c 2009-06-04 10:21:39.000000000 +0200
@@ -45,6 +45,7 @@
#define BALLOON_SHOW(name, format, args...) \
{
char memstring[64], *endchar;
unsigned long long target_bytes;
-Index: head-2008-12-01/drivers/xen/blktap/blktap.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/blktap/blktap.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/blktap/blktap.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/blktap/blktap.c 2009-04-20 11:40:14.000000000 +0200
++++ sle11-2009-06-04/drivers/xen/blktap/blktap.c 2009-06-04 10:21:39.000000000 +0200
@@ -54,6 +54,7 @@
#include <linux/gfp.h>
#include <linux/poll.h>
#include <asm/tlbflush.h>
#define MAX_TAP_DEV 256 /*the maximum number of tapdisk ring devices */
-@@ -483,7 +484,7 @@ found:
+@@ -498,7 +499,7 @@ found:
if ((class = get_xen_class()) != NULL)
device_create(class, NULL, MKDEV(blktap_major, minor),
}
out:
-@@ -1686,7 +1687,8 @@ static int __init blkif_init(void)
+@@ -1683,7 +1684,8 @@ static int __init blkif_init(void)
* We only create the device when a request of a new device is
* made.
*/
} else {
/* this is bad, but not fatal */
WPRINTK("blktap: sysfs xen_class not created\n");
-Index: head-2008-12-01/drivers/xen/char/mem.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/char/mem.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/char/mem.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/char/mem.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/char/mem.c 2009-06-04 10:21:39.000000000 +0200
@@ -35,7 +35,7 @@ static inline int uncached_access(struct
static inline int range_is_allowed(unsigned long pfn, unsigned long size)
};
static int xen_mmap_mem(struct file * file, struct vm_area_struct * vma)
-Index: head-2008-12-01/drivers/xen/console/console.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/console/console.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/console/console.c 2008-12-01 11:49:07.000000000 +0100
-@@ -416,9 +416,7 @@ static void __xencons_tx_flush(void)
+--- sle11-2009-06-04.orig/drivers/xen/console/console.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/console/console.c 2009-06-04 10:21:39.000000000 +0200
+@@ -432,9 +432,7 @@ static void __xencons_tx_flush(void)
if (work_done && (xencons_tty != NULL)) {
wake_up_interruptible(&xencons_tty->write_wait);
}
}
-@@ -619,8 +617,8 @@ static void xencons_close(struct tty_str
+@@ -635,8 +633,8 @@ static void xencons_close(struct tty_str
tty->closing = 1;
tty_wait_until_sent(tty, 0);
tty_driver_flush_buffer(tty);
tty->closing = 0;
spin_lock_irqsave(&xencons_lock, flags);
xencons_tty = NULL;
-Index: head-2008-12-01/drivers/xen/core/evtchn.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/core/evtchn.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/drivers/xen/core/evtchn.c 2008-12-03 15:53:53.000000000 +0100
-@@ -744,9 +744,9 @@ static struct irq_chip dynirq_chip = {
+--- sle11-2009-06-04.orig/drivers/xen/core/evtchn.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/core/evtchn.c 2009-06-04 10:21:39.000000000 +0200
+@@ -746,8 +746,9 @@ static struct irq_chip dynirq_chip = {
};
/* Bitmap indicating which PIRQs require Xen to be notified on unmask. */
-static int pirq_eoi_does_unmask;
+static bool pirq_eoi_does_unmask;
- static DECLARE_BITMAP(pirq_needs_eoi, ALIGN(NR_PIRQS, PAGE_SIZE * 8))
-- __attribute__ ((__section__(".bss.page_aligned"), __aligned__(PAGE_SIZE)));
-+ __page_aligned_bss;
+ static unsigned long *pirq_needs_eoi;
++static DECLARE_BITMAP(probing_pirq, NR_PIRQS);
static void pirq_unmask_and_notify(unsigned int evtchn, unsigned int irq)
{
-@@ -1002,6 +1002,7 @@ void xen_poll_irq(int irq)
+@@ -794,25 +795,31 @@ static inline void pirq_query_unmask(int
+ set_bit(irq - PIRQ_BASE, pirq_needs_eoi);
+ }
+
+-/*
+- * On startup, if there is no action associated with the IRQ then we are
+- * probing. In this case we should not share with others as it will confuse us.
+- */
+-#define probing_irq(_irq) (irq_desc[(_irq)].action == NULL)
++static int set_type_pirq(unsigned int irq, unsigned int type)
++{
++ if (type != IRQ_TYPE_PROBE)
++ return -EINVAL;
++ set_bit(irq - PIRQ_BASE, probing_pirq);
++ return 0;
++}
+
+ static unsigned int startup_pirq(unsigned int irq)
+ {
+ struct evtchn_bind_pirq bind_pirq;
+ int evtchn = evtchn_from_irq(irq);
+
+- if (VALID_EVTCHN(evtchn))
++ if (VALID_EVTCHN(evtchn)) {
++ clear_bit(irq - PIRQ_BASE, probing_pirq);
+ goto out;
++ }
+
+ bind_pirq.pirq = evtchn_get_xen_pirq(irq);
+ /* NB. We are happy to share unless we are probing. */
+- bind_pirq.flags = probing_irq(irq) ? 0 : BIND_PIRQ__WILL_SHARE;
++ bind_pirq.flags = test_and_clear_bit(irq - PIRQ_BASE, probing_pirq)
++ || (irq_desc[irq].status & IRQ_AUTODETECT)
++ ? 0 : BIND_PIRQ__WILL_SHARE;
+ if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &bind_pirq) != 0) {
+- if (!probing_irq(irq))
++ if (bind_pirq.flags)
+ printk(KERN_INFO "Failed to obtain physical IRQ %d\n",
+ irq);
+ return 0;
+@@ -891,6 +898,7 @@ static struct irq_chip pirq_chip = {
+ .mask_ack = ack_pirq,
+ .ack = ack_pirq,
+ .end = end_pirq,
++ .set_type = set_type_pirq,
+ #ifdef CONFIG_SMP
+ .set_affinity = set_affinity_irq,
+ #endif
+@@ -1003,6 +1011,7 @@ void xen_poll_irq(int irq)
BUG();
}
static void restore_cpu_virqs(unsigned int cpu)
{
struct evtchn_bind_virq bind_virq;
-@@ -1094,6 +1095,7 @@ void irq_resume(void)
+@@ -1095,6 +1104,7 @@ void irq_resume(void)
}
}
#if defined(CONFIG_X86_IO_APIC)
#define identity_mapped_irq(irq) (!IO_APIC_IRQ((irq) - PIRQ_BASE))
-@@ -1175,7 +1177,7 @@ void __init xen_init_IRQ(void)
- BUG_ON(!bitmap_empty(pirq_needs_eoi, PAGE_SIZE * 8));
- eoi_mfn.mfn = virt_to_bus(pirq_needs_eoi) >> PAGE_SHIFT;
- if (HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_mfn, &eoi_mfn) == 0)
+@@ -1177,7 +1187,7 @@ void __init xen_init_IRQ(void)
+ * BITS_TO_LONGS(ALIGN(NR_PIRQS, PAGE_SIZE * 8)));
+ eoi_gmfn.gmfn = virt_to_machine(pirq_needs_eoi) >> PAGE_SHIFT;
+ if (HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn, &eoi_gmfn) == 0)
- pirq_eoi_does_unmask = 1;
+ pirq_eoi_does_unmask = true;
/* No event channels are 'live' right now. */
for (i = 0; i < NR_EVENT_CHANNELS; i++)
-Index: head-2008-12-01/drivers/xen/core/gnttab.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/core/gnttab.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/drivers/xen/core/gnttab.c 2008-12-02 09:26:17.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/core/gnttab.c 2008-12-01 11:25:57.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/core/gnttab.c 2009-06-04 10:21:39.000000000 +0200
@@ -449,6 +449,7 @@ static int map_pte_fn(pte_t *pte, struct
return 0;
}
return 0;
ini_nomem:
-Index: head-2008-12-01/drivers/xen/core/machine_kexec.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/core/machine_kexec.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/core/machine_kexec.c 2008-12-01 11:49:07.000000000 +0100
-@@ -90,7 +90,7 @@ void __init xen_machine_kexec_setup_reso
+--- sle11-2009-06-04.orig/drivers/xen/core/machine_kexec.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/core/machine_kexec.c 2009-06-04 10:21:39.000000000 +0200
+@@ -91,7 +91,7 @@ void __init xen_machine_kexec_setup_reso
xen_hypervisor_res.start = range.start;
xen_hypervisor_res.end = range.start + range.size - 1;
xen_hypervisor_res.flags = IORESOURCE_BUSY | IORESOURCE_MEM;
insert_resource(&iomem_resource, &xen_hypervisor_res);
#endif
-@@ -105,7 +105,7 @@ void __init xen_machine_kexec_setup_reso
+@@ -106,7 +106,7 @@ void __init xen_machine_kexec_setup_reso
if (range.size) {
crashk_res.start = range.start;
crashk_res.end = range.start + range.size - 1;
insert_resource(&iomem_resource, &crashk_res);
#endif
}
-@@ -152,7 +152,7 @@ void __init xen_machine_kexec_setup_reso
+@@ -160,7 +160,7 @@ void __init xen_machine_kexec_setup_reso
return;
}
void __init xen_machine_kexec_register_resources(struct resource *res)
{
request_resource(res, &xen_hypervisor_res);
-Index: head-2008-12-01/drivers/xen/core/machine_reboot.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/core/machine_reboot.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/core/machine_reboot.c 2008-12-01 11:49:07.000000000 +0100
-@@ -65,6 +65,7 @@ EXPORT_SYMBOL(machine_restart);
+--- sle11-2009-06-04.orig/drivers/xen/core/machine_reboot.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/drivers/xen/core/machine_reboot.c 2009-06-04 10:21:39.000000000 +0200
+@@ -57,6 +57,7 @@ EXPORT_SYMBOL(machine_restart);
EXPORT_SYMBOL(machine_halt);
EXPORT_SYMBOL(machine_power_off);
static void pre_suspend(void)
{
HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
-@@ -119,6 +120,7 @@ static void post_suspend(int suspend_can
+@@ -111,6 +112,7 @@ static void post_suspend(int suspend_can
HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list_list =
virt_to_mfn(pfn_to_mfn_frame_list_list);
}
#else /* !(defined(__i386__) || defined(__x86_64__)) */
-@@ -137,6 +139,7 @@ static void post_suspend(int suspend_can
+@@ -129,6 +131,7 @@ static void post_suspend(int suspend_can
#endif
struct suspend {
int fast_suspend;
void (*resume_notifier)(int);
-@@ -230,7 +233,8 @@ int __xen_suspend(int fast_suspend, void
+@@ -222,7 +225,8 @@ int __xen_suspend(int fast_suspend, void
if (fast_suspend) {
xenbus_suspend();
if (err < 0)
xenbus_suspend_cancel();
} else {
-@@ -253,3 +257,4 @@ int __xen_suspend(int fast_suspend, void
+@@ -245,3 +249,4 @@ int __xen_suspend(int fast_suspend, void
return 0;
}
+#endif
-Index: head-2008-12-01/drivers/xen/core/reboot.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/core/reboot.c 2008-12-01 11:36:47.000000000 +0100
-+++ head-2008-12-01/drivers/xen/core/reboot.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/core/reboot.c 2009-02-16 16:17:21.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/core/reboot.c 2009-06-04 10:21:39.000000000 +0200
@@ -29,17 +29,12 @@ MODULE_LICENSE("Dual BSD/GPL");
/* Ignore multiple shutdown requests. */
static int shutting_down = SHUTDOWN_INVALID;
static int setup_shutdown_watcher(void)
{
-Index: head-2008-12-01/drivers/xen/core/smpboot.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/core/smpboot.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/core/smpboot.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/core/smpboot.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/core/smpboot.c 2009-06-04 10:21:39.000000000 +0200
@@ -27,6 +27,7 @@
extern irqreturn_t smp_reschedule_interrupt(int, void *);
extern int local_setup_timer(unsigned int cpu);
extern void local_teardown_timer(unsigned int cpu);
-@@ -54,8 +55,10 @@ DEFINE_PER_CPU(int, cpu_state) = { 0 };
+@@ -50,8 +51,10 @@ EXPORT_PER_CPU_SYMBOL(cpu_info);
static DEFINE_PER_CPU(int, resched_irq);
static DEFINE_PER_CPU(int, callfunc_irq);
#ifdef CONFIG_X86_LOCAL_APIC
#define set_cpu_to_apicid(cpu, apicid) (per_cpu(x86_cpu_to_apicid, cpu) = (apicid))
-@@ -77,8 +80,10 @@ void __init prefill_possible_map(void)
+@@ -73,15 +76,13 @@ void __init prefill_possible_map(void)
for (i = 0; i < NR_CPUS; i++) {
rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL);
}
}
-@@ -114,7 +119,8 @@ static int __cpuinit xen_smp_intr_init(u
+-void __init smp_alloc_memory(void)
+-{
+-}
+-
+ static inline void
+ set_cpu_sibling_map(unsigned int cpu)
+ {
+@@ -110,7 +111,8 @@ static int __cpuinit xen_smp_intr_init(u
{
int rc;
sprintf(resched_name[cpu], "resched%u", cpu);
rc = bind_ipi_to_irqhandler(RESCHEDULE_VECTOR,
-@@ -138,6 +144,17 @@ static int __cpuinit xen_smp_intr_init(u
+@@ -134,6 +136,17 @@ static int __cpuinit xen_smp_intr_init(u
goto fail;
per_cpu(callfunc_irq, cpu) = rc;
rc = xen_spinlock_init(cpu);
if (rc < 0)
goto fail;
-@@ -152,6 +169,8 @@ static int __cpuinit xen_smp_intr_init(u
+@@ -148,6 +161,8 @@ static int __cpuinit xen_smp_intr_init(u
unbind_from_irqhandler(per_cpu(resched_irq, cpu), NULL);
if (per_cpu(callfunc_irq, cpu) >= 0)
unbind_from_irqhandler(per_cpu(callfunc_irq, cpu), NULL);
xen_spinlock_cleanup(cpu);
return rc;
}
-@@ -164,6 +183,7 @@ static void __cpuexit xen_smp_intr_exit(
+@@ -160,6 +175,7 @@ static void __cpuexit xen_smp_intr_exit(
unbind_from_irqhandler(per_cpu(resched_irq, cpu), NULL);
unbind_from_irqhandler(per_cpu(callfunc_irq, cpu), NULL);
xen_spinlock_cleanup(cpu);
}
#endif
-@@ -171,11 +191,7 @@ static void __cpuexit xen_smp_intr_exit(
+@@ -167,11 +183,7 @@ static void __cpuexit xen_smp_intr_exit(
void __cpuinit cpu_bringup(void)
{
cpu_init();
touch_softlockup_watchdog();
preempt_disable();
local_irq_enable();
-@@ -255,9 +271,6 @@ void __init smp_prepare_cpus(unsigned in
+@@ -251,9 +263,6 @@ void __init smp_prepare_cpus(unsigned in
struct task_struct *idle;
int apicid;
struct vcpu_get_physid cpu_id;
void *gdt_addr;
apicid = 0;
-@@ -270,7 +283,7 @@ void __init smp_prepare_cpus(unsigned in
+@@ -266,7 +275,7 @@ void __init smp_prepare_cpus(unsigned in
current_thread_info()->cpu = 0;
cpus_clear(per_cpu(cpu_sibling_map, cpu));
cpus_clear(per_cpu(cpu_core_map, cpu));
}
-@@ -297,21 +310,10 @@ void __init smp_prepare_cpus(unsigned in
+@@ -293,21 +302,10 @@ void __init smp_prepare_cpus(unsigned in
if (IS_ERR(idle))
panic("failed fork for CPU %d", cpu);
make_page_readonly(gdt_addr, XENFEAT_writable_descriptor_tables);
apicid = cpu;
-Index: head-2008-12-01/drivers/xen/core/spinlock.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/core/spinlock.c 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/drivers/xen/core/spinlock.c 2008-12-01 11:51:53.000000000 +0100
-@@ -73,9 +73,9 @@ int xen_spin_wait(raw_spinlock_t *lock,
+@@ -353,8 +351,8 @@ void __init smp_prepare_boot_cpu(void)
+ {
+ #ifdef __i386__
+ init_gdt(smp_processor_id());
+- switch_to_new_gdt();
+ #endif
++ switch_to_new_gdt();
+ prefill_possible_map();
+ }
+
+--- sle11-2009-06-04.orig/drivers/xen/core/spinlock.c 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/core/spinlock.c 2009-06-04 10:36:24.000000000 +0200
+@@ -5,6 +5,8 @@
+ * portions of this file.
+ */
+
++#if CONFIG_XEN_COMPAT >= 0x030200
++
+ #include <linux/init.h>
+ #include <linux/irq.h>
+ #include <linux/kernel.h>
+@@ -73,9 +75,9 @@ int xen_spin_wait(raw_spinlock_t *lock,
/* announce we're spinning */
spinning.ticket = token;
spinning.lock = lock;
/* clear pending */
xen_clear_irq_pending(irq);
-@@ -102,7 +102,7 @@ int xen_spin_wait(raw_spinlock_t *lock,
+@@ -102,7 +104,7 @@ int xen_spin_wait(raw_spinlock_t *lock,
kstat_this_cpu.irqs[irq] += !rc;
/* announce we're done */
rm_lock = &__get_cpu_var(spinning_rm_lock);
raw_local_irq_save(flags);
__raw_write_lock(rm_lock);
-Index: head-2008-12-01/drivers/xen/fbfront/xenfb.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/fbfront/xenfb.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/fbfront/xenfb.c 2008-12-01 11:49:07.000000000 +0100
+@@ -159,3 +161,5 @@ void xen_spin_kick(raw_spinlock_t *lock,
+ }
+ }
+ EXPORT_SYMBOL(xen_spin_kick);
++
++#endif /* CONFIG_XEN_COMPAT >= 0x030200 */
+--- sle11-2009-06-04.orig/drivers/xen/fbfront/xenfb.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/fbfront/xenfb.c 2009-06-04 10:21:39.000000000 +0200
@@ -18,6 +18,7 @@
* frame buffer.
*/
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/fb.h>
-@@ -544,6 +545,28 @@ static unsigned long vmalloc_to_mfn(void
+@@ -545,6 +546,28 @@ static unsigned long vmalloc_to_mfn(void
return pfn_to_mfn(vmalloc_to_pfn(address));
}
static int __devinit xenfb_probe(struct xenbus_device *dev,
const struct xenbus_device_id *id)
{
-@@ -673,6 +696,7 @@ static int __devinit xenfb_probe(struct
+@@ -665,6 +688,7 @@ static int __devinit xenfb_probe(struct
+ if (ret < 0)
goto error;
- }
+ xenfb_make_preferred_console();
return 0;
error_nomem:
-@@ -881,4 +905,5 @@ static void __exit xenfb_cleanup(void)
+@@ -882,4 +906,5 @@ static void __exit xenfb_cleanup(void)
module_init(xenfb_init);
module_exit(xenfb_cleanup);
+MODULE_DESCRIPTION("Xen virtual framebuffer device frontend");
MODULE_LICENSE("GPL");
-Index: head-2008-12-01/drivers/xen/fbfront/xenkbd.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/fbfront/xenkbd.c 2008-12-01 11:36:07.000000000 +0100
-+++ head-2008-12-01/drivers/xen/fbfront/xenkbd.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/fbfront/xenkbd.c 2009-03-04 11:25:55.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/fbfront/xenkbd.c 2009-06-04 10:21:39.000000000 +0200
@@ -350,4 +350,5 @@ static void __exit xenkbd_cleanup(void)
module_init(xenkbd_init);
module_exit(xenkbd_cleanup);
+MODULE_DESCRIPTION("Xen virtual keyboard/pointer device frontend");
MODULE_LICENSE("GPL");
-Index: head-2008-12-01/drivers/xen/gntdev/gntdev.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/gntdev/gntdev.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/gntdev/gntdev.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/gntdev/gntdev.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/gntdev/gntdev.c 2009-06-04 10:21:39.000000000 +0200
@@ -418,7 +418,7 @@ static int __init gntdev_init(void)
}
if (IS_ERR(device)) {
printk(KERN_ERR "Error creating gntdev device in xen_class\n");
printk(KERN_ERR "gntdev created with major number = %d\n",
-Index: head-2008-12-01/drivers/xen/netfront/accel.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/netfront/accel.c 2008-12-01 11:36:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/netfront/accel.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/netfront/accel.c 2009-03-30 16:39:19.000000000 +0200
++++ sle11-2009-06-04/drivers/xen/netfront/accel.c 2009-06-04 10:21:39.000000000 +0200
@@ -28,6 +28,7 @@
* IN THE SOFTWARE.
*/
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/list.h>
-Index: head-2008-12-01/drivers/xen/netfront/netfront.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/netfront/netfront.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/netfront/netfront.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/netfront/netfront.c 2009-03-30 16:40:17.000000000 +0200
++++ sle11-2009-06-04/drivers/xen/netfront/netfront.c 2009-06-04 10:21:39.000000000 +0200
@@ -640,7 +640,7 @@ static int network_open(struct net_devic
}
spin_unlock_bh(&np->rx_lock);
return 0;
}
-Index: head-2008-12-01/drivers/xen/sfc_netback/accel.h
-===================================================================
---- head-2008-12-01.orig/drivers/xen/sfc_netback/accel.h 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/drivers/xen/sfc_netback/accel.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/sfc_netback/accel.h 2009-03-30 16:00:09.000000000 +0200
++++ sle11-2009-06-04/drivers/xen/sfc_netback/accel.h 2009-06-04 10:21:39.000000000 +0200
@@ -25,6 +25,7 @@
#ifndef NETBACK_ACCEL_H
#define NETBACK_ACCEL_H
#include <linux/slab.h>
#include <linux/ip.h>
#include <linux/tcp.h>
-Index: head-2008-12-01/drivers/xen/sfc_netfront/accel.h
-===================================================================
---- head-2008-12-01.orig/drivers/xen/sfc_netfront/accel.h 2008-12-01 11:29:05.000000000 +0100
-+++ head-2008-12-01/drivers/xen/sfc_netfront/accel.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/sfc_netfront/accel.h 2009-03-30 16:34:56.000000000 +0200
++++ sle11-2009-06-04/drivers/xen/sfc_netfront/accel.h 2009-06-04 10:21:39.000000000 +0200
@@ -35,6 +35,7 @@
#include <xen/evtchn.h>
#include <linux/list.h>
enum netfront_accel_post_status {
-Index: head-2008-12-01/drivers/xen/xenbus/xenbus_comms.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/xenbus/xenbus_comms.c 2008-12-01 11:36:47.000000000 +0100
-+++ head-2008-12-01/drivers/xen/xenbus/xenbus_comms.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/xenbus/xenbus_client.c 2009-03-24 10:13:17.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/xenbus/xenbus_client.c 2009-06-04 10:21:39.000000000 +0200
+@@ -150,7 +150,7 @@ int xenbus_watch_pathfmt(struct xenbus_d
+ char *path;
+
+ va_start(ap, pathfmt);
+- path = kvasprintf(GFP_KERNEL, pathfmt, ap);
++ path = kvasprintf(GFP_NOIO | __GFP_HIGH, pathfmt, ap);
+ va_end(ap);
+
+ if (!path) {
+--- sle11-2009-06-04.orig/drivers/xen/xenbus/xenbus_comms.c 2009-02-16 16:17:21.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/xenbus/xenbus_comms.c 2009-06-04 10:21:39.000000000 +0200
@@ -228,14 +228,11 @@ int xb_init_comms(void)
intf->rsp_cons = intf->rsp_prod;
}
return 0;
}
-Index: head-2008-12-01/drivers/xen/xenbus/xenbus_probe.c
-===================================================================
---- head-2008-12-01.orig/drivers/xen/xenbus/xenbus_probe.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/drivers/xen/xenbus/xenbus_probe.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/drivers/xen/xenbus/xenbus_probe.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/drivers/xen/xenbus/xenbus_probe.c 2009-06-04 10:21:39.000000000 +0200
@@ -36,6 +36,7 @@
__FUNCTION__, __LINE__, ##args)
#include <linux/err.h>
#include <linux/string.h>
#include <linux/ctype.h>
-Index: head-2008-12-01/fs/aio.c
-===================================================================
---- head-2008-12-01.orig/fs/aio.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/fs/aio.c 2008-12-01 11:49:07.000000000 +0100
-@@ -1319,7 +1319,7 @@ static int make_aio_fd(struct kioctx *io
+--- sle11-2009-06-04.orig/fs/aio.c 2009-03-24 10:13:25.000000000 +0100
++++ sle11-2009-06-04/fs/aio.c 2009-06-04 10:21:39.000000000 +0200
+@@ -1335,7 +1335,7 @@ static int make_aio_fd(struct kioctx *io
int fd;
struct file *file;
if (fd < 0)
return fd;
-Index: head-2008-12-01/include/asm-generic/pgtable.h
-===================================================================
---- head-2008-12-01.orig/include/asm-generic/pgtable.h 2008-12-01 11:29:05.000000000 +0100
-+++ head-2008-12-01/include/asm-generic/pgtable.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-generic/pgtable.h 2009-03-04 11:28:34.000000000 +0100
++++ sle11-2009-06-04/include/asm-generic/pgtable.h 2009-06-04 10:21:39.000000000 +0200
@@ -99,10 +99,6 @@ static inline void ptep_set_wrprotect(st
}
#endif
#ifndef __HAVE_ARCH_PTE_SAME
#define pte_same(A,B) (pte_val(A) == pte_val(B))
#endif
-Index: head-2008-12-01/include/asm-x86/dma-mapping.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/dma-mapping.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/dma-mapping.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/dma-mapping.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/dma-mapping.h 2009-06-04 10:21:39.000000000 +0200
@@ -74,7 +74,7 @@ static inline struct dma_mapping_ops *ge
/* Make sure we keep the same behaviour */
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
return 0;
#else
struct dma_mapping_ops *ops = get_dma_ops(dev);
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/desc.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/desc.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/desc.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/kexec.h 2008-12-01 11:11:08.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/kexec.h 2009-06-04 10:21:39.000000000 +0200
+@@ -10,6 +10,7 @@
+ # define VA_PTE_0 5
+ # define PA_PTE_1 6
+ # define VA_PTE_1 7
++# ifndef CONFIG_XEN
+ # define PA_SWAP_PAGE 8
+ # ifdef CONFIG_X86_PAE
+ # define PA_PMD_0 9
+@@ -20,6 +21,18 @@
+ # else
+ # define PAGES_NR 9
+ # endif
++# else /* CONFIG_XEN */
++/*
++ * The hypervisor interface implicitly requires that all entries (except
++ * for possibly the final one) are arranged in matching PA_/VA_ pairs.
++ */
++# define PA_PMD_0 8
++# define VA_PMD_0 9
++# define PA_PMD_1 10
++# define VA_PMD_1 11
++# define PA_SWAP_PAGE 12
++# define PAGES_NR 13
++# endif /* CONFIG_XEN */
+ #else
+ # define PA_CONTROL_PAGE 0
+ # define VA_CONTROL_PAGE 1
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/desc.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/desc.h 2009-06-04 10:21:39.000000000 +0200
@@ -31,11 +31,17 @@ extern struct desc_ptr idt_descr;
extern gate_desc idt_table[];
#endif
/*
* This routine sets up an interrupt gate at directory privilege level 3.
*/
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/fixmap.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/fixmap.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/fixmap.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/fixmap.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/fixmap.h 2009-06-04 10:21:39.000000000 +0200
@@ -7,7 +7,58 @@
# include "fixmap_64.h"
#endif
+ return __virt_to_fix(vaddr);
+}
#endif
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/fixmap_32.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/fixmap_32.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/fixmap_32.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/fixmap_32.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/fixmap_32.h 2009-06-04 10:21:39.000000000 +0200
@@ -58,10 +58,17 @@ enum fixed_addresses {
#ifdef CONFIG_X86_LOCAL_APIC
FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */
-
#endif /* !__ASSEMBLY__ */
#endif
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/fixmap_64.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/fixmap_64.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/fixmap_64.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/fixmap_64.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/fixmap_64.h 2009-06-04 10:21:39.000000000 +0200
@@ -12,6 +12,7 @@
#define _ASM_FIXMAP_64_H
-}
-
#endif
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/highmem.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/highmem.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/highmem.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/highmem.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/highmem.h 2009-06-04 10:21:39.000000000 +0200
@@ -74,6 +74,9 @@ struct page *kmap_atomic_to_page(void *p
#define flush_cache_kmaps() do { } while (0)
void clear_highpage(struct page *);
static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
{
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/hypercall.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/hypercall.h 2008-12-01 11:36:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/hypercall.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/hypercall.h 2009-02-16 16:18:36.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/hypercall.h 2009-06-04 10:21:39.000000000 +0200
@@ -323,9 +323,19 @@ static inline int __must_check
HYPERVISOR_grant_table_op(
unsigned int cmd, void *uop, unsigned int count)
}
static inline int __must_check
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/hypervisor.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/hypervisor.h 2008-12-01 11:37:10.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/hypervisor.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/hypervisor.h 2009-03-16 16:33:40.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/hypervisor.h 2009-06-04 10:21:39.000000000 +0200
@@ -35,7 +35,6 @@
#include <linux/types.h>
#include <linux/errno.h>
#include <xen/interface/xen.h>
#include <xen/interface/platform.h>
-@@ -171,6 +170,20 @@ static inline void arch_flush_lazy_mmu_m
- }
- #endif
+@@ -112,6 +111,8 @@ int xen_create_contiguous_region(
+ unsigned long vstart, unsigned int order, unsigned int address_bits);
+ void xen_destroy_contiguous_region(
+ unsigned long vstart, unsigned int order);
++int early_create_contiguous_region(unsigned long pfn, unsigned int order,
++ unsigned int address_bits);
+
+ struct page;
+@@ -181,6 +182,29 @@ static inline void xen_multicall_flush(b
+
+ #endif /* CONFIG_XEN && !MODULE */
+
++#ifdef CONFIG_XEN
++
+struct gnttab_map_grant_ref;
+bool gnttab_pre_map_adjust(unsigned int cmd, struct gnttab_map_grant_ref *,
+ unsigned int count);
+}
+#endif
+
- #else /* CONFIG_XEN */
-
- static inline void xen_multicall_flush(bool ignore) {}
-@@ -179,6 +192,9 @@ static inline void xen_multicall_flush(b
- #define xen_multi_mmu_update(...) ({ BUG(); -ENOSYS; })
- #define xen_multi_mmuext_op(...) ({ BUG(); -ENOSYS; })
-
++#else /* !CONFIG_XEN */
++
+#define gnttab_pre_map_adjust(...) false
+#define gnttab_post_map_adjust(...) ({ BUG(); -ENOSYS; })
+
- #endif /* CONFIG_XEN */
-
++#endif /* CONFIG_XEN */
++
#if defined(CONFIG_X86_64)
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/io.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/io.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/io.h 2008-12-01 11:49:07.000000000 +0100
-@@ -3,6 +3,76 @@
+ #define MULTI_UVMFLAGS_INDEX 2
+ #define MULTI_UVMDOMID_INDEX 3
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/io.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/io.h 2009-06-04 10:21:39.000000000 +0200
+@@ -3,20 +3,139 @@
#define ARCH_HAS_IOREMAP_WC
+#define readq readq
+#define writeq writeq
+#endif
++
++#define native_io_delay xen_io_delay
+
#ifdef CONFIG_X86_32
- # include "io_32.h"
+-# include "io_32.h"
++# include "../../io_32.h"
#else
-@@ -19,4 +89,17 @@ extern int ioremap_check_change_attr(uns
+-# include "io_64.h"
++# include "../../io_64.h"
++#endif
++
++#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
++
++/* We will be supplying our own /dev/mem implementation */
++#define ARCH_HAS_DEV_MEM
++
++#define page_to_pseudophys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
++#undef page_to_phys
++#define page_to_phys(page) (phys_to_machine(page_to_pseudophys(page)))
++#define page_to_bus(page) (phys_to_machine(page_to_pseudophys(page)))
++
++#define bvec_to_pseudophys(bv) (page_to_pseudophys((bv)->bv_page) + \
++ (unsigned long) (bv)->bv_offset)
++
++#define BIOVEC_PHYS_MERGEABLE(vec1, vec2) \
++ (bvec_to_phys(vec1) + (vec1)->bv_len == bvec_to_phys(vec2) \
++ && bvec_to_pseudophys(vec1) + (vec1)->bv_len \
++ == bvec_to_pseudophys(vec2))
++
++#undef virt_to_bus
++#undef bus_to_virt
++#define virt_to_bus(_x) phys_to_machine(__pa(_x))
++#define bus_to_virt(_x) __va(machine_to_phys(_x))
++
++#include <asm/fixmap.h>
++
++#undef isa_virt_to_bus
++#undef isa_page_to_bus
++#undef isa_bus_to_virt
++#define isa_virt_to_bus(_x) ({ BUG(); virt_to_bus(_x); })
++#define isa_page_to_bus(_x) isa_page_to_bus_is_UNSUPPORTED->_x
++#define isa_bus_to_virt(_x) ((void *)__fix_to_virt(FIX_ISAMAP_BEGIN) + (_x))
++
++#undef __ISA_IO_base
++#define __ISA_IO_base ((char __iomem *)fix_to_virt(FIX_ISAMAP_BEGIN))
++
+ #endif
+
+ extern void *xlate_dev_mem_ptr(unsigned long phys);
+ extern void unxlate_dev_mem_ptr(unsigned long phys, void *addr);
+
+-extern void map_devmem(unsigned long pfn, unsigned long len, pgprot_t);
+-extern void unmap_devmem(unsigned long pfn, unsigned long len, pgprot_t);
+-
+ extern int ioremap_check_change_attr(unsigned long mfn, unsigned long size,
unsigned long prot_val);
extern void __iomem *ioremap_wc(unsigned long offset, unsigned long size);
+
+
#endif /* _ASM_X86_IO_H */
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/io_32.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/io_32.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/io_32.h 2008-12-01 11:49:07.000000000 +0100
-@@ -123,6 +123,8 @@ static inline void *phys_to_virt(unsigne
- */
- extern void __iomem *ioremap_nocache(resource_size_t offset, unsigned long size);
- extern void __iomem *ioremap_cache(resource_size_t offset, unsigned long size);
-+extern void __iomem *ioremap_prot(resource_size_t offset, unsigned long size,
-+ unsigned long prot_val);
-
- /*
- * The default ioremap() behavior is non-cached:
-@@ -135,18 +137,6 @@ static inline void __iomem *ioremap(reso
- extern void iounmap(volatile void __iomem *addr);
-
- /*
-- * early_ioremap() and early_iounmap() are for temporary early boot-time
-- * mappings, before the real ioremap() is functional.
-- * A boot-time mapping is currently limited to at most 16 pages.
-- */
--extern void early_ioremap_init(void);
--extern void early_ioremap_clear(void);
--extern void early_ioremap_reset(void);
--extern void *early_ioremap(unsigned long offset, unsigned long size);
--extern void early_iounmap(void *addr, unsigned long size);
--extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
--
--/*
- * ISA I/O bus memory addresses are 1:1 with the physical address.
- */
- #define isa_virt_to_bus(_x) ({ BUG(); virt_to_bus(_x); })
-@@ -162,55 +152,6 @@ extern void __iomem *fix_ioremap(unsigne
- #define virt_to_bus(_x) phys_to_machine(__pa(_x))
- #define bus_to_virt(_x) __va(machine_to_phys(_x))
-
--/*
-- * readX/writeX() are used to access memory mapped devices. On some
-- * architectures the memory mapped IO stuff needs to be accessed
-- * differently. On the x86 architecture, we just read/write the
-- * memory location directly.
-- */
--
--static inline unsigned char readb(const volatile void __iomem *addr)
--{
-- return *(volatile unsigned char __force *)addr;
--}
--
--static inline unsigned short readw(const volatile void __iomem *addr)
--{
-- return *(volatile unsigned short __force *)addr;
--}
--
--static inline unsigned int readl(const volatile void __iomem *addr)
--{
-- return *(volatile unsigned int __force *) addr;
--}
--
--#define readb_relaxed(addr) readb(addr)
--#define readw_relaxed(addr) readw(addr)
--#define readl_relaxed(addr) readl(addr)
--#define __raw_readb readb
--#define __raw_readw readw
--#define __raw_readl readl
--
--static inline void writeb(unsigned char b, volatile void __iomem *addr)
--{
-- *(volatile unsigned char __force *)addr = b;
--}
--
--static inline void writew(unsigned short b, volatile void __iomem *addr)
--{
-- *(volatile unsigned short __force *)addr = b;
--}
--
--static inline void writel(unsigned int b, volatile void __iomem *addr)
--{
-- *(volatile unsigned int __force *)addr = b;
--}
--#define __raw_writeb writeb
--#define __raw_writew writew
--#define __raw_writel writel
--
--#define mmiowb()
--
- static inline void
- memset_io(volatile void __iomem *addr, unsigned char val, int count)
- {
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/io_64.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/io_64.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/io_64.h 2008-12-01 11:49:07.000000000 +0100
-@@ -190,6 +190,8 @@ extern void early_iounmap(void *addr, un
- */
- extern void __iomem *ioremap_nocache(resource_size_t offset, unsigned long size);
- extern void __iomem *ioremap_cache(resource_size_t offset, unsigned long size);
-+extern void __iomem *ioremap_prot(resource_size_t offset, unsigned long size,
-+ unsigned long prot_val);
-
- /*
- * The default ioremap() behavior is non-cached:
-@@ -220,77 +222,6 @@ extern void __iomem *fix_ioremap(unsigne
- #define virt_to_bus(_x) phys_to_machine(__pa(_x))
- #define bus_to_virt(_x) __va(machine_to_phys(_x))
-
--/*
-- * readX/writeX() are used to access memory mapped devices. On some
-- * architectures the memory mapped IO stuff needs to be accessed
-- * differently. On the x86 architecture, we just read/write the
-- * memory location directly.
-- */
--
--static inline __u8 __readb(const volatile void __iomem *addr)
--{
-- return *(__force volatile __u8 *)addr;
--}
--
--static inline __u16 __readw(const volatile void __iomem *addr)
--{
-- return *(__force volatile __u16 *)addr;
--}
--
--static __always_inline __u32 __readl(const volatile void __iomem *addr)
--{
-- return *(__force volatile __u32 *)addr;
--}
--
--static inline __u64 __readq(const volatile void __iomem *addr)
--{
-- return *(__force volatile __u64 *)addr;
--}
--
--#define readb(x) __readb(x)
--#define readw(x) __readw(x)
--#define readl(x) __readl(x)
--#define readq(x) __readq(x)
--#define readb_relaxed(a) readb(a)
--#define readw_relaxed(a) readw(a)
--#define readl_relaxed(a) readl(a)
--#define readq_relaxed(a) readq(a)
--#define __raw_readb readb
--#define __raw_readw readw
--#define __raw_readl readl
--#define __raw_readq readq
--
--#define mmiowb()
--
--static inline void __writel(__u32 b, volatile void __iomem *addr)
--{
-- *(__force volatile __u32 *)addr = b;
--}
--
--static inline void __writeq(__u64 b, volatile void __iomem *addr)
--{
-- *(__force volatile __u64 *)addr = b;
--}
--
--static inline void __writeb(__u8 b, volatile void __iomem *addr)
--{
-- *(__force volatile __u8 *)addr = b;
--}
--
--static inline void __writew(__u16 b, volatile void __iomem *addr)
--{
-- *(__force volatile __u16 *)addr = b;
--}
--
--#define writeq(val, addr) __writeq((val), (addr))
--#define writel(val, addr) __writel((val), (addr))
--#define writew(val, addr) __writew((val), (addr))
--#define writeb(val, addr) __writeb((val), (addr))
--#define __raw_writeb writeb
--#define __raw_writew writew
--#define __raw_writel writel
--#define __raw_writeq writeq
--
- void __memcpy_fromio(void *, unsigned long, unsigned);
- void __memcpy_toio(unsigned long, const void *, unsigned);
-
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/irq_vectors.h
-===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/irq_vectors.h 2008-12-01 11:49:07.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/irq_vectors.h 2009-06-04 10:21:39.000000000 +0200
@@ -0,0 +1,52 @@
+#ifndef _ASM_IRQ_VECTORS_H
+#define _ASM_IRQ_VECTORS_H
+ */
+
+#define PIRQ_BASE 0
-+#if !defined(MAX_IO_APICS)
-+# define NR_PIRQS (NR_VECTORS + 32 * NR_CPUS)
-+#elif NR_CPUS < MAX_IO_APICS
-+# define NR_PIRQS (NR_VECTORS + 32 * NR_CPUS)
-+#else
-+# define NR_PIRQS (NR_VECTORS + 32 * MAX_IO_APICS)
++#if defined(NR_CPUS) && defined(MAX_IO_APICS)
++# if NR_CPUS < MAX_IO_APICS
++# define NR_PIRQS (NR_VECTORS + 32 * NR_CPUS)
++# else
++# define NR_PIRQS (NR_VECTORS + 32 * MAX_IO_APICS)
++# endif
+#endif
+
+#define DYNIRQ_BASE (PIRQ_BASE + NR_PIRQS)
+#define NR_IRQ_VECTORS NR_IRQS
+
+#endif /* _ASM_IRQ_VECTORS_H */
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/irqflags.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/irqflags.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/irqflags.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/irqflags.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/irqflags.h 2009-06-04 10:21:39.000000000 +0200
@@ -118,7 +118,7 @@ static inline void halt(void)
#ifndef CONFIG_X86_64
#else
# define TRACE_IRQS_ON
# define TRACE_IRQS_OFF
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/mmu_context.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/mmu_context.h 2008-12-01 11:36:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/mmu_context.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/mmu_context.h 2009-02-16 16:18:36.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/mmu_context.h 2009-06-04 10:21:39.000000000 +0200
@@ -1,5 +1,42 @@
+#ifndef __ASM_X86_MMU_CONTEXT_H
+#define __ASM_X86_MMU_CONTEXT_H
+
+
+#endif /* __ASM_X86_MMU_CONTEXT_H */
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/mmu_context_32.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/mmu_context_32.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/mmu_context_32.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/mmu_context_32.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/mmu_context_32.h 2009-06-04 10:21:39.000000000 +0200
@@ -1,32 +1,6 @@
#ifndef __I386_SCHED_H
#define __I386_SCHED_H
-} while (0)
-
#endif
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/mmu_context_64.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/mmu_context_64.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/mmu_context_64.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/mmu_context_64.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/mmu_context_64.h 2009-06-04 10:21:39.000000000 +0200
@@ -1,23 +1,6 @@
#ifndef __X86_64_MMU_CONTEXT_H
#define __X86_64_MMU_CONTEXT_H
-}
-
#endif
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/page.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/page.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/page.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/page.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/page.h 2009-06-04 10:21:39.000000000 +0200
@@ -16,9 +16,9 @@
* below. The preprocessor will warn if the two definitions aren't identical.
*/
#define __pte(x) xen_make_pte(x)
#define __pa(x) __phys_addr((unsigned long)(x))
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/page_64.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/page_64.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/page_64.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/page_64.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/page_64.h 2009-06-04 10:21:39.000000000 +0200
@@ -26,6 +26,12 @@
#define PUD_PAGE_SIZE (_AC(1, UL) << PUD_SHIFT)
#define PUD_PAGE_MASK (~(PUD_PAGE_SIZE-1))
#endif /* !__ASSEMBLY__ */
#ifdef CONFIG_FLATMEM
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pci.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pci.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pci.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/pci.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/pci.h 2009-06-04 10:21:39.000000000 +0200
@@ -21,6 +21,8 @@ struct pci_sysdata {
#endif
};
/* scan a bus after allocating a pci_sysdata for it */
extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops,
int node);
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pci_32.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pci_32.h 2008-12-01 11:36:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pci_32.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/pci_32.h 2009-02-16 16:18:36.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/pci_32.h 2009-06-04 10:21:39.000000000 +0200
@@ -38,12 +38,14 @@ struct pci_dev;
#define PCI_DMA_BUS_IS_PHYS (1)
#endif
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pgalloc.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pgalloc.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pgalloc.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/pgalloc.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/pgalloc.h 2009-06-04 10:21:39.000000000 +0200
@@ -7,6 +7,9 @@
#include <asm/io.h> /* for phys_to_virt and page_to_pseudophys */
static inline void paravirt_alloc_pte(struct mm_struct *mm, unsigned long pfn) {}
static inline void paravirt_alloc_pmd(struct mm_struct *mm, unsigned long pfn) {}
static inline void paravirt_alloc_pmd_clone(unsigned long pfn, unsigned long clonepfn,
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pgtable.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/pgtable.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/pgtable.h 2009-06-04 10:21:39.000000000 +0200
@@ -13,11 +13,12 @@
#define _PAGE_BIT_PSE 7 /* 4 MB (or 2MB) page */
#define _PAGE_BIT_PAT 7 /* on 4KB pages */
#define arbitrary_virt_to_machine(va) \
({ \
unsigned int __lvl; \
-@@ -535,6 +570,44 @@ static inline void clone_pgd_range(pgd_t
- | ((unsigned long)(va) & (PAGE_SIZE - 1))); \
- })
+@@ -548,6 +583,34 @@ struct page *kmap_atomic_to_page(void *)
+ #define ptep_to_machine(ptep) virt_to_machine(ptep)
+ #endif
+#define __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION
+static inline pte_t ptep_modify_prot_start(struct mm_struct *mm, unsigned long addr,
+ return *ptep;
+}
+
-+#ifdef CONFIG_HIGHPTE
-+extern void *high_memory;
-+#endif
-+
+static inline void ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr,
+ pte_t *ptep, pte_t pte)
+{
+ return;
+ }
+#endif
-+#ifdef CONFIG_HIGHPTE
-+ if ((void *)ptep > high_memory)
-+ u.ptr = arbitrary_virt_to_machine(ptep)
-+ | MMU_PT_UPDATE_PRESERVE_AD;
-+ else
-+#endif
-+ u.ptr = virt_to_machine(ptep) | MMU_PT_UPDATE_PRESERVE_AD;
++ u.ptr = ptep_to_machine(ptep) | MMU_PT_UPDATE_PRESERVE_AD;
+ u.val = __pte_val(pte);
+ if (HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF))
+ BUG();
#include <asm-generic/pgtable.h>
#include <xen/features.h>
-@@ -563,10 +636,6 @@ int touch_pte_range(struct mm_struct *mm
+@@ -576,10 +639,6 @@ int touch_pte_range(struct mm_struct *mm
unsigned long address,
unsigned long size);
#endif /* __ASSEMBLY__ */
#endif /* _ASM_X86_PGTABLE_H */
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable-3level.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pgtable-3level.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable-3level.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/pgtable-3level.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/pgtable-3level.h 2009-06-04 10:21:39.000000000 +0200
@@ -14,11 +14,11 @@
#define pmd_ERROR(e) \
printk("%s:%d: bad pmd %p(%016Lx pfn %08Lx).\n", \
/* Find an entry in the second-level page table.. */
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable_32.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pgtable_32.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable_32.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/pgtable_32.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/pgtable_32.h 2009-06-04 10:21:39.000000000 +0200
@@ -89,10 +89,10 @@ extern unsigned long pg0[];
/* pmd_present doesn't just test the _PAGE_PRESENT bit since wr.p.t.
can temporarily clear it. */
#if defined(CONFIG_HIGHPTE)
#define pte_offset_map(dir, address) \
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable_64.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pgtable_64.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable_64.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/pgtable_64.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/pgtable_64.h 2009-06-04 10:21:39.000000000 +0200
@@ -23,6 +23,8 @@ extern void xen_init_pt(void);
extern pud_t level3_kernel_pgt[512];
extern pud_t level3_ident_pgt[512];
#define __xen_pte_clear(ptep) xen_set_pte(ptep, __pte(0))
static inline void xen_set_pte(pte_t *ptep, pte_t pte)
-@@ -150,24 +155,24 @@ static inline void xen_pgd_clear(pgd_t *
+@@ -145,29 +150,29 @@ static inline void xen_pgd_clear(pgd_t *
+ #define PGDIR_MASK (~(PGDIR_SIZE - 1))
+
+
+-#define MAXMEM _AC(0x00003fffffffffff, UL)
++#define MAXMEM _AC(0x000004ffffffffff, UL)
+ #define VMALLOC_START _AC(0xffffc20000000000, UL)
#define VMALLOC_END _AC(0xffffe1ffffffffff, UL)
#define VMEMMAP_START _AC(0xffffe20000000000, UL)
#define MODULES_VADDR _AC(0xffffffffa0000000, UL)
#define pmd_page(pmd) (pfn_to_page(pmd_val((pmd)) >> PAGE_SHIFT))
#define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/processor.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/processor.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/processor.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/processor.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/processor.h 2009-06-04 10:21:39.000000000 +0200
@@ -134,7 +134,7 @@ extern __u32 cleared_cpu_caps[NCAPINTS
#ifdef CONFIG_SMP
DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info);
extern void enable_sep_cpu(void);
extern int sysenter_setup(void);
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/segment.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/segment.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/segment.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/segment.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/segment.h 2009-06-04 10:21:39.000000000 +0200
@@ -1,6 +1,15 @@
#ifndef _ASM_X86_SEGMENT_H_
#define _ASM_X86_SEGMENT_H_
/* User mode is privilege level 3 */
#define USER_RPL 0x3
/* LDT segment has TI set, GDT has it cleared */
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/smp.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/smp.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/smp.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/smp.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/smp.h 2009-06-04 10:21:39.000000000 +0200
@@ -25,23 +25,16 @@ extern cpumask_t cpu_initialized;
extern void (*mtrr_hook)(void);
extern void zap_low_mappings(void);
-extern void unlock_ipi_call_lock(void);
#endif /* __ASSEMBLY__ */
#endif
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/spinlock.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/spinlock.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/spinlock.h 2008-12-01 11:49:07.000000000 +0100
-@@ -65,14 +65,14 @@ extern void xen_spin_kick(raw_spinlock_t
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/spinlock.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/spinlock.h 2009-06-04 11:09:05.000000000 +0200
+@@ -38,6 +38,11 @@
+ # define UNLOCK_LOCK_PREFIX
+ #endif
+
++/*
++ * Xen versions prior to 3.2.x have a race condition with HYPERVISOR_poll().
++ */
++#if CONFIG_XEN_COMPAT >= 0x030200
++
+ int xen_spinlock_init(unsigned int cpu);
+ void xen_spinlock_cleanup(unsigned int cpu);
+ extern int xen_spin_wait(raw_spinlock_t *, unsigned int token);
+@@ -65,14 +70,14 @@ extern void xen_spin_kick(raw_spinlock_t
*/
#if (NR_CPUS < 256)
#define TICKET_SHIFT 8
asm("1:\t" \
"cmpb %h0, %b0\n\t" \
"je 2f\n\t" \
-@@ -88,7 +88,7 @@ extern void xen_spin_kick(raw_spinlock_t
+@@ -88,7 +93,7 @@ extern void xen_spin_kick(raw_spinlock_t
: "memory", "cc")
{
int tmp, new;
-@@ -107,7 +107,7 @@ static __always_inline int __raw_spin_tr
+@@ -107,7 +112,7 @@ static __always_inline int __raw_spin_tr
return tmp;
}
{
unsigned int token;
unsigned char kick;
-@@ -124,7 +124,7 @@ static __always_inline void __raw_spin_u
+@@ -124,7 +129,7 @@ static __always_inline void __raw_spin_u
}
#else
#define TICKET_SHIFT 16
do { \
unsigned int tmp; \
asm(LOCK_PREFIX "xaddl %0, %2\n\t" \
-@@ -136,7 +136,7 @@ static __always_inline void __raw_spin_u
+@@ -136,7 +141,7 @@ static __always_inline void __raw_spin_u
: "0" (0x00010000) \
: "memory", "cc"); \
} while (0)
do { \
unsigned int tmp; \
asm("shldl $16, %0, %2\n" \
-@@ -155,7 +155,7 @@ static __always_inline void __raw_spin_u
+@@ -155,7 +160,7 @@ static __always_inline void __raw_spin_u
: "memory", "cc"); \
} while (0)
{
int tmp;
int new;
-@@ -177,7 +177,7 @@ static __always_inline int __raw_spin_tr
+@@ -177,7 +182,7 @@ static __always_inline int __raw_spin_tr
return tmp;
}
{
unsigned int token, tmp;
bool kick;
-@@ -195,49 +195,145 @@ static __always_inline void __raw_spin_u
+@@ -195,49 +200,161 @@ static __always_inline void __raw_spin_u
}
#endif
} while (unlikely(!count) && !xen_spin_wait_flags(lock, &token, flags));
}
-+#ifdef CONFIG_PARAVIRT
++#define __raw_spin(n) __ticket_spin_##n
++
++#else /* CONFIG_XEN_COMPAT < 0x030200 */
+/*
+ * Define virtualization-friendly old-style lock byte lock, for use in
+ * pv_lock_ops if desired.
+ * __byte_spin_is_contended.
+ */
+struct __byte_spinlock {
-+ s8 lock;
-+ s8 spinners;
++ u8 lock;
++#if NR_CPUS < 256
++ u8 spinners;
++#else
++#error NR_CPUS >= 256 support not implemented
++#endif
+};
+
++static inline int xen_spinlock_init(unsigned int cpu) { return 0; }
++static inline void xen_spinlock_cleanup(unsigned int cpu) {}
++
+static inline int __byte_spin_is_locked(raw_spinlock_t *lock)
+{
+ struct __byte_spinlock *bl = (struct __byte_spinlock *)lock;
+ : "+m" (bl->lock), "+q" (val), "+m" (bl->spinners): : "memory");
+}
+
++#define __byte_spin_lock_flags(lock, flags) __byte_spin_lock(lock)
++
+static inline int __byte_spin_trylock(raw_spinlock_t *lock)
+{
+ struct __byte_spinlock *bl = (struct __byte_spinlock *)lock;
+ smp_wmb();
+ bl->lock = 0;
+}
-+#else /* !CONFIG_PARAVIRT */
++
++#define __raw_spin(n) __byte_spin_##n
++
++#endif /* CONFIG_XEN_COMPAT */
++
+static inline int __raw_spin_is_locked(raw_spinlock_t *lock)
+{
-+ return __ticket_spin_is_locked(lock);
++ return __raw_spin(is_locked)(lock);
+}
+
+static inline int __raw_spin_is_contended(raw_spinlock_t *lock)
+{
-+ return __ticket_spin_is_contended(lock);
++ return __raw_spin(is_contended)(lock);
+}
+
+static __always_inline void __raw_spin_lock(raw_spinlock_t *lock)
+{
-+ __ticket_spin_lock(lock);
++ __raw_spin(lock)(lock);
+}
+
+static __always_inline void __raw_spin_lock_flags(raw_spinlock_t *lock,
+ unsigned long flags)
+{
-+ __ticket_spin_lock_flags(lock, flags);
++ __raw_spin(lock_flags)(lock, flags);
+}
+
+static __always_inline int __raw_spin_trylock(raw_spinlock_t *lock)
+{
-+ return __ticket_spin_trylock(lock);
++ return __raw_spin(trylock)(lock);
+}
+
+static __always_inline void __raw_spin_unlock(raw_spinlock_t *lock)
+{
-+ __ticket_spin_unlock(lock);
++ __raw_spin(unlock)(lock);
+}
-+#endif /* CONFIG_PARAVIRT */
++
++#undef __raw_spin
+
static inline void __raw_spin_unlock_wait(raw_spinlock_t *lock)
{
while (__raw_spin_is_locked(lock))
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/system.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/system.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/system.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/system.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/system.h 2009-06-04 10:21:39.000000000 +0200
@@ -137,7 +137,7 @@ __asm__ __volatile__ ("movw %%dx,%1\n\t"
#define set_base(ldt, base) _set_base(((char *)&(ldt)) , (base))
#define set_limit(ldt, limit) _set_limit(((char *)&(ldt)) , ((limit)-1))
/*
* Force strict CPU ordering.
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/xor_64.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/xor_64.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/xor_64.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/asm/xor_64.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/asm-x86/mach-xen/asm/xor_64.h 2009-06-04 10:21:39.000000000 +0200
@@ -1,3 +1,6 @@
+#ifndef ASM_X86__XOR_64_H
+#define ASM_X86__XOR_64_H
#define XOR_SELECT_TEMPLATE(FASTEST) (&xor_block_sse)
+
+#endif /* ASM_X86__XOR_64_H */
-Index: head-2008-12-01/include/asm-x86/mach-xen/irq_vectors.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/irq_vectors.h 2008-12-01 11:37:10.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/irq_vectors.h 2009-03-16 16:33:40.000000000 +0100
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,126 +0,0 @@
-/*
-#define NR_IRQ_VECTORS NR_IRQS
-
-#endif /* _ASM_IRQ_VECTORS_H */
-Index: head-2008-12-01/include/asm-x86/mach-xen/setup_arch_post.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/setup_arch_post.h 2008-12-03 15:48:43.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/setup_arch_post.h 2009-06-04 11:08:07.000000000 +0200
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,63 +0,0 @@
-/**
-#endif
-#endif
-}
-Index: head-2008-12-01/include/asm-x86/mach-xen/setup_arch_pre.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/setup_arch_pre.h 2008-12-03 15:48:43.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/mach-xen/setup_arch_pre.h 2009-06-04 11:08:07.000000000 +0200
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,5 +0,0 @@
-/* Hook to call BIOS initialisation function */
-#define ARCH_SETUP machine_specific_arch_setup();
-
-static void __init machine_specific_arch_setup(void);
-Index: head-2008-12-01/include/asm-x86/traps.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/traps.h 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/traps.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/traps.h 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/include/asm-x86/traps.h 2009-06-04 10:21:39.000000000 +0200
@@ -23,6 +23,9 @@ asmlinkage void spurious_interrupt_bug(v
#ifdef CONFIG_X86_MCE
asmlinkage void machine_check(void);
unsigned long patch_espfix_desc(unsigned long, unsigned long);
asmlinkage void math_emulate(long);
-Index: head-2008-12-01/include/asm-x86/xen/hypercall.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/xen/hypercall.h 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/xen/hypercall.h 2008-12-01 11:49:07.000000000 +0100
-@@ -264,7 +264,7 @@ HYPERVISOR_fpu_taskswitch(int set)
- static inline int
- HYPERVISOR_sched_op(int cmd, void *arg)
- {
-- return _hypercall2(int, sched_op_new, cmd, arg);
-+ return _hypercall2(int, sched_op, cmd, arg);
- }
-
- static inline long
-Index: head-2008-12-01/include/asm-x86/xen/interface_64.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/xen/interface_64.h 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/xen/interface_64.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/asm-x86/xen/interface_64.h 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/include/asm-x86/xen/interface_64.h 2009-06-04 10:21:39.000000000 +0200
@@ -136,7 +136,7 @@ struct cpu_user_regs {
uint16_t fs, _pad5[3]; /* Non-zero => takes precedence over fs_base. */
uint16_t gs, _pad6[3]; /* Non-zero => takes precedence over gs_base_usr. */
#undef __DECL_REG
-Index: head-2008-12-01/include/linux/page-flags.h
-===================================================================
---- head-2008-12-01.orig/include/linux/page-flags.h 2008-12-01 11:48:52.000000000 +0100
-+++ head-2008-12-01/include/linux/page-flags.h 2008-12-01 11:49:07.000000000 +0100
-@@ -109,9 +109,11 @@ enum pageflags {
+--- sle11-2009-06-04.orig/include/linux/page-flags.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/linux/page-flags.h 2009-06-04 10:21:39.000000000 +0200
+@@ -110,9 +110,11 @@ enum pageflags {
/* Filesystems */
PG_checked = PG_owner_priv_1,
/* SLOB */
PG_slob_page = PG_active,
-@@ -185,8 +187,12 @@ PAGEFLAG(LRU, lru) __CLEARPAGEFLAG(LRU,
+@@ -187,8 +189,12 @@ PAGEFLAG(LRU, lru) __CLEARPAGEFLAG(LRU,
PAGEFLAG(Active, active) __CLEARPAGEFLAG(Active, active)
__PAGEFLAG(Slab, slab)
PAGEFLAG(Checked, checked) /* Used by some filesystems */
PAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved)
PAGEFLAG(Private, private) __CLEARPAGEFLAG(Private, private)
__SETPAGEFLAG(Private, private)
-Index: head-2008-12-01/include/xen/interface/memory.h
-===================================================================
---- head-2008-12-01.orig/include/xen/interface/memory.h 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/include/xen/interface/memory.h 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/include/xen/interface/memory.h 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/include/xen/interface/memory.h 2009-06-04 10:21:39.000000000 +0200
@@ -82,6 +82,7 @@ struct xen_memory_reservation {
domid_t domid;
};
DEFINE_XEN_GUEST_HANDLE_STRUCT(xen_translate_gpfn_list);
typedef struct xen_translate_gpfn_list xen_translate_gpfn_list_t;
-Index: head-2008-12-01/kernel/hrtimer.c
-===================================================================
---- head-2008-12-01.orig/kernel/hrtimer.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/kernel/hrtimer.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/kernel/hrtimer.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/kernel/hrtimer.c 2009-06-04 10:21:39.000000000 +0200
@@ -1084,7 +1084,7 @@ ktime_t hrtimer_get_remaining(const stru
}
EXPORT_SYMBOL_GPL(hrtimer_get_remaining);
/**
* hrtimer_get_next_event - get the time until next expiry event
*
-Index: head-2008-12-01/kernel/timer.c
-===================================================================
---- head-2008-12-01.orig/kernel/timer.c 2008-12-03 15:48:43.000000000 +0100
-+++ head-2008-12-01/kernel/timer.c 2008-12-01 11:49:07.000000000 +0100
-@@ -815,7 +815,7 @@ static inline void __run_timers(struct t
+--- sle11-2009-06-04.orig/kernel/kexec.c 2009-02-17 12:38:20.000000000 +0100
++++ sle11-2009-06-04/kernel/kexec.c 2009-06-04 10:21:39.000000000 +0200
+@@ -54,7 +54,7 @@ int dump_after_notifier;
+ unsigned char vmcoreinfo_data[VMCOREINFO_BYTES];
+ u32
+ #if defined(CONFIG_XEN) && defined(CONFIG_X86)
+-__attribute__((__section__(".bss.page_aligned"), __aligned__(PAGE_SIZE)))
++__page_aligned_bss
+ #endif
+ vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4];
+ size_t vmcoreinfo_size;
+--- sle11-2009-06-04.orig/kernel/timer.c 2009-06-04 11:08:07.000000000 +0200
++++ sle11-2009-06-04/kernel/timer.c 2009-06-04 10:21:39.000000000 +0200
+@@ -884,7 +884,7 @@ static inline void __run_timers(struct t
spin_unlock_irq(&base->lock);
}
/*
* Find out when the next timer event is due to happen. This
* is used on S/390 to stop all activity when a cpus is idle.
-Index: head-2008-12-01/lib/swiotlb-xen.c
-===================================================================
---- head-2008-12-01.orig/lib/swiotlb-xen.c 2008-12-01 11:44:55.000000000 +0100
-+++ head-2008-12-01/lib/swiotlb-xen.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/lib/swiotlb-xen.c 2009-03-16 16:38:05.000000000 +0100
++++ sle11-2009-06-04/lib/swiotlb-xen.c 2009-06-04 10:21:39.000000000 +0200
@@ -750,7 +750,7 @@ swiotlb_sync_sg_for_device(struct device
}
{
return (dma_addr == virt_to_bus(io_tlb_overflow_buffer));
}
-Index: head-2008-12-01/mm/mprotect.c
-===================================================================
---- head-2008-12-01.orig/mm/mprotect.c 2008-12-01 11:29:05.000000000 +0100
-+++ head-2008-12-01/mm/mprotect.c 2008-12-01 11:49:07.000000000 +0100
+--- sle11-2009-06-04.orig/mm/mprotect.c 2009-03-04 11:28:34.000000000 +0100
++++ sle11-2009-06-04/mm/mprotect.c 2009-06-04 10:21:39.000000000 +0200
@@ -92,8 +92,6 @@ static inline void change_pmd_range(stru
next = pmd_addr_end(addr, end);
if (pmd_none_or_clear_bad(pmd))