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: Tue, 08 Apr 2008 02:01:58 -0700
Delivery-date: Tue, 08 Apr 2008 02:06:57 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/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 Alex Williamson <alex.williamson@xxxxxx>
# Date 1207070971 21600
# Node ID ad7ad9af265e3276d084f8074192bec9d3867747
# Parent  bb2f8ba47833ad7798957bd64670ec5019127c8c
# Parent  06ffa3eb5e3ff1cf517c15b40a8cd757bc827950
merge with linux-2.6.18-xen.hg
---
 Documentation/i2c/busses/i2c-i801           |    5 
 arch/i386/kernel/pci-dma-xen.c              |   33 ++++
 arch/i386/pci/irq-xen.c                     |    4 
 arch/i386/pci/irq.c                         |    4 
 drivers/i2c/busses/Kconfig                  |    1 
 drivers/i2c/busses/i2c-i801.c               |    4 
 drivers/scsi/ahci.c                         |    6 
 drivers/scsi/ata_piix.c                     |   40 +++++
 drivers/xen/balloon/sysfs.c                 |    2 
 drivers/xen/blkback/blkback.c               |    4 
 drivers/xen/blkfront/blkfront.c             |    2 
 drivers/xen/core/gnttab.c                   |   39 ++---
 drivers/xen/core/xen_sysfs.c                |    4 
 drivers/xen/fbfront/xenfb.c                 |  197 +++++++++++++++++++++++-----
 drivers/xen/fbfront/xenkbd.c                |   10 +
 drivers/xen/pciback/passthrough.c           |   10 +
 drivers/xen/pciback/xenbus.c                |   20 +-
 drivers/xen/pcifront/xenbus.c               |    2 
 drivers/xen/xenbus/xenbus_xs.c              |   31 +++-
 include/asm-i386/mach-xen/asm/dma-mapping.h |    8 -
 include/asm-i386/mach-xen/asm/page.h        |    7 
 include/linux/pci_ids.h                     |    6 
 include/xen/interface/arch-ia64.h           |    6 
 include/xen/interface/arch-ia64/sioemu.h    |   42 +++++
 include/xen/interface/arch-powerpc.h        |    2 
 include/xen/interface/arch-x86/hvm/save.h   |    3 
 include/xen/interface/arch-x86/xen-x86_64.h |    2 
 include/xen/interface/arch-x86/xen.h        |    2 
 include/xen/interface/domctl.h              |   19 ++
 include/xen/interface/hvm/ioreq.h           |   10 -
 include/xen/interface/hvm/params.h          |    5 
 include/xen/interface/hvm/save.h            |    4 
 include/xen/interface/io/fbif.h             |   29 +++-
 include/xen/interface/io/ring.h             |   24 ++-
 include/xen/interface/io/xs_wire.h          |    3 
 include/xen/interface/kexec.h               |    8 -
 include/xen/interface/physdev.h             |    6 
 include/xen/interface/trace.h               |    8 +
 include/xen/interface/xen-compat.h          |    9 -
 include/xen/interface/xen.h                 |    6 
 sound/pci/hda/hda_intel.c                   |    3 
 41 files changed, 501 insertions(+), 129 deletions(-)

diff -r bb2f8ba47833 -r ad7ad9af265e Documentation/i2c/busses/i2c-i801
--- a/Documentation/i2c/busses/i2c-i801 Tue Mar 25 12:37:54 2008 -0600
+++ b/Documentation/i2c/busses/i2c-i801 Tue Apr 01 11:29:31 2008 -0600
@@ -10,6 +10,11 @@ Supported adapters:
   * Intel 6300ESB
   * Intel 82801FB/FR/FW/FRW (ICH6)
   * Intel ICH7
+  * Intel 82801G (ICH7)
+  * Intel 82801H (ICH9)
+  * Intel 82801I (ICH9)
+  * Intel Tolapai
+  * Intel ICH10
     Datasheets: Publicly available at the Intel website
 
 Authors: 
diff -r bb2f8ba47833 -r ad7ad9af265e arch/i386/kernel/pci-dma-xen.c
--- a/arch/i386/kernel/pci-dma-xen.c    Tue Mar 25 12:37:54 2008 -0600
+++ b/arch/i386/kernel/pci-dma-xen.c    Tue Apr 01 11:29:31 2008 -0600
@@ -76,6 +76,39 @@ do {                                                 \
                BUG();                                  \
        }                                               \
 } while (0)
