WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

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

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [linux-2.6.18-xen] merge with linux-2.6.18-xen.hg
From: "Xen patchbot-linux-2.6.18-xen" <patchbot-linux-2.6.18-xen@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 26 Nov 2008 12:00:26 -0800
Delivery-date: Wed, 26 Nov 2008 12:02:11 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
# Date 1225770217 -32400
# Node ID 61d1f2810617b4d0a15ba192fcf679918d5b0438
# Parent  45c3a3dfa5b54619676d9de026452ee062a7e8af
# Parent  2fb13b8cbe134fdb3f18ee21e641e52655066c62
merge with linux-2.6.18-xen.hg
---
 arch/i386/kernel/irq-xen.c                 |    4 
 arch/i386/kernel/pci-dma-xen.c             |   10 -
 arch/i386/mm/highmem-xen.c                 |   47 ++++++++
 arch/i386/mm/hypervisor.c                  |   57 ----------
 arch/i386/mm/init-xen.c                    |    7 -
 arch/ia64/kernel/setup.c                   |    3 
 arch/ia64/xen/hypervisor.c                 |  155 -----------------------------
 arch/ia64/xen/xen_dma.c                    |    3 
 arch/x86_64/kernel/entry-xen.S             |   32 ++---
 arch/x86_64/kernel/irq-xen.c               |    6 -
 arch/x86_64/mm/init-xen.c                  |    7 -
 drivers/acpi/processor_core.c              |   13 ++
 drivers/acpi/processor_idle.c              |   12 +-
 drivers/pci/bus.c                          |    7 -
 drivers/pci/quirks.c                       |   41 +------
 drivers/xen/core/evtchn.c                  |   10 +
 drivers/xen/core/gnttab.c                  |    5 
 drivers/xen/core/xen_sysfs.c               |    3 
 include/asm-i386/mach-xen/asm/highmem.h    |   17 +++
 include/asm-ia64/hypercall.h               |    6 -
 include/asm-ia64/hypervisor.h              |    1 
 include/linux/highmem.h                    |    8 +
 include/xen/gnttab.h                       |    1 
 include/xen/interface/arch-ia64/hvm/save.h |   10 +
 include/xen/interface/arch-x86/hvm/save.h  |   13 ++
 include/xen/interface/domctl.h             |    4 
 include/xen/interface/features.h           |    3 
 include/xen/interface/hvm/params.h         |    7 +
 include/xen/interface/kexec.h              |    2 
 include/xen/interface/trace.h              |   10 +
 include/xen/interface/xen.h                |   14 ++
 31 files changed, 196 insertions(+), 322 deletions(-)

diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/i386/kernel/irq-xen.c
--- a/arch/i386/kernel/irq-xen.c        Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/i386/kernel/irq-xen.c        Tue Nov 04 12:43:37 2008 +0900
@@ -66,7 +66,7 @@ fastcall unsigned int do_IRQ(struct pt_r
                BUG();
        }
 
