[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [linux-2.6.18-xen] merge with linux-2.6.18-xen.hg



# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1183400427 21600
# Node ID 291e24787f8b5d0fe0af1377bd37d38da78168c3
# Parent  fbbd06d74324296047f909a0ac0e4f5732d0bcc3
# Parent  57ab8dd47580c2f726556fe1c46b5401f2bddb1e
merge with linux-2.6.18-xen.hg
---
 arch/i386/kernel/setup-xen.c               |   37 +++++++++
 arch/i386/kernel/setup.c                   |   22 +++++
 arch/i386/kernel/time-xen.c                |   36 ++++++---
 arch/i386/mm/hypervisor.c                  |  111 +++++++++++++++++++++++++++++
 arch/x86_64/kernel/e820-xen.c              |   17 +++-
 arch/x86_64/kernel/e820.c                  |    3 
 arch/x86_64/kernel/setup-xen.c             |    5 +
 buildconfigs/linux-defconfig_xen0_x86_32   |    2 
 buildconfigs/linux-defconfig_xen0_x86_64   |   16 +---
 buildconfigs/linux-defconfig_xenU_x86_32   |    2 
 buildconfigs/linux-defconfig_xenU_x86_64   |   14 +--
 buildconfigs/linux-defconfig_xen_x86_32    |    2 
 buildconfigs/linux-defconfig_xen_x86_64    |   16 +---
 drivers/char/agp/amd64-agp.c               |   13 +--
 drivers/char/agp/generic.c                 |   22 -----
 drivers/char/agp/intel-agp.c               |   15 +++
 drivers/firmware/Kconfig                   |    1 
 drivers/xen/Kconfig                        |    1 
 drivers/xen/balloon/balloon.c              |    6 +
 drivers/xen/blkback/blkback.c              |    4 -
 drivers/xen/blktap/blktap.c                |    3 
 drivers/xen/core/Makefile                  |    4 -
 drivers/xen/core/firmware.c                |   74 +++++++++++++++++++
 drivers/xen/core/hypervisor_sysfs.c        |    7 -
 include/asm-i386/agp.h                     |    6 +
 include/asm-i386/e820.h                    |    1 
 include/asm-i386/mach-xen/asm/agp.h        |   11 ++
 include/asm-i386/mach-xen/asm/hypervisor.h |    5 +
 include/asm-x86_64/agp.h                   |    6 +
 include/asm-x86_64/mach-xen/asm/agp.h      |    9 +-
 include/xen/firmware.h                     |   10 ++
 include/xen/hypervisor_sysfs.h             |    2 
 include/xen/interface/platform.h           |   40 ++++++++++
 include/xen/interface/trace.h              |    1 
 kernel/kexec.c                             |    3 
 35 files changed, 422 insertions(+), 105 deletions(-)

diff -r fbbd06d74324 -r 291e24787f8b arch/i386/kernel/setup-xen.c
--- a/arch/i386/kernel/setup-xen.c      Mon Jul 02 09:56:35 2007 -0600
+++ b/arch/i386/kernel/setup-xen.c      Mon Jul 02 12:20:27 2007 -0600
@@ -66,6 +66,7 @@
 #include <xen/interface/physdev.h>
 #include <xen/interface/memory.h>
 #include <xen/features.h>
+#include <xen/firmware.h>
 #include <xen/xencons.h>
 #include <setup_arch.h>
 #include <bios_ebda.h>
@@ -155,6 +156,9 @@ struct sys_desc_table_struct {
 };
 struct edid_info edid_info;
 EXPORT_SYMBOL_GPL(edid_info);
+#ifndef CONFIG_XEN
+#define copy_edid() (edid_info = EDID_INFO)
+#endif
 struct ist_info ist_info;
 #if defined(CONFIG_X86_SPEEDSTEP_SMI) || \
        defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
@@ -740,6 +744,7 @@ struct edd edd;
 #ifdef CONFIG_EDD_MODULE
 EXPORT_SYMBOL(edd);
 #endif
+#ifndef CONFIG_XEN
 /**
  * copy_edd() - Copy the BIOS EDD information
  *              from boot_params into a safe place.
@@ -752,6 +757,7 @@ static inline void copy_edd(void)
      edd.mbr_signature_nr = EDD_MBR_SIG_NR;
      edd.edd_info_nr = EDD_NR;
 }
+#endif
 #else
 static inline void copy_edd(void)
 {
@@ -1022,6 +1028,35 @@ efi_memory_present_wrapper(unsigned long
        return 0;
 }
 
+/*
+ * This function checks if any part of the range <start,end> is mapped
+ * with type.
+ */
+int
+e820_any_mapped(u64 start, u64 end, unsigned type)
+{
+       int i;
+
+#ifndef CONFIG_XEN
+       for (i = 0; i < e820.nr_map; i++) {
+               const struct e820entry *ei = &e820.map[i];
+#else
+       if (!is_initial_xendomain())
+               return 0;
+       for (i = 0; i < machine_e820.nr_map; ++i) {
+               const struct e820entry *ei = &machine_e820.map[i];
+#endif
+
+               if (type && ei->type != type)
+                       continue;
+               if (ei->addr >= end || ei->addr + ei->size <= start)
+                       continue;
+               return 1;
+       }
+       return 0;
+}
+EXPORT_SYMBOL_GPL(e820_any_mapped);
+
  /*
   * This function checks if the entire range <start,end> is mapped with type.
   *
@@ -1621,7 +1656,7 @@ void __init setup_arch(char **cmdline_p)
        ROOT_DEV = MKDEV(UNNAMED_MAJOR,0);
        drive_info = DRIVE_INFO;
        screen_info = SCREEN_INFO;
-       edid_info = EDID_INFO;
+       copy_edid();
        apm_info.bios = APM_BIOS_INFO;
        ist_info = IST_INFO;
        saved_videomode = VIDEO_MODE;
diff -r fbbd06d74324 -r 291e24787f8b arch/i386/kernel/setup.c
--- a/arch/i386/kernel/setup.c  Mon Jul 02 09:56:35 2007 -0600
+++ b/arch/i386/kernel/setup.c  Mon Jul 02 12:20:27 2007 -0600
@@ -956,6 +956,28 @@ efi_memory_present_wrapper(unsigned long
        return 0;
 }
 
+/*
+ * This function checks if any part of the range <start,end> is mapped
+ * with type.
+ */
+int
+e820_any_mapped(u64 start, u64 end, unsigned type)
+{
+       int i;
+
+       for (i = 0; i < e820.nr_map; i++) {
+               const struct e820entry *ei = &e820.map[i];
+
+               if (type && ei->type != type)
+                       continue;
+               if (ei->addr >= end || ei->addr + ei->size <= start)
+                       continue;
+               return 1;
+       }
+       return 0;
+}
+EXPORT_SYMBOL_GPL(e820_any_mapped);
+
  /*
   * This function checks if the entire range <start,end> is mapped with type.
   *
diff -r fbbd06d74324 -r 291e24787f8b arch/i386/kernel/time-xen.c
--- a/arch/i386/kernel/time-xen.c       Mon Jul 02 09:56:35 2007 -0600
+++ b/arch/i386/kernel/time-xen.c       Mon Jul 02 12:20:27 2007 -0600
@@ -113,6 +113,9 @@ static struct timespec shadow_tv;
 static struct timespec shadow_tv;
 static u32 shadow_tv_version;
 
+static struct timeval monotonic_tv;
+static spinlock_t monotonic_lock = SPIN_LOCK_UNLOCKED;
+
 /* Keep track of last time we did processing/updating of jiffies and xtime. */
 static u64 processed_system_time;   /* System time (ns) at last processing. */
 static DEFINE_PER_CPU(u64, processed_system_time);
@@ -363,6 +366,7 @@ void do_gettimeofday(struct timeval *tv)
        unsigned long seq;
        unsigned long usec, sec;
        unsigned long max_ntp_tick;
+       unsigned long flags;
        s64 nsec;
        unsigned int cpu;
        struct shadow_time_info *shadow;
@@ -380,19 +384,7 @@ void do_gettimeofday(struct timeval *tv)
                usec = get_usec_offset(shadow);
                lost = jiffies - wall_jiffies;
 
-               /*
-                * If time_adjust is negative then NTP is slowing the clock
-                * so make sure not to go into next possible interval.
-                * Better to lose some accuracy than have time go backwards..
-                */
-               if (unlikely(time_adjust < 0)) {
-                       max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj;
-                       usec = min(usec, max_ntp_tick);
-
-                       if (lost)
-                               usec += lost * max_ntp_tick;
-               }
-               else if (unlikely(lost))
+               if (unlikely(lost))
                        usec += lost * (USEC_PER_SEC / HZ);
 
                sec = xtime.tv_sec;
@@ -423,6 +415,18 @@ void do_gettimeofday(struct timeval *tv)
                sec++;
        }
 
+       spin_lock_irqsave(&monotonic_lock, flags);
+       if ((sec > monotonic_tv.tv_sec) ||
+           ((sec == monotonic_tv.tv_sec) && (usec > monotonic_tv.tv_usec)))
+       {
+               monotonic_tv.tv_sec = sec;
+               monotonic_tv.tv_usec = usec;
+       } else {
+               sec = monotonic_tv.tv_sec;
+               usec = monotonic_tv.tv_usec;
+       }
+       spin_unlock_irqrestore(&monotonic_lock, flags);
+
        tv->tv_sec = sec;
        tv->tv_usec = usec;
 }