+
+static int check_pages_physically_contiguous(unsigned long pfn, 
+                                            unsigned int offset,
+                                            size_t length)
+{
+       unsigned long next_mfn;
+       int i;
+       int nr_pages;
+       
+       next_mfn = pfn_to_mfn(pfn);
+       nr_pages = (offset + length + PAGE_SIZE-1) >> PAGE_SHIFT;
+       
+       for (i = 1; i < nr_pages; i++) {
+               if (pfn_to_mfn(++pfn) != ++next_mfn) 
+                       return 0;
+       }
+       return 1;
+}
+
+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;
+}
 
 int
 dma_map_sg(struct device *hwdev, struct scatterlist *sg, int nents,
diff -r bb2f8ba47833 -r ad7ad9af265e arch/i386/pci/irq-xen.c
--- a/arch/i386/pci/irq-xen.c   Tue Mar 25 12:37:54 2008 -0600
+++ b/arch/i386/pci/irq-xen.c   Tue Apr 01 11:29:31 2008 -0600
@@ -553,6 +553,10 @@ static __init int intel_router_probe(str
                case PCI_DEVICE_ID_INTEL_ICH9_3:
                case PCI_DEVICE_ID_INTEL_ICH9_4:
                case PCI_DEVICE_ID_INTEL_ICH9_5:
+               case PCI_DEVICE_ID_INTEL_ICH10_0:
+               case PCI_DEVICE_ID_INTEL_ICH10_1:
+               case PCI_DEVICE_ID_INTEL_ICH10_2:
+               case PCI_DEVICE_ID_INTEL_ICH10_3:
                        r->name = "PIIX/ICH";
                        r->get = pirq_piix_get;
                        r->set = pirq_piix_set;
diff -r bb2f8ba47833 -r ad7ad9af265e arch/i386/pci/irq.c
--- a/arch/i386/pci/irq.c       Tue Mar 25 12:37:54 2008 -0600
+++ b/arch/i386/pci/irq.c       Tue Apr 01 11:29:31 2008 -0600
@@ -549,6 +549,10 @@ static __init int intel_router_probe(str
                case PCI_DEVICE_ID_INTEL_ICH9_3:
                case PCI_DEVICE_ID_INTEL_ICH9_4:
                case PCI_DEVICE_ID_INTEL_ICH9_5:
+               case PCI_DEVICE_ID_INTEL_ICH10_0:
+               case PCI_DEVICE_ID_INTEL_ICH10_1:
+               case PCI_DEVICE_ID_INTEL_ICH10_2:
+               case PCI_DEVICE_ID_INTEL_ICH10_3:
                        r->name = "PIIX/ICH";
                        r->get = pirq_piix_get;
                        r->set = pirq_piix_set;
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/i2c/busses/Kconfig
--- a/drivers/i2c/busses/Kconfig        Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/i2c/busses/Kconfig        Tue Apr 01 11:29:31 2008 -0600
@@ -126,6 +126,7 @@ config I2C_I801
            ESB2
            ICH8
            ICH9
+           ICH10
 
          This driver can also be built as a module.  If so, the module
          will be called i2c-i801.
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/i2c/busses/i2c-i801.c
--- a/drivers/i2c/busses/i2c-i801.c     Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/i2c/busses/i2c-i801.c     Tue Apr 01 11:29:31 2008 -0600
@@ -34,6 +34,8 @@
     ESB2               269B
     ICH8               283E
     ICH9               2930
+    ICH10              3A30
+    ICH10              3A60
     This driver supports several versions of Intel's I/O Controller Hubs (ICH).
     For SMBus support, they are similar to the PIIX4 and are part
     of Intel's '810' and other chipsets.
@@ -459,6 +461,8 @@ static struct pci_device_id i801_ids[] =
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
+       { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
+       { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
        { 0, }
 };
 
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/scsi/ahci.c
--- a/drivers/scsi/ahci.c       Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/scsi/ahci.c       Tue Apr 01 11:29:31 2008 -0600
@@ -339,6 +339,12 @@ static const struct pci_device_id ahci_p
          board_ahci }, /* ICH9 */
        { PCI_VENDOR_ID_INTEL, 0x294e, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
          board_ahci }, /* ICH9M */
+       { PCI_VENDOR_ID_INTEL, 0x3a02, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH10 */
+       { PCI_VENDOR_ID_INTEL, 0x3a05, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH10 */
+       { PCI_VENDOR_ID_INTEL, 0x3a25, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+         board_ahci }, /* ICH10 */
 
        /* JMicron */
        { 0x197b, 0x2360, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/scsi/ata_piix.c
--- a/drivers/scsi/ata_piix.c   Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/scsi/ata_piix.c   Tue Apr 01 11:29:31 2008 -0600
@@ -126,6 +126,7 @@ enum {
        ich7m_sata_ahci         = 7,
        ich8_sata_ahci          = 8,
        ich9_sata_ahci          = 9,
+       ich8_2port_sata         = 10,
 
        /* constants for mapping table */
        P0                      = 0,  /* port 0 */
@@ -193,10 +194,10 @@ static const struct pci_device_id piix_p
        { 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich7m_sata_ahci },
        /* Enterprise Southbridge 2 (where's the datasheet?) */
        { 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },
-       /* SATA Controller 1 IDE (ICH8, no datasheet yet) */
+       /* SATA Controller 1 IDE (ICH8) */
        { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
-       /* SATA Controller 2 IDE (ICH8, ditto) */
-       { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
+       /* SATA Controller 2 IDE (ICH8) */
+       { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
        /* Mobile SATA Controller IDE (ICH8M, ditto) */
        { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
        /* SATA Controller 1 IDE (ICH9) */
@@ -211,6 +212,14 @@ static const struct pci_device_id piix_p
        { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci },
        /* Mobile SATA Controller 2 IDE (ICH9M) */
        { 0x8086, 0x292e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci },
+       /* SATA Controller IDE (ICH10) */
+       { 0x8086, 0x3a00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
+       /* SATA Controller IDE (ICH10) */
+       { 0x8086, 0x3a06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
+       /* SATA Controller IDE (ICH10) */
+       { 0x8086, 0x3a20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
+       /* SATA Controller IDE (ICH10) */
+       { 0x8086, 0x3a26, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
 
        { }     /* terminate list */
 };
@@ -394,6 +403,18 @@ static const struct piix_map_db ich9_map
        },
 };
 
+static const struct piix_map_db ich8_2port_map_db = {
+       .mask = 0x3,
+       .port_enable = 0x3,
+       .map = {
+               /* PM   PS   SM   SS       MAP */
+               {  P0,  NA,  P1,  NA }, /* 00b */
+               {  RV,  RV,  RV,  RV }, /* 01b */
+               {  RV,  RV,  RV,  RV }, /* 10b */
+               {  RV,  RV,  RV,  RV },
+       },
+};
+
 static const struct piix_map_db *piix_map_db_table[] = {
        [ich5_sata]             = &ich5_map_db,
        [esb_sata]              = &ich5_map_db,
@@ -403,6 +424,7 @@ static const struct piix_map_db *piix_ma
        [ich7m_sata_ahci]       = &ich7m_map_db,
        [ich8_sata_ahci]        = &ich8_map_db,
        [ich9_sata_ahci]        = &ich9_map_db,
+       [ich8_2port_sata]       = &ich8_2port_map_db,
 };
 
 static struct ata_port_info piix_port_info[] = {
@@ -525,6 +547,18 @@ static struct ata_port_info piix_port_in
                .mwdma_mask     = 0x07, /* mwdma0-2 */
                .udma_mask      = 0x7f, /* udma0-6 */
                .port_ops       = &piix_sata_ops,
+       },
+       
+       /* ich8_2port_sata: 11: */
+       {
+               .sht            = &piix_sht,
+               .host_flags     = ATA_FLAG_SATA |
+                                 PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR |
+                                 PIIX_FLAG_AHCI,
+               .pio_mask       = 0x1f, /* pio0-4 */
+               .mwdma_mask     = 0x07, /* mwdma0-2 */
+               .udma_mask      = ATA_UDMA6,
+               .port_ops       = &piix_pata_ops,
        },
 };
 
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/balloon/sysfs.c
--- a/drivers/xen/balloon/sysfs.c       Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/balloon/sysfs.c       Tue Apr 01 11:29:31 2008 -0600
@@ -39,7 +39,7 @@
 #include <xen/platform-compat.h>
 #endif
 
-#define BALLOON_CLASS_NAME "memory"
+#define BALLOON_CLASS_NAME "xen_memory"
 
 #define BALLOON_SHOW(name, format, args...)                    \
        static ssize_t show_##name(struct sys_device *dev,      \
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/blkback/blkback.c
--- a/drivers/xen/blkback/blkback.c     Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/blkback/blkback.c     Tue Apr 01 11:29:31 2008 -0600
@@ -173,8 +173,8 @@ static void fast_flush_area(pending_req_
                handle = pending_handle(req, i);
                if (handle == BLKBACK_INVALID_HANDLE)
                        continue;
-               gnttab_set_unmap_op(&unmap[i], vaddr(req, i), GNTMAP_host_map,
-                                   handle);
+               gnttab_set_unmap_op(&unmap[invcount], vaddr(req, i),
+                                   GNTMAP_host_map, handle);
                pending_handle(req, i) = BLKBACK_INVALID_HANDLE;
                invcount++;
        }
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/blkfront/blkfront.c
--- a/drivers/xen/blkfront/blkfront.c   Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/blkfront/blkfront.c   Tue Apr 01 11:29:31 2008 -0600
@@ -817,7 +817,7 @@ static void blkif_recover(struct blkfron
        int j;
 
        /* Stage 1: Make a safe copy of the shadow state. */
-       copy = kmalloc(sizeof(info->shadow), GFP_KERNEL | __GFP_NOFAIL);
+       copy = kmalloc(sizeof(info->shadow), GFP_KERNEL | __GFP_NOFAIL | 
__GFP_HIGH);
        memcpy(copy, info->shadow, sizeof(info->shadow));
 
        /* Stage 2: Set up free list. */
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/core/gnttab.c
--- a/drivers/xen/core/gnttab.c Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/core/gnttab.c Tue Apr 01 11:29:31 2008 -0600
@@ -52,7 +52,7 @@
 /* External tools reserve first few grant table entries. */
 #define NR_RESERVED_ENTRIES 8
 #define GNTTAB_LIST_END 0xffffffff
-#define GREFS_PER_GRANT_FRAME (PAGE_SIZE / sizeof(grant_entry_t))
+#define ENTRIES_PER_GRANT_FRAME (PAGE_SIZE / sizeof(grant_entry_t))
 
 static grant_ref_t **gnttab_list;
 static unsigned int nr_grant_frames;
@@ -69,6 +69,9 @@ static int gnttab_expand(unsigned int re
 
 #define RPP (PAGE_SIZE / sizeof(grant_ref_t))
 #define gnttab_entry(entry) (gnttab_list[(entry) / RPP][(entry) % RPP])
+
+#define nr_freelist_frames(grant_frames)                               \
+       (((grant_frames) * ENTRIES_PER_GRANT_FRAME + RPP - 1) / RPP)
 
 static int get_free_entries(int count)
 {
@@ -372,24 +375,25 @@ static int grow_gnttab_list(unsigned int
 static int grow_gnttab_list(unsigned int more_frames)
 {
        unsigned int new_nr_grant_frames, extra_entries, i;
+       unsigned int nr_glist_frames, new_nr_glist_frames;
 
        new_nr_grant_frames = nr_grant_frames + more_frames;
-       extra_entries       = more_frames * GREFS_PER_GRANT_FRAME;
-
-       for (i = nr_grant_frames; i < new_nr_grant_frames; i++)
-       {
+       extra_entries       = more_frames * ENTRIES_PER_GRANT_FRAME;
+
+       nr_glist_frames = nr_freelist_frames(nr_grant_frames);
+       new_nr_glist_frames = nr_freelist_frames(new_nr_grant_frames);
+       for (i = nr_glist_frames; i < new_nr_glist_frames; i++) {
                gnttab_list[i] = (grant_ref_t *)__get_free_page(GFP_ATOMIC);
                if (!gnttab_list[i])
                        goto grow_nomem;
        }
 
-
-       for (i = GREFS_PER_GRANT_FRAME * nr_grant_frames;
-            i < GREFS_PER_GRANT_FRAME * new_nr_grant_frames - 1; i++)
+       for (i = ENTRIES_PER_GRANT_FRAME * nr_grant_frames;
+            i < ENTRIES_PER_GRANT_FRAME * new_nr_grant_frames - 1; i++)
                gnttab_entry(i) = i + 1;
 
        gnttab_entry(i) = gnttab_free_head;
-       gnttab_free_head = GREFS_PER_GRANT_FRAME * nr_grant_frames;
+       gnttab_free_head = ENTRIES_PER_GRANT_FRAME * nr_grant_frames;
        gnttab_free_count += extra_entries;
 
        nr_grant_frames = new_nr_grant_frames;
@@ -399,7 +403,7 @@ static int grow_gnttab_list(unsigned int
        return 0;
        
 grow_nomem:
-       for ( ; i >= nr_grant_frames; i--)
+       for ( ; i >= nr_glist_frames; i--)
                free_page((unsigned long) gnttab_list[i]);
        return -ENOMEM;
 }
@@ -699,8 +703,8 @@ static int gnttab_expand(unsigned int re
        unsigned int cur, extra;
 
        cur = nr_grant_frames;
-       extra = ((req_entries + (GREFS_PER_GRANT_FRAME-1)) /
-                GREFS_PER_GRANT_FRAME);
+       extra = ((req_entries + (ENTRIES_PER_GRANT_FRAME-1)) /
+                ENTRIES_PER_GRANT_FRAME);
        if (cur + extra > max_nr_grant_frames())
                return -ENOSPC;
 
@@ -713,7 +717,7 @@ int __devinit gnttab_init(void)
 int __devinit gnttab_init(void)
 {
        int i;
-       unsigned int max_nr_glist_frames;
+       unsigned int max_nr_glist_frames, nr_glist_frames;
        unsigned int nr_init_grefs;
 
        if (!is_running_on_xen())
@@ -725,16 +729,15 @@ int __devinit gnttab_init(void)
        /* Determine the maximum number of frames required for the
         * grant reference free list on the current hypervisor.
         */
-       max_nr_glist_frames = (boot_max_nr_grant_frames *
-                              GREFS_PER_GRANT_FRAME /
-                              (PAGE_SIZE / sizeof(grant_ref_t)));
+       max_nr_glist_frames = nr_freelist_frames(boot_max_nr_grant_frames);
 
        gnttab_list = kmalloc(max_nr_glist_frames * sizeof(grant_ref_t *),
                              GFP_KERNEL);
        if (gnttab_list == NULL)
                return -ENOMEM;
 
-       for (i = 0; i < nr_grant_frames; i++) {
+       nr_glist_frames = nr_freelist_frames(nr_grant_frames);
+       for (i = 0; i < nr_glist_frames; i++) {
                gnttab_list[i] = (grant_ref_t *)__get_free_page(GFP_KERNEL);
                if (gnttab_list[i] == NULL)
                        goto ini_nomem;
@@ -743,7 +746,7 @@ int __devinit gnttab_init(void)
        if (gnttab_resume() < 0)
                return -ENODEV;
 
-       nr_init_grefs = nr_grant_frames * GREFS_PER_GRANT_FRAME;
+       nr_init_grefs = nr_grant_frames * ENTRIES_PER_GRANT_FRAME;
 
        for (i = NR_RESERVED_ENTRIES; i < nr_init_grefs - 1; i++)
                gnttab_entry(i) = i + 1;
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/core/xen_sysfs.c
--- a/drivers/xen/core/xen_sysfs.c      Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/core/xen_sysfs.c      Tue Apr 01 11:29:31 2008 -0600
@@ -104,6 +104,10 @@ static ssize_t uuid_show(struct hyp_sysf
 {
        char *vm, *val;
        int ret;
+       extern int xenstored_ready;
+
+       if (!xenstored_ready)
+               return -EBUSY;
 
        vm = xenbus_read(XBT_NIL, "vm", "", NULL);
        if (IS_ERR(vm))
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/fbfront/xenfb.c
--- a/drivers/xen/fbfront/xenfb.c       Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/fbfront/xenfb.c       Tue Apr 01 11:29:31 2008 -0600
@@ -62,15 +62,21 @@ struct xenfb_info
        struct xenfb_page       *page;
        unsigned long           *mfns;
        int                     update_wanted; /* XENFB_TYPE_UPDATE wanted */
+       int                     feature_resize; /* Backend has resize feature */
+       struct xenfb_resize     resize;
+       int                     resize_dpy;
+       spinlock_t              resize_lock;
 
        struct xenbus_device    *xbdev;
 };
 
 /*
- * How the locks work together
- *
- * There are two locks: spinlock dirty_lock protecting the dirty
- * rectangle, and mutex mm_lock protecting mappings.
+ * There are three locks:
+ *    spinlock resize_lock protecting resize_dpy and resize
+ *    spinlock dirty_lock protecting the dirty rectangle
+ *    mutex mm_lock protecting mappings.
+ *
+ * How the dirty and mapping locks work together
  *
  * The problem is that dirty rectangle and mappings aren't
  * independent: the dirty rectangle must cover all faulted pages in
@@ -129,35 +135,62 @@ struct xenfb_info
  *
  * Oh well, we wont be updating the writes to this page anytime soon.
  */
+#define MB_ (1024*1024)
+#define XENFB_DEFAULT_FB_LEN (XENFB_WIDTH * XENFB_HEIGHT * XENFB_DEPTH / 8)
+
+enum {KPARAM_MEM, KPARAM_WIDTH, KPARAM_HEIGHT, KPARAM_CNT};
+static int video[KPARAM_CNT] = {2, XENFB_WIDTH, XENFB_HEIGHT};
+module_param_array(video, int, NULL, 0);
+MODULE_PARM_DESC(video,
+               "Size of video memory in MB and width,height in pixels, default 
= (2,800,600)");
 
 static int xenfb_fps = 20;
-static unsigned long xenfb_mem_len = XENFB_WIDTH * XENFB_HEIGHT * XENFB_DEPTH 
/ 8;
 
 static int xenfb_remove(struct xenbus_device *);
-static void xenfb_init_shared_page(struct xenfb_info *);
+static void xenfb_init_shared_page(struct xenfb_info *, struct fb_info *);
 static int xenfb_connect_backend(struct xenbus_device *, struct xenfb_info *);
 static void xenfb_disconnect_backend(struct xenfb_info *);
 
+static void xenfb_send_event(struct xenfb_info *info,
+               union xenfb_out_event *event)
+{
+       __u32 prod;
+
+       prod = info->page->out_prod;
+       /* caller ensures !xenfb_queue_full() */
+       mb();                   /* ensure ring space available */
+       XENFB_OUT_RING_REF(info->page, prod) = *event;
+       wmb();                  /* ensure ring contents visible */
+       info->page->out_prod = prod + 1;
+
+       notify_remote_via_irq(info->irq);
+}
+
 static void xenfb_do_update(struct xenfb_info *info,
                            int x, int y, int w, int h)
 {
        union xenfb_out_event event;
-       __u32 prod;
-
+
+       memset(&event, 0, sizeof(event));
        event.type = XENFB_TYPE_UPDATE;
        event.update.x = x;
        event.update.y = y;
        event.update.width = w;
        event.update.height = h;
 
-       prod = info->page->out_prod;
        /* caller ensures !xenfb_queue_full() */
-       mb();                   /* ensure ring space available */
-       XENFB_OUT_RING_REF(info->page, prod) = event;
-       wmb();                  /* ensure ring contents visible */
-       info->page->out_prod = prod + 1;
-
-       notify_remote_via_irq(info->irq);
+       xenfb_send_event(info, &event);
+}
+
+static void xenfb_do_resize(struct xenfb_info *info)
+{
+       union xenfb_out_event event;
+
+       memset(&event, 0, sizeof(event));
+       event.resize = info->resize;
+
+       /* caller ensures !xenfb_queue_full() */
+       xenfb_send_event(info, &event);
 }
 
 static int xenfb_queue_full(struct xenfb_info *info)
@@ -209,11 +242,26 @@ static void xenfb_update_screen(struct x
        xenfb_do_update(info, x1, y1, x2 - x1, y2 - y1);
 }
 
+static void xenfb_handle_resize_dpy(struct xenfb_info *info)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&info->resize_lock, flags);
+       if (info->resize_dpy) {
+               if (!xenfb_queue_full(info)) {
+                       info->resize_dpy = 0;
+                       xenfb_do_resize(info);
+               }
+       }
+       spin_unlock_irqrestore(&info->resize_lock, flags);
+}
+
 static int xenfb_thread(void *data)
 {
        struct xenfb_info *info = data;
 
        while (!kthread_should_stop()) {
+               xenfb_handle_resize_dpy(info);
                if (info->dirty) {
                        info->dirty = 0;
                        xenfb_update_screen(info);
@@ -413,6 +461,57 @@ static int xenfb_mmap(struct fb_info *fb
        return 0;
 }
 
+static int
+xenfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
+{
+       struct xenfb_info *xenfb_info;
+       int required_mem_len;
+
+       xenfb_info = info->par;
+
+       if (!xenfb_info->feature_resize) {
+               if (var->xres == video[KPARAM_WIDTH] &&
+                       var->yres == video[KPARAM_HEIGHT] &&
+                       var->bits_per_pixel == xenfb_info->page->depth) {
+                       return 0;
+               }
+               return -EINVAL;
+       }
+
+       /* Can't resize past initial width and height */
+       if (var->xres > video[KPARAM_WIDTH] || var->yres > video[KPARAM_HEIGHT])
+               return -EINVAL;
+
+       required_mem_len = var->xres * var->yres * (xenfb_info->page->depth / 
8);
+       if (var->bits_per_pixel == xenfb_info->page->depth &&
+               var->xres <= info->fix.line_length / (XENFB_DEPTH / 8) &&
+               required_mem_len <= info->fix.smem_len) {
+               var->xres_virtual = var->xres;
+               var->yres_virtual = var->yres;
+               return 0;
+       }
+       return -EINVAL;
+}
+
+static int xenfb_set_par(struct fb_info *info)
+{
+       struct xenfb_info *xenfb_info;
+       unsigned long flags;
+
+       xenfb_info = info->par;
+
+       spin_lock_irqsave(&xenfb_info->resize_lock, flags);
+       xenfb_info->resize.type = XENFB_TYPE_RESIZE;
+       xenfb_info->resize.width = info->var.xres;
+       xenfb_info->resize.height = info->var.yres;
+       xenfb_info->resize.stride = info->fix.line_length;
+       xenfb_info->resize.depth = info->var.bits_per_pixel;
+       xenfb_info->resize.offset = 0;
+       xenfb_info->resize_dpy = 1;
+       spin_unlock_irqrestore(&xenfb_info->resize_lock, flags);
+       return 0;
+}
+
 static struct fb_ops xenfb_fb_ops = {
        .owner          = THIS_MODULE,
        .fb_setcolreg   = xenfb_setcolreg,
@@ -420,6 +519,8 @@ static struct fb_ops xenfb_fb_ops = {
        .fb_copyarea    = xenfb_copyarea,
        .fb_imageblit   = xenfb_imageblit,
        .fb_mmap        = xenfb_mmap,
+       .fb_check_var   = xenfb_check_var,
+       .fb_set_par     = xenfb_set_par,
 };
 
 static irqreturn_t xenfb_event_handler(int rq, void *dev_id,
@@ -450,6 +551,8 @@ static int __devinit xenfb_probe(struct 
 {
        struct xenfb_info *info;
        struct fb_info *fb_info;
+       int fb_size;
+       int val;
        int ret;
 
        info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -457,11 +560,27 @@ static int __devinit xenfb_probe(struct 
                xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure");
                return -ENOMEM;
        }
+
+       /* Limit kernel param videoram amount to what is in xenstore */
+       if (xenbus_scanf(XBT_NIL, dev->otherend, "videoram", "%d", &val) == 1) {
+               if (val < video[KPARAM_MEM])
+                       video[KPARAM_MEM] = val;
+       }
+
+       /* If requested res does not fit in available memory, use default */
+       fb_size = video[KPARAM_MEM] * MB_;
+       if (video[KPARAM_WIDTH] * video[KPARAM_HEIGHT] * XENFB_DEPTH/8 > 
fb_size) {
+               video[KPARAM_WIDTH] = XENFB_WIDTH;
+               video[KPARAM_HEIGHT] = XENFB_HEIGHT;
+               fb_size = XENFB_DEFAULT_FB_LEN;
+       }
+
        dev->dev.driver_data = info;
        info->xbdev = dev;
        info->irq = -1;
        info->x1 = info->y1 = INT_MAX;
        spin_lock_init(&info->dirty_lock);
+       spin_lock_init(&info->resize_lock);
        mutex_init(&info->mm_lock);
        init_waitqueue_head(&info->wq);
        init_timer(&info->refresh);
@@ -469,12 +588,12 @@ static int __devinit xenfb_probe(struct 
        info->refresh.data = (unsigned long)info;
        INIT_LIST_HEAD(&info->mappings);
 
-       info->fb = vmalloc(xenfb_mem_len);
+       info->fb = vmalloc(fb_size);
        if (info->fb == NULL)
                goto error_nomem;
-       memset(info->fb, 0, xenfb_mem_len);
-
-       info->nr_pages = (xenfb_mem_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
+       memset(info->fb, 0, fb_size);
+
+       info->nr_pages = (fb_size + PAGE_SIZE - 1) >> PAGE_SHIFT;
 
        info->pages = kmalloc(sizeof(struct page *) * info->nr_pages,
                              GFP_KERNEL);
@@ -489,8 +608,6 @@ static int __devinit xenfb_probe(struct 
        info->page = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
        if (!info->page)
                goto error_nomem;
-
-       xenfb_init_shared_page(info);
 
        fb_info = framebuffer_alloc(sizeof(u32) * 256, NULL);
                                /* see fishy hackery below */
@@ -504,9 +621,9 @@ static int __devinit xenfb_probe(struct 
        fb_info->screen_base = info->fb;
 
        fb_info->fbops = &xenfb_fb_ops;
-       fb_info->var.xres_virtual = fb_info->var.xres = info->page->width;
-       fb_info->var.yres_virtual = fb_info->var.yres = info->page->height;
-       fb_info->var.bits_per_pixel = info->page->depth;
+       fb_info->var.xres_virtual = fb_info->var.xres = video[KPARAM_WIDTH];
+       fb_info->var.yres_virtual = fb_info->var.yres = video[KPARAM_HEIGHT];
+       fb_info->var.bits_per_pixel = XENFB_DEPTH;
 
        fb_info->var.red = (struct fb_bitfield){16, 8, 0};
        fb_info->var.green = (struct fb_bitfield){8, 8, 0};
@@ -518,9 +635,9 @@ static int __devinit xenfb_probe(struct 
        fb_info->var.vmode = FB_VMODE_NONINTERLACED;
 
        fb_info->fix.visual = FB_VISUAL_TRUECOLOR;
-       fb_info->fix.line_length = info->page->line_length;
+       fb_info->fix.line_length = fb_info->var.xres * (XENFB_DEPTH / 8);
        fb_info->fix.smem_start = 0;
-       fb_info->fix.smem_len = xenfb_mem_len;
+       fb_info->fix.smem_len = fb_size;
        strcpy(fb_info->fix.id, "xen");
        fb_info->fix.type = FB_TYPE_PACKED_PIXELS;
        fb_info->fix.accel = FB_ACCEL_NONE;
@@ -533,6 +650,8 @@ static int __devinit xenfb_probe(struct 
                xenbus_dev_fatal(dev, ret, "fb_alloc_cmap");
                goto error;
        }
+
+       xenfb_init_shared_page(info, fb_info);
 
        ret = register_framebuffer(fb_info);
        if (ret) {
@@ -571,7 +690,7 @@ static int xenfb_resume(struct xenbus_de
        struct xenfb_info *info = dev->dev.driver_data;
 
        xenfb_disconnect_backend(info);
-       xenfb_init_shared_page(info);
+       xenfb_init_shared_page(info, info->fb_info);
        return xenfb_connect_backend(dev, info);
 }
 
@@ -597,9 +716,11 @@ static int xenfb_remove(struct xenbus_de
        return 0;
 }
 
-static void xenfb_init_shared_page(struct xenfb_info *info)
+static void xenfb_init_shared_page(struct xenfb_info *info,
+                                   struct fb_info * fb_info)
 {
        int i;
+       int epd = PAGE_SIZE / sizeof(info->mfns[0]);
 
        for (i = 0; i < info->nr_pages; i++)
                info->pages[i] = vmalloc_to_page(info->fb + i * PAGE_SIZE);
@@ -607,13 +728,14 @@ static void xenfb_init_shared_page(struc
        for (i = 0; i < info->nr_pages; i++)
                info->mfns[i] = vmalloc_to_mfn(info->fb + i * PAGE_SIZE);
 
-       info->page->pd[0] = vmalloc_to_mfn(info->mfns);
-       info->page->pd[1] = 0;
-       info->page->width = XENFB_WIDTH;
-       info->page->height = XENFB_HEIGHT;
-       info->page->depth = XENFB_DEPTH;
-       info->page->line_length = (info->page->depth / 8) * info->page->width;
-       info->page->mem_length = xenfb_mem_len;
+       for (i = 0; i * epd < info->nr_pages; i++)
+               info->page->pd[i] = vmalloc_to_mfn(&info->mfns[i * epd]);
+
+       info->page->width = fb_info->var.xres;
+       info->page->height = fb_info->var.yres;
+       info->page->depth = fb_info->var.bits_per_pixel;
+       info->page->line_length = fb_info->fix.line_length;
+       info->page->mem_length = fb_info->fix.smem_len;
        info->page->in_cons = info->page->in_prod = 0;
        info->page->out_cons = info->page->out_prod = 0;
 }
@@ -712,6 +834,11 @@ static void xenfb_backend_changed(struct
                        val = 0;
                if (val)
                        info->update_wanted = 1;
+
+               if (xenbus_scanf(XBT_NIL, dev->otherend,
+                                       "feature-resize", "%d", &val) < 0)
+                       val = 0;
+               info->feature_resize = val;
                break;
 
        case XenbusStateClosing:
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/fbfront/xenkbd.c
--- a/drivers/xen/fbfront/xenkbd.c      Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/fbfront/xenkbd.c      Tue Apr 01 11:29:31 2008 -0600
@@ -297,6 +297,16 @@ static void xenkbd_backend_changed(struc
                 */
                if (dev->state != XenbusStateConnected)
                        goto InitWait; /* no InitWait seen yet, fudge it */
+
+               /* Set input abs params to match backend screen res */
+               if (xenbus_scanf(XBT_NIL, info->xbdev->otherend,
+                                  "width", "%d", &val) > 0 )
+                       input_set_abs_params(info->ptr, ABS_X, 0, val, 0, 0);
+
+               if (xenbus_scanf(XBT_NIL, info->xbdev->otherend,
+                                  "height", "%d", &val) > 0 )
+                       input_set_abs_params(info->ptr, ABS_Y, 0, val, 0, 0);
+
                break;
 
        case XenbusStateClosing:
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/pciback/passthrough.c
--- a/drivers/xen/pciback/passthrough.c Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/pciback/passthrough.c Tue Apr 01 11:29:31 2008 -0600
@@ -47,6 +47,8 @@ int pciback_add_pci_dev(struct pciback_d
        struct passthrough_dev_data *dev_data = pdev->pci_dev_data;
        struct pci_dev_entry *dev_entry;
        unsigned long flags;
+       unsigned int domain, bus, devfn;
+       int err;
 
        dev_entry = kmalloc(sizeof(*dev_entry), GFP_KERNEL);
        if (!dev_entry)
@@ -57,9 +59,13 @@ int pciback_add_pci_dev(struct pciback_d
        list_add_tail(&dev_entry->list, &dev_data->dev_list);
        spin_unlock_irqrestore(&dev_data->lock, flags);
 
-       /* TODO: Publish virtual domain:bus:slot.func here. */
+       /* Publish this device. */
+       domain = (unsigned int)pci_domain_nr(dev->bus);
+       bus = (unsigned int)dev->bus->number;
+       devfn = dev->devfn;
+       err = publish_cb(pdev, domain, bus, devfn, devid);
 
-       return 0;
+       return err;
 }
 
 void pciback_release_pci_dev(struct pciback_device *pdev, struct pci_dev *dev)
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/pciback/xenbus.c
--- a/drivers/xen/pciback/xenbus.c      Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/pciback/xenbus.c      Tue Apr 01 11:29:31 2008 -0600
@@ -348,7 +348,6 @@ static int pciback_reconfigure(struct pc
                        substate = XenbusStateUnknown;
 
                switch (substate) {
-               /* case XenbusStateUnknown: */
                case XenbusStateInitialising:
                        dev_dbg(&pdev->xdev->dev, "Attaching dev-%d ...\n", i);
 
@@ -382,10 +381,14 @@ static int pciback_reconfigure(struct pc
                        if (err)
                                goto out;
 
-                       /* TODO: if we are to support multiple pci roots
-                        * (CONFIG_XEN_PCIDEV_BACKEND_PASS), publish newly
-                        * added root here.
-                        */
+                       /* Publish pci roots. */
+                       err = pciback_publish_pci_roots(pdev, 
pciback_publish_pci_root);
+                       if (err) {
+                               xenbus_dev_fatal(pdev->xdev, err,
+                                                "Error while publish PCI root"
+                                                "buses for frontend");
+                               goto out;
+                       }
 
                        err = xenbus_printf(XBT_NIL, pdev->xdev->nodename,
                                            state_str, "%d",
@@ -431,10 +434,11 @@ static int pciback_reconfigure(struct pc
                        if(err)
                                goto out;
 
-                       /* TODO: if we are to support multiple pci roots
-                        * (CONFIG_XEN_PCIDEV_BACKEND_PASS), remove unnecessary
-                        * root here.
+                       /* TODO: If at some point we implement support for pci
+                        * root hot-remove on pcifront side, we'll need to
+                        * remove unnecessary xenstore nodes of pci roots here.
                         */
+
                        break;
 
                default:
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/pcifront/xenbus.c
--- a/drivers/xen/pcifront/xenbus.c     Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/pcifront/xenbus.c     Tue Apr 01 11:29:31 2008 -0600
@@ -332,7 +332,7 @@ static int pcifront_detach_devices(struc
                        if (err >= 0)
                                err = -EINVAL;
                        xenbus_dev_fatal(pdev->xdev, err,
-                                        "Error reading PCI root %d", i);
+                                        "Error reading PCI device %d", i);
                        goto out;
                }
 
diff -r bb2f8ba47833 -r ad7ad9af265e drivers/xen/xenbus/xenbus_xs.c
--- a/drivers/xen/xenbus/xenbus_xs.c    Tue Mar 25 12:37:54 2008 -0600
+++ b/drivers/xen/xenbus/xenbus_xs.c    Tue Apr 01 11:29:31 2008 -0600
@@ -629,6 +629,8 @@ void unregister_xenbus_watch(struct xenb
        char token[sizeof(watch) * 2 + 1];
        int err;
 
+       BUG_ON(watch->flags & XBWF_new_thread);
+
        sprintf(token, "%lX", (long)watch);
 
        down_read(&xs_state.watch_mutex);
@@ -738,16 +740,29 @@ static int xenwatch_thread(void *unused)
                        list_del(ent);
                spin_unlock(&watch_events_lock);
 
-               if (ent != &watch_events) {
-                       msg = list_entry(ent, struct xs_stored_msg, list);
-                       if (msg->u.watch.handle->flags & XBWF_new_thread)
-                               kthread_run(xenwatch_handle_callback,
-                                           msg, "xenwatch_cb");
-                       else
-                               xenwatch_handle_callback(msg);
+               if (ent == &watch_events) {
+                       mutex_unlock(&xenwatch_mutex);
+                       continue;
                }
 
-               mutex_unlock(&xenwatch_mutex);
+               msg = list_entry(ent, struct xs_stored_msg, list);
+
+               /*
+                * Unlock the mutex before running an XBWF_new_thread
+                * handler. kthread_run can block which can deadlock
+                * against unregister_xenbus_watch() if we need to
+                * unregister other watches in order to make
+                * progress. This can occur on resume before the swap
+                * device is attached.
+                */
+               if (msg->u.watch.handle->flags & XBWF_new_thread) {
+                       mutex_unlock(&xenwatch_mutex);
+                       kthread_run(xenwatch_handle_callback,
+                                   msg, "xenwatch_cb");
+               } else {
+                       xenwatch_handle_callback(msg);
+                       mutex_unlock(&xenwatch_mutex);
+               }
        }
 
        return 0;
diff -r bb2f8ba47833 -r ad7ad9af265e include/asm-i386/mach-xen/asm/dma-mapping.h
--- a/include/asm-i386/mach-xen/asm/dma-mapping.h       Tue Mar 25 12:37:54 
2008 -0600
+++ b/include/asm-i386/mach-xen/asm/dma-mapping.h       Tue Apr 01 11:29:31 
2008 -0600
@@ -22,13 +22,7 @@ address_needs_mapping(struct device *hwd
        return (addr & ~mask) != 0;
 }
 
-static inline int
-range_straddles_page_boundary(paddr_t p, size_t size)
-{
-       extern unsigned long *contiguous_bitmap;
-       return ((((p & ~PAGE_MASK) + size) > PAGE_SIZE) &&
-               !test_bit(p >> PAGE_SHIFT, contiguous_bitmap));
-}
+extern int range_straddles_page_boundary(paddr_t p, size_t size);
 
 #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
 #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
diff -r bb2f8ba47833 -r ad7ad9af265e include/asm-i386/mach-xen/asm/page.h
--- a/include/asm-i386/mach-xen/asm/page.h      Tue Mar 25 12:37:54 2008 -0600
+++ b/include/asm-i386/mach-xen/asm/page.h      Tue Apr 01 11:29:31 2008 -0600
@@ -126,9 +126,10 @@ typedef struct { unsigned long pgprot; }
                    == _PAGE_PRESENT ?                          \
                    machine_to_phys(__pte_val(x)) :             \
                    __pte_val(x))
-#define __pte(x) ({ unsigned long _x = (x);                            \
-    (pte_t)(((_x) & (_PAGE_PRESENT|_PAGE_IO)) == _PAGE_PRESENT ?       \
-    phys_to_machine(_x) : (_x)); })
+#define __pte(x) ({ unsigned long _x = (x);                    \
+    if ((_x & (_PAGE_PRESENT|_PAGE_IO)) == _PAGE_PRESENT)      \
+        _x = phys_to_machine(_x);                              \
+    ((pte_t) { _x }); })
 #define __pmd_val(x) __pud_val((x).pud)
 #define __pud_val(x) __pgd_val((x).pgd)
 #define __pgd(x) ({ unsigned long _x = (x); \
diff -r bb2f8ba47833 -r ad7ad9af265e include/linux/pci_ids.h
--- a/include/linux/pci_ids.h   Tue Mar 25 12:37:54 2008 -0600
+++ b/include/linux/pci_ids.h   Tue Apr 01 11:29:31 2008 -0600
@@ -2209,6 +2209,12 @@
 #define PCI_DEVICE_ID_INTEL_MCH_PC     0x3599
 #define PCI_DEVICE_ID_INTEL_MCH_PC1    0x359a
 #define PCI_DEVICE_ID_INTEL_E7525_MCH  0x359e
+#define PCI_DEVICE_ID_INTEL_ICH10_0    0x3a14
+#define PCI_DEVICE_ID_INTEL_ICH10_1    0x3a16
+#define PCI_DEVICE_ID_INTEL_ICH10_2    0x3a18
+#define PCI_DEVICE_ID_INTEL_ICH10_3    0x3a1a
+#define PCI_DEVICE_ID_INTEL_ICH10_4    0x3a30
+#define PCI_DEVICE_ID_INTEL_ICH10_5    0x3a60
 #define PCI_DEVICE_ID_INTEL_82371SB_0  0x7000
 #define PCI_DEVICE_ID_INTEL_82371SB_1  0x7010
 #define PCI_DEVICE_ID_INTEL_82371SB_2  0x7020
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/arch-ia64.h
--- a/include/xen/interface/arch-ia64.h Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/arch-ia64.h Tue Apr 01 11:29:31 2008 -0600
@@ -23,8 +23,14 @@
  *
  */
 
+#include "xen.h"
+
 #ifndef __HYPERVISOR_IF_IA64_H__
 #define __HYPERVISOR_IF_IA64_H__
+
+#if !defined(__GNUC__) || defined(__STRICT_ANSI__)
+#error "Anonymous structs/unions are a GNU extension."
+#endif
 
 /* Structural guest handles introduced in 0x00030201. */
 #if __XEN_INTERFACE_VERSION__ >= 0x00030201
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/arch-ia64/sioemu.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/include/xen/interface/arch-ia64/sioemu.h  Tue Apr 01 11:29:31 2008 -0600
@@ -0,0 +1,42 @@
+/******************************************************************************
+ * sioemu.h
+ *
+ * Copyright (c) 2008 Tristan Gingold <tgingold@xxxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#ifndef __XEN_PUBLIC_IA64_SIOEMU_H__
+#define __XEN_PUBLIC_IA64_SIOEMU_H__
+
+/* Defines the callback entry point.  r8=ip, r9=data.
+   Must be called per-vcpu.  */
+#define SIOEMU_HYPERCALL_SET_CALLBACK 0x01
+
+/* Finish sioemu fw initialization and start firmware.  r8=ip.  */
+#define SIOEMU_HYPERCALL_START_FW 0x02
+
+/* Add IO pages in physmap.  */
+#define SIOEMU_HYPERCALL_ADD_IO_PHYSMAP 0x03
+
+/* Get wallclock time.  */
+#define SIOEMU_HYPERCALL_GET_TIME 0x04
+
+/* Return from callback.  r16=0.
+   Unmask vcpu events.  */
+#define SIOEMU_HYPERPRIVOP_CALLBACK_RETURN 0x01
+
+#endif /* __XEN_PUBLIC_IA64_SIOEMU_H__ */
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/arch-powerpc.h
--- a/include/xen/interface/arch-powerpc.h      Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/arch-powerpc.h      Tue Apr 01 11:29:31 2008 -0600
@@ -21,6 +21,8 @@
  *
  * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx>
  */
+
+#include "xen.h"
 
 #ifndef __XEN_PUBLIC_ARCH_PPC_64_H__
 #define __XEN_PUBLIC_ARCH_PPC_64_H__
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/arch-x86/hvm/save.h
--- a/include/xen/interface/arch-x86/hvm/save.h Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/arch-x86/hvm/save.h Tue Apr 01 11:29:31 2008 -0600
@@ -271,8 +271,7 @@ DECLARE_HVM_SAVE_TYPE(LAPIC, 5, struct h
 DECLARE_HVM_SAVE_TYPE(LAPIC, 5, struct hvm_hw_lapic);
 
 struct hvm_hw_lapic_regs {
-    /* A 4k page of register state */
-    uint8_t  data[0x400];
+    uint8_t data[1024];
 };
 
 DECLARE_HVM_SAVE_TYPE(LAPIC_REGS, 6, struct hvm_hw_lapic_regs);
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/arch-x86/xen-x86_64.h
--- a/include/xen/interface/arch-x86/xen-x86_64.h       Tue Mar 25 12:37:54 
2008 -0600
+++ b/include/xen/interface/arch-x86/xen-x86_64.h       Tue Apr 01 11:29:31 
2008 -0600
@@ -140,7 +140,7 @@ struct iret_context {
     /* Bottom of iret stack frame. */
 };
 
-#ifdef __GNUC__
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
 /* Anonymous union includes both 32- and 64-bit names (e.g., eax/rax). */
 #define __DECL_REG(name) union { \
     uint64_t r ## name, e ## name; \
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/arch-x86/xen.h
--- a/include/xen/interface/arch-x86/xen.h      Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/arch-x86/xen.h      Tue Apr 01 11:29:31 2008 -0600
@@ -23,6 +23,8 @@
  *
  * Copyright (c) 2004-2006, K A Fraser
  */
+
+#include "../xen.h"
 
 #ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
 #define __XEN_PUBLIC_ARCH_X86_XEN_H__
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/domctl.h
--- a/include/xen/interface/domctl.h    Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/domctl.h    Tue Apr 01 11:29:31 2008 -0600
@@ -53,6 +53,9 @@ struct xen_domctl_createdomain {
  /* Is this an HVM guest (as opposed to a PV guest)? */
 #define _XEN_DOMCTL_CDF_hvm_guest 0
 #define XEN_DOMCTL_CDF_hvm_guest  (1U<<_XEN_DOMCTL_CDF_hvm_guest)
+ /* Use hardware-assisted paging if available? */
+#define _XEN_DOMCTL_CDF_hap       1
+#define XEN_DOMCTL_CDF_hap        (1U<<_XEN_DOMCTL_CDF_hap)
     uint32_t flags;
 };
 typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;
@@ -373,6 +376,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_hyper
 #define XEN_DOMAINSETUP_hvm_guest  (1UL<<_XEN_DOMAINSETUP_hvm_guest)
 #define _XEN_DOMAINSETUP_query 1 /* Get parameters (for save)  */
 #define XEN_DOMAINSETUP_query  (1UL<<_XEN_DOMAINSETUP_query)
+#define _XEN_DOMAINSETUP_sioemu_guest 2
+#define XEN_DOMAINSETUP_sioemu_guest  (1UL<<_XEN_DOMAINSETUP_sioemu_guest)
 typedef struct xen_domctl_arch_setup {
     uint64_aligned_t flags;  /* XEN_DOMAINSETUP_* */
 #ifdef __ia64__
@@ -436,6 +441,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_sendt
 /* Assign PCI device to HVM guest. Sets up IOMMU structures. */
 #define XEN_DOMCTL_assign_device      37
 #define XEN_DOMCTL_test_assign_device 45
+#define XEN_DOMCTL_deassign_device 47
 struct xen_domctl_assign_device {
     uint32_t  machine_bdf;   /* machine PCI ID of assigned device */
 };
@@ -445,6 +451,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_assig
 
 /* Pass-through interrupts: bind real irq -> hvm devfn. */
 #define XEN_DOMCTL_bind_pt_irq       38
+#define XEN_DOMCTL_unbind_pt_irq     48
 typedef enum pt_irq_type_e {
     PT_IRQ_TYPE_PCI,
     PT_IRQ_TYPE_ISA
@@ -553,6 +560,17 @@ struct xen_domctl_set_opt_feature {
 };
 typedef struct xen_domctl_set_opt_feature xen_domctl_set_opt_feature_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_opt_feature_t);
+
+/*
+ * Set the target domain for a domain
+ */
+#define XEN_DOMCTL_set_target    46
+struct xen_domctl_set_target {
+    domid_t target;
+};
+typedef struct xen_domctl_set_target xen_domctl_set_target_t;
+DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_target_t);
+
 
 struct xen_domctl {
     uint32_t cmd;
@@ -590,6 +608,7 @@ struct xen_domctl {
         struct xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
         struct xen_domctl_ext_vcpucontext   ext_vcpucontext;
         struct xen_domctl_set_opt_feature   set_opt_feature;
+        struct xen_domctl_set_target        set_target;
         uint8_t                             pad[128];
     } u;
 };
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/hvm/ioreq.h
--- a/include/xen/interface/hvm/ioreq.h Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/hvm/ioreq.h Tue Apr 01 11:29:31 2008 -0600
@@ -34,14 +34,8 @@
 
 #define IOREQ_TYPE_PIO          0 /* pio */
 #define IOREQ_TYPE_COPY         1 /* mmio ops */
-#define IOREQ_TYPE_AND          2
-#define IOREQ_TYPE_OR           3
-#define IOREQ_TYPE_XOR          4
-#define IOREQ_TYPE_XCHG         5
-#define IOREQ_TYPE_ADD          6
 #define IOREQ_TYPE_TIMEOFFSET   7
 #define IOREQ_TYPE_INVALIDATE   8 /* mapcache */
-#define IOREQ_TYPE_SUB          9
 
 /*
  * VMExit dispatcher should cooperate with instruction decoder to
@@ -114,11 +108,11 @@ struct buffered_piopage {
 };
 #endif /* defined(__ia64__) */
 
-#if defined(__i386__) || defined(__x86_64__)
 #define ACPI_PM1A_EVT_BLK_ADDRESS           0x0000000000001f40
 #define ACPI_PM1A_CNT_BLK_ADDRESS           (ACPI_PM1A_EVT_BLK_ADDRESS + 0x04)
 #define ACPI_PM_TMR_BLK_ADDRESS             (ACPI_PM1A_EVT_BLK_ADDRESS + 0x08)
-#endif /* defined(__i386__) || defined(__x86_64__) */
+#define ACPI_GPE0_BLK_ADDRESS               (ACPI_PM_TMR_BLK_ADDRESS + 0x20)
+#define ACPI_GPE0_BLK_LEN                   0x08
 
 #endif /* _IOREQ_H_ */
 
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/hvm/params.h
--- a/include/xen/interface/hvm/params.h        Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/hvm/params.h        Tue Apr 01 11:29:31 2008 -0600
@@ -81,6 +81,9 @@
 #define HVMPTM_no_missed_ticks_pending   2
 #define HVMPTM_one_missed_tick_pending   3
 
-#define HVM_NR_PARAMS          11
+/* Boolean: Enable virtual HPET (high-precision event timer)? (x86-only) */
+#define HVM_PARAM_HPET_ENABLED 11
+
+#define HVM_NR_PARAMS          12
 
 #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/hvm/save.h
--- a/include/xen/interface/hvm/save.h  Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/hvm/save.h  Tue Apr 01 11:29:31 2008 -0600
@@ -39,6 +39,10 @@
  * Internal mechanisms should be kept in Xen-private headers.
  */
 
+#if !defined(__GNUC__) || defined(__STRICT_ANSI__)
+#error "Anonymous structs/unions are a GNU extension."
+#endif
+
 /* 
  * Each entry is preceded by a descriptor giving its type and length
  */
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/io/fbif.h
--- a/include/xen/interface/io/fbif.h   Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/io/fbif.h   Tue Apr 01 11:29:31 2008 -0600
@@ -50,12 +50,29 @@ struct xenfb_update
     int32_t height; /* rect height */
 };
 
+/*
+ * Framebuffer resize notification event
+ * Capable backend sets feature-resize in xenstore.
+ */
+#define XENFB_TYPE_RESIZE 3
+
+struct xenfb_resize
+{
+    uint8_t type;    /* XENFB_TYPE_RESIZE */
+    int32_t width;   /* width in pixels */
+    int32_t height;  /* height in pixels */
+    int32_t stride;  /* stride in bytes */
+    int32_t depth;   /* depth in bits */
+    int32_t offset;  /* offset of the framebuffer in bytes */
+};
+
 #define XENFB_OUT_EVENT_SIZE 40
 
 union xenfb_out_event
 {
     uint8_t type;
     struct xenfb_update update;
+    struct xenfb_resize resize;
     char pad[XENFB_OUT_EVENT_SIZE];
 };
 
@@ -109,15 +126,17 @@ struct xenfb_page
      * Each directory page holds PAGE_SIZE / sizeof(*pd)
      * framebuffer pages, and can thus map up to PAGE_SIZE *
      * PAGE_SIZE / sizeof(*pd) bytes.  With PAGE_SIZE == 4096 and
-     * sizeof(unsigned long) == 4, that's 4 Megs.  Two directory
-     * pages should be enough for a while.
+     * sizeof(unsigned long) == 4/8, that's 4 Megs 32 bit and 2 Megs
+     * 64 bit.  256 directories give enough room for a 512 Meg
+     * framebuffer with a max resolution of 12,800x10,240.  Should
+     * be enough for a while with room leftover for expansion.
      */
-    unsigned long pd[2];
+    unsigned long pd[256];
 };
 
 /*
- * Wart: xenkbd needs to know resolution.  Put it here until a better
- * solution is found, but don't leak it to the backend.
+ * Wart: xenkbd needs to know default resolution.  Put it here until a
+ * better solution is found, but don't leak it to the backend.
  */
 #ifdef __KERNEL__
 #define XENFB_WIDTH 800
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/io/ring.h
--- a/include/xen/interface/io/ring.h   Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/io/ring.h   Tue Apr 01 11:29:31 2008 -0600
@@ -26,6 +26,14 @@
 
 #ifndef __XEN_PUBLIC_IO_RING_H__
 #define __XEN_PUBLIC_IO_RING_H__
+
+#include "../xen-compat.h"
+
+#if __XEN_INTERFACE_VERSION__ < 0x00030208
+#define xen_mb()  mb()
+#define xen_rmb() rmb()
+#define xen_wmb() wmb()
+#endif
 
 typedef unsigned int RING_IDX;
 
@@ -211,12 +219,12 @@ typedef struct __name##_back_ring __name
     (((_cons) - (_r)->rsp_prod_pvt) >= RING_SIZE(_r))
 
 #define RING_PUSH_REQUESTS(_r) do {                                     \
-    wmb(); /* back sees requests /before/ updated producer index */     \
+    xen_wmb(); /* back sees requests /before/ updated producer index */ \
     (_r)->sring->req_prod = (_r)->req_prod_pvt;                         \
 } while (0)
 
 #define RING_PUSH_RESPONSES(_r) do {                                    \
-    wmb(); /* front sees responses /before/ updated producer index */   \
+    xen_wmb(); /* front sees resps /before/ updated producer index */   \
     (_r)->sring->rsp_prod = (_r)->rsp_prod_pvt;                         \
 } while (0)
 
@@ -253,9 +261,9 @@ typedef struct __name##_back_ring __name
 #define RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(_r, _notify) do {           \
     RING_IDX __old = (_r)->sring->req_prod;                             \
     RING_IDX __new = (_r)->req_prod_pvt;                                \
-    wmb(); /* back sees requests /before/ updated producer index */     \
+    xen_wmb(); /* back sees requests /before/ updated producer index */ \
     (_r)->sring->req_prod = __new;                                      \
-    mb(); /* back sees new requests /before/ we check req_event */      \
+    xen_mb(); /* back sees new requests /before/ we check req_event */  \
     (_notify) = ((RING_IDX)(__new - (_r)->sring->req_event) <           \
                  (RING_IDX)(__new - __old));                            \
 } while (0)
@@ -263,9 +271,9 @@ typedef struct __name##_back_ring __name
 #define RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(_r, _notify) do {          \
     RING_IDX __old = (_r)->sring->rsp_prod;                             \
     RING_IDX __new = (_r)->rsp_prod_pvt;                                \
-    wmb(); /* front sees responses /before/ updated producer index */   \
+    xen_wmb(); /* front sees resps /before/ updated producer index */   \
     (_r)->sring->rsp_prod = __new;                                      \
-    mb(); /* front sees new responses /before/ we check rsp_event */    \
+    xen_mb(); /* front sees new resps /before/ we check rsp_event */    \
     (_notify) = ((RING_IDX)(__new - (_r)->sring->rsp_event) <           \
                  (RING_IDX)(__new - __old));                            \
 } while (0)
@@ -274,7 +282,7 @@ typedef struct __name##_back_ring __name
     (_work_to_do) = RING_HAS_UNCONSUMED_REQUESTS(_r);                   \
     if (_work_to_do) break;                                             \
     (_r)->sring->req_event = (_r)->req_cons + 1;                        \
-    mb();                                                               \
+    xen_mb();                                                           \
     (_work_to_do) = RING_HAS_UNCONSUMED_REQUESTS(_r);                   \
 } while (0)
 
@@ -282,7 +290,7 @@ typedef struct __name##_back_ring __name
     (_work_to_do) = RING_HAS_UNCONSUMED_RESPONSES(_r);                  \
     if (_work_to_do) break;                                             \
     (_r)->sring->rsp_event = (_r)->rsp_cons + 1;                        \
-    mb();                                                               \
+    xen_mb();                                                           \
     (_work_to_do) = RING_HAS_UNCONSUMED_RESPONSES(_r);                  \
 } while (0)
 
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/io/xs_wire.h
--- a/include/xen/interface/io/xs_wire.h        Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/io/xs_wire.h        Tue Apr 01 11:29:31 2008 -0600
@@ -46,7 +46,8 @@ enum xsd_sockmsg_type
     XS_WATCH_EVENT,
     XS_ERROR,
     XS_IS_DOMAIN_INTRODUCED,
-    XS_RESUME
+    XS_RESUME,
+    XS_SET_TARGET
 };
 
 #define XS_WRITE_NONE "NONE"
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/kexec.h
--- a/include/xen/interface/kexec.h     Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/kexec.h     Tue Apr 01 11:29:31 2008 -0600
@@ -130,10 +130,10 @@ typedef struct xen_kexec_load {
 #define KEXEC_RANGE_MA_XEN        1 /* machine address and size of Xen itself 
*/
 #define KEXEC_RANGE_MA_CPU        2 /* machine address and size of a CPU note 
*/
 #define KEXEC_RANGE_MA_XENHEAP    3 /* machine address and size of xenheap
-                                    * Note that although this is adjacent
-                                    * to Xen it exists in a separate EFI
-                                    * region on ia64, and thus needs to be
-                                    * inserted into iomem_machine separately */
+                                     * Note that although this is adjacent
+                                     * to Xen it exists in a separate EFI
+                                     * region on ia64, and thus needs to be
+                                     * inserted into iomem_machine separately 
*/
 #define KEXEC_RANGE_MA_BOOT_PARAM 4 /* machine address and size of
                                      * the ia64_boot_param */
 #define KEXEC_RANGE_MA_EFI_MEMMAP 5 /* machine address and size of
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/physdev.h
--- a/include/xen/interface/physdev.h   Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/physdev.h   Tue Apr 01 11:29:31 2008 -0600
@@ -81,7 +81,11 @@ DEFINE_XEN_GUEST_HANDLE(physdev_set_iopl
 #define PHYSDEVOP_set_iobitmap           7
 struct physdev_set_iobitmap {
     /* IN */
-    XEN_GUEST_HANDLE_00030205(uint8) bitmap;
+#if __XEN_INTERFACE_VERSION__ >= 0x00030205
+    XEN_GUEST_HANDLE(uint8) bitmap;
+#else
+    uint8_t *bitmap;
+#endif
     uint32_t nr_ports;
 };
 typedef struct physdev_set_iobitmap physdev_set_iobitmap_t;
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/trace.h
--- a/include/xen/interface/trace.h     Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/trace.h     Tue Apr 01 11:29:31 2008 -0600
@@ -141,6 +141,14 @@ struct t_rec {
  * field, indexes into an array of struct t_rec's.
  */
 struct t_buf {
+    /* Assume the data buffer size is X.  X is generally not a power of 2.
+     * CONS and PROD are incremented modulo (2*X):
+     *     0 <= cons < 2*X
+     *     0 <= prod < 2*X
+     * This is done because addition modulo X breaks at 2^32 when X is not a
+     * power of 2:
+     *     (((2^32 - 1) % X) + 1) % X != (2^32) % X
+     */
     uint32_t cons;   /* Offset of next item to be consumed by control tools. */
     uint32_t prod;   /* Offset of next item to be produced by Xen.           */
     /*  Records follow immediately after the meta-data header.    */
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/xen-compat.h
--- a/include/xen/interface/xen-compat.h        Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/xen-compat.h        Tue Apr 01 11:29:31 2008 -0600
@@ -27,7 +27,7 @@
 #ifndef __XEN_PUBLIC_XEN_COMPAT_H__
 #define __XEN_PUBLIC_XEN_COMPAT_H__
 
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00030207
+#define __XEN_LATEST_INTERFACE_VERSION__ 0x00030208
 
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
 /* Xen is built with matching headers and implements the latest interface. */
@@ -41,11 +41,4 @@
 #error "These header files do not support the requested interface version."
 #endif
 
-/* Fields defined as a Xen guest handle since 0x00030205. */
-#if __XEN_INTERFACE_VERSION__ >= 0x00030205
-#define XEN_GUEST_HANDLE_00030205(type) XEN_GUEST_HANDLE(type)
-#else
-#define XEN_GUEST_HANDLE_00030205(type) type *
-#endif
-
 #endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff -r bb2f8ba47833 -r ad7ad9af265e include/xen/interface/xen.h
--- a/include/xen/interface/xen.h       Tue Mar 25 12:37:54 2008 -0600
+++ b/include/xen/interface/xen.h       Tue Apr 01 11:29:31 2008 -0600
@@ -263,7 +263,11 @@ struct mmuext_op {
         /* SET_LDT */
         unsigned int nr_ents;
         /* TLB_FLUSH_MULTI, INVLPG_MULTI */
-        XEN_GUEST_HANDLE_00030205(void) vcpumask;
+#if __XEN_INTERFACE_VERSION__ >= 0x00030205
+        XEN_GUEST_HANDLE(void) vcpumask;
+#else
+        void *vcpumask;
+#endif
     } arg2;
 };
 typedef struct mmuext_op mmuext_op_t;
diff -r bb2f8ba47833 -r ad7ad9af265e sound/pci/hda/hda_intel.c
--- a/sound/pci/hda/hda_intel.c Tue Mar 25 12:37:54 2008 -0600
+++ b/sound/pci/hda/hda_intel.c Tue Apr 01 11:29:31 2008 -0600
@@ -81,6 +81,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},
                         "{Intel, ESB2},"
                         "{Intel, ICH8},"
                         "{Intel, ICH9},"
+                        "{Intel, ICH10},"
                         "{ATI, SB450},"
                         "{ATI, SB600},"
                         "{ATI, RS600},"
@@ -1637,6 +1638,8 @@ static struct pci_device_id azx_ids[] = 
        { 0x8086, 0x284b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH8 */
        { 0x8086, 0x293e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH9 */
        { 0x8086, 0x293f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH9 */
+       { 0x8086, 0x3a3e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH10 */
+       { 0x8086, 0x3a6e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* 
ICH10 */
        { 0x1002, 0x437b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* 
ATI SB450 */
        { 0x1002, 0x4383, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* 
ATI SB600 */
        { 0x1002, 0x793b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, 
/* ATI RS600 HDMI */

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

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