-       irq_enter();
+       /*irq_enter();*/
 #ifdef CONFIG_DEBUG_STACKOVERFLOW
        /* Debugging check for stack overflow: is there less than 1KB free? */
        {
@@ -121,7 +121,7 @@ fastcall unsigned int do_IRQ(struct pt_r
 #endif
                __do_IRQ(irq, regs);
 
-       irq_exit();
+       /*irq_exit();*/
 
        return 1;
 }
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/i386/kernel/pci-dma-xen.c
--- a/arch/i386/kernel/pci-dma-xen.c    Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/i386/kernel/pci-dma-xen.c    Tue Nov 04 12:43:37 2008 +0900
@@ -97,17 +97,11 @@ static int check_pages_physically_contig
 
 int range_straddles_page_boundary(paddr_t p, size_t size)
 {
-       extern unsigned long *contiguous_bitmap;
        unsigned long pfn = p >> PAGE_SHIFT;
        unsigned int offset = p & ~PAGE_MASK;
 
-       if (offset + size <= PAGE_SIZE)
-               return 0;
-       if (test_bit(pfn, contiguous_bitmap))
-               return 0;
-       if (check_pages_physically_contiguous(pfn, offset, size))
-               return 0;
-       return 1;
+       return ((offset + size > PAGE_SIZE) &&
+               !check_pages_physically_contiguous(pfn, offset, size));
 }
 
 int
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/i386/mm/highmem-xen.c
--- a/arch/i386/mm/highmem-xen.c        Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/i386/mm/highmem-xen.c        Tue Nov 04 12:43:37 2008 +0900
@@ -128,9 +128,56 @@ struct page *kmap_atomic_to_page(void *p
        return pte_page(*pte);
 }
 
+void clear_highpage(struct page *page)
+{
+       void *kaddr;
+
+       if (likely(xen_feature(XENFEAT_highmem_assist))
+           && PageHighMem(page)) {
+               struct mmuext_op meo;
+
+               meo.cmd = MMUEXT_CLEAR_PAGE;
+               meo.arg1.mfn = pfn_to_mfn(page_to_pfn(page));
+               if (HYPERVISOR_mmuext_op(&meo, 1, NULL, DOMID_SELF) == 0)
+                       return;
+       }
+
+       kaddr = kmap_atomic(page, KM_USER0);
+       clear_page(kaddr);
+       kunmap_atomic(kaddr, KM_USER0);
+}
+
+void copy_highpage(struct page *to, struct page *from)
+{
+       void *vfrom, *vto;
+
+       if (likely(xen_feature(XENFEAT_highmem_assist))
+           && (PageHighMem(from) || PageHighMem(to))) {
+               unsigned long from_pfn = page_to_pfn(from);
+               unsigned long to_pfn = page_to_pfn(to);
+               struct mmuext_op meo;
+
+               meo.cmd = MMUEXT_COPY_PAGE;
+               meo.arg1.mfn = pfn_to_mfn(to_pfn);
+               meo.arg2.src_mfn = pfn_to_mfn(from_pfn);
+               if (mfn_to_pfn(meo.arg2.src_mfn) == from_pfn
+                   && mfn_to_pfn(meo.arg1.mfn) == to_pfn
+                   && HYPERVISOR_mmuext_op(&meo, 1, NULL, DOMID_SELF) == 0)
+                       return;
+       }
+
+       vfrom = kmap_atomic(from, KM_USER0);
+       vto = kmap_atomic(to, KM_USER1);
+       copy_page(vto, vfrom);
+       kunmap_atomic(vfrom, KM_USER0);
+       kunmap_atomic(vto, KM_USER1);
+}
+
 EXPORT_SYMBOL(kmap);
 EXPORT_SYMBOL(kunmap);
 EXPORT_SYMBOL(kmap_atomic);
 EXPORT_SYMBOL(kmap_atomic_pte);
 EXPORT_SYMBOL(kunmap_atomic);
 EXPORT_SYMBOL(kmap_atomic_to_page);
+EXPORT_SYMBOL(clear_highpage);
+EXPORT_SYMBOL(copy_highpage);
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/i386/mm/hypervisor.c
--- a/arch/i386/mm/hypervisor.c Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/i386/mm/hypervisor.c Tue Nov 04 12:43:37 2008 +0900
@@ -190,54 +190,6 @@ void xen_set_ldt(const void *ptr, unsign
        BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
 }
 
-/*
- * Bitmap is indexed by page number. If bit is set, the page is part of a
- * xen_create_contiguous_region() area of memory.
- */
-unsigned long *contiguous_bitmap;
-
-static void contiguous_bitmap_set(
-       unsigned long first_page, unsigned long nr_pages)
-{
-       unsigned long start_off, end_off, curr_idx, end_idx;
-
-       curr_idx  = first_page / BITS_PER_LONG;
-       start_off = first_page & (BITS_PER_LONG-1);
-       end_idx   = (first_page + nr_pages) / BITS_PER_LONG;
-       end_off   = (first_page + nr_pages) & (BITS_PER_LONG-1);
-
-       if (curr_idx == end_idx) {
-               contiguous_bitmap[curr_idx] |=
-                       ((1UL<<end_off)-1) & -(1UL<<start_off);
-       } else {
-               contiguous_bitmap[curr_idx] |= -(1UL<<start_off);
-               while ( ++curr_idx < end_idx )
-                       contiguous_bitmap[curr_idx] = ~0UL;
-               contiguous_bitmap[curr_idx] |= (1UL<<end_off)-1;
-       }
-}
-
-static void contiguous_bitmap_clear(
-       unsigned long first_page, unsigned long nr_pages)
-{
-       unsigned long start_off, end_off, curr_idx, end_idx;
-
-       curr_idx  = first_page / BITS_PER_LONG;
-       start_off = first_page & (BITS_PER_LONG-1);
-       end_idx   = (first_page + nr_pages) / BITS_PER_LONG;
-       end_off   = (first_page + nr_pages) & (BITS_PER_LONG-1);
-
-       if (curr_idx == end_idx) {
-               contiguous_bitmap[curr_idx] &=
-                       -(1UL<<end_off) | ((1UL<<start_off)-1);
-       } else {
-               contiguous_bitmap[curr_idx] &= (1UL<<start_off)-1;
-               while ( ++curr_idx != end_idx )
-                       contiguous_bitmap[curr_idx] = 0;
-               contiguous_bitmap[curr_idx] &= -(1UL<<end_off);
-       }
-}
-
 /* Protected by balloon_lock. */
 #define MAX_CONTIG_ORDER 9 /* 2MB */
 static unsigned long discontig_frames[1<<MAX_CONTIG_ORDER];
@@ -334,10 +286,6 @@ int xen_create_contiguous_region(
        if (HYPERVISOR_multicall_check(cr_mcl, i, NULL))
                BUG();
 
-       if (success)
-               contiguous_bitmap_set(__pa(vstart) >> PAGE_SHIFT,
-                                     1UL << order);
-
        balloon_unlock(flags);
 
        return success ? 0 : -ENOMEM;
@@ -363,8 +311,7 @@ void xen_destroy_contiguous_region(unsig
                }
        };
 
-       if (xen_feature(XENFEAT_auto_translated_physmap) ||
-           !test_bit(__pa(vstart) >> PAGE_SHIFT, contiguous_bitmap))
+       if (xen_feature(XENFEAT_auto_translated_physmap))
                return;
 
        if (unlikely(order > MAX_CONTIG_ORDER))
@@ -376,8 +323,6 @@ void xen_destroy_contiguous_region(unsig
        scrub_pages((void *)vstart, 1 << order);
 
        balloon_lock(flags);
-
-       contiguous_bitmap_clear(__pa(vstart) >> PAGE_SHIFT, 1UL << order);
 
        /* 1. Find start MFN of contiguous extent. */
        in_frame = pfn_to_mfn(__pa(vstart) >> PAGE_SHIFT);
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/i386/mm/init-xen.c
--- a/arch/i386/mm/init-xen.c   Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/i386/mm/init-xen.c   Tue Nov 04 12:43:37 2008 +0900
@@ -47,8 +47,6 @@
 #include <asm/hypervisor.h>
 #include <asm/swiotlb.h>
 
-extern unsigned long *contiguous_bitmap;
-
 unsigned int __VMALLOC_RESERVE = 128 << 20;
 
 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
@@ -619,11 +617,6 @@ void __init mem_init(void)
        int tmp;
        int bad_ppro;
        unsigned long pfn;
-
-       contiguous_bitmap = alloc_bootmem_low_pages(
-               (max_low_pfn + 2*BITS_PER_LONG) >> 3);
-       BUG_ON(!contiguous_bitmap);
-       memset(contiguous_bitmap, 0, (max_low_pfn + 2*BITS_PER_LONG) >> 3);
 
 #if defined(CONFIG_SWIOTLB)
        swiotlb_init(); 
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/ia64/kernel/setup.c
--- a/arch/ia64/kernel/setup.c  Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/ia64/kernel/setup.c  Tue Nov 04 12:43:37 2008 +0900
@@ -684,9 +684,6 @@ setup_arch (char **cmdline_p)
        }
 #endif
        paging_init();
-#ifdef CONFIG_XEN
-       xen_contiguous_bitmap_init(max_pfn);
-#endif
 }
 
 /*
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/ia64/xen/hypervisor.c
--- a/arch/ia64/xen/hypervisor.c        Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/ia64/xen/hypervisor.c        Tue Nov 04 12:43:37 2008 +0900
@@ -77,154 +77,6 @@ xen_cpu_init(void)
 {
        extern void xen_smp_intr_init(void);
        xen_smp_intr_init();
-}
-
-/*
- *XXX same as i386, x86_64 contiguous_bitmap_set(), contiguous_bitmap_clear()
- * move those to lib/contiguous_bitmap?
- *XXX discontigmem/sparsemem
- */
-
-/*
- * Bitmap is indexed by page number. If bit is set, the page is part of a
- * xen_create_contiguous_region() area of memory.
- */
-unsigned long *contiguous_bitmap __read_mostly;
-
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-/* Following logic is stolen from create_mem_map_table() for virtual memmap */
-static int
-create_contiguous_bitmap(u64 start, u64 end, void *arg)
-{
-       unsigned long address, start_page, end_page;
-       unsigned long bitmap_start, bitmap_end;
-       unsigned char *bitmap;
-       int node;
-       pgd_t *pgd;
-       pud_t *pud;
-       pmd_t *pmd;
-       pte_t *pte;
-
-       bitmap_start = (unsigned long)contiguous_bitmap +
-                      ((__pa(start) >> PAGE_SHIFT) >> 3);
-       bitmap_end = (unsigned long)contiguous_bitmap +
-                    (((__pa(end) >> PAGE_SHIFT) + 2 * BITS_PER_LONG) >> 3);
-
-       start_page = bitmap_start & PAGE_MASK;
-       end_page = PAGE_ALIGN(bitmap_end);
-       node = paddr_to_nid(__pa(start));
-
-       bitmap = alloc_bootmem_pages_node(NODE_DATA(node),
-                                         end_page - start_page);
-       BUG_ON(!bitmap);
-       memset(bitmap, 0, end_page - start_page);
-
-       for (address = start_page; address < end_page; address += PAGE_SIZE) {
-               pgd = pgd_offset_k(address);
-               if (pgd_none(*pgd))
-                       pgd_populate(&init_mm, pgd,
-                                    alloc_bootmem_pages_node(NODE_DATA(node),
-                                                             PAGE_SIZE));
-               pud = pud_offset(pgd, address);
-
-               if (pud_none(*pud))
-                       pud_populate(&init_mm, pud,
-                                    alloc_bootmem_pages_node(NODE_DATA(node),
-                                                             PAGE_SIZE));
-               pmd = pmd_offset(pud, address);
-
-               if (pmd_none(*pmd))
-                       pmd_populate_kernel(&init_mm, pmd,
-                                           alloc_bootmem_pages_node
-                                           (NODE_DATA(node), PAGE_SIZE));
-               pte = pte_offset_kernel(pmd, address);
-
-               if (pte_none(*pte))
-                       set_pte(pte,
-                               pfn_pte(__pa(bitmap + (address - start_page))
-                                       >> PAGE_SHIFT, PAGE_KERNEL));
-       }
-       return 0;
-}
-#endif
-
-static void
-__contiguous_bitmap_init(unsigned long size)
-{
-       contiguous_bitmap = alloc_bootmem_pages(size);
-       BUG_ON(!contiguous_bitmap);
-       memset(contiguous_bitmap, 0, size);
-}
-
-void
-xen_contiguous_bitmap_init(unsigned long end_pfn)
-{
-       unsigned long size = (end_pfn + 2 * BITS_PER_LONG) >> 3;
-#ifndef CONFIG_VIRTUAL_MEM_MAP
-       __contiguous_bitmap_init(size);
-#else
-       unsigned long max_gap = 0;
-
-       efi_memmap_walk(find_largest_hole, (u64*)&max_gap);
-       if (max_gap < LARGE_GAP) {
-               __contiguous_bitmap_init(size);
-       } else {
-               unsigned long map_size = PAGE_ALIGN(size);
-               vmalloc_end -= map_size;
-               contiguous_bitmap = (unsigned long*)vmalloc_end;
-               efi_memmap_walk(create_contiguous_bitmap, NULL);
-       }
-#endif
-}
-
-#if 0
-int
-contiguous_bitmap_test(void* p)
-{
-       return test_bit(__pa(p) >> PAGE_SHIFT, contiguous_bitmap);
-}
-#endif
-
-static void contiguous_bitmap_set(
-       unsigned long first_page, unsigned long nr_pages)
-{
-       unsigned long start_off, end_off, curr_idx, end_idx;
-
-       curr_idx  = first_page / BITS_PER_LONG;
-       start_off = first_page & (BITS_PER_LONG-1);
-       end_idx   = (first_page + nr_pages) / BITS_PER_LONG;
-       end_off   = (first_page + nr_pages) & (BITS_PER_LONG-1);
-
-       if (curr_idx == end_idx) {
-               contiguous_bitmap[curr_idx] |=
-                       ((1UL<<end_off)-1) & -(1UL<<start_off);
-       } else {
-               contiguous_bitmap[curr_idx] |= -(1UL<<start_off);
-               while ( ++curr_idx < end_idx )
-                       contiguous_bitmap[curr_idx] = ~0UL;
-               contiguous_bitmap[curr_idx] |= (1UL<<end_off)-1;
-       }
-}
-
-static void contiguous_bitmap_clear(
-       unsigned long first_page, unsigned long nr_pages)
-{
-       unsigned long start_off, end_off, curr_idx, end_idx;
-
-       curr_idx  = first_page / BITS_PER_LONG;
-       start_off = first_page & (BITS_PER_LONG-1);
-       end_idx   = (first_page + nr_pages) / BITS_PER_LONG;
-       end_off   = (first_page + nr_pages) & (BITS_PER_LONG-1);
-
-       if (curr_idx == end_idx) {
-               contiguous_bitmap[curr_idx] &=
-                       -(1UL<<end_off) | ((1UL<<start_off)-1);
-       } else {
-               contiguous_bitmap[curr_idx] &= (1UL<<start_off)-1;
-               while ( ++curr_idx != end_idx )
-                       contiguous_bitmap[curr_idx] = 0;
-               contiguous_bitmap[curr_idx] &= -(1UL<<end_off);
-       }
 }
 
 /*
@@ -303,8 +155,6 @@ __xen_create_contiguous_region(unsigned 
                } else
                        success = 1;
        }
-       if (success)
-               contiguous_bitmap_set(start_gpfn, num_gpfn);
 #if 0
        if (success) {
                unsigned long mfn;
@@ -363,9 +213,6 @@ __xen_destroy_contiguous_region(unsigned
        };
        
 
-       if (!test_bit(start_gpfn, contiguous_bitmap))
-               return;
-
        if (unlikely(order > MAX_CONTIG_ORDER))
                return;
 
@@ -375,8 +222,6 @@ __xen_destroy_contiguous_region(unsigned
        scrub_pages(vstart, num_gpfn);
 
        balloon_lock(flags);
-
-       contiguous_bitmap_clear(start_gpfn, num_gpfn);
 
        /* Do the exchange for non-contiguous MFNs. */
        in_frame = start_gpfn;
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/ia64/xen/xen_dma.c
--- a/arch/ia64/xen/xen_dma.c   Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/ia64/xen/xen_dma.c   Tue Nov 04 12:43:37 2008 +0900
@@ -57,7 +57,6 @@ static int check_pages_physically_contig
 
 int range_straddles_page_boundary(paddr_t p, size_t size)
 {
-       extern unsigned long *contiguous_bitmap;
        unsigned long pfn = p >> PAGE_SHIFT;
        unsigned int offset = p & ~PAGE_MASK;
 
@@ -65,8 +64,6 @@ int range_straddles_page_boundary(paddr_
                return 0;
 
        if (offset + size <= PAGE_SIZE)
-               return 0;
-       if (test_bit(pfn, contiguous_bitmap))
                return 0;
        if (check_pages_physically_contiguous(pfn, offset, size))
                return 0;
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/x86_64/kernel/entry-xen.S
--- a/arch/x86_64/kernel/entry-xen.S    Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/x86_64/kernel/entry-xen.S    Tue Nov 04 12:43:37 2008 +0900
@@ -117,9 +117,9 @@ NMI_MASK = 0x80000000
        .macro  CFI_DEFAULT_STACK start=1,adj=0
        .if \start
        CFI_STARTPROC   simple
-       CFI_DEF_CFA     rsp,SS+8-(\adj*ARGOFFSET)
+       CFI_DEF_CFA     rsp,SS+8 - \adj*ARGOFFSET
        .else
-       CFI_DEF_CFA_OFFSET SS+8-(\adj*ARGOFFSET)
+       CFI_DEF_CFA_OFFSET SS+8 - \adj*ARGOFFSET
        .endif
        .if \adj == 0
        CFI_REL_OFFSET  r15,R15
@@ -129,20 +129,20 @@ NMI_MASK = 0x80000000
        CFI_REL_OFFSET  rbp,RBP
        CFI_REL_OFFSET  rbx,RBX
        .endif
-       CFI_REL_OFFSET  r11,R11
-       CFI_REL_OFFSET  r10,R10
-       CFI_REL_OFFSET  r9,R9
-       CFI_REL_OFFSET  r8,R8
-       CFI_REL_OFFSET  rax,RAX
-       CFI_REL_OFFSET  rcx,RCX
-       CFI_REL_OFFSET  rdx,RDX
-       CFI_REL_OFFSET  rsi,RSI
-       CFI_REL_OFFSET  rdi,RDI
-       CFI_REL_OFFSET  rip,RIP
-       /*CFI_REL_OFFSET        cs,CS*/
-       /*CFI_REL_OFFSET        rflags,EFLAGS*/
-       CFI_REL_OFFSET  rsp,RSP
-       /*CFI_REL_OFFSET        ss,SS*/
+       CFI_REL_OFFSET  r11,R11 - \adj*ARGOFFSET
+       CFI_REL_OFFSET  r10,R10 - \adj*ARGOFFSET
+       CFI_REL_OFFSET  r9,R9 - \adj*ARGOFFSET
+       CFI_REL_OFFSET  r8,R8 - \adj*ARGOFFSET
+       CFI_REL_OFFSET  rax,RAX - \adj*ARGOFFSET
+       CFI_REL_OFFSET  rcx,RCX - \adj*ARGOFFSET
+       CFI_REL_OFFSET  rdx,RDX - \adj*ARGOFFSET
+       CFI_REL_OFFSET  rsi,RSI - \adj*ARGOFFSET
+       CFI_REL_OFFSET  rdi,RDI - \adj*ARGOFFSET
+       CFI_REL_OFFSET  rip,RIP - \adj*ARGOFFSET
+       /*CFI_REL_OFFSET        cs,CS - \adj*ARGOFFSET*/
+       /*CFI_REL_OFFSET        rflags,EFLAGS - \adj*ARGOFFSET*/
+       CFI_REL_OFFSET  rsp,RSP - \adj*ARGOFFSET
+       /*CFI_REL_OFFSET        ss,SS - \adj*ARGOFFSET*/
        .endm
 
         /*
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/x86_64/kernel/irq-xen.c
--- a/arch/x86_64/kernel/irq-xen.c      Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/x86_64/kernel/irq-xen.c      Tue Nov 04 12:43:37 2008 +0900
@@ -124,13 +124,13 @@ asmlinkage unsigned int do_IRQ(struct pt
                BUG();
        }
 
-       exit_idle();
-       irq_enter();
+       /*exit_idle();*/
+       /*irq_enter();*/
 #ifdef CONFIG_DEBUG_STACKOVERFLOW
        stack_overflow_check(regs);
 #endif
        __do_IRQ(irq, regs);
-       irq_exit();
+       /*irq_exit();*/
 
        return 1;
 }
diff -r 45c3a3dfa5b5 -r 61d1f2810617 arch/x86_64/mm/init-xen.c
--- a/arch/x86_64/mm/init-xen.c Fri Oct 24 11:22:02 2008 +0900
+++ b/arch/x86_64/mm/init-xen.c Tue Nov 04 12:43:37 2008 +0900
@@ -61,8 +61,6 @@ EXPORT_SYMBOL(__kernel_page_user);
 
 int after_bootmem;
 
-extern unsigned long *contiguous_bitmap;
-
 static unsigned long dma_reserve __initdata;
 
 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
@@ -972,11 +970,6 @@ void __init mem_init(void)
        long codesize, reservedpages, datasize, initsize;
        unsigned long pfn;
 
-       contiguous_bitmap = alloc_bootmem_low_pages(
-               (end_pfn + 2*BITS_PER_LONG) >> 3);
-       BUG_ON(!contiguous_bitmap);
-       memset(contiguous_bitmap, 0, (end_pfn + 2*BITS_PER_LONG) >> 3);
-
        pci_iommu_alloc();
 
        /* How many end-of-memory variables you have, grandma! */
diff -r 45c3a3dfa5b5 -r 61d1f2810617 drivers/acpi/processor_core.c
--- a/drivers/acpi/processor_core.c     Fri Oct 24 11:22:02 2008 +0900
+++ b/drivers/acpi/processor_core.c     Tue Nov 04 12:43:37 2008 +0900
@@ -513,8 +513,17 @@ static int acpi_processor_get_info(struc
 #if defined(CONFIG_CPU_FREQ) || defined(CONFIG_PROCESSOR_EXTERNAL_CONTROL)
        acpi_processor_ppc_has_changed(pr);
 #endif
-       acpi_processor_get_throttling_info(pr);
-       acpi_processor_get_limit_info(pr);
+
+       /* 
+        * pr->id may equal to -1 while processor_cntl_external enabled.
+        * throttle and thermal module don't support this case.
+        * Tx only works when dom0 vcpu == pcpu num by far, as we give 
+        * control to dom0.
+        */
+       if (pr->id != -1) {
+               acpi_processor_get_throttling_info(pr);
+               acpi_processor_get_limit_info(pr);
+       }
 
        return 0;
 }
diff -r 45c3a3dfa5b5 -r 61d1f2810617 drivers/acpi/processor_idle.c
--- a/drivers/acpi/processor_idle.c     Fri Oct 24 11:22:02 2008 +0900
+++ b/drivers/acpi/processor_idle.c     Tue Nov 04 12:43:37 2008 +0900
@@ -654,7 +654,7 @@ static int acpi_processor_get_power_info
        if (nocst)
                return -ENODEV;
 
-       current_count = 1;
+       current_count = 0;
 
        /* Zero initialize C2 onwards and prepare for fresh CST lookup */
        for (i = 2; i < ACPI_PROCESSOR_MAX_POWER; i++)
@@ -728,13 +728,17 @@ static int acpi_processor_get_power_info
 
                cx.type = obj->integer.value;
 
+               /*
+                * Some buggy BIOSes won't list C1 in _CST -
+                * Let acpi_processor_get_power_info_default() handle them later
+                */
+               if (i == 1 && cx.type != ACPI_STATE_C1)
+                       current_count++;
+
                /* Following check doesn't apply to external control case */
                if (!processor_pm_external() &&
                    (cx.type != ACPI_STATE_C1) &&
                    (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO))
-                       continue;
-
-               if ((cx.type < ACPI_STATE_C2) || (cx.type > ACPI_STATE_C3))
                        continue;
 
                obj = (union acpi_object *)&(element->package.elements[2]);
diff -r 45c3a3dfa5b5 -r 61d1f2810617 drivers/pci/bus.c
--- a/drivers/pci/bus.c Fri Oct 24 11:22:02 2008 +0900
+++ b/drivers/pci/bus.c Tue Nov 04 12:43:37 2008 +0900
@@ -16,8 +16,6 @@
 #include <linux/init.h>
 
 #include "pci.h"
-
-extern int pci_mem_align;
 
 /**
  * pci_bus_alloc_resource - allocate a resource from a parent bus
@@ -45,11 +43,6 @@ pci_bus_alloc_resource(struct pci_bus *b
        int i, ret = -ENOMEM;
 
        type_mask |= IORESOURCE_IO | IORESOURCE_MEM;
-
-       /* If the boot parameter 'pci-mem-align' was specified then we need to 
-          align the memory addresses, at page size alignment. */
-       if (pci_mem_align && (align < (PAGE_SIZE-1)))
-               align = PAGE_SIZE - 1;
 
        for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
                struct resource *r = bus->resource[i];
diff -r 45c3a3dfa5b5 -r 61d1f2810617 drivers/pci/quirks.c
--- a/drivers/pci/quirks.c      Fri Oct 24 11:22:02 2008 +0900
+++ b/drivers/pci/quirks.c      Tue Nov 04 12:43:37 2008 +0900
@@ -23,25 +23,17 @@
 #include <linux/acpi.h>
 #include "pci.h"
 
-/* A global flag which signals if we should page-align PCI mem windows. */
-int pci_mem_align = 0;
-
-static int __init set_pci_mem_align(char *str)
-{
-       pci_mem_align = 1;
-       return 1;
-}
-__setup("pci-mem-align", set_pci_mem_align);
-
-
-/* This quirk function enables us to force all memory resources which are 
- * assigned to PCI devices, to be page-aligned.
- */
-static void __devinit quirk_align_mem_resources(struct pci_dev *dev)
+
+/*
+ * This quirk function disables the device and releases resources
+ * which is specified by kernel's boot parameter 'reassigndev'.
+ * Later on, kernel will assign page-aligned memory resource back
+ * to that device.
+ */
+static void __devinit quirk_release_resources(struct pci_dev *dev)
 {
        int i;
        struct resource *r;
-       resource_size_t old_start;
 
        if (is_reassigndev(dev)) {
                if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
@@ -76,21 +68,8 @@ static void __devinit quirk_align_mem_re
                }
                return;
        }
-
-       if (!pci_mem_align)
-               return;
-
-       for (i=0; i < DEVICE_COUNT_RESOURCE; i++) {
-               r = &dev->resource[i];
-               if ((r == NULL) || !(r->flags & IORESOURCE_MEM))
-                       continue;
-
-               old_start = r->start;
-               r->start = (r->start + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1);
-               r->end = r->end - (old_start - r->start);
-       }
-}
-DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_align_mem_resources);
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_release_resources);
 
 /* The Mellanox Tavor device gives false positive parity errors
  * Mark this device with a broken_parity_status, to allow
diff -r 45c3a3dfa5b5 -r 61d1f2810617 drivers/xen/core/evtchn.c
--- a/drivers/xen/core/evtchn.c Fri Oct 24 11:22:02 2008 +0900
+++ b/drivers/xen/core/evtchn.c Tue Nov 04 12:43:37 2008 +0900
@@ -246,6 +246,8 @@ asmlinkage void evtchn_do_upcall(struct 
        shared_info_t      *s = HYPERVISOR_shared_info;
        vcpu_info_t        *vcpu_info = &s->vcpu_info[cpu];
 
+       exit_idle();
+       irq_enter();
 
        do {
                /* Avoid a callback storm when we reenable delivery. */