@@ -471,6 +475,12 @@ int do_settimeofday(struct timespec *tv)
                __normalize_time(&sec, &nsec);
                __update_wallclock(sec, nsec);
        }
+
+       /* Reset monotonic gettimeofday() timeval. */
+       spin_lock(&monotonic_lock);
+       monotonic_tv.tv_sec = 0;
+       monotonic_tv.tv_usec = 0;
+       spin_unlock(&monotonic_lock);
 
        write_sequnlock_irq(&xtime_lock);
 
diff -r fbbd06d74324 -r 291e24787f8b arch/i386/mm/hypervisor.c
--- a/arch/i386/mm/hypervisor.c Mon Jul 02 09:56:35 2007 -0600
+++ b/arch/i386/mm/hypervisor.c Mon Jul 02 12:20:27 2007 -0600
@@ -42,6 +42,7 @@
 #include <linux/module.h>
 #include <linux/percpu.h>
 #include <asm/tlbflush.h>
+#include <linux/highmem.h>
 
 void xen_l1_entry_update(pte_t *ptr, pte_t val)
 {
@@ -234,6 +235,7 @@ static void contiguous_bitmap_clear(
 /* Protected by balloon_lock. */
 #define MAX_CONTIG_ORDER 9 /* 2MB */
 static unsigned long discontig_frames[1<<MAX_CONTIG_ORDER];
+static unsigned long limited_frames[1<<MAX_CONTIG_ORDER];
 static multicall_entry_t cr_mcl[1<<MAX_CONTIG_ORDER];
 
 /* Ensure multi-page extents are contiguous in machine memory. */
@@ -421,6 +423,115 @@ void xen_destroy_contiguous_region(unsig
 }
 EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region);
 
+int xen_limit_pages_to_max_mfn(
+       struct page *pages, unsigned int order, unsigned int address_bits)
+{
+       unsigned long flags, frame;
+       unsigned long *in_frames = discontig_frames, *out_frames = 
limited_frames;
+       void *v;
+       struct page *page;
+       int i, nr_mcl, rc, success;
+
+       struct xen_memory_exchange exchange = {
+               .in = {
+                       .nr_extents   = 1UL << order,
+                       .extent_order = 0,
+                       .domid        = DOMID_SELF
+               },
+               .out = {
+                       .nr_extents   = 1UL << order,
+                       .extent_order = 0,
+                       .address_bits = address_bits,
+                       .domid        = DOMID_SELF
+               }
+       };
+
+       if (xen_feature(XENFEAT_auto_translated_physmap))
+               return 0;
+
+       if (unlikely(order > MAX_CONTIG_ORDER))
+               return -ENOMEM;
+
+       set_xen_guest_handle(exchange.in.extent_start, in_frames);
+       set_xen_guest_handle(exchange.out.extent_start, out_frames);
+
+       /* 0. Scrub the pages. */
+       for ( i = 0 ; i < 1UL<<order ; i++ ) {
+               page = &pages[i];
+
+               if (!PageHighMem(page)) {
+                       v = page_address(page);
+                       scrub_pages(v, 1);
+               } else {
+                       v = kmap(page);
+                       scrub_pages(v, 1);
+                       kunmap(page);
+               }
+       }
+
+       kmap_flush_unused();
+
+       balloon_lock(flags);
+
+       /* 1. Zap current PTEs (if any), remembering MFNs. */
+       for (i = 0, nr_mcl = 0; i < (1UL<<order); i++) {
+               page = &pages[i];
+
+               out_frames[i] = page_to_pfn(page);
+               in_frames[i] = pfn_to_mfn(out_frames[i]);
+
+               if (!PageHighMem(page))
+                       MULTI_update_va_mapping(cr_mcl + nr_mcl++,
+                                               (unsigned 
long)page_address(page),
+                                               __pte_ma(0), 0);
+
+               set_phys_to_machine(out_frames[i], INVALID_P2M_ENTRY);
+       }
+       if (HYPERVISOR_multicall_check(cr_mcl, nr_mcl, NULL))
+               BUG();
+
+       /* 2. Get new memory below the required limit. */
+       rc = HYPERVISOR_memory_op(XENMEM_exchange, &exchange);
+       success = (exchange.nr_exchanged == (1UL << order));
+       BUG_ON(!success && ((exchange.nr_exchanged != 0) || (rc == 0)));
+       BUG_ON(success && (rc != 0));
+#if CONFIG_XEN_COMPAT <= 0x030002
+       if (unlikely(rc == -ENOSYS)) {
+               /* Compatibility when XENMEM_exchange is unsupported. */
+               if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
+                                        &exchange.in) != (1UL << order))
+                       BUG();
+               success = (HYPERVISOR_memory_op(XENMEM_populate_physmap,
+                                               &exchange.out) != (1UL 
<<order));
+       }
+#endif
+
+       /* 3. Map the new pages in place of old pages. */
+       for (i = 0, nr_mcl = 0; i < (1UL<<order); i++) {
+               page = &pages[i];
+               unsigned long pfn = page_to_pfn(page);
+
+               frame = success ? out_frames[i] : in_frames[i];
+
+               if (!PageHighMem(page))
+                       MULTI_update_va_mapping(cr_mcl + nr_mcl++,
+                                               (unsigned 
long)page_address(page),
+                                               pfn_pte_ma(frame, PAGE_KERNEL), 
0);
+
+               set_phys_to_machine(pfn, frame);
+       }
+       cr_mcl[nr_mcl - 1].args[MULTI_UVMFLAGS_INDEX] = order
+                                                       ? 
UVMF_TLB_FLUSH|UVMF_ALL
+                                                       : UVMF_INVLPG|UVMF_ALL;
+       if (HYPERVISOR_multicall_check(cr_mcl, nr_mcl, NULL))
+               BUG();
+
+       balloon_unlock(flags);
+
+       return success ? 0 : -ENOMEM;
+}
+EXPORT_SYMBOL_GPL(xen_limit_pages_to_max_mfn);
+
 #ifdef __i386__
 int write_ldt_entry(void *ldt, int entry, __u32 entry_a, __u32 entry_b)
 {
diff -r fbbd06d74324 -r 291e24787f8b arch/x86_64/kernel/e820-xen.c
--- a/arch/x86_64/kernel/e820-xen.c     Mon Jul 02 09:56:35 2007 -0600
+++ b/arch/x86_64/kernel/e820-xen.c     Mon Jul 02 12:20:27 2007 -0600
@@ -97,17 +97,26 @@ static inline int bad_addr(unsigned long
        return 0;
 } 
 
-#ifndef CONFIG_XEN
 /*
  * This function checks if any part of the range <start,end> is mapped
  * with type.
  */
-int __meminit
-e820_any_mapped(unsigned long start, unsigned long end, unsigned type)
+int e820_any_mapped(unsigned long start, unsigned long end, unsigned type)
 { 
        int i;
+
+#ifndef CONFIG_XEN
        for (i = 0; i < e820.nr_map; i++) { 
                struct e820entry *ei = &e820.map[i]; 
+#else
+       extern struct e820map machine_e820;
+
+       if (!is_initial_xendomain())
+               return 0;
+       for (i = 0; i < machine_e820.nr_map; i++) {
+               const struct e820entry *ei = &machine_e820.map[i];
+#endif
+
                if (type && ei->type != type) 
                        continue;
                if (ei->addr >= end || ei->addr + ei->size <= start)
@@ -116,7 +125,7 @@ e820_any_mapped(unsigned long start, uns
        } 
        return 0;
 }
-#endif
+EXPORT_SYMBOL_GPL(e820_any_mapped);
 
 /*
  * This function checks if the entire range <start,end> is mapped with type.
diff -r fbbd06d74324 -r 291e24787f8b arch/x86_64/kernel/e820.c
--- a/arch/x86_64/kernel/e820.c Mon Jul 02 09:56:35 2007 -0600
+++ b/arch/x86_64/kernel/e820.c Mon Jul 02 12:20:27 2007 -0600
@@ -93,7 +93,7 @@ static inline int bad_addr(unsigned long
  * This function checks if any part of the range <start,end> is mapped
  * with type.
  */
-int __meminit
+int
 e820_any_mapped(unsigned long start, unsigned long end, unsigned type)
 { 
        int i;
@@ -107,6 +107,7 @@ e820_any_mapped(unsigned long start, uns
        } 
        return 0;
 }
+EXPORT_SYMBOL_GPL(e820_any_mapped);
 
 /*
  * This function checks if the entire range <start,end> is mapped with type.
diff -r fbbd06d74324 -r 291e24787f8b arch/x86_64/kernel/setup-xen.c
--- a/arch/x86_64/kernel/setup-xen.c    Mon Jul 02 09:56:35 2007 -0600
+++ b/arch/x86_64/kernel/setup-xen.c    Mon Jul 02 12:20:27 2007 -0600
@@ -71,6 +71,7 @@
 #include <asm/hypervisor.h>
 #include <xen/interface/nmi.h>
 #include <xen/features.h>
+#include <xen/firmware.h>
 #include <xen/xencons.h>
 #define PFN_UP(x)       (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
 #define PFN_PHYS(x)     ((x) << PAGE_SHIFT)
@@ -534,6 +535,7 @@ struct edd edd;
 #ifdef CONFIG_EDD_MODULE
 EXPORT_SYMBOL(edd);
 #endif
+#ifndef CONFIG_XEN
 /**
  * copy_edd() - Copy the BIOS EDD information
  *              from boot_params into a safe place.
@@ -546,6 +548,7 @@ static inline void copy_edd(void)
      edd.mbr_signature_nr = EDD_MBR_SIG_NR;
      edd.edd_info_nr = EDD_NR;
 }
+#endif
 #else
 static inline void copy_edd(void)
 {
@@ -613,7 +616,7 @@ void __init setup_arch(char **cmdline_p)
        } else
                screen_info.orig_video_isVGA = 0;
 
-       edid_info = EDID_INFO;
+       copy_edid();
        saved_video_mode = SAVED_VIDEO_MODE;
        bootloader_type = LOADER_TYPE;
 
diff -r fbbd06d74324 -r 291e24787f8b buildconfigs/linux-defconfig_xen0_x86_32
--- a/buildconfigs/linux-defconfig_xen0_x86_32  Mon Jul 02 09:56:35 2007 -0600
+++ b/buildconfigs/linux-defconfig_xen0_x86_32  Mon Jul 02 12:20:27 2007 -0600
@@ -155,12 +155,14 @@ CONFIG_VM86=y
 # CONFIG_I8K is not set
 # CONFIG_X86_REBOOTFIXUPS is not set
 CONFIG_MICROCODE=y
+CONFIG_X86_MSR=y
 CONFIG_X86_CPUID=y
 CONFIG_SWIOTLB=y
 
 #
 # Firmware Drivers
 #
+CONFIG_EDD=y
 # CONFIG_DELL_RBU is not set
 # CONFIG_DCDBAS is not set
 # CONFIG_NOHIGHMEM is not set
diff -r fbbd06d74324 -r 291e24787f8b buildconfigs/linux-defconfig_xen0_x86_64
--- a/buildconfigs/linux-defconfig_xen0_x86_64  Mon Jul 02 09:56:35 2007 -0600
+++ b/buildconfigs/linux-defconfig_xen0_x86_64  Mon Jul 02 12:20:27 2007 -0600
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.18-xen0
-# Wed Jan 17 18:26:35 2007
+# Linux kernel version: 2.6.18
+# Wed Jun 27 12:48:41 2007
 #
 CONFIG_X86_64=y
 CONFIG_64BIT=y
@@ -132,7 +132,6 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096
 CONFIG_SPLIT_PTLOCK_CPUS=4096
 CONFIG_RESOURCES_64BIT=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-# CONFIG_CALGARY_IOMMU is not set
 CONFIG_SWIOTLB=y
 CONFIG_KEXEC=y
 # CONFIG_CRASH_DUMP is not set
@@ -341,7 +340,7 @@ CONFIG_STANDALONE=y
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 # CONFIG_FW_LOADER is not set
 # CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_SYS_HYPERVISOR=y
 
 #
 # Connector - unified userspace <-> kernelspace linker
@@ -1096,6 +1095,7 @@ CONFIG_RTC_DRV_V3020=m
 #
 # Firmware Drivers
 #
+CONFIG_EDD=y
 # CONFIG_DELL_RBU is not set
 # CONFIG_DCDBAS is not set
 
@@ -1353,6 +1353,7 @@ CONFIG_XEN_PCIDEV_BACKEND=y
 # CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
 CONFIG_XEN_PCIDEV_BACKEND_PASS=y
 # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
+# CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER is not set
 # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
 CONFIG_XEN_TPMDEV_BACKEND=m
 CONFIG_XEN_BLKDEV_FRONTEND=y
@@ -1363,14 +1364,9 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
 CONFIG_XEN_COMPAT_030002_AND_LATER=y
 # CONFIG_XEN_COMPAT_030004_AND_LATER is not set
 # CONFIG_XEN_COMPAT_LATEST_ONLY is not set
-CONFIG_XEN_COMPAT_030002=y
-CONFIG_XEN_COMPAT_030004=y
+CONFIG_XEN_COMPAT=0x030002
 CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
-CONFIG_XEN_UTIL=y
-CONFIG_XEN_BALLOON=y
-CONFIG_XEN_DEVMEM=y
-CONFIG_XEN_REBOOT=y
 
 #
 # Library routines
diff -r fbbd06d74324 -r 291e24787f8b buildconfigs/linux-defconfig_xenU_x86_32
--- a/buildconfigs/linux-defconfig_xenU_x86_32  Mon Jul 02 09:56:35 2007 -0600
+++ b/buildconfigs/linux-defconfig_xenU_x86_32  Mon Jul 02 12:20:27 2007 -0600
@@ -152,12 +152,14 @@ CONFIG_VM86=y
 # CONFIG_TOSHIBA is not set
 # CONFIG_I8K is not set
 # CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_X86_MSR is not set
 CONFIG_X86_CPUID=y
 CONFIG_SWIOTLB=y
 
 #
 # Firmware Drivers
 #
+# CONFIG_EDD is not set
 # CONFIG_DELL_RBU is not set
 # CONFIG_DCDBAS is not set
 # CONFIG_NOHIGHMEM is not set
diff -r fbbd06d74324 -r 291e24787f8b buildconfigs/linux-defconfig_xenU_x86_64
--- a/buildconfigs/linux-defconfig_xenU_x86_64  Mon Jul 02 09:56:35 2007 -0600
+++ b/buildconfigs/linux-defconfig_xenU_x86_64  Mon Jul 02 12:20:27 2007 -0600
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.18-xenU
-# Wed Jan 17 18:28:53 2007
+# Linux kernel version: 2.6.18
+# Wed Jun 27 12:48:56 2007
 #
 CONFIG_X86_64=y
 CONFIG_64BIT=y
@@ -506,7 +506,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
 # CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_SYS_HYPERVISOR=y
 
 #
 # Connector - unified userspace <-> kernelspace linker
@@ -913,6 +913,7 @@ CONFIG_DUMMY_CONSOLE=y
 #
 # Firmware Drivers
 #
+# CONFIG_EDD is not set
 # CONFIG_DELL_RBU is not set
 # CONFIG_DCDBAS is not set
 
@@ -1218,14 +1219,9 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
 CONFIG_XEN_COMPAT_030002_AND_LATER=y
 # CONFIG_XEN_COMPAT_030004_AND_LATER is not set
 # CONFIG_XEN_COMPAT_LATEST_ONLY is not set
-CONFIG_XEN_COMPAT_030002=y
-CONFIG_XEN_COMPAT_030004=y
+CONFIG_XEN_COMPAT=0x030002
 CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
-CONFIG_XEN_UTIL=y
-CONFIG_XEN_BALLOON=y
-CONFIG_XEN_DEVMEM=y
-CONFIG_XEN_REBOOT=y
 CONFIG_XEN_SMPBOOT=y
 
 #
diff -r fbbd06d74324 -r 291e24787f8b buildconfigs/linux-defconfig_xen_x86_32
--- a/buildconfigs/linux-defconfig_xen_x86_32   Mon Jul 02 09:56:35 2007 -0600
+++ b/buildconfigs/linux-defconfig_xen_x86_32   Mon Jul 02 12:20:27 2007 -0600
@@ -160,12 +160,14 @@ CONFIG_VM86=y
 # CONFIG_I8K is not set
 # CONFIG_X86_REBOOTFIXUPS is not set
 CONFIG_MICROCODE=y
+CONFIG_X86_MSR=y
 CONFIG_X86_CPUID=m
 CONFIG_SWIOTLB=y
 
 #
 # Firmware Drivers
 #
+CONFIG_EDD=y
 CONFIG_DELL_RBU=m
 CONFIG_DCDBAS=m
 # CONFIG_NOHIGHMEM is not set
diff -r fbbd06d74324 -r 291e24787f8b buildconfigs/linux-defconfig_xen_x86_64
--- a/buildconfigs/linux-defconfig_xen_x86_64   Mon Jul 02 09:56:35 2007 -0600
+++ b/buildconfigs/linux-defconfig_xen_x86_64   Mon Jul 02 12:20:27 2007 -0600
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.18-xen
-# Wed Jan 17 18:33:45 2007
+# Linux kernel version: 2.6.18
+# Wed Jun 27 12:49:06 2007
 #
 CONFIG_X86_64=y
 CONFIG_64BIT=y
@@ -141,7 +141,6 @@ CONFIG_NR_CPUS=32
 CONFIG_NR_CPUS=32
 CONFIG_HOTPLUG_CPU=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-# CONFIG_CALGARY_IOMMU is not set
 CONFIG_SWIOTLB=y
 CONFIG_KEXEC=y
 # CONFIG_CRASH_DUMP is not set
@@ -749,7 +748,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=m
 # CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_SYS_HYPERVISOR=y
 
 #
 # Connector - unified userspace <-> kernelspace linker
@@ -2750,6 +2749,7 @@ CONFIG_INTEL_IOATDMA=m
 #
 # Firmware Drivers
 #
+CONFIG_EDD=y
 CONFIG_DELL_RBU=m
 CONFIG_DCDBAS=m
 
@@ -3091,6 +3091,7 @@ CONFIG_XEN_PCIDEV_BACKEND=m
 # CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
 CONFIG_XEN_PCIDEV_BACKEND_PASS=y
 # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
+# CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER is not set
 # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
 CONFIG_XEN_TPMDEV_BACKEND=m
 CONFIG_XEN_BLKDEV_FRONTEND=y
@@ -3103,14 +3104,9 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
 CONFIG_XEN_COMPAT_030002_AND_LATER=y
 # CONFIG_XEN_COMPAT_030004_AND_LATER is not set
 # CONFIG_XEN_COMPAT_LATEST_ONLY is not set
-CONFIG_XEN_COMPAT_030002=y
-CONFIG_XEN_COMPAT_030004=y
+CONFIG_XEN_COMPAT=0x030002
 CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
-CONFIG_XEN_UTIL=y
-CONFIG_XEN_BALLOON=y
-CONFIG_XEN_DEVMEM=y
-CONFIG_XEN_REBOOT=y
 CONFIG_XEN_SMPBOOT=y
 
 #
diff -r fbbd06d74324 -r 291e24787f8b drivers/char/agp/amd64-agp.c
--- a/drivers/char/agp/amd64-agp.c      Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/char/agp/amd64-agp.c      Mon Jul 02 12:20:27 2007 -0600
@@ -15,6 +15,7 @@
 #include <linux/mmzone.h>
 #include <asm/page.h>          /* PAGE_SIZE */
 #include <asm/k8.h>
+#include <asm/e820.h>
 #include "agp.h"
 
 /* PTE bits. */
@@ -252,7 +253,6 @@ static struct agp_bridge_driver amd_8151
 /* Some basic sanity checks for the aperture. */
 static int __devinit aperture_valid(u64 aper, u32 size)
 {
-       u32 pfn, c;
        if (aper == 0) {
                printk(KERN_ERR PFX "No aperture\n");
                return 0;
@@ -265,14 +265,9 @@ static int __devinit aperture_valid(u64 
                printk(KERN_ERR PFX "Aperture out of bounds\n");
                return 0;
        }
-       pfn = aper >> PAGE_SHIFT;
-       for (c = 0; c < size/PAGE_SIZE; c++) {
-               if (!pfn_valid(pfn + c))
-                       break;
-               if (!PageReserved(pfn_to_page(pfn + c))) {
-                       printk(KERN_ERR PFX "Aperture pointing to RAM\n");
-                       return 0;
-               }
+       if (e820_any_mapped(aper, aper + size, E820_RAM)) {
+               printk(KERN_ERR PFX "Aperture pointing to RAM\n");
+               return 0;
        }
 
        /* Request the Aperture. This catches cases when someone else
diff -r fbbd06d74324 -r 291e24787f8b drivers/char/agp/generic.c
--- a/drivers/char/agp/generic.c        Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/char/agp/generic.c        Mon Jul 02 12:20:27 2007 -0600
@@ -50,28 +50,6 @@ int agp_memory_reserved;
  * nice to do this some other way instead of needing this export.
  */
 EXPORT_SYMBOL_GPL(agp_memory_reserved);
-
-#if defined(CONFIG_X86)
-int map_page_into_agp(struct page *page)
-{
-       int i;
-       i = change_page_attr(page, 1, PAGE_KERNEL_NOCACHE);
-       /* Caller's responsibility to call global_flush_tlb() for
-        * performance reasons */
-       return i;
-}
-EXPORT_SYMBOL_GPL(map_page_into_agp);
-
-int unmap_page_from_agp(struct page *page)
-{
-       int i;
-       i = change_page_attr(page, 1, PAGE_KERNEL);
-       /* Caller's responsibility to call global_flush_tlb() for
-        * performance reasons */
-       return i;
-}
-EXPORT_SYMBOL_GPL(unmap_page_from_agp);
-#endif
 
 /*
  * Generic routines for handling agp_memory structures -
diff -r fbbd06d74324 -r 291e24787f8b drivers/char/agp/intel-agp.c
--- a/drivers/char/agp/intel-agp.c      Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/char/agp/intel-agp.c      Mon Jul 02 12:20:27 2007 -0600
@@ -164,9 +164,17 @@ static void *i8xx_alloc_pages(void)
        if (page == NULL)
                return NULL;
 
+#ifdef CONFIG_XEN
+       if (xen_create_contiguous_region((unsigned long)page_address(page), 2, 
32)) {
+               __free_pages(page, 2);
+               return NULL;
+       }
+#endif
+
        if (change_page_attr(page, 4, PAGE_KERNEL_NOCACHE) < 0) {
+               change_page_attr(page, 4, PAGE_KERNEL);
                global_flush_tlb();
-               __free_page(page);
+               __free_pages(page, 2);
                return NULL;
        }
        global_flush_tlb();
@@ -186,9 +194,12 @@ static void i8xx_destroy_pages(void *add
        page = virt_to_page(addr);
        change_page_attr(page, 4, PAGE_KERNEL);
        global_flush_tlb();
+#ifdef CONFIG_XEN
+       xen_destroy_contiguous_region((unsigned long)page_address(page), 2);
+#endif
        put_page(page);
        unlock_page(page);
-       free_pages((unsigned long)addr, 2);
+       __free_pages(page, 2);
        atomic_dec(&agp_bridge->current_memory_agp);
 }
 
diff -r fbbd06d74324 -r 291e24787f8b drivers/firmware/Kconfig
--- a/drivers/firmware/Kconfig  Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/firmware/Kconfig  Mon Jul 02 12:20:27 2007 -0600
@@ -8,7 +8,6 @@ config EDD
 config EDD
        tristate "BIOS Enhanced Disk Drive calls determine boot disk"
        depends on !IA64
-       depends on !XEN
        help
          Say Y or M here if you want to enable BIOS Enhanced Disk Drive
          Services real mode BIOS calls to determine which disk
diff -r fbbd06d74324 -r 291e24787f8b drivers/xen/Kconfig
--- a/drivers/xen/Kconfig       Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/xen/Kconfig       Mon Jul 02 12:20:27 2007 -0600
@@ -232,6 +232,7 @@ config XEN_SYSFS
 config XEN_SYSFS
        tristate "Export Xen attributes in sysfs"
        depends on SYSFS
+       select SYS_HYPERVISOR
        default y
        help
          Xen hypervisor attributes will show up under /sys/hypervisor/.
diff -r fbbd06d74324 -r 291e24787f8b drivers/xen/balloon/balloon.c
--- a/drivers/xen/balloon/balloon.c     Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/xen/balloon/balloon.c     Mon Jul 02 12:20:27 2007 -0600
@@ -83,6 +83,7 @@ static unsigned long frame_list[PAGE_SIZ
 
 /* VM /proc information for memory */
 extern unsigned long totalram_pages;
+extern unsigned long totalhigh_pages;
 
 /* List of ballooned pages, threaded through the mem_map array. */
 static LIST_HEAD(ballooned_pages);
@@ -118,6 +119,7 @@ static void balloon_append(struct page *
        if (PageHighMem(page)) {
                list_add_tail(PAGE_TO_LIST(page), &ballooned_pages);
                bs.balloon_high++;
+               totalhigh_pages--;
        } else {
                list_add(PAGE_TO_LIST(page), &ballooned_pages);
                bs.balloon_low++;
@@ -135,8 +137,10 @@ static struct page *balloon_retrieve(voi
        page = LIST_TO_PAGE(ballooned_pages.next);
        UNLIST_PAGE(page);
 
-       if (PageHighMem(page))
+       if (PageHighMem(page)) {
                bs.balloon_high--;
+               totalhigh_pages++;
+       }
        else
                bs.balloon_low--;
 
diff -r fbbd06d74324 -r 291e24787f8b drivers/xen/blkback/blkback.c
--- a/drivers/xen/blkback/blkback.c     Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/xen/blkback/blkback.c     Mon Jul 02 12:20:27 2007 -0600
@@ -208,9 +208,9 @@ int blkif_schedule(void *arg)
                printk(KERN_DEBUG "%s: started\n", current->comm);
 
        while (!kthread_should_stop()) {
-               if(try_to_freeze())
+               if (try_to_freeze())
                        continue;
-            
+
                wait_event_interruptible(
                        blkif->wq,
                        blkif->waiting_reqs || kthread_should_stop());
diff -r fbbd06d74324 -r 291e24787f8b drivers/xen/blktap/blktap.c
--- a/drivers/xen/blktap/blktap.c       Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/xen/blktap/blktap.c       Mon Jul 02 12:20:27 2007 -0600
@@ -1057,6 +1057,9 @@ int tap_blkif_schedule(void *arg)
                printk(KERN_DEBUG "%s: started\n", current->comm);
 
        while (!kthread_should_stop()) {
+               if (try_to_freeze())
+                       continue;
+
                wait_event_interruptible(
                        blkif->wq,
                        blkif->waiting_reqs || kthread_should_stop());
diff -r fbbd06d74324 -r 291e24787f8b drivers/xen/core/Makefile
--- a/drivers/xen/core/Makefile Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/xen/core/Makefile Mon Jul 02 12:20:27 2007 -0600
@@ -2,10 +2,10 @@
 # Makefile for the linux kernel.
 #
 
-obj-y := evtchn.o gnttab.o features.o reboot.o machine_reboot.o
+obj-y := evtchn.o gnttab.o features.o reboot.o machine_reboot.o firmware.o
 
 obj-$(CONFIG_PROC_FS)          += xen_proc.o
-obj-$(CONFIG_SYSFS)            += hypervisor_sysfs.o
+obj-$(CONFIG_SYS_HYPERVISOR)   += hypervisor_sysfs.o
 obj-$(CONFIG_HOTPLUG_CPU)      += cpu_hotplug.o
 obj-$(CONFIG_XEN_SYSFS)                += xen_sysfs.o
 obj-$(CONFIG_XEN_SMPBOOT)      += smpboot.o
diff -r fbbd06d74324 -r 291e24787f8b drivers/xen/core/firmware.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/xen/core/firmware.c       Mon Jul 02 12:20:27 2007 -0600
@@ -0,0 +1,74 @@
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/edd.h>
+#include <video/edid.h>
+#include <xen/interface/platform.h>
+#include <asm/hypervisor.h>
+
+#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
+void __init copy_edd(void)
+{
+       int ret;
+       struct xen_platform_op op;
+
+       if (!is_initial_xendomain())
+               return;
+
+       op.cmd = XENPF_firmware_info;
+
+       op.u.firmware_info.type = XEN_FW_DISK_INFO;
+       for (op.u.firmware_info.index = 0;
+            edd.edd_info_nr < EDDMAXNR;
+            op.u.firmware_info.index++) {
+               struct edd_info *info = edd.edd_info + edd.edd_info_nr;
+
+               info->params.length = sizeof(info->params);
+               set_xen_guest_handle(op.u.firmware_info.u.disk_info.edd_params,
+                                    &info->params);
+               ret = HYPERVISOR_platform_op(&op);
+               if (ret)
+                       break;
+
+#define C(x) info->x = op.u.firmware_info.u.disk_info.x
+               C(device);
+               C(version);
+               C(interface_support);
+               C(legacy_max_cylinder);
+               C(legacy_max_head);
+               C(legacy_sectors_per_track);
+#undef C
+
+               edd.edd_info_nr++;
+       }
+
+       op.u.firmware_info.type = XEN_FW_DISK_MBR_SIGNATURE;
+       for (op.u.firmware_info.index = 0;
+            edd.mbr_signature_nr < EDD_MBR_SIG_MAX;
+            op.u.firmware_info.index++) {
+               ret = HYPERVISOR_platform_op(&op);
+               if (ret)
+                       break;
+               edd.mbr_signature[edd.mbr_signature_nr++] =
+                       op.u.firmware_info.u.disk_mbr_signature.mbr_signature;
+       }
+}
+#endif
+
+void __init copy_edid(void)
+{
+#if defined(CONFIG_FIRMWARE_EDID) && defined(CONFIG_X86)
+       struct xen_platform_op op;
+
+       if (!is_initial_xendomain())
+               return;
+
+       op.cmd = XENPF_firmware_info;
+       op.u.firmware_info.index = 0;
+       op.u.firmware_info.type = XEN_FW_VBEDDC_INFO;
+       set_xen_guest_handle(op.u.firmware_info.u.vbeddc_info.edid,
+                            edid_info.dummy);
+       if (HYPERVISOR_platform_op(&op) != 0)
+               memset(edid_info.dummy, 0x13, sizeof(edid_info.dummy));
+#endif
+}
diff -r fbbd06d74324 -r 291e24787f8b drivers/xen/core/hypervisor_sysfs.c
--- a/drivers/xen/core/hypervisor_sysfs.c       Mon Jul 02 09:56:35 2007 -0600
+++ b/drivers/xen/core/hypervisor_sysfs.c       Mon Jul 02 12:20:27 2007 -0600
@@ -11,8 +11,6 @@
 #include <linux/module.h>
 #include <linux/kobject.h>
 #include <xen/hypervisor_sysfs.h>
-
-decl_subsys(hypervisor, NULL, NULL);
 
 static ssize_t hyp_sysfs_show(struct kobject *kobj,
                              struct attribute *attr,
@@ -37,7 +35,7 @@ static ssize_t hyp_sysfs_store(struct ko
        return 0;
 }
 
-struct sysfs_ops hyp_sysfs_ops = {
+static struct sysfs_ops hyp_sysfs_ops = {
        .show = hyp_sysfs_show,
        .store = hyp_sysfs_store,
 };
@@ -52,8 +50,7 @@ static int __init hypervisor_subsys_init
                return -ENODEV;
 
        hypervisor_subsys.kset.kobj.ktype = &hyp_sysfs_kobj_type;
-       return subsystem_register(&hypervisor_subsys);
+       return 0;
 }
 
 device_initcall(hypervisor_subsys_init);
-EXPORT_SYMBOL_GPL(hypervisor_subsys);
diff -r fbbd06d74324 -r 291e24787f8b include/asm-i386/agp.h
--- a/include/asm-i386/agp.h    Mon Jul 02 09:56:35 2007 -0600
+++ b/include/asm-i386/agp.h    Mon Jul 02 12:20:27 2007 -0600
@@ -12,8 +12,10 @@
  * data corruption on some CPUs.
  */
 
-int map_page_into_agp(struct page *page);
-int unmap_page_from_agp(struct page *page);
+/* Caller's responsibility to call global_flush_tlb() for
+ * performance reasons */
+#define map_page_into_agp(page) change_page_attr(page, 1, PAGE_KERNEL_NOCACHE)
+#define unmap_page_from_agp(page) change_page_attr(page, 1, PAGE_KERNEL)
 #define flush_agp_mappings() global_flush_tlb()
 
 /* Could use CLFLUSH here if the cpu supports it. But then it would
diff -r fbbd06d74324 -r 291e24787f8b include/asm-i386/e820.h
--- a/include/asm-i386/e820.h   Mon Jul 02 09:56:35 2007 -0600
+++ b/include/asm-i386/e820.h   Mon Jul 02 12:20:27 2007 -0600
@@ -38,6 +38,7 @@ extern struct e820map e820;
 
 extern int e820_all_mapped(unsigned long start, unsigned long end,
                           unsigned type);
+extern int e820_any_mapped(u64 start, u64 end, unsigned type);
 
 #endif/*!__ASSEMBLY__*/
 
diff -r fbbd06d74324 -r 291e24787f8b include/asm-i386/mach-xen/asm/agp.h
--- a/include/asm-i386/mach-xen/asm/agp.h       Mon Jul 02 09:56:35 2007 -0600
+++ b/include/asm-i386/mach-xen/asm/agp.h       Mon Jul 02 12:20:27 2007 -0600
@@ -13,8 +13,15 @@
  * data corruption on some CPUs.
  */
 
-int map_page_into_agp(struct page *page);
-int unmap_page_from_agp(struct page *page);
+/* Caller's responsibility to call global_flush_tlb() for
+ * performance reasons */
+#define map_page_into_agp(page) ( \
+       xen_create_contiguous_region((unsigned long)page_address(page), 0, 32) \
+       ?: change_page_attr(page, 1, PAGE_KERNEL_NOCACHE))
+#define unmap_page_from_agp(page) ( \
+       xen_destroy_contiguous_region((unsigned long)page_address(page), 0), \
+       /* only a fallback: xen_destroy_contiguous_region uses PAGE_KERNEL */ \
+       change_page_attr(page, 1, PAGE_KERNEL))
 #define flush_agp_mappings() global_flush_tlb()
 
 /* Could use CLFLUSH here if the cpu supports it. But then it would
diff -r fbbd06d74324 -r 291e24787f8b include/asm-i386/mach-xen/asm/hypervisor.h
--- a/include/asm-i386/mach-xen/asm/hypervisor.h        Mon Jul 02 09:56:35 
2007 -0600
+++ b/include/asm-i386/mach-xen/asm/hypervisor.h        Mon Jul 02 12:20:27 
2007 -0600
@@ -121,6 +121,11 @@ void xen_destroy_contiguous_region(
 void xen_destroy_contiguous_region(
     unsigned long vstart, unsigned int order);
 
+struct page;
+
+int xen_limit_pages_to_max_mfn(
+       struct page *pages, unsigned int order, unsigned int address_bits);
+
 /* Turn jiffies into Xen system time. */
 u64 jiffies_to_st(unsigned long jiffies);
 
diff -r fbbd06d74324 -r 291e24787f8b include/asm-x86_64/agp.h
--- a/include/asm-x86_64/agp.h  Mon Jul 02 09:56:35 2007 -0600
+++ b/include/asm-x86_64/agp.h  Mon Jul 02 12:20:27 2007 -0600
@@ -10,8 +10,10 @@
  * with different cachability attributes for the same page.
  */
 
-int map_page_into_agp(struct page *page);
-int unmap_page_from_agp(struct page *page);
+/* Caller's responsibility to call global_flush_tlb() for
+ * performance reasons */
+#define map_page_into_agp(page) change_page_attr(page, 1, PAGE_KERNEL_NOCACHE)
+#define unmap_page_from_agp(page) change_page_attr(page, 1, PAGE_KERNEL)
 #define flush_agp_mappings() global_flush_tlb()
 
 /* Could use CLFLUSH here if the cpu supports it. But then it would
diff -r fbbd06d74324 -r 291e24787f8b include/asm-x86_64/mach-xen/asm/agp.h
--- a/include/asm-x86_64/mach-xen/asm/agp.h     Mon Jul 02 09:56:35 2007 -0600
+++ b/include/asm-x86_64/mach-xen/asm/agp.h     Mon Jul 02 12:20:27 2007 -0600
@@ -11,8 +11,13 @@
  * with different cachability attributes for the same page.
  */
 
-int map_page_into_agp(struct page *page);
-int unmap_page_from_agp(struct page *page);
+#define map_page_into_agp(page) ( \
+       xen_create_contiguous_region((unsigned long)page_address(page), 0, 32) \
+       ?: change_page_attr(page, 1, PAGE_KERNEL_NOCACHE))
+#define unmap_page_from_agp(page) ( \
+       xen_destroy_contiguous_region((unsigned long)page_address(page), 0), \
+       /* only a fallback: xen_destroy_contiguous_region uses PAGE_KERNEL */ \
+       change_page_attr(page, 1, PAGE_KERNEL))
 #define flush_agp_mappings() global_flush_tlb()
 
 /* Could use CLFLUSH here if the cpu supports it. But then it would
diff -r fbbd06d74324 -r 291e24787f8b include/xen/firmware.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/include/xen/firmware.h    Mon Jul 02 12:20:27 2007 -0600
@@ -0,0 +1,10 @@
+#ifndef __XEN_FIRMWARE_H__
+#define __XEN_FIRMWARE_H__
+
+#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
+void copy_edd(void);
+#endif
+
+void copy_edid(void);
+
+#endif /* __XEN_FIRMWARE_H__ */
diff -r fbbd06d74324 -r 291e24787f8b include/xen/hypervisor_sysfs.h
--- a/include/xen/hypervisor_sysfs.h    Mon Jul 02 09:56:35 2007 -0600
+++ b/include/xen/hypervisor_sysfs.h    Mon Jul 02 12:20:27 2007 -0600
@@ -20,8 +20,6 @@ static struct hyp_sysfs_attr _name##_att
 static struct hyp_sysfs_attr _name##_attr = \
        __ATTR(_name, 0644, _name##_show, _name##_store)
 
-extern struct subsystem hypervisor_subsys;
-
 struct hyp_sysfs_attr {
        struct attribute attr;
        ssize_t (*show)(struct hyp_sysfs_attr *, char *);
diff -r fbbd06d74324 -r 291e24787f8b include/xen/interface/platform.h
--- a/include/xen/interface/platform.h  Mon Jul 02 09:56:35 2007 -0600
+++ b/include/xen/interface/platform.h  Mon Jul 02 12:20:27 2007 -0600
@@ -114,6 +114,45 @@ typedef struct xenpf_platform_quirk xenp
 typedef struct xenpf_platform_quirk xenpf_platform_quirk_t;
 DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t);
 
+#define XENPF_firmware_info       50
+#define XEN_FW_DISK_INFO          1 /* from int 13 AH=08/41/48 */
+#define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */
+#define XEN_FW_VBEDDC_INFO        3 /* from int 10 AX=4f15 */
+struct xenpf_firmware_info {
+    /* IN variables. */
+    uint32_t type;
+    uint32_t index;
+    /* OUT variables. */
+    union {
+        struct {
+            /* Int13, Fn48: Check Extensions Present. */
+            uint8_t device;                   /* %dl: bios device number */
+            uint8_t version;                  /* %ah: major version      */
+            uint16_t interface_support;       /* %cx: support bitmap     */
+            /* Int13, Fn08: Legacy Get Device Parameters. */
+            uint16_t legacy_max_cylinder;     /* %cl[7:6]:%ch: max cyl # */
+            uint8_t legacy_max_head;          /* %dh: max head #         */
+            uint8_t legacy_sectors_per_track; /* %cl[5:0]: max sector #  */
+            /* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */
+            /* NB. First uint16_t of buffer must be set to buffer size.      */
+            XEN_GUEST_HANDLE(void) edd_params;
+        } disk_info; /* XEN_FW_DISK_INFO */
+        struct {
+            uint8_t device;                   /* bios device number  */
+            uint32_t mbr_signature;           /* offset 0x1b8 in mbr */
+        } disk_mbr_signature; /* XEN_FW_DISK_MBR_SIGNATURE */
+        struct {
+            /* Int10, AX=4F15: Get EDID info. */
+            uint8_t capabilities;
+            uint8_t edid_transfer_time;
+            /* must refer to 128-byte buffer */
+            XEN_GUEST_HANDLE(uint8_t) edid;
+        } vbeddc_info; /* XEN_FW_VBEDDC_INFO */
+    } u;
+};
+typedef struct xenpf_firmware_info xenpf_firmware_info_t;
+DEFINE_XEN_GUEST_HANDLE(xenpf_firmware_info_t);
+
 struct xen_platform_op {
     uint32_t cmd;
     uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
@@ -124,6 +163,7 @@ struct xen_platform_op {
         struct xenpf_read_memtype      read_memtype;
         struct xenpf_microcode_update  microcode;
         struct xenpf_platform_quirk    platform_quirk;
+        struct xenpf_firmware_info     firmware_info;
         uint8_t                        pad[128];
     } u;
 };
diff -r fbbd06d74324 -r 291e24787f8b include/xen/interface/trace.h
--- a/include/xen/interface/trace.h     Mon Jul 02 09:56:35 2007 -0600
+++ b/include/xen/interface/trace.h     Mon Jul 02 12:20:27 2007 -0600
@@ -88,6 +88,7 @@
 #define TRC_HVM_VMMCALL         (TRC_HVM_HANDLER + 0x12)
 #define TRC_HVM_HLT             (TRC_HVM_HANDLER + 0x13)
 #define TRC_HVM_INVLPG          (TRC_HVM_HANDLER + 0x14)
+#define TRC_HVM_MCE             (TRC_HVM_HANDLER + 0x15)
 
 /* This structure represents a single trace buffer record. */
 struct t_rec {
diff -r fbbd06d74324 -r 291e24787f8b kernel/kexec.c
--- a/kernel/kexec.c    Mon Jul 02 09:56:35 2007 -0600
+++ b/kernel/kexec.c    Mon Jul 02 12:20:27 2007 -0600
@@ -345,8 +345,7 @@ static struct page *kimage_alloc_pages(g
                else
                        address_bits = long_log2(limit);
 
-               if (xen_create_contiguous_region((unsigned 
long)page_address(pages),
-                                                order, address_bits) < 0) {
+               if (xen_limit_pages_to_max_mfn(pages, order, address_bits) < 0) 
{
                        __free_pages(pages, order);
                        return NULL;
                }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.