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

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



# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1187283526 21600
# Node ID 60d8f0befd1810571b562a5120ced76868c86096
# Parent  41b7a0d7c2adcf6b77602ecf37883c98c5d20acc
# Parent  05c22f28202356d65d4f62692ff7c43bcdb0827a
merge with linux-2.6.18-xen.hg
---
 include/asm-i386/mach-xen/asm/floppy.h      |  147 -------------------
 include/asm-x86_64/mach-xen/asm/floppy.h    |  206 ----------------------------
 arch/i386/kernel/setup-xen.c                |    5 
 arch/powerpc/platforms/xen/hcall.c          |   56 +++----
 arch/powerpc/platforms/xen/setup.h          |    2 
 arch/x86_64/kernel/setup-xen.c              |    4 
 drivers/block/floppy.c                      |   14 +
 drivers/pnp/manager.c                       |   32 +---
 drivers/xen/core/reboot.c                   |    3 
 drivers/xen/core/xencomm.c                  |   20 +-
 drivers/xen/netfront/netfront.c             |   43 ++---
 drivers/xen/xenbus/xenbus_client.c          |    1 
 drivers/xen/xenbus/xenbus_comms.c           |    1 
 drivers/xen/xenbus/xenbus_probe.c           |    1 
 include/asm-i386/mach-xen/asm/hypercall.h   |    3 
 include/asm-i386/mach-xen/asm/io.h          |    2 
 include/asm-x86_64/mach-xen/asm/hypercall.h |    3 
 include/asm-x86_64/mach-xen/asm/io.h        |    2 
 include/xen/cpu_hotplug.h                   |    3 
 include/xen/xencomm.h                       |   42 ++++-
 20 files changed, 139 insertions(+), 451 deletions(-)

diff -r 41b7a0d7c2ad -r 60d8f0befd18 arch/i386/kernel/setup-xen.c
--- a/arch/i386/kernel/setup-xen.c      Sun Aug 12 15:04:04 2007 -0600
+++ b/arch/i386/kernel/setup-xen.c      Thu Aug 16 10:58:46 2007 -0600
@@ -1826,6 +1826,11 @@ void __init setup_arch(char **cmdline_p)
                     virt_to_mfn(pfn_to_mfn_frame_list_list);
        }
 
+       /* Mark all ISA DMA channels in-use - using them wouldn't work. */
+       for (i = 0; i < MAX_DMA_CHANNELS; ++i)
+               if (i != 4 && request_dma(i, "xen") != 0)
+                       BUG();
+
        /*
         * NOTE: at this point the bootmem allocator is fully available.
         */