@@ -253,7 +255,7 @@ asmlinkage void evtchn_do_upcall(struct 
 
                /* Nested invocations bail immediately. */
                if (unlikely(per_cpu(upcall_count, cpu)++))
-                       return;
+                       break;
 
 #ifndef CONFIG_X86 /* No need for a barrier -- XCHG is a barrier on x86. */
                /* Clear master flag /before/ clearing selector flag. */
@@ -293,10 +295,8 @@ asmlinkage void evtchn_do_upcall(struct 
                                port = (l1i * BITS_PER_LONG) + l2i;
                                if ((irq = evtchn_to_irq[port]) != -1)
                                        do_IRQ(irq, regs);
-                               else {
-                                       exit_idle();
+                               else
                                        evtchn_device_upcall(port);
-                               }
 
                                /* if this is the final port processed, we'll 
pick up here+1 next time */
                                per_cpu(last_processed_l1i, cpu) = l1i;
@@ -314,6 +314,8 @@ asmlinkage void evtchn_do_upcall(struct 
                count = per_cpu(upcall_count, cpu);
                per_cpu(upcall_count, cpu) = 0;
        } while (unlikely(count != 1));
+
+       irq_exit();
 }
 
 static int find_unbound_irq(void)
diff -r 45c3a3dfa5b5 -r 61d1f2810617 drivers/xen/core/gnttab.c
--- a/drivers/xen/core/gnttab.c Fri Oct 24 11:22:02 2008 +0900
+++ b/drivers/xen/core/gnttab.c Tue Nov 04 12:43:37 2008 +0900
@@ -112,6 +112,7 @@ static void do_free_callbacks(void)
                next = callback->next;
                if (gnttab_free_count >= callback->count) {
                        callback->next = NULL;
+                       callback->queued = 0;
                        callback->fn(callback->arg);
                } else {
                        callback->next = gnttab_free_callback_list;
@@ -343,11 +344,12 @@ void gnttab_request_free_callback(struct
 {
        unsigned long flags;
        spin_lock_irqsave(&gnttab_list_lock, flags);
-       if (callback->next)
+       if (callback->queued)
                goto out;
        callback->fn = fn;
        callback->arg = arg;
        callback->count = count;
+       callback->queued = 1;
        callback->next = gnttab_free_callback_list;
        gnttab_free_callback_list = callback;
        check_free_callbacks();
@@ -365,6 +367,7 @@ void gnttab_cancel_free_callback(struct 
        for (pcb = &gnttab_free_callback_list; *pcb; pcb = &(*pcb)->next) {
                if (*pcb == callback) {
                        *pcb = callback->next;
+                       callback->queued = 0;
                        break;
                }
        }
diff -r 45c3a3dfa5b5 -r 61d1f2810617 drivers/xen/core/xen_sysfs.c
--- a/drivers/xen/core/xen_sysfs.c      Fri Oct 24 11:22:02 2008 +0900
+++ b/drivers/xen/core/xen_sysfs.c      Tue Nov 04 12:43:37 2008 +0900
@@ -336,6 +336,9 @@ static void xen_properties_destroy(void)
 }
 
 #ifdef CONFIG_KEXEC
+
+extern size_t vmcoreinfo_size_xen;
+extern unsigned long paddr_vmcoreinfo_xen;
 
 static ssize_t vmcoreinfo_show(struct hyp_sysfs_attr *attr, char *page)
 {
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/asm-i386/mach-xen/asm/highmem.h
--- a/include/asm-i386/mach-xen/asm/highmem.h   Fri Oct 24 11:22:02 2008 +0900
+++ b/include/asm-i386/mach-xen/asm/highmem.h   Tue Nov 04 12:43:37 2008 +0900
@@ -75,6 +75,23 @@ 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)
+{
+       clear_highpage(page);
+}
+#define __HAVE_ARCH_CLEAR_HIGHPAGE
+#define __HAVE_ARCH_CLEAR_USER_HIGHPAGE
+
+void copy_highpage(struct page *to, struct page *from);
+static inline void copy_user_highpage(struct page *to, struct page *from,
+       unsigned long vaddr)
+{
+       copy_highpage(to, from);
+}
+#define __HAVE_ARCH_COPY_HIGHPAGE
+#define __HAVE_ARCH_COPY_USER_HIGHPAGE
+
 #endif /* __KERNEL__ */
 
 #endif /* _ASM_HIGHMEM_H */
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/asm-ia64/hypercall.h
--- a/include/asm-ia64/hypercall.h      Fri Oct 24 11:22:02 2008 +0900
+++ b/include/asm-ia64/hypercall.h      Tue Nov 04 12:43:37 2008 +0900
@@ -237,11 +237,7 @@ xencomm_arch_hypercall_opt_feature(struc
 
 extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs);
 static inline void exit_idle(void) {}
-#define do_IRQ(irq, regs) ({                   \
-       irq_enter();                            \
-       __do_IRQ((irq), (regs));                \
-       irq_exit();                             \
-})
+#define do_IRQ(irq, regs) __do_IRQ((irq), (regs))
 
 #include <linux/err.h>
 #ifdef HAVE_XEN_PLATFORM_COMPAT_H
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/asm-ia64/hypervisor.h
--- a/include/asm-ia64/hypervisor.h     Fri Oct 24 11:22:02 2008 +0900
+++ b/include/asm-ia64/hypervisor.h     Tue Nov 04 12:43:37 2008 +0900
@@ -140,7 +140,6 @@ int privcmd_mmap(struct file * file, str
 #define        pte_mfn(_x)     pte_pfn(_x)
 #define phys_to_machine_mapping_valid(_x)      (1)
 
-void xen_contiguous_bitmap_init(unsigned long end_pfn);
 int __xen_create_contiguous_region(unsigned long vstart, unsigned int order, 
unsigned int address_bits);
 static inline int
 xen_create_contiguous_region(unsigned long vstart,
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/linux/highmem.h
--- a/include/linux/highmem.h   Fri Oct 24 11:22:02 2008 +0900
+++ b/include/linux/highmem.h   Tue Nov 04 12:43:37 2008 +0900
@@ -50,6 +50,7 @@ static inline void *kmap(struct page *pa
 
 #endif /* CONFIG_HIGHMEM */
 
+#ifndef __HAVE_ARCH_CLEAR_USER_HIGHPAGE
 /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */
 static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
 {
@@ -59,6 +60,7 @@ static inline void clear_user_highpage(s
        /* Make sure this page is cleared on other CPU's too before using it */
        smp_wmb();
 }
+#endif
 
 #ifndef __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
 static inline struct page *
@@ -73,12 +75,14 @@ alloc_zeroed_user_highpage(struct vm_are
 }
 #endif
 
+#ifndef __HAVE_ARCH_CLEAR_HIGHPAGE
 static inline void clear_highpage(struct page *page)
 {
        void *kaddr = kmap_atomic(page, KM_USER0);
        clear_page(kaddr);
        kunmap_atomic(kaddr, KM_USER0);
 }
+#endif
 
 /*
  * Same but also flushes aliased cache contents to RAM.
@@ -95,6 +99,7 @@ static inline void memclear_highpage_flu
        kunmap_atomic(kaddr, KM_USER0);
 }
 
+#ifndef __HAVE_ARCH_COPY_USER_HIGHPAGE
 static inline void copy_user_highpage(struct page *to, struct page *from, 
unsigned long vaddr)
 {
        char *vfrom, *vto;
@@ -107,7 +112,9 @@ static inline void copy_user_highpage(st
        /* Make sure this page is cleared on other CPU's too before using it */
        smp_wmb();
 }
+#endif
 
+#ifndef __HAVE_ARCH_COPY_HIGHPAGE
 static inline void copy_highpage(struct page *to, struct page *from)
 {
        char *vfrom, *vto;
@@ -118,5 +125,6 @@ static inline void copy_highpage(struct 
        kunmap_atomic(vfrom, KM_USER0);
        kunmap_atomic(vto, KM_USER1);
 }
+#endif
 
 #endif /* _LINUX_HIGHMEM_H */
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/gnttab.h
--- a/include/xen/gnttab.h      Fri Oct 24 11:22:02 2008 +0900
+++ b/include/xen/gnttab.h      Tue Nov 04 12:43:37 2008 +0900
@@ -48,6 +48,7 @@ struct gnttab_free_callback {
        void (*fn)(void *);
        void *arg;
        u16 count;
+       u8 queued;
 };
 
 int gnttab_grant_foreign_access(domid_t domid, unsigned long frame,
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/interface/arch-ia64/hvm/save.h
--- a/include/xen/interface/arch-ia64/hvm/save.h        Fri Oct 24 11:22:02 
2008 +0900
+++ b/include/xen/interface/arch-ia64/hvm/save.h        Tue Nov 04 12:43:37 
2008 +0900
@@ -106,7 +106,11 @@ DECLARE_HVM_SAVE_TYPE(VTIME, 5, struct h
  */
 #define VIOSAPIC_NUM_PINS     48
 
-union viosapic_rte
+/* To share VT-d code which uses vioapic_redir_entry.
+ * Although on ia64 this is for vsapic, but we have to vioapic_redir_entry
+ * instead of viosapic_redir_entry.
+ */
+union vioapic_redir_entry
 {
     uint64_t bits;
     struct {
@@ -124,7 +128,7 @@ union viosapic_rte
 
         uint8_t reserved[3];
         uint16_t dest_id;
-    }; 
+    } fields;
 };
 
 struct hvm_hw_ia64_viosapic {
@@ -134,7 +138,7 @@ struct hvm_hw_ia64_viosapic {
     uint32_t    pad;
     uint64_t    lowest_vcpu_id;
     uint64_t    base_address;
-    union viosapic_rte  redirtbl[VIOSAPIC_NUM_PINS];
+    union vioapic_redir_entry  redirtbl[VIOSAPIC_NUM_PINS];
 };
 DECLARE_HVM_SAVE_TYPE(VIOSAPIC, 6, struct hvm_hw_ia64_viosapic);
   
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/interface/arch-x86/hvm/save.h
--- a/include/xen/interface/arch-x86/hvm/save.h Fri Oct 24 11:22:02 2008 +0900
+++ b/include/xen/interface/arch-x86/hvm/save.h Tue Nov 04 12:43:37 2008 +0900
@@ -421,9 +421,20 @@ struct hvm_hw_mtrr {
 
 DECLARE_HVM_SAVE_TYPE(MTRR, 14, struct hvm_hw_mtrr);
 
+/*
+ * Viridian hypervisor context.
+ */
+
+struct hvm_viridian_context {
+    uint64_t hypercall_gpa;
+    uint64_t guest_os_id;
+};
+
+DECLARE_HVM_SAVE_TYPE(VIRIDIAN, 15, struct hvm_viridian_context);
+
 /* 
  * Largest type-code in use
  */
-#define HVM_SAVE_CODE_MAX 14
+#define HVM_SAVE_CODE_MAX 15
 
 #endif /* __XEN_PUBLIC_HVM_SAVE_X86_H__ */
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/interface/domctl.h
--- a/include/xen/interface/domctl.h    Fri Oct 24 11:22:02 2008 +0900
+++ b/include/xen/interface/domctl.h    Tue Nov 04 12:43:37 2008 +0900
@@ -614,6 +614,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_subsc
 #define XEN_DOMCTL_set_machine_address_size  51
 #define XEN_DOMCTL_get_machine_address_size  52
 
+/*
+ * Do not inject spurious page faults into this domain.
+ */
+#define XEN_DOMCTL_suppress_spurious_page_faults 53
 
 struct xen_domctl {
     uint32_t cmd;
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/interface/features.h
--- a/include/xen/interface/features.h  Fri Oct 24 11:22:02 2008 +0900
+++ b/include/xen/interface/features.h  Tue Nov 04 12:43:37 2008 +0900
@@ -59,6 +59,9 @@
 /* x86: Does this Xen host support the MMU_PT_UPDATE_PRESERVE_AD hypercall? */
 #define XENFEAT_mmu_pt_update_preserve_ad  5
 
+/* x86: Does this Xen host support the MMU_{CLEAR,COPY}_PAGE hypercall? */
+#define XENFEAT_highmem_assist             6
+
 #define XENFEAT_NR_SUBMAPS 1
 
 #endif /* __XEN_PUBLIC_FEATURES_H__ */
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/interface/hvm/params.h
--- a/include/xen/interface/hvm/params.h        Fri Oct 24 11:22:02 2008 +0900
+++ b/include/xen/interface/hvm/params.h        Tue Nov 04 12:43:37 2008 +0900
@@ -51,9 +51,16 @@
 #define HVM_PARAM_BUFIOREQ_PFN 6
 
 #ifdef __ia64__
+
 #define HVM_PARAM_NVRAM_FD     7
 #define HVM_PARAM_VHPT_SIZE    8
 #define HVM_PARAM_BUFPIOREQ_PFN        9
+
+#elif defined(__i386__) || defined(__x86_64__)
+
+/* Expose Viridian interfaces to this HVM guest? */
+#define HVM_PARAM_VIRIDIAN     9
+
 #endif
 
 /*
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/interface/kexec.h
--- a/include/xen/interface/kexec.h     Fri Oct 24 11:22:02 2008 +0900
+++ b/include/xen/interface/kexec.h     Tue Nov 04 12:43:37 2008 +0900
@@ -175,8 +175,6 @@ void vmcoreinfo_append_str(const char *f
 #define VMCOREINFO_OFFSET_ALIAS(name, field, alias) \
        vmcoreinfo_append_str("OFFSET(%s.%s)=%lu\n", #name, #alias, \
                              (unsigned long)offsetof(struct name, field))
-extern size_t vmcoreinfo_size_xen;
-extern unsigned long paddr_vmcoreinfo_xen;
 
 #endif /* _XEN_PUBLIC_KEXEC_H */
 
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/interface/trace.h
--- a/include/xen/interface/trace.h     Fri Oct 24 11:22:02 2008 +0900
+++ b/include/xen/interface/trace.h     Tue Nov 04 12:43:37 2008 +0900
@@ -38,6 +38,7 @@
 #define TRC_MEM      0x0010f000    /* Xen memory trace         */
 #define TRC_PV       0x0020f000    /* Xen PV traces            */
 #define TRC_SHADOW   0x0040f000    /* Xen shadow tracing       */
+#define TRC_PM       0x0080f000    /* Xen power management trace */
 #define TRC_ALL      0x0ffff000
 #define TRC_HD_TO_EVENT(x) ((x)&0x0fffffff)
 #define TRC_HD_CYCLE_FLAG (1UL<<31)
@@ -146,6 +147,15 @@
 #define TRC_HVM_LMSW            (TRC_HVM_HANDLER + 0x19)
 #define TRC_HVM_LMSW64          (TRC_HVM_HANDLER + TRC_64_FLAG + 0x19)
 
+/* trace subclasses for power management */
+#define TRC_PM_FREQ     0x00801000      /* xen cpu freq events */
+#define TRC_PM_IDLE     0x00802000      /* xen cpu idle events */
+
+/* trace events for per class */
+#define TRC_PM_FREQ_CHANGE      (TRC_PM_FREQ + 0x01)
+#define TRC_PM_IDLE_ENTRY       (TRC_PM_IDLE + 0x01)
+#define TRC_PM_IDLE_EXIT        (TRC_PM_IDLE + 0x02)
+
 /* This structure represents a single trace buffer record. */
 struct t_rec {
     uint32_t event:28;
diff -r 45c3a3dfa5b5 -r 61d1f2810617 include/xen/interface/xen.h
--- a/include/xen/interface/xen.h       Fri Oct 24 11:22:02 2008 +0900
+++ b/include/xen/interface/xen.h       Tue Nov 04 12:43:37 2008 +0900
@@ -231,6 +231,13 @@ DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
  * cmd: MMUEXT_SET_LDT
  * linear_addr: Linear address of LDT base (NB. must be page-aligned).
  * nr_ents: Number of entries in LDT.
+ *
+ * cmd: MMUEXT_CLEAR_PAGE
+ * mfn: Machine frame number to be cleared.
+ *
+ * cmd: MMUEXT_COPY_PAGE
+ * mfn: Machine frame number of the destination page.
+ * src_mfn: Machine frame number of the source page.
  */
 #define MMUEXT_PIN_L1_TABLE      0
 #define MMUEXT_PIN_L2_TABLE      1
@@ -247,12 +254,15 @@ DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
 #define MMUEXT_FLUSH_CACHE      12
 #define MMUEXT_SET_LDT          13
 #define MMUEXT_NEW_USER_BASEPTR 15
+#define MMUEXT_CLEAR_PAGE       16
+#define MMUEXT_COPY_PAGE        17
 
 #ifndef __ASSEMBLY__
 struct mmuext_op {
     unsigned int cmd;
     union {
-        /* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR */
+        /* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR
+         * CLEAR_PAGE, COPY_PAGE */
         xen_pfn_t     mfn;
         /* INVLPG_LOCAL, INVLPG_ALL, SET_LDT */
         unsigned long linear_addr;
@@ -266,6 +276,8 @@ struct mmuext_op {
 #else
         void *vcpumask;
 #endif
+        /* COPY_PAGE */
+        xen_pfn_t src_mfn;
     } arg2;
 };
 typedef struct mmuext_op mmuext_op_t;

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

<Prev in Thread] Current Thread [Next in Thread>