diff -r 41b7a0d7c2ad -r 60d8f0befd18 arch/powerpc/platforms/xen/hcall.c
--- a/arch/powerpc/platforms/xen/hcall.c        Sun Aug 12 15:04:04 2007 -0600
+++ b/arch/powerpc/platforms/xen/hcall.c        Thu Aug 16 10:58:46 2007 -0600
@@ -56,7 +56,7 @@
 
 int HYPERVISOR_console_io(int cmd, int count, char *str)
 {
-       void *desc;
+       struct xencomm_handle *desc;
        int rc;
 
        desc = xencomm_map_no_alloc(str, count);
@@ -76,7 +76,8 @@ int HYPERVISOR_event_channel_op(int cmd,
 {
        int rc;
 
-       void *desc = xencomm_map_no_alloc(op, sizeof(evtchn_op_t));
+       struct xencomm_handle *desc =
+               xencomm_map_no_alloc(op, sizeof(evtchn_op_t));
        if (desc == NULL)
                return -EINVAL;
 
@@ -92,7 +93,7 @@ EXPORT_SYMBOL(HYPERVISOR_event_channel_o
 
 int HYPERVISOR_xen_version(int cmd, void *arg)
 {
-       void *desc;
+       struct xencomm_handle *desc;
        const unsigned long hcall = __HYPERVISOR_xen_version;
        int argsize;
        int rc;
@@ -144,7 +145,8 @@ EXPORT_SYMBOL(HYPERVISOR_xen_version);
 
 int HYPERVISOR_physdev_op(int cmd, void *op)
 {
-       void *desc = xencomm_map_no_alloc(op, sizeof(physdev_op_t));
+       struct xencomm_handle *desc =
+               xencomm_map_no_alloc(op, sizeof(physdev_op_t));
        int rc;
 
        if (desc == NULL)
@@ -163,8 +165,8 @@ int HYPERVISOR_sched_op(int cmd, void *a
 {
        int argsize = 0;
        int rc = -EINVAL;
-       void *desc;
-       evtchn_port_t *ports = NULL;
+       struct xencomm_handle *desc;
+       struct xencomm_handle *ports = NULL;
 
        switch (cmd) {
        case SCHEDOP_yield:
@@ -187,7 +189,7 @@ int HYPERVISOR_sched_op(int cmd, void *a
                if (ports == NULL)
                        return -ENOMEM;
 
-               set_xen_guest_handle(sched_poll.ports, ports);
+               set_xen_guest_handle(sched_poll.ports, (evtchn_port_t *)ports);
                memcpy(arg, &sched_poll, sizeof(sched_poll));
 
                }
@@ -222,7 +224,7 @@ int HYPERVISOR_suspend(unsigned long sre
        struct sched_shutdown sched_shutdown = {
                .reason = SHUTDOWN_suspend,
        };
-       void *desc;
+       struct xencomm_handle *desc;
 
        desc = xencomm_map_no_alloc(&sched_shutdown, sizeof(struct 
sched_shutdown));
 
@@ -234,7 +236,7 @@ int HYPERVISOR_kexec_op(unsigned long op
 int HYPERVISOR_kexec_op(unsigned long op, void *args)
 {
        unsigned long argsize;
-       void *desc;
+       struct xencomm_handle *desc;
 
        switch (op) {
                case KEXEC_CMD_kexec_get_range:
@@ -316,8 +318,8 @@ static int xenppc_privcmd_domctl(privcmd
 {
        xen_domctl_t kern_op;
        xen_domctl_t __user *user_op = (xen_domctl_t __user *)hypercall->arg[0];
-       void *op_desc;
-       void *desc = NULL;
+       struct xencomm_handle *op_desc;
+       struct xencomm_handle *desc = NULL;
        int ret = 0;
 
        if (copy_from_user(&kern_op, user_op, sizeof(xen_domctl_t)))
@@ -349,7 +351,7 @@ static int xenppc_privcmd_domctl(privcmd
                        ret = -ENOMEM;
 
                set_xen_guest_handle(kern_op.u.getmemlist.buffer,
-                                    desc);
+                                    (void *)desc);
                break;
        case XEN_DOMCTL_getpageframeinfo:
                break;
@@ -362,7 +364,7 @@ static int xenppc_privcmd_domctl(privcmd
                        ret = -ENOMEM;
 
                set_xen_guest_handle(kern_op.u.getpageframeinfo2.array,
-                                    desc);
+                                    (void *)desc);
                break;
        case XEN_DOMCTL_shadow_op:
 
@@ -376,7 +378,7 @@ static int xenppc_privcmd_domctl(privcmd
                                ret = -ENOMEM;
 
                        set_xen_guest_handle(kern_op.u.shadow_op.dirty_bitmap,
-                                        desc);
+                                        (void *)desc);
                }
                break;
        case XEN_DOMCTL_max_mem:
@@ -391,7 +393,7 @@ static int xenppc_privcmd_domctl(privcmd
                        ret = -ENOMEM;
 
                set_xen_guest_handle(kern_op.u.vcpucontext.ctxt,
-                                    desc);
+                                    (void *)desc);
                break;
        case XEN_DOMCTL_getvcpuinfo:
                break;
@@ -405,7 +407,7 @@ static int xenppc_privcmd_domctl(privcmd
                        ret = -ENOMEM;
 
                set_xen_guest_handle(kern_op.u.vcpuaffinity.cpumap.bitmap,
-                                    desc);
+                                    (void *)desc);
                break;
        case XEN_DOMCTL_max_vcpus:
        case XEN_DOMCTL_scheduler_op:
@@ -442,8 +444,8 @@ static int xenppc_privcmd_sysctl(privcmd
 {
        xen_sysctl_t kern_op;
        xen_sysctl_t __user *user_op = (xen_sysctl_t __user *)hypercall->arg[0];
-       struct xencomm_desc *op_desc;
-       void *desc = NULL;
+       struct xencomm_handle *op_desc;
+       struct xencomm_handle *desc = NULL;
        int ret = 0;
 
        if (copy_from_user(&kern_op, user_op, sizeof(xen_sysctl_t)))
@@ -470,7 +472,7 @@ static int xenppc_privcmd_sysctl(privcmd
                        ret = -ENOMEM;
 
                set_xen_guest_handle(kern_op.u.readconsole.buffer,
-                                    desc);
+                                    (void *)desc);
                break;
        case XEN_SYSCTL_tbuf_op:
        case XEN_SYSCTL_physinfo:
@@ -491,7 +493,7 @@ static int xenppc_privcmd_sysctl(privcmd
                        ret = -ENOMEM;
 
                set_xen_guest_handle(kern_op.u.getdomaininfolist.buffer,
-                                    desc);
+                                    (void *)desc);
                break;
        default:
                printk(KERN_ERR "%s: unknown sysctl cmd %d\n", __func__, 
kern_op.cmd);
@@ -517,8 +519,8 @@ static int xenppc_privcmd_platform_op(pr
        xen_platform_op_t kern_op;
        xen_platform_op_t __user *user_op =
                        (xen_platform_op_t __user *)hypercall->arg[0];
-       void *op_desc;
-       void *desc = NULL;
+       struct xencomm_handle *op_desc;
+       struct xencomm_handle *desc = NULL;
        int ret = 0;
 
        if (copy_from_user(&kern_op, user_op, sizeof(xen_platform_op_t)))
@@ -566,7 +568,7 @@ int HYPERVISOR_memory_op(unsigned int cm
 int HYPERVISOR_memory_op(unsigned int cmd, void *arg)
 {
        int ret;
-       void *op_desc;
+       struct xencomm_handle *op_desc;
        xen_memory_reservation_t *mop;
 
 
@@ -581,7 +583,7 @@ int HYPERVISOR_memory_op(unsigned int cm
        case XENMEM_increase_reservation:
        case XENMEM_decrease_reservation:
        case XENMEM_populate_physmap: {
-               void *desc = NULL;
+               struct xencomm_handle *desc = NULL;
 
                if (xen_guest_handle(mop->extent_start)) {
                        desc = xencomm_map(
@@ -595,7 +597,7 @@ int HYPERVISOR_memory_op(unsigned int cm
                        }
 
                        set_xen_guest_handle(mop->extent_start,
-                                            desc);
+                                            (void *)desc);
                }
 
                ret = plpar_hcall_norets(XEN_MARK(__HYPERVISOR_memory_op),
@@ -650,7 +652,7 @@ static int xenppc_privcmd_version(privcm
 
 static int xenppc_privcmd_event_channel_op(privcmd_hypercall_t *hypercall)
 {
-       struct xencomm_desc *desc;
+       struct xencomm_handle *desc;
        unsigned int argsize;
        int ret;
 
@@ -856,7 +858,7 @@ int HYPERVISOR_vcpu_op(int cmd, int vcpu
 {
        int argsize;
        const unsigned long hcall = __HYPERVISOR_vcpu_op;
-       void *desc;
+       struct xencomm_handle *desc;
        int rc;
 
        switch (cmd) {
diff -r 41b7a0d7c2ad -r 60d8f0befd18 arch/powerpc/platforms/xen/setup.h
--- a/arch/powerpc/platforms/xen/setup.h        Sun Aug 12 15:04:04 2007 -0600
+++ b/arch/powerpc/platforms/xen/setup.h        Thu Aug 16 10:58:46 2007 -0600
@@ -40,8 +40,6 @@ static inline u64 jiffies_to_ns(unsigned
        return j * (1000000000UL / HZ);
 }
 
-#define xen_guest_handle(hnd)  ((hnd).p)
-
 extern struct page *alloc_foreign_page(void);
 extern void free_foreign_page(struct page *page);
 
diff -r 41b7a0d7c2ad -r 60d8f0befd18 arch/x86_64/kernel/setup-xen.c
--- a/arch/x86_64/kernel/setup-xen.c    Sun Aug 12 15:04:04 2007 -0600
+++ b/arch/x86_64/kernel/setup-xen.c    Thu Aug 16 10:58:46 2007 -0600
@@ -863,6 +863,10 @@ void __init setup_arch(char **cmdline_p)
                                virt_to_mfn(pfn_to_mfn_frame_list_list);
                }
 
+               /* Mark all ISA DMA channels in-use - using them wouldn't work. 
*/
+               for (i = 0; i < MAX_DMA_CHANNELS; ++i)
+                       if (i != 4 && request_dma(i, "xen") != 0)
+                               BUG();
        }
 
        if (!is_initial_xendomain()) {
diff -r 41b7a0d7c2ad -r 60d8f0befd18 drivers/block/floppy.c
--- a/drivers/block/floppy.c    Sun Aug 12 15:04:04 2007 -0600
+++ b/drivers/block/floppy.c    Thu Aug 16 10:58:46 2007 -0600
@@ -4392,11 +4392,15 @@ static int floppy_grab_irq_and_dma(void)
        if (fd_request_dma()) {
                DPRINT("Unable to grab DMA%d for the floppy driver\n",
                       FLOPPY_DMA);
-               fd_free_irq();
-               spin_lock_irqsave(&floppy_usage_lock, flags);
-               usage_count--;
-               spin_unlock_irqrestore(&floppy_usage_lock, flags);
-               return -1;
+               if (can_use_virtual_dma & 2)
+                       use_virtual_dma = can_use_virtual_dma = 1;
+               if (!(can_use_virtual_dma & 1)) {
+                       fd_free_irq();
+                       spin_lock_irqsave(&floppy_usage_lock, flags);
+                       usage_count--;
+                       spin_unlock_irqrestore(&floppy_usage_lock, flags);
+                       return -1;
+               }
        }
 
        for (fdc = 0; fdc < N_FDC; fdc++) {
diff -r 41b7a0d7c2ad -r 60d8f0befd18 drivers/pnp/manager.c
--- a/drivers/pnp/manager.c     Sun Aug 12 15:04:04 2007 -0600
+++ b/drivers/pnp/manager.c     Thu Aug 16 10:58:46 2007 -0600
@@ -168,7 +168,7 @@ static int pnp_assign_irq(struct pnp_dev
        return 0;
 }
 
-static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
+static void pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
 {
        resource_size_t *start, *end;
        unsigned long *flags;
@@ -179,18 +179,14 @@ static int pnp_assign_dma(struct pnp_dev
                1, 3, 5, 6, 7, 0, 2, 4
        };
 
-       if (!dev || !rule)
-               return -EINVAL;
-
        if (idx >= PNP_MAX_DMA) {
                pnp_err("More than 2 dmas is incompatible with pnp 
specifications.");
-               /* pretend we were successful so at least the manager won't try 
again */
-               return 1;
+               return;
        }
 
        /* check if this resource has been manually set, if so skip */
        if (!(dev->res.dma_resource[idx].flags & IORESOURCE_AUTO))
-               return 1;
+               return;
 
        start = &dev->res.dma_resource[idx].start;
        end = &dev->res.dma_resource[idx].end;
@@ -199,20 +195,18 @@ static int pnp_assign_dma(struct pnp_dev
        /* set the initial values */
        *flags |= rule->flags | IORESOURCE_DMA;
        *flags &=  ~IORESOURCE_UNSET;
-
-       if (!rule->map) {
-               *flags |= IORESOURCE_DISABLED;
-               return 1; /* skip disabled resource requests */
-       }
 
        for (i = 0; i < 8; i++) {
                if(rule->map & (1<<xtab[i])) {
                        *start = *end = xtab[i];
                        if(pnp_check_dma(dev, idx))
-                               return 1;
-               }
-       }
-       return 0;
+                               return;
+               }
+       }
+#ifdef MAX_DMA_CHANNELS
+       *start = *end = MAX_DMA_CHANNELS;
+#endif
+       *flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
 }
 
 /**
@@ -331,8 +325,7 @@ static int pnp_assign_resources(struct p
                        irq = irq->next;
                }
                while (dma) {
-                       if (!pnp_assign_dma(dev, dma, ndma))
-                               goto fail;
+                       pnp_assign_dma(dev, dma, ndma);
                        ndma++;
                        dma = dma->next;
                }
@@ -367,8 +360,7 @@ static int pnp_assign_resources(struct p
                        irq = irq->next;
                }
                while (dma) {
-                       if (!pnp_assign_dma(dev, dma, ndma))
-                               goto fail;
+                       pnp_assign_dma(dev, dma, ndma);
                        ndma++;
                        dma = dma->next;
                }
diff -r 41b7a0d7c2ad -r 60d8f0befd18 drivers/xen/core/reboot.c
--- a/drivers/xen/core/reboot.c Sun Aug 12 15:04:04 2007 -0600
+++ b/drivers/xen/core/reboot.c Thu Aug 16 10:58:46 2007 -0600
@@ -7,7 +7,10 @@
 #include <linux/sysrq.h>
 #include <asm/hypervisor.h>
 #include <xen/xenbus.h>
+#include <linux/kmod.h>
 #include <linux/kthread.h>
+#include <linux/slab.h>
+#include <linux/workqueue.h>
 
 #ifdef HAVE_XEN_PLATFORM_COMPAT_H
 #include <xen/platform-compat.h>
diff -r 41b7a0d7c2ad -r 60d8f0befd18 drivers/xen/core/xencomm.c
--- a/drivers/xen/core/xencomm.c        Sun Aug 12 15:04:04 2007 -0600
+++ b/drivers/xen/core/xencomm.c        Thu Aug 16 10:58:46 2007 -0600
@@ -23,6 +23,9 @@
 #include <asm/page.h>
 #include <xen/xencomm.h>
 #include <xen/interface/xen.h>
+#ifdef __ia64__
+#include <asm/xen/xencomm.h>   /* for is_kern_addr() */
+#endif
 
 static int xencomm_init(struct xencomm_desc *desc,
                        void *buffer, unsigned long bytes)
@@ -80,7 +83,7 @@ static struct xencomm_desc *xencomm_allo
        return desc;
 }
 
-void xencomm_free(void *desc)
+void xencomm_free(struct xencomm_handle *desc)
 {
        if (desc && !((ulong)desc & XENCOMM_INLINE_FLAG))
                free_page((unsigned long)__va(desc));
@@ -111,7 +114,7 @@ static int xencomm_create(void *buffer, 
        rc = xencomm_init(desc, buffer, bytes);
        if (rc) {
                printk("%s failure: %d\n", "xencomm_init", rc);
-               xencomm_free(desc);
+               xencomm_free((struct xencomm_handle *)__pa(desc));
                return rc;
        }
 
@@ -128,7 +131,7 @@ static int is_phys_contiguous(unsigned l
        return (addr < VMALLOC_START) || (addr >= VMALLOC_END);
 }
 
-static void *xencomm_create_inline(void *ptr)
+static struct xencomm_handle *xencomm_create_inline(void *ptr)
 {
        unsigned long paddr;
 
@@ -136,7 +139,7 @@ static void *xencomm_create_inline(void 
 
        paddr = (unsigned long)xencomm_pa(ptr);
        BUG_ON(paddr & XENCOMM_INLINE_FLAG);
-       return (void *)(paddr | XENCOMM_INLINE_FLAG);
+       return (struct xencomm_handle *)(paddr | XENCOMM_INLINE_FLAG);
 }
 
 /* "mini" routine, for stack-based communications: */
@@ -146,6 +149,7 @@ static int xencomm_create_mini(void *buf
 {
        int rc = 0;
        struct xencomm_desc *desc;
+       BUG_ON(((unsigned long)xc_desc) % sizeof(*xc_desc) != 0);
 
        desc = (void *)xc_desc; 
 
@@ -157,7 +161,7 @@ static int xencomm_create_mini(void *buf
        return rc;
 }
 
-void *xencomm_map(void *ptr, unsigned long bytes)
+struct xencomm_handle *xencomm_map(void *ptr, unsigned long bytes)
 {
        int rc;
        struct xencomm_desc *desc;
@@ -170,10 +174,10 @@ void *xencomm_map(void *ptr, unsigned lo
        if (rc || desc == NULL)
                return NULL;
 
-       return (void *)__pa(desc);
+       return xencomm_pa(desc);
 }
 
-void *__xencomm_map_no_alloc(void *ptr, unsigned long bytes, 
+struct xencomm_handle *__xencomm_map_no_alloc(void *ptr, unsigned long bytes, 
                        struct xencomm_mini *xc_desc)
 {
        int rc;
@@ -188,5 +192,5 @@ void *__xencomm_map_no_alloc(void *ptr, 
        if (rc)
                return NULL;
  
-       return (void *)__pa(desc);
+       return xencomm_pa(desc);
 }
diff -r 41b7a0d7c2ad -r 60d8f0befd18 drivers/xen/netfront/netfront.c
--- a/drivers/xen/netfront/netfront.c   Sun Aug 12 15:04:04 2007 -0600
+++ b/drivers/xen/netfront/netfront.c   Thu Aug 16 10:58:46 2007 -0600
@@ -99,6 +99,7 @@ static const int MODPARM_rx_flip = 0;
 #if defined(NETIF_F_GSO)
 #define HAVE_GSO                       1
 #define HAVE_TSO                       1 /* TSO is a subset of GSO */
+#define HAVE_CSUM_OFFLOAD              1
 static inline void dev_disable_gso_features(struct net_device *dev)
 {
        /* Turn off all GSO bits except ROBUST. */
@@ -106,6 +107,7 @@ static inline void dev_disable_gso_featu
        dev->features |= NETIF_F_GSO_ROBUST;
 }
 #elif defined(NETIF_F_TSO)
+#define HAVE_GSO                      0
 #define HAVE_TSO                       1
 
 /* Some older kernels cannot cope with incorrect checksums,
@@ -113,7 +115,7 @@ static inline void dev_disable_gso_featu
  * with the presence of NETIF_F_TSO but it appears to be a good first
  * approximiation.
  */
-#define HAVE_NO_CSUM_OFFLOAD           1
+#define HAVE_CSUM_OFFLOAD              0
 
 #define gso_size tso_size
 #define gso_segs tso_segs
@@ -138,8 +140,12 @@ static inline int netif_needs_gso(struct
                 unlikely(skb->ip_summed != CHECKSUM_HW));
 }
 #else
+#define HAVE_GSO                       0
+#define HAVE_TSO                       0
+#define HAVE_CSUM_OFFLOAD              0
 #define netif_needs_gso(dev, skb)      0
 #define dev_disable_gso_features(dev)  ((void)0)
+#define ethtool_op_set_tso(dev, data)  (-ENOSYS)
 #endif
 
 #define GRANT_INVALID_REF      0
@@ -412,13 +418,12 @@ again:
                goto abort_transaction;
        }
 
-#ifdef HAVE_NO_CSUM_OFFLOAD
-       err = xenbus_printf(xbt, dev->nodename, "feature-no-csum-offload", 
"%d", 1);
+       err = xenbus_printf(xbt, dev->nodename, "feature-no-csum-offload",
+                           "%d", !HAVE_CSUM_OFFLOAD);
        if (err) {
                message = "writing feature-no-csum-offload";
                goto abort_transaction;
        }
-#endif
 
        err = xenbus_printf(xbt, dev->nodename, "feature-sg", "%d", 1);
        if (err) {
@@ -426,13 +431,12 @@ again:
                goto abort_transaction;
        }
 
-#ifdef HAVE_TSO
-       err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", "%d", 1);
+       err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", "%d",
+                           HAVE_TSO);
        if (err) {
                message = "writing feature-gso-tcpv4";
                goto abort_transaction;
        }
-#endif
 
        err = xenbus_transaction_end(xbt, 0);
        if (err) {
@@ -983,7 +987,7 @@ static int network_start_xmit(struct sk_
                tx->flags |= NETTXF_data_validated;
 #endif
 
-#ifdef HAVE_TSO
+#if HAVE_TSO
        if (skb_shinfo(skb)->gso_size) {
                struct netif_extra_info *gso = (struct netif_extra_info *)
                        RING_GET_REQUEST(&np->tx, ++i);
@@ -1013,15 +1017,16 @@ static int network_start_xmit(struct sk_
        if (notify)
                notify_remote_via_irq(np->irq);
 
+       np->stats.tx_bytes += skb->len;
+       np->stats.tx_packets++;
+
+       /* Note: It is not safe to access skb after network_tx_buf_gc()! */
        network_tx_buf_gc(dev);
 
        if (!netfront_tx_slot_available(np))
                netif_stop_queue(dev);
 
        spin_unlock_irq(&np->tx_lock);
-
-       np->stats.tx_bytes += skb->len;
-       np->stats.tx_packets++;
 
        return 0;
 
@@ -1279,9 +1284,9 @@ static int xennet_set_skb_gso(struct sk_
                return -EINVAL;
        }
 
-#ifdef HAVE_TSO
+#if HAVE_TSO
        skb_shinfo(skb)->gso_size = gso->u.gso.size;
-#ifdef HAVE_GSO
+#if HAVE_GSO
        skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
 
        /* Header must be checked, and gso_segs computed. */
@@ -1701,7 +1706,6 @@ static int xennet_set_sg(struct net_devi
 
 static int xennet_set_tso(struct net_device *dev, u32 data)
 {
-#ifdef HAVE_TSO
        if (data) {
                struct netfront_info *np = netdev_priv(dev);
                int val;
@@ -1714,9 +1718,6 @@ static int xennet_set_tso(struct net_dev
        }
 
        return ethtool_op_set_tso(dev, data);
-#else
-       return -ENOSYS;
-#endif
 }
 
 static void xennet_set_features(struct net_device *dev)
@@ -1734,10 +1735,8 @@ static void xennet_set_features(struct n
        /* Before 2.6.9 TSO seems to be unreliable so do not enable it
         * on older kernels.
         */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,9)
-       xennet_set_tso(dev, 1);
-#endif
-
+       if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,9))
+               xennet_set_tso(dev, 1);
 }
 
 static int network_connect(struct net_device *dev)
@@ -1865,8 +1864,10 @@ static struct ethtool_ops network_ethtoo
        .set_tx_csum = ethtool_op_set_tx_csum,
        .get_sg = ethtool_op_get_sg,
        .set_sg = xennet_set_sg,
+#if HAVE_TSO
        .get_tso = ethtool_op_get_tso,
        .set_tso = xennet_set_tso,
+#endif
        .get_link = ethtool_op_get_link,
 };
 
diff -r 41b7a0d7c2ad -r 60d8f0befd18 drivers/xen/xenbus/xenbus_client.c
--- a/drivers/xen/xenbus/xenbus_client.c        Sun Aug 12 15:04:04 2007 -0600
+++ b/drivers/xen/xenbus/xenbus_client.c        Thu Aug 16 10:58:46 2007 -0600
@@ -30,6 +30,7 @@
  * IN THE SOFTWARE.
  */
 
+#include <linux/slab.h>
 #include <xen/evtchn.h>
 #include <xen/gnttab.h>
 #include <xen/xenbus.h>
diff -r 41b7a0d7c2ad -r 60d8f0befd18 drivers/xen/xenbus/xenbus_comms.c
--- a/drivers/xen/xenbus/xenbus_comms.c Sun Aug 12 15:04:04 2007 -0600
+++ b/drivers/xen/xenbus/xenbus_comms.c Thu Aug 16 10:58:46 2007 -0600
@@ -35,6 +35,7 @@
 #include <linux/sched.h>
 #include <linux/err.h>
 #include <linux/ptrace.h>
+#include <linux/workqueue.h>
 #include <xen/evtchn.h>
 #include <xen/xenbus.h>
 
diff -r 41b7a0d7c2ad -r 60d8f0befd18 drivers/xen/xenbus/xenbus_probe.c
--- a/drivers/xen/xenbus/xenbus_probe.c Sun Aug 12 15:04:04 2007 -0600
+++ b/drivers/xen/xenbus/xenbus_probe.c Thu Aug 16 10:58:46 2007 -0600
@@ -43,6 +43,7 @@
 #include <linux/mm.h>
 #include <linux/notifier.h>
 #include <linux/mutex.h>
+#include <linux/module.h>
 
 #include <asm/io.h>
 #include <asm/page.h>
diff -r 41b7a0d7c2ad -r 60d8f0befd18 include/asm-i386/mach-xen/asm/floppy.h
--- a/include/asm-i386/mach-xen/asm/floppy.h    Sun Aug 12 15:04:04 2007 -0600
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
- * Architecture specific parts of the Floppy driver
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1995
- *
- * Modifications for Xen are Copyright (c) 2004, Keir Fraser.
- */
-#ifndef __ASM_XEN_I386_FLOPPY_H
-#define __ASM_XEN_I386_FLOPPY_H
-
-#include <linux/vmalloc.h>
-
-/* XEN: Hit DMA paths on the head. This trick from asm-m68k/floppy.h. */
-#include <asm/dma.h>
-#undef MAX_DMA_ADDRESS
-#define MAX_DMA_ADDRESS 0
-#define CROSS_64KB(a,s) (0)
-
-#define fd_inb(port)                   inb_p(port)
-#define fd_outb(value,port)            outb_p(value,port)
-
-#define fd_request_dma()        (0)
-#define fd_free_dma()           ((void)0)
-#define fd_enable_irq()         enable_irq(FLOPPY_IRQ)
-#define fd_disable_irq()        disable_irq(FLOPPY_IRQ)
-#define fd_free_irq()          free_irq(FLOPPY_IRQ, NULL)
-#define fd_get_dma_residue()    (virtual_dma_count + virtual_dma_residue)
-#define fd_dma_setup(addr, size, mode, io) vdma_dma_setup(addr, size, mode, io)
-/*
- * Do not use vmalloc/vfree: floppy_release_irq_and_dma() gets called from
- * softirq context via motor_off_callback. A generic bug we happen to trigger.
- */
-#define fd_dma_mem_alloc(size) __get_free_pages(GFP_KERNEL, get_order(size))
-#define fd_dma_mem_free(addr, size) free_pages(addr, get_order(size))
-
-static int virtual_dma_count;
-static int virtual_dma_residue;
-static char *virtual_dma_addr;
-static int virtual_dma_mode;
-static int doing_pdma;
-
-static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs)
-{
-       register unsigned char st;
-       register int lcount;
-       register char *lptr;
-
-       if (!doing_pdma)
-               return floppy_interrupt(irq, dev_id, regs);
-
-       st = 1;
-       for(lcount=virtual_dma_count, lptr=virtual_dma_addr; 
-           lcount; lcount--, lptr++) {
-               st=inb(virtual_dma_port+4) & 0xa0 ;
-               if(st != 0xa0) 
-                       break;
-               if(virtual_dma_mode)
-                       outb_p(*lptr, virtual_dma_port+5);
-               else
-                       *lptr = inb_p(virtual_dma_port+5);
-       }
-       virtual_dma_count = lcount;
-       virtual_dma_addr = lptr;
-       st = inb(virtual_dma_port+4);
-
-       if(st == 0x20)
-               return IRQ_HANDLED;
-       if(!(st & 0x20)) {
-               virtual_dma_residue += virtual_dma_count;
-               virtual_dma_count=0;
-               doing_pdma = 0;
-               floppy_interrupt(irq, dev_id, regs);
-               return IRQ_HANDLED;
-       }
-       return IRQ_HANDLED;
-}
-
-static void fd_disable_dma(void)
-{
-       doing_pdma = 0;
-       virtual_dma_residue += virtual_dma_count;
-       virtual_dma_count=0;
-}
-
-static int fd_request_irq(void)
-{
-       return request_irq(FLOPPY_IRQ, floppy_hardint,
-                          IRQF_DISABLED, "floppy", NULL);
-}
-
-static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io)
-{
-       doing_pdma = 1;
-       virtual_dma_port = io;
-       virtual_dma_mode = (mode  == DMA_MODE_WRITE);
-       virtual_dma_addr = addr;
-       virtual_dma_count = size;
-       virtual_dma_residue = 0;
-       return 0;
-}
-
-/* XEN: This trick to force 'virtual DMA' is from include/asm-m68k/floppy.h. */
-#define FDC1 xen_floppy_init()
-static int FDC2 = -1;
-
-static int xen_floppy_init(void)
-{
-       use_virtual_dma = 1;
-       can_use_virtual_dma = 1;
-       return 0x3f0;
-}
-
-/*
- * Floppy types are stored in the rtc's CMOS RAM and so rtc_lock
- * is needed to prevent corrupted CMOS RAM in case "insmod floppy"
- * coincides with another rtc CMOS user.               Paul G.
- */
-#define FLOPPY0_TYPE   ({                              \
-       unsigned long flags;                            \
-       unsigned char val;                              \
-       spin_lock_irqsave(&rtc_lock, flags);            \
-       val = (CMOS_READ(0x10) >> 4) & 15;              \
-       spin_unlock_irqrestore(&rtc_lock, flags);       \
-       val;                                            \
-})
-
-#define FLOPPY1_TYPE   ({                              \
-       unsigned long flags;                            \
-       unsigned char val;                              \
-       spin_lock_irqsave(&rtc_lock, flags);            \
-       val = CMOS_READ(0x10) & 15;                     \
-       spin_unlock_irqrestore(&rtc_lock, flags);       \
-       val;                                            \
-})
-
-#define N_FDC 2
-#define N_DRIVE 8
-
-#define FLOPPY_MOTOR_MASK 0xf0
-
-#define EXTRA_FLOPPY_PARAMS
-
-#endif /* __ASM_XEN_I386_FLOPPY_H */
diff -r 41b7a0d7c2ad -r 60d8f0befd18 include/asm-i386/mach-xen/asm/hypercall.h
--- a/include/asm-i386/mach-xen/asm/hypercall.h Sun Aug 12 15:04:04 2007 -0600
+++ b/include/asm-i386/mach-xen/asm/hypercall.h Thu Aug 16 10:58:46 2007 -0600
@@ -34,6 +34,7 @@
 #define __HYPERCALL_H__
 
 #include <linux/string.h> /* memcpy() */
+#include <linux/stringify.h>
 
 #ifndef __HYPERVISOR_H__
 # error "please don't include this file directly"
@@ -47,7 +48,7 @@
        "call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)"
 #else
 #define HYPERCALL_STR(name)                                    \
-       "mov hypercall_stubs,%%eax; "                           \
+       "mov "__stringify(hypercall_stubs)",%%eax; "            \
        "add $("STR(__HYPERVISOR_##name)" * 32),%%eax; "        \
        "call *%%eax"
 #endif
diff -r 41b7a0d7c2ad -r 60d8f0befd18 include/asm-i386/mach-xen/asm/io.h
--- a/include/asm-i386/mach-xen/asm/io.h        Sun Aug 12 15:04:04 2007 -0600
+++ b/include/asm-i386/mach-xen/asm/io.h        Thu Aug 16 10:58:46 2007 -0600
@@ -151,7 +151,7 @@ extern void bt_iounmap(void *addr, unsig
 /*
  * ISA I/O bus memory addresses are 1:1 with the physical address.
  */
-#define isa_virt_to_bus(_x) isa_virt_to_bus_is_UNSUPPORTED->x
+#define isa_virt_to_bus(_x) ({ BUG(); virt_to_bus(_x); })
 #define isa_page_to_bus(_x) isa_page_to_bus_is_UNSUPPORTED->x
 #define isa_bus_to_virt(_x) (void *)(__fix_to_virt(FIX_ISAMAP_BEGIN) + (_x))
 
diff -r 41b7a0d7c2ad -r 60d8f0befd18 include/asm-x86_64/mach-xen/asm/floppy.h
--- a/include/asm-x86_64/mach-xen/asm/floppy.h  Sun Aug 12 15:04:04 2007 -0600
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,206 +0,0 @@
-/*
- * Architecture specific parts of the Floppy driver
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1995
- *
- * Modifications for Xen are Copyright (c) 2004, Keir Fraser.
- */
-#ifndef __ASM_XEN_X86_64_FLOPPY_H
-#define __ASM_XEN_X86_64_FLOPPY_H
-
-#include <linux/vmalloc.h>
-
-/*
- * The DMA channel used by the floppy controller cannot access data at
- * addresses >= 16MB
- *
- * Went back to the 1MB limit, as some people had problems with the floppy
- * driver otherwise. It doesn't matter much for performance anyway, as most
- * floppy accesses go through the track buffer.
- */
-#define _CROSS_64KB(a,s,vdma) \
-(!(vdma) && ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64))
-
-/* XEN: Hit DMA paths on the head. This trick from asm-m68k/floppy.h. */
-#include <asm/dma.h>
-#undef MAX_DMA_ADDRESS
-#define MAX_DMA_ADDRESS 0
-#define CROSS_64KB(a,s) (0)
-
-#define fd_inb(port)                   inb_p(port)
-#define fd_outb(value,port)            outb_p(value,port)
-
-#define fd_request_dma()        (0)
-#define fd_free_dma()           ((void)0)
-#define fd_enable_irq()         enable_irq(FLOPPY_IRQ)
-#define fd_disable_irq()        disable_irq(FLOPPY_IRQ)
-#define fd_free_irq()          free_irq(FLOPPY_IRQ, NULL)
-#define fd_get_dma_residue()    vdma_get_dma_residue(FLOPPY_DMA)
-/*
- * Do not use vmalloc/vfree: floppy_release_irq_and_dma() gets called from
- * softirq context via motor_off_callback. A generic bug we happen to trigger.
- */
-#define fd_dma_mem_alloc(size) __get_free_pages(GFP_KERNEL|__GFP_NORETRY, 
get_order(size))
-#define fd_dma_mem_free(addr, size) free_pages(addr, get_order(size))
-#define fd_dma_setup(addr, size, mode, io) vdma_dma_setup(addr, size, mode, io)
-
-static int virtual_dma_count;
-static int virtual_dma_residue;
-static char *virtual_dma_addr;
-static int virtual_dma_mode;
-static int doing_pdma;
-
-static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs)
-{
-       register unsigned char st;
-
-#undef TRACE_FLPY_INT
-
-#ifdef TRACE_FLPY_INT
-       static int calls=0;
-       static int bytes=0;
-       static int dma_wait=0;
-#endif
-       if (!doing_pdma)
-               return floppy_interrupt(irq, dev_id, regs);
-
-#ifdef TRACE_FLPY_INT
-       if(!calls)
-               bytes = virtual_dma_count;
-#endif
-
-       {
-               register int lcount;
-               register char *lptr;
-
-               st = 1;
-               for(lcount=virtual_dma_count, lptr=virtual_dma_addr; 
-                   lcount; lcount--, lptr++) {
-                       st=inb(virtual_dma_port+4) & 0xa0 ;
-                       if(st != 0xa0) 
-                               break;
-                       if(virtual_dma_mode)
-                               outb_p(*lptr, virtual_dma_port+5);
-                       else
-                               *lptr = inb_p(virtual_dma_port+5);
-               }
-               virtual_dma_count = lcount;
-               virtual_dma_addr = lptr;
-               st = inb(virtual_dma_port+4);
-       }
-
-#ifdef TRACE_FLPY_INT
-       calls++;
-#endif
-       if(st == 0x20)
-               return IRQ_HANDLED;
-       if(!(st & 0x20)) {
-               virtual_dma_residue += virtual_dma_count;
-               virtual_dma_count=0;
-#ifdef TRACE_FLPY_INT
-               printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", 
-                      virtual_dma_count, virtual_dma_residue, calls, bytes,
-                      dma_wait);
-               calls = 0;
-               dma_wait=0;
-#endif
-               doing_pdma = 0;
-               floppy_interrupt(irq, dev_id, regs);
-               return IRQ_HANDLED;
-       }
-#ifdef TRACE_FLPY_INT
-       if(!virtual_dma_count)
-               dma_wait++;
-#endif
-       return IRQ_HANDLED;
-}
-
-static void fd_disable_dma(void)
-{
-       doing_pdma = 0;
-       virtual_dma_residue += virtual_dma_count;
-       virtual_dma_count=0;
-}
-
-static int vdma_get_dma_residue(unsigned int dummy)
-{
-       return virtual_dma_count + virtual_dma_residue;
-}
-
-
-static int fd_request_irq(void)
-{
-       return request_irq(FLOPPY_IRQ, floppy_hardint,
-                          IRQF_DISABLED, "floppy", NULL);
-}
-
-#if 0
-static unsigned long vdma_mem_alloc(unsigned long size)
-{
-       return (unsigned long) vmalloc(size);
-
-}
-
-static void vdma_mem_free(unsigned long addr, unsigned long size)
-{
-       vfree((void *)addr);
-}
-#endif
-
-static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io)
-{
-       doing_pdma = 1;
-       virtual_dma_port = io;
-       virtual_dma_mode = (mode  == DMA_MODE_WRITE);
-       virtual_dma_addr = addr;
-       virtual_dma_count = size;
-       virtual_dma_residue = 0;
-       return 0;
-}
-
-/* XEN: This trick to force 'virtual DMA' is from include/asm-m68k/floppy.h. */
-#define FDC1 xen_floppy_init()
-static int FDC2 = -1;
-
-static int xen_floppy_init(void)
-{
-       use_virtual_dma = 1;
-       can_use_virtual_dma = 1;
-       return 0x3f0;
-}
-
-/*
- * Floppy types are stored in the rtc's CMOS RAM and so rtc_lock
- * is needed to prevent corrupted CMOS RAM in case "insmod floppy"
- * coincides with another rtc CMOS user.               Paul G.
- */
-#define FLOPPY0_TYPE   ({                              \
-       unsigned long flags;                            \
-       unsigned char val;                              \
-       spin_lock_irqsave(&rtc_lock, flags);            \
-       val = (CMOS_READ(0x10) >> 4) & 15;              \
-       spin_unlock_irqrestore(&rtc_lock, flags);       \
-       val;                                            \
-})
-
-#define FLOPPY1_TYPE   ({                              \
-       unsigned long flags;                            \
-       unsigned char val;                              \
-       spin_lock_irqsave(&rtc_lock, flags);            \
-       val = CMOS_READ(0x10) & 15;                     \
-       spin_unlock_irqrestore(&rtc_lock, flags);       \
-       val;                                            \
-})
-
-#define N_FDC 2
-#define N_DRIVE 8
-
-#define FLOPPY_MOTOR_MASK 0xf0
-
-#define EXTRA_FLOPPY_PARAMS
-
-#endif /* __ASM_XEN_X86_64_FLOPPY_H */
diff -r 41b7a0d7c2ad -r 60d8f0befd18 include/asm-x86_64/mach-xen/asm/hypercall.h
--- a/include/asm-x86_64/mach-xen/asm/hypercall.h       Sun Aug 12 15:04:04 
2007 -0600
+++ b/include/asm-x86_64/mach-xen/asm/hypercall.h       Thu Aug 16 10:58:46 
2007 -0600
@@ -38,6 +38,7 @@
 #define __HYPERCALL_H__
 
 #include <linux/string.h> /* memcpy() */
+#include <linux/stringify.h>
 
 #ifndef __HYPERVISOR_H__
 # error "please don't include this file directly"
@@ -51,7 +52,7 @@
        "call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)"
 #else
 #define HYPERCALL_STR(name)                                    \
-       "mov hypercall_stubs,%%rax; "                           \
+       "mov "__stringify(hypercall_stubs)",%%rax; "            \
        "add $("STR(__HYPERVISOR_##name)" * 32),%%rax; "        \
        "call *%%rax"
 #endif
diff -r 41b7a0d7c2ad -r 60d8f0befd18 include/asm-x86_64/mach-xen/asm/io.h
--- a/include/asm-x86_64/mach-xen/asm/io.h      Sun Aug 12 15:04:04 2007 -0600
+++ b/include/asm-x86_64/mach-xen/asm/io.h      Thu Aug 16 10:58:46 2007 -0600
@@ -167,7 +167,7 @@ extern void iounmap(volatile void __iome
  * ISA I/O bus memory addresses are 1:1 with the physical address.
  */
 
-#define isa_virt_to_bus(_x) isa_virt_to_bus_is_UNSUPPORTED->x
+#define isa_virt_to_bus(_x) ({ BUG(); virt_to_bus(_x); })
 #define isa_page_to_bus(_x) isa_page_to_bus_is_UNSUPPORTED->x
 #define isa_bus_to_virt(_x) (void *)(__fix_to_virt(FIX_ISAMAP_BEGIN) + (_x))
 
diff -r 41b7a0d7c2ad -r 60d8f0befd18 include/xen/cpu_hotplug.h
--- a/include/xen/cpu_hotplug.h Sun Aug 12 15:04:04 2007 -0600
+++ b/include/xen/cpu_hotplug.h Thu Aug 16 10:58:46 2007 -0600
@@ -6,9 +6,6 @@
 
 #if defined(CONFIG_X86) && defined(CONFIG_SMP)
 extern cpumask_t cpu_initialized_map;
-#define cpu_set_initialized(cpu) cpu_set(cpu, cpu_initialized_map)
-#else
-#define cpu_set_initialized(cpu) ((void)0)
 #endif
 
 #if defined(CONFIG_HOTPLUG_CPU)
diff -r 41b7a0d7c2ad -r 60d8f0befd18 include/xen/xencomm.h
--- a/include/xen/xencomm.h     Sun Aug 12 15:04:04 2007 -0600
+++ b/include/xen/xencomm.h     Thu Aug 16 10:58:46 2007 -0600
@@ -30,15 +30,39 @@ struct xencomm_mini {
        uint64_t address[XENCOMM_MINI_ADDRS];
 };
 
-extern void xencomm_free(void *desc);
-extern void *xencomm_map(void *ptr, unsigned long bytes);
-extern void *__xencomm_map_no_alloc(void *ptr, unsigned long bytes, 
-                               struct xencomm_mini *xc_area);
+/* To avoid additionnal virt to phys conversion, an opaque structure is
+   presented.  */
+struct xencomm_handle;
 
-#define xencomm_map_no_alloc(ptr, bytes) \
-       ({struct xencomm_mini xc_desc\
-               __attribute__((__aligned__(sizeof(struct xencomm_mini))));\
-               __xencomm_map_no_alloc(ptr, bytes, &xc_desc);})
+extern void xencomm_free(struct xencomm_handle *desc);
+extern struct xencomm_handle *xencomm_map(void *ptr, unsigned long bytes);
+extern struct xencomm_handle *__xencomm_map_no_alloc(void *ptr,
+                       unsigned long bytes,  struct xencomm_mini *xc_area);
+
+#if 0
+#define XENCOMM_MINI_ALIGNED(xc_desc, n)                               \
+       struct xencomm_mini xc_desc ## _base[(n)]                       \
+       __attribute__((__aligned__(sizeof(struct xencomm_mini))));      \
+       struct xencomm_mini* xc_desc = &xc_desc ## _base[0];
+#else
+/*
+ * gcc bug workaround:
+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16660
+ * gcc doesn't handle properly stack variable with
+ * __attribute__((__align__(sizeof(struct xencomm_mini))))
+ */
+#define XENCOMM_MINI_ALIGNED(xc_desc, n)                               \
+       unsigned char xc_desc ## _base[((n) + 1 ) *                     \
+                                      sizeof(struct xencomm_mini)];    \
+       struct xencomm_mini *xc_desc = (struct xencomm_mini*)           \
+               ((unsigned long)xc_desc ## _base +                      \
+                (sizeof(struct xencomm_mini) -                         \
+                 ((unsigned long)xc_desc ## _base) %                   \
+                 sizeof(struct xencomm_mini)));
+#endif
+#define xencomm_map_no_alloc(ptr, bytes)                       \
+       ({XENCOMM_MINI_ALIGNED(xc_desc, 1);                     \
+               __xencomm_map_no_alloc(ptr, bytes, xc_desc);})
 
 /* provided by architecture code: */
 extern unsigned long xencomm_vtop(unsigned long vaddr);
@@ -48,4 +72,6 @@ static inline void *xencomm_pa(void *ptr
        return (void *)xencomm_vtop((unsigned long)ptr);
 }
 
+#define xen_guest_handle(hnd)  ((hnd).p)
+
 #endif /* _LINUX_XENCOMM_H_ */

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


 


Rackspace

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